diff --git a/agents/webby/work/case2-q226/REVIEW-prd-1-17.md b/agents/webby/work/case2-q226/REVIEW-prd-1-17.md new file mode 100644 index 000000000..409afac2c --- /dev/null +++ b/agents/webby/work/case2-q226/REVIEW-prd-1-17.md @@ -0,0 +1,97 @@ +# PRD 1.17 draft d2, Case 2 story files are DOCX (Vikunja 570), Webby + +Request: Sage sage-3098 (00:50:47Z 10-23), reviewer named in mos-1367 B5. +Draft: agents/sage/work/prd-1-17/DRAFT-d2.md, sha256 02af5bbfd27d54bf7afc917fe573c310e9059e1bf50af2fa7d7ac1c893788b1d +(matched before reading). Base: docs/prd/mosaic-stack.md blob a6db9b4a13d4 at 482e865ac. +Sources: /mnt/storage/src/jason-master-restart/DECISIONS.md Q235-Q237 (lines 2355-2400), read only. + +## Verdict: CHANGES (B1, B2, B3) + +## What I checked + +- Quotes. Every "Replace" and "Add after/before" anchor appears exactly once in the 1.16 text with lines + joined: REQ-LIB-2 scope sentence (base :1225-1230), "Lookups return canon..." (:1230-1231), "so an agent + can't cite..." (:1231-1232), REQ-LIB-4 "The user commits and pushes..." (:1252-1253), REQ-LIB-5 "Each + answer names the commit it read." (:1262-1263), REQ-LIB-6 "A reply may cite lines..." (:1283-1284), + "the broker refuses such a write before any git call." (:1276), "(Design 1.1" (:1208), and the 1.11 MVP + line quoted in the notes. +- Ids. requirements.json at 482e865ac has 85 ids and requirements.test.mjs:21 pins 85. One new id makes 86. + The test's version pin (:24, '1.16') also moves, and the draft's file list covers it. +- B1 condition (mos-1367). REQ-LIB-8 bullet 1 (draft :132-134) says it plainly: the converted file leaves + the Gitea-mirrored repository and its DOCX lives in the stack's writing store, not in the repository + the user pushes or opens in Obsidian. REQ-LIB-4's replacement (:100-104) says the same. Met. +- B2 condition. Draft :135-140: each import has its own fidelity report, the human's confirmation of it, a + manifest naming the source file and commit, and one commit. Met, apart from B3 below. +- P1-P6 against REQ-LIB-8: + - P1: bullet text :127-129. P2: :135-140 (convert, mark, move to the archive folder), with O4's + archived scope in REQ-LIB-2 keeping it out of canon. P3: :143-145. P4: :129-131 and the format map + :146-147. P5: :141-142 and :151. P6: :148-151, and the 1.17 note :161-164 for the 10-27 release. + - All six are present. +- Text beyond P1-P6. These trace to the landed O2 design D10/D12 or to Mos's O1-O4 rulings, not to + P1-P6. Each is cited in the draft, so I don't count them as overreach, but Mos and Jason should know + they are in the text Jason says yes to: + - REQ-LIB-4: each accepted editor save is one commit by the human in the writing store (D12). + - REQ-LIB-5: a DOCX is read only from a committed version, never unsaved text. + - REQ-LIB-6: "A DOCX citation never calls a paragraph a line." + - REQ-LIB-8 :148-150: the import opens only once agents can read committed DOCX "and cite them". + P6 says only "once agents can read DOCX chapters". Citing is a stricter gate than P6. + - The Risks line on zip diffs. +- REQ-LIB-8 vs REQ-LIB-6 supporting writes. No conflict in the writes themselves. The archive folder + may not overlap another prefix (draft :85-87), so it can't sit inside a supporting folder, and REQ-LIB-6 + gains "the archive folder is read-only to it". Supporting files stay Markdown in the user's repository. +- REQ-LIB-8 vs REQ-WAIT-2/3. No conflict. The import is a human verb with no role grant and no agent + request path (O3), so it isn't a vocabulary action and REQ-WAIT-3 doesn't reach it. REQ-WAIT-3's + `library.write` paragraph (base :719-724) already says it "never writes a story file", which still + holds for a DOCX in the writing store. If 571 later makes the import a vocabulary action, REQ-WAIT-3 + makes it a hard wait and REQ-WAIT-2 keeps it out of every role file, as O3 says. + +## Required changes + +- B1. A playground file can become canon. REQ-LIB-2's replacement (draft :83-84) makes "a story file's + DOCX document in the writing store" canon for its book, with no other scope for a DOCX. REQ-LIB-8 + (:135) lets the import take any "Markdown story file", and P1 makes "chapters and other story files" + DOCX. Nothing stops the import from taking a Markdown file under a playground prefix. Its DOCX would + then come back as canon, which breaks REQ-LIB-2's own title, "Playgrounds are never confused with + canon" (base :1211). The fix can be either of these: + - The import takes only a canon file, a Markdown file in a book folder outside every playground and + supporting prefix, and playground text stays Markdown for now. + - A DOCX keeps the scope, universe and book of the file it came from. + The first is smaller and leaves the playground question to 571. +- B2. Archived files have no universe. REQ-LIB-1's addition (draft :69-70) names "one archive folder" for + the whole mapping, and REQ-LIB-2's addition (:85-87) says it may not overlap a book folder. A file + moved there loses the path that gave it a universe and book. REQ-LIB-3 (base :1237) says "Every lookup + names one universe, and its results never leave it". An archived lookup then either returns nothing or + returns files from every universe, and the second breaks REQ-LIB-3. Two ways to fix it: + - The archive folder is set per universe (or per book). + - The converted mark records the source path, and an archived file takes its universe and book from + that mark. + Either way the text should say which, since O4's continuity use (citing history) needs the book. +- B3. The archive move has no named committer. The import makes two changes in two places: + - the DOCX commit in the writing store; + - the mark and move of the Markdown file in the user's repository. + REQ-LIB-4 today says the user commits with their own tools and the bus only mirrors that repository + with a read-only token, fast-forward only (base :1252-1259). REQ-LIB-6 ties every agent write to the + agent's own account. The draft doesn't say whose account commits the archive move in the user's + repository, or how "changes nothing when any step fails" (:140) holds when one step is a commit to a + repository the stack doesn't own. Say who commits it. The human's own account, as with REQ-LIB-4's + saves, fits P5. Also say what "changes nothing" covers. For example, the writing-store commit happens + only after the move is on the remote and in the mirror, or the reverse. The mechanics can stay with 571. + +## Notes (non-blocking) + +- N1. REQ-LIB-2's new rule (draft :80-81) says "a file under the archive folder is archived". Every other + scope in the same sentence is "a Markdown file". A non-Markdown file the user drops in the archive + folder would become archived and returnable. "a Markdown file under the archive folder" matches the + other scopes. +- N2. The Settled points intro (:16) says Mos took the first choice in each, but only O1 and O2 carry + "Ruled yes in B1/B2". O3 and O4 still read as recommendations. Add "Ruled yes in B3" and "in B4" so the + record doesn't need mos-1367 to read. +- N3. REQ-LIB-1's version tag (:70-71) doesn't say where it goes. The 1.15 tag sits inside the closing + parenthesis, "Version 1.15: supporting folders.)", so the 1.17 tag presumably follows it there. +- N4. P5 names "Melanie's real books", and REQ-LIB-8 :150-151 says "a real user's books". That reads + broader, which is the safer direction. I'm flagging it only so Mos sees the wording changed. +- N5. If mos-1368's impact map changes the text, I'll review the delta against d2. +- N6. The 1.15 and 1.16 notes keep the old text of every requirement they rewrote, for example "The 1.14 + text of REQ-LIB-6 was: ..." (base :1735). The d2 notes don't keep the 1.16 text of the REQ-LIB-2, -4, -5 + and -6 sentences they replace. Adding those lines follows the convention and lets Jason read the change + without the diff. diff --git a/docs/SESSIONS.md b/docs/SESSIONS.md index d4748e596..cb76cb123 100644 --- a/docs/SESSIONS.md +++ b/docs/SESSIONS.md @@ -1510,3 +1510,4 @@ are never rewritten or removed; corrections are new entries. 2026-10-22T22:26Z | Webby (Opus 5.5, reviewer seat) | row 291 PRD 1.16: reviewed blob equals Jason-approved a6db9b4a (mos-1354); landing check noted | recorded, local 2026-10-22T22:46Z | Webby (Opus 5.5, reviewer seat) | row 291 PRD 1.16 round 1 APPROVE on 482e865ac (blob a6db9b4a = Jason-approved, no drift) | verdict, local; Sage posts 2026-10-22T23:45Z | Webby (Opus 5.5, reviewer seat) | row 203 FED R2 manifest round 1 on a4da4e6df (request 30874) | APPROVE; six-path manifest, gate 219/51/895/17 of 17, N1-N2 non-blocking +2026-10-23T00:53Z | Webby (Opus 5.5, reviewer seat) | PRD 1.17 draft d2 (Vikunja 570, sha256 02af5bbf), sage-3098 | CHANGES B1 playground import becomes canon, B2 archived files lose universe, B3 archive-move committer; N1-N6