Skip to content

2026.10.27.1: platforms (SPEC-013) -- ok images need no declaration; packaging and distribution (SPEC-014) -- three axes, universal packages, single files, okb - #847

Merged
Sunrisepeak merged 54 commits into
mainfrom
release/2026.10.27.1
Oct 28, 2026
Merged

Sunrisepeak merged 54 commits into
mainfrom
release/2026.10.27.1

Conversation

@Sunrisepeak

@Sunrisepeak Sunrisepeak commented Oct 27, 2026 •

Copy link
Copy Markdown
Member

Platforms (SPEC-013)

A package's [platform] states the configuration of a class of targets: targets, toolchain, sysroot, runner, carrier, plugin, universal, layers (C library, C++ and compiler run-time), tools, build flags (with cfg tables), link (driver, flags, start, script, inputs, naming, seal), versions (a version group), and hosted for host triples. The engine selects it (flag > env > [target.<sel>] platform > config.toml > the target table), completes the graph with its layers and tools, compiles, links, seals and runs with it, and carries it in mcpp pack. [target.<sel>] tables, [host] and protocol-17 directives (link-driver, link-input, artifact-name, seal, run-host) are synonymous forms; the platform phase restricts a platform's plugin. The host graph may take a platform: build programs and their libraries are built as images and run by its runner. openkal leaves the engine: x86_64-openkal and aarch64-openkal select mcpplibs.openkal-platform from the target table, and a project for an ok image declares nothing but its sources.

Also: --platform / --host-platform; mcpp self env --target/--host; mcpp toolchain install --target; a PLATFORM column in toolchain list; origin = "platform" in mcpp.lock; the plan event and result record carry platform / hostPlatform; refusal codes platform-*; mcpp explain <token>; L4 (the index revision and its refresh decision), L5 (mcpp test builds package programs first, MCPP_BIN_<NAME>), L6 (one package line per command).

