@dzhechkov/skills-idea2prd 0.1.2 → 0.1.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 +153 -0
- package/README.md +16 -0
- package/package.json +4 -2
- package/sbom.json +373 -0
- package/templates/.claude/skills/idea2prd-manual/SKILL.md +148 -11
- package/templates/.claude/skills/idea2prd-manual/references/adr-catalog.md +23 -0
- package/templates/.claude/skills/idea2prd-manual/references/pseudocode-style.md +1 -1
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
{
|
|
2
|
+
"manifest": {
|
|
3
|
+
"version": 1,
|
|
4
|
+
"pack": "skills-idea2prd",
|
|
5
|
+
"files": [
|
|
6
|
+
{
|
|
7
|
+
"path": "CHANGELOG.md",
|
|
8
|
+
"sha256": "17403157f3609436e5587a532c022e6095ee85acc255cf313d5473df311cc55f"
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
"path": "LICENSE",
|
|
12
|
+
"sha256": "3b93f7070f6843f37e0cae255f7caff22b466a4017fd2020d7d3216237e5a701"
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"path": "README.md",
|
|
16
|
+
"sha256": "b7a4afb47ec0b84e32278400911fa9c42cf0d350fc2a88842226eae1ad533b61"
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"path": "bin/cli.js",
|
|
20
|
+
"sha256": "a210174d6b63d053f7744757972d31acb0f4d9c59f8dacff7b62872a19ebd31a"
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"path": "package.json",
|
|
24
|
+
"sha256": "f1910823e00d102d9e4bf319123036426d0c5812054fca1e3efdb2e37763ebbf"
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"path": "sources.json",
|
|
28
|
+
"sha256": "3712bcefb43e3f38a926974c6e6b7b1d36992549dabdfd82e68d0fb7b8ba4481"
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"path": "src/cli.js",
|
|
32
|
+
"sha256": "4ec553ef49d30599672cbaf5583fa999a0be4c06207433390d7d0bdd985bb804"
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"path": "src/commands/doctor.js",
|
|
36
|
+
"sha256": "82f35dabfeef6033ec3ee6142e04cd195002e7855f2d7ac7aa3222748a3e6de2"
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"path": "src/commands/init.js",
|
|
40
|
+
"sha256": "3bcd444ba61681bf5bd882fdbcbfbc7d180b5e0f370c0dd5ace6309a6e98040f"
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"path": "src/commands/list.js",
|
|
44
|
+
"sha256": "f7b3a45abd3a3fcd3b9d8dcfb4540ae55f57f0fd74a51cdd898f0faa9d8cfc43"
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"path": "src/commands/remove.js",
|
|
48
|
+
"sha256": "5d49c362a97092c878a3c1871a038d1e49a8bb01c8c82a53e7b49652c1526299"
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"path": "src/commands/update.js",
|
|
52
|
+
"sha256": "7e7a8720afcf9e2b58c910dc2b630e5c6fc1b1eea88ba02f427f195616727249"
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"path": "src/utils.js",
|
|
56
|
+
"sha256": "e07c5e711d54821869d6d76ff861920f37f54277b1a2fc953e45e3823aff4da4"
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"path": "templates/.claude/commands/idea2prd-manual.md",
|
|
60
|
+
"sha256": "dcb6c72f3dba8ed1a6c087012658a822b9ce5a9e06da4d59520c7845600cac8b"
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"path": "templates/.claude/skills/explore/SKILL.md",
|
|
64
|
+
"sha256": "c755a7bcdfe97fb7cb0bcd7bf3b1fd8a2d238ef082967fbf87740fc808302542"
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"path": "templates/.claude/skills/explore/references/questioning-techniques.md",
|
|
68
|
+
"sha256": "ec0dd00871d3abe950f9cf375216a43043827897166c4165c3fa581839851195"
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
"path": "templates/.claude/skills/explore/references/task-brief-templates.md",
|
|
72
|
+
"sha256": "4e9292479e120afce944b747bb7b4a7226c41e9880708d620de3ea4fa4ef0249"
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
"path": "templates/.claude/skills/goap-research-ed25519/SKILL.md",
|
|
76
|
+
"sha256": "e23770a81922103571eb2645fb82509f7046bc7dd407a33b06f67ad2e709b9b4"
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"path": "templates/.claude/skills/goap-research-ed25519/references/ed25519-verification.md",
|
|
80
|
+
"sha256": "2742f14b472bff69c83f24d9bac5bf023bd7f9ecc3e659742ac3152a239dd68f"
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
"path": "templates/.claude/skills/goap-research-ed25519/references/research-actions.md",
|
|
84
|
+
"sha256": "156d2f8ce342f7013bc758fe7c0d3ad3041b4f67f30dbcf8d59e091cb70d9a9c"
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
"path": "templates/.claude/skills/goap-research-ed25519/references/source-evaluation.md",
|
|
88
|
+
"sha256": "d6a19abb6be64dc9e1f539903080029125d2d899da4de3063e75e1afb7e4906f"
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
"path": "templates/.claude/skills/goap-research-ed25519/scripts/ed25519_verifier.py",
|
|
92
|
+
"sha256": "dc9edc4d7907d13b28dfa74cc86b30a27a41de707ce72f39aca0ae08f07b5703"
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
"path": "templates/.claude/skills/goap-research-ed25519/scripts/goap_planner.py",
|
|
96
|
+
"sha256": "2ec359e1ddc52ca3118144532ed483dcc609e856a04b29bb191b875c60ff4260"
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
"path": "templates/.claude/skills/goap-research-ed25519/scripts/test_ed25519_verifier.py",
|
|
100
|
+
"sha256": "ea6d888ac53bac3a0fe236c101f90a984edbac044d787d73c8414f1c4fc540d3"
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
"path": "templates/.claude/skills/idea2prd-manual/SKILL.md",
|
|
104
|
+
"sha256": "64780d15549e8c2c20a83fbb7afa6856cecbb6d7b940b72ea7d57dca83675786"
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
"path": "templates/.claude/skills/idea2prd-manual/references/adr-catalog.md",
|
|
108
|
+
"sha256": "e65f61ebeb9d3aa3179f0457028640510dca9e6f5c096ebc474d5a088280b828"
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
"path": "templates/.claude/skills/idea2prd-manual/references/c4-model.md",
|
|
112
|
+
"sha256": "5da67750e3b4c580252cd7368601a635d555dc2e6048751246f7c24d5a984f74"
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
"path": "templates/.claude/skills/idea2prd-manual/references/completion-checklist-template.md",
|
|
116
|
+
"sha256": "4bb8a09829a7d616eef11833f71cba4f9a56f24364eccb9061c57f275abd82f7"
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
"path": "templates/.claude/skills/idea2prd-manual/references/ddd-patterns.md",
|
|
120
|
+
"sha256": "897cdc8c51113080ddef1167e02e1fa9a711475bebbc144ec3bbf4ccf1b464be"
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
"path": "templates/.claude/skills/idea2prd-manual/references/fitness-functions-catalog.md",
|
|
124
|
+
"sha256": "3b32dfd48d4b1cdd0845a5e4934eb7589cf553dc6d6850d2d0acb80c88568dd9"
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
"path": "templates/.claude/skills/idea2prd-manual/references/pseudocode-style.md",
|
|
128
|
+
"sha256": "80b006853de2e3e38816b91a9b91443a512e9d0d3ec85801fee12f0e5025e155"
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
"path": "templates/.claude/skills/idea2prd-manual/scripts/ai_context_builder.py",
|
|
132
|
+
"sha256": "3468e0fa2f283107e9e0fb6b4598cea6d3f916508a528613efe416c79841f86e"
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
"path": "templates/.claude/skills/idea2prd-manual/scripts/c4_generator.py",
|
|
136
|
+
"sha256": "96d0c26edcd370c16fb5b171941b84dfe7a0b19c1b52cd7c3de234986ca8cbb6"
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
"path": "templates/.claude/skills/idea2prd-manual/scripts/fitness_validator.py",
|
|
140
|
+
"sha256": "50b552669b1797072632982bdc0eb661239c2a21f37563b23f67eeb7af1677c9"
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
"path": "templates/.claude/skills/idea2prd-manual/scripts/pseudocode_generator.py",
|
|
144
|
+
"sha256": "880cff2cc7b040c71114fe9dfea4d80f74686dfa8af6c6a90aed1ebe6ae21cfc"
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
"path": "templates/.claude/skills/problem-solver-enhanced/SKILL.md",
|
|
148
|
+
"sha256": "530623c986dee931d47314c22195ea9de50a75f2a0daecfc469fb015c3dd3415"
|
|
149
|
+
}
|
|
150
|
+
]
|
|
151
|
+
},
|
|
152
|
+
"signature": "HQYa10d2ULIWDRdB/Y3hhYR4JtZZUZjZ0/g/LJ4CLS9Ffw2IsC49bcG6gIr5UkVoc2OSvY/43VJ1ID4CyM8pBw=="
|
|
153
|
+
}
|
package/README.md
CHANGED
|
@@ -11,6 +11,22 @@ Auto-detects the input (problem vs idea) and runs up to two pipelines with **9 c
|
|
|
11
11
|
|
|
12
12
|
Output: a complete doc set ready to hand to a coding agent — PRD, ADRs, DDD model, C4 diagrams, pseudocode, test scenarios, and a CI/CD/deploy completion checklist.
|
|
13
13
|
|
|
14
|
+
## Honesty + Memory Layer (v3)
|
|
15
|
+
|
|
16
|
+
Three disciplines the harness proved out after the initial freeze are now baked into the emitted docs:
|
|
17
|
+
|
|
18
|
+
- **ADR `## Confirmation` stanza** — every generated ADR names its *load-bearing property* and the
|
|
19
|
+
fitness function / Gherkin test that would falsify it, wiring Phase 3 (ADR) to Phase 5 (fitness/tests).
|
|
20
|
+
The stanza is REQUIRED (MEASURED — reproducer: the `## Confirmation` block in
|
|
21
|
+
`templates/.claude/skills/idea2prd-manual/references/adr-catalog.md`).
|
|
22
|
+
- **Claim Discipline** — accuracy/count/percentage claims in emitted docs carry an honest tag
|
|
23
|
+
(`MEASURED` / `CLAIMED` / `ESTIMATED`); no unsourced numbers. A `dz claim-check docs/` scan should pass.
|
|
24
|
+
- **Brain memory** — a Step-0 `dz recall` folds prior PRD/ADR lessons into the brief and a closing
|
|
25
|
+
`dz teach` records new ones, both pinned to ONE canonical brain store (the project root, `--project`),
|
|
26
|
+
so the skill stops being write-once (MEASURED — reproducer: the "Step 0: Brain Recall" and
|
|
27
|
+
"Closing: Brain Teach" sections in `templates/.claude/skills/idea2prd-manual/SKILL.md`). Guarded by
|
|
28
|
+
"if `dz` present" — absent the CLI, the pipeline runs unchanged.
|
|
29
|
+
|
|
14
30
|
## Why
|
|
15
31
|
|
|
16
32
|
Going from a raw idea straight to code skips the design that makes the code correct. Idea2PRD front-loads that design as *reviewable artifacts* and forces a human gate at each phase (MANUAL mode), so you catch a wrong assumption at the PRD stage instead of after implementation.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dzhechkov/skills-idea2prd",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.4",
|
|
4
4
|
"description": "Idea2PRD Manual — composite skill for Claude Code: from problem/idea to Vibe-Coding-ready docs (PRD + ADR + DDD + C4 + Pseudocode + Test Scenarios + Completion) with 9 checkpoints",
|
|
5
5
|
"main": "src/cli.js",
|
|
6
6
|
"bin": {
|
|
@@ -11,7 +11,9 @@
|
|
|
11
11
|
"src/",
|
|
12
12
|
"templates/",
|
|
13
13
|
"sources.json",
|
|
14
|
-
"LICENSE"
|
|
14
|
+
"LICENSE",
|
|
15
|
+
".dz-manifest.json",
|
|
16
|
+
"sbom.json"
|
|
15
17
|
],
|
|
16
18
|
"keywords": [
|
|
17
19
|
"claude",
|
package/sbom.json
ADDED
|
@@ -0,0 +1,373 @@
|
|
|
1
|
+
{
|
|
2
|
+
"bomFormat": "CycloneDX",
|
|
3
|
+
"specVersion": "1.5",
|
|
4
|
+
"version": 1,
|
|
5
|
+
"metadata": {
|
|
6
|
+
"component": {
|
|
7
|
+
"type": "library",
|
|
8
|
+
"name": "skills-idea2prd"
|
|
9
|
+
}
|
|
10
|
+
},
|
|
11
|
+
"components": [
|
|
12
|
+
{
|
|
13
|
+
"type": "file",
|
|
14
|
+
"name": "CHANGELOG.md",
|
|
15
|
+
"hashes": [
|
|
16
|
+
{
|
|
17
|
+
"alg": "SHA-256",
|
|
18
|
+
"content": "17403157f3609436e5587a532c022e6095ee85acc255cf313d5473df311cc55f"
|
|
19
|
+
}
|
|
20
|
+
]
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"type": "file",
|
|
24
|
+
"name": "LICENSE",
|
|
25
|
+
"hashes": [
|
|
26
|
+
{
|
|
27
|
+
"alg": "SHA-256",
|
|
28
|
+
"content": "3b93f7070f6843f37e0cae255f7caff22b466a4017fd2020d7d3216237e5a701"
|
|
29
|
+
}
|
|
30
|
+
]
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"type": "file",
|
|
34
|
+
"name": "README.md",
|
|
35
|
+
"hashes": [
|
|
36
|
+
{
|
|
37
|
+
"alg": "SHA-256",
|
|
38
|
+
"content": "b7a4afb47ec0b84e32278400911fa9c42cf0d350fc2a88842226eae1ad533b61"
|
|
39
|
+
}
|
|
40
|
+
]
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"type": "file",
|
|
44
|
+
"name": "bin/cli.js",
|
|
45
|
+
"hashes": [
|
|
46
|
+
{
|
|
47
|
+
"alg": "SHA-256",
|
|
48
|
+
"content": "a210174d6b63d053f7744757972d31acb0f4d9c59f8dacff7b62872a19ebd31a"
|
|
49
|
+
}
|
|
50
|
+
]
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"type": "file",
|
|
54
|
+
"name": "package.json",
|
|
55
|
+
"hashes": [
|
|
56
|
+
{
|
|
57
|
+
"alg": "SHA-256",
|
|
58
|
+
"content": "f1910823e00d102d9e4bf319123036426d0c5812054fca1e3efdb2e37763ebbf"
|
|
59
|
+
}
|
|
60
|
+
]
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"type": "file",
|
|
64
|
+
"name": "sources.json",
|
|
65
|
+
"hashes": [
|
|
66
|
+
{
|
|
67
|
+
"alg": "SHA-256",
|
|
68
|
+
"content": "3712bcefb43e3f38a926974c6e6b7b1d36992549dabdfd82e68d0fb7b8ba4481"
|
|
69
|
+
}
|
|
70
|
+
]
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
"type": "file",
|
|
74
|
+
"name": "src/cli.js",
|
|
75
|
+
"hashes": [
|
|
76
|
+
{
|
|
77
|
+
"alg": "SHA-256",
|
|
78
|
+
"content": "4ec553ef49d30599672cbaf5583fa999a0be4c06207433390d7d0bdd985bb804"
|
|
79
|
+
}
|
|
80
|
+
]
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
"type": "file",
|
|
84
|
+
"name": "src/commands/doctor.js",
|
|
85
|
+
"hashes": [
|
|
86
|
+
{
|
|
87
|
+
"alg": "SHA-256",
|
|
88
|
+
"content": "82f35dabfeef6033ec3ee6142e04cd195002e7855f2d7ac7aa3222748a3e6de2"
|
|
89
|
+
}
|
|
90
|
+
]
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
"type": "file",
|
|
94
|
+
"name": "src/commands/init.js",
|
|
95
|
+
"hashes": [
|
|
96
|
+
{
|
|
97
|
+
"alg": "SHA-256",
|
|
98
|
+
"content": "3bcd444ba61681bf5bd882fdbcbfbc7d180b5e0f370c0dd5ace6309a6e98040f"
|
|
99
|
+
}
|
|
100
|
+
]
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
"type": "file",
|
|
104
|
+
"name": "src/commands/list.js",
|
|
105
|
+
"hashes": [
|
|
106
|
+
{
|
|
107
|
+
"alg": "SHA-256",
|
|
108
|
+
"content": "f7b3a45abd3a3fcd3b9d8dcfb4540ae55f57f0fd74a51cdd898f0faa9d8cfc43"
|
|
109
|
+
}
|
|
110
|
+
]
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
"type": "file",
|
|
114
|
+
"name": "src/commands/remove.js",
|
|
115
|
+
"hashes": [
|
|
116
|
+
{
|
|
117
|
+
"alg": "SHA-256",
|
|
118
|
+
"content": "5d49c362a97092c878a3c1871a038d1e49a8bb01c8c82a53e7b49652c1526299"
|
|
119
|
+
}
|
|
120
|
+
]
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
"type": "file",
|
|
124
|
+
"name": "src/commands/update.js",
|
|
125
|
+
"hashes": [
|
|
126
|
+
{
|
|
127
|
+
"alg": "SHA-256",
|
|
128
|
+
"content": "7e7a8720afcf9e2b58c910dc2b630e5c6fc1b1eea88ba02f427f195616727249"
|
|
129
|
+
}
|
|
130
|
+
]
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
"type": "file",
|
|
134
|
+
"name": "src/utils.js",
|
|
135
|
+
"hashes": [
|
|
136
|
+
{
|
|
137
|
+
"alg": "SHA-256",
|
|
138
|
+
"content": "e07c5e711d54821869d6d76ff861920f37f54277b1a2fc953e45e3823aff4da4"
|
|
139
|
+
}
|
|
140
|
+
]
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
"type": "file",
|
|
144
|
+
"name": "templates/.claude/commands/idea2prd-manual.md",
|
|
145
|
+
"hashes": [
|
|
146
|
+
{
|
|
147
|
+
"alg": "SHA-256",
|
|
148
|
+
"content": "dcb6c72f3dba8ed1a6c087012658a822b9ce5a9e06da4d59520c7845600cac8b"
|
|
149
|
+
}
|
|
150
|
+
]
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
"type": "file",
|
|
154
|
+
"name": "templates/.claude/skills/explore/SKILL.md",
|
|
155
|
+
"hashes": [
|
|
156
|
+
{
|
|
157
|
+
"alg": "SHA-256",
|
|
158
|
+
"content": "c755a7bcdfe97fb7cb0bcd7bf3b1fd8a2d238ef082967fbf87740fc808302542"
|
|
159
|
+
}
|
|
160
|
+
]
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
"type": "file",
|
|
164
|
+
"name": "templates/.claude/skills/explore/references/questioning-techniques.md",
|
|
165
|
+
"hashes": [
|
|
166
|
+
{
|
|
167
|
+
"alg": "SHA-256",
|
|
168
|
+
"content": "ec0dd00871d3abe950f9cf375216a43043827897166c4165c3fa581839851195"
|
|
169
|
+
}
|
|
170
|
+
]
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
"type": "file",
|
|
174
|
+
"name": "templates/.claude/skills/explore/references/task-brief-templates.md",
|
|
175
|
+
"hashes": [
|
|
176
|
+
{
|
|
177
|
+
"alg": "SHA-256",
|
|
178
|
+
"content": "4e9292479e120afce944b747bb7b4a7226c41e9880708d620de3ea4fa4ef0249"
|
|
179
|
+
}
|
|
180
|
+
]
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
"type": "file",
|
|
184
|
+
"name": "templates/.claude/skills/goap-research-ed25519/SKILL.md",
|
|
185
|
+
"hashes": [
|
|
186
|
+
{
|
|
187
|
+
"alg": "SHA-256",
|
|
188
|
+
"content": "e23770a81922103571eb2645fb82509f7046bc7dd407a33b06f67ad2e709b9b4"
|
|
189
|
+
}
|
|
190
|
+
]
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
"type": "file",
|
|
194
|
+
"name": "templates/.claude/skills/goap-research-ed25519/references/ed25519-verification.md",
|
|
195
|
+
"hashes": [
|
|
196
|
+
{
|
|
197
|
+
"alg": "SHA-256",
|
|
198
|
+
"content": "2742f14b472bff69c83f24d9bac5bf023bd7f9ecc3e659742ac3152a239dd68f"
|
|
199
|
+
}
|
|
200
|
+
]
|
|
201
|
+
},
|
|
202
|
+
{
|
|
203
|
+
"type": "file",
|
|
204
|
+
"name": "templates/.claude/skills/goap-research-ed25519/references/research-actions.md",
|
|
205
|
+
"hashes": [
|
|
206
|
+
{
|
|
207
|
+
"alg": "SHA-256",
|
|
208
|
+
"content": "156d2f8ce342f7013bc758fe7c0d3ad3041b4f67f30dbcf8d59e091cb70d9a9c"
|
|
209
|
+
}
|
|
210
|
+
]
|
|
211
|
+
},
|
|
212
|
+
{
|
|
213
|
+
"type": "file",
|
|
214
|
+
"name": "templates/.claude/skills/goap-research-ed25519/references/source-evaluation.md",
|
|
215
|
+
"hashes": [
|
|
216
|
+
{
|
|
217
|
+
"alg": "SHA-256",
|
|
218
|
+
"content": "d6a19abb6be64dc9e1f539903080029125d2d899da4de3063e75e1afb7e4906f"
|
|
219
|
+
}
|
|
220
|
+
]
|
|
221
|
+
},
|
|
222
|
+
{
|
|
223
|
+
"type": "file",
|
|
224
|
+
"name": "templates/.claude/skills/goap-research-ed25519/scripts/ed25519_verifier.py",
|
|
225
|
+
"hashes": [
|
|
226
|
+
{
|
|
227
|
+
"alg": "SHA-256",
|
|
228
|
+
"content": "dc9edc4d7907d13b28dfa74cc86b30a27a41de707ce72f39aca0ae08f07b5703"
|
|
229
|
+
}
|
|
230
|
+
]
|
|
231
|
+
},
|
|
232
|
+
{
|
|
233
|
+
"type": "file",
|
|
234
|
+
"name": "templates/.claude/skills/goap-research-ed25519/scripts/goap_planner.py",
|
|
235
|
+
"hashes": [
|
|
236
|
+
{
|
|
237
|
+
"alg": "SHA-256",
|
|
238
|
+
"content": "2ec359e1ddc52ca3118144532ed483dcc609e856a04b29bb191b875c60ff4260"
|
|
239
|
+
}
|
|
240
|
+
]
|
|
241
|
+
},
|
|
242
|
+
{
|
|
243
|
+
"type": "file",
|
|
244
|
+
"name": "templates/.claude/skills/goap-research-ed25519/scripts/test_ed25519_verifier.py",
|
|
245
|
+
"hashes": [
|
|
246
|
+
{
|
|
247
|
+
"alg": "SHA-256",
|
|
248
|
+
"content": "ea6d888ac53bac3a0fe236c101f90a984edbac044d787d73c8414f1c4fc540d3"
|
|
249
|
+
}
|
|
250
|
+
]
|
|
251
|
+
},
|
|
252
|
+
{
|
|
253
|
+
"type": "file",
|
|
254
|
+
"name": "templates/.claude/skills/idea2prd-manual/SKILL.md",
|
|
255
|
+
"hashes": [
|
|
256
|
+
{
|
|
257
|
+
"alg": "SHA-256",
|
|
258
|
+
"content": "64780d15549e8c2c20a83fbb7afa6856cecbb6d7b940b72ea7d57dca83675786"
|
|
259
|
+
}
|
|
260
|
+
]
|
|
261
|
+
},
|
|
262
|
+
{
|
|
263
|
+
"type": "file",
|
|
264
|
+
"name": "templates/.claude/skills/idea2prd-manual/references/adr-catalog.md",
|
|
265
|
+
"hashes": [
|
|
266
|
+
{
|
|
267
|
+
"alg": "SHA-256",
|
|
268
|
+
"content": "e65f61ebeb9d3aa3179f0457028640510dca9e6f5c096ebc474d5a088280b828"
|
|
269
|
+
}
|
|
270
|
+
]
|
|
271
|
+
},
|
|
272
|
+
{
|
|
273
|
+
"type": "file",
|
|
274
|
+
"name": "templates/.claude/skills/idea2prd-manual/references/c4-model.md",
|
|
275
|
+
"hashes": [
|
|
276
|
+
{
|
|
277
|
+
"alg": "SHA-256",
|
|
278
|
+
"content": "5da67750e3b4c580252cd7368601a635d555dc2e6048751246f7c24d5a984f74"
|
|
279
|
+
}
|
|
280
|
+
]
|
|
281
|
+
},
|
|
282
|
+
{
|
|
283
|
+
"type": "file",
|
|
284
|
+
"name": "templates/.claude/skills/idea2prd-manual/references/completion-checklist-template.md",
|
|
285
|
+
"hashes": [
|
|
286
|
+
{
|
|
287
|
+
"alg": "SHA-256",
|
|
288
|
+
"content": "4bb8a09829a7d616eef11833f71cba4f9a56f24364eccb9061c57f275abd82f7"
|
|
289
|
+
}
|
|
290
|
+
]
|
|
291
|
+
},
|
|
292
|
+
{
|
|
293
|
+
"type": "file",
|
|
294
|
+
"name": "templates/.claude/skills/idea2prd-manual/references/ddd-patterns.md",
|
|
295
|
+
"hashes": [
|
|
296
|
+
{
|
|
297
|
+
"alg": "SHA-256",
|
|
298
|
+
"content": "897cdc8c51113080ddef1167e02e1fa9a711475bebbc144ec3bbf4ccf1b464be"
|
|
299
|
+
}
|
|
300
|
+
]
|
|
301
|
+
},
|
|
302
|
+
{
|
|
303
|
+
"type": "file",
|
|
304
|
+
"name": "templates/.claude/skills/idea2prd-manual/references/fitness-functions-catalog.md",
|
|
305
|
+
"hashes": [
|
|
306
|
+
{
|
|
307
|
+
"alg": "SHA-256",
|
|
308
|
+
"content": "3b32dfd48d4b1cdd0845a5e4934eb7589cf553dc6d6850d2d0acb80c88568dd9"
|
|
309
|
+
}
|
|
310
|
+
]
|
|
311
|
+
},
|
|
312
|
+
{
|
|
313
|
+
"type": "file",
|
|
314
|
+
"name": "templates/.claude/skills/idea2prd-manual/references/pseudocode-style.md",
|
|
315
|
+
"hashes": [
|
|
316
|
+
{
|
|
317
|
+
"alg": "SHA-256",
|
|
318
|
+
"content": "80b006853de2e3e38816b91a9b91443a512e9d0d3ec85801fee12f0e5025e155"
|
|
319
|
+
}
|
|
320
|
+
]
|
|
321
|
+
},
|
|
322
|
+
{
|
|
323
|
+
"type": "file",
|
|
324
|
+
"name": "templates/.claude/skills/idea2prd-manual/scripts/ai_context_builder.py",
|
|
325
|
+
"hashes": [
|
|
326
|
+
{
|
|
327
|
+
"alg": "SHA-256",
|
|
328
|
+
"content": "3468e0fa2f283107e9e0fb6b4598cea6d3f916508a528613efe416c79841f86e"
|
|
329
|
+
}
|
|
330
|
+
]
|
|
331
|
+
},
|
|
332
|
+
{
|
|
333
|
+
"type": "file",
|
|
334
|
+
"name": "templates/.claude/skills/idea2prd-manual/scripts/c4_generator.py",
|
|
335
|
+
"hashes": [
|
|
336
|
+
{
|
|
337
|
+
"alg": "SHA-256",
|
|
338
|
+
"content": "96d0c26edcd370c16fb5b171941b84dfe7a0b19c1b52cd7c3de234986ca8cbb6"
|
|
339
|
+
}
|
|
340
|
+
]
|
|
341
|
+
},
|
|
342
|
+
{
|
|
343
|
+
"type": "file",
|
|
344
|
+
"name": "templates/.claude/skills/idea2prd-manual/scripts/fitness_validator.py",
|
|
345
|
+
"hashes": [
|
|
346
|
+
{
|
|
347
|
+
"alg": "SHA-256",
|
|
348
|
+
"content": "50b552669b1797072632982bdc0eb661239c2a21f37563b23f67eeb7af1677c9"
|
|
349
|
+
}
|
|
350
|
+
]
|
|
351
|
+
},
|
|
352
|
+
{
|
|
353
|
+
"type": "file",
|
|
354
|
+
"name": "templates/.claude/skills/idea2prd-manual/scripts/pseudocode_generator.py",
|
|
355
|
+
"hashes": [
|
|
356
|
+
{
|
|
357
|
+
"alg": "SHA-256",
|
|
358
|
+
"content": "880cff2cc7b040c71114fe9dfea4d80f74686dfa8af6c6a90aed1ebe6ae21cfc"
|
|
359
|
+
}
|
|
360
|
+
]
|
|
361
|
+
},
|
|
362
|
+
{
|
|
363
|
+
"type": "file",
|
|
364
|
+
"name": "templates/.claude/skills/problem-solver-enhanced/SKILL.md",
|
|
365
|
+
"hashes": [
|
|
366
|
+
{
|
|
367
|
+
"alg": "SHA-256",
|
|
368
|
+
"content": "530623c986dee931d47314c22195ea9de50a75f2a0daecfc469fb015c3dd3415"
|
|
369
|
+
}
|
|
370
|
+
]
|
|
371
|
+
}
|
|
372
|
+
]
|
|
373
|
+
}
|
|
@@ -18,11 +18,83 @@ trust_tier: 1
|
|
|
18
18
|
|
|
19
19
|
| Feature | Benefit |
|
|
20
20
|
|---------|---------|
|
|
21
|
-
| **Phase 4.5: Pseudocode** |
|
|
21
|
+
| **Phase 4.5: Pseudocode** | Algorithm logic fixed before code, so codegen implements a decided design rather than inventing one (see `references/pseudocode-style.md`) |
|
|
22
22
|
| **Phase 5: Test Scenarios** | TDD-ready Gherkin specs |
|
|
23
23
|
| **Phase 6: Completion** | CI/CD, deployment, monitoring |
|
|
24
24
|
| **9 Checkpoints** | Full control over each phase |
|
|
25
25
|
|
|
26
|
+
## What's New in v3 (honesty + memory layer)
|
|
27
|
+
|
|
28
|
+
| Feature | Benefit |
|
|
29
|
+
|---------|---------|
|
|
30
|
+
| **Claim Discipline** | Every accuracy/count/percentage claim in an emitted doc carries an honest tag (MEASURED / CLAIMED / ESTIMATED) — no unsourced numbers |
|
|
31
|
+
| **ADR Confirmation stanza** | Every generated ADR names its load-bearing property + the fitness function / Gherkin test that would falsify it (Phase 3 → Phase 5 wired) |
|
|
32
|
+
| **Brain memory (Step 0 recall → closing teach)** | Recalls prior PRD/ADR lessons into the brief and teaches new ones at the end — idea2prd stops being write-once |
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## Authoring Discipline (applies to EVERY emitted doc)
|
|
37
|
+
|
|
38
|
+
### Claim Discipline (MEASURED / CLAIMED / ESTIMATED) — mandatory
|
|
39
|
+
|
|
40
|
+
The docs this skill emits (PRD, ADRs, fitness targets, executive summary) **must not carry untagged
|
|
41
|
+
accuracy, count, percentage, or performance claims.** Whenever you write a metric term next to a number
|
|
42
|
+
(`%`, `x faster`, coverage, latency, "N of M", "reduces … by …"), the same paragraph MUST carry one of
|
|
43
|
+
these honest tags, else do not write the number:
|
|
44
|
+
|
|
45
|
+
| Tag | Use when |
|
|
46
|
+
|-----|----------|
|
|
47
|
+
| `(MEASURED — <reproducer / source>)` | You actually ran/observed it — cite the command, file, or source |
|
|
48
|
+
| `(CLAIMED — <who/where>)` | Repeating an external/vendor claim you did not verify — attribute it |
|
|
49
|
+
| `(ESTIMATED — <basis>)` | A projection or target, not an observation — name the basis |
|
|
50
|
+
|
|
51
|
+
**Rule:** an untagged number that looks like a result is a defect. Prefer deleting a fabricated number
|
|
52
|
+
over dressing it up. This applies to **fitness-function targets and count tables too** — a target cell or
|
|
53
|
+
a count cell is a claim: template it as a `[placeholder]` and tag the real value MEASURED (an observed
|
|
54
|
+
baseline, naming its reproducer) or ESTIMATED (a chosen target, naming its basis) when it is filled in.
|
|
55
|
+
|
|
56
|
+
**Perfect-score prohibition:** a bare `100%` / `0 defects` / `never fails` / `always` cell is always a
|
|
57
|
+
HIGH finding — `dz claim-check` flags such a literal even when tagged, because perfection is almost never
|
|
58
|
+
observed. State the real value against a baseline (tag it MEASURED, name the reproducer), or express a
|
|
59
|
+
target as ESTIMATED with its basis (for example `target >= 95 (ESTIMATED from NFR-P01)`).
|
|
60
|
+
|
|
61
|
+
(This mirrors the harness Integrity Rule; a `dz claim-check` scan over the emitted `docs/` should pass —
|
|
62
|
+
run it if `dz` is available: `dz claim-check docs/ --fail-on medium`. Use `medium`, not `high`: `high`
|
|
63
|
+
lets ordinary untagged medium claims through — the false-green this discipline exists to stop.)
|
|
64
|
+
|
|
65
|
+
### Brain memory — recall at Step 0, teach at the end (pin ONE canonical store)
|
|
66
|
+
|
|
67
|
+
If the `dz` CLI is available, idea2prd **learns across runs**. The learned-pattern store is pinned to
|
|
68
|
+
**ONE canonical brain store** — the project root as an ABSOLUTE path (the directory that will hold
|
|
69
|
+
`docs/`) — via `--project`, so lessons land in one store instead of fragmenting across sub-directories
|
|
70
|
+
(a recall from one store and a teach to another cannot reinforce each other):
|
|
71
|
+
|
|
72
|
+
- **Step 0 (before Gate 0):** recall prior PRD/ADR lessons and fold the top ones into the brief.
|
|
73
|
+
- **Closing (after Phase 6):** teach the genuinely new lessons from this run.
|
|
74
|
+
|
|
75
|
+
Both are guarded by "if `dz` present" — absent `dz`, skip silently and run the pipeline unchanged.
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## Step 0: Brain Recall (run BEFORE Gate 0)
|
|
80
|
+
|
|
81
|
+
**Action (only if `dz` is on PATH — else skip silently):** resolve `<BRAIN>` to the **ABSOLUTE** path of
|
|
82
|
+
the project root (the directory that will hold `docs/`, e.g. via `pwd`) and use that SAME absolute path in
|
|
83
|
+
Step 0 recall and the closing teach. Via Bash run VERBATIM (`<BRAIN>` shell-quoted so a path with spaces
|
|
84
|
+
does not break the command):
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
cd "<BRAIN>" && dz recall "<key domain terms of this idea/problem> PRD ADR bounded-context" --project "<BRAIN>"
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
> `<BRAIN>` MUST be absolute. A relative `<BRAIN>` makes `cd "<BRAIN>"` then `--project "<BRAIN>"` resolve
|
|
91
|
+
> against the new working directory (a nested `<BRAIN>/<BRAIN>`), pinning the store to the wrong place.
|
|
92
|
+
|
|
93
|
+
- Log the number of patterns loaded.
|
|
94
|
+
- Fold the top 3 applicable patterns into the Task Brief / Requirements as a `{LEARNED_PATTERNS}` note,
|
|
95
|
+
and **preserve their text** so the closing teach step can compare candidate lessons against them.
|
|
96
|
+
- No patterns (first run) → proceed normally.
|
|
97
|
+
|
|
26
98
|
## Bundled Components
|
|
27
99
|
|
|
28
100
|
```
|
|
@@ -328,8 +400,14 @@ idea2prd-manual/
|
|
|
328
400
|
|
|
329
401
|
### Phase 3: ADR + C4
|
|
330
402
|
|
|
403
|
+
**Reference:** `references/adr-catalog.md` (ADR template — the `## Confirmation` stanza is REQUIRED).
|
|
404
|
+
|
|
331
405
|
**Генерирует:**
|
|
332
|
-
- 10+ ADRs
|
|
406
|
+
- 10+ ADRs — **every ADR MUST carry a `## Confirmation` stanza** (Method / Monitoring / Success metric /
|
|
407
|
+
Owner / **Load-bearing property** / **Required automated check: `<fitness function or Gherkin test>`**).
|
|
408
|
+
The named check MUST be a real Phase-5 artifact (a `FF-NNN` fitness function or a `.feature` Gherkin
|
|
409
|
+
scenario) — this is what wires Phase 3 → Phase 5 and turns each ADR from prose into a *checkable*
|
|
410
|
+
decision. An ADR whose Confirmation names no falsifying test is incomplete.
|
|
333
411
|
- C4 Level 1: System Context
|
|
334
412
|
- C4 Level 2: Container
|
|
335
413
|
- C4 Level 3: Component
|
|
@@ -342,12 +420,17 @@ idea2prd-manual/
|
|
|
342
420
|
|
|
343
421
|
## ADRs Summary
|
|
344
422
|
|
|
345
|
-
| ADR | Decision | Status |
|
|
346
|
-
|
|
347
|
-
| ADR-001 | [Architecture]: [choice] | Accepted |
|
|
348
|
-
| ADR-002 | [Database]: [choice] | Accepted |
|
|
423
|
+
| ADR | Decision | Status | Load-bearing property | Falsifying test |
|
|
424
|
+
|-----|----------|--------|-----------------------|-----------------|
|
|
425
|
+
| ADR-001 | [Architecture]: [choice] | Accepted | [property] | FF-NNN / [feature].feature |
|
|
426
|
+
| ADR-002 | [Database]: [choice] | Accepted | [property] | FF-NNN / [feature].feature |
|
|
349
427
|
...
|
|
350
428
|
|
|
429
|
+
> **Confirmation check:** every row above MUST name a load-bearing property and a real falsifying test —
|
|
430
|
+
> a `FF-NNN` fitness function id (3-digit, matching `references/fitness-functions-catalog.md`) or a Gherkin
|
|
431
|
+
> `.feature` scenario. A blank = an incomplete ADR — go back. **Phase 5 re-checks this table** (see the
|
|
432
|
+
> Phase-5 "ADR Confirmation reconciliation" step): every id named here must EXIST in the Phase-5 output.
|
|
433
|
+
|
|
351
434
|
## C4 Diagrams
|
|
352
435
|
|
|
353
436
|
- Level 1: System Context ✅
|
|
@@ -403,7 +486,7 @@ idea2prd-manual/
|
|
|
403
486
|
|
|
404
487
|
**Reference:** `references/pseudocode-style.md`
|
|
405
488
|
|
|
406
|
-
|
|
489
|
+
**Псевдокод фиксирует алгоритмическую логику ДО кодогенерации — кодоген реализует уже принятый дизайн, а не изобретает его по ходу.** (Никаких неподтверждённых процентов: любые метрики качества эмитятся только с честным тегом — см. раздел «Claim Discipline».)
|
|
407
490
|
|
|
408
491
|
**Действие Claude:**
|
|
409
492
|
```
|
|
@@ -482,10 +565,27 @@ END FUNCTION
|
|
|
482
565
|
### Phase 5: Validation, Tests & AI Context [ENHANCED]
|
|
483
566
|
|
|
484
567
|
**Генерирует:**
|
|
485
|
-
- 5+ Fitness Functions
|
|
568
|
+
- 5+ Fitness Functions (ids in the canonical `FF-NNN` 3-digit form — see `references/fitness-functions-catalog.md`)
|
|
486
569
|
- 5+ Gherkin Test Scenarios
|
|
487
570
|
- 8 .ai-context/ files
|
|
488
571
|
|
|
572
|
+
**ADR Confirmation reconciliation (REQUIRED — consumes the Phase-3 ADR table):**
|
|
573
|
+
|
|
574
|
+
Phase 5 is where each ADR's Confirmation stops being a promise. Before the Phase-5 checkpoint, iterate the
|
|
575
|
+
Checkpoint-3 **ADRs Summary** table and, for EVERY ADR, verify:
|
|
576
|
+
|
|
577
|
+
1. Its `Falsifying test` names a concrete artifact — a `FF-NNN` id or a `<feature>.feature` scenario — not
|
|
578
|
+
a placeholder (`FF-NNN`, `[feature]`, `TBD`, blank).
|
|
579
|
+
2. That artifact ACTUALLY EXISTS in this Phase-5 output: the `FF-NNN` id appears in the Fitness Functions
|
|
580
|
+
table (and `references/fitness-functions-catalog.md` / `scripts/fitness_validator.py`), or the `.feature`
|
|
581
|
+
file is in `docs/tests/`.
|
|
582
|
+
3. The named test is tied to the ADR's **load-bearing property** — it would go RED if that property were
|
|
583
|
+
violated (not merely a generic happy-path scenario).
|
|
584
|
+
|
|
585
|
+
A missing, placeholder, or property-mismatched test is an **incomplete ADR ⇒ Phase 5 is NOT signed off**:
|
|
586
|
+
go back and add the fitness function / Gherkin scenario (or correct the ADR). Emit the result as the "ADR
|
|
587
|
+
Confirmation Coverage" block below (every ADR row must read `✅ mapped`; any `🔴 unmapped` blocks sign-off).
|
|
588
|
+
|
|
489
589
|
**Test Scenarios (Gherkin):**
|
|
490
590
|
|
|
491
591
|
```gherkin
|
|
@@ -508,10 +608,23 @@ Feature: Order Placement
|
|
|
508
608
|
|
|
509
609
|
| ID | Rule | Target |
|
|
510
610
|
|----|------|--------|
|
|
511
|
-
| FF-
|
|
512
|
-
| FF-
|
|
611
|
+
| FF-001 | BC Independence | [target — tag MEASURED baseline or ESTIMATED from an NFR] |
|
|
612
|
+
| FF-002 | Aggregate Size | [threshold — e.g. entity cap, tag ESTIMATED with its basis] |
|
|
613
|
+
...
|
|
614
|
+
|
|
615
|
+
> Targets are claims: fill each with a tagged value (MEASURED baseline / ESTIMATED target), never a naked
|
|
616
|
+
> perfect score. See "Authoring Discipline → Claim Discipline".
|
|
617
|
+
|
|
618
|
+
## ADR Confirmation Coverage
|
|
619
|
+
|
|
620
|
+
| ADR | Load-bearing property | Named test | Exists in Phase 5? |
|
|
621
|
+
|-----|-----------------------|------------|--------------------|
|
|
622
|
+
| ADR-001 | [property] | FF-NNN / [feature].feature | ✅ mapped |
|
|
623
|
+
| ADR-002 | [property] | FF-NNN / [feature].feature | ✅ mapped |
|
|
513
624
|
...
|
|
514
625
|
|
|
626
|
+
> Any `🔴 unmapped` row blocks Phase-5 sign-off (the ADR named a test that does not exist here).
|
|
627
|
+
|
|
515
628
|
## Test Scenarios
|
|
516
629
|
|
|
517
630
|
| Feature | Scenarios | Coverage |
|
|
@@ -552,7 +665,31 @@ Feature: Order Placement
|
|
|
552
665
|
|
|
553
666
|
**Output file:** `docs/completion/COMPLETION_CHECKLIST.md`
|
|
554
667
|
|
|
555
|
-
**После Phase 6 — финальный Executive Summary (без checkpoint).**
|
|
668
|
+
**После Phase 6 — Brain Teach, затем финальный Executive Summary (без checkpoint).**
|
|
669
|
+
|
|
670
|
+
---
|
|
671
|
+
|
|
672
|
+
## Closing: Brain Teach (run AFTER Phase 6, only if `dz` present — else skip silently)
|
|
673
|
+
|
|
674
|
+
Close the learning loop: teach the genuinely NEW lessons from this run to the SAME canonical brain store
|
|
675
|
+
that Step 0 recalled from — the SAME ABSOLUTE `<BRAIN>` path (the project root), pinned with `--project`
|
|
676
|
+
so nothing fragments.
|
|
677
|
+
|
|
678
|
+
**Action:**
|
|
679
|
+
1. Compare the run's candidate lessons (a reusable PRD/ADR/DDD decision, a domain constraint that bit, a
|
|
680
|
+
fitness-function pattern) against the `{LEARNED_PATTERNS}` text recalled in Step 0.
|
|
681
|
+
2. For a lesson ALREADY covered by a recalled pattern → do NOT re-teach it (it is already in the store).
|
|
682
|
+
3. For each genuinely NEW lesson, via Bash run VERBATIM (one call per lesson):
|
|
683
|
+
|
|
684
|
+
```bash
|
|
685
|
+
cd "<BRAIN>" && dz teach "<one-line reusable lesson>" --reward 0.7 --domain idea2prd --project "<BRAIN>"
|
|
686
|
+
```
|
|
687
|
+
|
|
688
|
+
4. Log how many lessons were taught (0 is a valid, honest result on a run that surfaced nothing new).
|
|
689
|
+
|
|
690
|
+
> **Pin discipline:** Step 0 recall and this teach MUST hit the SAME absolute `<BRAIN>` (project root) via
|
|
691
|
+
> `--project`, shell-quoted — if recall reads one store and teach writes another, the two stores stay
|
|
692
|
+
> separate and the loop does not accumulate in a single place. This mirrors the feature-adr `args.brain` rule.
|
|
556
693
|
|
|
557
694
|
---
|
|
558
695
|
|
|
@@ -43,10 +43,33 @@
|
|
|
43
43
|
### Risks
|
|
44
44
|
- [Risk]: Mitigation: [approach]
|
|
45
45
|
|
|
46
|
+
## Confirmation
|
|
47
|
+
<!-- REQUIRED. An ADR without this stanza is incomplete. -->
|
|
48
|
+
- **Load-bearing property:** [the single property that, if it silently regressed, makes this decision wrong]
|
|
49
|
+
- **Required automated check:** [`FF-NNN` fitness function OR `docs/tests/<feature>.feature` Gherkin scenario that FAILS if the property is violated]
|
|
50
|
+
- **Verification method:** [how the check is run — e.g. CI stage, fitness_validator.py, test runner]
|
|
51
|
+
- **Monitoring:** [what to watch in production to detect drift — metric/log/alert]
|
|
52
|
+
- **Success metric:** [the threshold that says the property still holds — tag it MEASURED / ESTIMATED]
|
|
53
|
+
- **Owner:** [role/team accountable for the check]
|
|
54
|
+
|
|
46
55
|
## Related ADRs
|
|
47
56
|
- ADR-XXX: [relationship]
|
|
48
57
|
```
|
|
49
58
|
|
|
59
|
+
> **Confirmation stanza is load-bearing (idea2prd v3).** Every generated ADR MUST carry `## Confirmation`.
|
|
60
|
+
> Its `Required automated check` MUST name a REAL Phase-5 artifact — a `FF-NNN` fitness function
|
|
61
|
+
> (`references/fitness-functions-catalog.md` / `scripts/fitness_validator.py`) or a Gherkin `.feature`
|
|
62
|
+
> scenario — so the decision's load-bearing property is *falsifiable*, not prose. This wires Phase 3 (ADR)
|
|
63
|
+
> to Phase 5 (fitness/tests): the property an ADR names is often the one left untested (CLAIMED — harness
|
|
64
|
+
> feature-adr lesson, `.claude/rules/feature-adr-ultracode.md`), so the Confirmation stanza forces it to
|
|
65
|
+
> name its falsifying test.
|
|
66
|
+
> An ADR whose Confirmation names no falsifying check is **incomplete** — do not accept it at Checkpoint 3.
|
|
67
|
+
|
|
68
|
+
### Supersession discipline
|
|
69
|
+
|
|
70
|
+
Never edit an Accepted/Rejected ADR's decision in place. A changed decision **mints a new ADR** that
|
|
71
|
+
supersedes the old one (`Status: Superseded by ADR-XXX`), and the new ADR carries its own `## Confirmation`.
|
|
72
|
+
|
|
50
73
|
---
|
|
51
74
|
|
|
52
75
|
## Standard ADRs (Required)
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
Pseudocode в idea2prd используется для:
|
|
6
6
|
1. Точного описания алгоритмов до написания кода
|
|
7
|
-
2.
|
|
7
|
+
2. Фиксации алгоритмической логики до кодогенерации (логика описана независимо от синтаксиса реализации)
|
|
8
8
|
3. Документирования business logic
|
|
9
9
|
|
|
10
10
|
## Syntax Conventions
|