@dzhechkov/skills-feature-adr 1.5.3 → 1.5.4
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/.dz-manifest.json
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
},
|
|
14
14
|
{
|
|
15
15
|
"path": "README.md",
|
|
16
|
-
"sha256": "
|
|
16
|
+
"sha256": "eb5998619673f928f02b6b462278acfc4871387e1f6495ab0b613a965611cda7"
|
|
17
17
|
},
|
|
18
18
|
{
|
|
19
19
|
"path": "bin/cli.js",
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
},
|
|
26
26
|
{
|
|
27
27
|
"path": "package.json",
|
|
28
|
-
"sha256": "
|
|
28
|
+
"sha256": "8e082526415c4ce4427c51dff222c248e29ef5fbdcd17f0d957c28d621738513"
|
|
29
29
|
},
|
|
30
30
|
{
|
|
31
31
|
"path": "src/cli.js",
|
|
@@ -145,7 +145,7 @@
|
|
|
145
145
|
},
|
|
146
146
|
{
|
|
147
147
|
"path": "templates/.claude/skills/feature-adr/modules/05-architecture.md",
|
|
148
|
-
"sha256": "
|
|
148
|
+
"sha256": "4d20dbc85ea5bb93ca90fd8cd089255bab9c76a912ca3ad954f3a4bb670f3c45"
|
|
149
149
|
},
|
|
150
150
|
{
|
|
151
151
|
"path": "templates/.claude/skills/feature-adr/modules/06-implementation-plan.md",
|
|
@@ -313,7 +313,7 @@
|
|
|
313
313
|
},
|
|
314
314
|
{
|
|
315
315
|
"path": "templates/.claude/workflows/feature-adr.js",
|
|
316
|
-
"sha256": "
|
|
316
|
+
"sha256": "a6ff055d50f4eb5790dab36deee188e880eec1362188ec16a5504710294d87c3"
|
|
317
317
|
},
|
|
318
318
|
{
|
|
319
319
|
"path": "templates/lib/memory-protocol.md",
|
|
@@ -325,5 +325,5 @@
|
|
|
325
325
|
}
|
|
326
326
|
]
|
|
327
327
|
},
|
|
328
|
-
"signature": "
|
|
328
|
+
"signature": "4u6AmuuLsokLePBMiy6Gg9ETVwszE2NVE2fArT62nFcJSWPEd06QhKu4eb2/awzNjH4bhY3HXbacMZsS7B7gBA=="
|
|
329
329
|
}
|
package/README.md
CHANGED
|
@@ -169,7 +169,7 @@ refused BY NAME: `path traversal ('..' segment)`, `degenerate path segment`, `em
|
|
|
169
169
|
`illegal character '<c>'`, `empty stem after the leading dot`. The old substring traversal test also
|
|
170
170
|
rejected the ordinary filename `foo..bar.ts`; it is a segment test now.
|
|
171
171
|
|
|
172
|
-
### The Step-8 amendment gate runs a command instead of judging (v1.5.
|
|
172
|
+
### The Step-8 amendment gate runs a command instead of judging (v1.5.4)
|
|
173
173
|
|
|
174
174
|
Every `AM-N` row must resolve to a test found INSIDE the file the row names, and the check is
|
|
175
175
|
`dz amendment-check --slug <slug> --json` rather than a paragraph asking the reviewer to confirm it.
|
|
@@ -1113,7 +1113,27 @@ deliberately excluded — "skeleton first" is nonsense there.
|
|
|
1113
1113
|
|
|
1114
1114
|
## Status
|
|
1115
1115
|
|
|
1116
|
-
`1.5.
|
|
1116
|
+
`1.5.4` — **Step 5 now asks how the shipped feature will be watched.** The architecture artifact must
|
|
1117
|
+
carry a section headed exactly `Observability` answering what the feature logs, what it counts, what a
|
|
1118
|
+
failure looks like from outside, and who would notice. **"Nothing to observe" is a complete answer** —
|
|
1119
|
+
a pure refactor or a CI-only gate genuinely emits nothing, and a check that cannot express a true fact
|
|
1120
|
+
gets switched off. What is not acceptable is leaving the question unanswered. MEASURED before the
|
|
1121
|
+
change: the word appeared nowhere in the pipeline's prompts, and ZERO of 107 architecture artifacts
|
|
1122
|
+
carried such a section, while two fully-written observability skills (818 and 946 lines) sat
|
|
1123
|
+
unreachable because nothing called them. `dz score` reports the answer as a discipline — descriptive,
|
|
1124
|
+
never a gate, because the whole existing corpus predates the requirement.
|
|
1125
|
+
|
|
1126
|
+
Also in the bundled workflow: the K2 gate stops GUESSING the workspace. When it was not pinned, the
|
|
1127
|
+
workspace candidate was taken from the gate agent's own working directory, which against an external
|
|
1128
|
+
target repo resolved to that repo — so the candidate silently became a duplicate of the repo
|
|
1129
|
+
candidate and a skill installed in the workspace was never found (`NOT-ESTABLISHED`, exit 3, the
|
|
1130
|
+
coding step never ran). New `args.workspace` pins it, the shipped call site passes it, each candidate
|
|
1131
|
+
is labelled in the audit line, and a `K2_GATE_NOTE` fires when two collapse onto one path. And a
|
|
1132
|
+
pre-code probe that returns nothing no longer becomes an all-null baseline that later reads as
|
|
1133
|
+
"every target changed".
|
|
1134
|
+
|
|
1135
|
+
|
|
1136
|
+
`1.5.4` — **the workflow stops crashing on the way into Step 7.** `1.5.4` shipped a workflow that
|
|
1117
1137
|
CALLED three helpers it never defined — `changeSetProbeCmd`, `parseHashProbe`, `changedFromHashes`
|
|
1118
1138
|
(5 call sites, 0 definitions). `QE_SCOPE` defaults to `uncommitted`, so the guarded branch was true
|
|
1119
1139
|
by default and every ultracode run that reached the coding step died with a `ReferenceError` while
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dzhechkov/skills-feature-adr",
|
|
3
|
-
"version": "1.5.
|
|
3
|
+
"version": "1.5.4",
|
|
4
4
|
"description": "Adaptive Feature Development skill pack for Claude Code — 11-step pipeline with Complexity Router (S/M/L/XL), ADR-driven architecture, 15 agentic-qe skills, multi-agent fleet QE. Supports --full-qe, --full-qe-extended, --with-learning, and --knowledge-extractor modes.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"skills-feature-adr": "./bin/cli.js"
|
package/sbom.json
CHANGED
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"hashes": [
|
|
36
36
|
{
|
|
37
37
|
"alg": "SHA-256",
|
|
38
|
-
"content": "
|
|
38
|
+
"content": "eb5998619673f928f02b6b462278acfc4871387e1f6495ab0b613a965611cda7"
|
|
39
39
|
}
|
|
40
40
|
]
|
|
41
41
|
},
|
|
@@ -65,7 +65,7 @@
|
|
|
65
65
|
"hashes": [
|
|
66
66
|
{
|
|
67
67
|
"alg": "SHA-256",
|
|
68
|
-
"content": "
|
|
68
|
+
"content": "8e082526415c4ce4427c51dff222c248e29ef5fbdcd17f0d957c28d621738513"
|
|
69
69
|
}
|
|
70
70
|
]
|
|
71
71
|
},
|
|
@@ -365,7 +365,7 @@
|
|
|
365
365
|
"hashes": [
|
|
366
366
|
{
|
|
367
367
|
"alg": "SHA-256",
|
|
368
|
-
"content": "
|
|
368
|
+
"content": "4d20dbc85ea5bb93ca90fd8cd089255bab9c76a912ca3ad954f3a4bb670f3c45"
|
|
369
369
|
}
|
|
370
370
|
]
|
|
371
371
|
},
|
|
@@ -785,7 +785,7 @@
|
|
|
785
785
|
"hashes": [
|
|
786
786
|
{
|
|
787
787
|
"alg": "SHA-256",
|
|
788
|
-
"content": "
|
|
788
|
+
"content": "a6ff055d50f4eb5790dab36deee188e880eec1362188ec16a5504710294d87c3"
|
|
789
789
|
}
|
|
790
790
|
]
|
|
791
791
|
},
|
|
@@ -118,6 +118,32 @@ GET /api/v1/{resource}/:id
|
|
|
118
118
|
Errors: 401, 404
|
|
119
119
|
```
|
|
120
120
|
|
|
121
|
+
## Observability — a MANDATORY section of `05_architecture.md`
|
|
122
|
+
|
|
123
|
+
The artifact must carry a section headed exactly **`Observability`**, answering how anyone would
|
|
124
|
+
know this feature is working once it ships:
|
|
125
|
+
|
|
126
|
+
- what it **logs**, and at what level;
|
|
127
|
+
- what it **counts** — the one or two numbers that would move if it broke;
|
|
128
|
+
- what a **failure looks like from outside** — the symptom, not the stack trace;
|
|
129
|
+
- **who would notice**, and how.
|
|
130
|
+
|
|
131
|
+
If the feature genuinely emits nothing at runtime — a pure refactor, a doc change, a gate that only
|
|
132
|
+
runs in CI — write **"nothing to observe"** and say why. That is a complete answer, not a gap. What
|
|
133
|
+
is not acceptable is leaving the question unanswered.
|
|
134
|
+
|
|
135
|
+
The heading is read by a machine (`dz score` reports it as a discipline), so it is spelled exactly
|
|
136
|
+
`Observability` — the prompt above and the check derive that word from one shared constant, because
|
|
137
|
+
a prompt asking for one heading while a check greps another produces a gate that fails every honest
|
|
138
|
+
run.
|
|
139
|
+
|
|
140
|
+
**Why this section exists.** MEASURED 2026-08-25: across 107 existing `05_architecture.md` files,
|
|
141
|
+
ZERO carried such a section, and the word `observability` appeared nowhere in the pipeline's own
|
|
142
|
+
prompts. The pipeline kept five telemetry stores about itself and asked for none about what it
|
|
143
|
+
built. The two capable skills — `observability` (818 lines) and `observability-testing-patterns`
|
|
144
|
+
(946 lines) — were fully written and unreachable, because nothing called them. This section is the
|
|
145
|
+
call site.
|
|
146
|
+
|
|
121
147
|
## Write discipline (the 180-second rule)
|
|
122
148
|
|
|
123
149
|
An executor that returns from a tool call and then thinks in silence past **180 seconds** is killed by the
|
|
@@ -2125,7 +2125,7 @@ if (isMplus) {
|
|
|
2125
2125
|
designThunks.push(() => subCheckpoint('qcsd', qcsdPromptText, qcsdOpts, ['03.5_ideation_report.md'], () => designStage(qcsdPromptText, qcsdOpts, FDIR + '/03.5_ideation_report.md', 'qcsd')))
|
|
2126
2126
|
designPairMeta.push({ role: 'design:qcsd', prompt: qcsdPromptText, model: modelLabel(qcsdOpts), lessons: [] })
|
|
2127
2127
|
const archExtra = isLplus ? ' Also ' + FDIR + '/04_domain_model.md (DDD).' : ''
|
|
2128
|
-
const archPromptText = (isLplus ? 'Step 4 (DDD) + ' : '') + 'Step 5 (Architecture) of /feature-adr for "' + DESC + '" (' + SLUG + '). READ the code. Write ' + FDIR + '/05_architecture.md (components, data flow, integration points, the emit/merge/wiring shape).' + archExtra + ' Return wrote[] + summary.' + WRITE_DISCIPLINE
|
|
2128
|
+
const archPromptText = (isLplus ? 'Step 4 (DDD) + ' : '') + 'Step 5 (Architecture) of /feature-adr for "' + DESC + '" (' + SLUG + '). READ the code. Write ' + FDIR + '/05_architecture.md (components, data flow, integration points, the emit/merge/wiring shape). It MUST carry a section headed exactly "Observability" answering how anyone would know this feature is working once it ships: what it logs, what it counts, what a failure looks like from outside, and who would notice. If the feature genuinely emits nothing at runtime — a pure refactor, a CI-only gate — say "nothing to observe" and why; that is a complete answer, not a gap. What is not acceptable is leaving the question unanswered.' + archExtra + ' Return wrote[] + summary.' + WRITE_DISCIPLINE
|
|
2129
2129
|
designThunks.push(() => subCheckpoint('architecture', archPromptText, archOpts, ['05_architecture.md'].concat(isLplus ? ['04_domain_model.md'] : []), () => designStage(archPromptText, archOpts, FDIR + '/05_architecture.md', 'architecture')))
|
|
2130
2130
|
designPairMeta.push({ role: 'design:architecture', prompt: archPromptText, model: modelLabel(archOpts), lessons: [] })
|
|
2131
2131
|
}
|