Skip to content

id: validation — Phase 9 portable platform #1076

Closed

Description

@dezren39

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:

  1. Walk every P9.x item in the plan; mark each verified, broken, or untested, with evidence.
  2. Run the relevant suites end to end (Rust, web, E2E, nix checks) and record results here.
  3. Add missing regression/property tests where a delivered feature has none.
  4. 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 test never 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

Activity

  1. added
    kind/testTest coverage, test infrastructure, or test-only fixes
    source/humanFiled directly by a human
    priority/highImportant and time-sensitive
    app/idPackage/app: id (pkgs/ or apps/ in this repo)
    nowOrg Project gate: active priority — orchestrator adds to the board
    on Oct 27, 2026
  2. developing-today commented on Oct 27, 2026

    @developing-today
    Contributor
  3. added
    effort/lLarge: multi-day or open-ended; expect staged check-ins
    on Oct 27, 2026
  4. dezren39 commented on Oct 27, 2026

    @dezren39
    MemberAuthor

    Intake review

    Related: Umbrella verification debt: #796 · known findings: #811 (joiner resize), #813 (roc test never 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

    • Agent: fleet monitor
    • Session / ID: repo-fleet-monitor run 2026-10-26 22:19 CDT
    • Found via: monitor reconciliation (intake enrichment, protocol §5)
    • Task: Intake review — verified still live (filed this evening as part of Drew's roadmap/validation batch; no merged PR or commit resolves it), appended acceptance criteria, posted this review.
    • Expectation: done when the acceptance criteria above are met (effort class as labelled by the filer).
  5. added
    meta/enrichedIntake review done: acceptance criteria, links, and normalized labels added
    on Oct 27, 2026
  6. dezren39 commented on Oct 27, 2026

    @dezren39
    MemberAuthor

    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.

  7. added
    queue/queuedHas a queued task in the Supabase agent queue
    work/assignedQueue worker lifecycle state
    and removed on Oct 27, 2026
  8. 47 remaining items

  9. dezren39 commented on Oct 27, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · slice 5 results — known-findings closeout (queue task 1257)

    Evidence base: current main f9c9ffdb, read directly (file:line below).

    Finding Verdict Evidence
    #811 joiner resize can poison a world ✅ FIXED on main — closed with evidence Actor View/ViewAt (world/actor.rs ~L1085/~L1122): over-limit presentation → view_failures + per-request error only, program_healthy untouched. Sandbox view()/layout_at() (sandbox.rs): trapped view/layout does not poison the instance (F11.17; commits 9f4633a3, 07a906d0). Regression test a_trapping_view_degrades_to_an_error_and_recovers_on_the_next_event (world/tests.rs:2416). Resize range (1..=500 × 1..=200) and presentation_bytes default 8192 unchanged — the consequence changed, not the inputs.
    #813 roc test never runs ⚠️ Still open — re-confirmed Zero roc test in flake.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.

  10. added
    queue/claimedQueue worker lifecycle state
    and removed
    status/parkedDeliberately paused with a recorded resume condition
    queue/parkedQueue task is parked (waiting on CI, time, or an event)
    on Oct 27, 2026
  11. dezren39 commented on Oct 27, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · picked up

    • Agent: queue worker (repo-worker-code), lane C shift
    • Session / ID: queue task 1257
    • Found via: queue claim (resume from parked checkpoint, slices 1–5 complete)
    • Task: Slice 6 — coverage gaps: RocText helpers untested at any layer; oversize-view (non-trapping) non-poison assertion missing; any remaining 'untested' rows from slices 1–3 → verify against current main, file a separate issue per confirmed gap (app/id + priority/high + now), link here.
    • Expectation: effort m — done = each slice-6 item verified or filed as its own issue, results recorded here, task completed or parked with the next slice named.
    • Links: slices 1–5 results in comments above
  12. dezren39 commented on Oct 27, 2026

    @dezren39
    MemberAuthor

    🤖 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 Roc expect blocks and example main.roc references, and missed the Rust compile-and-run tests in pkgs/id/src/world_compile.rs. Those tests execute in CI: the pkgs/id package derivation carries rocCompiler in nativeBuildInputs, builds the wasm host in preBuild (buildWasmHost), and runs cargo test with doCheck (only serve_tests skipped) — pkgs/id/flake.nix ~L617-660.

    Slice-6 item Verdict Evidence
    RocText helpers "untested at any layer" (slice 4) ✅ VERIFIED — slice-4 verdict corrected text_helpers_trim_case_split_and_prefix (world_compile.rs:922) compiles a real app against the platform and asserts exact output for trim, lowercase, starts_with, drop_prefix (hit + miss), lines/join_lines round-trip, and contains (hit + miss): t=AbC|l=abc|p=yes|d=go|m=keep|j=a\nb\n|c=yes. RocText.roc itself 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.
    RocCap "no test names RocCap directly" (slice 4, P9.4d ⚠️ partial) ✅ VERIFIED — slice-4 verdict corrected the_capability_helper_issues_matching_requests (world_compile.rs:654) drives RocCap.issue/attach/chat_request directly in a compiled app, on top of the roc-chat history + records sandbox tests from slice 4. RocCap.roc carries 0 expects.
    Oversize (non-trapping) view/layout non-poison assertion (slice 5) ⚠️ Gap confirmed → filed as #1375 The oversize branches (world/actor.rs ~L1092 View, ~L1131 ViewAt: text.len() > presentation_bytes → view_failures += 1 + per-request error, program_healthy untouched) 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.
    Remaining "untested" rows (slices 1–3) ✅ none left untracked The 61 unexecuted Roc expects (RocJson 33, Screen 15, Key 13) are tracked by #813; the world-surface E2E gap by #1322; the compiler-version provenance gap by #1315; #811 closed in slice 5.

    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.

  13. dezren39 commented on Nov 3, 2026

    @dezren39
    MemberAuthor

    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 the after cursor, 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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

app/idPackage/app: id (pkgs/ or apps/ in this repo)effort/lLarge: multi-day or open-ended; expect staged check-inskind/testTest coverage, test infrastructure, or test-only fixesmeta/enrichedIntake review done: acceptance criteria, links, and normalized labels addednowOrg Project gate: active priority — orchestrator adds to the boardpriority/highImportant and time-sensitivesource/humanFiled directly by a humanstatus:done

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions