diff --git a/docs/prd/mosaic-stack.md b/docs/prd/mosaic-stack.md index 717c66fce..a6db9b4a1 100644 --- a/docs/prd/mosaic-stack.md +++ b/docs/prd/mosaic-stack.md @@ -1,6 +1,6 @@ # PRD: Mosaic Stack -- Status: approved, version 1.15. Jason approved draft 0.4 unchanged as +- Status: approved, version 1.16. Jason approved draft 0.4 unchanged as 1.0 on 2026-10-05 (lead decision 61). They approved version 1.1, the Organization requirements, in decision 03130d08-ddce-480d-a601-e59f64744fc3 on 2026-10-14. They approved version 1.2, the chief of staff, the @@ -44,7 +44,17 @@ as 1.11 (mos-1233, mos-1238, mos-1241, vikunja:19/464). Version 1.15 rewrites REQ-LIB-6 to Jason's Q223 and Q226 rulings and adds supporting folders to REQ-LIB-1 and REQ-LIB-2. Mos ordered it in mos-1320 item 8, - and Jason gets a report. + and Jason gets a report. Version 1.16 routes the new action + `library.write` under REQ-LIB-6 (REQ-WAIT-3). A change to the hard waits + needs Jason's approval under REQ-WAIT-2, so Mos puts the text to him as + written, and it lands only after his yes (mos-1328, mos-1329). +- Version 1.16 source: Webby's review webby-0164 B2, from Scrooge's row + 285. Version 1.15 lets creative agents write in supporting folders, but + the write action stayed a hard wait under REQ-WAIT-3, and REQ-WAIT-2 + refuses every role file that grants one. Mos ruled in mos-1328 and + mos-1329 that the routing is its own version. The bounds come from + REQ-LIB-6 and the Case 2 design's ruling after r11, f6e3e7f20 on + `gosalyn/case2-design`. - Version 1.15 source: Jason's Q223, answering Q29: "The agents are not allowed to write the prose into the writing projects. Agents are allowed to CRUD character sheets, info summaries, cross-link info, and @@ -706,6 +716,14 @@ Added in version 1.5 (Q167). `host.sudo` was added as a hard wait and routes under REQ-CRED-4 since version 1.8. + `library.write` was added as a hard wait and routes under REQ-LIB-6 + since version 1.16. It is granted within-role to the six creative roles + only, and only for Markdown files under the supporting folders a human + marks. It never writes a story file. A write also needs the writing + agent's own live Gitea grant on the library project. Each write is one + commit by that agent's own Gitea account with a trailer naming the + agent, and the user sees a notice for it and can revert it. + ### Messages - **REQ-MSG-1.** Messages are addressed to a role. They are append-only @@ -1259,8 +1277,10 @@ library is the user's own writing repository. write is one commit by that agent's own Gitea account, with a trailer naming the agent. The user sees a notice for it and can revert it. Its tools are the lookups, a message to the human and the two write tools, - and research and companion also fetch web pages through the broker. - Agents talk with the user in free text. A reply may cite lines of the + and research and companion also fetch web pages through the broker. The + write tools need the action `library.write`, which routes under this + requirement within the bounds REQ-WAIT-3 names (version 1.16). Agents + talk with the user in free text. A reply may cite lines of the repository at a commit or pages the agent fetched, and the broker checks every citation before it stores the message. A setting, `requireCitation`, makes every reply carry a citation, except the @@ -1750,6 +1770,15 @@ latest-by date and a hard target (Q176). ruling after r11 and in the Q226 briefs of `docs/plans/2026-10-20_case2-rows.md`. Sage files the rows under Vikunja 416. This amendment adds the requirements only. +- Version 1.16: + - REQ-WAIT-3 gains one paragraph, the `library.write` routing and its + bounds. REQ-LIB-6 gains one sentence naming the action. No other + requirement text changes. + - `packages/tasks/requirements.json` changes its version to 1.16 and + nothing else. The titles stay and the id count stays 85. + - The commit that adds `library.write` to `ROUTED` in the business + vocabulary and the broker is C2-08b, row 285. It lands only after this + version. ## Risks and open questions diff --git a/packages/tasks/requirements.json b/packages/tasks/requirements.json index a079888e0..15b01311e 100644 --- a/packages/tasks/requirements.json +++ b/packages/tasks/requirements.json @@ -1,6 +1,6 @@ { "prd": "docs/prd/mosaic-stack.md", - "version": "1.15", + "version": "1.16", "requirements": [ { "id": "REQ-ROLE-1", "title": "Each role is a reviewed roles/.json: contract, authority map, credentials" }, { "id": "REQ-ROLE-2", "title": "One holder per role instance, one per assistant session; the chief of staff may end a run, others need a decision" }, diff --git a/packages/tasks/tests/requirements.test.mjs b/packages/tasks/tests/requirements.test.mjs index 759b011fc..0629e9cd5 100644 --- a/packages/tasks/tests/requirements.test.mjs +++ b/packages/tasks/tests/requirements.test.mjs @@ -21,7 +21,7 @@ test("the list holds the PRD's requirement ids, in its order, at its version", ( assert.equal(ids.length, 85); assert.deepEqual(list.requirements.map((r) => r.id), ids); assert.match(prd, new RegExp(`^- Status: approved, version ${list.version.replace('.', '\\.')}\\.`, 'm')); - assert.deepEqual([list.prd, list.version], ['docs/prd/mosaic-stack.md', '1.15']); + assert.deepEqual([list.prd, list.version], ['docs/prd/mosaic-stack.md', '1.16']); }); test('the committed list loads frozen', () => {