@boyingliu01/xp-gate 0.35.8 → 0.35.9

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.
@@ -0,0 +1,78 @@
1
+ /**
2
+ * @test REQ-638 Boy Scout 债务必须按"可修性"分级,而不是报一个总数
3
+ * @intent #638 追踪单把 Gate 6 的债务记作「139 条预算告警 / 14 文件」,并归类为
4
+ * "可清零"。实测这 139 条并不构成同一类问题:
5
+ *
6
+ * magic-numbers 122 条(INFO 级 —— 按 .principlesrc 设计就不阻断)
7
+ * missing-error-handling 79 条(可修,且值得修)
8
+ * long-function 27 条(可修,需重构)
9
+ * deep-nesting 22 条(可修)
10
+ * solid.* / 其它 11 条
11
+ *
12
+ * (合计 261 > 139,因为部分文件在 baseline 里已过期。)
13
+ *
14
+ * **把 INFO 级规则算进"债务"会制造一个永远清不完的数字**:magic-numbers
15
+ * 在测试里几乎是不可避免的(超时值、端口、状态码),它被设计成 INFO 正是因为
16
+ * 不该逼人去改。混在一起统计的后果是"债务 139 条"这个数字既不能指导行动,
17
+ * 也不能衡量进展——修掉 79 条 missing-error-handling 后,数字只从 139 掉到 60,
18
+ * 看起来像只完成了 57%,实际已经清空了最值得清的那一类。
19
+ *
20
+ * 所以分级的价值不是"更好看",而是让"还剩多少真正要修"变成可回答的问题。
21
+ * @covers AC-638-01, AC-638-02, AC-638-03
22
+ */
23
+ 'use strict';
24
+
25
+ const { classifyDebt, summarizeDebtByFixability, INFO_ONLY_RULES } = require('../debt-classify');
26
+
27
+ describe('Boy Scout 债务分级 (#638)', () => {
28
+ it('AC-638-01: INFO 级规则不计入"需要修"的债务', () => {
29
+ // .principlesrc marks magic-numbers as severity=info. A rule that never blocks
30
+ // anything is not a debt to clear; counting it makes the number unchaseable.
31
+ expect(INFO_ONLY_RULES).toContain('clean-code.magic-numbers');
32
+ const buckets = summarizeDebtByFixability([
33
+ { file: 'a.ts', rule: 'clean-code.magic-numbers', count: 122 },
34
+ { file: 'b.ts', rule: 'clean-code.missing-error-handling', count: 79 },
35
+ ]);
36
+ expect(buckets.actionable).toBe(79);
37
+ expect(buckets.informational).toBe(122);
38
+ });
39
+
40
+ it('AC-638-02: 可修类别各自独立计数,因为修法不同', () => {
41
+ // "Fix the debt" is four different jobs: add try/catch, split a function,
42
+ // flatten nesting, split a class. Collapsing them hides which job is left.
43
+ const buckets = summarizeDebtByFixability([
44
+ { file: 'a.ts', rule: 'clean-code.missing-error-handling', count: 79 },
45
+ { file: 'a.ts', rule: 'clean-code.long-function', count: 27 },
46
+ { file: 'b.ts', rule: 'clean-code.deep-nesting', count: 22 },
47
+ { file: 'b.ts', rule: 'solid.srp', count: 5 },
48
+ ]);
49
+ expect(buckets.byRule['clean-code.missing-error-handling']).toBe(79);
50
+ expect(buckets.byRule['clean-code.long-function']).toBe(27);
51
+ expect(buckets.byRule['clean-code.deep-nesting']).toBe(22);
52
+ expect(buckets.byRule['solid.srp']).toBe(5);
53
+ expect(buckets.actionable).toBe(133);
54
+ });
55
+
56
+ it('AC-638-03: 分级对未知规则保守处理——算作可修,不算作噪音', () => {
57
+ // A rule added to the analyzer must not silently become "informational" just
58
+ // because this module has not heard of it. Defaulting to actionable over-reports
59
+ // work; defaulting to info under-reports debt, which is the failure that lets
60
+ // real problems hide behind a green dashboard.
61
+ const buckets = summarizeDebtByFixability([
62
+ { file: 'a.ts', rule: 'clean-code.brand-new-rule', count: 3 },
63
+ ]);
64
+ expect(buckets.actionable).toBe(3);
65
+ expect(buckets.informational).toBe(0);
66
+ expect(buckets.byRule['clean-code.brand-new-rule']).toBe(3);
67
+ });
68
+
69
+ it('AC-638-03: 单条 finding 数组也能分级', () => {
70
+ const rows = classifyDebt([
71
+ { file: 'a.ts', rule: 'clean-code.magic-numbers' },
72
+ { file: 'a.ts', rule: 'clean-code.long-function' },
73
+ ]);
74
+ expect(rows).toHaveLength(2);
75
+ expect(rows[0].fixability).toBe('informational');
76
+ expect(rows[1].fixability).toBe('actionable');
77
+ });
78
+ });
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Classify Boy Scout / principles debt by whether it is worth fixing (#638).
3
+ *
4
+ * The tracker reported Gate 6 as "139 warnings / 14 files — clearable". Measured,
5
+ * those warnings are not one kind of problem:
6
+ *
7
+ * magic-numbers 122 INFO — `.principlesrc` sets severity=info, so it
8
+ * never blocks. Almost unavoidable in tests
9
+ * (timeouts, ports, status codes) and deliberately
10
+ * not worth forcing people to edit.
11
+ * missing-error-handling 79 actionable
12
+ * long-function 27 actionable
13
+ * deep-nesting 22 actionable
14
+ * solid.* + misc 11 actionable
15
+ *
16
+ * Mixing them makes the headline number un-actionable: clearing every
17
+ * missing-error-handling drops the total from 139 to 60, which reads like 57% done
18
+ * when the most valuable category is actually empty. A number that cannot express
19
+ * progress cannot direct work.
20
+ *
21
+ * So this module splits debt into "actionable" and "informational", and keeps the
22
+ * actionable rules separate because each is a different job — add a try/catch, split
23
+ * a function, flatten nesting, split a class.
24
+ */
25
+ 'use strict';
26
+
27
+ /**
28
+ * Rules whose configured severity is `info`.
29
+ *
30
+ * These still appear in analyzer output, but `.principlesrc` marks them info
31
+ * precisely so they never block. Listing them as debt would make the debt number
32
+ * permanently non-zero.
33
+ */
34
+ const INFO_ONLY_RULES = [
35
+ 'clean-code.magic-numbers',
36
+ 'clean-code.unused-imports',
37
+ 'clean-code.many-exports',
38
+ 'solid.ocp',
39
+ ];
40
+
41
+ function isInformational(rule) {
42
+ return INFO_ONLY_RULES.includes(rule);
43
+ }
44
+
45
+ /**
46
+ * Annotate individual findings with `fixability`.
47
+ *
48
+ * Unknown rules default to `actionable` on purpose. A new analyzer rule that this
49
+ * module has not heard of must not silently become noise — over-reporting work is
50
+ * recoverable, under-reporting debt is the failure mode that lets real problems hide
51
+ * behind a green dashboard.
52
+ *
53
+ * @param {Array<{file: string, rule: string}>} findings
54
+ * @returns {Array<{file: string, rule: string, fixability: 'actionable'|'informational'}>}
55
+ */
56
+ function classifyDebt(findings) {
57
+ if (!Array.isArray(findings)) return [];
58
+ return findings.map((f) => ({
59
+ ...f,
60
+ fixability: isInformational(f.rule) ? 'informational' : 'actionable',
61
+ }));
62
+ }
63
+
64
+ /**
65
+ * Totals per fixability class, plus a per-rule breakdown of the actionable part.
66
+ *
67
+ * @param {Array<{file: string, rule: string, count?: number}>} rows
68
+ * @returns {{actionable: number, informational: number, byRule: Record<string, number>}}
69
+ */
70
+ function summarizeDebtByFixability(rows) {
71
+ const byRule = {};
72
+ let actionable = 0;
73
+ let informational = 0;
74
+ for (const row of Array.isArray(rows) ? rows : []) {
75
+ const count = typeof row.count === 'number' ? row.count : 1;
76
+ if (isInformational(row.rule)) {
77
+ informational += count;
78
+ continue;
79
+ }
80
+ actionable += count;
81
+ byRule[row.rule] = (byRule[row.rule] || 0) + count;
82
+ }
83
+ return { actionable, informational, byRule };
84
+ }
85
+
86
+ module.exports = { classifyDebt, summarizeDebtByFixability, INFO_ONLY_RULES, isInformational };
@@ -151,14 +151,8 @@ function buildCoverageRows(artifact, ctx) {
151
151
  };
152
152
 
153
153
  if (!entry) {
154
- // Not in the artifact at all. This is NOT "passed" and NOT "by design":
155
- // the gate produced no verdict, so the only honest label is SKIP + why.
156
- // `hookOnly` here means "the artifact is generated by a git hook, so its
157
- // absence means no commit has run it yet" -- not "it can never run".
158
154
  row.status = STATUS.SKIP;
159
- row.reason = spec.hookOnly
160
- ? 'no result recorded — runs via git commit'
161
- : 'no result recorded — not run in the last report';
155
+ row.reason = missingGateReason(spec);
162
156
  return row;
163
157
  }
164
158
 
@@ -183,7 +177,7 @@ function buildCoverageRows(artifact, ctx) {
183
177
  return {
184
178
  ...row,
185
179
  status: STATUS.DEBT,
186
- debt: `${context.boyScout.warnings} warning(s) / ${context.boyScout.files} file(s)`,
180
+ debt: describeBoyScoutDebt(context.boyScout),
187
181
  evidence: 'warnings baseline (see .warnings-baseline.json)',
188
182
  };
189
183
  }
@@ -191,6 +185,33 @@ function buildCoverageRows(artifact, ctx) {
191
185
  });
