Repository navigation
feat(missions): adopt bounded panel inventory and selected headers - #1264
Conversation
Complete the main panel-inventory adoption after bounded task reads (#1250). The live UI now uses createMissionPanelInventory and fetchMissionPanel; the public fetchMissions fan-out is removed. Directory discovery, cleanup, selected headers, structured fields, marks and actor observations are deliberate bounded windows rather than all open maps. Extend panelPage with independently verifiable windows and a selected header projection. A window echoes order/offset/end/total and hashes only that logical window; its collection order fences continuation. Summary rows carry actor counts rather than every actor ID. Selected headers keep scalar state, descriptors, task metadata, coordinator and lifecycle identity/counts; wide collections stay independently pageable. Preserve document metadata, documentPending and history request identities from the native-scheduler integration. Before directory discovery, capture the durable project finish high-water and seed completion marks once. Older completions discovered later stay seen, including deleted/purged counter gaps, while finishes above that fixed baseline stay unseen. Partial inventory never proves absence. UI discovery/search is loaded-only with explicit Show more and Retry. Exact selected/reader targets load independently of stalled directory pages. Last-good headers, stable picker keys and toolbars are retained. Per-window provenance, generation epochs and concurrent-owner lifetimes fence late responses. Failed middle pages remain failed until recovered; changed collections restart only on explicit Retry. Separately observed actor windows remain partial/unknown, never atomic whole-mission absence or report-recovery authority. Cleanup retries retain their original mission/deletion/request/revision/options and are never replayed by a passive refresh. Response bodies fit 64 KiB and requests 16 KiB. Logical assembly budgets apply before parsing/hash allocations; each transfer holds the shared secondary lane through stream consumption/cancellation. One deadline covers queueing through validation/publication. Full snapshot, admission, internal and mutation authority remain intact. Exact single-mission reads remain for cleanup/editor reconciliation; no mass snapshot fallback. Qualification also fixes a directory-only project adapter emitting an own workspaceID:undefined, which the unified document CAS correctly rejected as invalid-intent. Omit only that absent field, preserve supplied IDs and strict validation, and regress both placements. Preserve missing-edit mission-not-found/404 through the document precheck. Native tests now assert exact document-cleanup receipts and replay identities. Measured: first 50/120 summaries 11,915 bytes with no warm range/map read; 601-actor header 3,226 bytes; explicit actor continuation bounded to 160 roots; 2,101 pending cleanups fully traversed. Notes-only revisions read one wanted header without task rereads. Twelve negative controls fail and restore exact source hashes. Qualification in an independently installed checkout: UI/server typechecks, actual UI build, 1,322 UI tests, 1,381 server tests and one optional skip, 615 latest-complete serial browser cases, all-ten-locale help, plugin rebuild and 21 isolated OpenCode 2.2.3 native gates pass. An extension-fixture activation failure passed two fresh full-file reruns without weakened assertions; this flake remains disclosed. Source-sized producer enumeration/serialization and repeated hashing remain costs, not transfer guarantees. Current-passage compaction is the separate remaining slice. All recovered sources were checkpointed before qualification; the damaged original checkout and recovery evidence remain untouched. Test manifests fail closed and dependencies are never borrowed.
The inventory adoption changed completion-state scope from folder to folder/project, losing the prior unseen boundary and positive exceptions. Bridge the actual folder record before first project-qualified seeding, retain undiscovered positive evidence across reload, and convert it to finish-sequence exceptions only when exact summary rows arrive. New records still seed once from the durable initial high-water. Do not clear a failed middle window when passive first-window refresh finds a different collection order. Retain the exact failed selector, mark obsolete orders changed, and clear only on that window's success or an explicit successful restart. Explicit restart is not swallowed by an identical pending passive read. Keep root field, lifecycle part and text mode as typed lane identity. Control receipt/pending lanes use the owning control descriptor for invalidation and preserve their exact part when Retry is constructed. Root/CAS revision and field observation revision remain separate. Preserve strict fixed host/plugin/plugin-failed/workspace unavailable causes through the transport and inventory owner, using the existing localized unavailable guidance while retaining last-good data. Malformed, network, changed and damaged failures keep distinct semantics. The navigation fixture also treated intentional retired schedule reads as unowned network errors. Correlate each Playwright request with its actual production call, unique identity, own aborted signal and native AbortError. Remove URL-wide exemptions; same-URL missing/unknown/reused/unaborted identities remain errors. Keep latest-navigation-intent assertions. Tests cover actual old folder keys and partial discovery/reload, summary and cleanup middle failures with tail changes, structured/raw lifecycle parts, all unavailable causes and deterministic held navigation reads. Fix schedule activation test readiness to wait for the exact refreshed document revision. Deadline tests now validate actual dispatch timestamps and live signals rather than an invalid exact-two timing assumption; deferred cleanup and unrelated queue recovery checks remain intact. Rebased cleanly onto dev7349d73e2. Passing qualification on that tree: 2,036 UI tests, 1,721 server tests plus one optional skip, 620 browsers across all67 files in one green serial sweep, typechecks, real UI build, ten-locale help, plugin rebuild and21 isolated OpenCode2.2.3 native gates. Negative controls and restored source hashes are recorded durably in the round-one fix report. No source/dependency borrowing or shared runtime use.
508f5ba to
b1a3259
Compare
A late first-read or Retry reply could clear a newer lifecycle-part invalidation and show old receipt/pending data as complete. Capture the admitted failure identities and owning field descriptor, recheck the descriptor immediately before publication, and retire only failure records observed by that admission. Pending first reads participate in header invalidation. Replace advanced failure records rather than mutating their identity in place. Keep last-good field values with changed/Retry state; do not promote the root CAS revision or add automatic rereads. Unrelated header revisions with an unchanged owning descriptor still accept valid field answers. The completion bridge also consumed ambiguous legacy hashes after a single matching discovered row. Retain the existing bounded positive set during partial discovery so a colliding ID cannot erase an undiscovered viewed mission's evidence. Preserve the unopened watermark and reload behavior. All eight overlapping receipts/pending, structured/raw, first-read/Retry cases and the exact reported collision fail before the fixes and pass afterward. Four unchanged-descriptor positives remain green. UI typecheck, actual production build, 1,351 unit/contract tests and 132 serial browser checks across 12 files pass, including navigation 25/25. No server/native contracts, transport budgets or authority paths changed.
Gatekeeper reviewRound 1 (
Round 2 ( Round 3 (
Qualification across the reviews includes typechecks, actual UI production build, full UI/server suites, help in ten locales, fresh plugin rebuild and 21 isolated OpenCode 2.2.3 native gates. Broad independent browser coverage reached 620/620 latest per-file results; first fixture failures and bounded reruns are retained in the reports. Final two-UI-fix qualification was scoped: 485 units, 132 serial browser cases, typecheck/build and independent adversarial probes, all passing. Prior server/native results were not relabeled as rerun. The live panel now uses bounded inventory discovery and wanted headers rather than the old global map fan-out. Full internal/admission/mutation authority and exact reconciliation remain intact. Producer-wide enumeration, serialization and repeated observation remain disclosed source costs; current-passage compaction is still the separate next slice. Implementation recovery provenance, test manifests and cleanup audits are preserved. Review checkouts use their own dependencies; no shared daemon, user OpenCode data or borrowed dependency trees were used. No review-owned jobs remain. |
Main bounded-inventory UI adoption following #1246, #1249 and #1250. The live panel now uses
createMissionPanelInventory→fetchMissionPanel; publicfetchMissionsfan-out is removed.Contract and UI
{order,offset,end,total}, window content digest, collection-order continuation fence.document, cleanupdocumentPendingand historyrequestIDsurvive.finishHighWateris captured before discovery and seeds once: later-discovered old completions stay seen; new completions above the fixed baseline stay unseen, including deletion/purge counter gaps.Every response stays within 64 KiB, request within 16 KiB; logical reconstruction has explicit budgets/deadlines before allocation and publication. Native per-Location lists and producer-sized enumeration/hash costs remain disclosed.
Measurements
Qualification fixes included
workspaceID:undefined, which strict document CAS rejects; adapter now omits only an absent optional field. Regression verifies directory-only and supplied-workspace placement without weakening validation.Validation and recovery disclosure
Implementation recovered after another session's dependency-junction cleanup deleted the original worktree. Tracked changes came from saved Git state; nine new sources were reconstructed from 137 archived successful operations and nine read checkpoints. All sources were checkpointed, then qualified in a new independently installed worktree. Original/evidence/recovery checkpoint remain untouched.
Passing: typechecks, real UI build, 1,322 UI tests, 1,381 server tests plus one optional skip, 615 latest-complete serial browser cases, 31 help checks, plugin rebuild and 21 isolated OpenCode 2.2.3 gates. Twelve negative controls caught/restored. This is not a claim that the initial browser sweep was entirely green: one extension-fixture activation failure passed two fresh full-file reruns unchanged. Test manifests are explicit/nonempty; no borrowed dependencies or implicit Node discovery.
Qualification report/provenance retained by the coordinator. Current-passage compaction (slice 5) remains the next separate work; scheduler #1259 is already merged.