check-prose's canon read degrades to a silent skip in CI — wire the canon into the runner or snapshot it #25

Open
opened 2026-10-07 20:11:41 +00:00 by jsutter · 0 comments
Owner

Found while closing #24 (run 3344 crashed there): check-prose.py reads its noun table from CANON_DOC = DITDOCS_CANON_DOC or /home/jsutter/realms/symbio/repos/armada/canon/interface-surface.md — a sage-only absolute path. Inside the tenant runner even the stat raises PermissionError, so dc66bac now degrades unreadable to the same skip branch as absent: CI's prose gate runs with SYNONYM/REGISTRY silently skipped (sage-side runs keep the full table).

That is a correctness gap, not a wiring preference: the SYNONYM/REGISTRY rules currently enforce only on the operator's box, and the run 3346 green rode the skip.

Options to close (decision needed):

  1. Set DITDOCS_CANON_DOC in the publish job to a runner-reachable file — requires getting the canon INTO the tenant runner: clone armada (cross-forge: git.symbiotrip.com → deepnet runner auth) or a mirror copy.
  2. Commit a canon snapshot into ditdocs (the captures discipline: captures pin CLI truth the same way) + point the env at it; a freshness workflow re-mirrors on canon change, like captures: refresh does on releases.
  3. Emit the noun table as a generated artifact the runner fetches from a reachable repo.

Also note ARMADA_ROOT in build-docs.py faces the same shape (fleet prose gate resolves ~/realms/symbio/repos/armada/scripts/check-prose.sh; empty-string disables) — the same decision covers both.

**Found while closing #24** (run 3344 crashed there): `check-prose.py` reads its noun table from `CANON_DOC = DITDOCS_CANON_DOC or /home/jsutter/realms/symbio/repos/armada/canon/interface-surface.md` — a sage-only absolute path. Inside the tenant runner even the stat raises PermissionError, so `dc66bac` now degrades unreadable to the same skip branch as absent: **CI's prose gate runs with SYNONYM/REGISTRY silently skipped** (sage-side runs keep the full table). That is a correctness gap, not a wiring preference: the SYNONYM/REGISTRY rules currently enforce only on the operator's box, and the run 3346 green rode the skip. **Options to close** (decision needed): 1. Set `DITDOCS_CANON_DOC` in the publish job to a runner-reachable file — requires getting the canon INTO the tenant runner: clone armada (cross-forge: git.symbiotrip.com → deepnet runner auth) or a mirror copy. 2. Commit a canon snapshot into ditdocs (the captures discipline: captures pin CLI truth the same way) + point the env at it; a freshness workflow re-mirrors on canon change, like `captures: refresh` does on releases. 3. Emit the noun table as a generated artifact the runner fetches from a reachable repo. Also note `ARMADA_ROOT` in build-docs.py faces the same shape (fleet prose gate resolves `~/realms/symbio/repos/armada/scripts/check-prose.sh`; empty-string disables) — the same decision covers both.
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
deepnet/ditdocs#25
No description provided.