From a7346154804e09604c02208218e343dae5dbd512 Mon Sep 17 00:00:00 2001 From: indifferentketchup Date: Wed, 3 Jun 2026 16:30:01 +0000 Subject: [PATCH] docs: archive shipped openspec changes, refresh roadmap + DEFERRED-WORK MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Move openspec/changes/{contracts-ssot,orchestrator} → archived/ (both shipped, v2.7.13 and v2.7.17). Mark the roadmap's "Write/edit robustness" and "Claude provider SDK" milestones as shipped (fuzzy-match.ts + checkpoints.ts; the claude-sdk backend is live via CLAUDE_SDK_BACKEND in .env.host) and add a v2.7.12–v2.7.17 shipped summary. Flag DEFERRED-WORK.md as superseded. Co-Authored-By: Claude Opus 4.8 (1M context) --- boocode_roadmap.md | 12 +++++++----- docs/DEFERRED-WORK.md | 2 ++ .../{ => archived}/contracts-ssot/proposal.md | 0 .../changes/{ => archived}/contracts-ssot/tasks.md | 0 .../orchestrator/artifacts/.discovery-notes.md | 0 .../orchestrator/artifacts/design-context.md | 0 .../artifacts/implementation-decision-log.md | 0 .../artifacts/implementation-iteration-history.md | 0 .../changes/{ => archived}/orchestrator/design.md | 0 .../changes/{ => archived}/orchestrator/proposal.md | 0 .../changes/{ => archived}/orchestrator/tasks.md | 0 11 files changed, 9 insertions(+), 5 deletions(-) rename openspec/changes/{ => archived}/contracts-ssot/proposal.md (100%) rename openspec/changes/{ => archived}/contracts-ssot/tasks.md (100%) rename openspec/changes/{ => archived}/orchestrator/artifacts/.discovery-notes.md (100%) rename openspec/changes/{ => archived}/orchestrator/artifacts/design-context.md (100%) rename openspec/changes/{ => archived}/orchestrator/artifacts/implementation-decision-log.md (100%) rename openspec/changes/{ => archived}/orchestrator/artifacts/implementation-iteration-history.md (100%) rename openspec/changes/{ => archived}/orchestrator/design.md (100%) rename openspec/changes/{ => archived}/orchestrator/proposal.md (100%) rename openspec/changes/{ => archived}/orchestrator/tasks.md (100%) diff --git a/boocode_roadmap.md b/boocode_roadmap.md index de54ffa..768d34a 100644 --- a/boocode_roadmap.md +++ b/boocode_roadmap.md @@ -1,9 +1,11 @@ # BooCode roadmap (v1.x–v2.x) -Last updated: 2026-05-31 +Last updated: 2026-06-03 > **Companion doc:** `boocode_code_review.md` holds the full external-repo inventory, lift rationale, and license analysis. This document is the canonical source for shipping state, version ordering, and what's planned vs. shipped. +> **Shipped since this doc's body was written (v2.7.12–v2.7.17, 2026-06-02→03; see `CHANGELOG.md` for detail):** `v2.7.12-audit-cleanup` (repo-wide dead-code/dedup pass, ~−4,600 LOC), `v2.7.13-contracts-ssot` (the `@boocode/contracts` shared wire-contract package — the "unified types" deferred item), `v2.7.14-backlog-hardening` (5 v2-review items incl. external task-cancel, stall-timeout, retire `:9502` SPA), `v2.7.15-git-diff-panel` + `v2.7.16-container-git-safedir` (Files/Git tab), and `v2.7.17-orchestrator` (the in-app multi-agent Orchestrator on local Qwen). The "Write/edit robustness" and "Claude provider SDK" milestones below — previously marked "planned" — are also now shipped (see those sections). + ## Overview BooCode is a **3-app monorepo** at `/opt/boocode/` (locked 2026-05-22): @@ -452,9 +454,9 @@ The original plan (kept for record): expose `boocoder acp` (JSON-RPC over stdio) ----- -## Write/edit robustness (planned) +## Write/edit robustness — SHIPPED -**Status: planned, not started.** From the v2 review (`boocode_code_review_v2.md` §5b; `cline/cline`, Apache-2.0 — code-liftable). Two lifts that harden BooCoder's write surface where it's weakest for local quantized models: +**Status: SHIPPED (by v2.7.x).** Both lifts are live: the fuzzy patch applier (`apps/coder/src/services/fuzzy-match.ts`, consumed by `pending_changes.ts` — `edit_file` is no longer exact-match) and the `git`-ref checkpoint snapshot (`apps/coder/src/services/checkpoints.ts` → `createCheckpoint`, private `refs/boocode/checkpoints/` ref). The original "planned" note below is retained for provenance. From the v2 review (`boocode_code_review_v2.md` §5b; `cline/cline`, Apache-2.0 — code-liftable). Two lifts that harden BooCoder's write surface where it's weakest for local quantized models: 1. **Fuzzy patch applier for `edit_file`.** BooCoder's `edit_file` is exact-match today (`apps/coder/src/services/pending_changes.ts` — `if (!content.includes(oldStr)) throw`; no whitespace/unicode tolerance, no multi-occurrence guard). Lift cline's tiered match ladder (exact → `trimEnd` → `trim` → Levenshtein ≥0.66) + unicode canonicalization (dashes, curly quotes, nbsp) + multi-occurrence guard; unmatched → warning, not throw. `apply-patch-parser.ts:347-431`. 2. **`git stash create` + private-ref checkpoint.** A per-turn workspace snapshot that captures **all** state — including edits made by dispatched external agents (opencode/claude/qwen/goose), build artifacts, test side-effects — which BooCoder's current `rewind` cannot (it only reverse-applies BooCoder's own queued `pending_changes`). Snapshot stored under a private `refs/…/checkpoints/…` ref, restorable with conversation-trim in sync. `checkpoint-hooks.ts:177-253`. @@ -463,9 +465,9 @@ The original plan (kept for record): expose `boocoder acp` (JSON-RPC over stdio) ----- -## Claude provider — SDK transport + native session resume (planned) +## Claude provider — SDK transport + native session resume — SHIPPED (enabled 2026-06-03) -**Status: planned, not started.** From the v2 review (`boocode_code_review_v2.md` §5h–§5i) + a direct read of the published SDK `.d.ts` (`@anthropic-ai/claude-agent-sdk@0.3.158`, reviewed 2026-05-31). Today BooCoder dispatches `claude` one-shot via PTY (`claude --output-format stream-json`) with no continuity. Plan: +**Status: BUILT and ENABLED.** The Agent-SDK backend (`apps/coder/src/services/backends/claude-sdk.ts`) and the `PostgresSessionStore` (`claude-session-store.ts`, keyed `(chat_id, agent)`) are implemented; it was shipped behind the `CLAUDE_SDK_BACKEND` env flag (off by default in code) and is **enabled in `apps/coder/.env.host` (`CLAUDE_SDK_BACKEND=1`, confirmed live in the running host service)** — chat-tab `claude` tasks route through the warm SDK backend with native session resume instead of one-shot PTY. The original "planned" note below is retained for provenance. From the v2 review (`boocode_code_review_v2.md` §5h–§5i) + a direct read of the published SDK `.d.ts` (`@anthropic-ai/claude-agent-sdk@0.3.158`, reviewed 2026-05-31). Today BooCoder dispatches `claude` one-shot via PTY (`claude --output-format stream-json`) with no continuity. Plan: 1. **Adopt the Agent SDK** (`@anthropic-ai/claude-agent-sdk`) over the PTY path. `query({ prompt, options })` yields structured `SDKMessage`s — `SDKSystemMessage` (`subtype:'init'`, carries the session id + tool/skill/mcp lists), `SDKPartialAssistantMessage` (`type:'stream_event'` deltas), `SDKResultMessage` (turn end) — no stdout scraping. `happy` (`slopus/happy`) is the working existence-proof. 2. **Native session resume via a pluggable `SessionStore`.** Implement `PostgresSessionStore implements SessionStore` (5 methods: `append`/`load`/`listSessions`/`delete`/`listSubkeys`) over BooCode's Postgres, keyed by `(chat_id, agent)`; drive turns with `query({ options: { sessionStore, resume } })` and the SDK materializes the stored session for the CLI subprocess. **This supersedes happy's SessionStart-hook + jsonl-watcher** — that was a workaround predating the feature (happy pins SDK `^0.2.96`; the `SessionStore` API is `0.3.x`). `importSessionToStore()` migrates an existing local session; `InMemorySessionStore` is the reference shape. diff --git a/docs/DEFERRED-WORK.md b/docs/DEFERRED-WORK.md index dbad639..9cbd70a 100644 --- a/docs/DEFERRED-WORK.md +++ b/docs/DEFERRED-WORK.md @@ -1,5 +1,7 @@ # Deferred work — post stale cleanup (2026-05-26) +> **⚠️ SUPERSEDED (2026-06-03): most items in this doc have since shipped.** Task cancel → abort ACP/PTY child (v2.7.14), unified `packages/types` (v2.7.13 `@boocode/contracts`), retire `apps/coder/web/` fallback SPA (v2.7.14), `console.debug`→pino in the xml-parser (v2.7.14), and the large-file splits (v2.7.12) are all done; the ACP cold-probe skip shipped earlier (v2.3). Treat this doc as historical — see `CHANGELOG.md` (v2.7.12–v2.7.17) for what actually shipped. Kept for the design rationale in the detail sections below. + This document describes work intentionally **not** shipped in the 2026-05-26 stale/simplify batch. Each item needs a product or architecture decision before implementation. See also [`STALE-DEPRECATED.md`](./STALE-DEPRECATED.md) for what was resolved in that batch. Last updated: 2026-05-29 diff --git a/openspec/changes/contracts-ssot/proposal.md b/openspec/changes/archived/contracts-ssot/proposal.md similarity index 100% rename from openspec/changes/contracts-ssot/proposal.md rename to openspec/changes/archived/contracts-ssot/proposal.md diff --git a/openspec/changes/contracts-ssot/tasks.md b/openspec/changes/archived/contracts-ssot/tasks.md similarity index 100% rename from openspec/changes/contracts-ssot/tasks.md rename to openspec/changes/archived/contracts-ssot/tasks.md diff --git a/openspec/changes/orchestrator/artifacts/.discovery-notes.md b/openspec/changes/archived/orchestrator/artifacts/.discovery-notes.md similarity index 100% rename from openspec/changes/orchestrator/artifacts/.discovery-notes.md rename to openspec/changes/archived/orchestrator/artifacts/.discovery-notes.md diff --git a/openspec/changes/orchestrator/artifacts/design-context.md b/openspec/changes/archived/orchestrator/artifacts/design-context.md similarity index 100% rename from openspec/changes/orchestrator/artifacts/design-context.md rename to openspec/changes/archived/orchestrator/artifacts/design-context.md diff --git a/openspec/changes/orchestrator/artifacts/implementation-decision-log.md b/openspec/changes/archived/orchestrator/artifacts/implementation-decision-log.md similarity index 100% rename from openspec/changes/orchestrator/artifacts/implementation-decision-log.md rename to openspec/changes/archived/orchestrator/artifacts/implementation-decision-log.md diff --git a/openspec/changes/orchestrator/artifacts/implementation-iteration-history.md b/openspec/changes/archived/orchestrator/artifacts/implementation-iteration-history.md similarity index 100% rename from openspec/changes/orchestrator/artifacts/implementation-iteration-history.md rename to openspec/changes/archived/orchestrator/artifacts/implementation-iteration-history.md diff --git a/openspec/changes/orchestrator/design.md b/openspec/changes/archived/orchestrator/design.md similarity index 100% rename from openspec/changes/orchestrator/design.md rename to openspec/changes/archived/orchestrator/design.md diff --git a/openspec/changes/orchestrator/proposal.md b/openspec/changes/archived/orchestrator/proposal.md similarity index 100% rename from openspec/changes/orchestrator/proposal.md rename to openspec/changes/archived/orchestrator/proposal.md diff --git a/openspec/changes/orchestrator/tasks.md b/openspec/changes/archived/orchestrator/tasks.md similarity index 100% rename from openspec/changes/orchestrator/tasks.md rename to openspec/changes/archived/orchestrator/tasks.md