Packaging and distribution (SPEC-014)

  • Three axes: --linkage static|shared, --mode system|vendored|self-contained (--mode static = --linkage static --mode self-contained), --pkg-format tar|zip|dir|single-file|<provided>; --format on pack/run is the earlier spelling and warns. [pack] linkage/format/compress/sign/universal.
  • --compress gzip|zstd|xz|none[:level] in mcpp's own codecs (compat.zlib, compat.zstd, compat.xz); a zip's members deflated.
  • Universal packages: a platform that states universal = true packs all its targets into one package (lib/<arch>/, generated launchers, libexec/<runner>/<os>-<arch>/ per --systems when self-contained).
  • Single files: the engine's launcher over a zstd tree (extracted once into the user's cache by sha256), or the platform's carrier over an image or a zip of images (run from memory).
  • mcpp-package.json in every tree; [pack] sign; --merge; mcpp emit xpkg --package (an xim-pkgindex entry, one asset for every system for a universal package); pack formats and artifact actions from the platform phase (openkal-platform's okb).
  • mcpp pack --message-format json: linkage, mode, pkgFormat, legs, systems, artifacts[].sha256.

Fixes found on the way

  • A version the local index lacks is refreshed for at install; no compat guess for a read descriptor (the first commit of this PR).
  • A prepare's state is on the heap: three nested prepares overflowed a Windows main thread's stack.
  • A payload that ships lld-link alone (Windows) links ELF with -flavor gnu; a runner the platform names is its tool's program; a bare runner name on Windows takes .exe.
  • A build program's cached run is replayed only while the paths it named below its output directory exist.
  • [pack] include / exclude are staged (documented, not read before).

Tests

Unit: test_platform, test_pack_distribution, protocol 17 directives, progress (L6). e2e: 942, 951 (zero-declaration ok images), 952 (a platform package of this machine's triples), 953 (the host graph), 954 (three axes), 955 (universal), 956 (single files), 957 (merge, emit xpkg), 958 (build program replay); the target matrix's ok-image rows.

Docs: SPEC-013 (docs/specs/platforms.md), SPEC-014 (docs/specs/packaging.md), SPEC-007 R9.10, SPEC-004; docs/35 platforms; docs/10 rewritten around the three axes; docs/04, 08, 09, 21, 22, 24, 30, 34, 41, 50 (en, zh); CHANGELOG. Design: .agents/docs/2026-10-28-platforms-design.md and its part 2.

Closes #846.

Co-authored-by: speak-agent 248744407+speak-agent@users.noreply.github.com

Sunrisepeak and others added 3 commits October 27, 2026 23:30
…ts install is refused; a package whose descriptor was read is the only one asked for

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…the shared image that reaches it

Every package providing an `mcpp:` layer was a boundary of static placement
(#646 F1), so openkal-linux/-macos/-windows went into the programs only. On a
hosted target that package is an ordinary static library over the platform's
C library (mcpplibs.os depends on it), and a shared image reaching it was left
with kal_* undefined: CPython importing an extension module built on
mcpplibs.os failed with `undefined symbol: kal_process_close`, and Mach-O and
PE refuse such a link. A kernel-abi provider is now a boundary only when a C
library of the graph (`mcpp:c-abi`) sits on it.

e2e 940: a program over a dependency's shared image; the image defines the
kernel-abi package's symbols (fails before the fix), and a program reaching
the package itself still links and runs.
Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
Sunrisepeak and others added 25 commits October 28, 2026 03:29
…ckage (SPEC-013), openkal's as the first, and the IDE line and mcppls in the same batch

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…e selects, merges, completes the graph with, links, seals, runs and carries it

The engine keeps the mechanism (SPEC-013) and no target class's knowledge:

- mcpp.manifest.platform / platform_toml: the seven groups of [platform], the
  same keys under [target.<selector>] and [host], read by one reader with the
  tier and the line of every value; cfg(platform = ...).
- mcpp.platform: selection (flag, environment, project, this machine, the
  target table), per-field merge with appended flags, the hosted view,
  artifact-name patterns, seal steps with {needed}, report rows and JSON.
- prepare: the platform package is the root's first dependency; the layers
  the graph lacks and the tools it does not build are added as the
  platform's; its version group is enforced; its toolchain stands where the
  row's pin stands; its sysroot is the base's fourth tier.
- the link reads the platform: its flags, ld.lld with its flags, its entry,
  inputs made by a program (platform-step capture), names, and seal steps run
  before an artifact is published (platform-step seal), replacing okimage-finish.
- the runner is one merged statement: platform, build programs, this machine,
  the project (any selector), MCPP_TARGET_<T>_RUNNER; runner.host = same-arch
  refuses another architecture's artifact.
- pack --mode self-contained builds the platform's carrier with the static
  row's toolchain stated (the carrier's graph no longer cancels it).
- src/okimage is removed; <arch>-openkal pins mcpplibs.openkal-platform@0.17.1.
- GCC 16.1 crashed importing mcpp.cli when mcpp.platform imported
  prepare_inputs (#848): the selector evaluator is passed in instead.

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…says origin = "platform"; protocol 17 states the platform's fields from a program, and a platform's plugin runs in the platform phase

- The Target lines mark a layer whose package the platform added as
  `platform`; a `Platform <name> <version> (<source>)` block follows with the
  tools, runner and link the platform contributes; the toolchain line says
  when the compiler is the platform's.
- A package the platform added is locked with `origin = "platform"`; a lock
  without the field reads as before.
- mcpp.core protocol 17: link_driver, link_input / link_input_from,
  artifact_name, seal, run_host -- the platform statement's fields at the
  build-program tier, validated before they apply and merged in the order the
  programs ran, the root's last.
- `[platform] plugin` runs the platform package's program with
  `mcpp::phase()` = "platform": it may state compile and link flags, the
  link's fields, and runners, nothing else (platform-phase-directive), and
  its compile flags are the platform's for every unit.

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…in install --target installs it; toolchain list has a platform column; the plan event and the result record carry platform and hostPlatform

- `mcpp self env --target <t> [--host] [--format json]` prepares the
  configuration (the project's when run in one, an empty program in the
  home's cache otherwise) and reports the compiler and who chose it, the
  platform and its source, each field's source, the tools built for this
  machine, and the runner with the program it resolves to.
- `mcpp toolchain install --target <t>` with no compiler named installs the
  toolchain, then the platform package, the packages it adds and its tools,
  so a build of <t> works with --offline afterwards.
- `mcpp toolchain list` shows each row's platform (JSON `platform`, null for
  the engine's conventions).
- The `plan` event and result.json's `configuration` carry `platform` and
  `hostPlatform` objects (name, version, source, hosted, fields).
- The commands that prepare a configuration live with the build commands:
  importing mcpp.build.prepare from cmd_self and cmd_toolchain made GCC 16.1
  crash importing mcpp.cli again (#848).

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…ages and run by its runner; a workspace's members stand on the platform's layers

- [host] platform (mcpp.toml, config.toml), --host-platform and
  MCPP_HOST_PLATFORM select the host graph's platform in the outermost
  prepare. The build programs' graph is then built for the platform's target
  of this machine's architecture, by the platform's toolchain, and each
  program runs through the platform's runner (`okrun {}`); the runner is
  recorded beside the program so a current program runs the same way. The
  group's identity is the platform's, so changing it rebuilds elsewhere.
- The bootstrap boundary: every nested prepare (tools, the programs' own
  build programs) uses the host conventions, so a platform's tools and runner
  are never built by the platform.
- The layer providers the platform adds are declared by the root, and by
  each member of a workspace plan, as if written by hand: a member links its
  own closure (measured: build programs linked without musl and libc++).
- The plan reports `Host platform …` when the build programs were built
  under one; the fast path declines when a platform flag, variable or the
  config's [host] changed.

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…re refused; L4-L6; the std module of a macOS build over a graph C library takes the deployment floor

- [platform.hosted] targets names the host triples an arrangement is for; a
  platform selected for another (x86_64-windows-msvc under a C library of the
  graph) is refused naming the row that is served.
- A multi-version rename separates named modules only: a package that
  exports a header directory or provides a target-side layer is refused at
  two versions, naming both requests (design §8.2).
- L4: a version the index does not have is stated by mcpp -- which index, its
  revision and age, whether it was refreshed now and why not; the provider's
  own report is kept for -v.
- L5: `mcpp test` builds the package's programs first (the pass `mcpp build`
  runs) and gives each test MCPP_BIN_<NAME>.
- L6: a package line is written once per command, not once per configuration.
- The std module of a native macOS build whose C library is the graph's took
  the running system's version (std.pcm 15.0, units 14.0; measured by
  mcpplibs.os): it now takes the floor every unit takes.

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…e version group is checked before each round; workspace roots carry the platform rows; self env reports a configuration whose sources would be refused

- pack and run take --pkg-format (the earlier --format warns); e2e renamed
- `mcpp test` on a platform package builds and runs its tests for each of
  its targets (the other architecture built, not run, under same-arch)
- the version group is checked after each completion round, so a family
  version the project pinned is refused as the group's, not as a second
  version of a package the platform added
- [target.<sel>] platform rows and [host] travel through the workspace
  layer and the virtual root, and enter root_position_key
- self env / toolchain install take --platform; a source-level refusal is
  a warning of the configuration report (configuration_only)
- the import-std remedy names the form that applies (layer or dependency)
- progress test isolation; L6 unit test
- part 2 design (packaging and distribution), main design rev 6

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
… the matrix's ok-image rows build (payload) or meet the version group (graph); retarget step in its own file (toolchain.cpp under the length limit)

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…cs/35 platforms; docs/50 platform fields and reason tokens

- SPEC-013: [platform] groups, tiers, target/host selection, cfg(platform),
  merge, graph completion and version group, toolchain, link/name/seal,
  runner, carrier, platform phase and protocol 17, workspace, lock,
  report, JSON, commands, refusal codes
- SPEC-014: three axes and legs, legality table, option usage rule,
  [pack] keys, pipeline, universal layout, launchers, --systems,
  mcpp-package.json, --merge, compression, single-file, providers,
  signing, emit xpkg, mcpp.pack fields (per-clause status)
- SPEC-007 v0.11: protocol 17 row, R9.10 platform phase
- SPEC-004 v1.19: platform plane, [target.<sel>] platform keys, [host]
- docs/35 (en, zh); indexes; docs/50: self env --target, toolchain list
  platform, plan/result platform fields, platform-* reason tokens,
  --pkg-format

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…l and single-file packages, mcpp-package.json, compression and signing

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…-format for pack and run

- 04: the platform keys of [target.<selector>]; the platform's runner
- 08: MCPP_BIN_<NAME>; a platform package tested on its targets
- 09: --platform / --host-platform for one invocation
- 21, 22: the target table selects openkal-platform; `platform` source
- 24: zero-declaration ok images; the hosted arrangement as a platform
- 30: protocol 17 directives; mcpp::phase() "platform"
- 34: the board as a platform package
- 41: the runner table form (host, exclusive) and its order

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…, MCPP_BIN_<NAME>, refusals); docs/90 e2e count

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…code counts it; §9.1 where the platform's ldflags go

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…gle-file) with [pack] linkage/format/compress/sign/universal; --compress gzip|zstd|xz|none in mcpp's own codecs; universal packages of a platform's targets with generated launchers and per-system loaders (--systems); single files (the engine's launcher over a zstd tree, a platform's carrier over its images); mcpp-package.json; [pack] sign; --merge; the platform phase provides pack formats

- compat.zlib, compat.zstd, compat.xz: mcpp.pack.compress (one-shot codecs);
  a zip's members deflated, aligned stored members, links
- mcpp.pack.distribution: sha256, containers, unpack, launchers,
  mcpp-package.json, the single file's payload and launcher source, --merge
- [platform] universal; BuildOverrides::dependency_linkage
- the carrier generalised (carried bytes or nothing, any system/arch row,
  the section by the target system); the static row pinned per arch
- envelope: linkage, mode, pkgFormat, legs, systems, artifacts[].sha256
- the platform phase accepts pack-format and artifact actions
- contributing skill: no three-level loop nesting without a stated reason

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…universal package one asset for every system, its runner a dependency); upgrade lane: a previous release of the same BMI spelling is served from the cache; 330 lists the platform key

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…), 953 (the host graph), 954 (three axes), 955 (universal), 956 (single file), 957 (merge, emit xpkg); the host configuration reports its runner and tools; --systems is refused before the build; [pack] compress yields to a container it does not fit; --merge reads the format from the output's name

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…, [pack] universal, compression refusals, the single file's payload, check and exec, the image's single file, mcpp-package.json roles, --merge, signing, emit xpkg --package; criteria e2e 954-957); SPEC-013 v1.1: universal, the carrier's three carried forms and rows, the platform phase provides pack formats, self env --host; SPEC-007 R9.10

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…s, a zip's deflated entries, universal launchers and runners, --merge's inputs and container, the single file's launcher, cache and check, the image's single file, mcpp-package.json, emit xpkg --package, signing; the carrier's carried forms; the envelope's values; self env --host's runner and tools

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
… packages, single files, codecs, mcpp-package.json, --merge, emit xpkg --package, signing; e2e 952-957); docs/90 counts (155 unit, 644 e2e)

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
… main thread's stack); pack: [pack] include / exclude staged once at the project's paths; docs: the platform's spelling in mcpp-package.json, include

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…35), or a gap before a short one; unit tests of the codecs, the zip writer, sha256, the launchers, mcpp-package.json and the single file's payload

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…d, lld, lld-link with -flavor gnu): the llvm payload for Windows ships lld-link alone

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…ol's program; a bare runner name on Windows takes the system's suffix

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
Sunrisepeak and others added 2 commits October 28, 2026 07:20
…kb, single file)

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…d below its output directory exist (e2e 958)

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
@Sunrisepeak Sunrisepeak changed the title 2026.10.27.1: a version the local index lacks is refreshed for at install; no compat guess for a read descriptor 2026.10.27.1: platforms (SPEC-013) -- ok images need no declaration; packaging and distribution (SPEC-014) -- three axes, universal packages, single files, okb Oct 27, 2026
Sunrisepeak and others added 17 commits October 28, 2026 07:42
…s with a home of its own

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…--offline

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…rrangement where it serves the triple (static on every architecture, no cross GCC); a row this mcpp builds no program for is said and left out; e2e: 942 and 951 pack one leg, 951's group version is the platform's

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…and reads a path to its end; offline, a miss in a namespace a project index serves is not an unfetched index; the unit test's absolute path on Windows; the aarch64 self-host builds two compiles at a time

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…h64-windows-gnu) is said and left out, as a planned one is

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
… packages, the okb format, the carrier as a runner; the 0.17.2 round); docs and e2e 953 follow

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
… what they do not know; replays check only what reaches a build; a member's program states platform fields; a kernel-abi package on a hosted target leaves the row's toolchain

