Repository navigation
ui-react: deliver the complete Storage pane with treemap and recoverable file removal #2013
Description
Context
Part of #1779. Follow-on implementation from #1782, whose S1=A, S2=A, S3=A, S4=B and complete-design approval are settled. Read docs/decisions/design-kit/storage.md (introduced by the #1782 design-finalization PR), docs/plans/storage-accounting.md, docs/plans/storage-lifecycle.md, docs/decisions/native-brain-storage.md, and ROADMAP.md's binding decisions. No implementation slice may publicly register an interim read-only Storage pane; first pane delivery includes safe binary removal and the complete journey.
Source checked at 04ef3552190d8f56eab09dd6c3580101b6385ba4:
SECTIONS, packages/ui-react/src/components/settings/settings-panel.tsx:26-34, is the seven-pane inventory; SettingsPanel, the same file:38, preserves leave/credential/scroll/focus behavior. The approved navigation amendment adds Storage after Modules and changes no D52 destination. Use docs/decisions/design-kit/storage.md for all layouts, state text and verification cases.
Out of scope
No interim public read-only pane, new destination/shortcut, settings redesign, universal reclaim, remote quota guesses, retention controls, history erasure or unsupported cleanup. No chart-library dependency without a demonstrated need and release-skill review.
Scope
Implement and publicly register the complete eighth Settings pane only after inventory, approved maintenance and safe binary removal are available. Internal fixture-driven map/list development may precede those dependencies; shipping must satisfy the complete inspection/selection/review/removal/result journey.
Acceptance criteria
- Storage follows Modules under This brain at every width; palette Jump to > Storage and contextual entry work. Preserve Models default, lazy activation, focus-only tab traversal, compact-strip scroll, guards, opener return and D52 N3.
- Show per-capacity bars, All/Brain/App ownership views, On disk default and optional File size, explicit decimal units and unknown/partial/provenance. Hard links/shared capacity never inflate union area; unsupported allocation is not logical fallback.
- Treemap and equivalent sortable/searchable/paged list support breadcrumbs, three-level drill-down, top-six-plus-smaller phone geometry, tiny-target fallback and dense inventories without focus-moving reorder.
- PDF > 5 MB uses strictly more than 5,000,000 logical entry bytes, case-insensitive extension labels, accurate count/total, reference evidence and exact-byte details. Selected totals say file size, not space freed.
- The full inspect/select/review/remove/result flow uses version-bound contracts and durable receipts, shows broken/unknown links and excluded protected/no-Undo files, handles cancellation/lost response/mixed outcome, and offers only stale-safe retained Undo.
- Maintenance rows invoke only approved owners and expose effects/headroom/receipts. Distinguish file/journal/Git deltas, volume availability, indexing and sync; no reclamation promise.
- Never-measured, scanning/cancelled/stale/partial/permission/changed/empty/unsupported/low-space states match the record. Unsupported-host removal remains explicit, but is not used to ship before removal exists.
- Complete the record's dark/paper × 320/1280 browser matrix, 200% zoom, list-only keyboard paths, focus restoration, 44px nonoverlapping targets, accessible names/announcements and greyscale review. Add user documentation and synthetic demo/story coverage without personal data.
Verification
Real pinned browser layout/accessibility tests and inspected captures, using Odysseus fixtures from the design matrix. Include real route-backed removal/Undo integration, lost responses and root/account replacement. Prove strict size threshold, duplicate capacity/allocation handling, disabled removal and stale-selection guards with restored mutations. Run check:pr and complete selected hosted proof; keep screenshots as design evidence, not substitutes for runtime assertions.
Contract impact
No change to existing machine semantics is required by presentation. Consume the separately delivered additive storage contracts; document any additional protocol/capability changes in the same CONTRACT: commit if needed. Consumer ui-react/ui-kit changesets are required.
Delivered dependency: #2010 (included in verified #2172 delivery).
Delivered dependency: #2011 (included in verified #2172 delivery).
Delivered dependency: #2012 (included in verified #2172 delivery).
2026-10-16: design prerequisite #1782 is complete via #2015; removed its obsolete blocker declaration. Those implementation dependencies are now included in the verified combined delivery.
Verified delivery — 2026-10-19
Delivered through #2172 as squash caae12da2e678dd4720bf112e93ef21812cfdc18, tree 0d0965b8c72bbe14644da018558ffc90ae2950fa, parent 0b46b9db7925ce2e52c85a56c6200a4e2f330bd7. The actual squash matches the inspected combined candidate exactly and is present on remote main. Release milestone: 0.44.0.
The complete eighth Settings pane provides capacity views, treemap/list inspection, strict PDF-over-5-MB filtering, review, removal, outcomes and retained Undo, plus the approved maintenance rows. Phone/desktop, themes, keyboard/focus, zoom and route-backed recovery are covered; user documentation and synthetic stories are included.
Ready-PR confirmation 39299288116, attempt 1 passed all 17 selected jobs on actual checkout ad44bb6228c13770b54797039233319fd58f6e44. All checkout logs and 13 resource receipts agree on the verified head/base/tree; no domains were retained. Local preflight passed 959 fast and 7,198 affected tests with four expected inverse empty vector placeholders, zero failures, across all 548 selected files. All 77 Storage browser/story cases passed. Prior failing-first and restored mutation receipts retain their original identities.
The original #2172 automatic main run 39302987919, attempt 1 remains failed: 15 jobs passed, unit (1) encountered the #2405 vanishing maintenance.lock fixture-copy failure, and aggregate proof failed. All 77 Storage browser/story cases passed there. Its actual checkout was caae12da2e678dd4720bf112e93ef21812cfdc18; no failed receipt was rerun or relabelled.
The separate test-fixture correction #2448 merged as cea53611ddea4916ac323060bfef42ec18118fea, parent caae12da2e678dd4720bf112e93ef21812cfdc18, tree 4a826e90467b5874be85ff71d04e9ede01577486. Its automatic main-push run 39312029459, attempt 1 passed all 17 selected jobs. Every actual checkout log and all 13 resource receipts agree on that squash identity; integrated-cadence aggregate passed with an empty retention ledger. All 77 Storage browser/story cases and all eight Git-policy regressions passed freshly on corrected main. The correction changes only the test preload, its regression tests and testing documentation; Storage product source is unchanged. Both squash commits are present on remote main.
Separate follow-ups remain open: #2334 needs reproduction; #2380 and #2279 await maintainer decisions following their newer contention reproductions. This delivery does not change their scope or claim to explain the exact historical failures.
2026-10-19 correction: replaced superseded candidate/verification status with the verified delivery and resolved implementation dependencies. Historical failed receipts and their stated limits remain preserved in the issue/PR discussion.
Activity
schlessera commentedon Oct 16, 2026
Claiming #2013 as part of the maintainer-authorized #1782 implementation chain. Claim token:
storage-2013-20261016-j6m8; branch:feat/2013-storage-pane-j6m8.The approved design and Settings anchors are verified. Internal UI development will use the completed local inventory, maintenance and removal contracts. The three delivery blockers remain in place; public pane registration and merge will include the complete removal/Undo journey and required browser proof.
schlessera commentedon Oct 16, 2026
2026-10-16 delivery handoff: PR #2151 remains draft at
4c4094c1c8969a33193b101c6051b489b7404aa3, targeting removal branchfeat/2012-storage-removal-g4c2. All three implementation prerequisites remain open. The upstream #1513 / #2113 candidate freshness blocker and exact evidence are recorded on #2010.gh stack checkoutconfirms #2151 is not part of a native stack on GitHub; this is the previously selected ordinary dependency-order delivery path, not a native merge request.Resume after actual #2010–#2012 delivery: reconstruct only the complete-pane presentation diff onto fetched main, inspect the integrated journey and own contract diff, run main-relative local preflight, then obtain all selected hosted browser/layout/runtime and other required confirmation with actual checkout identities. Keep the complete initial removal/Undo delivery gate, existing dependencies and claim. This verification pass made no branch changes and claims no new browser execution.
schlessera commentedon Oct 16, 2026
2026-10-16 delivery update: the authorized Storage implementation and its prerequisite fixture repair are consolidated into ordinary main-based PR #2172. The earlier individual PRs remain open as smaller review diffs; they will be reconciled only after actual combined delivery. The previous dependency-by-dependency handoff instructions are superseded by this integrated candidate, not by a native stack or a CI waiver.
Current local candidate
aa51b7703includes mainff70ec1c2eda22e5e84593a5467fc85d0c385600and the reproduced verification blockers. Complete local confirmation is running; hosted confirmation and main verification remain. Earlier failed, stopped or stale-candidate runs retain their original results. No issue is complete or closed yet, and this invocation retains its implementation claims while finishing the combined delivery.schlessera commentedon Oct 16, 2026
Blocked handoff for the authorized Storage chain: draft #2172 at
26665d03apreserves the implementation, corrected health fixture and bounded composer failure diagnostics. Its proof section records exact heads/bases, failed broad preflight, corrected quota/health failures and the unresolved #2202 timeout. Six isolated subagent cases, the complete 46-case matrix and 50 fresh admission cycles pass but do not explain the original failure. No passing retry is presented as a fix or complete candidate qualification.Resume with #2202's recorded repro gap, then reconcile relevant live main and obtain required local, complete selected hosted and actual-main proof. Earlier independent fixture deliveries retain their own provenance; this combined handoff does not close remaining verification criteria. Releasing only this invocation's assignment. Resumable branches/PRs and all receipts remain preserved; no implementation PR is marked ready or merged by this handoff.
schlessera commentedon Oct 17, 2026
2026-10-17 scoped triage: applied the maintainer's non-blocking rulings for #2202 (unavailable Send) and #1946 (ActionCard animation). Diagnosis of either observation is not required before this work continues. #2202 retains needs: repro; #2307 remains a separate production-observation design. Preserved historical failures, implementation criteria, assignments and release attribution. Remaining declared prerequisites: Blocked by #2010; Blocked by #2011; Blocked by #2012 The combined candidate remains subject to its other verification and delivery requirements.
schlessera commentedon Oct 17, 2026
Resuming the authorized Storage implementation chain in #2172 under claim
storage-resume-20261017-c0d4, using the existing candidate branchfeat/2059-storage-history-ui-m4p6. The maintainer's 2026-10-17 ruling makes the known unavailable-Send observation non-blocking; historical failed receipts remain preserved. #2262's health fixture correction is now delivered independently in #2282. Next: reconcile current main, run focused preflight and selected candidate confirmation, then deliver the combined chain when the remaining requirements are satisfied. No admission, authentication, assertions or deadlines will be weakened.schlessera commentedon Oct 17, 2026
Bounded handoff recorded in the updated body and #2172. Current candidate
fe5faafdahas passing native/type/focused proof; broad preflight finishes6,948 pass /4 skip /1 fail after949 fast tests pass. The distinct unresolved speech bundler exit is #2334; #2202 is non-blocking and its previously affected case passes. Preserve the draft implementation and original receipts. Reconcile later main and resume complete qualification after #2334 attribution. Releasing this invocation's owned claim; no merged delivery or complete hosted proof is claimed.schlessera commentedon Oct 17, 2026
Resuming the authorized Storage chain and bounded blocker diagnostics under claim
storage-recheck-20261017-e8f2, using existing PR #2172 branchfeat/2059-storage-history-ui-m4p6. Reconcile current main, preserve the original #2334 failure, and obtain the missing browser-bundle child exit/signal/output observations before selecting any correction. No skipped test, weakened assertion or deadline change. The four historical SQLite skip labels are inverse empty placeholders; substantive vector cases passed, as verified against source and the retained log. Historical totals and the speech failure remain unchanged.schlessera commentedon Oct 19, 2026
Delivered through #2172 as squash
caae12da2e678dd4720bf112e93ef21812cfdc18, tree0d0965b8c72bbe14644da018558ffc90ae2950fa, parent0b46b9db7925ce2e52c85a56c6200a4e2f330bd7. The actual squash matches the inspected combined candidate exactly and is present on remote main. Release milestone: 0.44.0.The complete eighth Settings pane provides capacity views, treemap/list inspection, strict PDF-over-5-MB filtering, review, removal, outcomes and retained Undo, plus the approved maintenance rows. Phone/desktop, themes, keyboard/focus, zoom and route-backed recovery are covered; user documentation and synthetic stories are included.
Ready-PR confirmation 39299288116, attempt 1 passed all 17 selected jobs on actual checkout
ad44bb6228c13770b54797039233319fd58f6e44. All checkout logs and 13 resource receipts agree on the verified head/base/tree; no domains were retained. Local preflight passed 959 fast and 7,198 affected tests with four expected inverse empty vector placeholders, zero failures, across all 548 selected files. All 77 Storage browser/story cases passed. Prior failing-first and restored mutation receipts retain their original identities.The original #2172 automatic main run 39302987919, attempt 1 remains failed: 15 jobs passed, unit (1) encountered the #2405 vanishing
maintenance.lockfixture-copy failure, and aggregate proof failed. All 77 Storage browser/story cases passed there. Its actual checkout wascaae12da2e678dd4720bf112e93ef21812cfdc18; no failed receipt was rerun or relabelled.The separate test-fixture correction #2448 merged as
cea53611ddea4916ac323060bfef42ec18118fea, parentcaae12da2e678dd4720bf112e93ef21812cfdc18, tree4a826e90467b5874be85ff71d04e9ede01577486. Its automatic main-push run 39312029459, attempt 1 passed all 17 selected jobs. Every actual checkout log and all 13 resource receipts agree on that squash identity; integrated-cadence aggregate passed with an empty retention ledger. All 77 Storage browser/story cases and all eight Git-policy regressions passed freshly on corrected main. The correction changes only the test preload, its regression tests and testing documentation; Storage product source is unchanged. Both squash commits are present on remote main.Separate follow-ups remain open: #2334 needs reproduction; #2380 and #2279 await maintainer decisions following their newer contention reproductions. This delivery does not change their scope or claim to explain the exact historical failures.