Repository navigation
Description
Finding
Phases 9 and 10 added many capabilities quickly and their own follow-up record says they "were delivered faster than they were verified." There are no dedicated Phase 9/10 issues carrying that verification debt, so the acceptance criteria for individual P9/P10 slices have no issue to close against.
Evidence
doc/2026-10-17T15-00-00Z_architecture_next_stage_platform/2026-10-17T15-00-00Z_architecture_next_stage_platform.md: Phases 9/10 "were delivered faster than they were verified.".opencode/plans/phase-9-portable-platform.mdrecords P9.1–P9.11 and P10.1–P10.3 as complete, each with a feature record, but the acceptance criteria (e.g. the P9.1 acceptance list at the bottom) are not individually tracked in issues.- Phase 9 PRs feat(id): add portable world screen presentations #214/feat(id): add per-session world viewport and paste #219 were closed unmerged on 2026-10-18 while equivalent work landed via the platform stack (feat(web): compile Roc sources from world page #209–fix(id): show world chat only to participants who may chat or read history #256), leaving a fragmented PR trail.
- Phase 11 (
.opencode/plans/phase-11-foundations.md, issues id(ci): F11.8 benchmark harness with committed baselines #539–id(roc): F11.15 smaller example modules (wasm-opt -Os, strip, <=400 KB) #555) covers a subset of the debt (fuel budgets F11.6, benchmarks F11.8, bytes-per-frame F11.9, replay self-check F11.16, module size F11.15, compiler pin F11.18). It does NOT cover per-slice acceptance verification for every P9/P10 feature.
Why it matters
The Phase 11 issues will make the platform measurable, but they do not individually verify each P9/P10 acceptance criterion (screen DTO bounds/parity, keyboard/viewport/paste parity, execution profile ceilings, RocJson/RocGrid/RocCap/RocText correctness, roles/directory, fixtures, scheduled events). Without a tracking issue, that debt is carried only in prose and can silently drop out of view.
Suggested scope (for the implementer to plan)
Enumerate the P9/P10 acceptance criteria that lack a test or an issue, and either file a per-item issue or add the missing verification. Defer to Phase 11/12 issues where they already cover the criterion (reference, don't duplicate).
Acceptance criteria
- Every remaining verification-debt item in the child inventory comment (9-2 parity harness, 9-3 DTO determinism/caps, 9-5 chat.history/records.read bounds, 9-6 SSH window-change + paste/ResizeObserver wiring, 9-7 source-only compiler check, 9-8 CLI verb coverage, 10-2 schedule fire visibility/ceiling) has a proving test added, or is split into its own issue linked from here.
- No production code changes unless a new proving test reveals a bug — a revealed bug gets its own issue/PR reference rather than being fixed silently under this tracker.
- Items already split out (id phase-9: a joiner's resize (up to 500x200) can permanently poison a world via the guest layout() call exceeding presentation_bytes #811, id phase-10: the world directory feed was not built — id world list --json is admin-only, has no presence counts, and 'open' means loaded-in-memory #812, id phase-9: Roc library expect() tests are never run — no 'roc test' wired into CI, flake.nix or the justfile #813) and items covered by Phase 11 issues (id(ci): F11.8 benchmark harness with committed baselines #539–id(roc): F11.15 smaller example modules (wasm-opt -Os, strip, <=400 KB) #555) are referenced, not duplicated.
- This issue closes only when every inventory item is test-covered or separately tracked.
Activity
dezren39 commentedon Oct 24, 2026
Child inventory (from the phase 9/10 review; per-item acceptance criteria with no proving test). Real gaps were split into their own issues: #811 (joiner resize poisons world) and #812 (directory feed not built). #813 covers the Roc expect() tests never running.
Remaining verification-debt items (add a test to prove each; no code change unless the test reveals a bug):
world_presentation.rs:418-595) and vitest (web/src/world-surface.test.ts) use unrelated inputs. id(web): world-surface presenter accepts cells the Rust wire validator rejects — symbol width/grapheme and continuation-symbol checks missing #724/PR #759's world-surface width check mis-measures astral-plane, ZWJ and ⚠️ glyphs (JS width 1 vs Rust unicode-width 2) — must not close #724 as-is #761 already show the two validators diverged. Easy fix: a checked-in JSON corpus of screen cells (CJK, astral, ZWJ,enforces_screen_dimension_and_style_span_caps(world_presentation.rs:588) only tests width 121. Missing: height 51, zero dims,MAX_SCREEN_STYLE_SPANScap,styles.len() != height, empty span,from_cellsmismatched counts, and determinism (serialize twice ⇒ equal bytes).time.now, notchat.history(world.rs:4232-4255). Untested: chat.history default 16 / clamp 64; records.readnext_after,MAX_RECORDS_PAGE_BYTEScut,BadArgsrefusal of an oversized first record (world.rs:2591-2606).world_ssh.rs:295-306(window_change_request) has no test;web/src/world.ts:244-265(paste, ResizeObserver) has no unit/E2E test.commands/serve.rs:839-840has no test.id world stats,logs,caps --ceiling,profilehave parse-only tests; theworld newscaffold is written but never compiled.events_after), and no schedule test sets a ceiling (schedule.atrefused outside the ceiling). Related Host-originated events are not retained in the event stream #242/id(world): F11.11 enforce the client projection with a structural test #543.Each is a small, targeted test addition; the proving tests and commands are in the review's report.
docs(id): Phase 14 plan — close-out: finish, measure, verify, open th…
dezren39 commentedon Oct 26, 2026
Intake review
Related: The child inventory comment on this issue (2026-10-24) is the working list — real gaps already split into #811 (joiner resize), #812 (directory feed), and #813 (Roc expect() tests); Phase 11 issues #539–#555 cover a measurable subset (fuel budgets, benchmarks, bytes-per-frame, replay self-check, module size, compiler pin) and must be referenced, not duplicated. Items 9-2 relates to #724/#761 (presenter-validator divergence).
Still live (verified 2026-10-26): no merged PR references or resolves this tracker, and the inventory items (9-2, 9-3, 9-5, 9-6, 9-7, 9-8, 10-2) remain without proving tests or dedicated issues. Not solved; do not close.
Notes / risks: This is a tracker, not a single fix — its failure mode is becoming a permanent umbrella. The appended acceptance criteria make closure mechanical: every inventory item test-covered or spun out. Each item is individually small (a targeted test addition), so this should shrink item by item rather than land as one large PR.
Suggested approach: Work the inventory top-down; for each item either add the proving test (link the PR here) or file its own issue and link it. Re-check the Phase 11 set before filing anything new.
🤖 Agent note · intake enrichment
63 remaining items
developing-today commentedon Nov 3, 2026
agent-note:v1
state: reviewed (coverage loop-back)
Coverage pass 2026-11-03, loop-back review: this issue was re-reviewed (drift / overlap / already-handled / stale / blockers / ordering) so every open issue in the four repos is reviewed and in the system. Verdict: still live; in the system as task 8090 (triage, queued, priority 50) in repo-health-code-pilot. Labels audited and synced. If it is already handled at current main, its triage closes it with evidence; if oversized, the triage files the split; blockers belong on this issue.
Found via: coverage loop-back 2026-11-03
dezren39 commentedon Nov 4, 2026
🤖 Agent note · picked up
dezren39 commentedon Nov 4, 2026
🤖 Agent note · triaged (tracker still live; last 3 items now split + routed)
Fresh verification (2026-11-04): issue #796 OPEN, no hard-stop labels. PR #4681 MERGED (2026-11-03T01:34Z — items 9-3 DTO determinism/caps and 9-5 chat.history/records.read bounds proven) and PR #4762 MERGED (2026-11-03T05:02Z — item 9-6 SSH window-change test on main), both re-checked fresh this shift. Item 9-7 remains covered by
world_sessionservice-level tests (per task 7481 triage, 2026-11-03 at main1e3763faf). Earlier splits #811 (closed) and #813 (closed) stand; #812 (directory feed) remains open as its own issue. The Phase 9/10 validation audits #1076/#1077 (closed 2026-10-27) already ran the broad per-slice walk — they do not cover these three per-item proving tests, which is exactly the residue this tracker carries.Remaining items — now split into dedicated issues + queue packets (the queue's dedupe design allows only one live fix packet per issue, so per-item routing goes through per-item issues, an option this issue's acceptance criteria explicitly name):
Disposition: task 8090 completes as
triaged. Issue #796 stays OPEN as the tracker — it closes only when #5237, #5238, and #5239 close with evidence, per its own acceptance criteria. Labels reset so nothing reads in-flight for this triage.dezren39 commentedon Nov 4, 2026
🤖 Agent note · item 10-2 gap analysis (task 8991, lane code-s; split issue #5239, PR #5298)
Per #796 item 10-2 acceptance ("gap analysis recorded on issue #796 naming which assertions were already covered and which were added"), verified at origin/main
707689e32:Systemfiltering from joiner projections (project_event_for; core test asserting a retained host event is filtered fromevents_after/snapshot); program-side fire delivery (a_due_schedule_fires_once_and_the_program_receives_it); horizon refusal forschedule.at(schedule_bounds_refuse_each_violation_with_a_reason,refused_schedule_requests_pend_nothing); ceiling refusal for other caps (a_ceiling_change_denies_a_use_that_a_prior_grant_allowed,caps_ceiling_is_admin_only_and_applies_at_once).a_schedule_fire_never_reaches_joiners_via_events_after(schedule-fired payload never reaches a joiner'sevents_afterpage) anda_schedule_outside_the_ceiling_is_refused_and_pends_nothing(a schedule test that sets a ceiling excluding grantedschedule.at→cap_denied, counted, pends nothing).Merge pull request #5298 from developing-today/queue/8991-5239-schedu…
dezren39 commentedon Nov 4, 2026
🤖 Agent note · item 10-2 PROVEN (task 8991, lane code-m): PR #5298 merged (8bb1e43), split issue #5239 closed. Both assertions from the gap analysis now have passing proving tests (schedule_tests 21/21): a schedule fire never reaches joiners via events_after (System events filtered by project_event_for), and schedule.at outside a set ceiling is refused (outside_ceiling), counted, and pends nothing. Two initially-failing assertions were test bugs (a substring false positive on needs_snapshot; is_granted/error-code mixups) — production behavior was correct in both cases; details on PR #5298 / issue #5239.