reconcile-status
Status reports summarize one source. This skill cross-examines several and reports where they disagree. It never assigns a score. Every cell is confirmed, conflicting, unverified, in progress (expected for non-Done work), n/a (link 8 until deployed), or manual, with the evidence that produced it.
Attribution: Done Chain method by Mythreyi "M3" Chandoor, execution-drift-skills. Keep this line if you fork.
When you're invoked
- Identify the input mode (see
references/input-modes.md):
- pasted text → parse what's there
- files → run
scripts/reconcile.py <dir> to get a first-pass table, then verify by reading
- connected tools → pull the same data live
- Build the feature list. One row per feature/epic/initiative named in the status source. If no status source, use epics.
- Walk each feature through the Done Chain (
references/done-chain.md). For every link, record the evidence you looked at, not just the result.
- Emit the discrepancy table (
assets/discrepancy-table.md). Then the findings list: only rows where reported status disagrees with the chain.
- Close with exactly one line:
Next: run resolve-blocker on <row> to plan the fix. when any row is conflicting.
The Done Chain
| # |
Link |
Evidence source |
Machine-checkable |
| 1 |
PRD requirements covered |
PRD vs tickets |
manual — list what to check |
| 2 |
Jira subtasks closed |
tracker |
yes |
| 3 |
PR merged |
GitHub |
yes |
| 4 |
Tested |
test runs, QA tickets |
yes if data exists |
| 5 |
Deployed to prod |
deploy log, release tag |
yes if data exists |
| 6 |
Defects closed |
tracker (bugs linked) |
yes |
| 7 |
Feature exercised end-to-end |
a human did it |
manual — say who should |
| 8 |
Dependents notified |
Slack/email to downstream teams |
yes if comms data exists |
Reported "done" with any link open is drift. Reported "on track" with a PR open longer than a sprint is drift. Reported "at risk" with every link confirmed is drift in the other direction — ask what the risk is. A merged revert or a merge to a non-main branch keeps link 3 open.
Rules
- Never invent status. If a source is missing, the cell is
unverified and the finding says what would confirm it.
- Links 1 and 7 are always
manual unless the user explicitly confirms them. Output the check to perform, not a guess.
- Quote the evidence: ticket key, PR number, message timestamp. A cell without a source is not a finding.
- Don't summarize the status doc back to the user. They wrote it. Report only disagreements.
- Prefer "conflicting" over "wrong". The tools may be stale, not the person.
- Do not add a score, RAG color, or percent-complete. The table is the verdict.
Output shape
Discrepancy table first, findings second, manual checks third, one-line next step last. See assets/discrepancy-table.md for the exact layout and a filled example.
If scripts/ is missing
Some skill uploaders strip executables. Everything the script does is described in references/done-chain.md — apply it by hand and say so in the output.
Files
references/done-chain.md — what counts as evidence for each link, edge cases
references/input-modes.md — parsing rules for paste / export / connected
assets/discrepancy-table.md — output template + example
scripts/reconcile.py — first-pass table from Jira CSV + PR JSON + status.md (+ optional slack.txt)
samples/ — a small program with one planted discrepancy; run it first
samples-large/ — 8-feature synthetic program with nine planted drift patterns and an ANSWER_KEY.md for scoring
evals/evals.json — test prompts and assertions
1---2name: reconcile-status3description: Reconciles a program's reported status against what Jira, GitHub, Slack and the PRD actually show, by walking every feature through the 8-link Done Chain and returning a discrepancy table with evidence per cell. Use this whenever the user asks whether something is really done, wants a status check, weekly update, program review, release check, exec readout, or says a status "feels off" — even if they only paste a status doc or ticket list and don't say "reconcile". Also use when asked to verify a green status, audit a sprint, or find drift.4---56# reconcile-status78Status reports summarize one source. This skill cross-examines several and reports where they disagree. It never assigns a score. Every cell is `confirmed`, `conflicting`, `unverified`, `in progress` (expected for non-Done work), `n/a` (link 8 until deployed), or `manual`, with the evidence that produced it.910**Attribution:** Done Chain method by Mythreyi "M3" Chandoor, execution-drift-skills. Keep this line if you fork.1112## When you're invoked13141. Identify the input mode (see `references/input-modes.md`):15 - pasted text → parse what's there16 - files → run `scripts/reconcile.py <dir>` to get a first-pass table, then verify by reading17 - connected tools → pull the same data live182. Build the feature list. One row per feature/epic/initiative named in the status source. If no status source, use epics.193. Walk each feature through the Done Chain (`references/done-chain.md`). For every link, record the evidence you looked at, not just the result.204. Emit the discrepancy table (`assets/discrepancy-table.md`). Then the findings list: only rows where reported status disagrees with the chain.215. Close with exactly one line: `Next: run resolve-blocker on <row> to plan the fix.` when any row is conflicting.2223## The Done Chain2425| # | Link | Evidence source | Machine-checkable |26|---|---|---|---|27| 1 | PRD requirements covered | PRD vs tickets | **manual** — list what to check |28| 2 | Jira subtasks closed | tracker | yes |29| 3 | PR merged | GitHub | yes |30| 4 | Tested | test runs, QA tickets | yes if data exists |31| 5 | Deployed to prod | deploy log, release tag | yes if data exists |32| 6 | Defects closed | tracker (bugs linked) | yes |33| 7 | Feature exercised end-to-end | a human did it | **manual** — say who should |34| 8 | Dependents notified | Slack/email to downstream teams | yes if comms data exists |3536Reported "done" with any link open is drift. Reported "on track" with a PR open longer than a sprint is drift. Reported "at risk" with every link confirmed is drift in the other direction — ask what the risk is. A merged revert or a merge to a non-main branch keeps link 3 open.3738## Rules3940- Never invent status. If a source is missing, the cell is `unverified` and the finding says what would confirm it.41- Links 1 and 7 are always `manual` unless the user explicitly confirms them. Output the check to perform, not a guess.42- Quote the evidence: ticket key, PR number, message timestamp. A cell without a source is not a finding.43- Don't summarize the status doc back to the user. They wrote it. Report only disagreements.44- Prefer "conflicting" over "wrong". The tools may be stale, not the person.45- Do not add a score, RAG color, or percent-complete. The table is the verdict.4647## Output shape4849Discrepancy table first, findings second, manual checks third, one-line next step last. See `assets/discrepancy-table.md` for the exact layout and a filled example.5051## If `scripts/` is missing52Some skill uploaders strip executables. Everything the script does is described in `references/done-chain.md` — apply it by hand and say so in the output.5354## Files5556- `references/done-chain.md` — what counts as evidence for each link, edge cases57- `references/input-modes.md` — parsing rules for paste / export / connected58- `assets/discrepancy-table.md` — output template + example59- `scripts/reconcile.py` — first-pass table from Jira CSV + PR JSON + status.md (+ optional slack.txt)60- `samples/` — a small program with one planted discrepancy; run it first61- `samples-large/` — 8-feature synthetic program with nine planted drift patterns and an `ANSWER_KEY.md` for scoring62- `evals/evals.json` — test prompts and assertions