Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 13 additions & 5 deletions .abcd/development/intents/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -138,10 +138,12 @@ Continuously: intent-fidelity-reviewer's shape-classification role suggests

| File | Frontmatter field |
|---|---|
| `intents/{drafts,planned,shipped}/itd-N-<slug>.md` | `spec_id: spc-N` (or list, or `null` when in drafts/) |
| the native spec `spc-N-<slug>` | `intent: itd-N` (or list) |
| `intents/{drafts,planned,shipped}/itd-N-<slug>.md` | `spec_id: spc-N` (scalar, or `null` when in drafts/ — **never a list**) |
| the native spec `spc-N-<slug>` | `intent: itd-N` (or list — one spec may consume several intents; that is the bundle direction) |

Both directions present once `/abcd:intent plan` runs. `intent_lint` (pre-commit + CI) verifies they agree.
Both directions present once `/abcd:intent plan` runs. `intent_lint` (pre-commit + CI) verifies they agree, and rejects a list-valued `spec_id`.

**Split-the-intent doctrine.** An intent is the unit of consumption: it is implemented by exactly one spec. Work too big for one spec decomposes into *tasks inside* that spec; an intent containing two separately verifiable promises is two intents — split it (precedent: the launch PRD's Tier A/B split into itd-67 and itd-72). This keeps the close hook singular, coverage computable, and doneness unambiguous — an intent can never be half-consumed and called done.

---

Expand Down Expand Up @@ -194,6 +196,12 @@ prd_grandfathered: null # true = pre-spc-3 planned intent; GR002+GL005 suppress

- **Given** <preconditions>, **when** <user/system action>, **then** <observable outcome>.

## Prior Art

> _Required. Positions the intent against the existing corpus: what it builds on, what almost covers it, why it is nonetheless its own intent. At least one resolvable reference (sibling intent, brief section, principle, ADR, or external source); "none found — searched <where>" is a valid entry, an empty section is not._

- <Reference + one line on the relation>

## Open Questions

- <Bullet — anything not yet decided>
Expand Down Expand Up @@ -223,9 +231,9 @@ The freeze is **non-self-referential**: re-computing the hash on the frozen PRD

## Customer Quotes — Persona Convention

Customer quotes use placeholder personas from `.abcd/development/personas.json` (Alice, Bob, Carol, ...). Each persona has role hints; pick a persona whose role matches the intent's audience.
Customer quotes use placeholder personas from `.abcd/development/personas.json` (Alice, Bob, Carol, ... — a fixed alphabetical sequence). Selection is **by role, never by name**: the intent's audience picks the role; the role's registered name is used. Every persona is they/them.

This is also a codified abcd principle: never use real names in press releases (PII), but never use generic "a hypothetical user" language (loses voice). Named personas keep quotes grounded without leaking real-world identifiers.
This is also a codified abcd principle ([`principles/personas-alice-bob-carol.md`](../principles/personas-alice-bob-carol.md)): never use real names in press releases (PII), but never use generic "a hypothetical user" language (loses voice). Named personas keep quotes grounded without leaking real-world identifiers.

---

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ suggested_kind: null
spec_id: null
reclassification_history:
- { date: 2026-05-07, from: standalone, to: discipline, reason: "Reclassified per the three-intent-kinds change: itd-1 has no user moment of its own (it's a rule that applies to every other epic), so press-release shape was structurally wrong. Discipline shape (## Rule + ## Why) fits." }
severity: critical
---

# Every Intent Has Acceptance Criteria; Every Audit Verifies Them
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ kind_notes: "Cross-cutting modification-grammar gate; applied at every spec plan
suggested_kind: null
spec_id: null
reclassification_history: []
blocked_by: [itd-36]
builds_on: [itd-1]
severity: major
---

# Every Spec Externalises How It Should And Shouldn't Be Modified
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ suggested_kind: null
spec_id: null
reclassification_history:
- { date: 2026-05-07, from: standalone, to: discipline, reason: "Reclassified per the three-intent-kinds change: itd-5 is a rule that applies to every agent spec — `prompt_version` frontmatter, one-shot pre-flight at lock-time, injection canaries — not a feature with a user moment of its own. Discipline shape (## Rule + ## Why) fits." }
blocked_by: [itd-1]
severity: major
---

# Every Agent Prompt Carries Its Version, Earns Its Lock, And Survives Injection
Expand Down
2 changes: 2 additions & 0 deletions .abcd/development/intents/drafts/itd-10-purge-uninstall.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ spec_id: null
kind: standalone
suggested_kind: null
reclassification_history: []
builds_on: [itd-13]
severity: minor
---

# Full Removal When You Mean It
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ spec_id: null
kind: standalone
suggested_kind: null
reclassification_history: []
severity: minor
---

# Disembark Survives Noisy Transcripts
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ spec_id: null
kind: standalone
suggested_kind: null
reclassification_history: []
severity: minor
---

# Working Notes Don't Outrank Settled Decisions
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ spec_id: null
kind: standalone
suggested_kind: null
reclassification_history: []
severity: minor
---

# Reviews and Memory Stay Fresh, Always
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@ spec_id: null
kind: standalone
suggested_kind: null
reclassification_history: []
blocked_by: [itd-5]
builds_on: [itd-15]
severity: minor
---

# Prompts Are Versioned Like Code
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ spec_id: null
kind: standalone
suggested_kind: null
reclassification_history: []
severity: minor
builds_on: [itd-14]
---

# abcd Audits Its Own Prompts on Every Self-Disembark
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ spec_id: null
kind: standalone
suggested_kind: null
reclassification_history: []
builds_on: [itd-9]
severity: major
---

<!-- 2026-05-08: scope rewritten and split. /abcd:audit is positioned as the umbrella verb;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ kind: standalone
suggested_kind: null
reclassification_history: []
related_adrs: [adr-8, adr-25]
builds_on: [itd-5]
severity: minor
---

# Pick the Right Oracle for the Job, Automatically
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ spec_id: null
kind: standalone
suggested_kind: null
reclassification_history: []
severity: minor
---

# Sensible Permissions From Day One
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ spec_id: null
kind: standalone
suggested_kind: null
reclassification_history: []
severity: minor
---

# Defaults That Match Where the Project Lives
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ spec_id: null
kind: standalone
suggested_kind: null
reclassification_history: []
builds_on: [itd-18, itd-1]
severity: minor
---

# Start a New Project With abcd Conventions
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ spec_id: null
kind: standalone
suggested_kind: null
reclassification_history: []
blocked_by: [itd-2]
severity: major
---

# abcd Runs in OpenCode Too
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ spec_id: null
kind: standalone
suggested_kind: null
reclassification_history: []
severity: minor
---

# Lifeboats Speak To External Tools
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@ spec_id: null
kind: standalone
suggested_kind: null
reclassification_history: []
blocked_by: [itd-4]
builds_on: [itd-13, itd-36]
severity: minor
---

# Patterns Surface Themselves
Expand All @@ -13,7 +16,7 @@ reclassification_history: []

> **abcd ships `/abcd:dredge` — the cross-corpus synthesist that turns the issue ledger into systemic insight.** Run it after months of captures have accumulated, and abcd's `issue-synthesist` agent clusters open issues across every repo in `.abcd/corpus.json`, surfacing recurring themes as candidate intent drafts. Three months of captured nitpicks and review findings becomes "nine of your open issues across four repos all touch the same dev-sync race conditions — promote as a single intent?". The thing you were doing in your head is now something the system does for you.
>
> "abcd gave me a structured ledger but I had to scan it manually to spot patterns," said Alex, autonomous-development practitioner. "Dredge looks at every repo's open ledger together, finds the clusters I'd otherwise miss, and offers each as a candidate intent. The first dredge after six months of captures showed me three systemic patterns I'd been working around individually instead of fixing structurally."
> "abcd gave me a structured ledger but I had to scan it manually to spot patterns," said Maya, autonomous-development practitioner. "Dredge looks at every repo's open ledger together, finds the clusters I'd otherwise miss, and offers each as a candidate intent. The first dredge after six months of captures showed me three systemic patterns I'd been working around individually instead of fixing structurally."

## Why This Matters

Expand Down
3 changes: 3 additions & 0 deletions .abcd/development/intents/drafts/itd-26-loot-oss-vendor.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@ spec_id: null
kind: standalone
suggested_kind: null
reclassification_history: []
blocked_by: [itd-36]
severity: minor
builds_on: [itd-25]
---

<!-- 2026-05-08: brought forward to align with README's command shape table.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ kind: standalone
suggested_kind: null
reclassification_history:
- { date: 2026-05-07, from: bundle-member, to: standalone, reason: "Originally bundled with itd-27 (grill sub-verb) under `intent-capture-discipline`, but itd-27 and itd-30 are not co-scheduled — bundle members must belong to the same phase. Reclassified to standalone; when this lands, its epic depends on or extends spc-3 (the grill sub-verb's epic) for shared interview/lint/persona-registry plumbing." }
blocked_by: [itd-27]
builds_on: [itd-1, itd-34]
severity: minor
---

# Design Fictions As An Alternative Capture Format For Intents
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@ spec_id: null
kind: standalone
suggested_kind: null
reclassification_history: []
blocked_by: [itd-20]
builds_on: [itd-29, itd-2, itd-22]
severity: major
---

# Multiple Agents Coordinate On Intent And Spec Work Without Duplicating Effort Or Producing Competing Artefacts
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@ spec_id: null
kind: standalone
suggested_kind: null
reclassification_history: []
blocked_by: [itd-16]
builds_on: [itd-9]
severity: minor
---

<!-- 2026-05-08: Captured as a sibling to itd-16. itd-16 owns the /abcd:audit umbrella substrate
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ spec_id: null
kind: standalone
suggested_kind: standalone
reclassification_history: []
blocked_by: [itd-36, itd-3]
severity: minor
---

# abcd Surfaces the Right Memory at the Right Moment
Expand Down
3 changes: 2 additions & 1 deletion .abcd/development/intents/drafts/itd-41-phase-negotiator.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ kind: standalone
suggested_kind: standalone
reclassification_history: []
related_adrs: [adr-10]
severity: minor
---

# abcd Tells You, Honestly, What a Phasing Choice Costs
Expand All @@ -14,7 +15,7 @@ related_adrs: [adr-10]

> **abcd proposes how to phase your roadmap and shows you the real trade-offs before you commit.** Ask abcd to phase a set of intents and it works backwards from what each phase should make true, proposes an ordered set of phases, and then — instead of letting your wish-list go unchallenged — it interrogates the plan with you. Pull an intent forward and it asks which phase's expectation now slips; defer one and it names, from the dependency graph, exactly what else waits. Every cost it states is traced to a real dependency edge or a real phase-acceptance bullet — it never invents a trade-off to sound thorough. You still decide; abcd makes sure you decide knowing the price.
>
> "I always want everything in phase one," said Carol, product lead. "abcd asked me — move `itd-3` later and what in phase two stops working? I hadn't thought about the rules loader. It didn't lecture me; it asked the question the dependency graph already implied, and then it showed me the one phase-acceptance bullet I'd quietly broken. I re-scoped in five minutes, with my eyes open."
> "I always want everything in phase one," said Iris, product lead. "abcd asked me — move `itd-3` later and what in phase two stops working? I hadn't thought about the rules loader. It didn't lecture me; it asked the question the dependency graph already implied, and then it showed me the one phase-acceptance bullet I'd quietly broken. I re-scoped in five minutes, with my eyes open."

## Why This Matters

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ kind: null
suggested_kind: standalone
reclassification_history: []
related_adrs: []
blocked_by: [itd-34]
severity: minor
builds_on: [itd-39]
---

# A Capture-Time `decision` Verdict That Routes Infrastructure Choices Into The Existing ADR Store
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ reclassification_history: []
related_adrs: [adr-27]
routed_from: ["spc-33:I-D1-extdep", "spc-33:I-D2-extdep"]
prd_path: null
severity: major
---

# abcd Knows What "Safe Enough to Adopt" Means Before a New Harness Arrives
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ suggested_kind: standalone
reclassification_history: []
related_adrs: []
prd_path: null
severity: minor
---

# abcd Can Tell Whether Its Own Reasoning Rests On Bedrock Or On An Unexamined Assumption
Expand All @@ -15,7 +16,7 @@ prd_path: null

> **abcd gains a foundations auditor: a surface that takes a reasoned document — a brief claim, an ADR rationale, an intent's "Why This Matters" — and reports where its justification actually terminates, flagging the difference between a genuine first principle, an accepted convention, a justification that simply stops, and a circular dependency that smuggles the conclusion into a premise.** abcd already stress-tests acceptance criteria (the grill) and checks whether delivery matches intention (the fidelity reviewer). Neither asks the deeper question: is the *reasoning itself* epistemically honest about where it starts? This auditor adds that lens. It surfaces the claim architecture, excavates the unstated premises, audits the regress terminus, interrogates the causal account through the four causes, and checks that the mode of reasoning fits the kind of claim being made — turning "this feels well-argued" into "here is exactly what this argument is standing on, and whether that ground holds."

> "Our briefs read persuasively, which is exactly the danger," said Iris, a staff engineer who keeps abcd's reasoning honest. "Persuasive prose hides where the justification quietly ran out. I want a pass that says: this claim bottoms out in an unexamined assumption, and this other one is circular — it assumes the thing it's trying to prove. Then I can fix the foundation instead of polishing the surface."
> "Our briefs read persuasively, which is exactly the danger," said Bob, a staff engineer who keeps abcd's reasoning honest. "Persuasive prose hides where the justification quietly ran out. I want a pass that says: this claim bottoms out in an unexamined assumption, and this other one is circular — it assumes the thing it's trying to prove. Then I can fix the foundation instead of polishing the surface."

## Why This Matters

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ suggested_kind: standalone
reclassification_history: []
related_adrs: [adr-26, adr-27]
prd_path: null
severity: minor
---

# Every abcd Voyage Ships With A Manual-Hold Sentinel That Blocks A Spec From Autonomous Pickup Until A Human Lifts It
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ reclassification_history: []
related_adrs: [adr-27, adr-29]
routed_from: []
prd_path: null
severity: minor
builds_on: [itd-58]
---

# Every Autonomous Run Pass Leaves the Same Durable, Queryable Transcript an Interactive Session Does
Expand All @@ -16,7 +18,7 @@ prd_path: null

> **abcd captures the instruction-set and reasoning of every autonomous-run pass into the same native transcript corpus it already keeps for interactive sessions — so the work done while no human is watching is exactly as auditable as the work done with one.** There is an asymmetry to close: an operator's interactive session is redirected into the native transcript corpus at `~/.abcd/history/<root_sha>/` (a durable, queryable store). But the autonomous worker on the pluggable run seam — the thing that runs unattended for hours, plans, implements, and self-reviews — emits its instructions and reasoning only to an ephemeral per-pass log that run-dir hygiene prunes. The agent doing the most consequential, least-supervised work leaves the least durable record. This intent closes that gap: every autonomous run pass's instructions + reasoning is captured to the same corpus, with the same queryability, as an interactive session.
>
> "abcd's whole promise is that you can trust what the agent did while you were away," said Alex, framework author. "But when I went to audit an autonomous run after the fact, the interactive sessions were all there in the transcript corpus and the autonomous worker — the one I most needed to check — had left only an ephemeral log that the run-dir cleanup had already eaten. The unattended work is exactly the work that most needs a durable trail."
> "abcd's whole promise is that you can trust what the agent did while you were away," said Kira, framework author. "But when I went to audit an autonomous run after the fact, the interactive sessions were all there in the transcript corpus and the autonomous worker — the one I most needed to check — had left only an ephemeral log that the run-dir cleanup had already eaten. The unattended work is exactly the work that most needs a durable trail."

## Why This Matters

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ glossary_terms_used:
- core/oracle
grilled_intent_hash: bfaa672163edddb5d859bbdfc50169512349da38405c295729ce42c04b894401
prd_grandfathered: false
severity: major
---

# When Something Is Built, The Brief And The Public Docs Reflect It — Or The Spec Cannot Close
Expand All @@ -23,7 +24,7 @@ prd_grandfathered: false

> **abcd gains a doc-fidelity pass: a forward-direction check that grades built reality against the brief, and the brief against the audience-adapted public docs, so a shipped capability is never left undocumented and the public framing never out-promises what the code actually does.** abcd already grades delivery against intention (the fidelity reviewer). It does not yet grade documentation against delivery. This pass closes that loop. After each task it advises (soft, non-blocking) where the brief or public docs may now lag the code; before a spec closes it becomes a hard gate. When drift is found it auto-drafts the brief delta and the audience-adapted public-doc delta — one view for end-users *applying* what was built, optionally one for developers *extending* it — and surfaces them for the product thinker to approve or edit. The brief stays the single source of truth; the public docs are derived, audience-specific explanations of it.

> "The gap that scares me isn't a bug — it's a README that quietly describes a capability we never shipped, or a brief that's six specs behind the code," said Mara, a product thinker shipping with abcd. "I read the verdict, not the source. If the docs drift, my whole picture of what I've built is wrong. I want the framework to refuse to call a spec done until the brief and the docs say what's actually true — and to hand me a draft of the change so I'm reviewing, not writing."
> "The gap that scares me isn't a bug — it's a README that quietly describes a capability we never shipped, or a brief that's six specs behind the code," said Iris, a product thinker shipping with abcd. "I read the verdict, not the source. If the docs drift, my whole picture of what I've built is wrong. I want the framework to refuse to call a spec done until the brief and the docs say what's actually true — and to hand me a draft of the change so I'm reviewing, not writing."

## Why This Matters

Expand Down
Loading
Loading