106 lines
4.2 KiB
Markdown
106 lines
4.2 KiB
Markdown
---
|
|
id: "17-bundle-customizer-refinement"
|
|
title: "Bundle customizer refinement"
|
|
status: done
|
|
wave: 13
|
|
depends_on:
|
|
- "12-custom-bundle-contracts"
|
|
- "14-bundle-customizer-ui"
|
|
- "15-custom-bundle-e2e"
|
|
plan: "plan.md"
|
|
spec: "../../specs/platform/requirements/diagnostic-logging.md"
|
|
---
|
|
|
|
# Task 17: Bundle customizer refinement
|
|
|
|
## Acceptance
|
|
|
|
- System Logs exposes one **Customize bundle** entry point. Its default is the
|
|
backend/frontend bundle; runtime and debug-only ACP evidence are optional
|
|
sources in the same customizer.
|
|
- The wider desktop Dialog and phone Drawer share selection state. Selecting
|
|
ACP lazy-loads candidates, shows the high-sensitivity warning, and provides
|
|
select-all/clear controls that never exceed the backend session limit.
|
|
- Each authorized ACP candidate shows its task title as a safe new-tab link.
|
|
The candidate API carries that title intentionally, while the runtime index,
|
|
manifest, and archive continue to exclude it.
|
|
|
|
## Verification
|
|
|
|
```bash
|
|
cd apps/backend
|
|
go test ./internal/system/logbundle ./internal/backendapp
|
|
```
|
|
|
|
```bash
|
|
cd apps
|
|
pnpm --filter @kandev/web test -- --run components/settings/system/log-viewer.test.tsx
|
|
```
|
|
|
|
```bash
|
|
cd apps/web
|
|
pnpm e2e:run e2e/tests/system/logs-page.spec.ts
|
|
pnpm e2e:run --no-build --project mobile-chrome e2e/tests/system/mobile-logs-bundle.spec.ts
|
|
```
|
|
|
|
## Files likely touched
|
|
|
|
- `apps/backend/internal/system/logbundle/contracts.go`
|
|
- `apps/backend/internal/system/logbundle/handler.go`
|
|
- `apps/backend/internal/system/logbundle/handler_test.go`
|
|
- `apps/backend/internal/backendapp/diagnostic_session_provider.go`
|
|
- `apps/web/lib/types/system.ts`
|
|
- `apps/web/components/settings/system/log-viewer.tsx`
|
|
- `apps/web/components/settings/system/bundle-customizer.tsx`
|
|
- `apps/web/components/settings/system/log-viewer.test.tsx`
|
|
- `apps/web/e2e/tests/system/logs-page.spec.ts`
|
|
- `apps/web/e2e/tests/system/mobile-logs-bundle.spec.ts`
|
|
- `apps/web/src/locales/en/settings.json`
|
|
- `apps/web/src/locales/pseudo/settings.json`
|
|
- `docs/specs/platform/requirements/diagnostic-logging.md`
|
|
- `docs/specs/system-page/requirements/system-page.md`
|
|
- `docs/public/operations.md`
|
|
- `docs/decisions/2026-07-30-file-backed-diagnostic-bundles.md`
|
|
|
|
## Mobile design contract
|
|
|
|
- The existing System Logs route remains the mobile entry point. Its one
|
|
Customize action opens the existing inset Drawer rather than a compressed
|
|
desktop dialog.
|
|
- The source/session body remains the only internal scroll owner; the
|
|
safe-area-aware footer keeps Cancel/Create reachable. Select-all and clear
|
|
controls are visible touch targets rather than hover-only affordances.
|
|
- The same source/session state drives desktop and mobile. Mobile coverage
|
|
proves the Drawer, ACP source choice, selection controls, and no horizontal
|
|
overflow.
|
|
|
|
## Risks
|
|
|
|
- Task titles are user-visible task metadata, but must be returned only after
|
|
existing task authorization and must never leak into bundle files.
|
|
- The picker can have more eligible sessions than its backend maximum. Bulk
|
|
selection must stay deterministic and bounded.
|
|
- The wider desktop Dialog must remain viewport-contained; the phone Drawer
|
|
must retain its current safe-area and scroll ownership behavior.
|
|
|
|
## Results
|
|
|
|
- Consolidated the Logs page to one **Customize bundle** action with
|
|
backend/frontend selected by default and runtime/ACP left optional.
|
|
- Added lazy ACP candidate loading, bounded select-all/clear controls, and an
|
|
authorized task-title link that opens each candidate's Kandev task in a new
|
|
tab. Task titles are API-picker metadata only and remain excluded from the
|
|
runtime index, manifest, and archive.
|
|
- Widened the desktop customizer without imposing empty fixed-height space; the
|
|
phone flow remains an inset Drawer with one scroll owner and touch-sized
|
|
controls.
|
|
- Refined the Logs-page hierarchy with matched card padding, vertically ordered
|
|
privacy/source notes, and a desktop action aligned under the bundle
|
|
description. The phone page retains the same single-column flow and Drawer
|
|
entry point.
|
|
- Updated the public operations guide and diagnostic-bundle decision to match
|
|
the consolidated flow.
|
|
- Verified with backend package tests (252), focused web tests (28), production
|
|
web build, desktop E2E (3), mobile E2E (2), web typecheck, lint, and i18n
|
|
checks.
|