4.7 KiB
4.7 KiB
id, title, status, wave, depends_on, plan, spec
| id | title | status | wave | depends_on | plan | spec | |
|---|---|---|---|---|---|---|---|
| 02-source-aware-commit-ui | Source-aware commit UI | done | 2 |
|
plan.md | ../../specs/pr-only-commit-details/spec.md |
Task 02: Source-aware commit UI
- Acceptance: Merged commit rows carry a discriminated local/GitHub target;
matching SHAs prefer the local source; PR-only rows omit unknown stats and
local mutation controls; opening a local target calls only
session.commit_diff; opening a GitHub target calls onlygithub.pr_commit.get, renders remote metadata/files on desktop and mobile, disables worktree-dependent actions/expansion, preserves repository identity, and never falls back locally on a GitHub error. - Verification: Follow strict TDD. Add focused merge, request/hook, row,
panel, dockview, and mobile-target regressions; run the smallest affected
Vitest files and record failures caused by the current SHA-only target and
local-only loader. Use
cd apps/web && pnpm test -- components/task/changes-panel.test.ts components/task/commit-detail-request.test.ts components/task/commit-detail-panel.test.tsx lib/state/dockview-panel-actions.test.tsfor the focused RED/GREEN cycle. After implementation, rerun it, then runcd apps/web && pnpm run typecheck,cd apps && pnpm --filter @kandev/web lint,cd apps && pnpm run i18n:check && pnpm run i18n:ratchet, andgit diff --check. - Files likely touched:
apps/web/lib/types/github.ts; a source-aware target/request hook underapps/web/components/taskorapps/web/hooks/domains;apps/web/components/task/changes-panel-helpers.ts;apps/web/components/task/changes-panel-data.tsx;apps/web/components/task/changes-panel-body.tsx;apps/web/components/task/commit-row.tsx;apps/web/components/task/commit-detail-panel.tsx;apps/web/components/task/changes-diff-target.ts;apps/web/components/task/dockview-shared.tsx;apps/web/components/task/dockview-panel-content.tsx;apps/web/lib/state/dockview-store.ts;apps/web/lib/state/dockview-panel-actions.ts;apps/web/components/task/mobile/mobile-changes-panel.tsx;apps/web/components/task/mobile/mobile-diff-sheet.tsx; and colocated unit tests for the changed helpers, state, hook, and components. - Dependencies: Task 01's settled WebSocket action and response types.
- Parallelism: sequential — source identity crosses merge logic, serialized desktop panel state, mobile selection, and one shared detail renderer; split implementations would create an intermediate incompatible UI contract.
- Inputs: repair spec desired behavior; Task 01 output contract; current
mergeCommits,CommitRow,requestCommitDiff,useCommitDiff,CommitDetailPanel, dockview commit panel actions,MobileChangesPanel, andMobileDiffSheetpatterns. - Output contract: Report the discriminated target shape, route selection, row/action behavior, desktop/mobile rendering behavior, exact files changed, RED/GREEN and lint/type/i18n results, remaining patch limitations, and synchronized task/plan status.
Results
- RED: source-routing regressions demonstrated that SHA-only rows always used
session.commit_diff, including PR-only commits, and that remote rows could inherit fabricated zero statistics and local actions. - GREEN: added the discriminated local/GitHub target, repository-aware merge precedence, source-aware request/hook loading, remote metadata/file mapping, dockview serialization identity, and shared desktop/mobile rendering. Remote rows omit unmeasured statistics and all worktree mutation/file/context actions; GitHub errors do not fall back locally.
- Verification: focused Vitest coverage passed (7 files, 72 tests), followed
by web typecheck, lint, i18n check, i18n ratchet, and
git diff --check. - Review remediation: keyed PR commit results by the complete workspace, repository, pull request, and refresh identity so rapid PR switches cannot reuse stale rows. Unavailable clients and malformed commit responses now remain errors with a retry state, and GitHub detail requests no longer refetch when local agent readiness changes. The remediation suite passed (8 files, 69 tests), with additional focused regressions covering the PR switch, protocol failures, retry rendering, and remote dependency boundary.
- Review follow-up: normalized missing repository names to the workspace-root identity, rejected malformed backend and frontend commit-detail payloads, bound loaded detail state to the selected target, hardened serialized GitHub target validation, and corrected the late-response regression. The rebased verification passed with 1,086 backend GitHub tests and 73 focused frontend tests.