@windyroad/itil 0.23.5 → 0.24.0-preview.267
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
|
@@ -230,7 +230,7 @@ If the upstream had a matching template (Step 3), fill its required fields from
|
|
|
230
230
|
| Upstream template field (typical) | Local ticket source |
|
|
231
231
|
|---|---|
|
|
232
232
|
| `plugin` / `package` / `module` | Inferred from upstream repo name or local ticket's "Affected plugin / component" |
|
|
233
|
-
| `version` |
|
|
233
|
+
| `version` (single-slot version field) | Per ADR-033 amendment 2026-05-03 (P128) — populate with the local plugin version from the consolidated `## Versions` schema below; the full `## Versions` block is ALSO appended to the body's prose so the upstream maintainer has both the template's structured slot AND every version dimension. |
|
|
234
234
|
| `claude-code-version` | `claude --version` if the report originates from a Claude Code session |
|
|
235
235
|
| `os` | Local ticket's environment notes; or `uname -srm` of the reporting host |
|
|
236
236
|
| `description` | Local ticket's `## Description` section |
|
|
@@ -239,6 +239,30 @@ If the upstream had a matching template (Step 3), fill its required fields from
|
|
|
239
239
|
| `frequency` | Local ticket's `## Impact Assessment` Frequency line |
|
|
240
240
|
| `evidence` | Commit SHAs, test output, transcript excerpts from Investigation Tasks |
|
|
241
241
|
|
|
242
|
+
#### Versions schema (ADR-033 amendment 2026-05-03, P128)
|
|
243
|
+
|
|
244
|
+
Every body — matched-template path AND structured-default fallback — MUST include a labelled `## Versions` section carrying the five-field schema below. Missing fields render as `not detected` (normative MUST per ADR-033 amendment); omitting a field entirely is non-compliant because triage cannot distinguish *field omitted because not applicable* from *detection failed*.
|
|
245
|
+
|
|
246
|
+
```markdown
|
|
247
|
+
## Versions
|
|
248
|
+
|
|
249
|
+
- Local plugin: `@windyroad/<pkg>@<version>` (or "not detected" if reporting against a non-windyroad package)
|
|
250
|
+
- Upstream package: `<pkg>@<version>` (or "not detected" if not applicable)
|
|
251
|
+
- Claude Code CLI: `<claude --version output>` (or "not detected")
|
|
252
|
+
- Node: `<node --version output>` (or "not detected")
|
|
253
|
+
- OS: `<uname -srm output or platform detection>` (or "not detected")
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
**Auto-population sources** (best-effort; each source returns "not detected" on failure rather than crashing the skill):
|
|
257
|
+
|
|
258
|
+
- **Local plugin** — read `package.json` for `@windyroad/*` dependencies; or run `claude plugin list --json` and pick the matching plugin.
|
|
259
|
+
- **Upstream package** — `gh api repos/<owner>/<repo>/releases/latest` (GitHub-hosted) or `npm view <pkg> version` (npm-published); fall back to the local ticket's environment notes if neither resolves.
|
|
260
|
+
- **Claude Code CLI** — `claude --version`.
|
|
261
|
+
- **Node** — `node --version`.
|
|
262
|
+
- **OS** — `uname -srm` (POSIX) or platform-equivalent.
|
|
263
|
+
|
|
264
|
+
Cost note: `gh api` and `npm view` are network calls; cache within a session where reasonable. The five-field schema is fixed so downstream consumers (P129's inbound version-aware classifier, when it lands) parse against a stable surface.
|
|
265
|
+
|
|
242
266
|
For upstream repos whose matched template is `bug-report.yml` / `feature-request.yml` / `question.yml` (Step 3 backward-compat fallback), the skill fills the corresponding field set: `reproduction` ← `## Symptoms`; `expected` / `actual` ← observed-vs-expected contrast lines under `## Description`; `proposal` (for features) ← `## Description`.
|
|
243
267
|
|
|
244
268
|
#### Structured default body — problem-shaped (primary, per ADR-033)
|
|
@@ -266,12 +290,13 @@ Use this body when the Step 3 classifier picked `problem` shape AND the upstream
|
|
|
266
290
|
|
|
267
291
|
<from the local ticket's Impact Assessment "Frequency" line>
|
|
268
292
|
|
|
269
|
-
##
|
|
293
|
+
## Versions
|
|
270
294
|
|
|
271
|
-
-
|
|
272
|
-
-
|
|
273
|
-
- Claude Code
|
|
274
|
-
-
|
|
295
|
+
- Local plugin: `@windyroad/<pkg>@<version>` (or "not detected")
|
|
296
|
+
- Upstream package: `<pkg>@<version>` (or "not detected")
|
|
297
|
+
- Claude Code CLI: <claude --version output> (or "not detected")
|
|
298
|
+
- Node: <node --version output> (or "not detected")
|
|
299
|
+
- OS: <uname -srm output> (or "not detected")
|
|
275
300
|
|
|
276
301
|
## Evidence
|
|
277
302
|
|
|
@@ -284,7 +309,7 @@ Reported from <downstream-repo-url>/<local-ticket-relative-path>
|
|
|
284
309
|
This issue is tracked locally as P<NNN> in the downstream project's `docs/problems/` directory.
|
|
285
310
|
```
|
|
286
311
|
|
|
287
|
-
The body MUST include the `## Cross-reference` section so Step 7's back-write contract works (the downstream ticket's `## Reported Upstream` section records the upstream URL; the upstream issue body records the downstream reference).
|
|
312
|
+
The body MUST include the `## Cross-reference` section so Step 7's back-write contract works (the downstream ticket's `## Reported Upstream` section records the upstream URL; the upstream issue body records the downstream reference). The body MUST also include the labelled `## Versions` section per the ADR-033 amendment 2026-05-03 (P128); see the Versions schema block under Step 5's field-mapping table for the five-field contract and "not detected" rendering rule.
|
|
288
313
|
|
|
289
314
|
#### Structured default body — bug-shaped (fallback-only)
|
|
290
315
|
|
|
@@ -307,12 +332,13 @@ Use this body only when the Step 3 classifier picked `bug` shape as backward-com
|
|
|
307
332
|
|
|
308
333
|
<from local ticket>
|
|
309
334
|
|
|
310
|
-
##
|
|
335
|
+
## Versions
|
|
311
336
|
|
|
312
|
-
-
|
|
313
|
-
-
|
|
314
|
-
- Claude Code
|
|
315
|
-
-
|
|
337
|
+
- Local plugin: `@windyroad/<pkg>@<version>` (or "not detected")
|
|
338
|
+
- Upstream package: `<pkg>@<version>` (or "not detected")
|
|
339
|
+
- Claude Code CLI: <claude --version output> (or "not detected")
|
|
340
|
+
- Node: <node --version output> (or "not detected")
|
|
341
|
+
- OS: <uname -srm output> (or "not detected")
|
|
316
342
|
|
|
317
343
|
## Cross-reference
|
|
318
344
|
|
|
@@ -321,6 +347,8 @@ Reported from <downstream-repo-url>/<local-ticket-relative-path>
|
|
|
321
347
|
This issue is tracked locally as P<NNN> in the downstream project's `docs/problems/` directory.
|
|
322
348
|
```
|
|
323
349
|
|
|
350
|
+
The bug-shaped fallback also includes the labelled `## Versions` section per the ADR-033 amendment 2026-05-03 (P128) — schema and "not detected" rendering rule are common to both default body shapes.
|
|
351
|
+
|
|
324
352
|
#### Structured default body — feature-shaped (fallback-only)
|
|
325
353
|
|
|
326
354
|
Use this body only when the Step 3 classifier picked `feature` shape as backward-compat fallback AND the upstream has no matching template:
|
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
#!/usr/bin/env bats
|
|
2
2
|
|
|
3
|
+
# tdd-review: structural-permitted (justification: P012 skill testing
|
|
4
|
+
# harness scope is open; no behavioural alternative for SKILL.md prose-
|
|
5
|
+
# template structural assertions today. ADR-052 Migration clause permits
|
|
6
|
+
# structural retrofit-via-justification when the linked harness-gap ticket
|
|
7
|
+
# has not yet shipped the primitives. The whole-file annotation covers all
|
|
8
|
+
# assertions in this fixture, including the P128 `## Versions` schema
|
|
9
|
+
# assertions added 2026-05-03.)
|
|
10
|
+
#
|
|
3
11
|
# Doc-lint structural test (Permitted Exception per ADR-005 — structural
|
|
4
12
|
# SKILL.md content checks, not behavioural). Mirrors the doc-lint pattern
|
|
5
13
|
# established in ADR-011 and ADR-027 Confirmation tests.
|
|
@@ -119,17 +127,17 @@ setup() {
|
|
|
119
127
|
[ "$status" -eq 0 ]
|
|
120
128
|
}
|
|
121
129
|
|
|
122
|
-
@test "report-upstream: SKILL.md structured default uses problem-shaped section order (ADR-033 Step 5)" {
|
|
123
|
-
# Problem-shaped default body per ADR-033
|
|
124
|
-
# Workaround -> Affected plugin / component ->
|
|
125
|
-
#
|
|
126
|
-
# default block.
|
|
130
|
+
@test "report-upstream: SKILL.md structured default uses problem-shaped section order (ADR-033 Step 5, amended 2026-05-03 P128)" {
|
|
131
|
+
# Problem-shaped default body per ADR-033 (amended 2026-05-03 by P128):
|
|
132
|
+
# Description -> Symptoms -> Workaround -> Affected plugin / component ->
|
|
133
|
+
# Frequency -> Versions (was Environment pre-amendment) -> Evidence ->
|
|
134
|
+
# Cross-reference. Assert section order in the primary default block.
|
|
127
135
|
desc_line=$(grep -n '^## Description$' "$SKILL_MD" | head -1 | cut -d: -f1)
|
|
128
136
|
symptoms_line=$(grep -n '^## Symptoms$' "$SKILL_MD" | head -1 | cut -d: -f1)
|
|
129
137
|
workaround_line=$(grep -n '^## Workaround$' "$SKILL_MD" | head -1 | cut -d: -f1)
|
|
130
138
|
affected_line=$(grep -nE '^## Affected plugin' "$SKILL_MD" | head -1 | cut -d: -f1)
|
|
131
139
|
freq_line=$(grep -n '^## Frequency$' "$SKILL_MD" | head -1 | cut -d: -f1)
|
|
132
|
-
|
|
140
|
+
versions_line=$(grep -n '^## Versions$' "$SKILL_MD" | head -1 | cut -d: -f1)
|
|
133
141
|
evidence_line=$(grep -n '^## Evidence$' "$SKILL_MD" | head -1 | cut -d: -f1)
|
|
134
142
|
xref_line=$(grep -n '^## Cross-reference$' "$SKILL_MD" | head -1 | cut -d: -f1)
|
|
135
143
|
|
|
@@ -138,7 +146,7 @@ setup() {
|
|
|
138
146
|
[ -n "$workaround_line" ] || { echo "missing ## Workaround"; return 1; }
|
|
139
147
|
[ -n "$affected_line" ] || { echo "missing ## Affected plugin / component"; return 1; }
|
|
140
148
|
[ -n "$freq_line" ] || { echo "missing ## Frequency"; return 1; }
|
|
141
|
-
[ -n "$
|
|
149
|
+
[ -n "$versions_line" ] || { echo "missing ## Versions"; return 1; }
|
|
142
150
|
[ -n "$evidence_line" ] || { echo "missing ## Evidence"; return 1; }
|
|
143
151
|
[ -n "$xref_line" ] || { echo "missing ## Cross-reference"; return 1; }
|
|
144
152
|
|
|
@@ -146,8 +154,8 @@ setup() {
|
|
|
146
154
|
[ "$symptoms_line" -lt "$workaround_line" ]
|
|
147
155
|
[ "$workaround_line" -lt "$affected_line" ]
|
|
148
156
|
[ "$affected_line" -lt "$freq_line" ]
|
|
149
|
-
[ "$freq_line" -lt "$
|
|
150
|
-
[ "$
|
|
157
|
+
[ "$freq_line" -lt "$versions_line" ]
|
|
158
|
+
[ "$versions_line" -lt "$evidence_line" ]
|
|
151
159
|
[ "$evidence_line" -lt "$xref_line" ]
|
|
152
160
|
}
|
|
153
161
|
|
|
@@ -247,3 +255,78 @@ setup() {
|
|
|
247
255
|
run grep -iE 'dedup.*halt|step 4b.*halt|halt.*dedup|halt-and-save.*dedup' "$SKILL_MD"
|
|
248
256
|
[ "$status" -eq 0 ]
|
|
249
257
|
}
|
|
258
|
+
|
|
259
|
+
# ─── P128 consolidated Versions schema (ADR-033 amendment 2026-05-03) ─────────
|
|
260
|
+
#
|
|
261
|
+
# P128 reshapes Step 5's structured default body: the freeform `## Environment`
|
|
262
|
+
# section becomes a labelled `## Versions` section carrying a fixed five-field
|
|
263
|
+
# schema. Missing fields render as `not detected` (normative MUST per the
|
|
264
|
+
# ADR-033 amendment 2026-05-03). The reshape applies to the problem-shaped
|
|
265
|
+
# default AND the bug-shaped fallback default.
|
|
266
|
+
|
|
267
|
+
@test "report-upstream: SKILL.md problem-shaped default body includes ## Versions section (P128)" {
|
|
268
|
+
# The labelled `## Versions` section MUST appear in the SKILL.md so the
|
|
269
|
+
# structured default emits it. Two occurrences expected: one in the
|
|
270
|
+
# field-mapping table's Versions-schema block, one in the problem-shaped
|
|
271
|
+
# default body, and one in the bug-shaped fallback default body — but the
|
|
272
|
+
# minimum invariant is that the section header exists.
|
|
273
|
+
run grep -F '## Versions' "$SKILL_MD"
|
|
274
|
+
[ "$status" -eq 0 ]
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
@test "report-upstream: SKILL.md ## Versions schema lists all five fields (P128)" {
|
|
278
|
+
# Five-field schema per the ADR-033 amendment 2026-05-03: Local plugin,
|
|
279
|
+
# Upstream package, Claude Code CLI, Node, OS. All five labels must appear
|
|
280
|
+
# in the SKILL.md so the structured default's Versions block emits them.
|
|
281
|
+
run grep -iE '^- Local plugin:' "$SKILL_MD"
|
|
282
|
+
[ "$status" -eq 0 ]
|
|
283
|
+
run grep -iE '^- Upstream package:' "$SKILL_MD"
|
|
284
|
+
[ "$status" -eq 0 ]
|
|
285
|
+
run grep -iE '^- Claude Code CLI:' "$SKILL_MD"
|
|
286
|
+
[ "$status" -eq 0 ]
|
|
287
|
+
run grep -iE '^- Node:' "$SKILL_MD"
|
|
288
|
+
[ "$status" -eq 0 ]
|
|
289
|
+
run grep -iE '^- OS:' "$SKILL_MD"
|
|
290
|
+
[ "$status" -eq 0 ]
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
@test "report-upstream: SKILL.md documents not-detected rendering rule for missing version fields (P128)" {
|
|
294
|
+
# Normative rendering rule: missing fields render as "not detected".
|
|
295
|
+
# The literal string MUST appear in the SKILL.md so triage distinguishes
|
|
296
|
+
# field-not-applicable from detection-failed.
|
|
297
|
+
run grep -iE '"not detected"|`not detected`' "$SKILL_MD"
|
|
298
|
+
[ "$status" -eq 0 ]
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
@test "report-upstream: SKILL.md cites ADR-033 amendment authority for the Versions schema (P128)" {
|
|
302
|
+
# The Versions schema authority sits in ADR-033's `## Amendments` section
|
|
303
|
+
# dated 2026-05-03. The SKILL.md must cite the amendment so future readers
|
|
304
|
+
# see the authority inline alongside the schema.
|
|
305
|
+
run grep -iE 'ADR-033 amendment|amendment 2026-05-03' "$SKILL_MD"
|
|
306
|
+
[ "$status" -eq 0 ]
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
@test "report-upstream: SKILL.md documents auto-population sources for each Versions field (P128)" {
|
|
310
|
+
# Auto-population sources: package.json / claude plugin list, gh api releases
|
|
311
|
+
# or npm view, claude --version, node --version, uname -srm. The SKILL.md
|
|
312
|
+
# must enumerate the sources so the LLM-driven skill knows where to look.
|
|
313
|
+
run grep -F 'claude --version' "$SKILL_MD"
|
|
314
|
+
[ "$status" -eq 0 ]
|
|
315
|
+
run grep -F 'node --version' "$SKILL_MD"
|
|
316
|
+
[ "$status" -eq 0 ]
|
|
317
|
+
run grep -F 'uname -srm' "$SKILL_MD"
|
|
318
|
+
[ "$status" -eq 0 ]
|
|
319
|
+
run grep -F 'npm view' "$SKILL_MD"
|
|
320
|
+
[ "$status" -eq 0 ]
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
@test "report-upstream: SKILL.md problem-shaped default body no longer uses freeform ## Environment section (P128)" {
|
|
324
|
+
# The problem-shaped default body (lines under "#### Structured default body
|
|
325
|
+
# — problem-shaped (primary, per ADR-033)") MUST NOT contain a `## Environment`
|
|
326
|
+
# section header per the ADR-033 amendment 2026-05-03. The bug-shaped fallback
|
|
327
|
+
# also retired its `## Environment` section. We assert the headers are absent
|
|
328
|
+
# from the SKILL.md (the field-mapping table's reference to `os` field as a
|
|
329
|
+
# template-slot remains, but the top-level section header should be gone).
|
|
330
|
+
run grep -nE '^## Environment$' "$SKILL_MD"
|
|
331
|
+
[ "$status" -ne 0 ]
|
|
332
|
+
}
|
|
@@ -58,15 +58,42 @@ body:
|
|
|
58
58
|
validations:
|
|
59
59
|
required: true
|
|
60
60
|
|
|
61
|
-
- type:
|
|
62
|
-
id:
|
|
61
|
+
- type: input
|
|
62
|
+
id: version-local-plugin
|
|
63
63
|
attributes:
|
|
64
|
-
label:
|
|
65
|
-
description:
|
|
66
|
-
placeholder:
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
64
|
+
label: Local plugin / project version
|
|
65
|
+
description: The version of {{project_name}} you are running. Enter `not detected` if you cannot determine the version.
|
|
66
|
+
placeholder: "x.y.z"
|
|
67
|
+
validations:
|
|
68
|
+
required: true
|
|
69
|
+
|
|
70
|
+
- type: input
|
|
71
|
+
id: version-upstream-package
|
|
72
|
+
attributes:
|
|
73
|
+
label: Upstream package version
|
|
74
|
+
description: If the problem involves a non-{{project_name}} upstream package, the package name and version. Enter `not applicable` or `not detected` if neither.
|
|
75
|
+
placeholder: "<pkg>@<version>"
|
|
76
|
+
|
|
77
|
+
- type: input
|
|
78
|
+
id: version-claude-code
|
|
79
|
+
attributes:
|
|
80
|
+
label: Claude Code CLI version
|
|
81
|
+
description: Output of `claude --version`. Enter `not detected` if not running through Claude Code.
|
|
82
|
+
placeholder: "1.x.x"
|
|
83
|
+
|
|
84
|
+
- type: input
|
|
85
|
+
id: version-node
|
|
86
|
+
attributes:
|
|
87
|
+
label: Node version
|
|
88
|
+
description: Output of `node --version`. Enter `not detected` if Node is not part of the failure path.
|
|
89
|
+
placeholder: "v20.11.0"
|
|
90
|
+
|
|
91
|
+
- type: input
|
|
92
|
+
id: version-os
|
|
93
|
+
attributes:
|
|
94
|
+
label: Operating system
|
|
95
|
+
description: Output of `uname -srm` (POSIX) or platform-equivalent. Enter `not detected` if you cannot determine.
|
|
96
|
+
placeholder: "Darwin 25.3.0 arm64"
|
|
70
97
|
validations:
|
|
71
98
|
required: true
|
|
72
99
|
|