plans: machine grant rows a (#1740, schema 3i-3j) and b (#1741) briefs from design r6 f9039682e; 193b2 moves to schema 3j-3k after row a

This commit is contained in:
2026-10-20 18:24:28 -05:00
parent b8236a7e13
commit f519fb1d26
2 changed files with 42 additions and 2 deletions
+39
View File
@@ -68,3 +68,42 @@ Tests use scratch sshd fixtures on 127.0.0.1 or fakes, never a real host.
Duckworth approves DESIGN.md, then the manifest. The bus, business and cli suites and every
`scripts/test-*.sh` are green on Sage's gate, and the mutants are killed (one per refusal, plus one that leaks
the key into the agent's output and one that skips the host key pin).
## Machine grant row a: enrollment, store records and migration 3i-3j
Sage, 2026-10-20, for Vikunja P19 #436 (#436a), mos-1141 and mos-1143. Owner Gizmoduck, reviewer Duckworth,
gate owner Sage. The design is `agents/gizmoduck/work/machine-grant/DESIGN.md` r6 at f9039682e on
`gizmoduck/machine-grant-design`, which Duckworth approved for code once row 210 lands (duckworth-0063,
mos-1141). It is not reopened here. Section 12 Q-S4 defines the split. Estimate 1.5 days. Gitea #1740.
Row a ships enrollment as the approved request (section 3), the four `tools/host` files, the store records
and their migration `3i-3j.sql` (section 5), `host.run` reading the records, and `hosts status`. It also
moves row 210's tests onto the store. Every grant name is under `grant.*` behind one guard, as
`action.allowed` bodies (mos-1144, gizmoduck-0086, duckworth-0065 O1). No agent creates a grant (Q188).
Order and timing:
- It builds on row 210's landing, after row 199 (mos-1135, mos-1137).
- This row owns `SCHEMA_VERSION` 3j. Any other row with a schema step goes 3j to 3k or later and rebases
onto this row's landing (row 206, 193b2).
- It lands by 10-25 and before the .53 and .54 installs (mos-1134, mos-1145). Sage flags a slip past 10-25
to Mos. Live on dragon-lin comes in the one 10-24 window with rows 190, 199 and 210, as an agent-run
`--migrate` under Q173, backup first (mos-1145 line 9). The run sheet strips row 210's `hosts` keys and
role grants from the business file before that re-pin (design r5 N9).
- It needs the PRD 1.8 line before landing (Q-S4).
Gate: Duckworth approves the manifest. The bus, business and cli suites and every `scripts/test-*.sh` are
green on Sage's gate. The design's section 10 tests and mutants for row a pass, the migration test included.
## Machine grant row b: raise binding, executor, reconcile and revoke
Same owner, reviewer, gate owner and design as row a. Estimate 1.75 days. Chained on row a's landing.
Gitea #1741.
Row b ships the raise binding, the executor (section 5), reconcile, and revoke with the `hosts.revoke`
verb and its marker (section 6), plus row 210's per-call decision as manual mode (section 7). After step
5 commits, the executor ignores an abort, and both undo paths update only an existing record (r6 C1, X3,
X5). At start, after the grant reconcile, the bus unlinks every `host.<id>` key file that has no
`host_grants` record (r6 N1, G27). It adds no schema step. If it needs one, Sage re-briefs it first and
assigns the next free step (row 206 holds 3j to 3k).
Gate: as row a, with section 10's row b tests and mutants, G27, G28 and the upsert mutant included.
+3 -2
View File
@@ -42,10 +42,11 @@ and mutants 1, 3, 6, 10, 11 and 12 from section 8.
Gate: Duckworth approves the manifest. The bus suite and every `scripts/test-*.sh` are green on Sage's gate,
and the mutants are killed.
## Brief: 193b2, thread shares (schema 3j)
## Brief: 193b2, thread shares (schema 3k)
Chained on 193b1. `thread_shares`, the share verbs, the share rules of `#readable` and `#threadRead`, and the
section 5.5 share filters. Schema 3i to 3j. The table is append-only, and row 181's restore guard and
section 5.5 share filters. Schema 3j to 3k (Sage, 2026-10-20: machine grant row a owns 3i to 3j, so
this row builds on row a's landing). The table is append-only, and row 181's restore guard and
`COUNTED` include it. Bus tests for shares and the migration, and mutants 2, 4, 7, 8 and 9 from section 8.
Going live needs a `--migrate` window with Jason. Sage takes it to Mos when this row is near.