121 lines
4.4 KiB
Markdown
121 lines
4.4 KiB
Markdown
---
|
|
id: "03-project-refresh-launch-failures"
|
|
title: "Project refresh launch failures"
|
|
status: done
|
|
wave: 3
|
|
depends_on:
|
|
- "02-reject-stale-fallbacks"
|
|
plan: "plan.md"
|
|
requirements:
|
|
- REQ-WORKSPACES-WORKTREE-BASE-REFRESH-001
|
|
acceptance_criteria:
|
|
- AC-WORKSPACES-WORKTREE-BASE-REFRESH-001.6
|
|
- AC-WORKSPACES-WORKTREE-BASE-REFRESH-001.7
|
|
system_design:
|
|
- ../../specs/workspaces/system-design/worktree-base-refresh.md
|
|
---
|
|
|
|
# Task 03: Project Refresh Launch Failures
|
|
|
|
## Summary
|
|
|
|
Carry a required-refresh failure through lifecycle and task launch boundaries.
|
|
Prove that Kandev starts no agent and shows the durable repository-specific
|
|
error on desktop and mobile.
|
|
|
|
## In scope
|
|
|
|
- Add a failing multi-repository launch test where the second repository cannot
|
|
complete required refresh.
|
|
- Preserve exact repository identity while wrapping refresh errors.
|
|
- Use the existing generic typed launch-failure category unless a focused test
|
|
proves a new category is necessary for a valid recovery action.
|
|
- Bound and redact error detail through existing launch-error helpers.
|
|
- Prove that no agent runtime starts after a required refresh error.
|
|
- Extend existing desktop and mobile launch-failure recovery E2E fixtures with
|
|
a stale-origin refresh failure and reload assertion.
|
|
- Prove that normal retry succeeds after the remote and credentials are fixed.
|
|
|
|
## Out of scope
|
|
|
|
- A new recovery action, WebSocket schema, or task-error store.
|
|
- New UI components, responsive layout, or translations.
|
|
- Partial agent launch for multi-repository tasks.
|
|
|
|
## Acceptance
|
|
|
|
- A required refresh error prevents runtime startup and names the exact failed
|
|
repository without exposing credentials or an authenticated URL.
|
|
- The active task error survives reload and renders through the existing task
|
|
error surface on desktop and mobile.
|
|
- A later normal retry reruns refresh and can launch after the underlying Git
|
|
problem is corrected.
|
|
|
|
## Verification
|
|
|
|
Start with the multi-repository no-start regression and confirm it fails before
|
|
error propagation is complete. Then run:
|
|
|
|
```bash
|
|
# From apps/backend:
|
|
rtk go test ./internal/orchestrator/... ./internal/orchestrator/executor/... -run 'LaunchFailure|RepositoryRefresh|MultiRepo' -race
|
|
rtk go test ./internal/orchestrator/... ./internal/worktree/... -race
|
|
|
|
# From the repository root:
|
|
rtk make -C apps/backend build
|
|
rtk make -C apps/backend e2e-plugin-package
|
|
|
|
# From apps/web:
|
|
rtk pnpm run build:e2e
|
|
rtk pnpm e2e:raw --project=chromium e2e/tests/task/launch-failure-recovery.spec.ts
|
|
rtk pnpm e2e:raw --project=mobile-chrome e2e/tests/task/mobile-launch-failure-recovery.spec.ts
|
|
|
|
# From the repository root:
|
|
rtk make -C apps/backend lint
|
|
```
|
|
|
|
## Files likely touched
|
|
|
|
- `apps/backend/internal/orchestrator/executor/executor_resume.go`
|
|
- `apps/backend/internal/orchestrator/executor/executor_execute.go`
|
|
- `apps/backend/internal/orchestrator/executor/executor_launch_failure_classification_test.go`
|
|
- `apps/backend/internal/orchestrator/task_launch_failure_test.go`
|
|
- `apps/web/e2e/tests/task/launch-failure-recovery.spec.ts`
|
|
- `apps/web/e2e/tests/task/mobile-launch-failure-recovery.spec.ts`
|
|
|
|
## Dependencies
|
|
|
|
- Task 02 provides the required-refresh error from the worktree boundary.
|
|
|
|
## Risks
|
|
|
|
- Raw Git output can contain a credential-bearing URL. Test redaction with a
|
|
synthetic secret and assert that it is absent from logs and projected detail.
|
|
- An E2E fixture that fails clone instead of refresh does not prove this bug.
|
|
Seed a valid cached checkout, make its origin fail, and request a new
|
|
worktree.
|
|
- Backend E2E artifacts must be rebuilt before Playwright starts.
|
|
|
|
## Parallelism
|
|
|
|
`sequential`
|
|
|
|
## Inputs
|
|
|
|
- `AC-WORKSPACES-WORKTREE-BASE-REFRESH-001.6` and `.7`.
|
|
- `REQ-TASKS-TASK-LAUNCH-FAILURE-RECOVERY-001` as an adjacent task-system
|
|
contract.
|
|
- Existing desktop and mobile launch-failure recovery E2E tests.
|
|
|
|
## Results
|
|
|
|
- Multi-repository preparation preserves exact repository identity and rolls
|
|
back preparation without starting an agent runtime.
|
|
- Launch error details use existing credential-safe sanitization while keeping
|
|
repository-specific recovery actions.
|
|
- Desktop and mobile launch-failure fixtures cover a valid cached checkout with
|
|
a failing origin, reload persistence, and successful retry after recovery.
|
|
- Verified with the focused and full orchestrator/worktree race suites, backend
|
|
build, E2E plugin package, production E2E build, Chromium and mobile-chrome
|
|
specs, and backend lint.
|