@dzhechkov/skills-feature-adr 1.3.65 → 1.3.67

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 CHANGED
@@ -13,7 +13,7 @@
13
13
  },
14
14
  {
15
15
  "path": "README.md",
16
- "sha256": "4a887b8fe2a52c75be7189ddeef4393dc2a8a872d747bdbde3caba94488960dd"
16
+ "sha256": "1d123dcb15ac44b9adfe8266cb72d2dc69d5086f54003540795296c36e06e1b2"
17
17
  },
18
18
  {
19
19
  "path": "bin/cli.js",
@@ -25,7 +25,7 @@
25
25
  },
26
26
  {
27
27
  "path": "package.json",
28
- "sha256": "1f95669ddfb76990bfeb0e1be603c27651f47a9233020ed10c37e8705543b688"
28
+ "sha256": "31de034ec7534b585ee99a2dac0105bc4e43dca0c5b419076e66c43e797509d3"
29
29
  },
30
30
  {
31
31
  "path": "scripts/sync-templates.js",
@@ -121,7 +121,7 @@
121
121
  },
122
122
  {
123
123
  "path": "templates/.claude/skills/feature-adr/SKILL.md",
124
- "sha256": "c422d1e2b50cf7b8bd56cd5d886d96af30d8bf33a468b925396f395ebf32de53"
124
+ "sha256": "bdedfed69d985eb6969f158a72d92f63c6b1b993008c3661f7ffc2c6a7ccfbae"
125
125
  },
126
126
  {
127
127
  "path": "templates/.claude/skills/feature-adr/examples/sample-feature-output.md",
@@ -133,31 +133,31 @@
133
133
  },
134
134
  {
135
135
  "path": "templates/.claude/skills/feature-adr/modules/01-requirements.md",
136
- "sha256": "7b599efd3122be7ce2247bba1c9204e1b3c09322ad56ed4cedcbd4dd471ed41e"
136
+ "sha256": "e6ea3a224b555d5b7410cf2ddf02a3fb8d009fa01109463353e2b993c318270c"
137
137
  },
138
138
  {
139
139
  "path": "templates/.claude/skills/feature-adr/modules/02-research.md",
140
- "sha256": "55099189082d872d08a9d40b11782d8d08256955cbea617aa457756eb9fa1a07"
140
+ "sha256": "e2506e42251c74485188473acc4586f841afbec3ae7c5eaa8a3d8f73f6e14cc5"
141
141
  },
142
142
  {
143
143
  "path": "templates/.claude/skills/feature-adr/modules/03-adr.md",
144
- "sha256": "742f1d362fd4d1b1b731fe81b7aa794886aa58126005ad67ef0a27775c80f082"
144
+ "sha256": "ea03eee136c89267888b8034baa1a1cb0057314a2e745df71654a9ebee5d46b6"
145
145
  },
146
146
  {
147
147
  "path": "templates/.claude/skills/feature-adr/modules/03.5-ideation-swarm.md",
148
- "sha256": "220e06d0d67643f09df868df32d1ec3acdc205653a5ef977d171791d9ce77b74"
148
+ "sha256": "d48a8d6eebf9760cc8f1a4f19df0e6afc31fcc1284b5eacfb604ad8ced6a0b53"
149
149
  },
150
150
  {
151
151
  "path": "templates/.claude/skills/feature-adr/modules/04-ddd.md",
152
- "sha256": "c6cf98ab0dd80183ad507aca12edf164ee79a5fb60eee84d674cf73fe3a68646"
152
+ "sha256": "e9504cf1183bc0105167dc06108860882941fcf1b5be79d1978d8212c410ffbb"
153
153
  },
154
154
  {
155
155
  "path": "templates/.claude/skills/feature-adr/modules/05-architecture.md",
156
- "sha256": "227ec469154348afc414ef4751cc34ea5bb87ecb063cf196eff254615a6b5e00"
156
+ "sha256": "2ef7cf316903f0cbb1fabe1f0e1770c22b2cb3a11a4118cac0529c25074b5e8a"
157
157
  },
158
158
  {
159
159
  "path": "templates/.claude/skills/feature-adr/modules/06-implementation-plan.md",
160
- "sha256": "7a6c830d63f73953a96f1cb125ab88b7d5c24b2d4b61e997d6d3dfea8262d495"
160
+ "sha256": "c8fdd1877d8d9515ab29f52c3db49ddd9612b5797bc071e6208def860c02e6f2"
161
161
  },
