@dzhechkov/keysarium 1.5.28 β†’ 1.5.29

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/bin/cli.js CHANGED
File without changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dzhechkov/keysarium",
3
- "version": "1.5.28",
3
+ "version": "1.5.29",
4
4
  "description": "AI Case Research Toolkit for Claude Code β€” full 7-phase pipeline with feature-adr, dream cycles, background workers, multi-platform support, reward learning, and Cloud.ru AI Factory mapping (--ai-factory flag)",
5
5
  "main": "src/cli.js",
6
6
  "bin": {
@@ -50,4 +50,4 @@
50
50
  "publishConfig": {
51
51
  "access": "public"
52
52
  }
53
- }
53
+ }
@@ -493,6 +493,12 @@ only the statusline:
493
493
  πŸŽ“ Learning: {recalled} patterns recalled for this feature, {stored} new stored this run
494
494
  ```
495
495
 
496
+ **Record the panel at the START of every step, not only at Steps 0/8/9.** The panel shows the last step
497
+ that reported; a pipeline that reports three times per run shows a stale step for most of its life. Emit
498
+ `dz statusline --fa-record --slug <slug> --step "<Step N Name>" --recalled <n> --stored <n>` as the first
499
+ action of each step. The recall/teach counts only change at Steps 0/8/9; the *step label* changes at every
500
+ one of them.
501
+
496
502
  *Honesty note:* the panel is live only insofar as the pipeline records state β€” it reflects what the
497
503
  pipeline actually did with the loop (recalls that ran, stores that landed), not an aspirational count.
498
504
 
@@ -583,6 +589,7 @@ npx @dzhechkov/skills-feature-adr init --with-learning --knowledge-extractor
583
589
  <promise>[PROMISE_TAG]</promise>
584
590
  Tier: {COMPLEXITY_TIER} | Active Steps: {ACTIVE_STEPS}
585
591
  πŸŽ“ Learning: {recalled} patterns recalled for this feature, {stored} new stored this run
592
+ 🚦 Gates: challenge-panel βœ“ Β· claim-check βœ“ Β· discrimination not-run Β· amendments βœ“ Β· fleet β€”
586
593
 
587
594
  [2-3 line summary]
588
595
  Artifacts: [list] βœ…
@@ -592,3 +599,16 @@ Artifacts: [list] βœ…
592
599
  β€’ "[feedback]" β€” adjust
593
600
  ═══════════════════════════════════════════════════════
594
601
  ```
602
+
603
+ ### The 🚦 Gates line (mandatory, DERIVED β€” never asserted from memory)
604
+
605
+ Every checkpoint banner carries a `🚦 Gates:` line listing each gate relevant to the run so far. Symbols:
606
+ `βœ“` ran and passed Β· `βœ—` ran and failed Β· `not-run` pending Β· `β€”` N/A for this tier/slice (say why once).
607
+ Each value is **derived from machine-checkable state** β€” an artifact's existence, a command's JSON verdict, a
608
+ test result β€” never from what the orchestrator remembers doing. The line does not make a gate run; it makes
609
+ NOT running one loud: a skipped gate shows as `not-run` by construction instead of being silently forgotten
610
+ (cost-of-detection ladder: the banner is the one surface emitted at EVERY step boundary, so strapping the
611
+ checklist to it is the cheapest way to harden orchestrator judgment). Gate sources: challenge-panel β†’ its
612
+ verdict exists; claim-check β†’ its JSON counts (`high-findings` vs `clean`); discrimination β†’ the
613
+ `dz discrimination-check` aggregate; amendments β†’ every `AM-N` row carries its `β†’ test` and it was checked;
614
+ fleet β†’ the 09 artifact (L/XL only, else `β€”`).
@@ -119,7 +119,8 @@ After all agents complete, apply decision logic:
119
119
  | Critical Risks | > 2 | 1-2 | 0 |
120
120
 
121
121
  - **NO-GO**: BLOCK. Requirements/ADR need rework. Return to Step 1 or Step 3.
122
- - **CONDITIONAL**: Proceed with warnings. Pass findings to Steps 6-8 as advisory context.
122
+ - **CONDITIONAL**: Proceed with warnings. Each condition becomes an **amendment row** in a `## Amendments`
123
+ section (see below) β€” not loose advisory prose.
123
124
  - **GO**: Full confidence. Proceed to Step 6.
124
125
 
125
126
  ### 5. Synthesis Report
@@ -132,6 +133,26 @@ Generate consolidated `03.5_ideation_report.md` with:
132
133
  5. Test ideas (categorized: unit / integration / E2E)
133
134
  6. Conditional agent findings (if any)
134
135
  7. Recommendations prioritized by risk Γ— impact
136
+ 8. `## Amendments` β€” on a CONDITIONAL verdict, every condition as a fixed-shape row (see below)
137
+
138
+ ### Amendment Confirmation discipline (every amendment is a mini-ADR)
139
+
140
+ Amendments are where the sharpest design corrections land β€” and, historically, the least-tested part of a
141
+ run: they arrive as prose AFTER the ADR's Confirmation discipline already ran, so a coder can implement one
142
+ with no test proving it works. Therefore every amendment carries a one-line **Confirmation**, in a fixed,
143
+ machine-checkable shape:
144
+
145
+ ```
146
+ AM-N (source): <change>. Confirmation: <property> β†’ test `test_name` (fails if reverted).
147
+ ```
148
+
149
+ - `source` names where it came from (qcsd | challenge-panel | user-steer).
150
+ - The named test must FAIL if the amendment were reverted/broken (non-vacuous β€” Step 8 verifies via
151
+ `dz discrimination-check`).
152
+ - For a **safeguard** amendment (a warning/guard/fallback): the test must prove the safeguard actually
153
+ **TRIGGERS on a real input** β€” not merely that its code path exists. A structurally-dead safeguard passes
154
+ an existence test and never fires in production.
155
+ - A cheap lint holds the shape: every `AM-N` line must contain a `β†’ test ` token naming a test that exists.
135
156
 
136
157
  ## Output
137
158
 
@@ -149,6 +149,11 @@ Create `features/<slug>/06_implementation_plan.md` with:
149
149
  - Parallel groups
150
150
  - Checkpoint schedule
151
151
  - Risk assessment (L/XL)
152
+ - `## Amendments` β€” every correction folded into this plan (a Step-3.5 CONDITIONAL condition, a
153
+ challenge-panel confirmed finding, a user checkpoint steer) as a fixed-shape row:
154
+ `AM-N (source): <change>. Confirmation: <property> β†’ test `test_name` (fails if reverted).`
155
+ A safeguard amendment's named test must prove it TRIGGERS on a real input, not merely that its code
156
+ path exists. Step 8 verifies every named test exists and is non-vacuous (`dz discrimination-check`).
152
157
 
153
158
  Set `{IMPL_PLAN}` variable.
154
159
 
@@ -169,6 +174,21 @@ Estimated {K} files to create/modify
169
174
  ═══════════════════════════════════════════════════════
170
175
  ```
171
176
 
177
+ ## Challenge panel (adversarial plan-gate β€” before coding)
178
+
179
+ Before leaving the plan checkpoint for code (especially L/XL), offer the **`challenge-panel`** skill β€” a
180
+ FRESH adversary (never the plan author) tries to BREAK the plan across the fixed C1-C8 owner questions,
181
+ every P0/P1 is cross-validated, and the verdict is ADVISORY (never an auto-block):
182
+
183
+ ```bash
184
+ dz challenge --plan features/<slug>/06_implementation_plan.md --author <planner-model>
185
+ ```
186
+
187
+ Dispatch the panel on the CROSS-FAMILY model (`--author` prints which): plan by Claude β†’ Codex adversary
188
+ (honest `codex exec`, never a stub); plan by Codex β†’ fresh Claude. Drop any P0/P1 the cross-validator does
189
+ not confirm. A finding the owner accepts can be recorded in `architecture/degradations.md` so C1 stops
190
+ re-flagging it. In the ultracode workflow this Π²Ρ€Π΅Π·ΠΊΠ° runs automatically and returns `challengeVerdict`.
191
+
172
192
  ## Quality Gates
173
193
 
174
194
  - [ ] Every task has clear done criteria
@@ -31,6 +31,24 @@ Before writing any code:
31
31
  - [ ] Identify import patterns and module structure
32
32
  - [ ] Identify error handling patterns
33
33
  - [ ] Identify test patterns
34
+ - [ ] Plan carries `## Amendments`? β†’ implement every AM-N row AND its named Confirmation test (a
35
+ safeguard amendment needs a test proving it FIRES on a real input)
36
+ - [ ] Does the diff add I/O (DB/network/file) to a previously-pure path β€” especially
37
+ startup/lifespan/health? β†’ name the NEGATIVE resource-down test, or justify N/A
38
+
39
+ ### The I/O-on-pure-path rule (and the fixture-swap smell)
40
+
41
+ If a change introduces I/O into a path that was previously I/O-free β€” above all a startup, lifespan, or
42
+ health path β€” the happy-path test is NOT enough. Also write a **negative resource-down test**: a
43
+ broken/unbound resource handle (dead DB, missing table, exhausted pool) β†’ the path degrades per its
44
+ declared contract β€” **fail-open** for an advisory feature, **explicit fail-fast** for a load-bearing one.
45
+ Without it, an outage of the resource takes down the whole path (including health checks) for the sake of
46
+ an advisory feature β€” and healthy test fixtures will hide it.
47
+
48
+ **Fixture-swap smell:** if making the new code pass required replacing a "broken" test fixture with a
49
+ healthy one β€” stop. The old fixture was probably a negative control proving the path was I/O-free. Keep
50
+ BOTH tests: the healthy one (new behavior) and the broken one (degradation contract). Never silently
51
+ delete the case that proved the old property.
34
52
 
35
53
  ### 2. Execute Tasks per Plan
36
54
 
@@ -158,6 +158,30 @@ Reject explainer-masquerading-as-ADR: if the document describes a problem space
158
158
 
159
159
  The Confirmation-to-test link is load-bearing. If absent, grade no better than C and record a blocker gap; for architecture dependency/layering/interface rules, recommend an ArchUnit or ArchUnitTS fitness function.
160
160
 
161
+ ### 3b. Amendment Gate (P2 β€” amendments inherit the Confirmation discipline)
162
+
163
+ Read the `## Amendments` sections of `03.5_ideation_report.md` and `06_implementation_plan.md` (skip
164
+ silently if absent). For EVERY `AM-N` row verify:
165
+ 1. the row contains a `β†’ test ` token naming a real test (the fixed shape);
166
+ 2. the named test **exists** in the suite;
167
+ 3. it is **non-vacuous** β€” include the amendment test files in the SAME
168
+ `dz discrimination-check --test <f1,f2,...> --base HEAD --json` run as the ADR property test. An
169
+ amendment test that stays green at pre-feature base proves nothing about its amendment;
170
+ 4. a **safeguard** amendment's test proves the safeguard FIRES on a real input (a structurally-dead
171
+ safeguard passes an existence test and never fires in production).
172
+
173
+ A missing, unnamed, or vacuous amendment test is a HIGH gap. This closes the distance between "we caught
174
+ the design flaw" (challenge-panel/QCSD) and "we proved the fix works".
175
+
176
+ ### 3c. I/O-on-pure-path + fixture-swap hunt (P5)
177
+
178
+ In the TEST diff, hunt for replacements of broken/unbound fixtures with healthy ones β€” the old fixture was
179
+ probably a **negative control** proving a path was I/O-free; each such swap requires a compensating
180
+ negative resource-down test. In the CODE diff, hunt for new I/O (DB/network/file) on previously-pure
181
+ paths β€” especially startup/lifespan/health: require a negative resource-down test (broken resource β†’ the
182
+ path degrades per its declared contract: fail-open for advisory, explicit fail-fast for load-bearing).
183
+ Missing β†’ HIGH gap.
184
+
161
185
  ### 4. Multi-Agent Review Panel (L/XL)
162
186
 
163
187
  For L/XL features, spawn 3 parallel review agents using brutal-honesty modes: