@windyroad/itil 2.1.2 → 2.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json
CHANGED
|
@@ -6,7 +6,9 @@
|
|
|
6
6
|
# evidence shapes per evidence-based-relevance-close-pass-for-the-problem-backlog-phase-1-file-no-longer-exists-phase-2-adr-shipped-confirmed-named-skill-exists-self-marker-in-body-driver-child-closed-phase-1-false-positive-fixes-architecture-rule (Phase 1 + Phase 2):
|
|
7
7
|
#
|
|
8
8
|
# Shape 1 — file-no-longer-exists (Phase 1, original)
|
|
9
|
+
# Elided prose references (`.../`) are not paths.
|
|
9
10
|
# Shape 2 — ADR-shipped with `human-oversight: confirmed` (Phase 2)
|
|
11
|
+
# CORROBORATING-ONLY — never a clean CLOSE on its own.
|
|
10
12
|
# Shape 3 — named-skill-or-feature-exists (Phase 2)
|
|
11
13
|
# Shape 4 — self-marker-in-body (line-anchored) (Phase 2)
|
|
12
14
|
# Shape 5 — driver-child-ticket-closed (Phase 2)
|
|
@@ -244,9 +246,19 @@ record_shape() {
|
|
|
244
246
|
# candidate. Detects state-suffix / sibling-file / rename to avoid Phase 1
|
|
245
247
|
# false-positives (agent-defers-mitigation-selection-to-user-during-active-incident-surfaces-mitigation-choice-as-user-authority-when-skill-contract-empowers-agent-driven-reversible-mitigations-problem/phase-3-f9-wr-itil-plugin-maturity-list-in-suite-display-shim-reads-installed-plugins-plugin-json-maturity-field-emits-ndjson-per-surface-rollup-per-plugin-problem/rfc-first-trace-invariant-not-enforced-fixes-start-without-rfc-story-map-or-jtbd-trace-problem); on detection routes to KEEP-WITH-NOTE.
|
|
246
248
|
|
|
249
|
+
# The character class admits `.` and `/`, so an ELIDED reference in prose
|
|
250
|
+
# (`packages/itil/hooks/lib/.../detectors.sh`, `docs/decisions/044-....md`)
|
|
251
|
+
# extracts as a path, is found absent, and is counted as evidence the file
|
|
252
|
+
# was deleted — concluding a ticket was fixed because its prose was
|
|
253
|
+
# abbreviated. An abbreviation was never a path assertion, so drop any
|
|
254
|
+
# candidate carrying an ASCII ellipsis. The Unicode `…` form needs no
|
|
255
|
+
# filter — it is outside the character class above, so it never extracts
|
|
256
|
+
# as a path in the first place (pinned by a bats case regardless). Fourth
|
|
257
|
+
# member of the Phase 1 false-positive class alongside agent-defers-mitigation-selection-to-user-during-active-incident-surfaces-mitigation-choice-as-user-authority-when-skill-contract-empowers-agent-driven-reversible-mitigations-problem/phase-3-f9-wr-itil-plugin-maturity-list-in-suite-display-shim-reads-installed-plugins-plugin-json-maturity-field-emits-ndjson-per-surface-rollup-per-plugin-problem/rfc-first-trace-invariant-not-enforced-fixes-start-without-rfc-story-map-or-jtbd-trace-problem.
|
|
247
258
|
candidates=$(grep -oE '(packages|docs|\.changeset|src|test|scripts)/[A-Za-z0-9._/-]+\.(md|sh|ts|tsx|js|jsx|json|yml|yaml|bats|py|txt|html)' "$ticket_file" 2>/dev/null \
|
|
248
259
|
| sort -u \
|
|
249
260
|
| grep -v '^docs/problems/' \
|
|
261
|
+
| grep -v '\.\.\.' \
|
|
250
262
|
|| true)
|
|
251
263
|
|
|
252
264
|
shape1_missing=0
|
|
@@ -318,6 +330,12 @@ if [ -n "$adr_refs" ]; then
|
|
|
318
330
|
done <<< "$adr_refs"
|
|
319
331
|
fi
|
|
320
332
|
if [ -n "$shape2_confirmed" ]; then
|
|
333
|
+
# Corroborating-only. `human-oversight: confirmed` attests that a human
|
|
334
|
+
# ratified a DECISION (human-oversight-marker-wr-architect-review-decisions-drain-for-recorded-decisions-architecture-rule), not that anything was built or released
|
|
335
|
+
# — treating it as delivery evidence is the marker-is-not-an-
|
|
336
|
+
# implementation-licence conflation human-oversight-marker-wr-architect-review-decisions-drain-for-recorded-decisions-architecture-rule's 2026-05-27 amendment names.
|
|
337
|
+
# It is recorded so the cite survives (agent-output-grounding-no-fabricated-quantitative-estimates-cite-persist-uncertainty-architecture-rule cumulative evidence), but
|
|
338
|
+
# the demotion below stops it closing a ticket by itself.
|
|
321
339
|
record_shape "ADR-shipped-confirmed" "ADRs human-oversight-confirmed: ${shape2_confirmed}"
|
|
322
340
|
fi
|
|
323
341
|
|
|
@@ -483,7 +501,27 @@ fi
|
|
|
483
501
|
# caveat short-tag + one-line prose so the SKILL Step 4.6b template can
|
|
484
502
|
# splice the **Caveat** field directly.
|
|
485
503
|
|
|
486
|
-
|
|
504
|
+
# Shape 2 demotion (relevance-close-evaluator-over-fires-a-bare-adr-skill-citation-is-read-as-fix-shipped-so-live-tickets-return-close-candidate-problem Option C, shape 2) — ratification is not
|
|
505
|
+
# delivery. When shape 2 is the ONLY shape that fired, the verdict is
|
|
506
|
+
# demoted from a clean CLOSE-CANDIDATE to CLOSE-CANDIDATE-WITH-CAVEAT so
|
|
507
|
+
# the review-problems Step 4.6 AFK path queues it for the maintainer
|
|
508
|
+
# instead of closing it silently. Measured against origin/main
|
|
509
|
+
# 2026-08-30: 107/120 decision records carried the marker and 91/118
|
|
510
|
+
# open/known-error tickets cited at least one, so the shape fired on ~77%
|
|
511
|
+
# of the live backlog and discriminated almost nothing. relevance-close-evaluator-over-fires-a-bare-adr-skill-citation-is-read-as-fix-shipped-so-live-tickets-return-close-candidate-problem holds the
|
|
512
|
+
# wider shape-2/shape-3 tightening pending a superseding decision; this
|
|
513
|
+
# changes the verdict lane only, not the recorded mechanical check.
|
|
514
|
+
#
|
|
515
|
+
# Evaluated BEFORE the multi-phase block so this tag wins when both would
|
|
516
|
+
# fire — the caveat field is a single structured tag per architect
|
|
517
|
+
# condition C2, and "the evidence is the wrong kind" is the more
|
|
518
|
+
# fundamental reason the verdict cannot be clean.
|
|
519
|
+
if [ "$shapes" = "ADR-shipped-confirmed" ]; then
|
|
520
|
+
caveat_tag="ratification-is-not-delivery"
|
|
521
|
+
caveat_msg="only evidence is ADR ratification, which records a human approving a decision — not that a fix shipped; confirm the work actually landed before closing"
|
|
522
|
+
fi
|
|
523
|
+
|
|
524
|
+
if [ -n "$shapes" ] && [ -z "$caveat_tag" ]; then
|
|
487
525
|
# Multi-phase umbrella detection: unticked checkboxes in the ticket
|
|
488
526
|
# body + at least one shipped-evidence shape match. The shape match
|
|
489
527
|
# itself is the "progress made" signal — unticked tasks indicate
|
|
@@ -521,7 +559,7 @@ fi
|
|
|
521
559
|
# No shape fired — fall back to the legacy KEEP / SKIP routing.
|
|
522
560
|
|
|
523
561
|
if [ -z "$candidates" ]; then
|
|
524
|
-
echo "SKIP $basename — no extractable file paths (after self-reference exclusion)"
|
|
562
|
+
echo "SKIP $basename — no extractable file paths (after self-reference and elided-reference exclusion)"
|
|
525
563
|
exit 2
|
|
526
564
|
fi
|
|
527
565
|
|
|
@@ -295,7 +295,7 @@ For each `.open.md` / `.known-error.md` ticket aged ≥ 7 days, evaluate whether
|
|
|
295
295
|
| Shape | Phase | Mechanical check | Empirical closes (2026-05-31) |
|
|
296
296
|
|---|---|---|---|
|
|
297
297
|
| 1. `file-no-longer-exists` | Phase 1 | grep ticket body for `(packages\|docs\|...)/...\.(md\|sh\|...)`; verify each via `git ls-files --error-unmatch` | 0 of 14 |
|
|
298
|
-
| 2. `ADR-shipped-confirmed` | Phase 2 | grep ticket body for `ADR-NNN`; for each, verify `docs/decisions/<NNN>-*.md` exists AND frontmatter has `human-oversight: confirmed` | 8 of 14 — the "Problem 012: Skill Testing Harness Scope Undefined" problem/the "Problem 015: TDD enforcement does not flag vague Gherkin outcome steps" problem/the "Problem 018: TDD plugin should enforce BDD + Example Mapping principles, with examples traceable to Jobs-To-Be-Done" problem/the "Problem 022: Agents must not fabricate time estimates without grounded data" problem/the "Problem 033: No persistent risk register for ISO 31000 / ISO 27001 compliance" problem/the "Problem 039: Autonomous loops conflate diagnose with implement" problem/the "ADRs accumulate forward-chronology evidence inline (Phase 2 dogfood evidence, amendment history, cross-iter cross-references) — `decisions` bucket dominates context at 41% / 1.3 MiB" problem/the "Reconcile release-cadence text with (lean / release-sooner; appetite is a ceiling, not a trigger) + add the dogfood-location-before-public clause" problem |
|
|
298
|
+
| 2. `ADR-shipped-confirmed` **(corroborating-only)** | Phase 2 | grep ticket body for `ADR-NNN`; for each, verify `docs/decisions/<NNN>-*.md` exists AND frontmatter has `human-oversight: confirmed`. **Never a clean close on its own** — the marker records that a human ratified a DECISION (the ": Human-oversight marker + `/wr-architect:review-decisions` drain for recorded decisions" architecture rule), not that a fix shipped. Shape 2 alone demotes to `CLOSE-CANDIDATE-WITH-CAVEAT` with tag `ratification-is-not-delivery` (the "Evidence-based relevance-close pass for the problem backlog (Phase 1: file-no-longer-exists; Phase 2: ADR-shipped-confirmed + named-skill-exists + self-marker-in-body + driver-child-closed + Phase 1 false-positive fixes)" architecture rule reassessment 2026-08-30) | 8 of 14 — the "Problem 012: Skill Testing Harness Scope Undefined" problem/the "Problem 015: TDD enforcement does not flag vague Gherkin outcome steps" problem/the "Problem 018: TDD plugin should enforce BDD + Example Mapping principles, with examples traceable to Jobs-To-Be-Done" problem/the "Problem 022: Agents must not fabricate time estimates without grounded data" problem/the "Problem 033: No persistent risk register for ISO 31000 / ISO 27001 compliance" problem/the "Problem 039: Autonomous loops conflate diagnose with implement" problem/the "ADRs accumulate forward-chronology evidence inline (Phase 2 dogfood evidence, amendment history, cross-iter cross-references) — `decisions` bucket dominates context at 41% / 1.3 MiB" problem/the "Reconcile release-cadence text with (lean / release-sooner; appetite is a ceiling, not a trigger) + add the dogfood-location-before-public clause" problem |
|
|
299
299
|
| 3. `named-skill-or-feature-exists` | Phase 2 | grep for SKILL.md / hook / agent paths + `/wr-<plugin>:<skill>` slash-command refs; verify each via `git ls-files` | 6 of 14 — the "Problem 014: No lightweight aside invocation for governance skills (problems, retros, ADRs)" problem/the "Problem 034: Centralise risk reports for cross-project skill improvement" problem/the "Problem 045: Auto plugin install on user's machine after governance release" problem/the "Problem 079: No inbound sync of upstream-reported problems — reports filed via the intake templates never surface in the local backlog" problem/the "Agent designs schemas with user-asked classification fields when the framework should derive silently OR eliminate the classification entirely — deeper generalisation of derive-first-don't-ask" problem/the "Broaden + rename the `solo-developer` persona → `developer`" problem |
|
|
300
300
|
| 4. `self-marker-in-body` | Phase 2 | line-anchored grep for `Close to (Verifying\|Closed)`, `DONE 2026-`, `## Fix Released` heading, `fix shipped session`, `awaiting K→V`. Pattern MUST anchor to line-start to avoid mid-prose false-positives (architect advisory A2) | explicit in the "Broaden + rename the `solo-developer` persona → `developer`" problem; contributory in the "Problem 033: No persistent risk register for ISO 31000 / ISO 27001 compliance" problem |
|
|
301
301
|
| 5. `driver-child-ticket-closed` | Phase 2 | parse `## Related` for `P<NNN>` refs; check if any are in `docs/problems/closed/`. Suppressed when child names an unbuilt SKILL/agent path (future work, not stale; architect advisory A1) | contributory in several closes |
|
|
@@ -325,13 +325,13 @@ Exit-code routing (one verdict line per ticket on stdout):
|
|
|
325
325
|
| Exit | Stdout prefix | Action |
|
|
326
326
|
|------|--------------|--------|
|
|
327
327
|
| 0 | `CLOSE-CANDIDATE <basename> — shapes: <comma-list> — <per-shape cite>; ...` | Auto-close branch (4.6b). |
|
|
328
|
-
| 0 | `CLOSE-CANDIDATE-WITH-CAVEAT <basename> — shapes: <comma-list> — caveat: <short-tag>: <one-line> — cites: ...` | Surface-batch-confirm branch
|
|
328
|
+
| 0 | `CLOSE-CANDIDATE-WITH-CAVEAT <basename> — shapes: <comma-list> — caveat: <short-tag>: <one-line> — cites: ...` | Surface-batch-confirm branch — **never the auto-close branch**. Under AFK, defer per 4.6a step 3: surface it, do not `git mv` it. The audit-section shape in 4.6b applies only once a maintainer has confirmed the close, and the caveat short-tag + one-line then splices verbatim into that section's **Caveat** field per architect condition C2. |
|
|
329
329
|
| 1 | `KEEP <basename> — <M>/<N> paths still present` | No action; log only. |
|
|
330
330
|
| 1 | `KEEP-WITH-NOTE <basename> — <note>: <evidence>` | Phase 1 false-positive class (state-suffix / sibling-file / rename) OR architect-A1 future-work disambiguation. No action; log only. |
|
|
331
331
|
| 2 | `SKIP <basename> — <reason>` | No action (age gate, no Reported date, no extractable evidence). |
|
|
332
332
|
| 3 | error | Log advisory; do not abort the pass — relevance-close is non-blocking per the Step 4.5 fail-soft precedent. |
|
|
333
333
|
|
|
334
|
-
**Algorithm (canonical body)**: runs each of the five shape detectors over the ticket body. Multi-shape matches emit cumulatively (corroborating evidence is stronger than first-match-wins per the "Agent output grounding — no fabricated quantitative estimates, cite + persist + uncertainty" architecture rule): the `shapes:` field carries a comma-joined list, the trailing fragment carries per-shape cites semicolon-separated.
|
|
334
|
+
**Algorithm (canonical body)**: runs each of the five shape detectors over the ticket body. Multi-shape matches emit cumulatively (corroborating evidence is stronger than first-match-wins per the "Agent output grounding — no fabricated quantitative estimates, cite + persist + uncertainty" architecture rule): the `shapes:` field carries a comma-joined list, the trailing fragment carries per-shape cites semicolon-separated. Two independent triggers raise the caveat, checked in this order: (1) shape 2 is the ONLY shape that matched — tag `ratification-is-not-delivery`, because ADR ratification is not delivery evidence; (2) at least one shape matches AND the body has any unticked checkboxes — tag `multi-phase-mixed-progress`. The caveat field carries a single structured tag (architect condition C2), so trigger (1) wins when both would fire: "the evidence is the wrong kind" is the more fundamental reason the verdict cannot be clean. The verdict is intentionally conservative — tickets with no shape match AND no extractable evidence route to `SKIP`, not auto-close.
|
|
335
335
|
|
|
336
336
|
**Surface-batch-confirm flow** (the methodology that produced today's 14 closes — codified for repeatable use):
|
|
337
337
|
|
|
@@ -344,7 +344,15 @@ Real-backlog smoke test 2026-05-31 against today's labeled fixtures: the "Proble
|
|
|
344
344
|
|
|
345
345
|
#### 4.6b. Auto-close action per CLOSE-CANDIDATE
|
|
346
346
|
|
|
347
|
-
|
|
347
|
+
**Applies to clean `CLOSE-CANDIDATE` verdicts.** A `CLOSE-CANDIDATE-WITH-CAVEAT`
|
|
348
|
+
verdict does NOT enter this branch on its own: under AFK it is surfaced and left
|
|
349
|
+
open per 4.6a step 3, and it reaches the steps below only after a maintainer has
|
|
350
|
+
confirmed the close at the next interactive review — at which point it carries
|
|
351
|
+
the extra **Caveat** field noted in step 1. Closing a caveat verdict
|
|
352
|
+
unattended defeats the demotion that produced it (the "Evidence-based relevance-close pass for the problem backlog (Phase 1: file-no-longer-exists; Phase 2: ADR-shipped-confirmed + named-skill-exists + self-marker-in-body + driver-child-closed + Phase 1 false-positive fixes)" architecture rule reassessment
|
|
353
|
+
2026-08-30, shape 2 corroborating-only).
|
|
354
|
+
|
|
355
|
+
For each such ticket, perform the following BEFORE the `git mv`:
|
|
348
356
|
|
|
349
357
|
1. Use the `Edit` tool to append a `## Closed as no longer relevant` section to the ticket body (cite + persist + uncertainty per the "Agent output grounding — no fabricated quantitative estimates, cite + persist + uncertainty" architecture rule):
|
|
350
358
|
|
|
@@ -400,7 +408,7 @@ The relevance-close pass runs **unconditionally** during AFK orchestration: when
|
|
|
400
408
|
|
|
401
409
|
**Worked example (Phase 2 surface-batch-confirm, 2026-05-31)**: 14 closes across 5 batches using shapes 2-5. Each batch surfaced via `AskUserQuestion` (≤ 5 candidates per batch); maintainer confirmed clean closes and routed caveat candidates with explicit caveat acknowledgement (e.g. the "Problem 039: Autonomous loops conflate diagnose with implement" problem `shared-template-not-built`; the "ADRs accumulate forward-chronology evidence inline (Phase 2 dogfood evidence, amendment history, cross-iter cross-references) — `decisions` bucket dominates context at 41% / 1.3 MiB" problem `deep-dive-bloat-remains`). All closures batched into per-batch commits per the "Governance Skills Commit Their Own Completed Work" architecture rule. The 14-fixture labeled set is the regression suite (`packages/itil/scripts/test/evaluate-relevance.bats` covers each shape positive + the architect A1/A2 advisory negatives).
|
|
402
410
|
|
|
403
|
-
**Cross-references**: the "Evidence-based relevance-close pass for the problem backlog (Phase 1: file-no-longer-exists; Phase 2: ADR-shipped-confirmed + named-skill-exists + self-marker-in-body + driver-child-closed + Phase 1 false-positive fixes)" architecture rule (this pass's design ADR, Phase 1 + Phase 2), the "Agent output grounding — no fabricated quantitative estimates, cite + persist + uncertainty" architecture rule (grounding, cumulative shape cite + structured caveat field), the "Problem lifecycle — add a Verification Pending status between Known Error and Closed" architecture rule + the "Evidence-based relevance-close pass for the problem backlog (Phase 1: file-no-longer-exists; Phase 2: ADR-shipped-confirmed + named-skill-exists + self-marker-in-body + driver-child-closed + Phase 1 false-positive fixes)" architecture rule lifecycle extension (Open|Known Error → Closed bypassing Verifying for no-fix-needed conclusions; the Closed-row entry at `/wr-itil:manage-problem` SKILL.md line 59 names Phase 1 + Phase 2 shapes), the "Plugin-bundled scripts invoked from SKILL.md resolve via `bin/` on `$PATH`" architecture rule (PATH shim), the "Behavioural-tests-default for skill testing" architecture rule (behavioural bats at `packages/itil/scripts/test/evaluate-relevance.bats` —
|
|
411
|
+
**Cross-references**: the "Evidence-based relevance-close pass for the problem backlog (Phase 1: file-no-longer-exists; Phase 2: ADR-shipped-confirmed + named-skill-exists + self-marker-in-body + driver-child-closed + Phase 1 false-positive fixes)" architecture rule (this pass's design ADR, Phase 1 + Phase 2), the "Agent output grounding — no fabricated quantitative estimates, cite + persist + uncertainty" architecture rule (grounding, cumulative shape cite + structured caveat field), the "Problem lifecycle — add a Verification Pending status between Known Error and Closed" architecture rule + the "Evidence-based relevance-close pass for the problem backlog (Phase 1: file-no-longer-exists; Phase 2: ADR-shipped-confirmed + named-skill-exists + self-marker-in-body + driver-child-closed + Phase 1 false-positive fixes)" architecture rule lifecycle extension (Open|Known Error → Closed bypassing Verifying for no-fix-needed conclusions; the Closed-row entry at `/wr-itil:manage-problem` SKILL.md line 59 names Phase 1 + Phase 2 shapes), the "Plugin-bundled scripts invoked from SKILL.md resolve via `bin/` on `$PATH`" architecture rule (PATH shim), the "Behavioural-tests-default for skill testing" architecture rule (behavioural bats at `packages/itil/scripts/test/evaluate-relevance.bats` — 35/35 GREEN), the "Governance Skills Commit Their Own Completed Work" architecture rule (batched closure commit grain per pass), the "— Decision-Delegation Contract: when agents act on the framework vs ask the user" architecture rule cat 4 + the "Agents over-ask in interactive sessions — conflating mechanical-stages with user-interactive-stages of multi-stage skill contracts (inverse-)" problem (mechanical-stage carve-out: ask per-batch, not per-ticket), the "Problem 057: `git mv` + Edit + `git add` staging-ordering trap drops content edits from the commit" problem (staging trap), the "`/wr-itil:review-problems` has no path to close tickets that are no longer relevant (evidence-based, NOT age-based) — structural outflow gap drives monotonic backlog growth" problem (Phase 1 driver), the "Phase 2 — extend `evaluate-relevance.sh` with 4 more evidence shapes + fix Phase 1 file-no-longer-exists false-positive class" problem (Phase 2 driver).
|
|
404
412
|
|
|
405
413
|
### 5. Rewrite `docs/problems/README.md`
|
|
406
414
|
|
|
@@ -306,7 +306,7 @@ For each `.open.md` / `.known-error.md` ticket aged ≥ 7 days, evaluate whether
|
|
|
306
306
|
| Shape | Phase | Mechanical check | Empirical closes (2026-05-31) |
|
|
307
307
|
|---|---|---|---|
|
|
308
308
|
| 1. `file-no-longer-exists` | Phase 1 | grep ticket body for `(packages\|docs\|...)/...\.(md\|sh\|...)`; verify each via `git ls-files --error-unmatch` | 0 of 14 |
|
|
309
|
-
| 2. `ADR-shipped-confirmed` | Phase 2 | grep ticket body for `ADR-NNN`; for each, verify `docs/decisions/<NNN>-*.md` exists AND frontmatter has `human-oversight: confirmed` | 8 of 14 — the "Problem 012: Skill Testing Harness Scope Undefined" problem/the "Problem 015: TDD enforcement does not flag vague Gherkin outcome steps" problem/the "Problem 018: TDD plugin should enforce BDD + Example Mapping principles, with examples traceable to Jobs-To-Be-Done" problem/the "Problem 022: Agents must not fabricate time estimates without grounded data" problem/the "Problem 033: No persistent risk register for ISO 31000 / ISO 27001 compliance" problem/the "Problem 039: Autonomous loops conflate diagnose with implement" problem/the "ADRs accumulate forward-chronology evidence inline (Phase 2 dogfood evidence, amendment history, cross-iter cross-references) — `decisions` bucket dominates context at 41% / 1.3 MiB" problem/the "Reconcile release-cadence text with (lean / release-sooner; appetite is a ceiling, not a trigger) + add the dogfood-location-before-public clause" problem |
|
|
309
|
+
| 2. `ADR-shipped-confirmed` **(corroborating-only)** | Phase 2 | grep ticket body for `ADR-NNN`; for each, verify `docs/decisions/<NNN>-*.md` exists AND frontmatter has `human-oversight: confirmed`. **Never a clean close on its own** — the marker records that a human ratified a DECISION (the ": Human-oversight marker + `/wr-architect:review-decisions` drain for recorded decisions" architecture rule), not that a fix shipped. Shape 2 alone demotes to `CLOSE-CANDIDATE-WITH-CAVEAT` with tag `ratification-is-not-delivery` (the "Evidence-based relevance-close pass for the problem backlog (Phase 1: file-no-longer-exists; Phase 2: ADR-shipped-confirmed + named-skill-exists + self-marker-in-body + driver-child-closed + Phase 1 false-positive fixes)" architecture rule reassessment 2026-08-30) | 8 of 14 — the "Problem 012: Skill Testing Harness Scope Undefined" problem/the "Problem 015: TDD enforcement does not flag vague Gherkin outcome steps" problem/the "Problem 018: TDD plugin should enforce BDD + Example Mapping principles, with examples traceable to Jobs-To-Be-Done" problem/the "Problem 022: Agents must not fabricate time estimates without grounded data" problem/the "Problem 033: No persistent risk register for ISO 31000 / ISO 27001 compliance" problem/the "Problem 039: Autonomous loops conflate diagnose with implement" problem/the "ADRs accumulate forward-chronology evidence inline (Phase 2 dogfood evidence, amendment history, cross-iter cross-references) — `decisions` bucket dominates context at 41% / 1.3 MiB" problem/the "Reconcile release-cadence text with (lean / release-sooner; appetite is a ceiling, not a trigger) + add the dogfood-location-before-public clause" problem |
|
|
310
310
|
| 3. `named-skill-or-feature-exists` | Phase 2 | grep for SKILL.md / hook / agent paths + `/wr-<plugin>:<skill>` slash-command refs; verify each via `git ls-files` | 6 of 14 — the "Problem 014: No lightweight aside invocation for governance skills (problems, retros, ADRs)" problem/the "Problem 034: Centralise risk reports for cross-project skill improvement" problem/the "Problem 045: Auto plugin install on user's machine after governance release" problem/the "Problem 079: No inbound sync of upstream-reported problems — reports filed via the intake templates never surface in the local backlog" problem/the "Agent designs schemas with user-asked classification fields when the framework should derive silently OR eliminate the classification entirely — deeper generalisation of derive-first-don't-ask" problem/the "Broaden + rename the `solo-developer` persona → `developer`" problem |
|
|
311
311
|
| 4. `self-marker-in-body` | Phase 2 | line-anchored grep for `Close to (Verifying\|Closed)`, `DONE 2026-`, `## Fix Released` heading, `fix shipped session`, `awaiting K→V`. Pattern MUST anchor to line-start to avoid mid-prose false-positives (architect advisory A2) | explicit in the "Broaden + rename the `solo-developer` persona → `developer`" problem; contributory in the "Problem 033: No persistent risk register for ISO 31000 / ISO 27001 compliance" problem |
|
|
312
312
|
| 5. `driver-child-ticket-closed` | Phase 2 | parse `## Related` for `P<NNN>` refs; check if any are in `docs/problems/closed/`. Suppressed when child names an unbuilt SKILL/agent path (future work, not stale; architect advisory A1) | contributory in several closes |
|
|
@@ -336,13 +336,13 @@ Exit-code routing (one verdict line per ticket on stdout):
|
|
|
336
336
|
| Exit | Stdout prefix | Action |
|
|
337
337
|
|------|--------------|--------|
|
|
338
338
|
| 0 | `CLOSE-CANDIDATE <basename> — shapes: <comma-list> — <per-shape cite>; ...` | Auto-close branch (4.6b). |
|
|
339
|
-
| 0 | `CLOSE-CANDIDATE-WITH-CAVEAT <basename> — shapes: <comma-list> — caveat: <short-tag>: <one-line> — cites: ...` | Surface-batch-confirm branch
|
|
339
|
+
| 0 | `CLOSE-CANDIDATE-WITH-CAVEAT <basename> — shapes: <comma-list> — caveat: <short-tag>: <one-line> — cites: ...` | Surface-batch-confirm branch — **never the auto-close branch**. Under AFK, defer per 4.6a step 3: surface it, do not `git mv` it. The audit-section shape in 4.6b applies only once a maintainer has confirmed the close, and the caveat short-tag + one-line then splices verbatim into that section's **Caveat** field per architect condition C2. |
|
|
340
340
|
| 1 | `KEEP <basename> — <M>/<N> paths still present` | No action; log only. |
|
|
341
341
|
| 1 | `KEEP-WITH-NOTE <basename> — <note>: <evidence>` | Phase 1 false-positive class (state-suffix / sibling-file / rename) OR architect-A1 future-work disambiguation. No action; log only. |
|
|
342
342
|
| 2 | `SKIP <basename> — <reason>` | No action (age gate, no Reported date, no extractable evidence). |
|
|
343
343
|
| 3 | error | Log advisory; do not abort the pass — relevance-close is non-blocking per the Step 4.5 fail-soft precedent. |
|
|
344
344
|
|
|
345
|
-
**Algorithm (canonical body)**: runs each of the five shape detectors over the ticket body. Multi-shape matches emit cumulatively (corroborating evidence is stronger than first-match-wins per the "Agent output grounding — no fabricated quantitative estimates, cite + persist + uncertainty" architecture rule): the `shapes:` field carries a comma-joined list, the trailing fragment carries per-shape cites semicolon-separated.
|
|
345
|
+
**Algorithm (canonical body)**: runs each of the five shape detectors over the ticket body. Multi-shape matches emit cumulatively (corroborating evidence is stronger than first-match-wins per the "Agent output grounding — no fabricated quantitative estimates, cite + persist + uncertainty" architecture rule): the `shapes:` field carries a comma-joined list, the trailing fragment carries per-shape cites semicolon-separated. Two independent triggers raise the caveat, checked in this order: (1) shape 2 is the ONLY shape that matched — tag `ratification-is-not-delivery`, because ADR ratification is not delivery evidence; (2) at least one shape matches AND the body has any unticked checkboxes — tag `multi-phase-mixed-progress`. The caveat field carries a single structured tag (architect condition C2), so trigger (1) wins when both would fire: "the evidence is the wrong kind" is the more fundamental reason the verdict cannot be clean. The verdict is intentionally conservative — tickets with no shape match AND no extractable evidence route to `SKIP`, not auto-close.
|
|
346
346
|
|
|
347
347
|
**Surface-batch-confirm flow** (the methodology that produced today's 14 closes — codified for repeatable use):
|
|
348
348
|
|
|
@@ -355,7 +355,15 @@ Real-backlog smoke test 2026-05-31 against today's labeled fixtures: the "Proble
|
|
|
355
355
|
|
|
356
356
|
#### 4.6b. Auto-close action per CLOSE-CANDIDATE
|
|
357
357
|
|
|
358
|
-
|
|
358
|
+
**Applies to clean `CLOSE-CANDIDATE` verdicts.** A `CLOSE-CANDIDATE-WITH-CAVEAT`
|
|
359
|
+
verdict does NOT enter this branch on its own: under AFK it is surfaced and left
|
|
360
|
+
open per 4.6a step 3, and it reaches the steps below only after a maintainer has
|
|
361
|
+
confirmed the close at the next interactive review — at which point it carries
|
|
362
|
+
the extra **Caveat** field noted in step 1. Closing a caveat verdict
|
|
363
|
+
unattended defeats the demotion that produced it (the "Evidence-based relevance-close pass for the problem backlog (Phase 1: file-no-longer-exists; Phase 2: ADR-shipped-confirmed + named-skill-exists + self-marker-in-body + driver-child-closed + Phase 1 false-positive fixes)" architecture rule reassessment
|
|
364
|
+
2026-08-30, shape 2 corroborating-only).
|
|
365
|
+
|
|
366
|
+
For each such ticket, perform the following BEFORE the `git mv`:
|
|
359
367
|
|
|
360
368
|
1. Use the `Edit` tool to append a `## Closed as no longer relevant` section to the ticket body (cite + persist + uncertainty per the "Agent output grounding — no fabricated quantitative estimates, cite + persist + uncertainty" architecture rule):
|
|
361
369
|
|
|
@@ -411,7 +419,7 @@ The relevance-close pass runs **unconditionally** during AFK orchestration: when
|
|
|
411
419
|
|
|
412
420
|
**Worked example (Phase 2 surface-batch-confirm, 2026-05-31)**: 14 closes across 5 batches using shapes 2-5. Each batch surfaced via `request_user_input` (≤ 5 candidates per batch); maintainer confirmed clean closes and routed caveat candidates with explicit caveat acknowledgement (e.g. the "Problem 039: Autonomous loops conflate diagnose with implement" problem `shared-template-not-built`; the "ADRs accumulate forward-chronology evidence inline (Phase 2 dogfood evidence, amendment history, cross-iter cross-references) — `decisions` bucket dominates context at 41% / 1.3 MiB" problem `deep-dive-bloat-remains`). All closures batched into per-batch commits per the "Governance Skills Commit Their Own Completed Work" architecture rule. The 14-fixture labeled set is the regression suite (`<itil-plugin-root>/scripts/test/evaluate-relevance.bats` covers each shape positive + the architect A1/A2 advisory negatives).
|
|
413
421
|
|
|
414
|
-
**Cross-references**: the "Evidence-based relevance-close pass for the problem backlog (Phase 1: file-no-longer-exists; Phase 2: ADR-shipped-confirmed + named-skill-exists + self-marker-in-body + driver-child-closed + Phase 1 false-positive fixes)" architecture rule (this pass's design ADR, Phase 1 + Phase 2), the "Agent output grounding — no fabricated quantitative estimates, cite + persist + uncertainty" architecture rule (grounding, cumulative shape cite + structured caveat field), the "Problem lifecycle — add a Verification Pending status between Known Error and Closed" architecture rule + the "Evidence-based relevance-close pass for the problem backlog (Phase 1: file-no-longer-exists; Phase 2: ADR-shipped-confirmed + named-skill-exists + self-marker-in-body + driver-child-closed + Phase 1 false-positive fixes)" architecture rule lifecycle extension (Open|Known Error → Closed bypassing Verifying for no-fix-needed conclusions; the Closed-row entry at `/wr-itil:manage-problem` SKILL.md line 59 names Phase 1 + Phase 2 shapes), the "Plugin-bundled scripts invoked from SKILL.md resolve via `bin/` on `$PATH`" architecture rule (PATH shim), the "Behavioural-tests-default for skill testing" architecture rule (behavioural bats at `<itil-plugin-root>/scripts/test/evaluate-relevance.bats` —
|
|
422
|
+
**Cross-references**: the "Evidence-based relevance-close pass for the problem backlog (Phase 1: file-no-longer-exists; Phase 2: ADR-shipped-confirmed + named-skill-exists + self-marker-in-body + driver-child-closed + Phase 1 false-positive fixes)" architecture rule (this pass's design ADR, Phase 1 + Phase 2), the "Agent output grounding — no fabricated quantitative estimates, cite + persist + uncertainty" architecture rule (grounding, cumulative shape cite + structured caveat field), the "Problem lifecycle — add a Verification Pending status between Known Error and Closed" architecture rule + the "Evidence-based relevance-close pass for the problem backlog (Phase 1: file-no-longer-exists; Phase 2: ADR-shipped-confirmed + named-skill-exists + self-marker-in-body + driver-child-closed + Phase 1 false-positive fixes)" architecture rule lifecycle extension (Open|Known Error → Closed bypassing Verifying for no-fix-needed conclusions; the Closed-row entry at `/wr-itil:manage-problem` SKILL.md line 59 names Phase 1 + Phase 2 shapes), the "Plugin-bundled scripts invoked from SKILL.md resolve via `bin/` on `$PATH`" architecture rule (PATH shim), the "Behavioural-tests-default for skill testing" architecture rule (behavioural bats at `<itil-plugin-root>/scripts/test/evaluate-relevance.bats` — 35/35 GREEN), the "Governance Skills Commit Their Own Completed Work" architecture rule (batched closure commit grain per pass), the "— Decision-Delegation Contract: when agents act on the framework vs ask the user" architecture rule cat 4 + the "Agents over-ask in interactive sessions — conflating mechanical-stages with user-interactive-stages of multi-stage skill contracts (inverse-)" problem (mechanical-stage carve-out: ask per-batch, not per-ticket), the "Problem 057: `git mv` + Edit + `git add` staging-ordering trap drops content edits from the commit" problem (staging trap), the "`/wr-itil:review-problems` has no path to close tickets that are no longer relevant (evidence-based, NOT age-based) — structural outflow gap drives monotonic backlog growth" problem (Phase 1 driver), the "Phase 2 — extend `evaluate-relevance.sh` with 4 more evidence shapes + fix Phase 1 file-no-longer-exists false-positive class" problem (Phase 2 driver).
|
|
415
423
|
|
|
416
424
|
### 5. Rewrite `docs/problems/README.md`
|
|
417
425
|
|