192
186
  }
193
187
 
188
+ /**
189
+ * Why a gate produced no verdict.
190
+ *
191
+ * Not in the artifact at all. This is NOT "passed" and NOT "by design": the gate
192
+ * produced no verdict, so the only honest label is SKIP + why. `hookOnly` here means
193
+ * "the artifact is generated by a git hook, so its absence means no commit has run
194
+ * it yet" -- not "it can never run".
195
+ */
196
+ function missingGateReason(spec) {
197
+ return spec.hookOnly
198
+ ? 'no result recorded — runs via git commit'
199
+ : 'no result recorded — not run in the last report';
200
+ }
201
+
202
+ /**
203
+ * Describe Boy Scout debt by how much of it is worth fixing (#638).
204
+ *
205
+ * `magic-numbers` is severity=info and accounts for roughly half the raw count, so a
206
+ * single total is un-actionable: clearing every real finding barely moves it, and a
207
+ * number that cannot express progress cannot direct work.
208
+ */
209
+ function describeBoyScoutDebt(boyScout) {
210
+ const breakdown = boyScout.breakdown;
211
+ if (!breakdown) return `${boyScout.warnings} warning(s) / ${boyScout.files} file(s)`;
212
+ return `${breakdown.actionable} actionable / ${breakdown.informational} informational (${boyScout.files} file(s))`;
213
+ }
214
+
194
215
  /** Render rows as the human-readable overview. */