- [platform.link] shared names {name} exactly once and no directory; plugin is "build.mcpp"; a git reference names its package; unknown keys of [platform]'s tables, [host] and references are warnings (SPEC-013 §18.1)
- the build program replay check reads only directives that reach a compile, a link or a run
- the version group asks the edges which packages are build-time only (package_instances)
- a workspace member's program states platform fields as a dependency's does (merge_program_platform)
- workspace override layering stated in the spec; [host] is not a workspace table
- --platform / --host-platform reported as flag or environment; self env --host reports the host graph's triple and compiler; a configuration's target is checked before it names a directory
- platform-step passes a step's standard error on and, when it refuses, its output (okld check's reason)
- a kernel-abi package supplies the system only where the target has none (freestanding or loader-supplied); on linux-aarch64 `--linkage static` compiled the musl row with llvm against glibc's headers
- -o with several --systems refused before the build
- three-level loops flattened (member layer edges, link inputs, programs.json runner)
- e2e: 952 F/G (a flag with $, reseal once), 954 H (sign), 956 E, 957 D (archive merge), 292 half three; unit: refusals and warnings
- docs: packaging spec (mode static, single-file none, runner deps), CHANGELOG

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…ed (xz:0, zstd:1); a gzip member states its header (no name, no time, system 255) so a .tar.gz is the same bytes on every host; a raw DEFLATE member is never inflated past its stated size; zstd_decompress, used by nothing, is gone

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
… the tar itself; launchers expand the runner as mcpp run does; --merge trusts no recorded digest and replaces nothing that is not a package

