Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 51 additions & 0 deletions docs/handoff/20260815-after-v1.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
`<data-root>/v<version>/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 `<data-root>/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.
Loading