195
216
  function renderGateCoverage(rows, opts) {
196
217
  const options = opts || {};
@@ -256,8 +277,61 @@ function readBoyScoutDebt(repoRoot) {
256
277
  const value = baseline[key];
257
278
  warnings += typeof value === 'number' ? value : (value && value.totalWarnings) || 0;
258
279
  }
259
- return { files: files.length, warnings };
280
+ return { files: files.length, warnings, breakdown: readDebtBreakdown(repoRoot, files) };
281
+ } catch {
282
+ return null;
283
+ }
284
+ }
285
+
286
+ /**
287
+ * Rule-level breakdown of the Boy Scout debt (#638).
288
+ *
289
+ * The baseline stores only `totalWarnings` per file, so the split cannot be derived
290
+ * from it. It also must not be recomputed on every `gate-coverage` call: analysing
291
+ * 17 files through the principles engine costs ~90s, and a report command that takes
292
+ * a minute and a half stops being run.
293
+ *
294
+ * Hence a cache keyed on the baseline file's mtime+size: any commit that changes the
295
+ * debt changes the baseline, which invalidates the cache. A stale split is worse
296
+ * than no split, because it would report progress that did not happen.
297
+ */
298
+ function readDebtBreakdown(repoRoot, files) {
299
+ try {
300
+ const { summarizeDebtByFixability } = require('./debt-classify.js');
301
+ const baselinePath = path.join(repoRoot, '.warnings-baseline.json');
302
+ const stat = fs.statSync(baselinePath);
303
+ const cachePath = path.join(repoRoot, '.xp-gate', 'debt-breakdown.json');
304
+ const cacheKey = `${stat.mtimeMs}:${stat.size}`;
305
+ try {
306
+ const cached = JSON.parse(fs.readFileSync(cachePath, 'utf8'));
307
+ if (cached && cached.key === cacheKey && cached.breakdown) return cached.breakdown;
308
+ } catch {
309
+ // No usable cache -- fall through and recompute.
310
+ }
311
+ const { execFileSync } = require('node:child_process');
312
+ const targets = files.filter((f) => !f.includes('/src/npm-package/'));
313
+ const raw = execFileSync(
314
+ process.execPath,
315
+ [path.join(repoRoot, 'node_modules', 'tsx', 'dist', 'cli.mjs'),
316
+ path.join(repoRoot, 'src', 'principles', 'index.ts'),
317
+ '--files', targets.join(' '), '--format', 'json'],
318
+ { cwd: repoRoot, encoding: 'utf8', timeout: 180000 },
319
+ );
320
+ const parsed = JSON.parse(raw);
321
+ const rows = Object.entries(parsed.ruleResults || {}).map(([rule, v]) => ({
322
+ rule,
323
+ count: v.violationCount || 0,
324
+ }));
325
+ const breakdown = summarizeDebtByFixability(rows);
326
+ try {
327
+ fs.mkdirSync(path.dirname(cachePath), { recursive: true });
328
+ fs.writeFileSync(cachePath, JSON.stringify({ key: cacheKey, breakdown }));
329
+ } catch {
330
+ // A cache write failure must not break the report.
331
+ }
332
+ return breakdown;
260
333
  } catch {
334
+ // Degrade to the plain total rather than failing the whole report.
261
335
  return null;
262
336
  }
263
337
  }
