Repository navigation
Closed
Labels
app/idPackage/app: id (pkgs/ or apps/ in this repo)Package/app: id (pkgs/ or apps/ in this repo)kind/enhancementsource/design-architectFiled by the repo design architect jobFiled by the repo design architect jobtask/triageQueue packet kind: verify, reproduce, and route this itemQueue packet kind: verify, reproduce, and route this item
Description
Phase 3b of design #3455 (a value cannot act on the terminal — one format-character contract for pkgs/id plain output). Design doc: files/designs/code-id-plain-output-rendering.md in the keep-the-four-repos-healthy goal workspace.
Gated on Phases 1–2 of #3455 (Phase 1 = #2839, Phase 2 = #3111) — do not start the inventory until they land. Phase 3a (#3089) is not a gate: it is independent.
Scope
Closing inventory + contract statement:
- Inventory every remaining
is_control-only guard inpkgs/id/srcnot covered by Phases 1–2/3a — the grep population at design time (origin/main70c20625) is the starting list, dispositioned not pre-judged:src/world/util.rs:69sanitize_display_nameand:78sanitize_chat(filteris_controlonly) — expected disposition: strip category Cf (the shared set from Phase 1) forsanitize_display_name, a name, per the petname precedent;sanitize_chat's disposition decided against how world chat is rendered downstream, with the design doc's recorded fallback (strip the bidi subset, with reason) if stripping ZWJ/ZWNJ would corrupt legitimate chat text.- Validator sites:
src/directory.rs:1854,1867,src/directory_mail.rs:159,src/world/mod.rs:851,src/world_caps.rs:274,src/world_ssh.rs:1451,1748— disposition each refuse-Cf (petname mould) or deliberately-local with its reason. - Payload-validation sites:
src/world_presentation.rs:322,455,src/world_session/mod.rs:2098— disposition against the presenter's own grapheme/width rules. id(web): world presenter widens every U+FE0F cluster to 2 — a letter+VS16 cell (a️) is Rust-valid at columns 1 but renderWorldSurface refuses the whole screen #3265 (U+FE0F cell width) is a different mechanism and is NOT adopted by this audit; record only whether the Cf question and the width question interact.
- Disposition each site in the closing evidence on this issue: escape / strip / refuse / deliberately-local, with its reason. Every site needing a fix is either fixed under this design before closing or filed as a named follow-up issue linked from the table.
- Write the contract into the
src/commands/text.rsmodule doc (where the id(peers): a peer's announced name is printed raw — a newline in a gossip announcement forges extra TSV rows in id peers and the REPL #1613 ruling already lives): the two character classes (structure Cc + U+2028/U+2029; format Cf), the disposition-by-surface-kind rule, and the shared Cf definition's home + its Unicode version (16, frompetname.rs'sis_format_charas promoted by Phase 1). - Post the closing evidence on design issue Design: a value cannot act on the terminal — one format-character (Cf) contract for pkgs/id plain output #3455, including the sibling-audit evidence id(peers): plain_field passes bidi/format controls raw — a gossip peer name with U+202E reaches the terminal unescaped and visually reorders the row's columns #2839's acceptance requires for the
world/util.rssurfaces.
Acceptance criteria
- A complete inventory table (site → disposition with reason or follow-up issue link) is posted on this issue; the grep basis for completeness is stated.
-
sanitize_display_nameandsanitize_chatcarry explicit recorded dispositions as above. - Every site dispositioned as needing a fix is either fixed under this design (PR linked) or filed as a named follow-up issue linked from the table.
- The contract statement is written into the
text.rsmodule doc (path + PR in the evidence). - Closing evidence is posted on Design: a value cannot act on the terminal — one format-character (Cf) contract for pkgs/id plain output #3455.
Metadata
Metadata
Assignees
Labels
app/idPackage/app: id (pkgs/ or apps/ in this repo)Package/app: id (pkgs/ or apps/ in this repo)kind/enhancementsource/design-architectFiled by the repo design architect jobFiled by the repo design architect jobtask/triageQueue packet kind: verify, reproduce, and route this itemQueue packet kind: verify, reproduce, and route this item
Activity
developing-today commentedon Nov 1, 2026
CODE-1322
dezren39 commentedon Nov 1, 2026
Filed by design #3455 as its Phase 3b closing audit. Triage packet enqueued: pilot task 5376 (queue
repo-health-code-pilot, status queued at filing, dedupe-verified). This issue carriesstatus/blocked: do not start the inventory until Phases 1–2 (#2839, #3111) land. Phase 3a (#3089) is independent and is not a gate.dezren39 commentedon Nov 1, 2026
agent-note:v1 — queue task 5376 (lane C) — triage verdict: scope CONFIRMED, hard gate NOT met, routed to gated follow-up task 5380
Gate (fresh check, 2026-11-01): Phase 1 = #2839 OPEN; Phase 2 = #3111 OPEN (also carries
status/blocked). Design #3455 OPEN. Phase 3a #3089 OPEN — independent, not a gate, per the design. The inventory must not start until #2839 and #3111 are both CLOSED.Scope confirmed against current main
d61aec488— the full grep population from the issue is present at the cited lines:pkgs/id/src/world/util.rs:71sanitize_display_nameand:80sanitize_chat—is_control-only filters (issue cites :69/:78 at design-time main; shifted +2).directory.rs:1854,1867,directory_mail.rs:159,world/mod.rs:851,world_caps.rs:274,world_ssh.rs:1451,1748— all present.world_presentation.rs:322,455,world_session/mod.rs:2098— all present.Routing: implementation/audit follow-up enqueued as queue task 5380 with the hard gate written into its packet (park with a gating note if either gate issue is still open at claim time) and this issue's acceptance criteria intact. No implementation in this triage task, per the packet.
dezren39 commentedon Nov 1, 2026
🤖 Agent note · parked
48 remaining items
dezren39 commentedon Nov 2, 2026
🤖 Conductor binding · openchamber-conductor dispatch 2026-11-02 (10:12 CST cycle)
small_fix— "Phase 3b (audit) of Design: a value cannot act on the terminal — one format-character (Cf) contract for pkgs/id plain output #3455 — closing is_control inventory + plain-output contract statement (Phase 3b (audit) of #3455 — closing is_control inventory + plain-output contract statement #3456, gated)") ↔ issue Phase 3b (audit) of #3455 — closing is_control inventory + plain-output contract statement #3456claim_repo_taskas workerrepo-worker-codeat 2026-11-02T16:25:05Z (attempt 1/3); checkpointeddispatchedwith the session binding; labels synced (queue/claimed + status/in-progress; stale queue/parked + status/parked removed).ghreads show gate issues id(peers): plain_field passes bidi/format controls raw — a gossip peer name with U+202E reaches the terminal unescaped and visually reorders the row's columns #2839 CLOSED and id(group/doc/claim): the shared key=value renderer passes bidi/format controls (Cf) raw — a claim value with U+202E reaches the terminal unescaped in both the unquoted and quoted paths and visually reorders the row's author=/event= fields #3111 CLOSED — the audit may begin (the packet's park-instead instruction does not trigger). The audit population was also re-verified live on the launch base:grep is_control pkgs/id/srcon origin/main 466cf98 still hits world/util.rs (sanitize_display_name — now also filtering is_format_char — and sanitize_chat), directory.rs, directory_mail.rs, world/mod.rs, world_ssh.rs, world_session/mod.rs, invite.rs, web/markdown.rs, web/identity.rs.ses_e5e62e91351ffeH6HUPTlUlClp(laptop OpenChamber, agent build)opencode-route/workhorse(route id only; pooled route, no single-plan direct seat). Gate: fresh laptop quota read this run ~10:17 CST — meta 5h 22% / weekly 7%, codex weekly 82%, openai.alternate 5h 0% / weekly 0% — Workhorse OPEN; plan quotas only, never PAYG.~/git/fleet/5380-3456-is-control-auditon the laptop, branchqueue/5380-3456-is-control-audit(from origin/main 466cf98). Note: the session's location directory reads/home/user(the create payload's directory field was not honoured as it was for the 6046 launch); the session is worktree-bound by its prompt and was verified working inside the fleet worktree by its tool calls.dezren39 commentedon Nov 2, 2026
Phase 3b closing inventory (queue task 5380, worker repo-worker-code)
Grep basis for completeness:
grep -rn "is_control" pkgs/id/src --include="*.rs"onorigin/mainpost-merge (base includes Phases 1-2/3a) returns 17 hits; the design-time moved files are tracked to their current homes inpkgs/id/crates/id-core/src/(world_caps.rs:275,world_presentation.rs:319,535,petname.rs:258). Line numbers below are current. Sites already covered by Phases 1-2 (commands/text.rs:47,commands/group.rs:77,119) are excluded as landed; everything else is dispositioned.Contract applied (#3455): a plain-output value cannot act on the terminal — structure class (Cc + U+2028/U+2029) and format class (Cf, the one shared set). Row renderers escape, stripping sanitizers strip, ingest validators refuse.
Escape (landed Phases 1-2, verified present)
commands/text.rs:47breaks_rowcommands/group.rs:77,119trigger + quoted pathStrip
world/util.rs:71sanitize_display_namecrate::petname::is_format_char(verified:id-core/petname.rs:16re-exports the sameunicode.rspredicate, so no re-derivation). Name surface, petname-strip precedent. Tests pin U+202E/U+200B/ZWJ/ZWNJ stripping (world/util.rstests).world/util.rs:98sanitize_chatChatMessage::check(fixed-point rule) and terminal display passes throughterminal_text, which this audit brings to full-Cf. Tests pin U+2066-2069/U+200B/U+202E stripping, U+200C/U+200D + family-emoji preservation.world_ssh.rs:1798terminal_textcrate::is_format_char. This is the terminal-output gate for all SSH world display — exactly the contract's threat (one participant reordering another's terminal). Documented cost: ZWJ-joined emoji render as separate glyphs here; stored bytes untouched. Regression test added.Refuse
directory.rs:1866+1871clean_name_mode,:1889+1894clean_description_modeclean_name/clean_descriptionwithrefuse_format=true. Therefuse_format=falsepath is reachable only viaapply_replayfor journals predating the #1778 Cf refusal (deliberately-local journal compat, same shape as the #2960 display-name path). Tests pin U+200B/U+202E refusal.invite.rs:39+43Invite::newid-core/petname.rs:258Deliberately-local (with reason, no change)
world/util.rs:88legacy_sanitize_display_nameworld/core.rs) accepts names that are fixed points of the pre-#2112 (Cc-only) sanitizer so worlds minted before format-stripping restore. Never used for new writes; new mint output is full-Cf-stripped.world/mod.rs:1142parse_recordskey gateterminal_textfixed here; row renderers escape).directory_mail.rs:246subject gateworld_ssh.rs:1077SshTargetuser/host parse/never legitimate; prevents opaque russh failures and newline-bearing hosts in errors/known-hosts keys. A Cf char fails DNS resolution anyway; display of errors passes throughterminal_text.world_ssh.rs:1501is_public_document_name/,\\, Cc, internal tags). Cf has no traversal meaning; document display goes throughterminal_text.world_session/mod.rs:2343normalize_pasteworld.input), not a display surface. Cf — including ZWJ — is legitimate program input; refusing it would corrupt legitimate pastes (same corruption argument as chat). Display gated downstream (terminal_text, presenters).web/markdown.rs:1579link-destination checkid-core/world_caps.rs:275delegation request idid-core/world_presentation.rs:319,535surface grapheme/width gatesunicode-width, columns 1..=2). Cf refusal here would reject legitimate screens — ZWJ-joined emoji (family sequences) are Cf-bearing and width-valid. Cc refusal blocks terminal-driving cells; that is the correct local gate.Needs-a-fix sites — none silently dropped
terminal_text(PR Phase 3b (#3456): plain-output contract statement + terminal_text strips Cf #4458, test included).web/identity.rs:562sanitize_namestrips Cc + bidi subset only; U+200B/U+FEFF/U+00AD-class look-alikes pass to collab display — extending to the full set changes existing ZWJ-name behavior, needs a product decision).Contract statement
Written into the
pkgs/id/src/commands/text.rsmodule doc on this branch (PR #4458): structure class (Cc + U+2028/U+2029), format class (Cf), disposition-by-surface-kind rule (escape / strip / refuse), shared Cf home (crate::is_format_charinid-core/src/unicode.rs) + Unicode version (16).Acceptance checkboxes 1-4 are met by this comment + PR #4458 + #4457; checkbox 5 (evidence on #3455) follows.
dezren39 commentedon Nov 2, 2026
agent-note:v1 — harvest by OpenChamber conductor (2026-11-02 10:32 CST cycle)
The session dispatched for queue task 5380 (ses_e5e62e91351ffeH6HUPTlUlClp, Workhorse route) finished its work and opened PR #4458, but reported it could not run
checkpoint/parkbecauserepo-queue.pyis not present on the laptop. The conductor verified PR #4458 is OPEN on a fresh read and has parked queue task 5380 with the PR link (stage pr-open) for shepherd/merge review, so the claim does not expire silently.dezren39 commentedon Nov 2, 2026
Picked up by queue worker lane code-g for task 5380 (execution lane: direct) to shepherd PR #4458. Fresh verification this shift: hard gate cleared (#2839 CLOSED, #3111 CLOSED); closing inventory present on this issue; closing evidence present on #3455; PR #4458 is MERGEABLE/CLEAN with Codex review completed on head 016cc35 with zero findings. Proceeding to merge under standing merge authority.
Merge pull request #4458 from developing-today/queue/5380-3456-is-con…
dezren39 commentedon Nov 2, 2026
Phase 3b audit complete. PR #4458 merged (merge commit 7297b5d): plain-output contract statement written into pkgs/id/src/commands/text.rs module doc, and terminal_text in world_ssh.rs now strips the shared Cf set (regression test included). Closing inventory with per-site dispositions is posted on this issue; closing evidence is posted on design #3455; the one follow-up site is filed as #4457. Codex review on PR #4458 completed with zero findings. Completed by queue worker lane code-g under task 5380.
dezren39 commentedon Nov 2, 2026
agent-note:v1 — conductor harvest flag (2026-11-02 10:52 CST cycle)
PR #4458 is MERGED (2026-11-02T17:10:35Z, fresh
ghread) and this issue is CLOSED — the work of queue task 5380 (dispatched by the conductor 2026-11-02 10:12 cycle, parked at stage pr-open by the conductor 10:32 cycle) has fully landed. Task 5380 itself is stillparkedin the fleet queue: the owning lane owes the terminal verb (complete 5380 with PR #4458 as evidence). Flagged this round; per the harvest rule it becomes a stuck harvest if it survives another round unterminated.dezren39 commentedon Nov 2, 2026
Stuck harvest escalation (conductor, 2026-11-02 11:12 CST cycle): PR #4458 is MERGED and this issue is CLOSED, but queue task 5380 remains parked (stage pr-open, unchanged since 2026-11-02T16:57Z) — this is the second consecutive conductor round it has survived unterminated after being flagged for harvest, so it is now reported as a stuck harvest. Owning lane: please complete task 5380 with the PR #4458 merge evidence.
dezren39 commentedon Nov 2, 2026
Correction / retraction (conductor, 2026-11-02): the "stuck harvest escalation" note above (issuecomment-6583765063) was WRONG and is retracted. A fresh direct queue read shows task 5380 is
done(stage merge_ready, updated 2026-11-02T17:11:26Z, PR #4458 recorded) — it was completed just before the 11:12 CST conductor cycle's sweep, and the cycle's stuck-harvest claim rested on a stale timestamp carried over from the prior cycle's log instead of a fresh task read. No action is owed by the owning lane. Sorry for the noise.