Files
stack/docs/plans/2026-10-20_human-users-build.md

5.5 KiB

Row 193 build rows: 193a, 193b1, 193b2, 193c and 193d (#1691)

Sage, 2026-10-20, for Mos's go mos-1034 item 4. Row 193's design is Morgana's agents/morgana/work/queue-193/DESIGN.md at e2d161e2e on morgana/row193 (r5, sha256 dd7fcb419ed8510e9d8d74b569183386d0942af8b68eecc0bbb5e182e677b523), approved by Duckworth (duckworth-0018). Section 8 lists the tests and mutants, and section 9 the split. The brief behind them is docs/plans/2026-10-20_human-users.md. Vikunja P19 #414/#415, Gitea #1691.

Owner Morgana for every row, reviewer Duckworth, gate owner Sage. Each row chains on its parent's candidate (Q177) and rebases onto the parent's landing. Seats push only their own <seat>/* branches (mos-0981). Single test files run freely, and suites and mutant batches need Sage's slot.

Boundaries for every row: no change to ~/.mosaic-dev, ~/.config/mosaic-dev, the live units, slot files, any live access.json or ~/.mosaic. No request to the live Console, mosaic.woltje.com or auth.diversecanvas.com. No user thread goes live before 193b1a's message filter has landed (mos-1021 B2, FED R8).

The owner-visible records are fixed by Mos (mos-1023 item 2) and named in one user sentence, which FED R6 reuses word for word: "The business owner sees your thread's agent's decisions, inbox entries, claims, tasks and project files, but not your messages."

Brief: 193a, the access level check widened to viewer

Chained on FED R1. Started early on morgana/row193a (508ee4d61) against R1's interface as the FED brief names it, with Sage's go (sage-1373). R1's level check accepts viewer and still refuses any other new level. Tests in packages/business/tests/ (section 8, Business), with the four mutants in Morgana's BUILD.md. FED R4 chains on this row.

Duckworth's N1 on R1 (duckworth-0033, sage-1417): with viewer added, covers called with no level would let a viewer grant cover a collaborator ask. This row makes level required in covers, with a test and a mutant that makes it optional again. R3 and R4 call covers with a level.

Gate: Duckworth approves the manifest. The business suite and every scripts/test-*.sh are green on Sage's gate, and the mutants are killed.

Brief: 193b1, viewer verbs, board refusals and the message filter

Split on 2026-10-22 (sage-2288, after morgana-0063) into 193b1a and 193b1b below. The text that stood here chained the whole row on FED R3 and R4, which weren't filed. Only the viewer half needs them.

Brief: 193b1a, the message filter

Chained on row 196's verifier (done). The bus gets the section 5.7 trail and replies filter over owner, reader and tester sessions, with #readable owner-only. No schema change. A hidden trail subject returns [], exactly as an unknown id does, and replies returns message-not-found for both. One test per verb compares the hidden response with the unknown-id response byte for byte. The owner-side governance pin test names each item in the user sentence above. Bus tests and mutants 11 and 12 from section 8, plus mutant 1 as "#readable returns true" (the pin test kills it) and a mutant that makes a hidden subject distinguishable from an unknown id. FED R3 builds on this row's candidate and extends the filter to user sessions.

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: 193b1b, viewer verbs and board refusals

Chained on 193b1a, FED R3 and FED R4. The bus gets the viewer verb list, per-grant covers level checks, board reads refused to users, and the user-side governance pin test. Bus tests and mutants 6 and 10 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 3l)

Chained on 193b1a and 193b1b. thread_shares, the share verbs, the share rules of #readable and #threadRead, and the section 5.5 share filters. Schema 3k to 3l (Sage, 2026-10-20: machine grant row a owns 3i to 3j and the #436b build owns 3j to 3k, so this row builds on #436b'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, plus mutant 3 (rule 3 dropped), moved here from 193b1 because only shares can kill it (sage-2288). Going live needs a --migrate window on Mos's go under Q173 (mos-1310), with a backup first and a STATE report after. It no longer waits for Jason. Sage takes it to Mos when this row lands.

Gate: Duckworth approves the manifest. The bus suite, the cli suite and every scripts/test-*.sh are green on Sage's gate, and the mutants are killed.

Brief: 193c, mosaic access user verbs and --level viewer

Chained on FED R5. mosaic access user add/remove and grant --level viewer, only where R5 lacks them. They refuse tester and agent callers, write a receipt line and call access.reload (section 8, CLI). If R5 already has all of them, this row records that and closes with no code.

Gate: Duckworth approves the manifest. The cli suite and every scripts/test-*.sh are green on Sage's gate, and the mutants are killed.

Brief: 193d, the Console's shared list, share controls and viewer read-only

Chained on FED R6, row 192 and 193b2 (for share controls). A viewer has no composer or share control, and with each UI check removed the bus still refuses (section 8, Webui).

Gate: Duckworth approves the manifest. The webui suite and every scripts/test-*.sh are green on Sage's gate, and the mutants are killed.