162
162
  {
163
163
  "path": "templates/.claude/skills/feature-adr/modules/07-code.md",
@@ -165,7 +165,7 @@
165
165
  },
166
166
  {
167
167
  "path": "templates/.claude/skills/feature-adr/modules/08-qe.md",
168
- "sha256": "0d314eaeb69a761f68c4beb1ab7df0a2da1964538a8eb33c99cb9b819598d255"
168
+ "sha256": "97e9a7bc54f196b381c4ef71258cddcb2fb48f216df1ba015927c176bad57084"
169
169
  },
170
170
  {
171
171
  "path": "templates/.claude/skills/feature-adr/modules/09-fleet-qe.md",
@@ -255,6 +255,10 @@
255
255
  "path": "templates/.claude/skills/feature-adr/references/qe-checklist.md",
256
256
  "sha256": "238d8896996dc53559f58b24aa7eca966cc8845c3b9dda6d982c717c657b91e4"
257
257
  },
258
+ {
259
+ "path": "templates/.claude/skills/feature-adr/scripts/check-plan-completeness.mjs",
260
+ "sha256": "41d85b012a9d6cc172eaa5d7777294f2c01fb54b752ed61c7cbe2d2cd7b79b67"
261
+ },
258
262
  {
259
263
  "path": "templates/.claude/skills/frontend-design/LICENSE.txt",
260
264
  "sha256": "0d542e0c8804e39aa7f37eb00da5a762149dc682d7829451287e11b938e94594"
@@ -317,7 +321,7 @@
317
321
  },
318
322
  {
319
323
  "path": "templates/.claude/workflows/feature-adr.js",
320
- "sha256": "8afa77bb421ea4052eec0feab5f49edc1f2b1cea69238971f8ef1b3c8328a483"
324
+ "sha256": "d9cda8df501188c894d083c5c44c240c9ebe9ba7e2d418302c448d73b089e051"
321
325
  },
322
326
  {
323
327
  "path": "templates/lib/memory-protocol.md",
@@ -345,5 +349,5 @@
345
349
  }
346
350
  ]
347
351
  },
348
- "signature": "3OT+p3Tm5tBnn9T2RKEPlCnhCiaemKAOraeoPA4zYR28p1MpACnkeEmVyXPpwnqhG/a6uD/AjC/DrRuihMdHCw=="
352
+ "signature": "ZnkOOhYGfaIEp1W5L/Gphs0uniT0FieL/yn5KPl6cZ3zQeXkZcqDjfOta9b6zmPEgztZAclspZ0yf82VnjeHBQ=="
349
353
  }
package/README.md CHANGED
@@ -531,6 +531,15 @@ gate > reviewer judgment > memory). A miss usually means a check lived one layer
531
531
  control that proved the path was I/O-free. The bundled role-default skills gained the matching entries
532
532
  (`code-impl` P25, `code-critic` AP14).
533
533
 
534
+ - **No-stubs gate** (backlog 0b403a0106103901, Karpathy-Michaels rule XI). Step 8 greps the files THE RUN
535
+ touched for unfinished-stub markers — `TODO` / `FIXME` / `HACK` / `XXX` / `PLACEHOLDER` (case-sensitive,
536
+ word-bounded: `hackathon`/`todos` never fire) plus the `implement later` phrase — **any unwaived match =
537
+ the task shipped incomplete** (HIGH gap naming file:line). A line may carry an inline
538
+ `no-stubs: <reason>` waiver; a waiver **without** a reason is itself a HIGH gap, never an exemption. The
539
+ same scan runs mechanically at publish time as the SOFT `no-stubs` rule in `dz guard check --op publish`
540
+ (change-set scoped — a deliberate design: a tree-wide scan measured ~78% ancient-marker noise). Markers
541
+ quoted in the QE report are backticked so the report itself scans clean.
542
+
534
543
  Both forms carry all of it: the interactive skill (step modules + banner template) and the deterministic
535
544
  workflow (stage prompts + derived `gates` in its returns) — same shapes, same vocabulary.
536
545
 
