@dzhechkov/skills-feature-adr 1.3.24 → 1.3.26
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,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dzhechkov/skills-feature-adr",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.26",
|
|
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"
|
|
@@ -25,6 +25,23 @@ The pipeline ALWAYS runs the feature-adr Pattern memory loop **in-process** —
|
|
|
25
25
|
- **Step 0** recalls learned patterns (`dz recall`) → folds the top ones into requirements/ADR as `{LEARNED_PATTERNS}` + records the recalled count in the live panel (`dz statusline --fa-record`).
|
|
26
26
|
- **Step 8** teaches the durable lessons back (`dz teach`) + records the stored count. The loop pays off (recall) and grows (teach) every run.
|
|
27
27
|
|
|
28
|
+
## Optional Codex planner (opt-in, pre-flight ASK)
|
|
29
|
+
|
|
30
|
+
feature-adr can route the **planning step (Step 6)** to Codex's top model instead of Claude. It is
|
|
31
|
+
**opt-in and graceful**: absent/declined/failed → the default Claude planner runs (the pipeline never
|
|
32
|
+
blocks on Codex).
|
|
33
|
+
|
|
34
|
+
Pre-flight, BEFORE launching a feature-adr run, detect Codex readiness:
|
|
35
|
+
```
|
|
36
|
+
node "<codex-plugin>/scripts/codex-companion.mjs" setup --json → { ready: true }
|
|
37
|
+
```
|
|
38
|
+
If `ready`, **ASK the user once**: *"Use the top Codex model for the planning step?"* On yes, pass
|
|
39
|
+
`args.planner: 'codex'` (the workflow routes Step 6 to the `codex:codex-rescue` agentType, with a
|
|
40
|
+
Claude fallback and `plannerUsed` in the result). On no / not-ready, omit `planner` (Claude plans).
|
|
41
|
+
For the interactive SKILL (plain `/feature-adr`), make the same offer at the planning checkpoint.
|
|
42
|
+
Codex needs a headless login on a VPS: `codex login --device-auth` (code + URL) or
|
|
43
|
+
`printenv OPENAI_API_KEY | codex login --with-api-key`.
|
|
44
|
+
|
|
28
45
|
## Hybrid checkpoints (router decides)
|
|
29
46
|
|
|
30
47
|
- **S / M** → run autonomously to completion; present a final consolidated review (ADR + plan + QE).
|
|
@@ -355,6 +355,12 @@ Step 0 (Complexity Router) checks:
|
|
|
355
355
|
description, code, tier, stopAfter, repo, dzBin } })`. Hybrid checkpoints: S/M autonomous; L/XL return
|
|
356
356
|
after the Plan phase for your steer. See `.claude/rules/feature-adr-ultracode.md`.
|
|
357
357
|
|
|
358
|
+
**Optional Codex planner (opt-in).** When Codex is installed + logged in (`codex login --device-auth`
|
|
359
|
+
on a headless VPS, or `printenv OPENAI_API_KEY | codex login --with-api-key`), the pipeline can route the
|
|
360
|
+
**planning step to Codex's top model**. It ALWAYS asks first — a pre-flight *"Use the top Codex model for
|
|
361
|
+
planning?"* — and falls back to Claude if you decline or Codex is unavailable (never blocks). ultracode:
|
|
362
|
+
pass `args.planner: 'codex'`. Plain `/feature-adr`: the same offer appears at the planning checkpoint.
|
|
363
|
+
|
|
358
364
|
### Pattern memory loop (self-learning — runs in ALL modes)
|
|
359
365
|
|
|
360
366
|
**Self-learning is MANDATORY on EVERY `/feature-adr` run — including plain `/feature-adr` without any
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export const meta = {
|
|
2
2
|
name: 'feature-adr',
|
|
3
|
-
description: 'Canonical /feature-adr --full-qe-extended pipeline as a reusable workflow: router+RECALL then design(ADR, applies learned patterns) then plan then code then agentic-qe QE+TEACH, producing features/<slug>/00-09 artifacts. MANDATORY in-process self-learning loop (Step-0 recall, apply, Step-8 teach). Hybrid checkpoints (S/M autonomous; L/XL stop-after-plan).',
|
|
4
|
-
whenToUse: 'ultracode + a feature implementation. Invoke via Workflow({scriptPath:".claude/workflows/feature-adr.js", args:{slug, description, code, tier, stopAfter}}) instead of an ad-hoc orchestration, so every feature ships with an ADR + inline agentic-qe QE + self-learning.',
|
|
3
|
+
description: 'Canonical /feature-adr --full-qe-extended pipeline as a reusable workflow: router+RECALL then design(ADR, applies learned patterns) then plan then code then agentic-qe QE+TEACH, producing features/<slug>/00-09 artifacts. MANDATORY in-process self-learning loop (Step-0 recall, apply, Step-8 teach). OPTIONAL Codex planner (args.planner=codex → Step-6 routed to codex:codex-rescue top model, graceful fallback to Claude). Hybrid checkpoints (S/M autonomous; L/XL stop-after-plan).',
|
|
4
|
+
whenToUse: 'ultracode + a feature implementation. Invoke via Workflow({scriptPath:".claude/workflows/feature-adr.js", args:{slug, description, code, tier, stopAfter, planner}}) instead of an ad-hoc orchestration, so every feature ships with an ADR + inline agentic-qe QE + self-learning.',
|
|
5
5
|
phases: [
|
|
6
6
|
{ title: 'Router', detail: 'Step 0 - classify + self-learning recall' },
|
|
7
7
|
{ title: 'Design', detail: 'Steps 1-5 - requirements, ADR, QCSD, architecture (tier-gated)' },
|
|
@@ -58,14 +58,32 @@ if (isMplus) {
|
|
|
58
58
|
}
|
|
59
59
|
const design = await parallel(designThunks)
|
|
60
60
|
|
|
61
|
-
// Step 6: Plan
|
|
61
|
+
// Step 6: Plan — optionally routed to Codex's top model (opt-in via args.planner='codex').
|
|
62
|
+
// The user opts in at pre-flight ('use the top Codex model for planning?'); we route the Plan step to
|
|
63
|
+
// the codex:codex-rescue runtime and GRACEFULLY FALL BACK to the default (Claude) planner if Codex is
|
|
64
|
+
// unavailable/errors — the pipeline never blocks on Codex.
|
|
62
65
|
phase('Plan')
|
|
63
|
-
const
|
|
66
|
+
const PLANNER = (A.planner === 'codex') ? 'codex' : 'claude'
|
|
67
|
+
const planPrompt = 'Step 6 (SPARC-GOAP implementation plan) of /feature-adr for "' + DESC + '" (' + SLUG + ', tier ' + tier + '). Given the requirements + ADR + architecture in ' + FDIR + ', decompose into milestones + concrete tasks with success metrics. Write ' + FDIR + '/06_implementation_plan.md. Return wrote[] + summary.'
|
|
68
|
+
let plan = null
|
|
69
|
+
if (PLANNER === 'codex') {
|
|
70
|
+
const codexPlan = await agent(planPrompt, { label: 'plan:codex', phase: 'Plan', agentType: 'codex:codex-rescue' })
|
|
71
|
+
if (codexPlan) {
|
|
72
|
+
plan = { wrote: [FDIR + '/06_implementation_plan.md'], summary: String(codexPlan).slice(0, 500), planner: 'codex' }
|
|
73
|
+
log('Plan: Codex (top model)')
|
|
74
|
+
} else {
|
|
75
|
+
log('Plan: Codex unavailable — falling back to the default planner')
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
if (plan === null) {
|
|
79
|
+
const claudePlan = await agent(planPrompt, { label: 'plan', phase: 'Plan', schema: ARTIFACT })
|
|
80
|
+
plan = claudePlan ? { wrote: claudePlan.wrote, summary: claudePlan.summary, planner: PLANNER === 'codex' ? 'claude-fallback' : 'claude' } : null
|
|
81
|
+
}
|
|
64
82
|
|
|
65
83
|
// Hybrid checkpoint for L/XL
|
|
66
84
|
const stopHere = STOP_AFTER === 'plan' || (isLplus && STOP_AFTER !== 'none')
|
|
67
85
|
if (stopHere) {
|
|
68
|
-
return { tier: tier, phase: 'checkpoint-after-plan', artifactsDir: FDIR, plan: (plan ? plan.summary : null), note: 'L/XL checkpoint - review the ADR + plan, then re-invoke with args.stopAfter="none" to implement + QE.' }
|
|
86
|
+
return { tier: tier, phase: 'checkpoint-after-plan', artifactsDir: FDIR, planner: (plan ? plan.planner : null), plan: (plan ? plan.summary : null), note: 'L/XL checkpoint - review the ADR + plan, then re-invoke with args.stopAfter="none" to implement + QE.' }
|
|
69
87
|
}
|
|
70
88
|
|
|
71
89
|
// Step 7: Code
|
|
@@ -100,6 +118,7 @@ return {
|
|
|
100
118
|
codeTestsAdequate: qe ? qe.codeTestsAdequate : null,
|
|
101
119
|
docTestsPresent: qe ? qe.docTestsPresent : null,
|
|
102
120
|
fleetQE: fleet,
|
|
121
|
+
plannerUsed: plan ? plan.planner : null,
|
|
103
122
|
selfLearning: 'recall@Step0 + teach@Step8 (mandatory)',
|
|
104
123
|
promiseTags: tags,
|
|
105
124
|
}
|