Skip to content
Merged
6 changes: 3 additions & 3 deletions .abcd/config.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@
"target": "agents_md"
},
"meta": {
"project_name": "abcd-cli",
"project_name": "abcd",
"schema_version": 1,
"setup_date": "2026-07-14",
"setup_version": "dev"
"setup_date": "2026-09-17",
"setup_version": "v0.9.0"
},
"oracle": {
"backend": "host-delegated"
Expand Down
19 changes: 12 additions & 7 deletions .abcd/development/brief/01-product/01-press-release.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,26 @@

## Press Release

> **abcd is a command-line tool that rescues the lessons from a stuck project — so you can rebuild from scratch without losing what you learned.** Point `/abcd:disembark <source-repo> to <dest>` at a repo that's grown unwieldy — or at one that died years ago and that abcd never managed — and abcd reads it without writing a single byte back, packing the project's hard-won knowledge — decisions, principles, pitfalls, the graveyard of what failed, the spine of what was built and why — into a portable lifeboat artefact at `<dest>`, alongside a coverage report that names what it could *not* ground and the questions a human must answer. Run `/abcd:embark from <path>` in an empty repo, and the lifeboat unpacks into a clean foundation with the same wisdom but none of the cruft. A small command surface rounds out the workflow: install (`/abcd:ahoy install`) and public release (`/abcd:launch ship`); `/abcd:intent` and `/abcd:capture` keep forward-looking work and discovered issues structured as the project evolves; and `/abcd:memory` curates a queryable knowledge substrate from those same sources. Bare invocation of any command shows status + suggested next actions; state-mutating actions require an explicit sub-verb (the universal abcd convention).
> **abcd helps a product thinker realise an intent as a high-fidelity prototype or demonstrator — carrying the why from idea to shipped reality.** State what should exist, why, for whom, and what good looks like, as a press-release intent (`/abcd:intent "<text>"`); abcd holds that why through planning (`/abcd:intent plan`), the readiness gate (`/abcd:intent ready`) and delivery, and when the work lands it is audited against the intent's own acceptance criteria (`/abcd:intent audit`), with the verdict recorded on the intent, so what was promised and what was delivered are read side by side. The lifeboat is a key capability of the same product: point `/abcd:disembark <source-repo> to <dest>` at any repository — one that has grown unwieldy, or one that died years ago and that abcd never managed — and abcd reads it without writing a single byte back, packing its hard-won knowledge — decisions, principles, pitfalls, the graveyard of what failed, the spine of what was built and why — into a portable lifeboat artefact at `<dest>`, alongside a coverage report that names what it could *not* ground and the questions a human must answer. `/abcd:disembark probe <source-repo>` renders that coverage verdict on its own, and `/abcd:embark from <path>` unpacks a lifeboat into a clean foundation with the same wisdom but none of the cruft. A small command surface rounds out the workflow: install (`/abcd:ahoy install`) and public release (`/abcd:launch ship`); `/abcd:capture` keeps discovered issues structured as the project evolves; and `/abcd:memory` curates a queryable knowledge substrate from those same sources. Bare invocation of any command shows status + suggested next actions; state-mutating actions require an explicit sub-verb (the universal abcd convention).
>
> "I know what I want built and I can tell in a minute whether a prototype got it right. What I could never do was hold that line through the engineering. abcd takes the why as I wrote it, builds against it, and shows me what was promised next to what was delivered," said Iris, a product thinker.
>
> "I'd hit the wall on a side project three times this year — every rebuild from scratch lost the lessons I'd already learned the hard way. abcd is the first tool that treats those lessons as the *output* worth saving, not just the code," said Maya, an AI/agent researcher.

## Why This Matters

Long-running projects accumulate context that doesn't live in any one file: why a decision was made, what was tried and abandoned, which patterns earned their keep, which produced subtle bugs. When the project gets stuck and you decide to rebuild, that context evaporates — you re-learn the same lessons, retry the same dead ends, and re-make the same mistakes. abcd treats *the project's accumulated wisdom* as the artefact worth rescuing, separate from the code. The lifeboat is a portable directory you can share, archive, or unpack into a new repo; abcd orchestrates packing and unpacking with audit gates so the rescue is faithful, not fan-fiction.
A product thinker knows what should exist and what good looks like, and cannot hold that line through the engineering without a facilitator in the room. abcd keeps the why in the record — as an intent, then a plan, then a verdict — so a prototype or demonstrator is built against what was asked and judged against it, not against whatever the build drifted into.

The same record is why the lifeboat works. Long-running projects accumulate context that doesn't live in any one file: why a decision was made, what was tried and abandoned, which patterns earned their keep, which produced subtle bugs. When the project gets stuck and you decide to rebuild, that context evaporates — you re-learn the same lessons, retry the same dead ends, and re-make the same mistakes. abcd treats *the project's accumulated wisdom* as the artefact worth rescuing, separate from the code. The lifeboat is a portable directory you can share, archive, or unpack into a new repo; abcd orchestrates packing and unpacking with audit gates so the rescue is faithful, not fan-fiction.

> **Status: NOT YET REAL.**

The lifeboat widens from whole repositories to narrower sources — a single feature, a lab session, an abandoned worktree — packed with the same coverage honesty, so what a throwaway experiment or a dropped branch learned is carried the way a project's knowledge is.

## What's In Scope

- **Pack the lifeboat:** `/abcd:disembark <source-repo> to <dest>` runs three passes (settled artefacts → targeted chat retrieval → distil/compose/audit) over a project's specs, ADRs, transcripts, oracle reviews, and curated memory. It is **read-only in the source repo and writes out-of-tree** (adr-35): the source is never modified, so any repository can be mined — including a dead one abcd has never touched. Output at `<dest>` is a structured directory with synthesised principles, decisions timeline, pitfalls, a `graveyard/` of what was tried and abandoned, press-release framing, verbatim copies of specs, ADRs, and user docs, and a first-class `coverage.{json,md}` pair recording what could not be grounded (`grounded` / `partial` / `blank`), what was searched, and the question a human must answer. abcd refuses a destination it did not produce — it writes only into an absent path, an empty directory, or one carrying a parseable `_provenance.json`. Operations state (the append-only voyage log) lives at the operator level under `~/.abcd/voyage/<source-root-sha>/`, keyed on the root-commit SHA and never committed.
- **Forward-looking discipline:** `/abcd:intent` captures product intents in three structural kinds per itd-34 — `standalone` (one user moment, one spec), `bundle-member` (coupled intents share a spec), and `discipline` (cross-cutting rules with no user moment, e.g., the itd-1 acceptance-gates rule that enforces Given-When-Then on every other spec). Standalone and bundle-member intents are press-release-shaped; disciplines use a `## Rule` template instead. `/abcd:capture` runs a structured issue ledger at `.abcd/work/issues/` rather than free-form notes. `/abcd:intent grill` (sibling of `refine`, per itd-27) is a Socratic-questioning sub-verb that stress-tests intents (or brief sections, via `--brief-section`) before planning. After shipping, `/abcd:intent audit` (Role 1 of `intent-auditor`) reviews delivered reality against the press release; `/abcd:intent consistency` (Role 2, shipped in spc-29 per itd-48, which superseded itd-31) catches cross-document drift; `/abcd:intent shape` (Role 3) keeps each intent's `kind` honest.
- **Pack the lifeboat:** `/abcd:disembark <source-repo> to <dest>` runs three passes (settled artefacts → targeted chat retrieval → distil/compose/audit) over a project's specs, ADRs, transcripts, oracle reviews, and curated memory. `/abcd:disembark probe <source-repo>` is the user-facing read-only half: the coverage report alone, rendered to stdout and written nowhere. Pack is **read-only in the source repo and writes out-of-tree** (adr-35): the source is never modified, so any repository can be mined — including a dead one abcd has never touched. Output at `<dest>` is a structured directory with synthesised principles, decisions timeline, pitfalls, a `graveyard/` of what was tried and abandoned, press-release framing, verbatim copies of specs, ADRs, and user docs, and a first-class `coverage.{json,md}` pair recording what could not be grounded (`grounded` / `partial` / `blank`), what was searched, and the question a human must answer. abcd refuses a destination it did not produce — it writes only into an absent path, an empty directory, or one carrying a parseable `_provenance.json`. Operations state (the append-only voyage log) lives at the operator level under `~/.abcd/voyage/<source-root-sha>/`, keyed on the root-commit SHA and never committed.
- **Unpack the lifeboat:** `/abcd:embark from <path>` reads the lifeboat, runs a press-release interview to confirm the framing with the user, scaffolds the new repo at canonical locations, and writes provenance so the rebuild knows where it came from. `<path>` is wherever a prior disembark landed its lifeboat; there is no in-tree lifeboat home and no `home` shorthand.
- **Install / promote:** `/abcd:ahoy install` bootstraps abcd in any repo (transparent prompts, visibility-driven gitignore, marker block in CLAUDE.md/AGENTS.md, prompt-router hook). `/abcd:launch ship` cuts a curated release from the single repo — `.abcd/**` excluded from the artifact by packaging — with secret/PII scans and a version stamp.
- **Forward-looking discipline:** `/abcd:intent` captures product intents in three structural kinds per itd-34 — `standalone` (one user moment, one spec), `bundle-member` (coupled intents share a spec), and `discipline` (cross-cutting rules with no user moment, e.g., the itd-1 acceptance-gates rule that enforces Given-When-Then on every other spec). Standalone and bundle-member intents are press-release-shaped; disciplines use a `## Rule` template instead. `/abcd:capture` runs a structured issue ledger at `.abcd/work/issues/` rather than free-form notes. `/abcd:intent ready` answers the question that gates the build: is this intent ready to implement, and if not, what is missing. After shipping, `/abcd:intent audit` (Role 1 of `intent-auditor`) reviews delivered reality against the press release. Three companions to those are designed and not yet built: `/abcd:intent grill` (per itd-27), a Socratic interview that stress-tests an intent, or a brief section, before it is planned; `/abcd:intent consistency` (Role 2, per itd-48, which superseded itd-31), which catches drift between documents; and `/abcd:intent shape` (Role 3), which keeps each intent's `kind` honest as the corpus grows.
Expand Down Expand Up @@ -40,10 +49,6 @@ Code-bundling lifeboats, cross-corpus synthesis, public-source vendoring with pr

- **Pass B signal density.** chat-distiller's effectiveness depends on the native transcript store's signal-to-noise. Phase 0 sampling on idelphiDev measures actual density before Pass B's design locks. If signal is too thin, transcript-noise mitigation moves up from itd-11 (a later-phase item) into an earlier phase.
- **Brief-skeleton enforcement.** The numbered-folder layout for `.abcd/development/brief/` is a current convention but not enforced by `intent-auditor` or `documentation-auditor`. See [`05-internals/README.md § enforcement policy`](../05-internals/README.md#policy-no-skeleton-enforcement-deferred) for the candidates list and the deferred-rigidity rationale (this "defer" means deferring the rigidity decision itself, not a release horizon).
- **Product framing after adr-35.** The narrative above is still "rescue the lessons from *your* stuck project so you can rebuild it" — a round-trip out of a repo abcd manages. [adr-35](../../decisions/adrs/0035-lifeboat-as-coverage-experiment.md) makes disembark a read-only reader of *any* repository whose first shipped output is a **coverage verdict on the brief's own structure**, produced by a `disembark probe <repo>` pass that runs across a corpus of repos of mixed record quality *before a packer exists*. The factual claims here have been reconciled; the story has not been re-authored.

> **Open question (adr-35):** is the headline product still "rescue a stuck project's lessons for a rebuild", or is it "read any repository — dead, archived, or never abcd-managed — for the theory it can still yield, and say plainly what it cannot"? And does the probe pass (`disembark probe`) belong in the user-facing command set of [§ What's In Scope](#whats-in-scope), or is it an operator-internal experiment surface like `/abcd:run`? adr-35 settles the mechanics (read-only, out-of-tree, coverage-first) but not the framing or the command surface. Must be answered before this press release is checked against delivered reality.

- **Round-trip fidelity floor.** What's the minimum percentage of source-repo principles, decisions, and pitfalls that must survive `disembark → embark` for the round-trip to be considered "successful"? abcd ships without an explicit floor; the lifeboat review verdict is the proxy. A future intent (likely paired with itd-15 self-dogfooded SOTA audit) may quantify it.

## Audit Notes
Expand Down
3 changes: 3 additions & 0 deletions .abcd/development/brief/06-delivery/03-out-of-scope.md
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,9 @@ gate. That is what keeps "not hand-counted" true after the day it was written.
- `itd-2609150819440345` — a claim record beside the machine-scoped worktree store says which session holds which worktree, branch or record, replacing the per-session handshake (promoted from iss-2609100519122086)
- `itd-2609151138388536` — the decisions log becomes a folder of individually minted decision records with an assembled index, `DECISIONS.md` a symlink to it, in abcd and in every managed repository; the shape retires the decisions-append gate (the rule is adr-2609151138420062; promoted from iss-2609100507439414)
- `itd-2609151516525843` — a committed declaration lifts the public visibility fence so a fresh public repository can create its committed banned-names layer on day one, and a machine-global private banned-names list in the user-level home bans a name in every repository on the machine; CI never reads the home list and no pattern from it reaches a committed file (`builds_on` itd-74, `refines` adr-56; promoted from iss-2609100506269348)
- `itd-2609081951381895` — abcd ships an OpenAI-compatible api oracle adapter, the first wired provider a local MLX server with a cloud aggregator as config-only (refines adr-25; filed 2026-09-08)
- `itd-2609090746410233` — A lifeboat packs from a worktree, a branch, or an abandoned feature test, experiment or implementation, not only from a whole repository (refines itd-88 and adr-35; realises the press release's not-yet-real widening, git-source half)
- `itd-2609090746414083` — A lifeboat packs from a lab session home, the throwaway experiment's intention, harvest and bundle, with the same coverage honesty as a repository (refines itd-88 and adr-35; the non-git half, sequenced after the lab verb family)
<!-- /index -->

**Later-phase items with no intent id.** These four were written into the brief
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
---
id: itd-2609081951381895
slug: abcd-ships-an-openai-compatible-api-oracle-adapter-the-first
spec_id: null
kind: null
suggested_kind: null
reclassification_history: []
builds_on: []
severity: minor
impact: additive
origin: researcher-authored
production_mode: hand-written
---

# abcd ships an OpenAI-compatible api oracle adapter — the first concrete implementation of adr-25's api oracle-backend shape. An operator configures a baseURL (and optional key) in .abcd/config.json and abcd routes oracle calls — reviews, audits — to that model over plain HTTP. The first wired provider is a local OpenAI-compatible server (Gropius MLX on localhost, no key needed); cloud aggregators such as OpenRouter ride the same adapter as pure configuration, not code. The host-delegated default is untouched: with no adapter configured nothing changes and no network call is attempted.

## Press Release

> _Seeded from a quoted-text intent capture. Expand into the full press-release narrative before planning._

## Why This Matters

abcd ships an OpenAI-compatible api oracle adapter — the first concrete implementation of adr-25's api oracle-backend shape. An operator configures a baseURL (and optional key) in .abcd/config.json and abcd routes oracle calls — reviews, audits — to that model over plain HTTP. The first wired provider is a local OpenAI-compatible server (Gropius MLX on localhost, no key needed); cloud aggregators such as OpenRouter ride the same adapter as pure configuration, not code. The host-delegated default is untouched: with no adapter configured nothing changes and no network call is attempted.

## Mechanism

> _Prompted (the claim-recording gradient): why the authors expect this to work, as a falsifiable "we expect X because Y" — not the outcome restated. Replace this line with the claim, or with the exact token `None stated.` alone on its line to record the claim as considered and declined._

## Scope Conditions

> _Required (the claim-recording gradient): the population, platform, scale, or assumptions this claim holds under, one per top-level bullet — `abcd intent plan` stamps each with a persistent identity. Replace this line with those bullets, or with the exact token `None stated.` alone on its line._

## Acceptance Criteria

> _Required (the itd-1 discipline): add at least one Given-When-Then bullet describing the verifiable bar for "shipped" before this draft can be planned._

## Open Questions

_None recorded yet._

## Audit Notes

_Empty. Populated by intent-auditor when intent moves to shipped/._
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
---
id: itd-2609090746410233
slug: a-lifeboat-packs-from-a-worktree-a-branch-or-an-abandoned-fe
spec_id: null
kind: null
suggested_kind: null
reclassification_history: []
builds_on: []
severity: minor
impact: additive
origin: researcher-authored
production_mode: hand-written
---

# A lifeboat packs from a worktree, a branch, or an abandoned feature test, experiment or implementation, not only from a whole repository

## Press Release

> _Seeded from a quoted-text intent capture. Expand into the full press-release narrative before planning._

## Why This Matters

A lifeboat packs from a worktree, a branch, or an abandoned feature test, experiment or implementation, not only from a whole repository

## Mechanism

> _Prompted (the claim-recording gradient): why the authors expect this to work, as a falsifiable "we expect X because Y" — not the outcome restated. Replace this line with the claim, or with the exact token `None stated.` alone on its line to record the claim as considered and declined._

## Scope Conditions

> _Required (the claim-recording gradient): the population, platform, scale, or assumptions this claim holds under, one per top-level bullet — `abcd intent plan` stamps each with a persistent identity. Replace this line with those bullets, or with the exact token `None stated.` alone on its line._

## Acceptance Criteria

> _Required (the itd-1 discipline): add at least one Given-When-Then bullet describing the verifiable bar for "shipped" before this draft can be planned._

## Open Questions

_None recorded yet._

## Audit Notes

_Empty. Populated by intent-auditor when intent moves to shipped/._
Loading