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
3 changes: 3 additions & 0 deletions docs/adr/0001-decision-records-storage.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Store decision records under docs/adr/ with an adr:<slug> citation token

**Context.** Every load-bearing decision except technology had three destinations, all of which rot: "Context and vision" prose the parser ignores, `[ASSUMPTION]` markers nothing forces resolving, or nowhere at all — so the *why* never travelled with the *what* into specs and runner sessions. **Decision.** Decision records live in project-scoped `docs/adr/NNNN-<slug>.md` (append-only, one flat sequence, like `docs/stack.md`), and feats cite them with a third ref token, `adr:<slug>`, tokenized and linted beside `stack:` and `[[wiki]]`. **Why.** Reusing the proven stack-ref machinery (tokenize → validate → inline into the brief) makes hand-written ADRs first-class before any skill ships, and a lintable citation is what a plain `NNNN-slug.md` file alone lacks; the rejected alternatives — a wiki page (prose, not a contract) and a plan-scoped record (invisible to sibling plans) — both recreate the drift this feature removes.
3 changes: 3 additions & 0 deletions docs/adr/0002-two-tier-interview.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Draft interviews in two tiers — batch scope facts, grill decisions

**Context.** The prd skill's Draft used one batched multiple-choice interview ("1B, 2A, 3C") optimized for speed, which bundles load-bearing decisions in with scope facts so they pass undiscussed; pure one-at-a-time grilling (the studied grilling skill) is the opposite failure — it makes cheap scope facts as expensive as real decisions. **Decision.** Draft runs two tiers: the existing batched lettered multiple-choice for scope facts, then a sequential Decision grill (one decision per exchange, recommendation first, dependency order, ADR written inline) for every candidate that passes the triple gate. **Why.** csdd's batch already beats grilling for facts and grilling already beats batch for decisions, so splitting on the triple gate takes the strength of each; the grill applies only to the 2–5 gate-positive decisions a typical initiative carries, bounding the interview cost that killed pure grilling.
3 changes: 3 additions & 0 deletions docs/adr/0003-glossary-deferred.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Defer the glossary / ubiquitous language to its own phase

**Context.** domain-modeling bundles a `CONTEXT.md` glossary (ubiquitous language, canonical entity aliases) with its ADR discipline, and it was tempting to ship both under the decision-records feature. **Decision.** The glossary is deferred to its own phase (`docs/plans/PLAN-glossary.md`) rather than folded into decision-records. **Why.** The glossary's real value is the canonical/alias entity table feeding the knowledge-base graph extractor, so it must be designed *with* the graph — a different seam than the plan-grammar/validate/brief seams this feature touches; conflating the two would widen this feature's blast radius for no shared machinery. This is the explicit "no" — the deferral is a decision, not an omission — and PLAN-glossary is the phase that resolves it.
52 changes: 52 additions & 0 deletions docs/glossary.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
# Glossary — csdd's ubiquitous language

This is the project's **ubiquitous-language contract**: one canonical term per
domain concept, defined as what it **is**, with an `_Avoid_` list of the synonyms
it bans. Identifiers (feat slugs, spec directories, wiki page names) are minted
from canonical terms; `csdd plan validate`, `csdd graph analyze`, and
`csdd wiki lint` report an avoided term used as a whole token. Prose outside the
`## Language` section is ignored by the parser.

## Language

### Planning

**Plan**: The structured document above specs (`docs/plans/<slug>/`) that
decomposes an initiative into feats; each feat becomes exactly one spec.
_Avoid_: prd, epic

**Feat**: One row of a plan's Feats table — a spec-sized chunk of work with an
explicit objective, dependencies, and refs; it becomes exactly one spec.
_Avoid_: feature, story, ticket

**Spec**: The per-feature contract under `specs/<name>/` (requirements, design,
tasks) that a feat is realized as.
_Avoid_: specification-doc

**Seed**: A pre-authored artifact under a plan's `seeds/<feat>/` that hands the
eventual spec a head start.

**Brief**: The deterministic context pack `csdd plan brief` assembles for one run
step — the feat, its refs, decisions, and the step contract.

### Contracts

**Quality Gate**: A `- <label>: <command>` line in a plan's Quality Gates section;
the runner executes every gate after each implementation step.

**Stack Row**: One Decided-table row of `docs/stack.md` — a one-line technology
contract a feat cites as `stack:<name>`.

**ADR**: A decision record under `docs/adr/NNNN-<slug>.md` capturing a
gate-positive decision (hard to reverse, surprising, a real trade-off); a feat
cites it as `adr:<slug>`.
_Avoid_: decision-doc

### Knowledge base

**Steering**: The project-memory documents under `.claude/steering/` (product,
tech, structure) that source facts for the authoring flows.

**Wiki Page**: One concept page under `docs/wiki/pages/<slug>.md`, derived from a
raw source and cross-linked with `[[wikilinks]]`.
_Avoid_: article
Loading
Loading