Files
2026-09-23 13:45:37 +01:00

6.0 KiB

id, title, status, wave, depends_on, plan, requirements, acceptance_criteria, system_design
id title status wave depends_on plan requirements acceptance_criteria system_design
01-timeout-feedback Concise temporary-folder timeout feedback done 1
plan.md
REQ-SYSTEM-PAGE-STORAGE-MAINTENANCE-003
AC-SYSTEM-PAGE-STORAGE-MAINTENANCE-003.6
AC-SYSTEM-PAGE-STORAGE-MAINTENANCE-003.8
AC-SYSTEM-PAGE-STORAGE-MAINTENANCE-003.10
../../specs/system-page/system-design/storage-analysis-presentation.md

Task 01: Concise temporary-folder timeout feedback

Summary

Replace repeated deadline messages with one localized explanation in the expanded temporary-folder row. Preserve sampled bytes, partial state, skipped counts, and bounded non-deadline diagnostics.

In scope

  • TDD tests for repeated and mixed joined errors, multiple roots, counts, and cancellation.
  • Normalize warning leaves at the tempstore projection boundary.
  • Localize the existing deadline reason and normalize older warning payloads in the resource projection.
  • Desktop and mobile browser assertions for bounded timeout feedback.
  • Update the temporary-folder explanation in public operations guidance during implementation.

Out of scope

Bars, sorting, new scanner workers, scan deadline changes, scan-performance work, cleanup, and new API fields.

Acceptance

  1. Deadline results retain sampled bytes and counts, with at most ten distinct non-deadline diagnostic examples.
  2. Both new and older snapshots show one localized timeout explanation. Mixed joined errors retain unrelated diagnostics.
  3. Desktop and phone users can inspect partial details without repeated deadline text or horizontal overflow.

ASCII UI preview

UI-01 and UI-02 excerpt: expanded temporary-folder details at Settings > System > Storage. See the combined preview. Bars belong to Task 02.

Desktop:
System temporary folders                      51.08 GB  ^
  Read-only. This footprint can overlap counted categories.
  /tmp: 51.08 GB | Partial | 1,015 entries skipped
  Scan timed out. Showing partial usage.
  <bounded distinct diagnostic examples>

Phone:
System temporary folders                    ^
51.08 GB
  Read-only. This footprint can
  overlap counted categories.
  /tmp: 51.08 GB
  Partial | 1,015 entries skipped
  Scan timed out.
  Showing partial usage.

Maps to AC-SYSTEM-PAGE-STORAGE-MAINTENANCE-003.6, .8, .10. Existing inline expansion and one page scroll owner remain required. Copy and paths wrap within the row. Example numbers and spacing are illustrative.

Verification

Run from the repository root. Install workspace dependencies once before the first pnpm command. Use deterministic injected scanner results instead of waiting for the production deadline. Write the focused regression tests first and observe their failures before changing production logic.

(cd apps && pnpm install --frozen-lockfile)
(cd apps/backend && go test ./internal/system/storage/tempstore ./internal/system/storage/filescan)
(cd apps/web && pnpm test components/settings/system/storage/storage-overview-card.test.tsx components/settings/system/storage/storage-totals.test.ts)
(cd apps/web && pnpm exec eslint components/settings/system/storage/storage-overview-resources.ts components/settings/system/storage/storage-overview-card.test.tsx)
(cd apps/web && pnpm run typecheck)
(cd apps/web && pnpm run i18n:zh-hant)
(cd apps/web && pnpm run i18n:check)
(cd apps/web && pnpm run i18n:ratchet)
(cd apps/web && pnpm e2e:run --project chromium tests/system/storage-temporary-folders.spec.ts)
(cd apps/web && pnpm e2e:run --project mobile-chrome tests/system/mobile-storage-temporary-folders.spec.ts)
node --test scripts/validate-public-docs.test.mjs
node scripts/validate-public-docs.mjs
python3 scripts/list-docs.py validate
python3 scripts/lint-spec-files.py --all
git diff --check

Before the final checks, add translations in en, pt-pt, zh-cn, and ja, then generate zh-hk and zh-tw. Extend existing temporary-folder browser cases with a controlled deadline payload and one unrelated warning. Assert one explanation, retained sampled size/counts, wrapped long paths, and no raw deadline repetitions. Capture and inspect the desktop and phone detail region through prCapture.

Files likely touched

  • apps/backend/internal/system/storage/tempstore/provider.go
  • apps/backend/internal/system/storage/tempstore/provider_test.go
  • apps/web/components/settings/system/storage/storage-overview-resources.ts
  • apps/web/components/settings/system/storage/storage-overview-card.test.tsx
  • apps/web/src/locales/{en,pt-pt,zh-cn,zh-hk,zh-tw,ja}/system.json
  • apps/web/e2e/helpers/storage-maintenance.ts
  • apps/web/e2e/tests/system/storage-temporary-folders.spec.ts
  • apps/web/e2e/tests/system/mobile-storage-temporary-folders.spec.ts
  • docs/public/operations.md

Dependencies

None.

Risks

  • errors.Is on a joined error matches any deadline leaf. Do not discard the entire mixed error.
  • Old cached warnings can contain many newline-separated deadline messages in one string.
  • Existing cancellation and strict scanner consumers must retain their behavior.

Parallelism

sequential. This order shares frontend and browser helper files with Task 02.

Inputs

  • Requirements, section 003.
  • Design, Deadline feedback.
  • Existing TestAnalyzeTemporaryDeadlineReturnsPartialSample and temporary-folder component/browser cases.
  • Scoped backend and web AGENTS.md, plus TDD, E2E, mobile-parity, and docs-maintainer skills.

Results

  • go test ./internal/system/storage/tempstore ./internal/system/storage/filescan: passed.
  • Focused Storage component tests: passed, including the localized timeout and retained diagnostics case.
  • Existing desktop and mobile temporary-folder browser cases: passed with one timeout explanation, retained partial values and counts, unrelated diagnostics, and no horizontal overflow.
  • Public operations guidance now documents partial timeout samples and their non-cleanup meaning.