duckworth: row 234 early code read (duckworth-0081) changes on Gizmoduck f4de24d39
This commit is contained in:
@@ -0,0 +1,92 @@
|
||||
# Row 234 early code read (duckworth-0081)
|
||||
|
||||
Reviewer Duckworth (Opus 5.5), 2026-10-21. Asked in gizmoduck-0101, before the formal request. Candidate
|
||||
code `gizmoduck/row234` f4de24d39 on 8fede5fc6 (39 files, +2953/-187). Brief:
|
||||
`docs/plans/2026-10-20_host-credentials.md` "Machine grant row a", whose gate needs "the design's section
|
||||
10 tests and mutants for row a". Design r6 f9039682e, section 7 fa5658941. This is not the manifest
|
||||
verdict. That one comes after Sage's A1 to A23 run.
|
||||
|
||||
## Verdict: changes, 3 blockers
|
||||
|
||||
BUILD.md:68-69 lists G6, G10, G18 and G20 among row a's tests. The brief's gate requires them, so each
|
||||
missing case blocks.
|
||||
|
||||
- B1. G10 has no test (r6:818). No row a test starts a second enrollment for a spent decision and gets
|
||||
`decision-consumed`. None shows `#consumeGrant` (`broker.mjs:678`, `#spent` at :681) refusing an
|
||||
unresolved or an agent-resolved decision. A8 (`grant-enroll.test.mjs:250`) uses two decisions, so it
|
||||
tests `host-enrolled`, not this. The only `decision-consumed` assert near hosts is `host-run.test.mjs:250`,
|
||||
which covers row 210's host.run. The direct way is to call the executor or `reconcileGrants` twice for
|
||||
one resolved decision, and once each for an open decision and an agent-resolved fixture.
|
||||
- B2. G18 has no test (r6:826). The code path exists: `host-grant.mjs:207-211` calls `runHost` with the
|
||||
pinned keys, and `host-run.mjs:197` refuses `host-key-mismatch` on ssh exit 255. But
|
||||
`grant-enroll.test.mjs:333-356` uses a fake check that never throws that code, and
|
||||
`host-tools.test.mjs` tests only the writer, mosaic-keys, sudoers and sshd. A test needs to show that a
|
||||
wrong pin refuses `host-key-mismatch`, runs nothing, and leaves the record `pending-install` with no
|
||||
`grant.host.checked`. The fake check can throw the BusError for the broker half. The runHost half can
|
||||
reuse the host-run.test.mjs ssh stand-in that gives :290 its `host-key-mismatch`.
|
||||
- B3. G6 and G20 are partly tested.
|
||||
- G6 (r6:814): the no is tested (A4, :231), and so are the tester, pm and chief resolves (A3, :237).
|
||||
The withdraw and the arbiter resolve have no case. A withdraw of an open `host-enroll` decision must
|
||||
start nothing.
|
||||
- G20 (r6:828): the chief reaches `ready` (:341) and the tester gets past the role check to
|
||||
`host-changed` (:355). The human's `hosts.check` is never called. It must reach `ready` through
|
||||
`#hostsCaller`'s `#human` leg.
|
||||
|
||||
## Notes (no block)
|
||||
|
||||
- N1. A3 (`grant-enroll.test.mjs:237`) can't reach `#approvedGrant`'s via and by checks, because every
|
||||
resolve it tries is refused first. The M3 fixtures in `host-run.test.mjs` cover those checks, so
|
||||
nothing is untested. The test name reads as more than it shows.
|
||||
- N2. `mosaic-keys-write:255-266`: `main` catches `Refused` and `OSError`. A `sudo -l` timeout raises
|
||||
`subprocess.TimeoutExpired`, which escapes, so the writer exits with a traceback and logs nothing.
|
||||
Catching it as `refused user-sudo` keeps every refusal in syslog.
|
||||
- N3. `host-grant.mjs:86,106`: a keyscan that exits nonzero, such as an unreachable host, resolves with
|
||||
no lines, so the raise refuses `host-key-mismatch`. The comment says a scan that can't run refuses
|
||||
`host-failed`. That holds only for a spawn error. G17 doesn't decide which code is right. Worth one line
|
||||
in BUILD.md or the comment.
|
||||
- N4. In the run, `#enrollFailed` writes `grant.failed` with no tag. `reconcileGrants` does tag it. If
|
||||
section 7 leaves the tag optional this is fine. Otherwise the two should match.
|
||||
- N5. `read_conf(host, 'privileged')` refuses when the file is missing (`mosaic-keys-write:136-138`). The
|
||||
#433 run sheet should say to create an empty, root-owned `/etc/mosaic-keys/privileged`.
|
||||
- N6. `#hostAccess` binding the grant's agent and host (`broker.mjs:692`) goes beyond X4. I agree with
|
||||
it. It narrows and refuses nothing X4 allows.
|
||||
- N7. `isHostKind` (`business/src/resolve.mjs:92`) can't be reached and stays, as BUILD.md records. No
|
||||
objection.
|
||||
|
||||
## Checked, no finding
|
||||
|
||||
- `#approvedGrant`, `#consumeGrant`, `#runEnrollment`'s two transactions and their catch, and
|
||||
`reconcileGrants` for both the spent-unfinished and the open decision. `#openGrantDecisions` uses the
|
||||
unfiltered `#spent`. That is sound while no verb consumes `credential.mint`.
|
||||
- `#raiseGrant` order, with the enroll block appended before the 4096 cap (M1, :165).
|
||||
- `hosts.remove` order (host-unknown, host-in-use, host-line-left, then delete, event, unenroll last), and
|
||||
`hosts.check` with its host-changed recheck in the transaction.
|
||||
- 3i-3j.sql: hosts and host_grants keys, CHECKs, the FK, and the `events_grant_actor` trigger. The trigger
|
||||
cases are in `grant-migration.test.mjs:134`.
|
||||
- The writer's dir, lock, user-file and tmp handling (G25, `host-tools.test.mjs:225`).
|
||||
- Hash pins: there is no 64-hex pin in `packages/*/tests/*` or `scripts/test-*.sh` on a changed path. The
|
||||
one basename hit, `channel-proof.test.mjs:12` for `bus/src/human-cli.mjs`, is a file this row doesn't
|
||||
change. The control found pins in account-, comment-migration and channel-proof.
|
||||
- RUNNER_FILES rule (sage-1619): the broker adds the `HOST_ID` import. I ran seat sandbox.test.mjs and
|
||||
bus project-runtime.test.mjs (below).
|
||||
|
||||
## My runs
|
||||
|
||||
Single files in a detached worktree of f4de24d39, pass/fail:
|
||||
|
||||
| file | result |
|
||||
| --- | --- |
|
||||
| bus grant-enroll | 20/0 |
|
||||
| bus host-run | 23/0 |
|
||||
| bus host-tools | 6/0 |
|
||||
| bus grant-migration | 5/0 |
|
||||
| bus hard-waits | 13/0 |
|
||||
| bus project-runtime | 3/0 |
|
||||
| bus credentials | 5/0 |
|
||||
| bus chief-of-staff | 18/0 |
|
||||
| bus account-, comment-, name-, spec-, thread-, usage-migration | 3/0, 5/0, 1/0, 1/0, 3/0, 1/0 |
|
||||
| business hosts | 4/0 |
|
||||
| cli hosts | 5/0 |
|
||||
| seat sandbox | 7/3, the same environmental failure I get on base commits in this session |
|
||||
|
||||
I ran no suite and no mutant. Those are slot work.
|
||||
@@ -1434,3 +1434,4 @@ are never rewritten or removed; corrections are new entries.
|
||||
2026-10-21T01:59Z | Duckworth (Opus 5.5) | row 210 queue round 3 rebase check on Gizmoduck 0485384e9 (duckworth-0078) | approve, no findings |
|
||||
2026-10-21T03:01Z | Duckworth (Opus 5.5) | row 234 early check of BUILD.md split and name map on Gizmoduck 2aa54a67a (duckworth-0079) | split and map stand, G21 fixture ok on F1-F4, moves M1-M4, N1 mutant split |
|
||||
2026-10-21T03:03Z | Duckworth (Opus 5.5) | row 241 round 1 on Megavolt 3e3ed303e (duckworth-0080) | approve, no findings |
|
||||
2026-10-21T03:44Z | Duckworth (Opus 5.5) | row 234 early code read on Gizmoduck f4de24d39 (duckworth-0081) | changes: B1 G10, B2 G18, B3 G6 withdraw/arbiter and G20 human leg untested, N1-N7 |
|
||||
|
||||
Reference in New Issue
Block a user