Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# ai-doc-audit-version-reconcile — DONE
- Final PR: #423
- Closed: 2026-06-05
- Summary: closed via #423 — ai-doc-audit-version-reconcile: re-audit branches by audit's own criteria, take best
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# aif-handoff-as-runtime-bridge — DONE
- Final PR: #283
- Closed: 2026-05-29
- Summary: closed via #283 — docs(wave-plan): close aif-handoff-as-runtime-bridge umbrella row to DONE
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# aif-skills-delivery-rphase — DONE
- Final PR: #396
- Closed: 2026-06-03
- Summary: closed via #396 — feat(aif-worker-discipline): condensed orchestrator-planning + reviewer layers in portable worker agent
4 changes: 4 additions & 0 deletions .claude/orchestrator-prompts/channel-earliness-audit/done.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# channel-earliness-audit — DONE
- Final PR: #181
- Closed: 2026-05-22
- Summary: closed via #181 — docs(channel-audit): channel-earliness retroactive sweep (§6-deferred)
4 changes: 4 additions & 0 deletions .claude/orchestrator-prompts/defer-reflex-detection/done.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# defer-reflex-detection — DONE
- Final PR: #232
- Closed: 2026-05-25
- Summary: closed via #232 — research(defer-reflex-detection): Stage 2 benchmark — REJECT UMBRELLA verdict
4 changes: 4 additions & 0 deletions .claude/orchestrator-prompts/dispatcher-skill/done.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# dispatcher-skill — DONE
- Final PR: #403
- Closed: 2026-06-03
- Summary: closed via #403 — feat(dispatcher): /dispatcher skill — wire aif-control execution loop (Stage 1)
4 changes: 4 additions & 0 deletions .claude/orchestrator-prompts/dispatcher-ux/done.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# dispatcher-ux — DONE
- Final PR: #407
- Closed: 2026-06-03
- Summary: closed via #407 — fix(dispatcher): P2 closure-marker + P3 base-norm + P4 self-apply + P6 watch-link (Stage 2)
4 changes: 4 additions & 0 deletions .claude/orchestrator-prompts/goal-drift-audit/done.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# goal-drift-audit — DONE
- Final PR: #433
- Closed: 2026-06-05
- Summary: closed via #433 — docs(goal-drift-audit): verdict patch + principle-09 criteria 3&4
4 changes: 4 additions & 0 deletions .claude/orchestrator-prompts/guard-liveness-gate/done.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# guard-liveness-gate — DONE
- Final PR: #460
- Closed: 2026-06-11
- Summary: closed via #460 — feat(guard-liveness): change-scoped ESLint guard-liveness gate (v1)
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# guard-liveness-stage2a-prelude — DONE
- Final PR: #463
- Closed: 2026-06-11
- Summary: closed via #463 — feat(guard-liveness): Stage 2a prelude — fixture + pressure-scenario schema/types/principle
4 changes: 4 additions & 0 deletions .claude/orchestrator-prompts/guard-liveness-v0-audit/done.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# guard-liveness-v0-audit — DONE
- Final PR: #458
- Closed: 2026-06-11
- Summary: closed via #458 — research(guard-liveness-v0-audit): per-rule criticality table for 26 manifest rules
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# guard-liveness-v1-advisories — DONE
- Final PR: #489
- Closed: 2026-06-13
- Summary: closed via #489 — chore(orchestrator): close guard-liveness umbrella (done.md)
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# guard-liveness-v1.5-cmd-script — DONE
- Final PR: #475
- Closed: 2026-06-13
- Summary: closed via #475 — feat(guard-liveness): cmd/script rule liveness gate (v1.5)
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# guard-liveness-v3-manual-sp — DONE
- Final PR: #476
- Closed: 2026-06-13
- Summary: closed via #476 — feat(guard-liveness): v3 manual-rule SP-prober (reduced, consolidated) — pressure-scenario schema + prober + 5 migrations
4 changes: 4 additions & 0 deletions .claude/orchestrator-prompts/memory-coverage-audit/done.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# memory-coverage-audit — DONE
- Final PR: #126
- Closed: 2026-05-21
- Summary: closed via #126 — docs(research): memory coverage audit (memory → docs → tests) 2026-05-22
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# meta-orchestrator-bundle-autonomous — DONE
- Final PR: #247
- Closed: 2026-05-26
- Summary: closed via #247 — feat(meta-orchestrator): bundle-autonomous Stage 3 — B1 helper + B2 persistence + B3a self-eval
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# mutation-discipline-stage-c-meta-launch — DONE
- Final PR: #378
- Closed: 2026-06-02
- Summary: closed via #378 — mutation-discipline-stage-c-meta-launch
4 changes: 4 additions & 0 deletions .claude/orchestrator-prompts/narrow-b-benchmark/done.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# narrow-b-benchmark — DONE
- Final PR: #210
- Closed: 2026-05-24
- Summary: closed via #210 — research(narrow-b-benchmark): production-corpus FP measurement for Option B
7 changes: 6 additions & 1 deletion .claude/skills/pipeline/helpers/priority-score.sh
Original file line number Diff line number Diff line change
Expand Up @@ -222,7 +222,12 @@ for dir in "${PROMPTS_DIR}"/*/; do
if [[ -z "${done_pr}" && -f "${dir}done.md" ]]; then
done_pr="$(grep -m1 '^- Final PR: #' "${dir}done.md" 2>/dev/null \
| grep -oE '[0-9]+' | head -n1 || true)"
[[ -n "${done_pr}" ]] && done_basis="done-md"
# done.md existence ALONE proves closure (C3 ADAPT Cline #77). A stale/superseded closure
# carries "Final PR: n/a" (no numeric PR) — still DONE; tag done_pr=n/a so the filter drops
# it. Pre-fix bug: n/a closures (e.g. the 2026-06-05 sweep) stayed false-open because this
# layer only tagged DONE on a numeric PR — fixed 2026-06-16 closure-sweep.
[[ -z "${done_pr}" ]] && done_pr="n/a"
done_basis="done-md"
fi

# Emit candidate line with optional DONE tag (basis indicates which layer matched).
Expand Down
26 changes: 26 additions & 0 deletions packages/core/hooks/done-md-completion-filter.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -309,6 +309,32 @@ describe('done-md-completion-filter — Layer C2 + C3 paired-negative contract',
expect(line).not.toMatch(/basis=/);
});

it('Case 3b — C3 n/a: done.md with "Final PR: n/a" → status=DONE done_pr=n/a basis=done-md', () => {
// Regression for the 2026-06-16 closure-sweep fix. A stale/superseded closure carries
// "- Final PR: n/a" (no numeric PR). done.md existence ALONE proves closure, so C3 MUST
// still tag DONE. Pre-fix bug: such n/a closures (e.g. the 2026-06-05 sweep) stayed
// false-open because the layer only tagged DONE when it parsed a numeric PR.
const sandbox = makeSandbox();
setupRepo(sandbox, ['na-done-umbrella', 'active-umbrella']);
const dir = join(sandbox, '.claude', 'orchestrator-prompts', 'na-done-umbrella');
mkdirSync(dir, { recursive: true });
writeFileSync(
join(dir, 'done.md'),
`# na-done-umbrella — DONE\n- Final PR: n/a (superseded)\n- Closed: 2026-06-05\n- Summary: scope absorbed elsewhere\n`,
'utf8',
);
const fakeGh = makeFakeGhEmpty(sandbox);
const fakeDup = makeFakeDupDetect(sandbox, {});

const r = runHelper(sandbox, fakeGh, { MO_DUP_DETECT_BIN: fakeDup });
expect(r.status).toBe(0);
// na-done-umbrella has done.md (n/a PR) → still DONE via Layer C3
expect(r.stdout).toMatch(/na-done-umbrella .* status=DONE done_pr=n\/a basis=done-md/);
// active-umbrella has no done.md → still candidate (paired-negative)
const activeLine = r.stdout.split('\n').find((l) => l.startsWith('active-umbrella '));
expect(activeLine).not.toMatch(/status=DONE/);
});

it('Case 5 — COMBINED: C1 fail + C2 hit → DONE; C1 fail + C2 fail + C3 hit → DONE', () => {
// Verifies first-match-wins ordering: when C1 misses but C2 or C3 matches, DONE is emitted.
// Also verifies that C3 still fires when both C1 and C2 miss.
Expand Down
Loading