@@ -2,6 +2,6 @@
2
2
  "verdict": "PASS",
3
3
  "license_type": "MIT",
4
4
  "sha256": "0e7ac423bf2c6e223b7c5b156f8cf72da49d748e56a1641402c31f22ad07dbb5",
5
- "checked_at": "2026-10-30T19:20:46.439Z",
5
+ "checked_at": "2026-10-30T19:32:07.981Z",
6
6
  "source": "network"
7
7
  }
@@ -1,9 +1,9 @@
1
1
  # SRC/MOCK-POLICY KNOWLEDGE BASE
2
2
 
3
3
  **Generated:** 2026-10-30
4
- **Commit:** b3549c25
4
+ **Commit:** 35b9ec60
5
5
  **Branch:** main
6
- **Version:** 0.35.8.0
6
+ **Version:** 0.35.9.0
7
7
 
8
8
  ## OVERVIEW
9
9
  Mock layering policy enforcement — Gate M3 of pre-push hook. Ensures integration tests use real implementations for internal dependencies, mock external dependencies, and annotate pending mocks with removal plans. Combines project scope scanning, mock decision engine, and per-file validation into a single pipeline.
@@ -1,9 +1,9 @@
1
1
  # SRC/MUTATION KNOWLEDGE BASE
2
2
 
3
3
  **Generated:** 2026-10-30
4
- **Commit:** b3549c25
4
+ **Commit:** 35b9ec60
5
5
  **Branch:** main
6
- **Version:** 0.35.8.0
6
+ **Version:** 0.35.9.0
7
7
 
8
8
  ## OVERVIEW
9
9
  **Gate M** (incremental mutation testing) + **Gate M2** helpers (test-layer detection used by `src/mock-policy/`). Pre-push quality gate. TypeScript-only; uses Stryker.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@boyingliu01/xp-gate",
3
- "version": "0.35.8",
3
+ "version": "0.35.9",
4
4
  "description": "AI-driven development workflow: 6 quality gates + Delphi review + Sprint Flow",
