agentsclimarketplace

Reconcile

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

bathe your agents in engineering rigour and flames

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.

One thing 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.

What its author says it does

Copied from the file, not written here

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.

SKILL.md

10.1 KB, 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 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 "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.

Keep looking

Skills are one crate of 328,083. 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.