agentsclimarketplace

Reconcile

Skill davidlee/doctrine/plugins/doctrine/skills/reconcile

Use after /audit resolved the RV ledger and wrote the reconciliation brief — you are the sole explicit writer of reconciled truth. Consume the RV + brief, write changes through two surfaces (direct edit for per-slice artefacts, REV for governance/spec), and hand off a resolved outcome to /close. Routed to from /audit.From its SKILL.md

Install
npx -y skills add davidlee/doctrine --skill reconcile

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

2 things to look at

  • 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
  • runs commandsInstructs the agent to run 8 commands, including `doctrine revision show REV-N` and 7 more.

SKILL.md

10.1 KB, ~2.6k tokens by cl100k_base, as published. Nobody here has run it

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.

A brief item can name a surface you don't write. plan.toml criteria (EN-/EX-/VT-, PHASE-NN) are immutable-append (boot rule) — not a reconcile surface. If a brief item asks you to edit a plan criterion, do not; hand it back to /audit or /consult as a design/plan escalation. And a conformance / "spurious undelivered" item is fixed by the selector registry (doctrine slice selector rm/add) — the load-bearing verb — not by a design.md §6 prose edit alone (§6 is only the mirror; slice conformance reads the registry in slice-NNN.toml). Edit prose only, and conformance stays red.

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 ledger — review-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 "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-|NF-NNN> --member-of <SPEC-N>
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.

What ships with it

Read from the repository

Just SKILL.md. No reference files, no scripts.

Keep looking

Skills are one crate of 325,949. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.