Skip to content

Appendix C · Glossary

← 18 Personas in practice · Contents · Next: Appendix D Worked example →

Every term the method uses, defined once. Where a term names something the engine enforces, the definition says so — and where it names discipline the engine cannot see, it says that too. The difference is the whole point of the method.


The method

ADD (AI-Driven Development) — a method of building software in which an AI agent writes most of the code and people own direction and verification. The engine records what was decided and what was proven; it never writes the code and never runs the method.

NO-EXEC — the engine's founding constraint: it never runs your suite, your build, or an agent. You run things; the engine records what happened. Every guarantee in ADD is therefore about evidence on disk, never about having watched the work. See 01 Core principles.

Notary — what the engine is, as opposed to an orchestrator: it witnesses and stamps facts (a freeze, a receipt, a verdict) and refuses to stamp ones that do not hold up. It has no opinion about how you work.

Disposable code — the view that code is one regenerable implementation of the direction, not a durable asset to be preserved.

Living document — a document expected to change as the loop learns. The five living specs are the standing example; a frozen contract is the deliberate exception.

Verification capacity — the rate at which a team can confirm AI output is correct. It is the real ceiling on safe speed, and adding more AI does not raise it.

The loop

Beat — one of the three phases of a task: Direction, Build, Verify. A node's current beat is derived from its stamps, not typed into a field: an explicit reopen wins, else a run stamp means verify, else a freeze stamp means build, else direction.

Direction — the first beat: authoring what must hold, what must never happen, the contract, the scope, and the red checks — then freezing it. The human's beat. See 03 Direction.

Build — the second beat, and the only one the AI leads: turn the red checks green without editing a check, the frozen contract, or anything outside scope:. See 04 Build.

Verify — the third beat: record a receipt, examine the residue tests cannot cover, and record exactly one verdict. See 05 Verify.

Freeze — the single human decision of a task, which stamps the direction and opens Build (add freeze <slug>). Freezing stamps; it does not itself bind the checks — that binding is enforced at the gate.

Gate — the checkpoint that records a task's one verdict (add gate <slug> …). A PASS closes the node.

PASS — the verdict meaning the work is proven by a fresh, bound receipt.

RISK-ACCEPTED — the verdict meaning the work proceeds with a written reason (--reason). Unavailable on a security-floored node.

HARD-STOP — the verdict meaning work cannot proceed. Where a security finding goes.

The bundle

ABF-1 — the bundle format ADD 3.0 is built on: typed markdown nodes with YAML frontmatter, plus a compiled graph. See 12 The .add/ bundle.

Bundle (.add/) — everything the method keeps on disk for one repository: the nodes, the five living specs, the personas, the vendored engine under .add/tooling/, and the compiled graph.json. One repo, one bundle.

Node — one typed markdown file that is the unit of everything: a Task, a Milestone, a Spec, a Persona, a Run, or the Project. Its frontmatter carries the machine-readable facts; its sections carry the human-readable ones.

Lifecycle node — a node that moves through the beats and can be gated: a Task or a Milestone. Specs and Personas are living documents with no lifecycle.

graph.json — the compiled cache of every derivable fact, rebuilt from the node frontmatter at any time and gitignored. Because it is rendered rather than hand-maintained, it cannot go stale and has no concurrent writers — which is what lets a wave fan out across worktrees with no coordinator.

The five living specsdomain, system, experience, quality, and method in .add/specs/. The project-level foundation every task freezes against, and where confirmed lessons land. See 14 The foundation.

Inside a task node

## CARD — the goal, why the task exists, and the current beat with its next verb.

## RULES — what must hold and what must never happen: <must> entries (M1, M2, …) and <reject> entries (R:NAME), each an independently checkable claim.

## PLAN — the contract this task publishes, its build strategy, its scope:, and its assumptions, ordered lowest-confidence first.

## EDGES — enumerated edge cases (E1, E2, …): boundary and failure conditions that must be covered like rules. Inert until authored, so a fresh task gates unchanged.

## CHECKS — the red suite: one check per rule and per edge, each naming what it covers:.

## EVIDENCE — the recorded receipt and the recorded verdict.

## LESSONS — what the task taught, on its way to add learn.

Must / Reject — the two rule kinds. A Must is behavior that has to hold (M1); a Reject is behavior that must never happen, carrying its own error name (R:OVERDRAW … -> "insufficient_funds").

Edge case — a boundary or failure condition written down as E1, E2, … Edge cases are first-class covers referents: an authored edge with no check bound to it blocks the gate exactly as an uncovered rule does.

covers: — the binding between a check and the rule or edge it proves. It is the single grammar that makes "every rule is tested" mechanical rather than aspirational.

Referent — anything a check may covers: — a Must, a Reject, or an Edge.

scope: — the files or directories a task may touch, declared on the node. It is also the freshness set: the paths the gate hashes a receipt against.

gives: — the contract shape a task publishes. Hand-authored into frontmatter, and immutable once the task freezes.

needs: — a citation of another node's frozen gives:. It cannot resolve until the producer has frozen, which is how a consumer is held behind its producer.

depends_on: — an edge to a node this one depends on, written in block-list form. The DAG add wave reads.

Contract — the fixed external shape a task publishes: interfaces, data structures, names, and error cases. In ABF-1 it is not a separate file type — it is the gives:, frozen at the freeze stamp.

Change request — the path for altering already-frozen scope: return the affected node to Direction and refreeze, so dependents citing the old shape are flagged stale. Never fork the truth into a parallel node.

Evidence

Receipt — the recorded result of a run (add run <slug> -- <cmd>): what command ran, its exit code, and which checks were observed. The engine records it; it does not produce it.

Fresh — a receipt is fresh when every file in the task's scope: is byte-identical to what it was at the run. Edit a scoped file afterwards and the gate refuses.

Bound — a receipt is bound when every check the rules covers: appears in it as passed. Unbound evidence is not evidence of the thing you are signing for.

Red-first — the rule that every check must fail before any implementation exists.

Lying red — a check that fails for the wrong reason — an import error, a broken fixture, a should_panic that would pass on anything. It looks like a baseline and proves nothing.

Residue — the three things automated checks cannot cover, examined by hand at every verify: security, concurrency and timing, and architecture conformance. See 05 Verify.

Deep check — reviewer discipline no engine can perform for you: tracing that every new symbol is wired in from a production entry point, that no dead code was introduced, and — for prose — that a semantic read actually happened.

Authority and routing

sensitivity: — what a task touches, and therefore the floor on who must sign: mechanical → process, data → plan, architecture → plan, security → human. It cannot be talked down.

Authority floor — the computed lowest lane a task may run in: the higher of its declared sensitivity: and any match against sensitive_paths:. You may always run more ceremony than the floor demands, never less.

sensitive_paths: — glob patterns in .add/index.md naming paths that floor to a human regardless of what a task declares about itself. A task scoped to a matching path is security-floored even with no sensitivity: line.

Security floor — the two refusals that make "security is a HARD-STOP" structural rather than advisory: a security-floored node cannot record RISK-ACCEPTED (R:SECURITYFOLD), and its PASS requires a named lens (R:NOCOVERAGE).

Depth dialquick · standard · deep: how much ceremony a single task carries. Depth tunes ceremony, never authority — a quick depth can never lower a security floor.

Lane — the cheapest route that fits a request, chosen before any node exists: Quick (below the scope floor — no node, just the diff and a lesson), Task (one atomic node), or Project / milestone (a theme or a slice). The AI proposes; the human vetoes. Anything touching security, data, or architecture always sizes up to at least a Task. See 07 Setup and the three lanes.

Personas

Persona — a requirements lens the agent adopts, stored as a versioned node in .add/personas/ and distilled to machine-readable parts: an Identity (the stance), Critical Rules (the non-negotiables), and Success Metrics (the done-bar), plus a use-when: line that says when to route to it. Advisory in judgment, but its presence is enforced: a security PASS needs one.

Personas teacher — the vendored corpus at .add/personas-teacher/, the library a project persona is distilled from. Read off-build; never a runtime dependency.

Lens — a persona as applied to a piece of work. "A named lens" is the thing R:NOCOVERAGE requires: someone on record as having reviewed it.

persona: — the lens stamped on a node by a wave, when a stream is assigned one.

advised_by: — the lens recorded on a node routed sequentially with add advise <slug> --persona <p>, and the provenance add join carries back from a lensed stream onto the delivered node.

use-when: — the routing line on a Persona node saying what kind of work it is for. Rendered into the personas index, so a lens is discoverable rather than folklore.

Parallel work

Wave — a parallel execution plan derived from the task DAG (add wave <milestone>): topological levels, so producers land before their consumers. It refuses a cycle, an intra-level dependency, or overlapping scope rather than scheduling a conflict.

Stream — one task within a wave, running in its own git worktree, behind its own frozen contract and under its own persona lens.

Join — folding finished stream bundles back (add join <bundles…>): PASS-only, byte-for-byte on nodes, union-merging spec deltas, flagging divergence rather than silently keeping one side. Rollback is dropping a worktree.

Worktree — the isolated checkout a stream runs in. Isolation is what makes parallel builds safe; graph.json being a rebuildable cache is what makes it cheap.

The loop closing

Lesson — one thing a loop learned, filed with add learn <lens> "<lesson>" --evidence <ref> against one of the five lenses (ddd · sdd · udd · tdd · add). A lesson without evidence is refused.

Delta — a recorded, not-yet-consolidated change to a living spec. add deltas lists them.

Fold — the consolidation step (add fold) where confirmed lessons are written into the living specs. The AI never self-approves a fold.

Reopen — returning a closed task to the loop (add reopen <slug>) rather than opening a near-duplicate beside it.

Exit criteria — the checkboxes on a Milestone's ## EXIT that define what "done" means for it. add milestone-done refuses to close a milestone while any box is unchecked — the goal-loop that keeps a milestone open until it is actually met.

Milestone archiveadd milestone-archive, which moves a closed milestone and its tasks out of the working set without deleting the record.

Reading the bundle

add status — the resume point: what exists, what beat each lifecycle node is on, and the single next verb. Never re-read the repo to find out where you are.

add todo — the open worklist, grouped by beat, each task with its next verb.

add locate <path> — the scope reverse lookup: which node's scope: owns this path.

add brief <slug> — the assembled context for working a node: the binding decisions from the living specs plus the node itself.

add doctor — the read-only health report. It reports and never writes; add doctor --sync is the separate verb that re-vendors a stale engine.

Finding — one item add doctor reports, at info or warn. A finding is a nudge, not a refusal — the gate is where refusals live.

Refusal — the engine declining to record something that would not hold up, named by a code (R:GREENLIE, R:SECURITYFOLD, R:NOCOVERAGE, R:OVERLAP, …). A refusal writes nothing and tells you the verb that would fix it.