Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
davidlee avatar

Reconcile

  • 74 installs
  • 1 repo stars
  • Updated August 3, 2026
  • davidlee/doctrine

Sole writer of reconciled truth after an audit: consumes the RV brief and writes changes via direct edits for per-slice artefacts and REV for governance/spec.

About

Consumes the audit's RV ledger and reconciliation brief and writes reconciled changes across two surfaces, direct edits and typed REV revisions, then hands a resolved outcome to close. A developer uses it after /audit resolves the ledger and writes the brief.

  • Two write surfaces: direct edit vs REV revision by finding type
  • Inspects but does not re-audit; new gaps return to audit

Reconcile by the numbers

  • 74 all-time installs (skills.sh)
  • Ranked #127 of 248 Release Management skills by installs in the Skillselion catalog
  • Data as of Aug 4, 2026 (Skillselion catalog sync)
npx skills add https://github.com/davidlee/doctrine --skill reconcile

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs74
repo stars1
Last updatedAugust 3, 2026
Repositorydavidlee/doctrine

What it does

Sole writer of reconciled truth after an audit: consumes the RV brief and writes changes via direct edits for per-slice artefacts and REV for governance/spec.

Files

SKILL.mdMarkdownGitHub ↗

Reconcile

You are the sole explicit writer of reconciled truth — the writer half of the audit → reconcile → close seam (ADR-003 §7; ADR-009 §1). Audit identifies what changed and assembles the reconciliation brief; you consume it, write the changes, and record what was done. Close confirms the outcome before the terminal transition.

You write to two surfaces with different mechanisms (D2):

SurfaceMechanism
Per-slice artefacts (design.md, slice-NNN.md)Direct edit with user agreement
Governance/spec truth (ADRs, specs, requirements, policies, standards)REV kind (doctrine revision) — typed [[change]] rows, approval checkpoint, apply path

Project-local documentation outside .doctrine/ is not a doctrine feature category — edit it directly like any project file, same as per-slice artefacts.

A single reconcile pass may use both surfaces — e.g. update design.md directly and author a REV for an ADR amendment. Where each change lands is driven by the reconciliation brief, not guessed.

No CLI verb surface. doctrine slice reconcile is not built yet (deferred,
ADR-003 §11). You drive existing verbs (doctrine revision *, direct file edits)
as manual discipline — same posture as /audit today.
Inspect, don't re-audit (D9). You inspect target artefacts to validate
applicability, locate edit points, and detect drift since audit — but you do not
perform new issue discovery. If you discover a new gap not in the brief, do not
open a new finding here; hand it back to /audit or raise it with /consult.
The seam stays intact: audit owns discovery, you own the write.

Inputs:

  • the RV ledgerreview-NNN.toml (finding status) + review-NNN.md (the

review markdown, carrying the reconciliation brief)

  • the `## Reconciliation Brief` section within review-NNN.md — the structured

handoff from audit (D3). It maps findings to target artefacts, split into per-slice (direct edit) and governance/spec (REV) items. Its shape:

  ## Reconciliation Brief

  ### Per-slice (direct edit)
  - design.md §3: the eviction model changed … update prose

  ### Governance/spec (REV)
  - ADR-006 §D5: branch-point staleness description is wrong → REV modify
  - REQ-077: cordage scale target verified at 50k nodes → REV status active

The brief lives in a dedicated section, separate from ## Synthesis (the audit's closure story).

Process

1. Read inputs

Read review-NNN.md for the ## Reconciliation Brief section. Read review-NNN.toml for finding status — confirm every finding is terminal (verified / withdrawn / tolerated). A finding still in open / disputed / follow-up is an incomplete audit — stop and hand back to /audit.

Findings stay verified — remediation is recorded separately by you, never by mutating the finding disposition. Record the RV id and the brief items you will act on.

2. No-op gate

If the reconciliation brief is empty — every finding was withdrawn or tolerated with no writes needed — append a ## Reconciliation Outcome section to review-NNN.md confirming the no-op, then hand off to /close:

## Reconciliation Outcome

All findings were withdrawn or tolerated with rationale. No writes needed.
Reconcile pass complete — handoff to /close.

3. Per-slice edits

For each direct-edit item in the brief:

  • Present the proposed edit to the user. Show the exact location, the old text,

and the new text. Get confirmation before writing.

  • Write the edit to design.md and/or slice-NNN.md (if scope changed during

implementation).

  • Record what was edited — and which finding drove it — in a running

reconciliation outcome. You will append this to the RV markdown in step 6.

4. REV authoring

