@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.
Files changed (30) hide show
  1. package/.dz-manifest.json +60 -20
  2. package/README.md +51 -4
  3. package/package.json +1 -1
  4. package/sbom.json +119 -19
  5. package/templates/.claude/skills/feature-adr/SKILL.md +48 -7
  6. package/templates/.claude/skills/feature-adr/modules/01-requirements.md +26 -0
  7. package/templates/.claude/skills/feature-adr/modules/02-research.md +26 -0
  8. package/templates/.claude/skills/feature-adr/modules/03-adr.md +26 -0
  9. package/templates/.claude/skills/feature-adr/modules/03.5-ideation-swarm.md +25 -0
  10. package/templates/.claude/skills/feature-adr/modules/04-ddd.md +25 -0
  11. package/templates/.claude/skills/feature-adr/modules/05-architecture.md +26 -0
  12. package/templates/.claude/skills/feature-adr/modules/06-implementation-plan.md +81 -4
  13. package/templates/.claude/skills/feature-adr/modules/08-qe.md +14 -1
  14. package/templates/.claude/skills/feature-adr/scripts/check-plan-completeness.mjs +303 -0
  15. package/templates/.claude/skills/goap-research-ed25519/SKILL.md +340 -47
  16. package/templates/.claude/skills/goap-research-ed25519/scripts/check_report_evidence.py +359 -3
  17. package/templates/.claude/skills/goap-research-ed25519/scripts/ed25519_verifier.py +386 -13
  18. package/templates/.claude/skills/goap-research-ed25519/scripts/fixture_legacy_v2_fact.json +23 -0
  19. package/templates/.claude/skills/goap-research-ed25519/scripts/fixtures_field_cases.json +133 -0
  20. package/templates/.claude/skills/goap-research-ed25519/scripts/goap_planner.py +314 -44
  21. package/templates/.claude/skills/goap-research-ed25519/scripts/learning_bridge.py +890 -303
  22. package/templates/.claude/skills/goap-research-ed25519/scripts/population_match.py +591 -0
  23. package/templates/.claude/skills/goap-research-ed25519/scripts/risk_statement.py +289 -0
  24. package/templates/.claude/skills/goap-research-ed25519/scripts/test_ed25519_verifier.py +57 -2
  25. package/templates/.claude/skills/goap-research-ed25519/scripts/test_evidence_provenance.py +969 -344
  26. package/templates/.claude/skills/goap-research-ed25519/scripts/test_goap_planner.py +420 -0
  27. package/templates/.claude/skills/goap-research-ed25519/scripts/test_population_match.py +544 -0
  28. package/templates/.claude/skills/goap-research-ed25519/scripts/test_risk_absolute.py +239 -0
  29. package/templates/.claude/skills/goap-research-ed25519/scripts/test_signature_v3.py +554 -0
  30. 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. Adapts depth by tier:
8
- - **S:** Inline checklist (3-5 items, no file)
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
- Inline checklist in conversation:
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, template hint text, raw prompt/generation scaffold, or empty tail sections |
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: