Repository navigation
Description
What
Implement the D1-040 design: a documents/document ClientFrame/ServerFrame pair in the world-session protocol, modelled on records, so web and CLI clients can read the public documents — today reachable only from the SSH shell, which reads the shared server blob store directly. Scope is server-wide parity (the design's Decision 1): the frames expose exactly the set SSH exposes today; per-world scoping waits on the deferred per-world document store and is out of scope here.
Design
doc/2026-11-01T16-05-00Z_design_documents_session_frames/2026-11-01T16-05-00Z_design_documents_session_frames.md (lands with PR #3760; tracker #535 item D1-040). The design is decided — frame shapes, authorization, bounds, the serving-logic move, and test expectations are all pinned there. Read it first; this issue is the delivery vehicle, not a second design pass.
Acceptance criteria
-
ClientFrame::Documents { capability, prefix, after }andClientFrame::Document { capability, name }inpkgs/id/src/world_session/types.rs;ServerFrame::Documents { names, next_after }andServerFrame::Document { name, size, text }per the design (nosequenceon the list frame — the design records why) - Serving logic (
list_public_documents/read_public_documentand their name/bounds rules) lives in the session layer next torecords_session; authorization is the records rule (join capability →participant_id, elsejoin denied); the design's one structural unknown — how the session layer reaches the blob store the SSH shell holds today — is resolved and noted on this issue - SSH shell is frame-backed:
command_framegainsdocuments/documents_continue/documentarms mirroringrecords; rendered SSH output (public named files:listing,[listing truncated],--- {name} ({size} bytes; read-only) ---header,/help) is byte-identical to before - Contract updated on both sides: frames named in
pkgs/id/src/shell_contractand the shared frame contract; web contract tests extended; web client gains the minimal list + read documents panel the design specifies - Tests per the design's test expectations: session tests mirroring
records_session(paging, prefix,afterexclusivity, oversized/non-viewable/missing refusals,join denied), contract accept/refuse cases, existing SSH document shell tests passing against the frame-backed path - Existing mcpx/id CI green in GitHub Actions on the PR (note: pkgs/mcpx conformance has a pre-existing compile break on main — features_test.go:308 — do not chase it here)
Out of scope
- Document writes/publishing (unchanged), a
documents_ticketreplication frame (design non-goal), any change to which documents are public (id(ssh): fix #211 reconciliation gaps: total records cap, document output throughsend, per-world document store #548 owns the store).
Links
- Tracker: id(ssh): input and presentation designs #535 (D1-040). Design PR: docs(id): D1-040 documents frame-pair design + D1-045 command-toggle research (#535) #3760. Prerequisite: id(ssh): fix #211 reconciliation gaps: total records cap, document output through
send, per-world document store #548 (closed). - Model:
recordsframes inpkgs/id/src/world_session/types.rs,records_sessioninpkgs/id/src/world_session/mod.rs.
Activity
developing-today commentedon Nov 1, 2026
CODE-1521
developing-today commentedon Nov 3, 2026
agent-note:v1
state: triaged (coverage pass)
Coverage pass 2026-11-03: reviewed in the fleet-wide per-issue pass (drift / overlap / already-handled / stale / blockers / ordering). Verdict: still live; queued in repo-health-code-pilot as triage at priority 40 (priority/normal). If this is already handled at current main, the triage closes it with evidence; if it needs splitting, the triage files the split.
Found via: coverage pass 2026-11-03
dezren39 commentedon Nov 3, 2026
agent-note:v1
state: picked up (task 8289, triage)
Agent: repo-worker-code — OpenChamber scheduled lane 335a5d1f-bfc1-4831-99ea-850c8939a727
Task: revalidate at current main; inspect the previous handoff and scope a fix or close with evidence.
dezren39 commentedon Nov 3, 2026
agent-note:v1
state: triaged (task 8289)
Agent: repo-worker-code — OpenChamber scheduled lane 335a5d1f-bfc1-4831-99ea-850c8939a727
Found via: current-main triage of queue task 8289
Revalidated open at current main (origin/main 1d8356f). The design PR #3760 is merged; PR search found no implementation PR for #3762. Main still has
list_public_documents/read_public_documentinpkgs/id/src/world_ssh.rs(~1455/1506), called by SSH command arms (~805/822); there are noDocuments/Documentsession frames inpkgs/id/src. The issue's stated gap remains live.Implementation scope is ready as written: move the existing public-document serving logic behind the session protocol, add the paired list/read frames and authorization, make SSH frame-backed, update shared contracts and the minimal web panel, and retain the specified paging/refusal/output compatibility tests. Design decisions are settled by #3760; #548 is already closed. No split or additional blocker is needed; issue #3762 itself is the implementation handoff. No code change made in this triage.