plans: C2-20b brief (row 221 follow-up, Webby N1, N2 and N4) and DEFERRED for N3, Morgana's 213 B3 anchor

Webby approved row 221 round 1 (webby-0073) with four notes that don't block. N1, N2 and N4 are in
scripts/case2-persona-import.mjs and go in before Jason's one import run (sage-1941), as row C2-20b,
owned by Gosalyn and reviewed by Webby. N3 is tooling outside the product and waits in DEFERRED.
This commit is contained in:
jason.woltje committed 2026-10-21 06:23:41 -05:00
1 parent 3007664504
commit 335bb3e30f
2 files changed
+55

No files matched your search

+48
View File
@@ -593,6 +593,54 @@ gate, along with every `scripts/test-*.sh`.
---
## C2-20b persona import follow-up: printed keys, the dry run fence check and the mkdir race
### Problem
Webby's round 1 review of row 221 (webby-0073, REVIEW-r1 a0a00630e on webby/reviews) approved it with
four notes that don't block. Three are in `scripts/case2-persona-import.mjs` and go in before Jason's
import run, because he runs the script once (sage-1941):
- N1: lines :147 and :237 print channel and platform keys from `config.yaml` as they are. A key with a
newline or a control character could forge an output line.
- N2: the dry run counts but doesn't apply C2-08's 8000-char fence. A persona over the fence and under
32000 bytes passes the dry run and then refuses at staging.
- N4: `privateDir` runs lstat, then mkdir. A directory made between the two gives a raw EEXIST. It still
fails closed, so only the error text is wrong.
N3 (Morgana's 213 `mutants.py:48` B3 pattern no longer matches `bundle.mjs`) isn't in this row. It's in
DEFERRED.
### Owner and reviewer
- Owner: Gosalyn.
- Reviewer: Webby.
- After: row 221 (C2-20) lands.
### Files owned
`scripts/case2-persona-import.mjs`, `packages/cli/tests/case2-persona-import.test.mjs` and its fixture
tree.
### What ships
- N1: every printed config key goes through `JSON.stringify`.
- N2: the dry run calls `personaTextFault` on each persona and prints the fault's name. It still prints
no persona text, no line and no line number.
- N4: an EEXIST from the mkdir refuses with a named reason, not a raw EEXIST.
Tests:
- A fixture key with a newline prints as one quoted line.
- A persona over the fence makes the dry run print the fault, write nothing and exit nonzero.
- The mkdir race refuses with the named reason. A stubbed mkdir that throws EEXIST is enough.
- One mutant for each of the three fixes, each killed by its test.
### Gate
Webby approves the manifest. The test file runs green on its own, and the three mutants are killed on
Sage's slot. The cli suite and every `scripts/test-*.sh` are green on Sage's gate.
---
## C2-03a fetch-only sync
### Problem
+7
View File
@@ -315,6 +315,13 @@ at every gate. Started 2026-09-12 during the control board MVP.
`mosaic`, and F10 uses equality. Darkwing has a follow-up on
`darkwing/row195-n1` 1e3c4767c, not yet run; it gets its own row now
that 195 has landed (b65014647), Duckworth reviews. (2026-10-21)
- **Morgana's row 213 mutation set: the B3 pattern no longer matches `bundle.mjs`.**
(Webby N3 on row 221 round 1, REVIEW-r1 a0a00630e.) Row 221's
candidate changes `packages/harness/src/bundle.mjs`, and the B3
anchor at Morgana's 213 `mutants.py:48` stops matching on that
base. This matters only if someone reruns that set. Fix the anchor
in that tooling before any rerun, and check that a stale anchor
refuses instead of skipping the mutant (sage-1941). (2026-10-21)
## Queue