Add intent reconciliation extension by SuhaibAslam · Pull Request #3848 · github/spec-kit · GitHub
Skip to content
Closed
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
62 changes: 62 additions & 0 deletions docs/reference/agentic-reconciliation.md
6 changes: 6 additions & 0 deletions docs/reference/overview.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,3 +53,9 @@ The `/speckit.*` slash commands that drive the core Spec-Driven Development proc
The bundled **bug** extension adds a three-step bug triage process — assess, fix, and validate — with each bug tracked in its own directory under `.specify/bugs/`. Install it with `specify extension add bug`.

[Agentic Bug Fix reference →](agentic-bugfix.md)

### Agentic Intent Reconciliation

The bundled **reconcile** extension adds mandatory human checkpoints around implementation. It establishes a compact intent artifact, captures implementation-discovered decisions in an append-only ledger, and prevents code from silently redefining the feature. Install it with `specify extension add reconcile`.

[Agentic Intent Reconciliation reference →](agentic-reconciliation.md)
2 changes: 2 additions & 0 deletions docs/toc.yml
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@
href: reference/agentic-sdd.md
- name: Agentic Bug Fix
href: reference/agentic-bugfix.md
- name: Agentic Intent Reconciliation
href: reference/agentic-reconciliation.md
- name: Authentication
href: reference/authentication.md

Expand Down
18 changes: 17 additions & 1 deletion extensions/catalog.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"schema_version": "1.0",
"updated_at": "2026-07-17T00:00:00Z",
"updated_at": "2026-07-29T00:00:00Z",
"catalog_url": "https://raw.githubusercontent.com/github/spec-kit/main/extensions/catalog.json",
"extensions": {
"agent-context": {
Expand Down Expand Up @@ -62,6 +62,22 @@
"workflow",
"core"
]
},
"reconcile": {
"name": "Intent Reconciliation",
"id": "reconcile",
"version": "1.0.0",
"description": "Keep intent, specifications, plans, tests, tasks, and code aligned by capturing implementation-discovered decisions at mandatory human checkpoints",
"author": "spec-kit-core",
"repository": "https://github.com/github/spec-kit",
"bundled": true,
"tags": [
"intent",
"decisions",
"reconciliation",
"drift",
"workflow"
]
}
}
}
81 changes: 81 additions & 0 deletions extensions/reconcile/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
# Intent Reconciliation Extension

The `reconcile` extension adds a human checkpoint around implementation. It keeps the implementation from silently becoming the source of truth when coding reveals a constraint, missing contract, design choice, or change in desired outcome.

It does not replace `spec.md`, and it does not regenerate documents from code. It adds two small artifacts to the active feature:

```text
specs/<feature>/
├── intent.md # Compact, explicitly approved outcome and boundaries
└── decisions.md # Append-only proposals and human resolutions
```

## Installation

```bash
specify extension add reconcile
```

Installation registers two mandatory lifecycle hooks:

```text
reconcile.intent -> implement -> reconcile.decisions
```

Because the extension is opt-in, the core Spec Kit workflow is unchanged until a team chooses to install it.

## Commands

| Command | Purpose |
|---|---|
| `speckit.reconcile.intent` | Runs before implementation. Establishes or confirms `intent.md` and refuses to proceed while the decision ledger contains unresolved proposals. |
| `speckit.reconcile.decisions` | Runs after implementation. Finds implementation-discovered decisions, classifies them, records proposals, and requires a human to accept, reject, or edit each one. |

## The five classifications

Every discovered difference must be classified before anything is changed:

| Classification | Authority | Normal propagation |
|---|---|---|
| `implementation-defect` | Existing approved artifacts | Add corrective implementation work; do not rewrite intent or contracts to excuse the defect. |
| `contract-discovery` | Approved intent | Update the spec and tests after approval. |
| `design-decision` | Approved intent and contract | Update the plan or research rationale after approval. |
| `intent-change` | Human decision only | Update `intent.md` first, then bring downstream artifacts into alignment. |
| `accidental-divergence` | Existing approved artifacts | Reject or reverse an unsupported implementation choice. |

Implementation is evidence in this workflow, not authority. In particular, a passing test does not prove that intent should change, and code is never used to overwrite an artifact without an explicit resolution.

## Append-only decision history

`decisions.md` is an audit log. Existing proposal and resolution records are never edited or deleted. A resolution is appended as a new record that references its proposal:

```markdown
## DEC-0007 — Proposal

- **Observed during**: T031
- **Classification**: design-decision
- **Observation**: The upstream API has no atomic bulk operation.
- **Proposed decision**: Use bounded batches with compensating retries.
- **Evidence**: API contract and failing integration test.
- **Affected artifacts**: plan.md, research.md
- **Status**: proposed

## DEC-0007 — Resolution

- **Decision**: accepted
- **Approved by**: <human-supplied identity>
- **Resolved**: <ISO 8601 timestamp>
- **Edits authorized**: plan.md, research.md
- **Notes**: Accepted for this feature only.
```

An automated or unattended run may record proposals, but it must stop with them unresolved. It may not infer human approval.

## Relationship to convergence

Reconciliation and convergence answer different questions:

- `reconcile` asks what implementation taught the team and which artifact has authority.
- `converge` checks whether the implementation satisfies the resulting spec, plan, and tasks.

Run convergence only after all reconciliation proposals have resolutions.
126 changes: 126 additions & 0 deletions extensions/reconcile/commands/speckit.reconcile.decisions.md
Loading