From 6345aae3d8906758dacc130a906181ab8bad4974 Mon Sep 17 00:00:00 2001 From: Jason Woltje Date: Thu, 22 Oct 2026 20:41:59 -0500 Subject: [PATCH] docs: align editor graph, Markdown transition and archive with PRD d6 --- BUILD-LOG.md | 2 + docs/SESSIONS.md | 1 + docs/plans/2026-10-21_q195-writing-editor.md | 48 ++++++++++++-------- docs/plans/2026-10-22_q195-docx-citations.md | 10 +++- 4 files changed, 40 insertions(+), 21 deletions(-) diff --git a/BUILD-LOG.md b/BUILD-LOG.md index 05bf841c4..21680cde4 100644 --- a/BUILD-LOG.md +++ b/BUILD-LOG.md @@ -5372,3 +5372,5 @@ Gander: after Duckworth-0100 design approval with C1-C5, prepared the two host-s 2026-10-23T01:37:07Z | Gyro Vikunja571 final impact-map / mos-1372/1375 fold | Prepared parent/W4 rewrite against brain-redux d183246 impact map at stack 062646487. P1-P6/B1-B4 and engineering Q1-Q16 are mapped to eleven briefs. D9 replaces the earlier private O2-only context/per-document/share model: normal Case 2 access in any authorized thread/room, supporting writes intact, changed policy awaits PRD 1.17 approval. New DOCX story creation has the same opening gate as human per-story import. Host-only push to human-set off-host remote replaces the no-remote ban; remoteURL defaults unset and same-host bare is disallowed. W7 gates on Hermes #423 step5, W4b, PRD approval, post-10-27 and first-real-book go; owns conversion events COUNTED/--events/pre-conversion restore reconciliation, manifest order/next_chapter, creative role cite wording, archive/old-path edits and format/link/citation routing. Store+off-host acknowledgment precedes archive commit/push, then catalogue publication; post-push failures remain resumable pending with pinned source. Current checks pass: complete brief fields, policy/map coverage, exact Q234 CSP, locator/projection mechanics byte-equivalent except explicit authority wording, A01-A35 IDs, immutable map pin, four-doc scope and append-only logs. W4 authority/remote/recovery sections reopened for Fenton; older APPROVE not reused. No product/build/browser/worker/private-book/queue/live action. Earlier entry describing preserved shares/fence applies only to the pre-D9 intermediate draft; D9 now withdraws those unimplemented structures. 2026-10-23T01:37:55Z | Gyro 571 push guard | identity gyro/purpose push: exit 0 documented degraded-pass CANNOT_ASSERT credential-unresolvable, scratch audit gyro-q195-ci-queue-audit.jsonl; no credential fallback or CI-green claim. + +2026-10-23T01:41:59Z | Gyro sage-3121 A1-A3 PRD alignment | Before: 8d209016b adds a current Connections graph, excludes new Markdown stories in converted books and defaults archiveFolder. After: parent/W4 align with PRD1.17 d6 sha256 886b93c571f87bfbb2f27ee3113b6800a32d8f89196d95ace33566031bee380a: clickable editor links only; graph/tests later pending J-b; new different-path Markdown in a converted book remains canon until import, only recreated converted old paths are unmapped; archive folder is human-set in library mapping with no default, missing folder refuses conversion. Static A1-A3/11-brief checks pass; W4 locator/extractor/access/remote/recovery blocks unchanged. Local commit only, push held for Sage's named gap while Gizmoduck holds 270+271 run5. No product/build/browser/worker/queue/live action. Fenton gets local SHA through shared object store. diff --git a/docs/SESSIONS.md b/docs/SESSIONS.md index e8488786d..d5f475e73 100644 --- a/docs/SESSIONS.md +++ b/docs/SESSIONS.md @@ -1561,3 +1561,4 @@ are never rewritten or removed; corrections are new entries. 2026-10-23T00:05:06Z | Filbert (Opus 5.5, sage-3059/3064) | Q195 O2 S0 (#1798) static review of Fenton's fenton/q195-s0 85ae2be77 (security + CSP reports, receipts in s0-20261022) | CONCUR CONDITIONAL PASS, c30914; A1 M1 needs WOFF2 and summed-size tests, A2 F2/D7 misstate the ctrl+click gate, M2 retargets to DOCX save; N1-N4 non-blocking; D8 hash question stays with Mos; no queue row (mos-1361), no slot, harness not rerun 2026-10-23T00:52:58Z | Gyro (Codex gpt-6.1-sol, mos-1366/1367) | Vikunja571 Q235-Q237 O2 parent/W4 format-policy rewrite on gyro/editor-o2 | Canonical queue next gyro: nothing. Prepared P1-P6 and B1-B4 docs, baseline W4 import 1ac76a417; no product/build/browser/worker/private-file/queue/live action. Mos impact map fold precedes review/push handoff. 2026-10-23T01:37:07Z | Gyro (Codex gpt-6.1-sol, mos-1368/1372/1375) | Vikunja571 O2 parent/W4 revision complete for review | P1-P6/B1-B4 and A17-A41/Q1-Q16 folded; same-thread Case 2 lookups/support writes, human-set host-pushed off-host remote, Hermes/restore/counting/order/role gates. Static docs checks pass; old locator/projection mechanics retained, authority/access review reopened. No code, build/browser/worker run, private conversion, queue or live action. Direct Fenton/Mos/Sage handoff after push. +2026-10-23T01:41:59Z | Gyro (Codex gpt-6.1-sol, sage-3121) | 571 PRD d6 A1-A3 alignment | Both designs corrected and statically checked; local commit for Fenton in shared repo object store. HTTPS push held for Sage gap, independent review pending. No product, test-slot, queue or live change. diff --git a/docs/plans/2026-10-21_q195-writing-editor.md b/docs/plans/2026-10-21_q195-writing-editor.md index 0ea9e7117..4bc6e17a7 100644 --- a/docs/plans/2026-10-21_q195-writing-editor.md +++ b/docs/plans/2026-10-21_q195-writing-editor.md @@ -181,10 +181,10 @@ atomically in one commit. They are not two editable masters. D10's book manifest also owns chapter order. Seed from row216's existing path-order rule, then keep stable chapter IDs in order across conversions; human reordering commits the manifest. library_manuscript and next_chapter use this order, never archived paths. Each -answer/page names format, owned location/ID and captured commit. A visible Console Connections -view shows current authorized Markdown/DOCX links and backlinks with canon/playground/archive -labels. Obsidian's archive graph is historical, not the live chapter graph. No hidden scope's -titles/counts leak through the view. New Story chooses universe/book or playground and gets +answer/page names format, owned location/ID and captured commit. DOCX wikilinks stay clickable +in the Console editor; no graph shows their current links yet. A Console Connections view +and its tests are later work, waiting for Jason's J-b answer in PRD 1.17. Obsidian's archive +graph is historical, not a live DOCX graph. No graph implementation is in these W rows. New Story chooses universe/book or playground and gets its place in that manifest from its first DOCX commit, without an MD copy. D11. Human-started, one-way import converts a Markdown chapter into canonical DOCX. The @@ -202,7 +202,9 @@ manifest and DOCX conversion commit for each. Its source-repository archive comm covers only that file; the operation receipt binds both commits without pretending they are one git transaction. First import UI selects one file per operation. A future batch picker may queue independent confirmations, never imply a reversible book-wide transaction. -`editor.archiveFolder` is human-only, default `archive/converted`, scoped to source project. +`editor.archiveFolder` is the human-only editor/CLI view of the archive folder in the source +project's library mapping. It has no default. Conversion stays closed until a human sets a +valid folder; no editor setting supplies a separate fallback or second source of truth. Validate a nonempty relative directory (at most 1024 characters), no absolute path, dot/dotdot, .git, symlink/hardlink escape, current-file or supporting-write-target collision or destination collision. Changing it never reclassifies older archives. Record the resolved owned archive @@ -229,9 +231,10 @@ link. Supporting-document cross-links keep their Markdown source bytes; resolver follow stable identities without an agent rewriting story links. Obsidian's old Markdown graph is historical after conversion. It does not track later DOCX -edits, and it is not a parallel writing surface. The Console's authorized book/format map -shows current DOCX chapter relationships and Markdown support links. No Obsidian graph -parity or Markdown export is promised. `.doc`/`.qxd` imports remain separate D23 work. +edits, and it is not a parallel writing surface. The format map names current files and +clickable editor links resolve across formats; it is not a graph view. No graph shows DOCX +links yet. The later Connections view waits for Jason's J-b answer; it and its tests are +outside the current W3/W7 scope. No Markdown export or Obsidian graph parity is promised. `.doc`/`.qxd` imports remain separate D23 work. D12. Q235–Q237 withdraw the superseded-notice proposal and its open-Q36 boundary. Current Case 2 chapter reads after conversion use W4b's committed DOCX reader/citations. Agent @@ -259,7 +262,7 @@ live scopes allow, no title/path leak from denied documents. Agents get this map reviewed library/universe lookup results and normal authorized Case 2 context so they know formats and locations. The checked Case 2 query adapters reuse W4's exact committed-reader/locator primitives; there is no native-engine or raw-store access. General current catalogue, -find/get/search/manuscript, graph and chat selection exclude archived Markdown chapters. +find/get/search/manuscript and chat selection exclude archived Markdown chapters. mos-1367 B4 adds an explicit `archived` read scope. It returns only requested archive records, subject to the caller's live authorized source/archive scope, always marked archived/historical and `canon:false`. It cannot supply canon quotations, satisfy a current-chapter citation, @@ -330,10 +333,12 @@ flag on either API. Before that gate, only isolated fixtures can create/import s Import requires the human to push and close Obsidian before confirming the exact source tip; no seat surveys/reads the private working tree. The UI makes that precondition explicit. A user may still push edits with her own tools later. Sync flags changed archive blobs and -Markdown recreated at a converted old path; neither becomes canon/current, syncs to DOCX or -triggers conversion. Console Markdown save refuses every archive path. Newly created .md -story files in converted manuscript locations are flagged awaiting import and excluded as a -second current chapter; no auto-conversion. Preserve unexpected bytes for human resolution. +Markdown recreated at a converted old path. That old-path file is unmapped: neither canon +nor playground; lookups leave it out, the format map flags it and the human is told. Archive +edits never become current or sync to DOCX. Neither case triggers automatic conversion. Console Markdown save refuses every archive path. A new Markdown story at a different path +in a book folder containing converted files stays canon until its import; the Console flags +it and offers the import. A new file is not excluded merely because its book has converted +chapters. Existing playground scope rules still apply. No automatic conversion. Preserve unexpected bytes for human resolution. A new problem-state version records these states while keeping R1–R7 meanings fixed; W7 owns the migration and tests, not a silent new code in the v1 state parser. @@ -777,7 +782,7 @@ Reuse verb-sensitive ownership/grant checks. Stale grant/path/thread redacts con counts but permits owned-pin deletion. Store saved-context envelopes on the bus, deny their publication to an agent until W4/W4b. Human-only settings with version checks/defaults include `editor.commitCadenceMs` 0, `editor.saveGroupPauseMs` 2000 and `editor.saveGroupMaxMs` 15000, -`editor.archiveFolder` archive/converted, `editor.conversionHumans` owner-only, +`editor.archiveFolder` unset/no default (library mapping), `editor.conversionHumans` owner-only, `editor.markdownImportMaxBytes` 1048576 (1..16777216 integer), `editor.remoteURL` unset/off-host-only, `editor.remoteRetryDeadlineMs` 30000 (1000–300000 integer), sharing visible-chip-per-send and require-citation off. UI/CLI use the same backend validation. The archive-folder key uses D11's path/collision checks and one canonical library-mapping @@ -899,12 +904,12 @@ A restricted engine and writer are not yet an all-day writing workspace beside p `packages/webui/src/public/{index.html,bus.js,bus.css,chat.js,chat.css,writing-pane.js,writing-pane.css}`, `packages/webui/src/{serve.mjs,chat.mjs,chat-http.mjs}`, -`packages/webui/tests/{writing-pane.test.mjs,writing-browser.test.mjs,chat-browser.test.mjs,writing-connections.test.mjs}`, +`packages/webui/tests/{writing-pane.test.mjs,writing-browser.test.mjs,chat-browser.test.mjs}`, `packages/webui/README.md`. ### What ships -D10/D16-D22's navigation and Connections view, familiar full WordCraft surface, splitter, settings controls, save/sync +D10/D16-D22's navigation and clickable editor links, familiar full WordCraft surface, splitter, settings controls, save/sync status and local right-click/ribbon thesaurus. Two distinct DOCX chapters keep their separately pinned ordinary chat drafts and cursors; background unread metadata never wakes a run. No remount on chat polls. Test keyboard divider/tabs, dirty navigation, credential expiry, stale pins, disabled sharing before @@ -1150,10 +1155,10 @@ only inside their supporting scope. mos-1372 D9 replaces M1's dedicated-session/ read-story then write-character-sheet workflow works under existing Case 2 authority. Never allow that writer to target DOCX or archive files. -Tests prove all P1–P6, per-story-file reports/confirmations/manifests/commits, human-set archive folder, +Tests prove all P1–P6, per-story-file reports/confirmations/manifests/commits, human-set archive folder with no default, missing-folder refusal, archive blob equality/history retention, human loss-report confirmation, wiki tokens/front matter/metadata and draft/canon-status preservation, converted-marker discovery, map scope filtering, -link graph routing, no sync back/current Markdown editor, source CAS conflicts, in-flight/cached pre-conversion query invalidation and idempotent +clickable-link routing, no sync back/current Markdown editor, source CAS conflicts, in-flight/cached pre-conversion query invalidation and idempotent request readback. Kill at every stage/publication boundary: before switch serve the captured old Markdown; after switch serve committed DOCX only; crash recovery never presents two/zero current masters. No production fixture bypass, request-based go flag or agent-started import. @@ -1225,7 +1230,7 @@ Later mos-1372/1375 override A32/A33's per-document/dedicated-session assumption | Q7 / A32/A33 | mos-1372 D9: ordinary Case 2 access in any thread/room, no per-document grant/share/dedicated session; existing supporting writes continue; marked for PRD 1.17 approval | | Q8 / A36 | W4b/W7: preserve Case 2 find/get/search/manuscript/universe tools via host committed-reader adapters, not fewer tools or raw ZIP access | | Q9 / A73 / C2 | W7: D10 manifest order, typed next_chapter, paragraph cursors bound to snapshot/access; both W4 byte cap and harness REPLY_CAP apply, never cut paragraphs or invent line equivalents | -| Q10 / A22 | W3/W7: Console Connections view, current cross-format links/backlinks with scope/format labels; Obsidian graph explicitly historical after conversion | +| Q10 / A22 | W3/W7 keep clickable cross-format editor links; no DOCX graph yet. Connections view/tests are later work, waiting on Jason's J-b answer; Obsidian archive graph is historical | | Q11 / A37 | W7: Console archive saves refuse; sync flags later archive edits or recreated old paths and excludes them from current canon; no remote-push refusal/protected-pattern guarantee | | Q12 / A21 | W7: reviewed markdown-it AST + first-party DOCX adapter; no new runtime converter; input cap 1 MiB default, W4 ZIP/XML validation, construct/token/extractor fidelity before archiving | | Q13 | W7 survey: synthetic construct corpus and aggregate-only count capability; no seat reads real text or claims a corpus census happened | @@ -1258,6 +1263,11 @@ renderer does not enable it. No change is imposed on the October27 release. | B3 human-only conversion boundary | D12, W7 | vocabulary snapshot has no conversion grant/tool | | B4 explicit archived read scope | D12, W7 | requested/authorized/marked/non-canon only; excluded from current canon | +Alignment note: sage-3121 checks this revision against PRD 1.17 d6, +SHA-256 `886b93c571f87bfbb2f27ee3113b6800a32d8f89196d95ace33566031bee380a`. +Connections graph/tests wait for J-b; new non-old-path Markdown stays canon until import; +archive folder is human-set in the library mapping with no default. + ## Current verification and remaining gates This is a docs-only policy rewrite for Vikunja 571. S0's conditional baseline PASS, Q234's diff --git a/docs/plans/2026-10-22_q195-docx-citations.md b/docs/plans/2026-10-22_q195-docx-citations.md index f51af6a51..93fe86a2c 100644 --- a/docs/plans/2026-10-22_q195-docx-citations.md +++ b/docs/plans/2026-10-22_q195-docx-citations.md @@ -45,13 +45,19 @@ it, only the current DOCX is a chapter. Pre-push failure leaves source Markdown after archive push, failure is a visible resumable pending operation, never an assertion that nothing moved, a rollback push or Markdown revival. Old bytes/history remain. -The archive is in the human-set source-repository folder, default archive/converted, with +The archive is in the source-repository folder set by a human in the library mapping. +There is no default; missing/invalid folder keeps conversion closed. It is recorded with converted date, source commit/blob/path and replacement ID in the operation record. It is read-only in the Console. Explicit `archived` scope returns only requested authorized records, always marked and non-canon; default/current queries never opt into it. An old source lookup returns a typed conversion record and routes an authorized DOCX read, never stale Markdown or fake DOCX lines. Historical line cites still verify at commit/blob and show converted/historical state; archive access alone is not current story authorization. +A Markdown file recreated at a converted old path is unmapped, neither canon nor playground, +excluded from lookups and flagged to the human. A new Markdown story at a different path in +a converted book stays canon until import, flagged and offered for human import; no automatic +conversion. Existing playground scope rules remain. Clickable DOCX editor links stay; no +DOCX graph exists yet. A Connections graph and its tests wait for Jason's J-b answer. Every conversion runs the pinned extractor before archiving and refuses unsupported output. An independently reviewed importer preserves every wiki token and front-matter key; metadata @@ -622,7 +628,7 @@ These are required future fixture gates, not implementation results. | A32 | Existing grant/restore controls and conversion metadata COUNTED | restore cannot revive grant, current Markdown or uncounted conversion event | | A33 | Staging/archive/publish journal and operation readback | crash/sync at every boundary; pinned source until publish; post-push failure pending, not undone | | A34 | Manifest order, typed index/links and format map | next_chapter never archive; draft scope retained; cross-universe/hybrid exclusions and R4/R5/R6 | -| A35 | Per-file fidelity, source history, human controls | all constructs/wiki/front matter preserved; no agent conversion; new DOCX has no Markdown precursor | +| A35 | Per-file fidelity, source history, human controls and missing-folder refusal | all constructs/wiki/front matter preserved; no agent conversion; new DOCX has no Markdown precursor | Implementation acceptance includes exact schemas/parser fixtures, live project/universe revocation probes, same-thread supporting writes, remote denial/failure, counted-event restore