For each governance/spec item in the brief, author a REV change. Multiple governance items may be collated into a single REV per slice by default (one reconcile SL-NNN REV with multiple [[change]] rows), or into separate REVs when items need independent debate (see the split rule below).

4a. Discover or create the REV

If the brief records a REV id, use it:

doctrine revision show REV-N

Otherwise, create one by convention:

doctrine revision new --title "reconcile SL-NNN" --slug reconcile-sl-NNN

The REV starts proposed with no change rows. Transition it to started before adding rows:

doctrine revision status REV-N started
4b. Collision guard

If reconcile-sl-NNN slug already exists, inspect before reuse:

doctrine revision show REV-N
  • If related (same slice, same class of change) → reuse it; append new

[[change]] rows.

  • If unrelated (different slice or intent collided on slug) → create a distinct

slug or ask the user for a decision. Do not silently mix unrelated changes in one REV.

4c. Add [[change]] rows

For each governance/spec item, append a typed row:

doctrine revision change add REV-N --action <action> [--target <T>] [--to-status <S>] [--new-label <L> --member-of <SPEC>] [--primary]

Actions map to intent:

Brief says--actionExtra flags
ADR/Spec prose wrong → amendmodify--target <ADR-N>
Requirement changed statusstatus--target <REQ-N> --to-status <S>
New requirement neededintroduce`--new-label <FR-\
Requirement obsoleteretire--target <REQ-N>
New spec neededcreate--new-label <label> [--member-of <SPEC>]
Requirement moves specmove--target <REQ-N> --member-of <SPEC-N>

modify / retire / create / move / prose rows are surfaced for manual landing at apply time — revision apply auto-lands only status rows.

4d. Record the reconcile narrative

Write the reconciliation rationale into revision-NNN.md — what changed, why, and a link back to the RV finding that drove it. Example:

## Reconcile narrative (SL-080)

- [RV-042 finding F3]: ADR-006 §D5 branch-point staleness description was wrong.
  Updated to match the CAS row semantics from SL-056.
- [RV-042 finding F5]: REQ-077 verified at 50k nodes. Status moved to `active`.
4e. Split rule

If any row is known to require separate debate or will not land in this pass, split it into its own REV before approval/apply. Do not create a half-applied omnibus REV that blocks close because one row is stuck. A REV stays started until all rows land — a stuck row in an omnibus REV blocks the whole slice.

5. Approve & apply

When all [[change]] rows are written and the narrative is complete:

doctrine revision approve REV-N
doctrine revision apply REV-N
  • approve records the orthogonal approval — apply refuses without it

(invoker-blind: a solo dev self-approves; ADR-009).

  • apply auto-lands status rows and surfaces modify / create / introduce /

move / retire / prose rows for manual landing. A pre-flight from-guard aborts the whole apply if any target moved since the change was drafted — if this fires, re-inspect the affected targets and retry.

  • Note which rows were auto-landed and which are surfaced-for-manual.

6. Manual prose landing

For surfaced-for-manual rows, perform the edits by hand under the authored-truth honour model. The REV tells you what to change; you make the actual file edit.

When all surfaced rows are landed:

doctrine revision status REV-N done

Then record the reconciliation outcome on the RV. Append a ## Reconciliation Outcome section to review-NNN.md:

## Reconciliation Outcome

### Direct edits applied
- design.md §3: updated eviction model prose → matches implementation (RV-042 F2)

### REVs completed
- REV-011 (`reconcile-sl-080`): done — ADR-006 §D5 amended, REQ-077 → active
  (covers RV-042 F3, F5). Rationale in revision-011.md.

### Withdrawn / tolerated
- RV-042 F4: tolerated — drift in error message wording; rationale in finding disposition.

7. Escalation gate

If while reconciling you discover that the model itself is inadequate — not mere instance drift, but a design flaw that the change cannot be expressed within — escalate back to design:

doctrine slice status <id> design

This is the ADR-009 §1 back-edge: reconcile → design. Describe the inadequacy in a note (the --note flag), and what the design needs to resolve. Do not improvise a fix that the governing design does not support.

When all items are resolved and the outcome is recorded, hand off to /close.

Outcomes

  • Every governance/spec item from the reconciliation brief is resolved: covered by

a done REV, withdrawn with rationale in the RV, tolerated with rationale in the RV, or escalated to design.

  • Every per-slice direct-edit item is applied to its target file.
  • The RV carries a ## Reconciliation Outcome section recording what was done and

why.

  • Each REV carries a reconciliation narrative in its revision-NNN.md.
  • The slice is ready for /close — every item is resolved; no half-applied REVs

block the close-gate.

Related skills

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.