Repository navigation
Description
Validation task: Phase 9 (portable platform)
Drew (2026-10-26): make tasks to validate the delivered work and ensure the tests are thorough and pass.
Scope: Phase 9 as recorded in .opencode/plans/phase-9-portable-platform.md — portable surface contract, SSH/web presenters, source-only installs + provenance, resource profiles, capability ceilings, world CLI controls, structured Roc libraries (RocJson/RocGrid/RocCap/RocText), guest-aware reflow, chat history, records readback, authoring CLI. Phase 9 was delivered faster than it was verified — that debt is tracked umbrella-style in #796; this task is the dedicated Phase 9 validation split out of it.
Work:
- Walk every P9.x item in the plan; mark each verified, broken, or untested, with evidence.
- Run the relevant suites end to end (Rust, web, E2E, nix checks) and record results here.
- Add missing regression/property tests where a delivered feature has none.
- File a separate issue per failure/gap and link them here. Already-known Phase 9 findings to re-confirm or close 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 (joiner resize can poison a world), id phase-9: Roc library expect() tests are never run — no 'roc test' wired into CI, flake.nix or the justfile #813 (
roc testnever runs in CI).
Exit: every P9.x item verified by a passing test or tracked by its own issue; results recorded here.
Coordination (2026-10-26 reprioritization, per Drew): every id roadmap item now has its own GitHub issue, and priority encodes the order: (1) the path to Phase 12 — now + priority/high; (2) Phase 12 itself — next; (3) Phase 13 and long-term ideas — priority/low. The dashboard mirrors this list (org Project "Developing Today" #4, Area id-train; Grist Program roadmap, Area id). If this item turns out to be blocked, wrong, or superseded, park or close it with a note rather than letting it stall the queue — dropping an issue is always allowed; silently stalling is not.
Acceptance criteria
- Every Phase 9 (P9.x) item in
.opencode/plans/phase-9-portable-platform.mdis marked verified, broken, or untested, with evidence recorded on this issue. - Rust, web, E2E, and nix check suites are run end to end and results recorded here.
- Delivered features with no regression/property test gain one, or the gap is filed separately.
- Every failure/gap has its own filed issue linked here; known findings id phase-9: a joiner's resize (up to 500x200) can permanently poison a world via the guest layout() call exceeding presentation_bytes #811 and id phase-9: Roc library expect() tests are never run — no 'roc test' wired into CI, flake.nix or the justfile #813 are re-confirmed or closed out with evidence.
Activity
developing-today commentedon Oct 27, 2026
CODE-219
dezren39 commentedon Oct 27, 2026
Intake review
Related: Umbrella verification debt: #796 · known findings: #811 (joiner resize), #813 (
roc testnever runs in CI)Notes: Phase 9 was delivered faster than it was verified; this is the dedicated validation split out of #796. Still live — filed 2026-10-27, no merged PR resolves a validation task.
Risks: The surface is broad (presenters, installs, Roc libraries, CLI); a shallow pass would repeat the original failure mode of the phase.
Suggested approach: Go plan-section by plan-section; treat 'untested' as a finding that needs either a new test or its own issue, not a footnote.
Labels were already normalized by the filer (kind, source/human, status/needs-triage, priority, effort, app/id all present); this pass appended the acceptance criteria above and adds
meta/enriched.🤖 Agent note · filed
dezren39 commentedon Oct 27, 2026
Sequencing (Drew's Phase 12 reprioritization, 2026-10-26): this audit is step 5 of the ordered Path-to-Phase-12 queue in #1235 — work it after #1075, before the next step. The full order, the tier rules, and the drop rule live in #1235. Reminder of this issue's contract: verify the phase against its plan, add missing tests until the suite is thorough, and file a separate issue for every gap found — the follow-ups join the tier-1 queue.
47 remaining items
dezren39 commentedon Oct 27, 2026
🤖 Agent note · slice 5 results — known-findings closeout (queue task 1257)
Evidence base: current main
f9c9ffdb, read directly (file:line below).View/ViewAt(world/actor.rs~L1085/~L1122): over-limit presentation →view_failures+ per-request error only,program_healthyuntouched. Sandboxview()/layout_at()(sandbox.rs): trapped view/layout does not poison the instance (F11.17; commits9f4633a3,07a906d0). Regression testa_trapping_view_degrades_to_an_error_and_recovers_on_the_next_event(world/tests.rs:2416). Resize range (1..=500 × 1..=200) andpresentation_bytesdefault 8192 unchanged — the consequence changed, not the inputs.roc testnever runsroc testinflake.nix/pkgs/id/justfile/ workflows on main. Expects now 33/15/13 = 61 unexecuted (RocJson grew from 29). Remains the tracked fix and the blocker for full Roc-row CI evidence.New slice-6 item from this closeout: no dedicated test asserts the oversize (non-trapping) view/layout case leaves the world healthy — the trap case is tested and the actor branch is structurally identical, but the oversize branch deserves its own assertion. Add to slice 6 (coverage gaps) alongside the RocText helpers item from slice 4.
Remaining: slice 6 — coverage gaps (RocText helpers untested at any layer; oversize-view assertion above; any remaining 'untested' rows → add the test or file its own issue). Slices 1–5 complete.
dezren39 commentedon Oct 27, 2026
🤖 Agent note · picked up
dezren39 commentedon Oct 27, 2026
🤖 Agent note · slice 6 results + audit complete — coverage gaps (queue task 1257)
Evidence base: current main
6f4532abb5ec0b432030c711d6b5aacd12f6099a(read directly, file:line below). Two slice-4 verdicts are corrected by this slice — slice 4 inventoried only Rocexpectblocks and examplemain.rocreferences, and missed the Rust compile-and-run tests inpkgs/id/src/world_compile.rs. Those tests execute in CI: the pkgs/id package derivation carriesrocCompilerinnativeBuildInputs, builds the wasm host inpreBuild(buildWasmHost), and runscargo testwithdoCheck(onlyserve_testsskipped) —pkgs/id/flake.nix~L617-660.text_helpers_trim_case_split_and_prefix(world_compile.rs:922) compiles a real app against the platform and asserts exact output fortrim,lowercase,starts_with,drop_prefix(hit + miss),lines/join_linesround-trip, andcontains(hit + miss):t=AbC|l=abc|p=yes|d=go|m=keep|j=a\nb\n|c=yes.RocText.rocitself carries 0 expects (nothing pending on #813). Residual, noted not filed:text_of's invalid-UTF-8 →""edge is exercised only indirectly via the other helpers. Example-app adoption of RocText is tracked separately by #565.the_capability_helper_issues_matching_requests(world_compile.rs:654) drivesRocCap.issue/attach/chat_requestdirectly in a compiled app, on top of the roc-chat history + records sandbox tests from slice 4.RocCap.roccarries 0 expects.world/actor.rs~L1092View, ~L1131ViewAt:text.len() > presentation_bytes→view_failures += 1+ per-request error,program_healthyuntouched) have no test; only the trap branch does (a_trapping_view_degrades_to_an_error_and_recovers_on_the_next_event,world/tests.rs:2416). Filed #1375 (app/id + priority/high + now + kind/test) with acceptance criteria mirroring the trap test.Audit exit check (issue acceptance): every P9.x row is now either verified with named-test evidence (slices 2–4, as corrected above) or tracked by its own filed issue (#813, #1315, #1322, #1375); suites were run and recorded in slices 2–3; #811 closed with evidence and #813 re-confirmed in slice 5. Slices 1–6 are complete, so this validation issue is closed with this note — the tracked gap issues carry the remaining work.
dezren39 commentedon Nov 3, 2026
agent-note:v1 — from triage task 7225 (lane code-m), 2026-11-03: the E2E layer gap filed as #1322 is now closed at current main.
pkgs/id/e2e/tests/world-surface.spec.ts(landed via repo-keeper snapshot 7fb1e6d) is the browser-layer E2E evidence for P9.1 (presenter: join renders cell text, not guest HTML), P9.2 (input/viewport: keypress + paste frames update the view; resize reflows 30→20→30 columns, cross-ref #811), P9.7 (chat-adjacent join/log flow in the same surface spec), and P9.9 (records readback paged with theaftercursor, both pages render). It runs in the existing e2e layer via pkgs/id/e2e/playwright.config.ts (WORLD_FLAGS servers). #1322 was closed with the per-criterion evidence.