@@ -869,3 +878,38 @@ them inside the package's own monorepo is almost never what you want anyway.
869
878
  - **npm:** [https://www.npmjs.com/package/@dzhechkov/skills-feature-adr](https://www.npmjs.com/package/@dzhechkov/skills-feature-adr)
870
879
  - **Keysarium:** [https://www.npmjs.com/package/@dzhechkov/keysarium](https://www.npmjs.com/package/@dzhechkov/keysarium)
871
880
  - **BTO:** [https://www.npmjs.com/package/@dzhechkov/skills-bto](https://www.npmjs.com/package/@dzhechkov/skills-bto)
881
+
882
+ ## Write discipline — why the writing steps now build a skeleton first
883
+
884
+ MEASURED in the field on 2026-08-19 and 2026-08-20, two independent runs of the canonical pipeline
885
+ against a ~130-file repository: the steps that must produce a document — Step 5 (Architecture) and
886
+ Step 6 (Plan) — **never reached a write**. 18 attempts, zero file writes in every one. They died in
887
+ the READING phase: a shell result returns, the agent thinks about its next move, stays silent past
888
+ the runtime's 180-second inactivity watchdog, and is killed. One run cost ~4M tokens and 1h54m.
889
+
890
+ The failure is **deterministic, not unlucky**: thinking time grows with accumulated history, so on a
891
+ large enough repository unbounded exploration guarantees the kill. And the cause was in the
892
+ instructions, not the runtime — every writing step said, in effect, *"read the code, write the
893
+ document"*, with no reading budget and no order of operations. An agent obeying literally reads
894
+ until it dies.
895
+
896
+ The owner's control experiment is the whole evidence base, and it is n=1: same slice, same inputs,
897
+ same model, ONE added paragraph about write discipline → a 10-section skeleton on disk 8 minutes in,
898
+ first attempt, after six consecutive deaths.
899
+
900
+ So every document-producing step now carries:
901
+
902
+ 1. the FIRST file write happens within the first ~12 tool calls — a skeleton of section headings
903
+ with one line of intent under each;
904
+ 2. then fill it **one section per edit**, no edit longer than ~120 lines;
905
+ 3. never go more than 2 minutes without a tool call;
906
+ 4. when unsure whether to read more or to write — **write**.
907
+
908
+ **What this does not do**, stated plainly: it does not stop the deaths. The watchdog is unchanged.
909
+ It changes what survives one — previously nothing, now a skeleton on disk that the next attempt can
910
+ continue. The `~12` and `~120` are chosen parameters, not measured optima. Two possible regressions
911
+ were named by an independent reviewer and are **not measured**: an early skeleton may anchor a
912
+ structure chosen before understanding, and section-per-edit raises tool-call overhead.
913
+
914
+ Steps whose deliverable is a returned verdict rather than a document (the complexity router) are
915
+ deliberately excluded — "skeleton first" is nonsense there.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dzhechkov/skills-feature-adr",
3
- "version": "1.3.65",
3
+ "version": "1.3.67",
4
4
  "description": "Adaptive Feature Development skill pack for Claude Code — 11-step pipeline with Complexity Router (S/M/L/XL), ADR-driven architecture, 15 agentic-qe skills, multi-agent fleet QE. Supports --full-qe, --full-qe-extended, --with-learning, and --knowledge-extractor modes.",
5
5
  "bin": {
6
6
  "skills-feature-adr": "./bin/cli.js"
package/sbom.json CHANGED
@@ -35,7 +35,7 @@
35
35
  "hashes": [
36
36
  {
37
37
  "alg": "SHA-256",
38
- "content": "4a887b8fe2a52c75be7189ddeef4393dc2a8a872d747bdbde3caba94488960dd"
38
+ "content": "1d123dcb15ac44b9adfe8266cb72d2dc69d5086f54003540795296c36e06e1b2"
39
39
  }
40
40
  ]
41
41
  },
@@ -65,7 +65,7 @@
65
65
  "hashes": [
66
66
  {
67
67
  "alg": "SHA-256",
68
- "content": "1f95669ddfb76990bfeb0e1be603c27651f47a9233020ed10c37e8705543b688"
68
+ "content": "31de034ec7534b585ee99a2dac0105bc4e43dca0c5b419076e66c43e797509d3"
69
69
  }
70
70
  ]
71
71
  },
@@ -305,7 +305,7 @@
305
305
  "hashes": [
306
306
  {
307
307
  "alg": "SHA-256",
308
- "content": "c422d1e2b50cf7b8bd56cd5d886d96af30d8bf33a468b925396f395ebf32de53"
308
+ "content": "bdedfed69d985eb6969f158a72d92f63c6b1b993008c3661f7ffc2c6a7ccfbae"
309
309
  }
310
310
  ]
311
311
  },
@@ -335,7 +335,7 @@
335
335
  "hashes": [
336
336
  {
337
337
  "alg": "SHA-256",
338
- "content": "7b599efd3122be7ce2247bba1c9204e1b3c09322ad56ed4cedcbd4dd471ed41e"
338
+ "content": "e6ea3a224b555d5b7410cf2ddf02a3fb8d009fa01109463353e2b993c318270c"
339
339
  }
340
340
  ]
341
341
  },
