Files
kandev/docs/plans/default-changes-focus-guard/task-01-restrict-changes-auto-focus.md
T
2026-08-31 21:42:12 +00:00

102 lines
4.2 KiB
Markdown

---
id: "01-restrict-changes-auto-focus"
title: "Restrict Changes auto-focus"
status: done
wave: 1
depends_on: []
plan: "plan.md"
requirements:
- REQ-UI-TASK-LAYOUT-PROFILES-001
acceptance_criteria:
- AC-UI-TASK-LAYOUT-PROFILES-001.11
system_design:
- ../../specs/ui/system-design/task-layout-profiles.md
---
# Task 01: Restrict Changes Auto-focus
## Summary
Restrict automatic Changes activation to the Default top-right group with exactly Files and Changes. Preserve the active tab in all other layouts and group compositions.
## In scope
- Add direct unit coverage for the shared activation guard.
- Track the active built-in or custom profile identity through layout application and environment-scoped restores.
- Preserve the effective default's profile identity through fresh builds and Reset Layout, including reserved built-in overrides.
- Require `RIGHT_TOP_GROUP` and exact `files` and `changes` membership.
- Replace the arbitrary non-Agent-group E2E expectation with the VS Code complaint scenario.
- Preserve Default-layout activation and inactive-task pending behavior.
## Out of scope
- Change the marker and fingerprint logic.
- Change backend layout-profile persistence.
- Change mobile or tablet behavior.
## Acceptance
- A meaningful update activates Changes in the Default Files and Changes group.
- A `vscode | files | changes` group keeps VS Code active after the update.
- A Files and Changes group outside `RIGHT_TOP_GROUP` keeps its active tab.
- A copied Default custom profile keeps its active tab even when its group IDs and tabs match the built-in Default.
- A reserved customized Default remains the built-in Default identity when used for a fresh build or Reset Layout; arbitrary custom defaults remain custom.
## Verification
```bash
pnpm exec vitest run components/task/changes-panel-focus.test.ts
pnpm run typecheck
pnpm test
pnpm run lint
pnpm e2e:run tests/layout/changes-panel-focus.spec.ts -- --grep "VS Code group"
python3 ../../scripts/lint-spec-files.test.py
python3 scripts/lint-spec-files.py --all
git diff --check -- apps/web/components/task/changes-panel-focus.ts apps/web/components/task/changes-panel-focus.test.ts apps/web/e2e/tests/layout/changes-panel-focus.spec.ts docs/specs docs/plans
```
Run the first five commands from `apps/web`. Run the spec test linter from `apps/web` and the all-files spec linter plus the diff check from the repository root. Run `pnpm install --frozen-lockfile` from `apps/` first when dependencies are absent.
## Files likely touched
- `apps/web/components/task/changes-panel-focus.ts`
- `apps/web/components/task/changes-panel-focus.test.ts`
- `apps/web/e2e/tests/layout/changes-panel-focus.spec.ts`
- `apps/web/lib/layout/layout-profiles.ts`
- `apps/web/lib/layout/layout-profiles.test.ts`
- `apps/web/lib/state/dockview-store.ts`
- `apps/web/lib/state/dockview-env-switch-action.test.ts`
- `apps/web/lib/state/dockview-preset-persistence.test.ts`
- `apps/web/components/task/dockview-desktop-layout.tsx`
## Dependencies
None.
## Risks
- The E2E stimulus has no completion event for a forbidden activation. Use the existing bounded negative-assertion dwell.
## Parallelism
`sequential`
## Inputs
- `AC-UI-TASK-LAYOUT-PROFILES-001.11`
- The Changes-attention control flow in the task-layout system design.
- Commit `f100fc97a5`, which expanded activation from the Default group to every non-Agent group.
## Results
- `pnpm exec vitest run components/task/changes-panel-focus.test.ts`: passed, 20 tests before the fixup and 20 tests after the fixup.
- `pnpm exec vitest run lib/local-storage.test.ts lib/state/dockview-store.test.ts lib/state/dockview-preset-persistence.test.ts components/task/changes-panel-focus.test.ts`: passed, 92 tests.
- `pnpm run typecheck`: passed.
- `pnpm test`: passed, 1,677 test files and 14,381 tests (4 skipped).
- `pnpm run lint`: passed.
- `pnpm e2e:run tests/layout/changes-panel-focus.spec.ts -- --grep "VS Code group"`: passed, 1 test.
- The complete `changes-panel-focus.spec.ts` suite passed, 6 tests, and produced a fresh desktop PR capture.
- `python3 ../../scripts/lint-spec-files.test.py`: passed, 20 tests.
- `python3 scripts/lint-spec-files.py --all`: passed from the repository root.
- `git diff --check`: passed.