From be6a310e82f27dc0b435a04ad7b44273202baff1 Mon Sep 17 00:00:00 2001 From: MongLong0214 Date: Sun, 16 Aug 2026 10:37:04 +0900 Subject: [PATCH] Record the installer divergence, and why the dead block stays v1.0.1 shipped and looking at what its fixes touched turned up two more: the hook pinned a release, and the two platform installers do different things. The second is the one worth writing down. install.sh carried host wiring it never called, install.ps1 both delegates and wires, and Windows does every host twice. Deleting the POSIX copy looks obvious and is wrong until each row is confirmed -- the Codex plugin gap proves the two sides are not equivalent, so removing one on the assumption that they are would delete a step nothing else performs. The trap section is the part that generalises. Two assertions passed for years while the shell wired nothing: one checked that config paths were present in install.sh, the other that both installers said the same sentences. Presence, not reachability; parity between a live script and a dead block. Three issues were invisible underneath them. Limit: an assertion that names a file does not assert the file does anything Blast: system Undo: easy Certainty: firm Provenance: authored Record-Id: r-post101 --- docs/handoff/20260815-after-v1.md | 51 +++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/docs/handoff/20260815-after-v1.md b/docs/handoff/20260815-after-v1.md index b623b1dd..77163f18 100644 --- a/docs/handoff/20260815-after-v1.md +++ b/docs/handoff/20260815-after-v1.md @@ -134,3 +134,54 @@ Each cost a cycle today. Pin the failure mode, not the value. - `git push` printing `branch set up to track` does not mean a commit was pushed. Read `git ls-remote` back. + +## After v1.0.1 — the installer divergence + +v1.0.1 shipped the five distribution fixes and its controls inverted. What +followed came from looking at what those fixes touched. + +**#693 — the hook pinned a release.** `commitlore.bin` recorded +`/v/dist/commitlore.mjs`, so an upgrade left a repository +validating commits with the build it was installed from. Three repositories on +the first machine to upgrade were doing that — this one among them, through two +releases. Fixed by `install.sh` maintaining `/current` and hooks +recording it: still an absolute path to a `.mjs`, so the recorded interpreter can +launch it, but naming no release. + +The obvious repair was tried and is wrong. Recording the `bin` wrapper made hooks +fail under the restricted `PATH` a hook actually runs in, because a wrapper is a +shell script and cannot be launched with a recorded interpreter. That is #694, +closed with the measurement so nobody repeats it. + +**#697 — the two installers do different things.** Deleting `install.sh`'s dead +host block revealed that `install.ps1` installs the Codex plugin and +`install.sh` never did: its `wire_codex_plugin` was reachable only from +`wire_codex`, which nothing calls. Windows users got a plugin layer the others +did not. + +The plugin step now lives in the enumeration both installers call. The rest of +the divergence is mapped host by host on the issue. + +## The trap that produced three issues + +`test/agent-configs.test.ts` asserted host config paths were **present in +`install.sh`**. Presence, not reachability. `T-1121` asserted the same sentences +appear in both installers so they "cannot drift" — and the parity was holding +between a live script and a dead block. + +Both assertions passed for years while the shell wired nothing. #689, #697 and +half of #660 were invisible underneath them. + +An assertion that names a file is not an assertion that the file does anything. + +## Why #691 is still open + +`install.sh`'s 291 dead lines look deletable and are not, yet. `install.ps1`'s +wiring is **not** their dead twin: it delegates at line 817 **and** wires hosts +itself from line 1089, so Windows does every host twice. Deleting the POSIX copy +alone breaks `T-1121`, which is the test doing its job. + +The Codex gap proves the two sides are not equivalent, so the order is fixed: +confirm the enumeration performs each row, remove the duplicate, and only then +the dead block. Never the reverse — that removes a step nothing else performs, on +a platform the author cannot run.