@windyroad/itil 0.21.3-preview.230 → 0.21.4-preview.235
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
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: wr-itil:work-problem
|
|
3
|
-
description: Pick the highest-WSJF open or known-error problem ticket and work it — investigate, implement, commit, and release per the standard manage-problem workflow.
|
|
3
|
+
description: Pick the highest-WSJF open or known-error problem ticket and work it — investigate, implement, commit, and release per the standard manage-problem workflow. Selection is framework-mediated (WSJF + documented tie-break ladder per ADR-044); singular variant; distinct from /wr-itil:work-problems (plural AFK orchestrator). Use this when the user asks to "work the next problem", "work the top of the queue", or "grind through one ticket".
|
|
4
4
|
allowed-tools: Read, Write, Edit, Bash, Glob, Grep, AskUserQuestion, Skill, Agent
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# Work Problem — Pick-and-Run
|
|
8
8
|
|
|
9
|
-
Pick the highest-WSJF ticket from the current backlog and work it end-to-end. This is the **singular
|
|
9
|
+
Pick the highest-WSJF ticket from the current backlog and work it end-to-end. This is the **singular** entry point — one ticket per invocation. Selection is **framework-mediated** per ADR-044's Framework-Mediated Surface (Prioritisation row): the agent applies the WSJF formula + documented tie-break ladder mechanically and reports the chosen ticket + the rung that decided. The user retains direct override via `/wr-itil:work-problem <NNN>` invocation and via mid-flow correction (ADR-044 category 6).
|
|
10
10
|
|
|
11
11
|
This skill is the P071 phased-landing split of `/wr-itil:manage-problem work` per ADR-010 amended Skill Granularity rule: one skill per distinct user intent. The original `/wr-itil:manage-problem work` subcommand route remains as a thin-router forwarder during the deprecation window but is scheduled for removal in `@windyroad/itil`'s next major version.
|
|
12
12
|
|
|
13
13
|
## Name distinction (work-problem vs work-problems)
|
|
14
14
|
|
|
15
|
-
- **`/wr-itil:work-problem`** (singular, this skill) — one ticket per invocation.
|
|
15
|
+
- **`/wr-itil:work-problem`** (singular, this skill) — one ticket per invocation. Framework-mediated selection (WSJF + tie-break ladder). Intended for a user who wants to dispatch the next-highest ticket and then stop. User-override path: `/wr-itil:work-problem <NNN>` to pin a specific ticket.
|
|
16
16
|
- **`/wr-itil:work-problems`** (plural, AFK orchestrator) — loops through the backlog by WSJF, delegating each iteration to this skill (via the Agent tool, per ADR-032 + P077). Intended for AFK batch runs; non-interactive selection; stops only when nothing actionable remains.
|
|
17
17
|
|
|
18
18
|
Both names coexist intentionally per P071's out-of-scope note on the naming coexistence. The plural orchestrator uses this skill as its per-iteration unit.
|
|
@@ -21,9 +21,10 @@ Both names coexist intentionally per P071's out-of-scope note on the naming coex
|
|
|
21
21
|
|
|
22
22
|
**In scope:**
|
|
23
23
|
- Read `docs/problems/README.md` when fresh; otherwise delegate the refresh to `/wr-itil:review-problems` first (never re-implement the re-scoring logic locally — same anti-fork discipline as the list-problems cache path).
|
|
24
|
-
-
|
|
24
|
+
- Pick the highest-WSJF ticket via the framework-mediated tie-break ladder (Known Error > Open; smaller effort first; older reported date; ticket number ascending) per ADR-044 Framework-Mediated Surface. Report the chosen ticket + the rung that decided. No `AskUserQuestion` fires for selection.
|
|
25
|
+
- Honour the user-override path `/wr-itil:work-problem <NNN>` — when the user names a ticket directly, skip the ladder and proceed to Step 3 with the named ticket.
|
|
25
26
|
- Delegate the actual work to `/wr-itil:manage-problem <NNN>` via the Skill tool so the investigation / known-error transition / fix / closure flow stays hosted on a single authoritative workflow (ADR-010 thin-router discipline applied to the work path).
|
|
26
|
-
- Scope-expansion prompt (ADR-013 Rule 1) when the selected ticket's effort grows during work — same three-option structure as `/wr-itil:manage-problem`'s Working a Problem section.
|
|
27
|
+
- Scope-expansion prompt (ADR-013 Rule 1; ADR-044 category-2 deviation-approval surface) when the selected ticket's effort grows during work — same three-option structure as `/wr-itil:manage-problem`'s Working a Problem section.
|
|
27
28
|
|
|
28
29
|
**Out of scope:**
|
|
29
30
|
- Batch looping over multiple tickets — that's `/wr-itil:work-problems` (plural). This skill runs exactly one ticket per invocation.
|
|
@@ -48,23 +49,27 @@ fi
|
|
|
48
49
|
- **Cache fresh** (no output): read `docs/problems/README.md` and use the cached WSJF Rankings table for Step 2.
|
|
49
50
|
- **Cache stale** (prints "stale") or `README.md` missing: **delegate to `/wr-itil:review-problems`** via the Skill tool to refresh the ranking before proceeding. Do NOT re-implement the re-scoring logic here — that would fork the review path and break P062's canonical-cache-writer contract. The review skill's Step 4 verification prompt runs on this refresh path (P048 Candidate 1: Verification Queue prompts always fire so pending verifications don't accumulate off-ledger).
|
|
50
51
|
|
|
51
|
-
### 2. Select the ticket
|
|
52
|
+
### 2. Select the ticket (framework-mediated)
|
|
52
53
|
|
|
53
|
-
Read the WSJF Rankings table from the now-fresh `docs/problems/README.md`.
|
|
54
|
+
Read the WSJF Rankings table from the now-fresh `docs/problems/README.md`. Apply the framework's tie-break ladder mechanically to pick the next ticket — selection is **framework-mediated** per ADR-044's Framework-Mediated Surface (Prioritisation row). The agent picks, reports the choice + the tie-break rung that decided, and proceeds. **No `AskUserQuestion` fires for selection** — the WSJF formula + tie-break ladder already resolve the decision.
|
|
54
55
|
|
|
55
|
-
**
|
|
56
|
+
**User-override path** — when the user invokes `/wr-itil:work-problem <NNN>` (ticket ID supplied as an argument, e.g. `/wr-itil:work-problem 042`), skip the ladder entirely and proceed to Step 3 with the named ticket. This is the documented escape hatch for the user to bypass the framework-mediated selection. Mid-flow correction (ADR-044 category 6 / P078 surface) is the long-tail catcher when the agent's pick was wrong in a way the framework couldn't anticipate.
|
|
56
57
|
|
|
57
|
-
|
|
58
|
-
- Option 1: `Work P<NNN>: <title> (Recommended)` — description shows WSJF score, Severity, and Status.
|
|
59
|
-
- Option 2: `Pick a different problem` — user names a specific ID in the free-form response.
|
|
60
|
-
- **Tied top-WSJF tickets** (two or more tied for the highest WSJF): present each tied ticket as a peer option. Per-option description carries a one-line rationale naming the Status / Effort / concrete next action so the user can pick with context:
|
|
61
|
-
- One option per tied ticket: `Work P<NNN>: <title>` — description: `WSJF <score> · <status> · <effort> · <one-line rationale>`.
|
|
62
|
-
- Final option: `Pick a different problem`.
|
|
63
|
-
- Use `header: "Next problem"` and `multiSelect: false`.
|
|
58
|
+
**Tie-break ladder** (applied in order; same logic the plural orchestrator's Step 3 uses, per P077 + ADR-044):
|
|
64
59
|
|
|
65
|
-
**
|
|
60
|
+
1. **WSJF score** (descending) — highest WSJF wins.
|
|
61
|
+
2. **Status** — Known Error before Open. Verification Pending tickets are not in this queue (handled by `/wr-itil:review-problems` Step 4 verification prompt).
|
|
62
|
+
3. **Effort** — smaller effort first (S < M < L < XL).
|
|
63
|
+
4. **Reported date** — older reported date wins (FIFO discipline for tied tickets at this rung).
|
|
64
|
+
5. **Ticket number** — ascending (final deterministic break).
|
|
66
65
|
|
|
67
|
-
|
|
66
|
+
When a single ticket is the strict top, rungs 2-5 are not consulted. When multiple tickets are tied at the top, walk down the ladder until a rung decides.
|
|
67
|
+
|
|
68
|
+
**Report shape (JTBD-201 audit-trail)** — after picking, the agent reports the chosen ticket + the rung that decided, with citations to the WSJF inputs. Example: *"Selected P042: <title> (WSJF 12.0; tied with P057 at WSJF; tie-break rung: 'Known Error > Open' — P042 is Known Error, P057 is Open)"*. This citation makes the selection reproducible from the README state at the time of the report and is the audit surface JTBD-201 requires.
|
|
69
|
+
|
|
70
|
+
**No prose-ask fallback** — never present the selection as prose "(a)/(b)/(c)" or "which would you like?" (regression guard for ADR-013 Confirmation grep). Selection is mechanical; the agent picks and reports.
|
|
71
|
+
|
|
72
|
+
**No AFK / interactive split** — selection is mechanical in both interactive and AFK modes. The prior asymmetry between AFK (mechanical) and interactive (`AskUserQuestion`-driven) was the lazy-deferral surface ADR-044 was written to close; converging both modes to the same algorithm is the alignment. The plural orchestrator (`/wr-itil:work-problems`) Step 3 also uses this ladder, so all entry surfaces resolve to one selection algorithm (no AFK-vs-interactive divergence to maintain).
|
|
68
73
|
|
|
69
74
|
### 3. Delegate the work to `/wr-itil:manage-problem <NNN>`
|
|
70
75
|
|
|
@@ -75,17 +80,17 @@ Invoke `/wr-itil:manage-problem <NNN>` via the Skill tool with the selected tick
|
|
|
75
80
|
|
|
76
81
|
**Why delegate rather than re-implement:** the full investigation / transition / fix / release pipeline is a long-lived, policy-governed flow that must stay on a single authoritative workflow. Re-hosting it on a sibling skill would fork the ownership contract and compound maintenance cost. The split skill (this file) owns the *selection* of the next ticket; `/wr-itil:manage-problem <NNN>` owns the *execution*.
|
|
77
82
|
|
|
78
|
-
### 4. Scope-expansion check (ADR-013 Rule 1)
|
|
83
|
+
### 4. Scope-expansion check (ADR-013 Rule 1; ADR-044 category-2 deviation-approval)
|
|
79
84
|
|
|
80
|
-
If the delegated `/wr-itil:manage-problem <NNN>` reports that the ticket's effort expanded during investigation or architect review (e.g. S → L, or L → XL), fire the standard scope-change `AskUserQuestion` prompt
|
|
85
|
+
If the delegated `/wr-itil:manage-problem <NNN>` reports that the ticket's effort expanded during investigation or architect review (e.g. S → L, or L → XL), fire the standard scope-change `AskUserQuestion` prompt. **Effort growth IS the contradicting evidence** against the WSJF score that ranked this ticket at the top — this is the ADR-044 **category-2 (deviation-approval)** surface. The 3-option vocabulary below is the work-item-tactical analog of the framework-tactical 5-option vocabulary (Approve+amend / Approve+supersede / Approve+one-time / Reject / Defer); the user is the right authority for the shape, so the `AskUserQuestion` is genuine, not lazy.
|
|
81
86
|
|
|
82
87
|
- Option 1: `Continue with expanded scope` — keep working this ticket at its new size.
|
|
83
|
-
- Option 2: `Update problem and re-rank` — save findings to the problem file, re-score WSJF, and re-run the
|
|
88
|
+
- Option 2: `Update problem and re-rank` — save findings to the problem file, re-score WSJF, and re-run the framework-mediated selection to surface the new top of queue.
|
|
84
89
|
- Option 3: `Pick a different problem` — park this one and work something else.
|
|
85
90
|
|
|
86
91
|
Use `header: "Scope change"` and `multiSelect: false`. This is the same structure `/wr-itil:manage-problem`'s Working a Problem section documents; the split lifts it without modification.
|
|
87
92
|
|
|
88
|
-
**AFK / non-interactive branch
|
|
93
|
+
**AFK / non-interactive branch (ADR-013 Rule 6)**: same fallback as `/wr-itil:work-problems` — save findings + the new Effort/WSJF lines to the ticket file and skip to the next iteration. The orchestrator owns the re-selection loop.
|
|
89
94
|
|
|
90
95
|
### 5. Post-work housekeeping
|
|
91
96
|
|
|
@@ -99,11 +104,14 @@ After the delegated `/wr-itil:manage-problem <NNN>` completes:
|
|
|
99
104
|
|
|
100
105
|
`work-problem` (singular) owns:
|
|
101
106
|
- Reading the WSJF Rankings from `docs/problems/README.md`.
|
|
102
|
-
-
|
|
107
|
+
- Applying the framework-mediated tie-break ladder for selection (ADR-044 Prioritisation row).
|
|
108
|
+
- Reporting the chosen ticket + the tie-break rung that decided (JTBD-201 audit-trail).
|
|
109
|
+
- Honouring the user-override path `/wr-itil:work-problem <NNN>` (skip the ladder; proceed with the named ticket).
|
|
103
110
|
- Delegating one execution iteration to `/wr-itil:manage-problem <NNN>`.
|
|
104
|
-
- Firing the scope-expansion `AskUserQuestion` on effort drift.
|
|
111
|
+
- Firing the scope-expansion `AskUserQuestion` on effort drift (ADR-044 category-2 deviation-approval surface).
|
|
105
112
|
|
|
106
113
|
`work-problem` does NOT:
|
|
114
|
+
- Fire `AskUserQuestion` for the ticket selection itself — selection is framework-mediated per ADR-044.
|
|
107
115
|
- Refresh the README.md cache directly — defers to `/wr-itil:review-problems`.
|
|
108
116
|
- Loop over multiple tickets — that's `/wr-itil:work-problems` (plural).
|
|
109
117
|
- Commit the ranking refresh or the per-ticket work — delegated skills commit per ADR-014.
|
|
@@ -111,8 +119,10 @@ After the delegated `/wr-itil:manage-problem <NNN>` completes:
|
|
|
111
119
|
## Related
|
|
112
120
|
|
|
113
121
|
- **P071** (`docs/problems/071-argument-based-skill-subcommands-are-not-discoverable.open.md`) — originating ticket. This skill is phase 3 of the P071 phased-landing plan (list-problems was phase 1; review-problems was phase 2).
|
|
122
|
+
- **P136** (`docs/problems/136-adr-044-alignment-audit-master.open.md`) — ADR-044 alignment audit master; this skill is the Phase 2 first audit target (work-problem singular).
|
|
114
123
|
- **ADR-010 amended** (`docs/decisions/010-rename-wr-problem-to-wr-itil.proposed.md` — Skill Granularity section) — canonical skill-split naming + forwarder contract + `deprecated-arguments: true` frontmatter flag.
|
|
115
|
-
- **ADR-013** (`docs/decisions/013-structured-user-interaction-for-governance-decisions.proposed.md`) — Rule 1 for the
|
|
124
|
+
- **ADR-013 amended** (`docs/decisions/013-structured-user-interaction-for-governance-decisions.proposed.md`) — Rule 1 amended in P135 to defer to ADR-044 for framework-resolution boundary. Step 4 scope-expansion is the only Rule-1 surface this skill retains; Rule 6 covers Step 4's AFK fallback.
|
|
125
|
+
- **ADR-044** (`docs/decisions/044-decision-delegation-contract.proposed.md`) — Decision-Delegation Contract; this skill's Step 2 selection is framework-mediated per the ADR's Prioritisation row. Step 4 scope-expansion is a category-2 (deviation-approval) surface per the ADR's 6-class taxonomy.
|
|
116
126
|
- **ADR-014** — governance skills commit their own work. The delegated `/wr-itil:manage-problem <NNN>` owns the per-ticket commit; this skill does not re-commit.
|
|
117
127
|
- **ADR-018** — release cadence. AFK orchestrator owns release cadence; this skill does NOT auto-release.
|
|
118
128
|
- **ADR-032** — governance skill invocation patterns. `/wr-itil:work-problems` delegates iterations via the Agent tool; this singular skill is the canonical execution unit.
|
|
@@ -12,18 +12,29 @@
|
|
|
12
12
|
# Structural assertion — Permitted Exception to the source-grep ban
|
|
13
13
|
# (ADR-005 / P011 / ADR-037 contract-assertion pattern).
|
|
14
14
|
#
|
|
15
|
-
#
|
|
15
|
+
# tdd-review: structural-permitted (justification: SKILL.md prose contract
|
|
16
|
+
# assertions; behavioural skill-runtime harness pending P012 + P081 Phase 2;
|
|
17
|
+
# expected to migrate to behavioural form once the harness exists. Touched
|
|
18
|
+
# during P136 Phase 2 ADR-044 alignment audit per the inline plan's
|
|
19
|
+
# bridge-marker rule.)
|
|
20
|
+
#
|
|
21
|
+
# @problem P071 (originating split)
|
|
22
|
+
# @problem P136 (ADR-044 alignment audit master — Phase 2 work-problem singular)
|
|
23
|
+
# @adr ADR-044 (Decision-Delegation Contract — framework-mediated Prioritisation surface)
|
|
16
24
|
# @jtbd JTBD-001 (enforce governance without slowing down — discoverable surface)
|
|
17
25
|
# @jtbd JTBD-101 (extend the suite with clear patterns — one skill per distinct user intent)
|
|
26
|
+
# @jtbd JTBD-201 (audit trail — selection cites the deciding tie-break rung)
|
|
18
27
|
#
|
|
19
28
|
# Cross-reference:
|
|
20
29
|
# P071: docs/problems/071-argument-based-skill-subcommands-are-not-discoverable.open.md
|
|
30
|
+
# P136: docs/problems/136-adr-044-alignment-audit-master.open.md
|
|
21
31
|
# ADR-010 amended (Skill Granularity section) — split naming + forwarder contract
|
|
22
|
-
# ADR-013 Rule 1 — structured user interaction
|
|
23
|
-
# ADR-013 Rule 6 — AFK non-interactive fallback
|
|
32
|
+
# ADR-013 amended Rule 1 — structured user interaction; framework-resolution narrowing per ADR-044
|
|
33
|
+
# ADR-013 Rule 6 — AFK non-interactive fallback (Step 4 scope-expansion only)
|
|
24
34
|
# ADR-014 — governance skills commit their own work (delegated target owns commits)
|
|
25
35
|
# ADR-032 — governance skill invocation patterns (plural orchestrator delegates here)
|
|
26
36
|
# ADR-037 — contract-assertion bats pattern
|
|
37
|
+
# ADR-044 — Decision-Delegation Contract; Step 2 selection is framework-mediated
|
|
27
38
|
|
|
28
39
|
setup() {
|
|
29
40
|
SKILL_DIR="$(cd "$(dirname "$BATS_TEST_FILENAME")/.." && pwd)"
|
|
@@ -204,3 +215,80 @@ setup() {
|
|
|
204
215
|
run grep -inE "P077|ADR-032" "$SKILL_FILE"
|
|
205
216
|
[ "$status" -eq 0 ]
|
|
206
217
|
}
|
|
218
|
+
|
|
219
|
+
# ----------------------------------------------------------------------
|
|
220
|
+
# P136 Phase 2 — ADR-044 alignment audit (added 2026-04-27)
|
|
221
|
+
#
|
|
222
|
+
# These assertions land the framework-mediated-selection contract for
|
|
223
|
+
# Step 2 and the ADR-044 category-2 cross-reference for Step 4. They
|
|
224
|
+
# replace the prior assertions that mandated AskUserQuestion-driven
|
|
225
|
+
# selection (which was the lazy-deferral surface ADR-044 was written to
|
|
226
|
+
# close).
|
|
227
|
+
# ----------------------------------------------------------------------
|
|
228
|
+
|
|
229
|
+
@test "SKILL.md Step 2 specifies framework-mediated selection (ADR-044 Prioritisation)" {
|
|
230
|
+
# Per ADR-044 Framework-Mediated Surface row "Prioritisation — WSJF
|
|
231
|
+
# formula + documented tie-breaks (Known Error > Open; smaller effort
|
|
232
|
+
# first; older reported date). Pick + work." Step 2 must apply the
|
|
233
|
+
# tie-break ladder mechanically rather than defer to AskUserQuestion.
|
|
234
|
+
run awk '/^### 2\./,/^### 3\./' "$SKILL_FILE"
|
|
235
|
+
[ "$status" -eq 0 ]
|
|
236
|
+
[[ "$output" == *"framework-mediated"* ]] || [[ "$output" == *"tie-break ladder"* ]]
|
|
237
|
+
[[ "$output" == *"Known Error"* ]]
|
|
238
|
+
[[ "$output" == *"smaller"* ]]
|
|
239
|
+
[[ "$output" == *"older reported date"* ]]
|
|
240
|
+
[[ "$output" == *"ADR-044"* ]]
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
@test "SKILL.md Step 2 reports the chosen ticket + tie-break rung that decided (JTBD-201 audit-trail)" {
|
|
244
|
+
# Audit-trail outcome: the agent must cite which rung of the ladder
|
|
245
|
+
# decided the selection so the choice is reproducible from the README
|
|
246
|
+
# state at the time of the report.
|
|
247
|
+
run awk '/^### 2\./,/^### 3\./' "$SKILL_FILE"
|
|
248
|
+
[ "$status" -eq 0 ]
|
|
249
|
+
[[ "$output" == *"report"* ]]
|
|
250
|
+
[[ "$output" == *"tie-break"* ]] || [[ "$output" == *"ladder rung"* ]]
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
@test "SKILL.md Step 2 documents user-override path via direct NNN invocation" {
|
|
254
|
+
# Selection is framework-mediated, but the user retains agency via
|
|
255
|
+
# /wr-itil:work-problem <NNN> direct invocation. Without the
|
|
256
|
+
# documented escape hatch, the user has no way to redirect except via
|
|
257
|
+
# post-hoc correction (ADR-044 category 6). The literal-form
|
|
258
|
+
# assertion guards against the substring trap where /wr-itil:work-
|
|
259
|
+
# problems (plural) accidentally satisfies a /wr-itil:work-problem
|
|
260
|
+
# substring check.
|
|
261
|
+
run awk '/^### 2\./,/^### 3\./' "$SKILL_FILE"
|
|
262
|
+
[ "$status" -eq 0 ]
|
|
263
|
+
[[ "$output" == *"/wr-itil:work-problem <NNN>"* ]] || [[ "$output" == *"/wr-itil:work-problem <ID>"* ]] || [[ "$output" == *"\`/wr-itil:work-problem 042\`"* ]]
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
@test "SKILL.md Step 2 does NOT fire AskUserQuestion as the selection mechanism (regression guard)" {
|
|
267
|
+
# The AskUserQuestion-driven selection prompt was the lazy-deferral
|
|
268
|
+
# surface ADR-044 closed. If it returns to Step 2 the lazy-count
|
|
269
|
+
# metric (Step 2d "Ask Hygiene Pass") will spike. AskUserQuestion may
|
|
270
|
+
# appear elsewhere (Step 4 scope-expansion) but NOT inside Step 2.
|
|
271
|
+
run awk '/^### 2\./,/^### 3\./' "$SKILL_FILE"
|
|
272
|
+
[ "$status" -eq 0 ]
|
|
273
|
+
! echo "$output" | grep -qE "Selection via .?AskUserQuestion|Use .header: .Next problem"
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
@test "SKILL.md Step 4 cross-references ADR-044 category-2 (deviation-approval)" {
|
|
277
|
+
# Effort growth IS the contradicting evidence against the WSJF score
|
|
278
|
+
# that ranked this ticket at the top — it's a deviation-approval
|
|
279
|
+
# surface in the ADR-044 taxonomy. The inline cross-reference makes
|
|
280
|
+
# the framework-resolution boundary visible at the call site.
|
|
281
|
+
run awk '/^### 4\./,/^### 5\./' "$SKILL_FILE"
|
|
282
|
+
[ "$status" -eq 0 ]
|
|
283
|
+
[[ "$output" == *"ADR-044"* ]]
|
|
284
|
+
[[ "$output" == *"deviation-approval"* ]] || [[ "$output" == *"category 2"* ]] || [[ "$output" == *"category-2"* ]]
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
@test "bats file carries the tdd-review: structural-permitted marker (P081 + P136 bridge)" {
|
|
288
|
+
# Per P136 Phase 2 inline plan: bats touched during the audit get
|
|
289
|
+
# the structural-permitted marker as the bridge until P081 Phase 2's
|
|
290
|
+
# canonical retrofit. Without the marker, future TDD agent reviews
|
|
291
|
+
# will flag the file as a P081 violation.
|
|
292
|
+
run grep -nE "tdd-review:[[:space:]]+structural-permitted" "${BATS_TEST_FILENAME}"
|
|
293
|
+
[ "$status" -eq 0 ]
|
|
294
|
+
}
|