@dzhechkov/skills-feature-adr 1.3.64 → 1.3.65
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 +4 -4
- package/README.md +7 -2
- package/package.json +1 -1
- package/sbom.json +3 -3
- package/templates/.claude/workflows/feature-adr.js +38 -1
package/.dz-manifest.json
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
},
|
|
14
14
|
{
|
|
15
15
|
"path": "README.md",
|
|
16
|
-
"sha256": "
|
|
16
|
+
"sha256": "4a887b8fe2a52c75be7189ddeef4393dc2a8a872d747bdbde3caba94488960dd"
|
|
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": "1f95669ddfb76990bfeb0e1be603c27651f47a9233020ed10c37e8705543b688"
|
|
29
29
|
},
|
|
30
30
|
{
|
|
31
31
|
"path": "scripts/sync-templates.js",
|
|
@@ -317,7 +317,7 @@
|
|
|
317
317
|
},
|
|
318
318
|
{
|
|
319
319
|
"path": "templates/.claude/workflows/feature-adr.js",
|
|
320
|
-
"sha256": "
|
|
320
|
+
"sha256": "8afa77bb421ea4052eec0feab5f49edc1f2b1cea69238971f8ef1b3c8328a483"
|
|
321
321
|
},
|
|
322
322
|
{
|
|
323
323
|
"path": "templates/lib/memory-protocol.md",
|
|
@@ -345,5 +345,5 @@
|
|
|
345
345
|
}
|
|
346
346
|
]
|
|
347
347
|
},
|
|
348
|
-
"signature": "
|
|
348
|
+
"signature": "3OT+p3Tm5tBnn9T2RKEPlCnhCiaemKAOraeoPA4zYR28p1MpACnkeEmVyXPpwnqhG/a6uD/AjC/DrRuihMdHCw=="
|
|
349
349
|
}
|
package/README.md
CHANGED
|
@@ -274,8 +274,13 @@ Workflow({ scriptPath: '.claude/workflows/feature-adr.js',
|
|
|
274
274
|
|
|
275
275
|
> Note: under the override, coder **and** QE both run on Codex — the cross-model self-QE guard is
|
|
276
276
|
> consciously suspended (a Claude QE reviewer is exactly the agent that dies under limit pressure). The
|
|
277
|
-
> ` (usage-switched)` suffix + `usageEvents` keep it auditable
|
|
278
|
-
>
|
|
277
|
+
> ` (usage-switched)` suffix + `usageEvents` keep it auditable — and since v1.3.65 the suspension is a
|
|
278
|
+
> **machine debt**, not a note: the run writes `features/<slug>/.fa-state/reqe-due.json` (idempotent,
|
|
279
|
+
> run-stamped, crash-resume-safe) and returns `reqeDue: true`; after limits reset, `dz usage` shows a
|
|
280
|
+
> `re-QE due:` line, `dz reqe --slug <s>` prints the cross-family review brief, and
|
|
281
|
+
> `dz reqe --slug <s> --done --report <f>` settles FAIL-CLOSED — only against an existing graded
|
|
282
|
+
> report, never the run's own 08_qe_report.md (real-path and inode compared). RU: «перепроверь другой
|
|
283
|
+
> семьёй потом» стало долгом на диске с полным жизненным циклом.
|
|
279
284
|
|
|
280
285
|
---
|
|
281
286
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dzhechkov/skills-feature-adr",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.65",
|
|
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": "4a887b8fe2a52c75be7189ddeef4393dc2a8a872d747bdbde3caba94488960dd"
|
|
39
39
|
}
|
|
40
40
|
]
|
|
41
41
|
},
|
|
@@ -65,7 +65,7 @@
|
|
|
65
65
|
"hashes": [
|
|
66
66
|
{
|
|
67
67
|
"alg": "SHA-256",
|
|
68
|
-
"content": "
|
|
68
|
+
"content": "1f95669ddfb76990bfeb0e1be603c27651f47a9233020ed10c37e8705543b688"
|
|
69
69
|
}
|
|
70
70
|
]
|
|
71
71
|
},
|
|
@@ -795,7 +795,7 @@
|
|
|
795
795
|
"hashes": [
|
|
796
796
|
{
|
|
797
797
|
"alg": "SHA-256",
|
|
798
|
-
"content": "
|
|
798
|
+
"content": "8afa77bb421ea4052eec0feab5f49edc1f2b1cea69238971f8ef1b3c8328a483"
|
|
799
799
|
}
|
|
800
800
|
]
|
|
801
801
|
},
|
|
@@ -1002,7 +1002,11 @@ const qeModel = resolveStageModel('qe')
|
|
|
1002
1002
|
// Single tested source of truth (feature-adr-routing.ts:qeShouldUseCodex) — closes the self-QE hole where
|
|
1003
1003
|
// the legacy qeReviewer='codex' knob used to re-route QE back to codex even when the CODER was codex.
|
|
1004
1004
|
if (MODELS.qe === undefined && QE_REVIEWER === 'codex' && coderIsCodex()) log('QE: coder is codex — enforcing cross-model Claude QE (ignoring qeReviewer=codex to avoid self-review)')
|
|
1005
|
-
|
|
1005
|
+
// reqe QE #3: the usage override can resolve the QE stage to codex EVEN when qeShouldUseCodex()
|
|
1006
|
+
// (which reads the pre-override config) says claude — dispatching that through the "claude" branch
|
|
1007
|
+
// would run the stub wrapper AND mislabel qeReviewerUsed='claude' (a codex-on-codex review recorded
|
|
1008
|
+
// as cross-family). The resolved agentType is the truth; either signal routes the codex branch.
|
|
1009
|
+
const qeIsCodex = qeShouldUseCodex() || (qeModel && qeModel.agentType === 'codex:codex-rescue')
|
|
1006
1010
|
const qeClaudeModel = qeIsCodex ? {} : qeModel
|
|
1007
1011
|
const qeClaudeOpts = mergeOpts({ label: stageLabel('qe:brutal', qeClaudeModel), phase: 'QE', agentType: 'qe-code-reviewer', schema: QE }, qeClaudeModel)
|
|
1008
1012
|
// qe checkpoint: COMPOSITE (verdict + reviewer identity) keyed on the CODE stage's result — a re-coded
|
|
@@ -1056,6 +1060,38 @@ if (qeStage && qeStage.modelUsed) modelsUsed.qe = qeStage.modelUsed + (resumedSt
|
|
|
1056
1060
|
const claimGate = step8ClaimGate(qe && qe.claimCheck ? qe.claimCheck : null)
|
|
1057
1061
|
log(claimGate.note)
|
|
1058
1062
|
|
|
1063
|
+
// ── re-QE debt emission (backlog 6b40e667) — mirror of harness-core/src/reqe.ts ──
|
|
1064
|
+
// The cross-model guard was consciously SUSPENDED when the usage override made coder and QE the
|
|
1065
|
+
// same family (FR-2.9). Record that as a machine DEBT (features/<slug>/.fa-state/reqe-due.json) so
|
|
1066
|
+
// `dz reqe` / `dz usage` surface it after limits reset — a doc instruction on the weakest detection
|
|
1067
|
+
// layer becomes a fact on disk. Emitted ONLY for the actual same-family-under-override case: a
|
|
1068
|
+
// switch that kept cross-family QE, or the codex-unavailable Claude belt (no override), creates no
|
|
1069
|
+
// debt. A RESUMED qe never re-emits (the original run emitted; a settlement must not be clobbered).
|
|
1070
|
+
let reqeDue = false
|
|
1071
|
+
{
|
|
1072
|
+
const reqeFamOf = function (s) { return /codex|gpt|openai/i.test(String(s || '')) ? 'openai' : 'claude' }
|
|
1073
|
+
const qeLabel = String(modelsUsed.qe || '')
|
|
1074
|
+
if (/\(usage-switched\)/.test(qeLabel) && reqeFamOf(coderUsed) === reqeFamOf(qeReviewerUsed)) {
|
|
1075
|
+
reqeDue = true
|
|
1076
|
+
const reqeDebt = { schema: 'reqe-due-1', slug: SLUG, coderFamily: reqeFamOf(coderUsed), qeFamily: reqeFamOf(qeReviewerUsed), qeGrade: (qe && qe.grade) ? String(qe.grade) : null, reason: 'usage-switched self-review: Step-8 QE ran on the coder’s own family under the limit override (FR-2.9)', emittedAt: null, runStamp: qeHash }
|
|
1077
|
+
// IDEMPOTENT + VERIFIED (reqe QE #2 + r2 #2/#3): a RESUMED qe re-runs this block (the original
|
|
1078
|
+
// run may have died between the qe checkpoint and this write), but: an existing due file is
|
|
1079
|
+
// never clobbered; a settlement blocks re-emission ONLY when it carries THIS run's runStamp (an
|
|
1080
|
+
// OLD settlement must not immunize the slug against a FRESH run's debt); the write itself is
|
|
1081
|
+
// noclobber `set -C` (O_EXCL — a concurrent emitter or a planted/dangling symlink cannot be
|
|
1082
|
+
// written through). The agent echoes the written file back; an unverifiable write is logged
|
|
1083
|
+
// LOUDLY, and reqeDue stays true in the result either way.
|
|
1084
|
+
const dueQ = shq(FDIR + '/.fa-state/reqe-due.json')
|
|
1085
|
+
const emitCmd = 'if [ -e ' + dueQ + ' ]; then echo REQE-EXISTS; elif grep -qs ' + shq(qeHash) + ' ' + shq(FDIR + '/.fa-state') + '/reqe-settled*.json 2>/dev/null; then echo REQE-SETTLED-THIS-RUN; else mkdir -p ' + shq(FDIR + '/.fa-state') + ' && printf %s ' + shq(JSON.stringify(reqeDebt)) + ' | sed "s/\\"emittedAt\\":null/\\"emittedAt\\":\\"$(date -u +%Y-%m-%dT%H:%M:%SZ)\\"/" | (set -C; cat > ' + dueQ + ') && cat ' + dueQ + '; fi'
|
|
1086
|
+
const emitOut = await agent('Run EXACTLY this one shell command via your Bash tool and return its stdout VERBATIM, nothing else: ' + emitCmd, { label: 'reqe:emit', phase: 'QE', effort: 'low' })
|
|
1087
|
+
const emitText = String(emitOut || '')
|
|
1088
|
+
if (/REQE-SETTLED-THIS-RUN/.test(emitText)) log('re-QE debt: THIS run’s debt was already settled — not re-opened')
|
|
1089
|
+
else if (/REQE-EXISTS/.test(emitText)) log('re-QE debt: already recorded for ' + SLUG + ' — not overwritten')
|
|
1090
|
+
else if (emitText.indexOf('reqe-due-1') !== -1) log('re-QE DEBT recorded: Step-8 ran same-family under the usage override — after limits reset run `dz reqe --slug ' + SLUG + '` for the independent cross-family pass')
|
|
1091
|
+
else log('re-QE debt write UNVERIFIED (agent returned no readback) — the debt may be missing on disk; reqeDue=true is still reported, record it manually via features/' + SLUG + '/.fa-state/reqe-due.json')
|
|
1092
|
+
}
|
|
1093
|
+
}
|
|
1094
|
+
|
|
1059
1095
|
// ── AUTO-COST outcome recording (feature learned-cost-routing) ──
|
|
1060
1096
|
// The two-phase label lands here: every auto-cost stage that produced an artifact records a PROVISIONAL (i);
|
|
1061
1097
|
// the CODE stage's authoritative gate (ii) is the Step-8 QE grade (A/B = pass) — a produced-but-gate-FAILED
|
|
@@ -1275,6 +1311,7 @@ return {
|
|
|
1275
1311
|
selfLearning: 'recall@Step0 + teach@Step8 (mandatory)',
|
|
1276
1312
|
resumedStages: resumedStages,
|
|
1277
1313
|
checkpointing: CHECKPOINTS_ON ? RESUME_MODE : 'off',
|
|
1314
|
+
reqeDue: reqeDue,
|
|
1278
1315
|
brain: BRAIN,
|
|
1279
1316
|
polymorphism: POLY.hasManifest ? POLY.report : null,
|
|
1280
1317
|
claimGate: claimGate,
|