@@ -345,7 +345,7 @@
345
345
  "hashes": [
346
346
  {
347
347
  "alg": "SHA-256",
348
- "content": "55099189082d872d08a9d40b11782d8d08256955cbea617aa457756eb9fa1a07"
348
+ "content": "e2506e42251c74485188473acc4586f841afbec3ae7c5eaa8a3d8f73f6e14cc5"
349
349
  }
350
350
  ]
351
351
  },
@@ -355,7 +355,7 @@
355
355
  "hashes": [
356
356
  {
357
357
  "alg": "SHA-256",
358
- "content": "742f1d362fd4d1b1b731fe81b7aa794886aa58126005ad67ef0a27775c80f082"
358
+ "content": "ea03eee136c89267888b8034baa1a1cb0057314a2e745df71654a9ebee5d46b6"
359
359
  }
360
360
  ]
361
361
  },
@@ -365,7 +365,7 @@
365
365
  "hashes": [
366
366
  {
367
367
  "alg": "SHA-256",
368
- "content": "220e06d0d67643f09df868df32d1ec3acdc205653a5ef977d171791d9ce77b74"
368
+ "content": "d48a8d6eebf9760cc8f1a4f19df0e6afc31fcc1284b5eacfb604ad8ced6a0b53"
369
369
  }
370
370
  ]
371
371
  },
@@ -375,7 +375,7 @@
375
375
  "hashes": [
376
376
  {
377
377
  "alg": "SHA-256",
378
- "content": "c6cf98ab0dd80183ad507aca12edf164ee79a5fb60eee84d674cf73fe3a68646"
378
+ "content": "e9504cf1183bc0105167dc06108860882941fcf1b5be79d1978d8212c410ffbb"
379
379
  }
380
380
  ]
381
381
  },
@@ -385,7 +385,7 @@
385
385
  "hashes": [
386
386
  {
387
387
  "alg": "SHA-256",
388
- "content": "227ec469154348afc414ef4751cc34ea5bb87ecb063cf196eff254615a6b5e00"
388
+ "content": "2ef7cf316903f0cbb1fabe1f0e1770c22b2cb3a11a4118cac0529c25074b5e8a"
389
389
  }
390
390
  ]
391
391
  },
@@ -395,7 +395,7 @@
395
395
  "hashes": [
396
396
  {
397
397
  "alg": "SHA-256",
398
- "content": "7a6c830d63f73953a96f1cb125ab88b7d5c24b2d4b61e997d6d3dfea8262d495"
398
+ "content": "c8fdd1877d8d9515ab29f52c3db49ddd9612b5797bc071e6208def860c02e6f2"
399
399
  }
400
400
  ]
401
401
  },
@@ -415,7 +415,7 @@
415
415
  "hashes": [
416
416
  {
417
417
  "alg": "SHA-256",
418
- "content": "0d314eaeb69a761f68c4beb1ab7df0a2da1964538a8eb33c99cb9b819598d255"
418
+ "content": "97e9a7bc54f196b381c4ef71258cddcb2fb48f216df1ba015927c176bad57084"
419
419
  }
420
420
  ]
421
421
  },
@@ -639,6 +639,16 @@
639
639
  }
640
640
  ]
641
641
  },