- unpack reads zip and tar in-process: every header within the archive, every
  zip member's CRC-32 checked, a member that is absolute or holds `..`, one
  under a link member, and a link whose target leaves the tree refused before
  anything is written; links are made after every file. Reads ustar, pax and
  GNU long names (what earlier releases wrote through GNU tar) and `./` roots.
- write_tar writes ustar (pax for long names and targets) in path order, owner
  0 and unnamed, time 0, modes 0755/0644/0777: two packs of one tree are the
  same bytes. One tree walk serves the tar, the zip, the metadata and the
  single file's payload, and reports what it cannot read.
- Launchers: a word's first `{}` is the image (`--image={}`), appended when no
  word holds one; POSIX words single-quoted, `$0` followed through links by a
  readlink loop; a .cmd doubles `%` and `launchable` refuses a word holding a
  double quote or a line break. arch_dir, used by nothing, is gone.
- role_of: a library is `.so` or `.so.<version>`, not any name holding `.so`.
- read() refuses a path that is not a normalised one inside the package;
  merge() checks each file against its recorded sha256 before copying and
  compares the computed digests; the output is new or an archive that is a
  package and none of the inputs; `pkg/` names the directory `pkg`.
- The single file's launcher runs nothing from a cache directory (mcpp/,
  single-file/, the digest's tree) that is a link or another user's.

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…t xpkg writes the metadata as Lua strings; the packaging spec states the in-process tar, the unpack refusals, the launcher's {} rule, merge's digests and destinations, the cache's ownership check

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…ables are what the files are on Windows; links are compared as a case-blind file system sees them and checked where they resolve; DEFLATE never expands past its bound; work directories are made exclusively; merge fits the compression to the container and the name; launchers follow links physically, keep `!` literal and refuse a word ending in a backslash; a program's artifact name holds no directory

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…no program for (x86_64-macos, planned; aarch64-windows-gnu, unstated) is refused before the build, naming the row and the systems that are built; the -o refusal comes first; spec rows; e2e 956 E

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…hosted arrangement where it serves the row (a macOS or Windows runner made on any machine, no SDK, no VCRUNTIME); a flat program tree drops its own description; a directory named by -o keeps its dots; trim_paths makes clang's __FILE__ separator the target's (an image built on Windows is the bytes of one built elsewhere); a configuration keeps the lock entries a platform added for another (build and pack --target no longer rewrite each other's lock); e2e 951 C, 954 H, 955 E; specs

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…ath (macOS's /var is a link)

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…usl 0.22.6 takes a program's arguments when it is entered; openkal-llvm-runtime 0.16.6); docs and e2e 953 follow

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…rget's separator

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…in = "platform"), the tools' package included; entries in one order by identity, so a build for this machine and a pack for an ok image leave the file as the other wrote it; e2e 951 C compares the bytes

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
Sunrisepeak and others added 6 commits October 28, 2026 15:45
…graph's supply of a system a helper (both phase functions under the 400-line gate); CHANGELOG and SPEC-014 §4.6 state what -ffile-reproducible does and does not (an image built on Windows keeps clang's `\` in `__FILE__`, #850)

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
… absent for the native configuration alone); a configuration adds its target to what it resolved and takes it from what it did not, and drops what none resolves; `origin = "platform"` only where every configuration says so; a native-only lock is unchanged (e2e 844 holds). Spec §15.1, CHANGELOG, unit test

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…gisters and moves the archive's own top directory (mcpp-language-server runs as mcppls; okrun's archives are okrun-<v>-<os>-<arch>); the lock's native configuration is the default target; universal, leg and single-file combinations refused before the build; a library's package is written by mcpp (tar compressions, zip as stated, no single file); the built-in formats are tar, zip, dir, single-file; docs: SPEC-013 §9.2 lld names and §15.1, SPEC-014 §5.1 default levels, docs/10 runners and refusal rows (en, zh), docs/50 formats, docs/90 counts, CHANGELOG Fixed heading and the 0.17.3 pins; e2e 242, 638; unit

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
… the project's aside, as a program's does; e2e 242 states the tar

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…ted arrangement, #850, the macOS arguments, mcppls's per-system xlings package) and mcpp-ide's measured sizes

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…among them (955's cross-built runners weighed at their cold cost), so no shard runs past its limit

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
@Sunrisepeak
Sunrisepeak merged commit e0b1133 into main Oct 28, 2026
148 of 149 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant