Observed since 20 Oct, 18:04 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
ACDD — Agentic Contract-Driven Development
ACDD means Agentic Contract-Driven Development. It turns an intended change into a bounded architecture contract, checks that contract against the live system, implements only the approved scope, and closes with current executable evidence. It connects existing tests, release processes, issue trackers, and review tools through profiles and repository adapters.
flowchart LR
design[design/v1]
contract[contract/v1]
build[build/v1]
review[review/v1]
handoff[handoff/v1]
design --> contract --> build --> review --> handoff
ACDD provides a task-delivery profile and a smaller planning profile. This guide focuses task delivery: one Markdown task document, one profile, physical evidence artifacts, and a validator. It is not a scheduler, review runtime, or agent orchestrator.
Gates run in order. A gate may finalize or validate as terminal only when every earlier gate is already pass or inapplicable.
The gates form one evidence chain: decide what is safe to change, freeze the
required behavior and proof obligations (including LLM contract-verify),
implement with TDD (preferably one subagent per subtask), challenge the settled
change in Code review, then close with current evidence.
Define the intended outcome, architecture boundary, and a bounded plan before implementation begins.
Turn the approved design and its subtasks into a stable behavior and proof contract. Finalizing this gate creates one append-only source-contract bundle. Each current subtask has a checksummed part and matching binding, so changing a part and recomputing only its self-hash is rejected during Build.
Order inside the gate:
executable_proof.argv as
an entrypoint to a real test file (not inline python -c / pasted bodies).
Expected failure fixes the acceptance boundary; tests must cover the frozen
contract, not trivia.contract-verify adapter
(completeness, chain-coverage, proof-strength, parallel-safety). Pass only
with permission and no open corrections. On pass, the verifier states which
subtasks may run in parallel and directs the delivery agent to launch a
separate subagent per ready subtask (respecting dependsOn / supersedes).
This is not Code review (review/v1).A subtask is one bounded change slice, not a to-do item. Its writes and reads
name either a declared Input or a path inside a declared directory Input. That
lets several subtasks share src without repeating it, while each still names
the files it changes. Its acceptance describes an observable result, and
dependsOn makes execution order explicit. IDs are unique, dependencies are
acyclic, and conflicting reads/writes must be serialized.
Until contract/v1 is finalized, edit the same Plan subtask after verify
feedback, then re-verify. Propose an extra subtask when the surface is too
large; do not invent *-r2 / full-scope clones alone. After finalize, only
addition or replacement via acdd contract-subtask (+ re-verify for authority
digest). Successful acdd validate (and Contract finalize) print a non-fatal
ACDD FREEZE banner while Contract stays pass.
At the end of Contract, every existing subtask receives an immutable part and a matching binding in one source-contract bundle. A part captures its scope, acceptance, dependencies, replacement link, and its own hash; its binding repeats that hash under the part ID. Changing a part and recomputing only its self-hash is still rejected because its existing binding no longer matches. A later subtask is always new work, never an edit to an old part:
dependsOn. Register with
acdd contract-subtask. If Contract has contract-verify, re-verify so the
new authority digest matches before validation stays green.supersedes (predecessor stays immutable). Overlapping
writes or a *repair* / *fix* / *amend* id also classify as replacement
work: still acdd contract-subtask, never edit a frozen part and never
acdd reopen. Re-verify for the new authority digest. Shrinking the active
write union requires --allow-scope-reduction after an explicit product decision.acdd record on Build requires --changed and/or a git
worktree; dirty paths must stay inside active subtask writes.contract/v1 pass (tests may change for RED proof).Source contracts are verification records, not subtask gates. An addition or replacement does not stale Build/Review/Handoff by itself.
Build carries the frozen Contract into source code. Every approved subtask has a small TDD loop around the behavior it changes. A focused automated test comes from that subtask's acceptance and forbidden effects, and runs before its production change. Red means that the real functional outcome is absent or wrong—not that setup, imports, mocks, or an unrelated assertion failed. The smallest change then makes that same test Green. A passing test for one subtask never proves another subtask's acceptance.
Challenge the settled change across the task profile's parity, security, and
code dimensions (review/v1). The planning profile instead checks its settled
set for completeness and consistency. This is not contract-verify.
Close the repository-specific work only after all prior evidence is current and terminal.
The planning profile creates or improves a bounded planning set. It never implements source changes.
| Gate | Checks | Purpose |
|---|---|---|
| Design | design-basis, plan-shape | Freeze the planning outcome, boundaries, Inputs, and bounded Plan. May be inapplicable only as plan.no-artifact. |
| Decompose | decomposition, matrix, contract-verify | Make the planning set coherent and bounded, then LLM-verify before finalize. |
| Code review | independent-review | Challenge the settled set for completeness and consistency (review/v1). |
Use the Plan and Review adapters described below. See the plan example.
AGENTS.md routes one active gate to one gate skill under skills/.
Load only that check section. Build additionally loads the shared
TDD procedure; Diagnose is a
pre-gate helper for a defect or accepted finding, then work returns to its gate.
An adapter may add repository context with promptAppend on a check binding:
gates:
build/v1:
checks:
runtime-and-integration:
cwd: .
argv: [uv, run, pytest, -q]
timeoutSeconds: 900
promptAppend: prompts/build-runtime.md
The fragment path is relative to the adapter (conventionally under
.acdd/prompts/), must stay below its directory, and its SHA-256 enters the
gate fingerprint. For command and basis checks, cwd stays below the workspace
root and timeoutSeconds (default 300) bounds the command. A review host instead
combines the base review skill and fragment, then expands its launch template.
The core does not compose prompts, choose models, or replace ownership, check
requirements, evidence kind, terminal policy, or an invariant.
Evidence artifacts land in the adapter's artifacts directory (.acdd/artifacts/
in a consuming repository). Successful check artifacts are immutable, gitignored
runtime artifacts, required across sessions while the task is active, and
prunable after the handoff gate closes — the committed document keeps every
evidence block with its SHA-256 as provenance. The Contract source bundle is
append-only instead: later subtasks add a hashed part and its binding without
rewriting earlier rows, Contract evidence, or the Contract receipt. A failed
record may leave an orphan JSONL; retrying the same --id overwrites it when
that id is not yet in the document.
pip install acdd
# or from this repository:
pip install .
# editable:
uv sync --group dev
Bundled profiles, skills, adapters, examples, and scripts/markdown_gate_check.py
ship inside the package under acdd/share/. After install you can pass a profile
alias (task, plan, acdd/task/v1, acdd/plan/v1) instead of a file path.
| Path | Role |
|---|---|
src/acdd/ | Import package (CLI, validator, paths) |
adapters/, profiles/, skills/, examples/ | Share trees at the repo root (editable installs resolve them here) |
scripts/markdown_gate_check.py | Bundled gate helper (also under share when installed) |
scripts/hooks/ | Local CI / git hooks (not installed into the wheel) |
Packaging uses Hatchling. The sdist keeps the root share layout; the wheel
maps those trees into acdd/share/ so both checkout installs and
sdist→wheel builds resolve the same resources.
Adapters load from the discovery scope below (not a recursive walk of every
.acdd/ under the workspace). Every adapter YAML with
apiVersion: acdd/adapter/v1 directly inside a selected .acdd/ root is
considered. An adapter with no gate in the active profile is ignored; one that
declares an active gate is indexed by role and checked strictly, including
unknown bindings. Symlinked adapter files are ignored. --adapter role=path
overrides a discovered entry and must also resolve below the workspace root.
# Single-repo: put adapters under .acdd/ at the workspace root.
# Profile may be a path or a bundled alias (task / plan).
uv run acdd validate task.md task
uv run acdd fingerprint task.md task --gate build/v1
uv run acdd record task.md task \
--gate build/v1 --check runtime-and-integration --id build.runtime
# Basis evidence needs classified coverage for every input selected by its gate.
uv run acdd record task.md task \
--gate design/v1 --check design-basis --id design.basis \
--classified-ref docs/design.md=task
uv run acdd finalize task.md task --gate build/v1 --id build.bundle
uv run acdd contract-subtask task.md task --workspace-root . \
--subtask newly-discovered-slice --id contract.newly-discovered-slice
# Replacement (supersedes predecessor): append, do not reopen.
uv run acdd contract-subtask task.md task --workspace-root . \
--subtask replacement-slice --id contract.replacement-slice
uv run acdd review task.md task \
--gate review/v1 --check independent-review --id review.independent \
--transcript .acdd/artifacts/review.jsonl \
--author-uuid <AUTHOR_UUID> --reviewer-uuid <REVIEWER_UUID>
# Only where the selected profile permits it.
uv run acdd finalize task.md task --gate build/v1 \
--id build.inapplicable --status inapplicable \
--reason-code build.no-runnable-source
acdd review registers an existing adapter-bound transcript relative to
--workspace-root. It validates raw-response preservation, confirmation
acknowledgement, scope, required dimensions, pass terminal, and UUID values. It
does not launch reviewers, choose models, or authenticate identity; the
consuming workflow owns those guarantees. See DESIGN.md; planned work in ROADMAP.md for the
host contract and review-host boundary.
Adapters are YAML files under .acdd/ with apiVersion: acdd/adapter/v1.
Discovery scope (from the document path under --workspace-root):
.acdd/ at the workspace root.projects/<name>/ with a local
.acdd/ uses only that project.projects/<name>/ without .acdd/
means ACDD is not used for that document..acdd/,
discovery may load those package roots instead of walking the tree. Details
are in DESIGN.md.Task delivery needs roles task, contract-verify, implementation, and review.
Planning needs plan, contract-verify, and review. A Review or contract-verify
binding is a host launch template; register the finished transcript with
acdd review. Handoff records repository-handoff; finalize writes the process
report onto that gate's bundle.
Mirror of .github/workflows/ci.yml (test job + package build/twine):
./scripts/hooks/run-ci-gate.sh
ln -sf ../../scripts/hooks/pre-push .git/hooks/pre-push # once per clone
Download counts and popularity will appear here as the collector receives them.
| Version | Published | Direct dependencies | Open version |
|---|---|---|---|
| 0.4.4 | 5 Aug 2026 | 1 |
This describes our collected data; it is not a security assessment.
Observed since 20 Oct, 18:04 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package:775b3fec77b11d4f2280dab9f0e1e6098b627edfac43265170eb1a6b9f549c47