642
+ {
643
+ "type": "file",
644
+ "name": "templates/.claude/skills/feature-adr/scripts/check-plan-completeness.mjs",
645
+ "hashes": [
646
+ {
647
+ "alg": "SHA-256",
648
+ "content": "41d85b012a9d6cc172eaa5d7777294f2c01fb54b752ed61c7cbe2d2cd7b79b67"
649
+ }
650
+ ]
651
+ },
642
652
  {
643
653
  "type": "file",
644
654
  "name": "templates/.claude/skills/frontend-design/LICENSE.txt",
@@ -795,7 +805,7 @@
795
805
  "hashes": [
796
806
  {
797
807
  "alg": "SHA-256",
798
- "content": "8afa77bb421ea4052eec0feab5f49edc1f2b1cea69238971f8ef1b3c8328a483"
808
+ "content": "d9cda8df501188c894d083c5c44c240c9ebe9ba7e2d418302c448d73b089e051"
799
809
  }
800
810
  ]
801
811
  },
@@ -100,6 +100,9 @@ ROUTER → REQUIREMENTS → RESEARCH → ADR → QCSD SWARM
100
100
  SPARC-GOAP PLAN
101
101
  (all)
102
102
 
103
+ K2 PLAN-COMPLETENESS GATE
104
+ (all — exit 0 or Step 7 waits)
105
+
103
106
  Step 7
104
107
  CODE
105
108
  (all)
@@ -144,6 +147,26 @@ Step | S | M | L | XL | Model | Agentic QE Skill
144
147
  10 Delivery Gate (OPT-IN) | o | o | o | o | cross-family of coder | 4 planes: regressions ‖ security ‖ code-quality ‖ product-honesty (o = runs only when explicitly requested; absent ⇒ byte-identical) |
145
148
  ```
146
149
 
150
+ ### K2 plan-completeness gate (Step-6/7 boundary, MANDATORY, all tiers)
151
+
152
+ Step 7 does not start until the plan passes a SCRIPT — not a reviewer's impression:
153
+
154
+ ```bash
155
+ node .claude/skills/feature-adr/scripts/check-plan-completeness.mjs features/<slug>
156
+ ```
157
+
158
+ Pass the run's tier (`--tier=S|M|L|XL`): M/L/XL with no `03_adr/` FAILS rather than skipping C1/C2.
159
+ Every tier — S included — writes a real `06_implementation_plan.md`; an inline-only S-tier checklist
160
+ cannot be gated and is no longer permitted.
161
+
162
+ `exit 0` → proceed to Step 7 · `exit 1` → return to Step 6 and fix every `FAIL C*` line · `exit 3`
163
+ → INCONCLUSIVE (inputs unreadable) — fix them and rerun. **Never proceed on a non-zero exit, and
164
+ never read empty output as a pass**: the verdict is the last line
165
+ (`K2 plan-completeness: PASS|FAIL|NOT-ESTABLISHED`), and its absence is not a verdict. The checkpoint
166
+ banner's Gates line carries it: `🚦 Gates: K2 plan-completeness ✓ | ✗ | inconclusive`. Details and the
167
+ per-check list: `modules/06-implementation-plan.md`. In the ultracode workflow the gate runs
168
+ automatically and a non-PASS returns `phase: 'plan-gate-failed'` without dispatching the coder.
169
+
147
170
  ## DAG Dependencies
148
171
 
149
172
  Steps are NOT purely linear. The DAG defines what can run in parallel:
@@ -203,6 +226,14 @@ Execute protocol
203
226
  → Checkpoint N
204
227
  ```
205
228
 
229
+ **Write discipline — applies to EVERY step that produces a document.** Open the step's artifact within
230
+ your first ~12 tool calls as a SKELETON (its section headings, one line of intent each), then fill it one
231
+ section per edit, no edit longer than ~120 lines. Never go more than 2 minutes without a tool call, and
232
+ when you are unsure whether to read more or to write, WRITE. Reason: an executor silent for 180 seconds is
233
+ killed by the runtime, and thinking time grows with accumulated history — so unbounded exploration before
234
+ the first write is a deterministic death on a large repo, not bad luck. Each module restates this under
235
+ its own `## Write discipline (the 180-second rule)` heading.
236
+
206
237
  ### 4. Final Verification
207
238
  After Step 8 (or Step 9 for L/XL) completes, verify:
208
239
  - All mandatory artifacts exist per tier
@@ -321,10 +352,17 @@ Two flags for integrating with the full agentic-qe package:
321
352
 
322
353
  | Flag | Mode | What it does |
323
354
  |------|------|-------------|