5
5
  "bin": {
6
6
  "xp-gate": "bin/xp-gate.js"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "xp-gate",
3
- "version": "0.35.8",
3
+ "version": "0.35.9",
4
4
  "displayName": "XP-Gate",
5
5
  "description": "Extreme Programming quality gates + AI workflow skills for Claude Code. Includes 12 pre-commit gates (Gate 0-11), 8 pre-push gates, Sprint Flow (6 phases), and Delphi multi-expert review (>=90% consensus).",
6
6
  "author": {
@@ -1,9 +1,9 @@
1
1
  # SKILLS/DELPHI-REVIEW KNOWLEDGE BASE
2
2
 
3
3
  **Generated:** 2026-10-30
4
- **Commit:** b3549c25
4
+ **Commit:** 35b9ec60
5
5
  **Branch:** main
6
- **Version:** 0.35.8.0
6
+ **Version:** 0.35.9.0
7
7
 
8
8
  ## OVERVIEW
9
9
  Delphi Consensus Review — multi-round anonymous expert review (≥90% threshold, exactly 3 experts with distinct executable model IDs). Supports design, requirements, and code-walkthrough modes.
@@ -1,9 +1,9 @@
1
1
  # SKILLS/SPRINT-FLOW KNOWLEDGE BASE
2
2
 
3
3
  **Generated:** 2026-10-30
4
- **Commit:** b3549c25
4
+ **Commit:** 35b9ec60
5
5
  **Branch:** main
6
- **Version:** 0.35.8.0
6
+ **Version:** 0.35.9.0
7
7
 
8
8
  ## OVERVIEW
9
9
  **6-phase** development pipeline (v2.0 compact redesign, Issue #290): PREP → DESIGN → BUILD → VERIFY → SHIP → CLOSE. Phase 3/6 BUILD default build mode is **ralph-loop** (REQ-level iteration, 40-67% token savings vs parallel). HARD-GATE between DESIGN (2/6) and BUILD (3/6): design must pass Delphi review (≥90% consensus) before any coding.
@@ -1,9 +1,9 @@
1
1
  # SKILLS/TEST-SPECIFICATION-ALIGNMENT KNOWLEDGE BASE
2
2
 
3
3
  **Generated:** 2026-10-30
4
- **Commit:** b3549c25
4
+ **Commit:** 35b9ec60
5
5
  **Branch:** main
6
- **Version:** 0.35.8.0
6
+ **Version:** 0.35.9.0
7
7
 
8
8
  ## OVERVIEW
9
9
  Test-Specification Alignment Engine — two-stage validation ensuring tests accurately reflect requirements and design specs.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@boyingliu01/dsh-plugin-xp-gate",
3
- "version": "0.35.8",
3
+ "version": "0.35.9",
4
4
  "description": "XP-Gate deterministic quality gates + AI workflow skills as a DeepSeek Harness (DSH) native plugin: gate-check / gate-principles / gate-arch tools + 12 SKILL.md skills",
5
5
  "type": "module",
6
6
  "main": "./lib/index.js",
@@ -1,9 +1,9 @@
1
1
  # SKILLS/DELPHI-REVIEW KNOWLEDGE BASE
2
2
 
3
3
  **Generated:** 2026-10-30
4
- **Commit:** b3549c25
4
+ **Commit:** 35b9ec60
5
5
  **Branch:** main
6
- **Version:** 0.35.8.0
6
+ **Version:** 0.35.9.0
7
7
 
8
8
  ## OVERVIEW
9
9
  Delphi Consensus Review — multi-round anonymous expert review (≥90% threshold, exactly 3 experts with distinct executable model IDs). Supports design, requirements, and code-walkthrough modes.
@@ -1,9 +1,9 @@
1
1
  # SKILLS/SPRINT-FLOW KNOWLEDGE BASE
2
2
 
3
3
  **Generated:** 2026-10-30
4
- **Commit:** b3549c25
4
+ **Commit:** 35b9ec60
5
5
  **Branch:** main
6
- **Version:** 0.35.8.0
6
+ **Version:** 0.35.9.0
7
7
 
8
8
  ## OVERVIEW
9
9
  **6-phase** development pipeline (v2.0 compact redesign, Issue #290): PREP → DESIGN → BUILD → VERIFY → SHIP → CLOSE. Phase 3/6 BUILD default build mode is **ralph-loop** (REQ-level iteration, 40-67% token savings vs parallel). HARD-GATE between DESIGN (2/6) and BUILD (3/6): design must pass Delphi review (≥90% consensus) before any coding.
@@ -1,9 +1,9 @@
1
1
  # SKILLS/TEST-SPECIFICATION-ALIGNMENT KNOWLEDGE BASE
2
2
 
3
3
  **Generated:** 2026-10-30
4
- **Commit:** b3549c25
4
+ **Commit:** 35b9ec60
5
5
  **Branch:** main
6
- **Version:** 0.35.8.0
6
+ **Version:** 0.35.9.0
7
7
 
8
8
  ## OVERVIEW
9
9
  Test-Specification Alignment Engine — two-stage validation ensuring tests accurately reflect requirements and design specs.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@boyingliu01/opencode-plugin",
3
- "version": "0.35.8",
3
+ "version": "0.35.9",
4
4
  "type": "module",
5
5
  "main": "index.ts",
6
6
  "description": "XP-Gate quality gates + AI workflow skills + Sprint Flow TUI sidebar for OpenCode",
@@ -1,9 +1,9 @@
1
1
  # SKILLS/DELPHI-REVIEW KNOWLEDGE BASE
2
2
 
3
3
  **Generated:** 2026-10-30
4
- **Commit:** b3549c25
4
+ **Commit:** 35b9ec60
5
5
  **Branch:** main
6
- **Version:** 0.35.8.0
6
+ **Version:** 0.35.9.0
7
7
 
8
8
  ## OVERVIEW
9
9
  Delphi Consensus Review — multi-round anonymous expert review (≥90% threshold, exactly 3 experts with distinct executable model IDs). Supports design, requirements, and code-walkthrough modes.
@@ -1,9 +1,9 @@
1
1
  # SKILLS/SPRINT-FLOW KNOWLEDGE BASE
2
2
 
3
3
  **Generated:** 2026-10-30
4
- **Commit:** b3549c25
4
+ **Commit:** 35b9ec60
5
5
  **Branch:** main
6
- **Version:** 0.35.8.0
6
+ **Version:** 0.35.9.0
7
7
 
8
8
  ## OVERVIEW
9
9
  **6-phase** development pipeline (v2.0 compact redesign, Issue #290): PREP → DESIGN → BUILD → VERIFY → SHIP → CLOSE. Phase 3/6 BUILD default build mode is **ralph-loop** (REQ-level iteration, 40-67% token savings vs parallel). HARD-GATE between DESIGN (2/6) and BUILD (3/6): design must pass Delphi review (≥90% consensus) before any coding.
@@ -1,9 +1,9 @@
1
1
  # SKILLS/TEST-SPECIFICATION-ALIGNMENT KNOWLEDGE BASE
2
2
 
3
3
  **Generated:** 2026-10-30
4
- **Commit:** b3549c25
4
+ **Commit:** 35b9ec60
5
5
  **Branch:** main
6
- **Version:** 0.35.8.0
6
+ **Version:** 0.35.9.0
7
7
 
8
8
  ## OVERVIEW
9
9
  Test-Specification Alignment Engine — two-stage validation ensuring tests accurately reflect requirements and design specs.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "xp-gate",
3
- "version": "0.35.8",
3
+ "version": "0.35.9",
4
4
  "displayName": "XP-Gate",
5
5
  "description": "Extreme Programming quality gates + AI workflow skills for Qoder. Includes 12 pre-commit gates (Gate 0-11), 8 pre-push gates, Sprint Flow (6 phases), and Delphi multi-expert review (>=90% consensus).",
6
6
  "author": {
@@ -1,9 +1,9 @@
1
1
  # SKILLS/DELPHI-REVIEW KNOWLEDGE BASE
2
2
 
3
3
  **Generated:** 2026-10-30
4
- **Commit:** b3549c25
4
+ **Commit:** 35b9ec60
5
5
  **Branch:** main
6
- **Version:** 0.35.8.0
6
+ **Version:** 0.35.9.0
7
7
 
8
8
  ## OVERVIEW
9
9
  Delphi Consensus Review — multi-round anonymous expert review (≥90% threshold, exactly 3 experts with distinct executable model IDs). Supports design, requirements, and code-walkthrough modes.
@@ -1,9 +1,9 @@
1
1
  # SKILLS/SPRINT-FLOW KNOWLEDGE BASE
2
2
 
3
3
  **Generated:** 2026-10-30
4
- **Commit:** b3549c25
4
+ **Commit:** 35b9ec60
5
5
  **Branch:** main
6
- **Version:** 0.35.8.0
6
+ **Version:** 0.35.9.0
7
7
 
8
8
  ## OVERVIEW
9
9
  **6-phase** development pipeline (v2.0 compact redesign, Issue #290): PREP → DESIGN → BUILD → VERIFY → SHIP → CLOSE. Phase 3/6 BUILD default build mode is **ralph-loop** (REQ-level iteration, 40-67% token savings vs parallel). HARD-GATE between DESIGN (2/6) and BUILD (3/6): design must pass Delphi review (≥90% consensus) before any coding.
@@ -1,9 +1,9 @@
1
1
  # SKILLS/TEST-SPECIFICATION-ALIGNMENT KNOWLEDGE BASE
2
2
 
3
3
  **Generated:** 2026-10-30
4
- **Commit:** b3549c25
4
+ **Commit:** 35b9ec60
5
5
  **Branch:** main
6
- **Version:** 0.35.8.0
6
+ **Version:** 0.35.9.0
7
7
 
8
8
  ## OVERVIEW
9
9
  Test-Specification Alignment Engine — two-stage validation ensuring tests accurately reflect requirements and design specs.
@@ -1,9 +1,9 @@
1
1
  # PRINCIPLES CHECKER MODULE
2
2
 
3
3
  **Generated:** 2026-10-30
4
- **Commit:** b3549c25
4
+ **Commit:** 35b9ec60
5
5
  **Branch:** main
6
- **Version:** 0.35.8.0
6
+ **Version:** 0.35.9.0
7
7
 
8
8
  ## OVERVIEW
9
9
  Clean Code & SOLID principles checker — **Gate 4** of pre-commit. 14 rules × 9 language adapters, SARIF 2.1.0 output. Houses the **Boy Scout Rule** enforcement engine (Gate 6) and warning-baseline storage.
@@ -1,9 +1,9 @@
1
1
  # SKILLS/DELPHI-REVIEW KNOWLEDGE BASE
2
2
 
3
3
  **Generated:** 2026-10-30
4
- **Commit:** b3549c25
4
+ **Commit:** 35b9ec60
5
5
  **Branch:** main
6
- **Version:** 0.35.8.0
6
+ **Version:** 0.35.9.0
7
7
 
8
8
  ## OVERVIEW
9
9
  Delphi Consensus Review — multi-round anonymous expert review (≥90% threshold, exactly 3 experts with distinct executable model IDs). Supports design, requirements, and code-walkthrough modes.
@@ -1,9 +1,9 @@
1
1
  # SKILLS/SPRINT-FLOW KNOWLEDGE BASE
2
2
 
3
3
  **Generated:** 2026-10-30
4
- **Commit:** b3549c25
4
+ **Commit:** 35b9ec60
5
5
  **Branch:** main
6
- **Version:** 0.35.8.0
6
+ **Version:** 0.35.9.0
7
7
 
8
8
  ## OVERVIEW
9
9
  **6-phase** development pipeline (v2.0 compact redesign, Issue #290): PREP → DESIGN → BUILD → VERIFY → SHIP → CLOSE. Phase 3/6 BUILD default build mode is **ralph-loop** (REQ-level iteration, 40-67% token savings vs parallel). HARD-GATE between DESIGN (2/6) and BUILD (3/6): design must pass Delphi review (≥90% consensus) before any coding.
@@ -1,9 +1,9 @@
1
1
  # SKILLS/TEST-SPECIFICATION-ALIGNMENT KNOWLEDGE BASE
2
2
 
3
3
  **Generated:** 2026-10-30
4
- **Commit:** b3549c25
4
+ **Commit:** 35b9ec60
5
5
  **Branch:** main
6
- **Version:** 0.35.8.0
6
+ **Version:** 0.35.9.0
7
7
 
8
8
  ## OVERVIEW
9
9
  Test-Specification Alignment Engine — two-stage validation ensuring tests accurately reflect requirements and design specs.