@dzhechkov/skills-feature-adr 1.5.14 → 1.5.16
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 +18 -10
- package/README.md +55 -0
- package/package.json +2 -2
- package/sbom.json +29 -9
- package/templates/.claude/skills/feature-adr/SKILL.md +79 -1
- package/templates/.claude/skills/feature-adr/modules/03.5-ideation-swarm.md +129 -0
- package/templates/.claude/skills/feature-adr/modules/06-implementation-plan.md +10 -0
- package/templates/.claude/skills/feature-adr/modules/07-code.md +29 -0
- package/templates/.claude/skills/feature-adr/modules/08-qe.md +151 -1
- package/templates/.claude/skills/feature-adr/scripts/build-coder-context.mjs +201 -0
- package/templates/.claude/skills/feature-adr/scripts/check-plan-completeness.mjs +107 -26
- package/templates/.claude/skills/feature-adr/scripts/check-review-convergence.mjs +316 -0
- package/templates/.claude/workflows/feature-adr.js +219 -16
package/.dz-manifest.json
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
},
|
|
14
14
|
{
|
|
15
15
|
"path": "README.md",
|
|
16
|
-
"sha256": "
|
|
16
|
+
"sha256": "a76e2b71dd2598d4d6789ee00ce99791d4e4927466f4800e5637c4bbbade859e"
|
|
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": "d9af637b1b430a77811424de145ff5a72eceff10b7a583413affa4899c877b8e"
|
|
29
29
|
},
|
|
30
30
|
{
|
|
31
31
|
"path": "src/cli.js",
|
|
@@ -113,7 +113,7 @@
|
|
|
113
113
|
},
|
|
114
114
|
{
|
|
115
115
|
"path": "templates/.claude/skills/feature-adr/SKILL.md",
|
|
116
|
-
"sha256": "
|
|
116
|
+
"sha256": "28c265603481f976a52ea4c627e11194f3c0283801ea93d02cbb9f4248b43c68"
|
|
117
117
|
},
|
|
118
118
|
{
|
|
119
119
|
"path": "templates/.claude/skills/feature-adr/examples/sample-feature-output.md",
|
|
@@ -137,7 +137,7 @@
|
|
|
137
137
|
},
|
|
138
138
|
{
|
|
139
139
|
"path": "templates/.claude/skills/feature-adr/modules/03.5-ideation-swarm.md",
|
|
140
|
-
"sha256": "
|
|
140
|
+
"sha256": "b6e505083c1b8bc92243379b72ff4667b5b91ef65fd9c2ef7407129018b3e56b"
|
|
141
141
|
},
|
|
142
142
|
{
|
|
143
143
|
"path": "templates/.claude/skills/feature-adr/modules/04-ddd.md",
|
|
@@ -149,15 +149,15 @@
|
|
|
149
149
|
},
|
|
150
150
|
{
|
|
151
151
|
"path": "templates/.claude/skills/feature-adr/modules/06-implementation-plan.md",
|
|
152
|
-
"sha256": "
|
|
152
|
+
"sha256": "d7a2a4e56b24451da234b1ac4ef440ba9b0370617e1c0cde8ad5f3d575a53209"
|
|
153
153
|
},
|
|
154
154
|
{
|
|
155
155
|
"path": "templates/.claude/skills/feature-adr/modules/07-code.md",
|
|
156
|
-
"sha256": "
|
|
156
|
+
"sha256": "db79f8d026cc47edd1e5d2f30d0e1455c55c570dd022d549d440985a3e5940a5"
|
|
157
157
|
},
|
|
158
158
|
{
|
|
159
159
|
"path": "templates/.claude/skills/feature-adr/modules/08-qe.md",
|
|
160
|
-
"sha256": "
|
|
160
|
+
"sha256": "4aa7ef1dea08b8d1995d968a317da5d36a4859ec299637bdc60170cf577c87af"
|
|
161
161
|
},
|
|
162
162
|
{
|
|
163
163
|
"path": "templates/.claude/skills/feature-adr/modules/09-fleet-qe.md",
|
|
@@ -247,9 +247,17 @@
|
|
|
247
247
|
"path": "templates/.claude/skills/feature-adr/references/qe-checklist.md",
|
|
248
248
|
"sha256": "238d8896996dc53559f58b24aa7eca966cc8845c3b9dda6d982c717c657b91e4"
|
|
249
249
|
},
|
|
250
|
+
{
|
|
251
|
+
"path": "templates/.claude/skills/feature-adr/scripts/build-coder-context.mjs",
|
|
252
|
+
"sha256": "19c3991bfb5e88205c9ff6d4d44037c136a190581bab199d3928196e4616fe15"
|
|
253
|
+
},
|
|
250
254
|
{
|
|
251
255
|
"path": "templates/.claude/skills/feature-adr/scripts/check-plan-completeness.mjs",
|
|
252
|
-
"sha256": "
|
|
256
|
+
"sha256": "8b93949ce4f671d932c5389050db3a3e2750efcbed69681d69f392ccf4d2a168"
|
|
257
|
+
},
|
|
258
|
+
{
|
|
259
|
+
"path": "templates/.claude/skills/feature-adr/scripts/check-review-convergence.mjs",
|
|
260
|
+
"sha256": "80f9691b8e94bf310461aeaaaa23af6e336d41d0962fdf137737639655cbdeb8"
|
|
253
261
|
},
|
|
254
262
|
{
|
|
255
263
|
"path": "templates/.claude/skills/feature-adr/scripts/markdown-masker.mjs",
|
|
@@ -317,7 +325,7 @@
|
|
|
317
325
|
},
|
|
318
326
|
{
|
|
319
327
|
"path": "templates/.claude/workflows/feature-adr.js",
|
|
320
|
-
"sha256": "
|
|
328
|
+
"sha256": "6f9e6205c8f78bef8086603bf0efe8099011a2cc273d786b8404bd77af565354"
|
|
321
329
|
},
|
|
322
330
|
{
|
|
323
331
|
"path": "templates/lib/memory-protocol.md",
|
|
@@ -329,5 +337,5 @@
|
|
|
329
337
|
}
|
|
330
338
|
]
|
|
331
339
|
},
|
|
332
|
-
"signature": "+
|
|
340
|
+
"signature": "nV5vsSwCCTR5hUAMHmxpGPe3DoZoRQJsnAdqqm4gO0OPm1GHMWBx5AZhJEC1jzUugamIpkJEPtWCsD6d+e0oAg=="
|
|
333
341
|
}
|
package/README.md
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
# @dzhechkov/skills-feature-adr
|
|
2
2
|
|
|
3
|
+
Current package version: `1.5.16`. <!-- dz:version -->
|
|
4
|
+
|
|
5
|
+
Site: https://aicoding.space · Source: https://github.com/djd1m/dz-harness/tree/main/packages/@dzhechkov/skills-feature-adr
|
|
6
|
+
|
|
3
7
|
**Spec-Driven Development pipeline for AI coding agents (Claude Code, Codex, …)**
|
|
4
8
|
|
|
5
9
|
An 11-step, complexity-routed pipeline that makes an AI coding agent build a feature the way a
|
|
@@ -37,6 +41,21 @@ npx @dzhechkov/skills-feature-adr init
|
|
|
37
41
|
|
|
38
42
|
After installation, open Claude Code in your project directory and use `/feature-adr`.
|
|
39
43
|
|
|
44
|
+
Plain usage guidance joins the existing stage writer to `usage --by-stage --project` with explicit FA/
|
|
45
|
+
Wf source selection and observed receipt IDs. It preserves unknown splits/prices, caller estimates and
|
|
46
|
+
separate conservation/inventory/source verification. No billing inference, new ledger or paid replay.
|
|
47
|
+
|
|
48
|
+
Plain Step 8 bridge guidance now passes current `--round`, `--round-run` and `--task` from the existing
|
|
49
|
+
round receipt with the execution `--project`. Explicit conflicts refuse before reviewer work; the
|
|
50
|
+
bridge's invocation `runId` stays distinct from pipeline identity. Native Workflow QE remains its own
|
|
51
|
+
review path. Historical window correlation is disclosed as lower assurance, without guessed identity.
|
|
52
|
+
|
|
53
|
+
Step 7 uses the installed `scripts/build-coder-context.mjs` helper to include literal requirements,
|
|
54
|
+
plan tasks and ADR Decision/Confirmation. Workflow reads current inputs before code checkpoint
|
|
55
|
+
lookup; plain coding runs the same helper and reads or embeds its successful `promptBlock`.
|
|
56
|
+
Missing required sections, invalid files and exceeded UTF-8 bounds refuse coding instead of trimming
|
|
57
|
+
the context. Existing decision recall and code-wrapper routing remain in place.
|
|
58
|
+
|
|
40
59
|
---
|
|
41
60
|
|
|
42
61
|
## What You Get
|
|
@@ -1363,3 +1382,39 @@ harness-core's `src/markdown-masker.ts`. It runs without a core build. Amendment
|
|
|
1363
1382
|
and K2 share the parser while retaining their existing unclosed-block and indentation policies.
|
|
1364
1383
|
The four-space indented-code gap remains open for amendment checks and K2; swarm briefs retain their
|
|
1365
1384
|
existing masking of indented code. Versions are unchanged in this staged change.
|
|
1385
|
+
|
|
1386
|
+
### Codex companion for feature-adr
|
|
1387
|
+
|
|
1388
|
+
`dz statusline --watch --project "/path/to/worktree" --brain "/path/to/shared-brain"
|
|
1389
|
+
--slug "feature-slug" --run-id "stable-run-id"` adds an explicitly launched adjacent terminal
|
|
1390
|
+
companion, including Plain runs. Until installed, invoke the worktree-built
|
|
1391
|
+
`node packages/@dzhechkov/harness-cli/dist/bin.js statusline --watch ...`. This extends the existing
|
|
1392
|
+
command inventory. Canonical feature-adr guidance supplies the quoted producer/observer recipe: record
|
|
1393
|
+
a stable run ID and actual tier at the START of each step, then `done` on real completion; recall/teach
|
|
1394
|
+
remain scoped to the shared brain. Project run state and brain counts are separate. One slug retains
|
|
1395
|
+
one latest run; report freshness is not process liveness and stage position is not passed gates.
|
|
1396
|
+
|
|
1397
|
+
The readonly companion requires a dedicated stdout TTY, uses serial 2-second refreshes (0.25–60
|
|
1398
|
+
allowed), sanitizes/clips text and handles resize. Below 40x8 it shows a size warning. Ctrl-C/SIGTERM
|
|
1399
|
+
exit 0; output failure 1; invalid/piped watch 2. Failed/absent counts and optional values are explicit;
|
|
1400
|
+
watch v1 ETA is unavailable and global source inventory omitted. No stdin/raw mode, models, logical
|
|
1401
|
+
store writes or automatic terminal/settings changes. Normal SQLite ephemeral WAL/SHM sidecars are
|
|
1402
|
+
permitted. One-shot Claude text/JSON/ETA remain unchanged. Codex native footer capability is not
|
|
1403
|
+
asserted; parity names manual `dz statusline --watch` access.
|
|
1404
|
+
|
|
1405
|
+
|
|
1406
|
+
Review convergence in `/feature-adr` now uses one installed Node gate in Plain and native Workflow.
|
|
1407
|
+
Step 3.5 closes before planning; Step 8 closes before completion and delivery, including S tier and
|
|
1408
|
+
resumed runs. The host measures current artifact bytes and preserves originating reviewer conditions;
|
|
1409
|
+
focused rework includes an explicit author delta/new-risk assessment and independent own-condition
|
|
1410
|
+
verification. Serious primary or precision findings remain visible at the round ceiling.
|
|
1411
|
+
|
|
1412
|
+
Missing or stale receipts, legacy resume, unavailable reviewers and read-only Codex mode A pause
|
|
1413
|
+
with host-driven repair instructions. Parallel native design can require focused review after sibling
|
|
1414
|
+
artifacts settle. Clean initial supported review closes without invented conditions or an extra review.
|
|
1415
|
+
This is a receipt consistency/freshness gate, not reviewer authentication or semantic proof; existing
|
|
1416
|
+
Confirmation, scope, family and budget gates still apply. No automatic repair loop or new CLI command.
|
|
1417
|
+
|
|
1418
|
+
Repeated prepare retains all pending paths until verified closure. Actual fallback families bind before dispatch while prior owners remain required. Same-slug QE repair uses current own-reviewer evidence bound to the complete historical checkpoint; original findings/grades remain visible, and failed Confirmation still blocks delivery.
|
|
1419
|
+
|
|
1420
|
+
Before fallback, host prepare retains independently written pending receipt findings under the original owner even if that reviewer returned null. Unreconciled pending evidence pauses dispatch for originating-reviewer repair; it cannot be replaced by a clean fallback to obtain closure.
|
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.16",
|
|
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"
|
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
"url": "git+https://github.com/djd1m/dz-harness.git",
|
|
50
50
|
"directory": "packages/@dzhechkov/skills-feature-adr"
|
|
51
51
|
},
|
|
52
|
-
"homepage": "https://
|
|
52
|
+
"homepage": "https://aicoding.space",
|
|
53
53
|
"bugs": {
|
|
54
54
|
"url": "https://github.com/djd1m/dz-harness/issues"
|
|
55
55
|
},
|
package/sbom.json
CHANGED
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"hashes": [
|
|
36
36
|
{
|
|
37
37
|
"alg": "SHA-256",
|
|
38
|
-
"content": "
|
|
38
|
+
"content": "a76e2b71dd2598d4d6789ee00ce99791d4e4927466f4800e5637c4bbbade859e"
|
|
39
39
|
}
|
|
40
40
|
]
|
|
41
41
|
},
|
|
@@ -69,7 +69,7 @@
|
|
|
69
69
|
},
|
|
70
70
|
{
|
|
71
71
|
"name": "dz:canonical-json-sha256-v2",
|
|
72
|
-
"value": "
|
|
72
|
+
"value": "d9af637b1b430a77811424de145ff5a72eceff10b7a583413affa4899c877b8e"
|
|
73
73
|
}
|
|
74
74
|
]
|
|
75
75
|
},
|
|
@@ -289,7 +289,7 @@
|
|
|
289
289
|
"hashes": [
|
|
290
290
|
{
|
|
291
291
|
"alg": "SHA-256",
|
|
292
|
-
"content": "
|
|
292
|
+
"content": "28c265603481f976a52ea4c627e11194f3c0283801ea93d02cbb9f4248b43c68"
|
|
293
293
|
}
|
|
294
294
|
]
|
|
295
295
|
},
|
|
@@ -349,7 +349,7 @@
|
|
|
349
349
|
"hashes": [
|
|
350
350
|
{
|
|
351
351
|
"alg": "SHA-256",
|
|
352
|
-
"content": "
|
|
352
|
+
"content": "b6e505083c1b8bc92243379b72ff4667b5b91ef65fd9c2ef7407129018b3e56b"
|
|
353
353
|
}
|
|
354
354
|
]
|
|
355
355
|
},
|
|
@@ -379,7 +379,7 @@
|
|
|
379
379
|
"hashes": [
|
|
380
380
|
{
|
|
381
381
|
"alg": "SHA-256",
|
|
382
|
-
"content": "
|
|
382
|
+
"content": "d7a2a4e56b24451da234b1ac4ef440ba9b0370617e1c0cde8ad5f3d575a53209"
|
|
383
383
|
}
|
|
384
384
|
]
|
|
385
385
|
},
|
|
@@ -389,7 +389,7 @@
|
|
|
389
389
|
"hashes": [
|
|
390
390
|
{
|
|
391
391
|
"alg": "SHA-256",
|
|
392
|
-
"content": "
|
|
392
|
+
"content": "db79f8d026cc47edd1e5d2f30d0e1455c55c570dd022d549d440985a3e5940a5"
|
|
393
393
|
}
|
|
394
394
|
]
|
|
395
395
|
},
|
|
@@ -399,7 +399,7 @@
|
|
|
399
399
|
"hashes": [
|
|
400
400
|
{
|
|
401
401
|
"alg": "SHA-256",
|
|
402
|
-
"content": "
|
|
402
|
+
"content": "4aa7ef1dea08b8d1995d968a317da5d36a4859ec299637bdc60170cf577c87af"
|
|
403
403
|
}
|
|
404
404
|
]
|
|
405
405
|
},
|
|
@@ -623,13 +623,33 @@
|
|
|
623
623
|
}
|
|
624
624
|
]
|
|
625
625
|
},
|
|
626
|
+
{
|
|
627
|
+
"type": "file",
|
|
628
|
+
"name": "templates/.claude/skills/feature-adr/scripts/build-coder-context.mjs",
|
|
629
|
+
"hashes": [
|
|
630
|
+
{
|
|
631
|
+
"alg": "SHA-256",
|
|
632
|
+
"content": "19c3991bfb5e88205c9ff6d4d44037c136a190581bab199d3928196e4616fe15"
|
|
633
|
+
}
|
|
634
|
+
]
|
|
635
|
+
},
|
|
626
636
|
{
|
|
627
637
|
"type": "file",
|
|
628
638
|
"name": "templates/.claude/skills/feature-adr/scripts/check-plan-completeness.mjs",
|
|
629
639
|
"hashes": [
|
|
630
640
|
{
|
|
631
641
|
"alg": "SHA-256",
|
|
632
|
-
"content": "
|
|
642
|
+
"content": "8b93949ce4f671d932c5389050db3a3e2750efcbed69681d69f392ccf4d2a168"
|
|
643
|
+
}
|
|
644
|
+
]
|
|
645
|
+
},
|
|
646
|
+
{
|
|
647
|
+
"type": "file",
|
|
648
|
+
"name": "templates/.claude/skills/feature-adr/scripts/check-review-convergence.mjs",
|
|
649
|
+
"hashes": [
|
|
650
|
+
{
|
|
651
|
+
"alg": "SHA-256",
|
|
652
|
+
"content": "80f9691b8e94bf310461aeaaaa23af6e336d41d0962fdf137737639655cbdeb8"
|
|
633
653
|
}
|
|
634
654
|
]
|
|
635
655
|
},
|
|
@@ -799,7 +819,7 @@
|
|
|
799
819
|
"hashes": [
|
|
800
820
|
{
|
|
801
821
|
"alg": "SHA-256",
|
|
802
|
-
"content": "
|
|
822
|
+
"content": "6f9e6205c8f78bef8086603bf0efe8099011a2cc273d786b8404bd77af565354"
|
|
803
823
|
}
|
|
804
824
|
]
|
|
805
825
|
},
|
|
@@ -562,13 +562,91 @@ only the statusline:
|
|
|
562
562
|
|
|
563
563
|
**Record the panel at the START of every step, not only at Steps 0/8/9.** The panel shows the last step
|
|
564
564
|
that reported; a pipeline that reports three times per run shows a stale step for most of its life. Emit
|
|
565
|
-
`dz statusline --fa-record --slug <slug> --step "<Step N Name>" --recalled <n> --stored <n>` as the first
|
|
565
|
+
`dz statusline --fa-record --project "<worktree>" --slug "<slug>" --run-id "<stable-run-id>" --tier M --step "<Step N Name>" --recalled <n> --stored <n>` as the first
|
|
566
566
|
action of each step. The recall/teach counts only change at Steps 0/8/9; the *step label* changes at every
|
|
567
567
|
one of them.
|
|
568
568
|
|
|
569
569
|
*Honesty note:* the panel is live only insofar as the pipeline records state — it reflects what the
|
|
570
570
|
pipeline actually did with the loop (recalls that ran, stores that landed), not an aspirational count.
|
|
571
571
|
|
|
572
|
+
### Plain observed usage receipts
|
|
573
|
+
|
|
574
|
+
Use the existing witnessed writer for usage you actually observed. At a real stage boundary,
|
|
575
|
+
capture the execution project, stable run/task, verbatim stage, actual model/family/role, attempt,
|
|
576
|
+
tier/mode and source window/IDs available to this host. Missing fields remain null with their reason;
|
|
577
|
+
do not infer input/cache from total, price from a model family, or tokens from invocation budgets.
|
|
578
|
+
|
|
579
|
+
```bash
|
|
580
|
+
dz feature-adr-record --kind ledger --stage "$CURRENT_STAGE" --project "$EXECUTION_PROJECT" \
|
|
581
|
+
--row "$OBSERVED_STAGE_ROW_JSON" --rollout-id "$ACTUAL_SESSION_ID" --turn-id "$ACTUAL_TURN_ID" --json
|
|
582
|
+
dz usage --by-stage --project "$EXECUTION_PROJECT" --source fa-ledger --run "$STABLE_RUN_ID" --json
|
|
583
|
+
```
|
|
584
|
+
|
|
585
|
+
`OBSERVED_STAGE_ROW_JSON` is real host metadata: `runId`, `taskId`, `stage`, `model`, `family`, `role`,
|
|
586
|
+
`attempt`, `tier`, `mode`, `tokens`/dimensions when observed, and optional separate `estimate` with
|
|
587
|
+
tokens/costUsd/method/source/capturedAt. Omit selectors not known; window/cwd/model-only correlation
|
|
588
|
+
is labelled legacy-window and cannot claim exact source verification. Source roots can be named with
|
|
589
|
+
`--codex-sessions`. Exact IDs are validated against existing receipts; no new IDs or recall/teach occur.
|
|
590
|
+
The source receipt subset is captured once; later source append cannot enlarge the old row.
|
|
591
|
+
Captured payload integrity and every pricing-bearing dimension must match the original scoped source.
|
|
592
|
+
A reported monetary amount belongs to one observation, not each expanded token receipt. Preserve an
|
|
593
|
+
actual observation ID/scope/basis in optional `reportedCostObservation: { id, scope, basis }` within
|
|
594
|
+
`--row` when known; otherwise a captured source scope supplies a stable identity and unrelated money
|
|
595
|
+
attribution stays unavailable. Reimports of the same observation count once; conflicting amounts are
|
|
596
|
+
diagnosed. Missing money differs from zero. Exports must avoid every selected authoritative source,
|
|
597
|
+
including custom run directories and symlink aliases. Invalid Claude counters retain nulls/diagnostics;
|
|
598
|
+
a declared invalid total cannot derive a replacement, and accounting validity does not rewrite the
|
|
599
|
+
actual generation outcome.
|
|
600
|
+
|
|
601
|
+
For Wf, use `--source workflow-budget --run <id>` and optional `--run-dir <dir>` for its existing
|
|
602
|
+
budget/trace/state. Auto source collisions require an explicit source; joined Wf summary projections
|
|
603
|
+
never add another cost. Preserve reported total basis and cache/reasoning subsets. Wf budget.spent
|
|
604
|
+
counts dispatch units; native Workflow's existing budget delta is output-only. Neither is raw total.
|
|
605
|
+
|
|
606
|
+
Reports separate conservation, expected inventory and independent amount verification. Without
|
|
607
|
+
a same-scope witness, verified totals are null even when reported values conserve. Unknown rates or
|
|
608
|
+
split keep primary estimated USD null; static family estimates, provider-reported USD and caller
|
|
609
|
+
pre-run estimates are separate, never current exact prices or billed amounts. Billing remains unobserved.
|
|
610
|
+
|
|
611
|
+
### Codex companion terminal (Plain included)
|
|
612
|
+
|
|
613
|
+
Open an adjacent terminal or a manual tmux split and launch the observer explicitly. Codex does not
|
|
614
|
+
have a dz native command-provider footer. Keep the producer's project, slug and stable run ID equal to
|
|
615
|
+
the observer's; use the actual complexity tier at the START of every active step. Brain is the shared
|
|
616
|
+
learning store for recall/teach, while project is the worktree containing run slots and branch.
|
|
617
|
+
|
|
618
|
+
```bash
|
|
619
|
+
# Set these to your actual absolute paths. Use the worktree build until the change is installed.
|
|
620
|
+
PANEL_CLI="/path/to/worktree/packages/@dzhechkov/harness-cli/dist/bin.js"
|
|
621
|
+
PANEL_PROJECT="/path/to/worktree"
|
|
622
|
+
PANEL_BRAIN="/path/to/canonical-brain"
|
|
623
|
+
PANEL_SLUG="feature-slug"
|
|
624
|
+
PANEL_RUN="feature-20261002-1" # choose once per invocation, retain at every step
|
|
625
|
+
node "$PANEL_CLI" statusline --watch --project "$PANEL_PROJECT" --brain "$PANEL_BRAIN" \
|
|
626
|
+
--slug "$PANEL_SLUG" --run-id "$PANEL_RUN" --interval 2
|
|
627
|
+
# In the producer terminal, at the START of each real step (example: tier M):
|
|
628
|
+
node "$PANEL_CLI" statusline --fa-record --project "$PANEL_PROJECT" --slug "$PANEL_SLUG" \
|
|
629
|
+
--run-id "$PANEL_RUN" --tier M --step "Step 7 Code" --recalled 3 --stored 0
|
|
630
|
+
# Only after the run actually completes; this is not a claim that QE passed:
|
|
631
|
+
node "$PANEL_CLI" statusline --fa-record --project "$PANEL_PROJECT" --slug "$PANEL_SLUG" \
|
|
632
|
+
--run-id "$PANEL_RUN" --tier M --step "done" --recalled 3 --stored 0
|
|
633
|
+
```
|
|
634
|
+
|
|
635
|
+
Use `dz recall ... --project "$PANEL_BRAIN"` and `dz teach ... --project "$PANEL_BRAIN"` for actual
|
|
636
|
+
learning. Supply measured cumulative counters, not the example numbers. The observer counts its brain
|
|
637
|
+
source directly; the slot's producer pool is not a shared-brain inventory. One slug holds one latest
|
|
638
|
+
run, so a replacement makes an exact old selection missing. No selectors means visibly automatic
|
|
639
|
+
selection. Freshness measures producer-report age, not process liveness: fresh <30 minutes, stale
|
|
640
|
+
30–<90, expired >=90; completed remains completed. Stage position is not completed gates.
|
|
641
|
+
|
|
642
|
+
Watch v1 displays ETA unavailable, unknown optional values and unavailable failed/absent learning
|
|
643
|
+
sources, and omits ambiguous global source inventory. It uses escaped ASCII text, a dedicated stdout
|
|
644
|
+
TTY, 0.25–60 second intervals (default 2), and a size warning below 40 columns/8 rows. Ctrl-C/SIGTERM
|
|
645
|
+
exit 0; output failures exit 1; piped output and watch+JSON/install/record combinations exit 2.
|
|
646
|
+
Observation never reads stdin, runs models or writes logical store state. SQLite-managed ephemeral
|
|
647
|
+
WAL/SHM files are permitted; no application locks, repair or schema changes occur. One-shot Claude
|
|
648
|
+
statusline/JSON and its ETA keep their existing behavior. Do not start a terminal automatically.
|
|
649
|
+
|
|
572
650
|
### What changes with `--full-qe`
|
|
573
651
|
|
|
574
652
|
Full agentic-qe protocols for the same 9 core skills. No new agents, just deeper methodology.
|
|
@@ -27,6 +27,135 @@ sonnet (analytical quality assessment — multiple parallel agents)
|
|
|
27
27
|
|
|
28
28
|
## Protocol
|
|
29
29
|
|
|
30
|
+
## Review convergence gate (Plain and native Workflow)
|
|
31
|
+
|
|
32
|
+
Review follows **initial review → host rework → focused verification → closure**, or explicit owner
|
|
33
|
+
escalation. A grade/GO label does not establish closure. Run the same installed Node gate before
|
|
34
|
+
planning (phase `ideation`) and before Step-8 completion/delivery (phase `qe`), including resume.
|
|
35
|
+
|
|
36
|
+
The host prepares a measured artifact snapshot BEFORE independent review. Resolve the executable
|
|
37
|
+
from this installed skill's `scripts/check-review-convergence.mjs`; do not use a scratch replacement.
|
|
38
|
+
For example, from the execution project, using the actual originating role/family:
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
node "$FEATURE_ADR_SKILL/scripts/check-review-convergence.mjs" prepare \
|
|
42
|
+
--repo "$EXECUTION_PROJECT" --feature "features/$FEATURE_SLUG" --phase ideation \
|
|
43
|
+
--reviewers '[{"id":"qcsd-quality","family":"owner-exception"},{"id":"qcsd-risk","family":"owner-exception"},{"id":"qcsd-testability","family":"owner-exception"}]'
|
|
44
|
+
node "$FEATURE_ADR_SKILL/scripts/check-review-convergence.mjs" evaluate \
|
|
45
|
+
--repo "$EXECUTION_PROJECT" --feature "features/$FEATURE_SLUG" --phase ideation
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
For QE use `--phase qe` and the actual `qe-primary` reviewer, plus `qe-precision` when configured.
|
|
49
|
+
`family` is `codex`, `claude`, or an explicitly authorized `owner-exception`. Existing family/routing
|
|
50
|
+
policy remains binding; this receipt does not authorize an exception. Only the host calls `prepare`.
|
|
51
|
+
It retains originating reviewer roles and prior condition meanings in the existing feature checkpoint
|
|
52
|
+
`.fa-state/review-convergence-<phase>-host.json`; neither the latest report nor an empty request array
|
|
53
|
+
can replace that lineage. Do not edit/delete host lineage to obtain a clean bootstrap. A new nonce is
|
|
54
|
+
issued when measured bytes/path membership change; repeated preparation cannot remove conditions. Pending changed paths accumulate across every prepare, including path additions/deletions, until an established closure; failed/refused evaluations never clear them.
|
|
55
|
+
|
|
56
|
+
The snapshot measures requirements, every direct ADR, architecture, and other available design
|
|
57
|
+
inputs. QE also measures the plan, ideation report, every declared target, and host-discovered Git
|
|
58
|
+
changes/additions/deletions against `.fa-state/base-ref` (HEAD when absent). Receipt/checkpoint files,
|
|
59
|
+
QE report and generated `architecture/map.json` are outputs excluded to avoid circular hashes.
|
|
60
|
+
Explicit planned deletions carry a null digest. Traversal, symlinks and non-files refuse. The host
|
|
61
|
+
must include relevant unchanged dependencies in declared targets; hashing cannot discover semantic
|
|
62
|
+
dependencies. Parallel Workflow design may change after ideation review: that stale review pauses
|
|
63
|
+
before planning and needs focused review of the settled snapshot.
|
|
64
|
+
|
|
65
|
+
All three QCSD core roles remain originating reviewers. The coordinator does not manufacture their
|
|
66
|
+
receipts from grades or report prose. The JSON example below shows one entry; include all three
|
|
67
|
+
actual roles in `reviews`, with their actual families. Each independent reviewer writes its OWN
|
|
68
|
+
entry, preserving other reviewer entries and the actual
|
|
69
|
+
author handoff, in `.fa-state/review-convergence-<phase>-review.json`. A genuinely clean initial
|
|
70
|
+
review needs no invented condition or extra review. Its complete receipt shape is:
|
|
71
|
+
|
|
72
|
+
```json
|
|
73
|
+
{
|
|
74
|
+
"schema": "fa-review-convergence-1", "phase": "ideation",
|
|
75
|
+
"nonce": "<copy host snapshot nonce>", "revision": "<copy host snapshot revision>",
|
|
76
|
+
"author": null,
|
|
77
|
+
"reviews": [{
|
|
78
|
+
"reviewer": "qcsd-quality", "family": "owner-exception", "independent": true, "verdict": "clean",
|
|
79
|
+
"conditions": [], "verifications": [],
|
|
80
|
+
"newRisks": {"assessment": "none identified after complete scope review", "evidence": "<actual review evidence>", "conditions": []},
|
|
81
|
+
"authorAssessmentChecked": false, "deltaVerification": null
|
|
82
|
+
}]
|
|
83
|
+
}
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
`verdict` is `clean`, `conditional`, or `no-go`. Conditions have closed fields
|
|
87
|
+
`{id, owner, severity, classification, requirement, scope, evidence}`: stable unique ID, originating
|
|
88
|
+
role ID, BLOCKER/CRITICAL/HIGH/WARNING/SUGGESTION, structural/wording, exact acceptance meaning,
|
|
89
|
+
nonempty repo-relative scope paths, and original evidence. Carry every prior own condition unchanged
|
|
90
|
+
on every pass. Reviewer verifications have closed fields
|
|
91
|
+
`{id, revision, classification, evidence, implementationVerified}`. Only the originating independent
|
|
92
|
+
role can verify its own condition at the current revision; author/lead/scribe assertions cannot.
|
|
93
|
+
|
|
94
|
+
Rework requires the actual author object
|
|
95
|
+
`{addressed, changedScope, classification, delta, evidence, newRisks}`. Addressed IDs name prior
|
|
96
|
+
conditions; changedScope includes ALL host-measured changes and affected dependencies. Delta/evidence
|
|
97
|
+
explain the actual fix. Both author and reviewer `newRisks` require explicit assessment/evidence and a
|
|
98
|
+
conditions array, including an explicit none-identified assessment when empty. The reviewer must set
|
|
99
|
+
`authorAssessmentChecked:true` and supply independent
|
|
100
|
+
`deltaVerification:{classification,evidence,implementationVerified}`. Structural changes affect
|
|
101
|
+
behavior, contracts, safeguards, architecture or acceptance meaning and require affected implementation
|
|
102
|
+
and test verification. Wording changes affect expression only; the independent reviewer checks that
|
|
103
|
+
classification, so an author's wording label cannot weaken structural verification.
|
|
104
|
+
|
|
105
|
+
Focused scope is outstanding conditions plus actual changes and affected dependencies. New serious
|
|
106
|
+
risks always expand that scope. Retain ALL conditions and serious primary/precision findings until
|
|
107
|
+
own-reviewer verification; a token/round ceiling escalates unresolved risk, never approves it.
|
|
108
|
+
|
|
109
|
+
Gate exits: 0 with `prepared` (prepare only) or `closed` (evaluate only); 1 `unresolved`; 3
|
|
110
|
+
`not-established`. Inspect the structured reasons/unresolved IDs. Missing executable/report, malformed
|
|
111
|
+
or contradictory output, foreign/duplicate/omitted conditions, stale phase/nonce/manifest or unavailable
|
|
112
|
+
reviewer refuses. Native Workflow strictly checks stdout AND exit before planning and before
|
|
113
|
+
completion/delivery/success tags. Supported native/Mode-B/fallback/precision reviewers receive this
|
|
114
|
+
contract; the read-only Codex mode-A route cannot accept it and pauses for a supported independent
|
|
115
|
+
review. A scribe never creates reviewer evidence from grade. Historical resume without this contract
|
|
116
|
+
needs fresh evidence; resume rechecks bytes and every configured route, including unwitnessed precision.
|
|
117
|
+
|
|
118
|
+
Host prepare first reads the existing reviewer receipt, including valid partial own entries written
|
|
119
|
+
before an agent/transport failure. It preserves independently written conditions under their original
|
|
120
|
+
role/family before binding any actual fallback. This imports findings, never closure or author/scribe
|
|
121
|
+
claims. A stale receipt cannot originate new host conditions; known prior meanings remain immutable.
|
|
122
|
+
`pending-reviewer-receipt-needs-origin-review` pauses before native fallback dispatch when pending
|
|
123
|
+
evidence cannot be reconciled. Keep the original receipt and host lineage. Have its originating
|
|
124
|
+
reviewer repair malformed/foreign fields or refresh unknown stale own findings at the unchanged
|
|
125
|
+
host identity/current snapshot. Repeat prepare for the selected actual base-role families, complete
|
|
126
|
+
the returned full reviewer roster with actual own verification, then evaluate and resume the same
|
|
127
|
+
slug. No receipt/lineage deletion or relabeling is a recovery action. The existing QE checkpoint
|
|
128
|
+
validator rejects a paused non-QE result, so same-slug resume re-enters only that reviewer stage;
|
|
129
|
+
unrelated coder checkpoints remain eligible for reuse.
|
|
130
|
+
|
|
131
|
+
Bind the actual fallback family with host prepare BEFORE reviewer dispatch. An unused role may change family; once review evidence originated, its role/family and prior conditions remain required, and the new family receives a distinct `<base-id>:<family>` role. Reviewers read the returned full roster and never relabel old ownership.
|
|
132
|
+
|
|
133
|
+
On refusal, the host settles artifacts, calls prepare with the selected actual base-role families, supplies
|
|
134
|
+
the author handoff, requests focused own-condition verification, then evaluates and resumes the same
|
|
135
|
+
slug. This is host-driven repair, not an automatic repair loop. Existing Confirmation, amendment,
|
|
136
|
+
scope, testing, independent-family and budget gates remain conjunctive. This gate establishes receipt
|
|
137
|
+
consistency and current artifact binding, not semantic truth or authenticated reviewer identity.
|
|
138
|
+
|
|
139
|
+
For a same-slug QE resume blocked by historical serious findings, read-only mode A, or an
|
|
140
|
+
unwitnessed precision append, preserve the complete original checkpoint, findings and grades.
|
|
141
|
+
Prepare returns `checkpointDigest`: SHA-256 of `JSON.stringify` of the latest `qe` result in
|
|
142
|
+
`.fa-state/checkpoints.jsonl`. Each actual originating reviewer supplies optional closed-field
|
|
143
|
+
`checkpointVerification:{checkpointDigest,evidence,supported:true,route,findings,reportDigest}`
|
|
144
|
+
in its own review entry, in addition to the ordinary current-revision independent verification.
|
|
145
|
+
`route` is native/mode-b/fallback and evidence describes the actual supported focused review;
|
|
146
|
+
mode A, author/scribe flags, or the old grade cannot establish this proof. `findings` maps EVERY
|
|
147
|
+
original serious gap with `{digest,conditionId}`, where digest is SHA-256(JSON.stringify(gap))
|
|
148
|
+
and conditionId names that reviewer's preserved serious condition with its current structural
|
|
149
|
+
implementation verification. Both primary and precision origins must verify their own findings.
|
|
150
|
+
Use `reportDigest:null` normally; an unwitnessed precision append requires that originating
|
|
151
|
+
precision reviewer to verify the actual complete `08_qe_report.md` and supply its SHA-256.
|
|
152
|
+
The report must contain Primary QE pass, Precision QE pass, and Combined Step-8 grade sections.
|
|
153
|
+
Then evaluate with the same phase/repo/feature and re-invoke the same slug. Only a closed gate
|
|
154
|
+
with complete checkpoint binding can reconcile historical refusals on an actual resumed QE stage;
|
|
155
|
+
live findings, changed checkpoints/artifacts and a failed Confirmation gate still block delivery.
|
|
156
|
+
This procedure runs no coder or automatic repair loop, and retains the historical result for audit.
|
|
157
|
+
|
|
158
|
+
|
|
30
159
|
### 1. Flag Detection (MANDATORY)
|
|
31
160
|
|
|
32
161
|
Scan feature requirements + ADR decisions and SET these flags:
|
|
@@ -235,6 +235,16 @@ C2 recognises JS/TS, pytest, Go, Rust, JVM and .NET test paths, extensible per p
|
|
|
235
235
|
|
|
236
236
|
Never proceed on a non-zero exit, and never treat empty output as a pass — the last line
|
|
237
237
|
(`K2 plan-completeness: PASS|FAIL|NOT-ESTABLISHED`) is the verdict, and its absence is not one.
|
|
238
|
+
|
|
239
|
+
**Where an id counts (the default since 2026-09-27, owner decision).** C1 and C8 read the plan's
|
|
240
|
+
TASK LINES only: a heading, a list item or a table row. An `ADR-<n>` or `FR-<n>` that appears only
|
|
241
|
+
in a prose paragraph, a fenced code block (the SPARC-GOAP ```yaml goal state included), an HTML
|
|
242
|
+
comment, the `## Amendments` section or the `EXPECTED_CODE_TARGETS:` block is a mention, not a task,
|
|
243
|
+
and the gate FAILs it with `(cited only outside task lines)`. Write the id on the FIRST line of the
|
|
244
|
+
task that implements it: a wrapped continuation line of a list item is not read either. Measured on the archive when the default changed: 56 of 102 plans that had
|
|
245
|
+
passed would fail this reader, so a plan written before that date may be red on a re-check — move
|
|
246
|
+
the citation onto a task line, or re-check that one plan with `--no-require-task-lines` and say so
|
|
247
|
+
in the checkpoint banner.
|
|
238
248
|
What it checks: C1 every ADR **decision** (a `# ADR-NNN` / `## ADR-NNN` heading INSIDE the file, not
|
|
239
249
|
just the filename prefix — a file with several headings owes several plan citations) has a plan task
|
|
240
250
|
citing it · C2 every ADR Confirmation test path is named in the plan · C3 the `EXPECTED_CODE_TARGETS:`
|
|
@@ -26,6 +26,35 @@ opus (complex code generation)
|
|
|
26
26
|
|
|
27
27
|
### 1. Pre-Implementation Checklist
|
|
28
28
|
|
|
29
|
+
### Current literal context (plain and delegated coding)
|
|
30
|
+
|
|
31
|
+
Before coding or delegating, run the installed helper beside this module. Set `CONTEXT_HELPER` to
|
|
32
|
+
the absolute `scripts/build-coder-context.mjs` path of the skill installation you are reading;
|
|
33
|
+
set `FEATURE_DIR` to the absolute target `features/<slug>` directory and use the actual tier:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
node "$CONTEXT_HELPER" "$FEATURE_DIR" --tier=M
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
The command emits exactly one JSON envelope and exits 0 only for `status: "complete"`. On any
|
|
40
|
+
nonzero exit, unavailable/incomplete status, malformed JSON or required missing/empty section,
|
|
41
|
+
stop before coding and repair the named input. Never paste a partial result as complete. A missing
|
|
42
|
+
helper requires restoring this skill installation, not inventing a replacement block.
|
|
43
|
+
|
|
44
|
+
For every delegated coder assignment, paste the successful envelope's literal `promptBlock` into
|
|
45
|
+
the actual prompt, then append the existing advisory decision-recall block once. Keep the source
|
|
46
|
+
paths below for deeper reading. For single-agent in-session coding, read this generated block
|
|
47
|
+
directly before implementing. Requirements and plan are included in full; each ADR supplies its
|
|
48
|
+
Decision and Confirmation with source labels. M/L/XL require at least one ADR; S can have none.
|
|
49
|
+
|
|
50
|
+
The same canonical helper is used by the programmatic Workflow before code checkpoint lookup.
|
|
51
|
+
It fingerprints full current inputs and binds the prompt separately, so changed documents cannot
|
|
52
|
+
reuse old code. The plain mode boundary is an executable helper command plus these required
|
|
53
|
+
read/embedding instructions; there is no separately automated plain dispatcher. Pure/fixture tests
|
|
54
|
+
do not establish a live model relay's authenticity. Helper bounds are 64 documents, 256 KiB/file,
|
|
55
|
+
1 MiB read and 96 KiB UTF-8 for the entire labelled block; exceeded bounds refuse without trimming.
|
|
56
|
+
These are document limits, not a new limit on the existing coder wrapper's final prompt.
|
|
57
|
+
|
|
29
58
|
Before writing any code:
|
|
30
59
|
- [ ] Read existing similar implementations in codebase
|
|
31
60
|
- [ ] Identify naming conventions (files, classes, functions, variables)
|