Reconcile
Claude Code plugins for spec-first development: every agent claim cites a source, every code change traces to a requirement, and ceremony scales to the weight of the task.
npx -y skills add NVZver/claude-marketplace --skill reconcileAssembled 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
Verify the implementer's diff against the spec (after delegation) — does it work, only what's needed, and all of the plan — then absorb drift. Output — conformance.md + PASS, or a drift report + updated spec.
SKILL.md
9.6 KB, as published. Nobody here has run it
Trace. On load, print first:
=============== [lsa/skills/reconcile/SKILL.md] [lsa] ===============
LSA Reconcile (after — correctness)
See CORE.md §6 (the two checks). This is the after check; verify is the before check.
Role
Result verifier + spec maintainer.
Goal
Confirm the returned diff satisfies the spec; where reality diverged, the spec absorbs it.
Inputs
| Input | Source |
|---|---|
| The implementer's diff | delegate |
The spec + <flow>.feature files | specify |
| Quality-gate checks (required input) | .lsa.yaml gate: — see knowledge/quality-gate-contract.md. No gate: block → report the gate status NOT-RUNNABLE explicitly (Step 1); never silently skip. |
| Scenario-run count N | .lsa.yaml reconcile.runs — default 3 when the key (or the file) is absent |
Steps
Three questions — does · only · all:
- Does it work — run each Gherkin scenario against the diff N times, where N =
.lsa.yamlreconcile.runs, default 3 when the key is absent (agents are stochastic); pass = succeeds on ≥95% of runs. At the default N = 3, ≥95% means all 3 runs pass (3/3); a 2/3 scenario fails. Whenreconcile.runsraises N for a high-stakes epic, pass stays ≥95% of runs (e.g. N = 20 → at least 19 passing). Then run the.lsa.yamlgate:block — required input, not an optional extra: run each configured check and cite its command + exit/output as the proof (the Rule 7 gate artifact). Run the block in one pass where the repo provides an aggregate runner (this repo:bash scripts/gate.sh, which reads thegate:block and prints each check's command + exit), and cite its consolidated output; absent a runner, run each configured command. If the repo has nogate:block, report the gate status explicitly asgate: NOT-RUNNABLE — no gate: block in .lsa.yamlinconformance.mdand alongside the verdict — never silently skip the gate step. (→ scenario results + per-check gate results, or an explicitNOT-RUNNABLEgate status) - Only what's needed — every changed hunk traces to a requirement; an untraced hunk is over-delivery. Prove it by reading the Step-4 coverage table in reverse: every diff hunk appears in at least one requirement row; an orphan hunk (in the diff, in no row) is drift. (→ scope check)
- All of the plan — every requirement (F1…, including non-scenario ones) maps to a change in the diff or a covering test; an uncovered requirement is under-delivery. Prove it with the Step-4 coverage table: a requirement row with no implementing hunk and no covering test is a failing row. (→ completeness check)
- First run
bash scripts/coverage-skeleton.sh <feature-dir>to get the enumerated skeleton — it lists every requirement ID as a table row and every changed file as a candidate hunk (spec files under<feature-dir>excluded), the two deterministic axes computed once so you cite them instead of re-enumerating by hand (enumeration is scripted; the does·only·all judgment stays yours —.lsa/VISION.md:67§2 principle 10). Then fill only the semantic mapping column (which hunk satisfies which requirement) and read off orphans / uncovered from the filled table. Writeconformance.mdaround the requirement ↔ hunk coverage table — one row per requirement ID (F1…Fn fromrequirements.md) with four columns: requirement · the diff hunks/files that implement it · the scenario runs that prove it (e.g.3/3) · a per-row verdict. Below the table, write the orphan-hunk line in the canonical, machine-readable form — exactly one line, at column 0, eitherOrphan hunks: none.orOrphan hunks: <integer>(a prose heading such as## Orphan hunks (over-delivery vs …)does NOT satisfy this contract), optionally followed by a prose breakdown on subsequent lines — then the gate results (or the explicitNOT-RUNNABLEstatus, per Step 1). The judge cites this table — the only and all verdicts are read off it, not asserted in prose. Pass → done. Any check fails or the code diverged → present the drift (percore/outputRule 7 Delivery test — never only in a subagent transcript or pre-tool-call text), take approval, and edit the spec in place to match reality. (→ verdict + conformance.md + any spec update) - Metrics emit step — PASS verdicts only. When Step 4 reaches a
reconcile: PASS @ <sha>verdict, runbash scripts/metrics-harvest.sh <feature-dir>/conformance.md, quote its four-line output as the cited source, and append one row to.lsa/metrics.mdusing its existing six-column schema (feature · archived · accuracy (M/N) · Citation resolve-rate (M/N) · only-required-changes (M/N) · notes) — the harvest script'saccuracy-to-taskmaps toaccuracy,citation-resolve-ratetoCitation resolve-rate,only-required-changestoonly-required-changes. On a FAIL verdict, append no row. This step is descriptive only: it never changes the PASS/FAIL verdict, the gate threshold, orreconcile.runssemantics; a non-zero exit or anUNPARSEABLEline frommetrics-harvest.shis recorded verbatim in the row'snotescolumn and never turns a PASS into a FAIL.
One exception, and it is a format rule, not a metric rule. If only-required-changes comes back UNPARSEABLE (non-canonical orphan-hunk line), that is not a measurement failure — it is proof that the conformance.md you just wrote violates Step 4's output contract. Fix the orphan line to the canonical column-0 form and re-run the harvest before appending the row. The verdict is untouched either way; you are repairing your own artifact, not letting a metric gate a grade. Lint C19 enforces the same contract on every post-contract conformance.md, so a file that skips this fails the gate on the next run regardless.
Harvest with no diff-range argument while the cycle is still uncommitted — that is the live path the default range is correct for. Once the cycle is committed, pass its explicit range (<base>..<sha>); with no range, a committed cycle reports UNPARSEABLE (committed cycle, no explicit diff range given) rather than a ratio computed from unrelated later work. (→ .lsa/metrics.md row, or none on FAIL)
Output
conformance.md — its core is the requirement ↔ hunk coverage table (one row per requirement ID: requirement · implementing diff hunks/files · proving scenario runs · verdict), followed by the canonical orphan-hunk line (Orphan hunks: none. or Orphan hunks: <integer> — see Step 4; empty count on PASS) and the per-check gate results (or an explicit gate: NOT-RUNNABLE — no gate: block in .lsa.yaml status) — + a verdict line reconcile: PASS @ <graded-sha> — emitted as a distinct gate artifact in a context the implementer cannot author (see Constraints, Independence must be observable) — or a drift report + the spec updated to reality. On PASS, Step 5 additionally runs scripts/metrics-harvest.sh against that conformance.md and appends one row to .lsa/metrics.md, citing the script's output as the source.
Coverage-table shape (synthetic):
| Req | Implementing hunks/files | Proving runs | Verdict |
|---|---|---|---|
| F1 | `src/status.ts` (new command) | `status.feature` Scenario 1 — 3/3 | ✅ |
| F2 | `README.md` §Usage | — (doc requirement, no scenario) | ✅ |
Orphan hunks: none.
Gate: lint ✓ (exit 0) · test ✓ (exit 0) — or — gate: NOT-RUNNABLE — no gate: block in .lsa.yaml
Constraints
- Run N times (N and the pass threshold per Step 1), never once. Check does · only · all — a passing-but-incomplete diff is not done. The spec absorbs reality — never revert the code, never silently accept a failing or uncovered scenario. Never silently skip the gate step — no
gate:block means an explicitNOT-RUNNABLEgate status, not an omitted one. - Independent grader. reconcile is the grader the work cannot edit: run it in a context with no write access to the tests, acceptance
.featurescenarios, or quality-gate config (.lsa.yamlgate:) it grades; the implementer's diff never includes an edit to its own grader. (Reward-hacking defense —knowledge/quality-gate-contract.md§"Independence rule".) - Never routed down. reconcile is a floored model-routing surface (
lsa:reconcile) — it always resolvesinherit, never a lower tier, even if.lsa.yamlrouting:names one; grader quality is the safety floor of the whole system. Per../../knowledge/model-routing.md. - Independence must be observable, not asserted. The verdict (
conformance.md+reconcile: PASS|FAIL @ <graded-sha>, naming the SHA it graded) is authored in a separate context from the implementer and emitted in a commit separate from the implementation commit (or, where a single commit is unavoidable, as a record whose authoring context is provably not the implementer's); a run where reconcile is folded inline into the implementation commit fails this rule. Full rationale + the observed TripAnchor-1 failure:knowledge/quality-gate-contract.md§"Independence rule".
/lsa:reconcile — manual invocation. Also surfaced by the SessionStart drift hook.