docs: reconcile roadmap, README, and deferred work for v2.2 ship state
Mark v2.2/v2.2.1 shipped and v2.3 planned in roadmap and README; fix DEFERRED-WORK §2 (ACP probe skip is planned, not resolved). Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -11,7 +11,7 @@ Last updated: 2026-05-26
|
||||
| Item | Category | User impact | Effort | Risk if left alone |
|
||||
|------|----------|-------------|--------|-------------------|
|
||||
| Task cancel → abort ACP/PTY child | Correctness / UX | High — Stop does not kill external agents | Medium | Zombie processes, stuck `running` tasks, orphaned worktrees |
|
||||
| ~~Skip ACP cold probe when DB fresh~~ | ~~Performance~~ | ~~Medium~~ | ~~Medium~~ | **RESOLVED — v2.3 provider lifecycle** |
|
||||
| Skip ACP cold probe when DB fresh | Performance | Medium — composer open can stall 5–30s on cache miss | Medium (v2.3 batch) | Slow provider picker; repeated ACP spawns on every snapshot rebuild |
|
||||
| Unified `packages/types` | Maintainability | Low (dev-only) | Medium–High | Type drift between server, coder, web |
|
||||
| Large file splits | Maintainability | None directly | Medium per file | Harder reviews, merge conflicts |
|
||||
| Retire `apps/coder/web/` fallback SPA | Scope / ops | Low — Sam uses CoderPane | Medium | Dual UI maintenance, divergent API client |
|
||||
@@ -108,9 +108,42 @@ There is also **no frontend** calling task cancel today (`grep` across `apps/web
|
||||
|
||||
---
|
||||
|
||||
## 2. ~~Skip ACP cold probe when DB models are fresh~~ **RESOLVED — v2.3 provider lifecycle**
|
||||
## 2. Skip ACP cold probe when DB models are fresh
|
||||
|
||||
Addressed in [`openspec/changes/v2-3-provider-lifecycle/`](../openspec/changes/v2-3-provider-lifecycle/design.md). The v2.3 snapshot module (`provider-snapshot.ts`) uses DB `available_agents` models as the warm path and only cold-probes on explicit `POST /api/providers/refresh`. Opening the provider picker no longer triggers any probe. `PROVIDER_PROBE_TTL_MS` env var (default 24h) controls stale-model self-heal.
|
||||
**Status:** Planned — [`openspec/changes/v2-3-provider-lifecycle/`](../openspec/changes/v2-3-provider-lifecycle/proposal.md). **Not shipped** (no `v2.3` tag; all tasks unchecked).
|
||||
|
||||
### Current behavior (v2.2)
|
||||
|
||||
`apps/coder/src/services/provider-snapshot.ts` on cache miss:
|
||||
|
||||
1. Reads `available_agents.models` as a **fallback** when building each entry
|
||||
2. Still **cold-probes every installed ACP provider** on every rebuild (`probeAcpProvider` in `buildProviderEntry`) — DB models do not skip the probe
|
||||
3. In-memory snapshot cache TTL is **5 minutes** (`CACHE_TTL_MS`); opening `AgentComposerBar` calls `GET /api/providers/snapshot` via `useProviderSnapshot`
|
||||
4. `POST /api/providers/refresh` clears cache and forces a full rebuild (all probes again)
|
||||
5. Uninstalled agents are **omitted** from the snapshot (`return null`) — not listed as `unavailable`
|
||||
6. No config-file enable/disable; providers are hardcoded in `provider-registry.ts`
|
||||
|
||||
`persistProbedModels()` writes probe results back to `available_agents` (including `last_probed_at`), but nothing reads `last_probed_at` to skip tier-2 probes yet. There is no `PROVIDER_PROBE_TTL_MS` env var.
|
||||
|
||||
### Planned behavior (v2.3)
|
||||
|
||||
See [`design.md`](../openspec/changes/v2-3-provider-lifecycle/design.md):
|
||||
|
||||
- Tier-1 fast binary check + tier-2 ACP session only when stale or explicitly refreshed
|
||||
- `PROVIDER_PROBE_TTL_MS` (default 24h) gate on `available_agents.last_probed_at`
|
||||
- Return `loading` synchronously on cache miss; complete via inflight promise
|
||||
- Always list registered providers (`ready` | `unavailable` | `error` | `loading`); respect `enabled` from `/data/coder-providers.json`
|
||||
- Cold probe only on `POST /api/providers/refresh` (or TTL expiry), not on every composer open
|
||||
|
||||
### Why deferred past v2.2
|
||||
|
||||
v2.2 shipped the snapshot wire shape and ACP dispatch stack. Lifecycle semantics (config registry, enable/disable, probe TTL, settings UI) were scoped as the follow-on **v2.3** batch to avoid mixing two large behavior changes in one tag.
|
||||
|
||||
### Acceptance criteria (when v2.3 ships)
|
||||
|
||||
- Second `GET /api/providers/snapshot` within TTL does not invoke `probeAcpProvider` (mock assert in tests)
|
||||
- Disabled provider visible in settings, absent from composer
|
||||
- Explicit refresh repopulates models; warm open is sub-second
|
||||
|
||||
---
|
||||
|
||||
@@ -297,7 +330,7 @@ Standalone Vite React app (`@boocode/coder-web`) built into `apps/coder/web/dist
|
||||
If picking these up as openspec batches:
|
||||
|
||||
1. **Task cancel abort** — highest correctness gap; unblocks honest Stop button in CoderPane
|
||||
2. **ACP probe skip** — quick win for provider picker latency once semantics agreed
|
||||
2. **v2.3 provider lifecycle** — probe TTL, config registry, enable/disable (includes §2 above)
|
||||
3. **CoderPane hook extraction** — natural follow-on when adding cancel UI
|
||||
4. **Zod parity or packages/types** — when next WS/provider field is added
|
||||
5. **Retire coder/web** — only after explicit “I don’t use :9502 UI” confirmation
|
||||
@@ -308,5 +341,6 @@ If picking these up as openspec batches:
|
||||
|
||||
- [`STALE-DEPRECATED.md`](./STALE-DEPRECATED.md) — resolved stale items
|
||||
- [`ARCHITECTURE.md`](./ARCHITECTURE.md) — BooChat / BooCoder surfaces
|
||||
- [`openspec/changes/v2-2-paseo-providers/design.md`](../openspec/changes/v2-2-paseo-providers/design.md) — provider snapshot API
|
||||
- [`openspec/changes/archived/v2.2-paseo-providers.md`](../openspec/changes/archived/v2.2-paseo-providers.md) — shipped v2.2 provider snapshot API
|
||||
- [`openspec/changes/v2-3-provider-lifecycle/`](../openspec/changes/v2-3-provider-lifecycle/) — planned probe lifecycle + config registry (§2)
|
||||
- [`BOOCODER.md`](../BOOCODER.md) — dispatch, worktrees, pending changes
|
||||
|
||||
Reference in New Issue
Block a user