From cdcd41115307fcde745f67cd7198662a40473c29 Mon Sep 17 00:00:00 2001 From: speak-agent <248744407+speak-agent@users.noreply.github.com> Date: Tue, 15 Sep 2026 02:18:44 +0800 Subject: [PATCH] docs(design): #636 landed; bootstrap pin 2026.9.15.1 (released, mirrored, indexed) The design record's status and execution record: what landed in xlings, xim-pkgindex and mcpp, the publication checks of both releases, the sandbox verification (18 checks, 0 failures) and its first run's two probe defects, and one pre-existing xlings CI failure observed and not addressed. The verification script reads the layout cmdline's index entry actually uses and drops XLINGS_ACTIVE_SUBOS for its direct xlings calls. .xlings.json bootstraps from mcpp 2026.9.15.1, which is released, mirrored to GitHub and GitCode, and the index's latest. Refs #636 --- ...36-build-database-and-the-latest-xlings.md | 34 ++++++++++++++++--- .agents/docs/2026-09-14-636-verify.sh | 24 +++++++++---- .xlings.json | 2 +- 3 files changed, 48 insertions(+), 12 deletions(-) diff --git a/.agents/docs/2026-09-14-636-build-database-and-the-latest-xlings.md b/.agents/docs/2026-09-14-636-build-database-and-the-latest-xlings.md index 4c453ef7..5b83e052 100644 --- a/.agents/docs/2026-09-14-636-build-database-and-the-latest-xlings.md +++ b/.agents/docs/2026-09-14-636-build-database-and-the-latest-xlings.md @@ -6,9 +6,10 @@ status: active # The build database of #636, and two defects on the way to the latest xlings **Status:** proposed on 2026-09-14; adopted the same day as the plan in §6, with -the decisions of §7 settled by the self-review in §8. Implementation is in -progress in one pull request per repository: mcpp-community/mcpp#639 for every -mcpp change, and one xlings pull request for item A. Code was read at mcpp +the decisions of §7 settled by the self-review in §8. Landed on 2026-09-15 in one +pull request per repository, mcpp-community/mcpp#639 for every mcpp change and +openxlings/xlings#596 for item A, and released as mcpp 2026.9.15.1 with xlings +2026.9.14.1; §9 is the execution record. Code was read at mcpp `9b6a1188` (2026.9.14.3), xlings `59068d6` (2026.9.12.1, the latest release) and lsp-mcpp `4ea9f81` (S1 profile 0.2.0, S2 0.2.0). Measured: the store of this host's mcpp registry, and the Windows CI logs of 2026-09-14 on `main`. A @@ -491,8 +492,10 @@ on another repository, and it is small. | repository | vehicle | content | |---|---|---| -| openxlings/xlings | #596, squash `3cd8061`, version 2026.9.14.1 | 2.3 to 2.6: the §6 sentence, private extraction, the strip branch removed, `self doctor` finding `SweptPayload` with remove-then-reinstall, e2e for the rule and the doctor | -| mcpp-community/mcpp | #639, version 2026.9.15.1 | B, C, the pin of §4, and the findings of 9.2 | +| openxlings/xlings | #596, squash `3cd8061`, released 2026.9.14.1 | 2.3 to 2.6: the §6 sentence, private extraction, the strip branch removed, `self doctor` finding `SweptPayload` with remove-then-reinstall, e2e for the rule and the doctor | +| openxlings/xim-pkgindex | #841 (release bot, +22/-3), squash `fbef674` | `latest` of xlings is 2026.9.14.1 in the three platform tables | +| mcpp-community/mcpp | #639, squash `87d4ff05`, released 2026.9.15.1 | B, C, the pin of §4, and the findings of 9.2; the merged tree equals the tree CI tested (40 checks passed, one conditional job skipped); the ten workflows on `main` at that commit passed | +| openxlings/xim-pkgindex | #842 (release bot, +22/-3), squash `ffde527` | `latest` of mcpp is 2026.9.15.1 in the three platform tables | ### 9.2 Found during implementation @@ -537,3 +540,24 @@ on another repository, and it is small. | `mcpp emit build-database` on the lsp-mcpp repository | 0.84 s; `git status` unchanged | | e2e 687 on windows-2022 (39053b9a) | A and B pass: the second command prints no path error, and an older vendored xlings is replaced | | e2e subset touching `mcpp test` and entry mains, Linux | 60 pass, 6 skipped for capability, 0 fail | +| e2e 687 and 688 in CI at `2f5b71c4` | 687 passes on Linux, macOS and Windows; 688 prints its J, K, L and L-control lines on the three hosts | +| xlings 2026.9.14.1 publication | GitHub: 8 assets, each archive's sha256 equal to its sidecar. GitCode: the Windows archive exceeded the runner's cross-border upload and was completed with `tools/mirror-latest.sh xlings`, 16 of 16 verified. `tools/verify-release.sh 2026.9.14.1` passes, including a byte comparison of the CN copies | +| `xlings self update` on this host | 2026.9.12.1 to 2026.9.14.1 through the index | +| mcpp 2026.9.15.1 publication | The tag points at `87d4ff05`. Each platform archive was uploaded to GitCode with the local `gtc` as soon as its build job attached it to the GitHub release, so `publish-ecosystem` found all eight GitCode assets present and skipped them. The four GitCode archives match the GitHub sidecars byte for byte | +| `xlings install mcpp@2026.9.15.1` on this host, CN mirror | the store payload reports `mcpp 2026.9.15.1` and carries `xlings 2026.9.14.1` | +| `2026-09-14-636-verify.sh` in `xlings subos use verify-636 --sandbox`, CN mirror, the published mcpp 2026.9.15.1 | 18 checks pass, 0 fail; section E (Windows) is not run in a Linux sandbox and is covered by e2e 687 in CI. A: version, CN mirror, xlings pin and vendored xlings 2026.9.14.1. B: a toolchain install followed by the hookless `mcpplibs.cmdline` leaves no download sidecar in any store payload, the payload's top level is the archive's own directory, and `mcpp run` prints. C and C2: the build databases of a module project and of section B's project are S1 documents with the stated sets, no store path in `watch`, and unchanged trees. D: a seeded archive with its lock is reported by name and `--fix` reinstalls the payload | +| `XLINGS_HOME=~/.mcpp/registry xlings self doctor` (2026.9.14.1, read-only) on this host | 223 swept-payload findings, against 221 version directories with download sidecars measured on 2026-09-14 (2.2) | + +The first sandbox run failed two checks and read a third finding, all from the verification script: +it looked for `*/mcpp.toml` in `mcpplibs.cmdline` 0.0.1, whose index entry describes that version inline +with `*/src/**/*.cppm` globs because 0.0.1 ships no manifest; and it called the registry's xlings directly +while the sandbox shell exported `XLINGS_ACTIVE_SUBOS`, which mcpp's own calls drop, so `self doctor` tried +to write a manifest for that subos inside the registry. The second run asks what the entry uses and drops the +variable. + +### 9.4 Observed and not addressed + +- xlings `xlings-ci-fresh-install` fails its "core" legs on `main`: after a + multi-version switch of mcpp, `self doctor` reports `shim table 3 missing + (elfpatch, mcpp, patchelf)`. The run on `59068d6` (2026.9.12.1) fails + identically, so the failure predates #596. diff --git a/.agents/docs/2026-09-14-636-verify.sh b/.agents/docs/2026-09-14-636-verify.sh index 4257571d..1d7a4f35 100644 --- a/.agents/docs/2026-09-14-636-verify.sh +++ b/.agents/docs/2026-09-14-636-verify.sh @@ -66,7 +66,14 @@ if (cd "$d" && "$STORE" build > build.log 2>&1); then *.tar.gz*|*.zip*) fail "the cmdline payload holds an archive: $top" ;; *) ok "the cmdline payload's top level is its own archive's entries: $top" ;; esac - [ -n "$(find "$cmd" -mindepth 2 -maxdepth 2 -name mcpp.toml)" ] && ok "the top-level directory is kept, so */mcpp.toml matches" || fail "no */mcpp.toml under $cmd" + # cmdline's index entry describes 0.0.1 inline, with globs such as + # `*/src/**/*.cppm` whose `*/` is the archive's own top-level directory. + tops=$(find "$cmd" -mindepth 1 -maxdepth 1 -type d ! -name '.*' | wc -l) + if [ "$tops" -eq 1 ] && [ -n "$(find "$cmd" -mindepth 3 -maxdepth 3 -path '*/src/*.cppm')" ]; then + ok "the archive's top-level directory is kept, so the entry's */src globs match" + else + fail "the payload does not have one top-level directory holding src/*.cppm"; ls -A "$cmd" + fi else skip "B: the cmdline payload directory was not found" fi @@ -150,21 +157,26 @@ cmd=$(find "$REG/data/xpkgs" -maxdepth 2 -path '*cmdline*' -type d | tail -1) strip_ansi() { sed 's/\x1b\[[0-9;]*[A-Za-z]//g'; } if [ -n "$cmd" ]; then # The control: the store section B produced has no finding of this kind. - XLINGS_HOME="$REG" "$REG/bin/xlings" self doctor 2>&1 | strip_ansi > "$root/doctor0.log" + # The sandbox shell exports XLINGS_ACTIVE_SUBOS for its own home; mcpp's + # xlings calls drop it (2026.9.14.3), and so do these. + XLINGS_HOME="$REG" env -u XLINGS_ACTIVE_SUBOS "$REG/bin/xlings" self doctor 2>&1 | strip_ansi > "$root/doctor0.log" grep -qi 'swept payload' "$root/doctor0.log" && { fail "self doctor reports a swept payload before any was seeded"; grep -i -A2 'swept' "$root/doctor0.log" | head -6; } || ok "the fresh store has no swept-payload finding" # The downloader's shape: an archive beside its zero-length lock. printf 'x' > "$cmd/intruder-1.0-linux-x86_64.tar.gz"; : > "$cmd/intruder-1.0-linux-x86_64.tar.gz.lock" - XLINGS_HOME="$REG" "$REG/bin/xlings" self doctor 2>&1 | strip_ansi > "$root/doctor.log" + XLINGS_HOME="$REG" env -u XLINGS_ACTIVE_SUBOS "$REG/bin/xlings" self doctor 2>&1 | strip_ansi > "$root/doctor.log" if grep -qi 'swept payload' "$root/doctor.log" && grep -qF "intruder-1.0-linux-x86_64.tar.gz.lock" "$root/doctor.log"; then ok "self doctor reports the swept payload and names the lock file" else fail "self doctor did not report the seeded payload"; tail -12 "$root/doctor.log" fi - XLINGS_HOME="$REG" "$REG/bin/xlings" self doctor --fix 2>&1 | strip_ansi > "$root/fix.log" + seeded_at=$(date +%s) + sleep 1 + XLINGS_HOME="$REG" env -u XLINGS_ACTIVE_SUBOS "$REG/bin/xlings" self doctor --fix 2>&1 | strip_ansi > "$root/fix.log" cmd=$(find "$REG/data/xpkgs" -maxdepth 2 -path '*cmdline*' -type d | tail -1) + stamped=$(stat -c %Y "$cmd/.xpkg-install.json" 2>/dev/null || echo 0) if [ -n "$cmd" ] && [ ! -e "$cmd/intruder-1.0-linux-x86_64.tar.gz.lock" ] && [ ! -e "$cmd/intruder-1.0-linux-x86_64.tar.gz" ] \ - && [ -n "$(find "$cmd" -mindepth 2 -maxdepth 2 -name mcpp.toml)" ]; then - ok "self doctor --fix reinstalls the payload: no seeded file, and */mcpp.toml is back" + && [ "$stamped" -gt "$seeded_at" ] && [ -n "$(find "$cmd" -mindepth 3 -maxdepth 3 -path '*/src/*.cppm')" ]; then + ok "self doctor --fix reinstalls the payload: no seeded file, a new install record, and */src/*.cppm is back" else fail "the payload after --fix"; ls -A "$cmd" 2>/dev/null | head; tail -12 "$root/fix.log" fi diff --git a/.xlings.json b/.xlings.json index 8079f853..31d3797c 100644 --- a/.xlings.json +++ b/.xlings.json @@ -1,5 +1,5 @@ { "workspace": { - "mcpp": "2026.9.14.3" + "mcpp": "2026.9.15.1" } }