@dzhechkov/keysarium 1.5.36 → 1.5.38
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 +60 -20
- package/README.md +51 -4
- package/package.json +1 -1
- package/sbom.json +119 -19
- package/templates/.claude/skills/feature-adr/SKILL.md +48 -7
- package/templates/.claude/skills/feature-adr/modules/01-requirements.md +26 -0
- package/templates/.claude/skills/feature-adr/modules/02-research.md +26 -0
- package/templates/.claude/skills/feature-adr/modules/03-adr.md +26 -0
- package/templates/.claude/skills/feature-adr/modules/03.5-ideation-swarm.md +25 -0
- package/templates/.claude/skills/feature-adr/modules/04-ddd.md +25 -0
- package/templates/.claude/skills/feature-adr/modules/05-architecture.md +26 -0
- package/templates/.claude/skills/feature-adr/modules/06-implementation-plan.md +81 -4
- package/templates/.claude/skills/feature-adr/modules/08-qe.md +14 -1
- package/templates/.claude/skills/feature-adr/scripts/check-plan-completeness.mjs +303 -0
- package/templates/.claude/skills/goap-research-ed25519/SKILL.md +340 -47
- package/templates/.claude/skills/goap-research-ed25519/scripts/check_report_evidence.py +359 -3
- package/templates/.claude/skills/goap-research-ed25519/scripts/ed25519_verifier.py +386 -13
- package/templates/.claude/skills/goap-research-ed25519/scripts/fixture_legacy_v2_fact.json +23 -0
- package/templates/.claude/skills/goap-research-ed25519/scripts/fixtures_field_cases.json +133 -0
- package/templates/.claude/skills/goap-research-ed25519/scripts/goap_planner.py +314 -44
- package/templates/.claude/skills/goap-research-ed25519/scripts/learning_bridge.py +890 -303
- package/templates/.claude/skills/goap-research-ed25519/scripts/population_match.py +591 -0
- package/templates/.claude/skills/goap-research-ed25519/scripts/risk_statement.py +289 -0
- package/templates/.claude/skills/goap-research-ed25519/scripts/test_ed25519_verifier.py +57 -2
- package/templates/.claude/skills/goap-research-ed25519/scripts/test_evidence_provenance.py +969 -344
- package/templates/.claude/skills/goap-research-ed25519/scripts/test_goap_planner.py +420 -0
- package/templates/.claude/skills/goap-research-ed25519/scripts/test_population_match.py +544 -0
- package/templates/.claude/skills/goap-research-ed25519/scripts/test_risk_absolute.py +239 -0
- package/templates/.claude/skills/goap-research-ed25519/scripts/test_signature_v3.py +554 -0
- package/templates/.claude/skills/goap-research-ed25519/scripts/test_suite_completeness.py +90 -0
|
@@ -77,6 +77,32 @@ Explicitly state:
|
|
|
77
77
|
- **Dependencies:** What must exist before this feature works
|
|
78
78
|
- **Dependents:** What will break if this feature changes
|
|
79
79
|
|
|
80
|
+
## Write discipline (the 180-second rule)
|
|
81
|
+
|
|
82
|
+
An executor that returns from a tool call and then thinks in silence past **180 seconds** is killed by the
|
|
83
|
+
runtime. Thinking time grows with the history already accumulated, so on a large repo "read everything,
|
|
84
|
+
then write the document" is not a risk — it is a deterministic death, and nothing survives it, because
|
|
85
|
+
nothing was ever on disk.
|
|
86
|
+
|
|
87
|
+
MEASURED on this harness: the writing steps died **18 times out of 18** in the reading phase without ever
|
|
88
|
+
writing a file. The control — same slice, same model, one added instruction to write a skeleton early —
|
|
89
|
+
landed the skeleton 8 minutes in, on the first attempt, after six consecutive deaths.
|
|
90
|
+
|
|
91
|
+
So, in this step:
|
|
92
|
+
|
|
93
|
+
1. **Skeleton first — inside your first ~12 tool calls.** Write `features/<slug>/01_requirements.md` containing only the headings this step
|
|
94
|
+
requires (Stakeholders · Functional requirements · Non-functional requirements · Constraints ·
|
|
95
|
+
Scope boundaries · Open questions), one line of intent under each. (S-tier is inline and has no
|
|
96
|
+
file — this section does not apply to it.)
|
|
97
|
+
2. **Then fill it one section per edit.** No single edit longer than ~120 lines. Every edit leaves the
|
|
98
|
+
file readable; none of them is allowed to wait for the section after it.
|
|
99
|
+
3. **Never go more than 2 minutes without a tool call.** A thought that is getting long is the signal to
|
|
100
|
+
stop and write what you have — an edit is a checkpoint, not an interruption.
|
|
101
|
+
4. **When you are unsure whether to read more or to write, WRITE.** A thin section refined later survives;
|
|
102
|
+
a perfect section you never reached does not.
|
|
103
|
+
|
|
104
|
+
The skeleton is not a draft to apologise for. It is the artifact, opened early.
|
|
105
|
+
|
|
80
106
|
## Output
|
|
81
107
|
|
|
82
108
|
### For S-tier (inline)
|
|
@@ -73,6 +73,32 @@ Alternative considered: [Y], rejected because [reasons].
|
|
|
73
73
|
|
|
74
74
|
After both complete, synthesize results sequentially.
|
|
75
75
|
|
|
76
|
+
## Write discipline (the 180-second rule)
|
|
77
|
+
|
|
78
|
+
An executor that returns from a tool call and then thinks in silence past **180 seconds** is killed by the
|
|
79
|
+
runtime. Thinking time grows with the history already accumulated, so on a large repo "read everything,
|
|
80
|
+
then write the document" is not a risk — it is a deterministic death, and nothing survives it, because
|
|
81
|
+
nothing was ever on disk.
|
|
82
|
+
|
|
83
|
+
MEASURED on this harness: the writing steps died **18 times out of 18** in the reading phase without ever
|
|
84
|
+
writing a file. The control — same slice, same model, one added instruction to write a skeleton early —
|
|
85
|
+
landed the skeleton 8 minutes in, on the first attempt, after six consecutive deaths.
|
|
86
|
+
|
|
87
|
+
So, in this step:
|
|
88
|
+
|
|
89
|
+
1. **Skeleton first — inside your first ~12 tool calls.** Write `features/<slug>/02_research.md` containing only the headings this step
|
|
90
|
+
requires (Codebase patterns · External patterns · Library evaluation · Anti-patterns ·
|
|
91
|
+
Recommended approach), one line of intent under each — before the research agents report back,
|
|
92
|
+
not after.
|
|
93
|
+
2. **Then fill it one section per edit.** No single edit longer than ~120 lines. Every edit leaves the
|
|
94
|
+
file readable; none of them is allowed to wait for the section after it.
|
|
95
|
+
3. **Never go more than 2 minutes without a tool call.** A thought that is getting long is the signal to
|
|
96
|
+
stop and write what you have — an edit is a checkpoint, not an interruption.
|
|
97
|
+
4. **When you are unsure whether to read more or to write, WRITE.** A thin section refined later survives;
|
|
98
|
+
a perfect section you never reached does not.
|
|
99
|
+
|
|
100
|
+
The skeleton is not a draft to apologise for. It is the artifact, opened early.
|
|
101
|
+
|
|
76
102
|
## Output
|
|
77
103
|
|
|
78
104
|
Create `features/<slug>/02_research.md` with:
|
|
@@ -167,6 +167,32 @@ Each ADR must trace back to specific requirements:
|
|
|
167
167
|
| Placeholder text | Template hints or TODOs remain | Remove or fill before checkpoint |
|
|
168
168
|
| Supersession in-place | Existing ADR rewritten | Mint a new ADR and link it |
|
|
169
169
|
|
|
170
|
+
## Write discipline (the 180-second rule)
|
|
171
|
+
|
|
172
|
+
An executor that returns from a tool call and then thinks in silence past **180 seconds** is killed by the
|
|
173
|
+
runtime. Thinking time grows with the history already accumulated, so on a large repo "read everything,
|
|
174
|
+
then write the document" is not a risk — it is a deterministic death, and nothing survives it, because
|
|
175
|
+
nothing was ever on disk.
|
|
176
|
+
|
|
177
|
+
MEASURED on this harness: the writing steps died **18 times out of 18** in the reading phase without ever
|
|
178
|
+
writing a file. The control — same slice, same model, one added instruction to write a skeleton early —
|
|
179
|
+
landed the skeleton 8 minutes in, on the first attempt, after six consecutive deaths.
|
|
180
|
+
|
|
181
|
+
So, in this step:
|
|
182
|
+
|
|
183
|
+
1. **Skeleton first — inside your first ~12 tool calls.** For each decision you have identified, write
|
|
184
|
+
`features/<slug>/03_adr/NNN-{decision-slug}.md` containing only the invariant-core headings
|
|
185
|
+
(Status · Context · Decision Drivers · Considered Options · Decision · Rationale · Consequences ·
|
|
186
|
+
Confirmation), one line of intent under each. A named-but-empty option beats an unwritten ADR.
|
|
187
|
+
2. **Then fill it one section per edit.** No single edit longer than ~120 lines. Every edit leaves the
|
|
188
|
+
file readable; none of them is allowed to wait for the section after it.
|
|
189
|
+
3. **Never go more than 2 minutes without a tool call.** A thought that is getting long is the signal to
|
|
190
|
+
stop and write what you have — an edit is a checkpoint, not an interruption.
|
|
191
|
+
4. **When you are unsure whether to read more or to write, WRITE.** A thin section refined later survives;
|
|
192
|
+
a perfect section you never reached does not.
|
|
193
|
+
|
|
194
|
+
The skeleton is not a draft to apologise for. It is the artifact, opened early.
|
|
195
|
+
|
|
170
196
|
## Output
|
|
171
197
|
|
|
172
198
|
Create `features/<slug>/03_adr/` directory with:
|
|
@@ -154,6 +154,31 @@ AM-N (source): <change>. Confirmation: <property> → test `test_name` (fails if
|
|
|
154
154
|
an existence test and never fires in production.
|
|
155
155
|
- A cheap lint holds the shape: every `AM-N` line must contain a `→ test ` token naming a test that exists.
|
|
156
156
|
|
|
157
|
+
## Write discipline (the 180-second rule)
|
|
158
|
+
|
|
159
|
+
An executor that returns from a tool call and then thinks in silence past **180 seconds** is killed by the
|
|
160
|
+
runtime. Thinking time grows with the history already accumulated, so on a large repo "read everything,
|
|
161
|
+
then write the document" is not a risk — it is a deterministic death, and nothing survives it, because
|
|
162
|
+
nothing was ever on disk.
|
|
163
|
+
|
|
164
|
+
MEASURED on this harness: the writing steps died **18 times out of 18** in the reading phase without ever
|
|
165
|
+
writing a file. The control — same slice, same model, one added instruction to write a skeleton early —
|
|
166
|
+
landed the skeleton 8 minutes in, on the first attempt, after six consecutive deaths.
|
|
167
|
+
|
|
168
|
+
So, in this step:
|
|
169
|
+
|
|
170
|
+
1. **Skeleton first — inside your first ~12 tool calls.** Write `features/<slug>/03.5_ideation_report.md` containing only the eight
|
|
171
|
+
section headings of §5 (Executive summary … Amendments), one line of intent under each — while
|
|
172
|
+
the swarm is still running, not after every agent has returned.
|
|
173
|
+
2. **Then fill it one section per edit.** No single edit longer than ~120 lines. Every edit leaves the
|
|
174
|
+
file readable; none of them is allowed to wait for the section after it.
|
|
175
|
+
3. **Never go more than 2 minutes without a tool call.** A thought that is getting long is the signal to
|
|
176
|
+
stop and write what you have — an edit is a checkpoint, not an interruption.
|
|
177
|
+
4. **When you are unsure whether to read more or to write, WRITE.** A thin section refined later survives;
|
|
178
|
+
a perfect section you never reached does not.
|
|
179
|
+
|
|
180
|
+
The skeleton is not a draft to apologise for. It is the artifact, opened early.
|
|
181
|
+
|
|
157
182
|
## Output
|
|
158
183
|
|
|
159
184
|
Create `features/<slug>/03.5_ideation_report.md` with full QCSD report.
|
|
@@ -92,6 +92,31 @@ Check that proposed domain model is compatible with existing code:
|
|
|
92
92
|
- Can aggregates be implemented with existing ORM/framework?
|
|
93
93
|
- Do relationships align with existing data access patterns?
|
|
94
94
|
|
|
95
|
+
## Write discipline (the 180-second rule)
|
|
96
|
+
|
|
97
|
+
An executor that returns from a tool call and then thinks in silence past **180 seconds** is killed by the
|
|
98
|
+
runtime. Thinking time grows with the history already accumulated, so on a large repo "read everything,
|
|
99
|
+
then write the document" is not a risk — it is a deterministic death, and nothing survives it, because
|
|
100
|
+
nothing was ever on disk.
|
|
101
|
+
|
|
102
|
+
MEASURED on this harness: the writing steps died **18 times out of 18** in the reading phase without ever
|
|
103
|
+
writing a file. The control — same slice, same model, one added instruction to write a skeleton early —
|
|
104
|
+
landed the skeleton 8 minutes in, on the first attempt, after six consecutive deaths.
|
|
105
|
+
|
|
106
|
+
So, in this step:
|
|
107
|
+
|
|
108
|
+
1. **Skeleton first — inside your first ~12 tool calls.** Write `features/<slug>/04_domain_model.md` containing only the headings this step
|
|
109
|
+
requires (Bounded context map · Ubiquitous language · Aggregates/Entities/VOs · Relationships ·
|
|
110
|
+
Codebase mapping), one line of intent under each.
|
|
111
|
+
2. **Then fill it one section per edit.** No single edit longer than ~120 lines. Every edit leaves the
|
|
112
|
+
file readable; none of them is allowed to wait for the section after it.
|
|
113
|
+
3. **Never go more than 2 minutes without a tool call.** A thought that is getting long is the signal to
|
|
114
|
+
stop and write what you have — an edit is a checkpoint, not an interruption.
|
|
115
|
+
4. **When you are unsure whether to read more or to write, WRITE.** A thin section refined later survives;
|
|
116
|
+
a perfect section you never reached does not.
|
|
117
|
+
|
|
118
|
+
The skeleton is not a draft to apologise for. It is the artifact, opened early.
|
|
119
|
+
|
|
95
120
|
## Output
|
|
96
121
|
|
|
97
122
|
Create `features/<slug>/04_domain_model.md` with:
|
|
@@ -118,6 +118,32 @@ GET /api/v1/{resource}/:id
|
|
|
118
118
|
Errors: 401, 404
|
|
119
119
|
```
|
|
120
120
|
|
|
121
|
+
## Write discipline (the 180-second rule)
|
|
122
|
+
|
|
123
|
+
An executor that returns from a tool call and then thinks in silence past **180 seconds** is killed by the
|
|
124
|
+
runtime. Thinking time grows with the history already accumulated, so on a large repo "read everything,
|
|
125
|
+
then write the document" is not a risk — it is a deterministic death, and nothing survives it, because
|
|
126
|
+
nothing was ever on disk.
|
|
127
|
+
|
|
128
|
+
MEASURED on this harness: the writing steps died **18 times out of 18** in the reading phase without ever
|
|
129
|
+
writing a file. The control — same slice, same model, one added instruction to write a skeleton early —
|
|
130
|
+
landed the skeleton 8 minutes in, on the first attempt, after six consecutive deaths.
|
|
131
|
+
|
|
132
|
+
So, in this step:
|
|
133
|
+
|
|
134
|
+
1. **Skeleton first — inside your first ~12 tool calls.** Write `features/<slug>/05_architecture.md` containing only the headings this step
|
|
135
|
+
requires at your tier (C4 Context · C4 Container · C4 Component · Sequence flows · Data & storage ·
|
|
136
|
+
API design), one line of intent under each. An empty `mermaid` fence with a caption is a
|
|
137
|
+
heading; fill it later.
|
|
138
|
+
2. **Then fill it one section per edit.** No single edit longer than ~120 lines. Every edit leaves the
|
|
139
|
+
file readable; none of them is allowed to wait for the section after it.
|
|
140
|
+
3. **Never go more than 2 minutes without a tool call.** A thought that is getting long is the signal to
|
|
141
|
+
stop and write what you have — an edit is a checkpoint, not an interruption.
|
|
142
|
+
4. **When you are unsure whether to read more or to write, WRITE.** A thin section refined later survives;
|
|
143
|
+
a perfect section you never reached does not.
|
|
144
|
+
|
|
145
|
+
The skeleton is not a draft to apologise for. It is the artifact, opened early.
|
|
146
|
+
|
|
121
147
|
## Output
|
|
122
148
|
|
|
123
149
|
### M-tier
|
|
@@ -4,8 +4,11 @@
|
|
|
4
4
|
|
|
5
5
|
## When
|
|
6
6
|
|
|
7
|
-
Always runs.
|
|
8
|
-
- **S:**
|
|
7
|
+
Always runs, and ALWAYS writes `features/<slug>/06_implementation_plan.md` — every tier. Depth adapts:
|
|
8
|
+
- **S:** minimal plan FILE (3-5 tasks + an `EXPECTED_CODE_TARGETS:` block). An inline-only checklist is
|
|
9
|
+
no longer permitted: the K2 gate below is mandatory at every tier and it reads the file, so a plan
|
|
10
|
+
that exists only in the conversation makes the gate answer NOT-ESTABLISHED and the run stops. The
|
|
11
|
+
file must clear the gate's own floor: >200 characters and a non-empty targets block.
|
|
9
12
|
- **M/L/XL:** Full structured plan document
|
|
10
13
|
|
|
11
14
|
## Model
|
|
@@ -132,15 +135,45 @@ Before finalizing the plan, validate completeness:
|
|
|
132
135
|
|
|
133
136
|
This gap-check loop ensures the implementation plan is complete before coding begins.
|
|
134
137
|
|
|
138
|
+
## Write discipline (the 180-second rule)
|
|
139
|
+
|
|
140
|
+
An executor that returns from a tool call and then thinks in silence past **180 seconds** is killed by the
|
|
141
|
+
runtime. Thinking time grows with the history already accumulated, so on a large repo "read everything,
|
|
142
|
+
then write the document" is not a risk — it is a deterministic death, and nothing survives it, because
|
|
143
|
+
nothing was ever on disk.
|
|
144
|
+
|
|
145
|
+
MEASURED on this harness: the writing steps died **18 times out of 18** in the reading phase without ever
|
|
146
|
+
writing a file. The control — same slice, same model, one added instruction to write a skeleton early —
|
|
147
|
+
landed the skeleton 8 minutes in, on the first attempt, after six consecutive deaths.
|
|
148
|
+
|
|
149
|
+
So, in this step:
|
|
150
|
+
|
|
151
|
+
1. **Skeleton first — inside your first ~12 tool calls.** Write `features/<slug>/06_implementation_plan.md` containing only the headings
|
|
152
|
+
this step requires (Goal state · Tasks · Dependency order · Parallel groups · Checkpoints · Risk
|
|
153
|
+
assessment · Amendments · `EXPECTED_CODE_TARGETS:`), one line of intent under each. The K2 gate
|
|
154
|
+
reads this file — a plan that lives only in the conversation cannot pass it.
|
|
155
|
+
2. **Then fill it one section per edit.** No single edit longer than ~120 lines. Every edit leaves the
|
|
156
|
+
file readable; none of them is allowed to wait for the section after it.
|
|
157
|
+
3. **Never go more than 2 minutes without a tool call.** A thought that is getting long is the signal to
|
|
158
|
+
stop and write what you have — an edit is a checkpoint, not an interruption.
|
|
159
|
+
4. **When you are unsure whether to read more or to write, WRITE.** A thin section refined later survives;
|
|
160
|
+
a perfect section you never reached does not.
|
|
161
|
+
|
|
162
|
+
The skeleton is not a draft to apologise for. It is the artifact, opened early.
|
|
163
|
+
|
|
135
164
|
## Output
|
|
136
165
|
|
|
137
|
-
### S-tier (inline)
|
|
138
|
-
|
|
166
|
+
### S-tier (minimal file — NOT inline-only)
|
|
167
|
+
Write `features/<slug>/06_implementation_plan.md` with the checklist plus the machine-read block, and
|
|
168
|
+
show the same checklist inline at the checkpoint:
|
|
139
169
|
```
|
|
140
170
|
Implementation plan:
|
|
141
171
|
- [ ] {task 1}
|
|
142
172
|
- [ ] {task 2}
|
|
143
173
|
- [ ] {task 3}
|
|
174
|
+
|
|
175
|
+
EXPECTED_CODE_TARGETS:
|
|
176
|
+
- {repo-relative path Step 7 will create or modify}
|
|
144
177
|
```
|
|
145
178
|
|
|
146
179
|
### M/L/XL
|
|
@@ -157,6 +190,48 @@ Create `features/<slug>/06_implementation_plan.md` with:
|
|
|
157
190
|
|
|
158
191
|
Set `{IMPL_PLAN}` variable.
|
|
159
192
|
|
|
193
|
+
## K2 plan-completeness gate (MANDATORY — Step 7 does not start until it exits 0)
|
|
194
|
+
|
|
195
|
+
After the plan is written, run the gate. It is a script, not a judgement call:
|
|
196
|
+
|
|
197
|
+
```bash
|
|
198
|
+
node .claude/skills/feature-adr/scripts/check-plan-completeness.mjs features/<slug>
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
The path above is relative to the workspace the skill is INSTALLED in. Working inside a target repo
|
|
202
|
+
that has no feature-adr install of its own? Pass the absolute path to the script instead — the
|
|
203
|
+
ultracode workflow does this for you (it tries `args.gateScript`, then the workspace copy, then the
|
|
204
|
+
target-repo copy, and refuses with `tooling-missing` if none exists). The gate is language-neutral:
|
|
205
|
+
C2 recognises JS/TS, pytest, Go, Rust, JVM and .NET test paths, extensible per project with
|
|
206
|
+
`testPathRules` in `architecture/project-skills.json`.
|
|
207
|
+
|
|
208
|
+
| Exit | Verdict | What you do |
|
|
209
|
+
|------|---------|-------------|
|
|
210
|
+
| `0` | PASS | proceed to Step 7 |
|
|
211
|
+
| `1` | FAIL | **return to Step 6** — fix the plan for every `FAIL C*` line, rerun the gate |
|
|
212
|
+
| `3` | NOT-ESTABLISHED | **INCONCLUSIVE** — the gate could not read its inputs (no plan, plan under the size floor, ADR claims it cannot see). Fix the inputs and rerun. Never proceed. |
|
|
213
|
+
|
|
214
|
+
Never proceed on a non-zero exit, and never treat empty output as a pass — the last line
|
|
215
|
+
(`K2 plan-completeness: PASS|FAIL|NOT-ESTABLISHED`) is the verdict, and its absence is not one.
|
|
216
|
+
What it checks: C1 every ADR has a plan task citing it · C2 every ADR Confirmation test path is named
|
|
217
|
+
in the plan · C3 the `EXPECTED_CODE_TARGETS:` block parses line by line · C4 the feature's declared
|
|
218
|
+
acid corpus is named · C5 (WARN) the `Inputs read:` line. An S-tier run with no `03_adr/` skips C1/C2
|
|
219
|
+
with a note (it cannot be failed for ADRs it never had) — unless the plan itself cites `ADR-<n>`,
|
|
220
|
+
which is NOT-ESTABLISHED. C1 is a grep: it catches "forgot entirely", not "mentioned but not tasked".
|
|
221
|
+
|
|
222
|
+
Pass the run's tier so the check cannot be dodged: `--tier=S|M|L|XL`. An M/L/XL feature with no
|
|
223
|
+
`03_adr/` FAILS C1/C2 (an M+ feature owes ADRs); only `--tier=S` — or no tier at all, and then the
|
|
224
|
+
skip note says so — takes the skip. A declared-but-malformed acid table (lowercase `| a1 |`, a header
|
|
225
|
+
with no parsable rows) FAILS as `C4-malformed`; it is not a skip.
|
|
226
|
+
|
|
227
|
+
**If the gate fails in the ultracode workflow:** the run returns `phase: 'plan-gate-failed'` and the
|
|
228
|
+
plan stage is CHECKPOINTED, so a bare re-invoke resumes the same failing plan. Repair it from outside:
|
|
229
|
+
edit `features/<slug>/06_implementation_plan.md` to fix each `FAIL` line and re-invoke (the checkpoint
|
|
230
|
+
is keyed on run INPUTS, not on the file, so your edit survives), or re-invoke with `args.resume:
|
|
231
|
+
'never'` (or delete `features/<slug>/.fa-state/`) to force a fresh plan.
|
|
232
|
+
|
|
233
|
+
The checkpoint banner's Gates line carries the verdict: `K2 plan-completeness ✓ | ✗ | inconclusive`.
|
|
234
|
+
|
|
160
235
|
## Checkpoint Format
|
|
161
236
|
|
|
162
237
|
```
|
|
@@ -167,6 +242,7 @@ Tier: {COMPLEXITY_TIER}
|
|
|
167
242
|
|
|
168
243
|
{N} tasks in {M} parallel groups
|
|
169
244
|
Estimated {K} files to create/modify
|
|
245
|
+
🚦 Gates: K2 plan-completeness ✓ (exit 0) ← ✗/inconclusive ⇒ do NOT start Step 7
|
|
170
246
|
|
|
171
247
|
• "ок" — start coding
|
|
172
248
|
• "разбей [TASK-N]" — split task further
|
|
@@ -196,3 +272,4 @@ re-flagging it. In the ultracode workflow this врезка runs automatically a
|
|
|
196
272
|
- [ ] Parallel groups correctly identified
|
|
197
273
|
- [ ] Each task touches identifiable files
|
|
198
274
|
- [ ] Total file count matches complexity tier expectation
|
|
275
|
+
- [ ] `check-plan-completeness.mjs features/<slug>` exited 0 (its output quoted at the checkpoint)
|
|
@@ -152,7 +152,7 @@ Fail the ADR gate for any miss:
|
|
|
152
152
|
| Follow-up discipline | Consequences link follow-up ADRs or state none; after-action review is scheduled |
|
|
153
153
|
| Confirmation stanza | Names verification method, monitoring, success metric, and owner |
|
|
154
154
|
| Confirmation-to-test link | The named load-bearing property has a real automated test/fitness check by file/name |
|
|
155
|
-
| No placeholders | No TODO
|
|
155
|
+
| No placeholders | No `TODO`, template hint text, raw prompt/generation scaffold, or empty tail sections |
|
|
156
156
|
|
|
157
157
|
Reject explainer-masquerading-as-ADR: if the document describes a problem space or technology landscape but has no concrete `Decision`, record a BLOCKER.
|
|
158
158
|
|
|
@@ -182,6 +182,19 @@ paths — especially startup/lifespan/health: require a negative resource-down t
|
|
|
182
182
|
path degrades per its declared contract: fail-open for advisory, explicit fail-fast for load-bearing).
|
|
183
183
|
Missing → HIGH gap.
|
|
184
184
|
|
|
185
|
+
### 3d. No-stubs gate (backlog 0b403a0106103901 — layer 1 of the cost-of-detection ladder)
|
|
186
|
+
|
|
187
|
+
Over the files THIS RUN touched (the Step-7 change list; for a Codex coder, the landed-barrier file
|
|
188
|
+
list), grep for unfinished-stub markers: `TODO` / `FIXME` / `HACK` / `XXX` / `PLACEHOLDER`
|
|
189
|
+
(case-SENSITIVE, word-bounded — never add `-i`; `hackathon`/`todos` must not fire) plus the phrase
|
|
190
|
+
`implement later` (case-insensitive). **Any match = the task shipped incomplete** → HIGH gap naming
|
|
191
|
+
file:line, UNLESS the line carries an inline `no-stubs: <reason>` waiver WITH a non-empty reason, or
|
|
192
|
+
`.dz/guard.json` `stubWaivers` lists the path WITH a reason. A REASONLESS waiver is itself a HIGH gap,
|
|
193
|
+
never an exemption. Cross-check mechanically: `dz guard check --op publish --json` runs the same scan
|
|
194
|
+
as the SOFT `no-stubs` rule over the working-tree diff. When you QUOTE a marker in `08_qe_report.md`,
|
|
195
|
+
backtick it so the report itself scans clean (the claim-check forbidden-phrase convention). Record the
|
|
196
|
+
verdict in the ADR Fitness section.
|
|
197
|
+
|
|
185
198
|
### 4. Multi-Agent Review Panel (L/XL)
|
|
186
199
|
|
|
187
200
|
For L/XL features, spawn 3 parallel review agents using brutal-honesty modes:
|