324
- | (none) | Reference | Condensed copies of 9 core skills, no install needed |
325
- | `--full-qe` | Direct | Full agentic-qe protocols for existing 9 core skills |
355
+ | (none) | Reference | Condensed copies of 9 core skills, no install needed — the **no-install fallback** |
356
+ | `--full-qe` | Direct | **RECOMMENDED DEFAULT when agentic-qe is installed.** Full agentic-qe protocols for the 9 core skills, and BOTH halves of the learning loop run: Step-0 recall = `memory_query("patterns/feature-adr/*")` **+** `dz recall`; Step-8 teach = the aqe `qe-outcome` store **+** `dz teach` |
326
357
  | `--full-qe-extended` | Direct Extended | Full protocols + 6 additional skills (chaos, security, performance, mutation, TDD, production-swarm) |
327
358
 
359
+ **Which one to run:** if `aqe` is installed (`which aqe` or `node_modules/agentic-qe/`), run
360
+ `--full-qe` — it is the recommended default at every tier, because the aqe pattern memory only
361
+ contributes when the Direct half of the loop is active. Reference mode is the honest fallback for a
362
+ machine without agentic-qe; it is not a lesser-quality choice there, it is the only correct one.
363
+ This is a RECOMMENDATION about which flag to pass — the mode LOGIC is unchanged (flag + installed →
364
+ direct; flag without install → WARN + reference).
365
+
328
366
  ### Installation
329
367
 
330
368
  ```bash
@@ -338,8 +376,8 @@ cd your-project && aqe init --auto
338
376
  ### Activation
339
377
 
340
378
  ```
341
- /feature-adr [описание фичи] # Reference Mode (default)
342
- /feature-adr --full-qe [описание фичи] # Direct Mode: full protocols, same skills
379
+ /feature-adr --full-qe [описание фичи] # RECOMMENDED when agentic-qe is installed
380
+ /feature-adr [описание фичи] # Reference Mode: the no-install fallback
343
381
  /feature-adr --full-qe-extended [описание фичи] # Direct Extended: full protocols + extra skills
344
382
  ```
345
383
 
@@ -454,7 +492,8 @@ each step records the live panel via `dz statusline --fa-record`. This half NEVE
454
492
 
455
493
  The **agentic-qe MCP layer below is an ADDITIONAL enrichment, active only in Direct modes**
456
494
  (`--full-qe` / `--full-qe-extended`, needs `fleet_init`) — it adds semantic in-session recall on top of
457
- the always-on dz loop.
495
+ the always-on dz loop. This is why `--full-qe` is the RECOMMENDED default wherever agentic-qe is
496
+ installed: only then do BOTH recall halves run at Step 0 and BOTH teach halves at Step 8.
458
497
 
459
498
  When `{AGENTIC_QE_MODE}` = `direct` | `direct-extended`, the pipeline ALSO runs a recall → store cycle
460
499
  over agentic-qe's MCP pattern memory (`namespace: "learning"`, `fleet_init` first):
@@ -537,8 +576,9 @@ Everything from `--full-qe` plus 6 additional skills and up to 3 extra agents in
537
576
 
538
577
  | Scenario | Mode |
539
578
  |----------|------|
540
- | S/M tier features | Reference (always) |
541
- | L tier, standard QE | Reference or `--full-qe` |
579
+ | agentic-qe installed (any tier) | `--full-qe` the recommended default |
580
+ | agentic-qe NOT installed | Reference (the fallback; the dz half of the loop still runs) |
581
+ | S/M tier, agentic-qe installed | `--full-qe` |
542
582
  | L tier, high QE maturity | `--full-qe` |
543
583
  | XL tier features | `--full-qe` recommended |
544
584
  | XL + security-critical (banking, ФЗ-152) | `--full-qe-extended` recommended |
@@ -584,6 +624,7 @@ npx @dzhechkov/skills-feature-adr init --with-learning --knowledge-extractor
584
624
  | Ignore NO-GO verdict | Proceed despite Step 3.5 NO-GO | BLOCK — rework required |
585
625
  | Skip gap loop | No gap detection in Step 8 | Missing requirements coverage check |
586
626
  | Skip fleet QE for L/XL | No Step 9 for large features | BLOCK — fleet assessment mandatory |
627
+ | Unbounded reading before the first write | The step's artifact still does not exist after ~12 tool calls | BLOCK — write the skeleton now; a silent executor is killed at 180 s |
587
628
 
588
629
  ## Checkpoint Format
589
630
 
@@ -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