Files
kandev/docs/plans/embedded-vscode-executor-availability/task-01-add-session-capability.md
T
2026-07-30 22:24:16 +01:00

87 lines
3.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
id: "01-add-session-capability"
title: "Add and enforce the session capability"
status: done
wave: 1
depends_on: []
plan: "plan.md"
spec: "../../specs/ui/embedded-vscode-executor-availability.md"
---
# Task 01: Add and Enforce the Session Capability
## Acceptance
- A shared backend resolver returns the specified embedded-VS-Code capability for every known
runtime/host-OS combination and fails closed for unknown values.
- Every authorized task-session status response includes
`capabilities.embedded_vscode` for that session's executor.
- Opening `internal_vscode` directly or through the saved default returns
`ErrEditorUnavailable` for an unsupported session while supported sessions and other editor kinds
retain their existing behavior.
## Verification
Use TDD: add the executor matrix, status contract, and editor-service rejection tests; observe the
focused failures; implement the shared resolver and both consumers; then rerun from
`apps/backend/`:
```bash
go test ./internal/editors/capabilities ./internal/orchestrator ./internal/editors/service ./internal/editors/handlers
```
## Files likely touched
- `apps/backend/internal/editors/capabilities/capabilities.go` (new)
- `apps/backend/internal/editors/capabilities/capabilities_test.go` (new)
- `apps/backend/internal/orchestrator/dto/dto.go`
- `apps/backend/internal/orchestrator/task_operations.go`
- `apps/backend/internal/orchestrator/task_operations_test.go`
- `apps/backend/internal/editors/service/service.go`
- `apps/backend/internal/editors/service/service_test.go`
## Dependencies
None.
## Parallelism
Sequential. This task owns the backend contract and shared enforcement consumed by Task 02.
## Inputs
- Spec sections: **What**, **API surface**, **Failure modes**, and scenarios 1–7.
- ADR:
`docs/decisions/2026-07-30-embedded-editor-executor-capabilities.md`.
- Existing patterns:
- executor constants in `apps/backend/internal/task/models/models.go`
- `TaskSessionStatusResponse` in `apps/backend/internal/orchestrator/dto/dto.go`
- `populateExecutorStatusInfo` in `apps/backend/internal/orchestrator/task_operations.go`
- `ErrEditorUnavailable` in `apps/backend/internal/editors/service/service.go`
## Risks
- Do not let unknown or test-only executor values inherit the default standalone runtime.
- Use actual session executor data for enforcement; do not trust a client-supplied executor type.
- Keep the editor service's repository interface minimal and update its test doubles without
broadening unrelated dependencies.
## Output contract
Report the API shape and capability matrix implemented, files changed, red and green command
results, and any remaining risk. Update this task to `done`, its plan checkbox/status, and the spec
to `building`.
## Completion record
- Added `editors/capabilities.SupportsEmbeddedVscode`, which accepts only Linux/Darwin for Local
and Worktree, accepts the supported container/remote executor types, and fails closed otherwise.
- `task.session.status` now always includes `capabilities.embedded_vscode`; missing executors
return `false`. Direct internal-editor requests resolve the session executor and return
`ErrEditorUnavailable` when unsupported, for saved-default, explicit, folder, and file paths.
- Red: the resolver/status/service tests initially failed to compile or returned a successful
internal-editor URL before the capability contract and guard were added.
- Green: `go test ./internal/editors/capabilities ./internal/orchestrator ./internal/editors/service ./internal/editors/handlers` passed.
- Remaining risk: a true capability identifies a supported runtime only; code-server download and
startup retain their existing runtime error handling.