Skip to content

feat(missions): adopt bounded panel inventory and selected headers - #1264

Merged
pascalandr merged 3 commits into
devfrom
feat/mission-inventory-qualified
Nov 2, 2026
Merged

pascalandr merged 3 commits into
devfrom
feat/mission-inventory-qualified

Conversation

@pascalandr

Copy link
Copy Markdown
Contributor

Main bounded-inventory UI adoption following #1246, #1249 and #1250. The live panel now uses createMissionPanelInventory → fetchMissionPanel; public fetchMissions fan-out is removed.

Contract and UI

  • Independently verifiable 50-row directory/field windows: echoed {order,offset,end,total}, window content digest, collection-order continuation fence.
  • Inventory summaries carry actor counts. A selected header excludes whole actor/receipt/task collections; those are separately paged. Native-scheduler document, cleanup documentPending and history requestID survive.
  • Initial durable finishHighWater is 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.
  • Explicit Show more/Retry for summaries, cleanup, fields, marks and actors; loaded-only search. Selected/reader identities work outside the first inventory page and do not wait for stalled discovery.
  • Last-good display, owner/generation/page-revision fencing, failed-middle Retry, no automatic changed-cursor restart. Separate actor observations never become atomic whole-mission absence or recovery authority.
  • Exact cleanup retry/lost-ACK identity preserved. Snapshot/admission/internal/mutation authority stays full. No mass snapshot fallback.
  • All ten help locales updated.

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

  • 50/120 summary rows: 11,915 bytes, one transfer, zero warm range/map reads.
  • Valid 601-actor selected header: 3,226 bytes.
  • Explicit actor continuation: 160 root observations, largest measured body 61,471 bytes.
  • All 2,101 pending cleanups reachable; initial finish baseline remains fixed during new completions.
  • Notes-only revision: one wanted header, no task transfer or expanded-task reread.

Qualification fixes included

  • Directory-only project Location omitted 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.
  • Missing edit still returns mission-not-found/404.
  • Native document-cleanup receipts/replay are checked exactly; safe help-fixture link teardown and a data favicon fix remain test-only.

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.

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.
@pascalandr
pascalandr force-pushed the feat/mission-inventory-qualified branch from 508f5ba to b1a3259 Compare November 1, 2026 23:28
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.
@pascalandr

Copy link
Copy Markdown
Contributor Author

Gatekeeper review

Round 1 (508f5ba0e): request changes — P2 3, P3 1.

  • Completion seeding lost existing folder-scoped unseen state and positive exceptions after changing the live scope key.
  • Passive first-window refresh could erase a failed middle-window Retry after an unrelated order change.
  • Lifecycle receipt/pending lanes used the wrong owning descriptor and could stay stale.
  • Fixed unavailability causes lost their localized guidance.
  • Navigation qualification also remained non-green on retired schedule point-read network assertions.

Round 2 (b1a325998): request changes — P2 1, P3 1.
The original direct findings were resolved. Expanded probes found a late first-read/Retry response could erase newer field invalidations, and conversion of an ambiguous legacy positive hash could consume another mission's evidence. Navigation cancellation provenance and its same-URL negative controls passed.

Round 3 (f129b1a5f): approve — P0 0 · P1 0 · P2 0 · P3 0 · P4 0.

  • Field publication and every failure-retirement path now check admitted source/failure identity, including pending first reads and post-hash races. Eight original overlap cases and eleven additional queue/ABA/late-failure/unchanged-descriptor cases pass.
  • Existing bounded legacy positives survive partial discovery and collisions; exact reload/exhaustion checks preserve the unopened boundary without increasing their budget.
  • No automatic rereads, control replay or CAS promotion were introduced.

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.

@pascalandr
pascalandr merged commit 8423db5 into dev Nov 2, 2026
14 of 20 checks passed
@pascalandr
pascalandr deleted the feat/mission-inventory-qualified branch November 2, 2026 00:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant