@boyingliu01/xp-gate 0.14.4 → 0.14.6

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.
@@ -1,9 +1,9 @@
1
1
  # SRC/MOCK-POLICY KNOWLEDGE BASE
2
2
 
3
3
  **Generated:** 2026-07-09
4
- **Commit:** a09c009
4
+ **Commit:** df2023f
5
5
  **Branch:** main
6
- **Version:** 0.14.3.0
6
+ **Version:** 0.14.6.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-07-09
4
- **Commit:** a09c009
4
+ **Commit:** df2023f
5
5
  **Branch:** main
6
- **Version:** 0.14.3.0
6
+ **Version:** 0.14.6.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.14.4",
3
+ "version": "0.14.6",
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.14.4",
3
+ "version": "0.14.6",
4
4
  "displayName": "XP-Gate",
5
5
  "description": "Extreme Programming quality gates + AI workflow skills for Claude Code. Includes 10 quality gates (Gate 0-9), Sprint Flow (11 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-07-09
4
- **Commit:** 8408ba6
5
- **Branch:** sprint/2026-07-09-01
6
- **Version:** 0.14.4.0
4
+ **Commit:** df2023f
5
+ **Branch:** main
6
+ **Version:** 0.14.6.0
7
7
 
8
8
  ## OVERVIEW
9
9
  Delphi Consensus Review — multi-round anonymous expert review (≥90% threshold, 3 experts from ≥2 providers, domestic models only). Supports design + code-walkthrough modes.
@@ -1,9 +1,9 @@
1
1
  # SKILLS/SPRINT-FLOW KNOWLEDGE BASE
2
2
 
3
3
  **Generated:** 2026-07-09
4
- **Commit:** 8408ba6
5
- **Branch:** sprint/2026-07-09-01
6
- **Version:** 0.14.4.0
4
+ **Commit:** df2023f
5
+ **Branch:** main
6
+ **Version:** 0.14.6.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.
@@ -201,6 +201,10 @@ Every phase MUST output its header as the first line of that phase's output. For
201
201
  5. Each phase completion MUST write Phase Summary to `.sprint-state/phase-outputs/phase-{N}-summary.md`
202
202
  6. Each phase completion MUST update `.sprint-state/sprint-state.json`
203
203
 
204
+ ### Required Rendering (MANDATORY per phase)
205
+
206
+ 7. Each phase completion MUST render the ASCII progress dashboard using `templates/sprint-progress-template.md` — the orchestrator reads `sprint-state.json` and outputs the dashboard after every phase's status block, so the user always sees current global progress without needing to ask
207
+
204
208
  ### Phase Output Status Schema (MANDATORY per phase)
205
209
 
206
210
  Each phase MUST close with structured status:
@@ -9,13 +9,32 @@ const path = require('path');
9
9
 
10
10
  const SKILL_MD_PATH = path.join(__dirname, '..', 'SKILL.md');
11
11
  const REFERENCES_DIR = path.join(__dirname, '..', 'references');
12
+ const PHASE_OVERVIEW_PATH = path.join(REFERENCES_DIR, 'phase-overview.md');
12
13
  const PHASE_2_BUILD_PATH = path.join(REFERENCES_DIR, 'phase-3-build.md');
13
14
  const ORCHESTRATION_RULES_PATH = path.join(REFERENCES_DIR, 'orchestration-rules.md');
14
15
 
15
16
  let skillContent = '';
17
+ let phaseOverviewContent = '';
16
18
 
17
19
  function loadSkillMd() {
18
20
  skillContent = fs.readFileSync(SKILL_MD_PATH, 'utf-8');
21
+ if (fs.existsSync(PHASE_OVERVIEW_PATH)) {
22
+ phaseOverviewContent = fs.readFileSync(PHASE_OVERVIEW_PATH, 'utf-8');
23
+ }
24
+ }
25
+
26
+ // Search across SKILL.md AND references/phase-overview.md (progressive disclosure: sections
27
+ // like "Unique Value Proposition" and "Phase Flow Consistency" moved to reference file).
28
+ function contentIncludes(str) {
29
+ return skillContent.includes(str) || phaseOverviewContent.includes(str);
30
+ }
31
+ function contentSplit(str) {
32
+ // Return the part after str from whichever file contains it.
33
+ // Throws descriptive error instead of returning undefined so callers
34
+ // get a clear assertion message rather than a TypeError crash.
35
+ if (skillContent.includes(str)) return skillContent.split(str)[1];
36
+ if (phaseOverviewContent.includes(str)) return phaseOverviewContent.split(str)[1];
37
+ throw new Error(`Section "${str}" not found in SKILL.md or references/phase-overview.md`);
19
38
  }
20
39
 
21
40
  function parseFrontmatter(content) {
@@ -182,21 +201,21 @@ function testPhaseFlowDiagramOrder() {
182
201
  }
183
202
 
184
203
  function testPhaseFlowConsistencySectionExists() {
185
- if (!skillContent.includes('Phase Flow Consistency')) {
186
- throw new Error('SKILL.md must contain "Phase Flow Consistency" section');
204
+ if (!contentIncludes('Phase Flow Consistency')) {
205
+ throw new Error('SKILL.md or references/phase-overview.md must contain "Phase Flow Consistency" section');
187
206
  }
188
207
  console.log(' ✓ Phase Flow Consistency section exists');
189
208
  }
190
209
 
191
210
  function testCanonicalPhaseOrderTableExists() {
192
- if (!skillContent.includes('Canonical Phase Order')) {
193
- throw new Error('SKILL.md must contain "Canonical Phase Order" table');
211
+ if (!contentIncludes('Canonical Phase Order')) {
212
+ throw new Error('SKILL.md or references/phase-overview.md must contain "Canonical Phase Order" table');
194
213
  }
195
214
  console.log(' ✓ Canonical Phase Order table exists');
196
215
  }
197
216
 
198
217
  function testAll11PhasesInPhaseFlowConsistency() {
199
- const section = skillContent.split('Phase Flow Consistency')[1];
218
+ const section = contentSplit('Phase Flow Consistency');
200
219
  const requiredPhases = [
201
220
  'PREP', 'DESIGN', 'BUILD', 'VERIFY', 'SHIP', 'CLOSE',
202
221
  ];
@@ -235,14 +254,14 @@ function testForceLevelsRequiresDelphi() {
235
254
  // === Value Proposition Tests ===
236
255
 
237
256
  function testUniqueValuePropositionExists() {
238
- if (!skillContent.includes('Unique Value Proposition')) {
239
- throw new Error('SKILL.md must contain "Unique Value Proposition" section');
257
+ if (!contentIncludes('Unique Value Proposition')) {
258
+ throw new Error('SKILL.md or references/phase-overview.md must contain "Unique Value Proposition" section');
240
259
  }
241
260
  console.log(' ✓ Unique Value Proposition section exists');
242
261
  }
243
262
 
244
263
  function testUvpMentionsTokenSavings() {
245
- const section = skillContent.split('Unique Value Proposition')[1];
264
+ const section = contentSplit('Unique Value Proposition');
246
265
  if (!section.includes('40') || !section.includes('67') || !section.includes('token')) {
247
266
  throw new Error('Unique Value Proposition must mention 40-67% token savings');
248
267
  }
@@ -250,7 +269,7 @@ function testUvpMentionsTokenSavings() {
250
269
  }
251
270
 
252
271
  function testUvpMentionsHardGate() {
253
- const section = skillContent.split('Unique Value Proposition')[1];
272
+ const section = contentSplit('Unique Value Proposition');
254
273
  if (!section.includes('HARD-GATE')) {
255
274
  throw new Error('Unique Value Proposition must mention HARD-GATE discipline');
256
275
  }
@@ -258,7 +277,7 @@ function testUvpMentionsHardGate() {
258
277
  }
259
278
 
260
279
  function testUvpMentionsEmergentRequirements() {
261
- const section = skillContent.split('Unique Value Proposition')[1];
280
+ const section = contentSplit('Unique Value Proposition');
262
281
  if (!section.toLowerCase().includes('emergent')) {
263
282
  throw new Error('Unique Value Proposition must mention emergent requirements');
264
283
  }
@@ -360,7 +379,7 @@ function runTests(opts = {}) {
360
379
  }
361
380
 
362
381
  console.log(`\n=== Results: ${passed} passed, ${failed} failed ===\n`);
363
- errors.forEach(e => console.log(e));
382
+ for (const e of errors) console.log(e);
364
383
 
365
384
  if (exitOnFail && failed > 0) {
366
385
  process.exit(1);
@@ -1,9 +1,9 @@
1
1
  # SKILLS/TEST-SPECIFICATION-ALIGNMENT KNOWLEDGE BASE
2
2
 
3
3
  **Generated:** 2026-07-09
4
- **Commit:** 8408ba6
5
- **Branch:** sprint/2026-07-09-01
6
- **Version:** 0.14.4.0
4
+ **Commit:** df2023f
5
+ **Branch:** main
6
+ **Version:** 0.14.6.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.14.4",
3
+ "version": "0.14.6",
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-07-09
4
- **Commit:** 8408ba6
5
- **Branch:** sprint/2026-07-09-01
6
- **Version:** 0.14.4.0
4
+ **Commit:** df2023f
5
+ **Branch:** main
6
+ **Version:** 0.14.6.0
7
7
 
8
8
  ## OVERVIEW
9
9
  Delphi Consensus Review — multi-round anonymous expert review (≥90% threshold, 3 experts from ≥2 providers, domestic models only). Supports design + code-walkthrough modes.
@@ -1,9 +1,9 @@
1
1
  # SKILLS/SPRINT-FLOW KNOWLEDGE BASE
2
2
 
3
3
  **Generated:** 2026-07-09
4
- **Commit:** 8408ba6
5
- **Branch:** sprint/2026-07-09-01
6
- **Version:** 0.14.4.0
4
+ **Commit:** df2023f
5
+ **Branch:** main
6
+ **Version:** 0.14.6.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.
@@ -201,6 +201,10 @@ Every phase MUST output its header as the first line of that phase's output. For
201
201
  5. Each phase completion MUST write Phase Summary to `.sprint-state/phase-outputs/phase-{N}-summary.md`
202
202
  6. Each phase completion MUST update `.sprint-state/sprint-state.json`
203
203
 
204
+ ### Required Rendering (MANDATORY per phase)
205
+
206
+ 7. Each phase completion MUST render the ASCII progress dashboard using `templates/sprint-progress-template.md` — the orchestrator reads `sprint-state.json` and outputs the dashboard after every phase's status block, so the user always sees current global progress without needing to ask
207
+
204
208
  ### Phase Output Status Schema (MANDATORY per phase)
205
209
 
206
210
  Each phase MUST close with structured status:
@@ -9,13 +9,32 @@ const path = require('path');
9
9
 
10
10
  const SKILL_MD_PATH = path.join(__dirname, '..', 'SKILL.md');
11
11
  const REFERENCES_DIR = path.join(__dirname, '..', 'references');
12
+ const PHASE_OVERVIEW_PATH = path.join(REFERENCES_DIR, 'phase-overview.md');
12
13
  const PHASE_2_BUILD_PATH = path.join(REFERENCES_DIR, 'phase-3-build.md');
13
14
  const ORCHESTRATION_RULES_PATH = path.join(REFERENCES_DIR, 'orchestration-rules.md');
14
15
 
15
16
  let skillContent = '';
17
+ let phaseOverviewContent = '';
16
18
 
17
19
  function loadSkillMd() {
18
20
  skillContent = fs.readFileSync(SKILL_MD_PATH, 'utf-8');
21
+ if (fs.existsSync(PHASE_OVERVIEW_PATH)) {
22
+ phaseOverviewContent = fs.readFileSync(PHASE_OVERVIEW_PATH, 'utf-8');
23
+ }
24
+ }
25
+
26
+ // Search across SKILL.md AND references/phase-overview.md (progressive disclosure: sections
27
+ // like "Unique Value Proposition" and "Phase Flow Consistency" moved to reference file).
28
+ function contentIncludes(str) {
29
+ return skillContent.includes(str) || phaseOverviewContent.includes(str);
30
+ }
31
+ function contentSplit(str) {
32
+ // Return the part after str from whichever file contains it.
33
+ // Throws descriptive error instead of returning undefined so callers
34
+ // get a clear assertion message rather than a TypeError crash.
35
+ if (skillContent.includes(str)) return skillContent.split(str)[1];
36
+ if (phaseOverviewContent.includes(str)) return phaseOverviewContent.split(str)[1];
37
+ throw new Error(`Section "${str}" not found in SKILL.md or references/phase-overview.md`);
19
38
  }
20
39
 
21
40
  function parseFrontmatter(content) {
@@ -182,21 +201,21 @@ function testPhaseFlowDiagramOrder() {
182
201
  }
183
202
 
184
203
  function testPhaseFlowConsistencySectionExists() {
185
- if (!skillContent.includes('Phase Flow Consistency')) {
186
- throw new Error('SKILL.md must contain "Phase Flow Consistency" section');
204
+ if (!contentIncludes('Phase Flow Consistency')) {
205
+ throw new Error('SKILL.md or references/phase-overview.md must contain "Phase Flow Consistency" section');
187
206
  }
188
207
  console.log(' ✓ Phase Flow Consistency section exists');
189
208
  }
190
209
 
191
210
  function testCanonicalPhaseOrderTableExists() {
192
- if (!skillContent.includes('Canonical Phase Order')) {
193
- throw new Error('SKILL.md must contain "Canonical Phase Order" table');
211
+ if (!contentIncludes('Canonical Phase Order')) {
212
+ throw new Error('SKILL.md or references/phase-overview.md must contain "Canonical Phase Order" table');
194
213
  }
195
214
  console.log(' ✓ Canonical Phase Order table exists');
196
215
  }
197
216
 
198
217
  function testAll11PhasesInPhaseFlowConsistency() {
199
- const section = skillContent.split('Phase Flow Consistency')[1];
218
+ const section = contentSplit('Phase Flow Consistency');
200
219
  const requiredPhases = [
201
220
  'PREP', 'DESIGN', 'BUILD', 'VERIFY', 'SHIP', 'CLOSE',
202
221
  ];
@@ -235,14 +254,14 @@ function testForceLevelsRequiresDelphi() {
235
254
  // === Value Proposition Tests ===
236
255
 
237
256
  function testUniqueValuePropositionExists() {
238
- if (!skillContent.includes('Unique Value Proposition')) {
239
- throw new Error('SKILL.md must contain "Unique Value Proposition" section');
257
+ if (!contentIncludes('Unique Value Proposition')) {
258
+ throw new Error('SKILL.md or references/phase-overview.md must contain "Unique Value Proposition" section');
240
259
  }
241
260
  console.log(' ✓ Unique Value Proposition section exists');
242
261
  }
243
262
 
244
263
  function testUvpMentionsTokenSavings() {
245
- const section = skillContent.split('Unique Value Proposition')[1];
264
+ const section = contentSplit('Unique Value Proposition');
246
265
  if (!section.includes('40') || !section.includes('67') || !section.includes('token')) {
247
266
  throw new Error('Unique Value Proposition must mention 40-67% token savings');
248
267
  }
@@ -250,7 +269,7 @@ function testUvpMentionsTokenSavings() {
250
269
  }
251
270
 
252
271
  function testUvpMentionsHardGate() {
253
- const section = skillContent.split('Unique Value Proposition')[1];
272
+ const section = contentSplit('Unique Value Proposition');
254
273
  if (!section.includes('HARD-GATE')) {
255
274
  throw new Error('Unique Value Proposition must mention HARD-GATE discipline');
256
275
  }
@@ -258,7 +277,7 @@ function testUvpMentionsHardGate() {
258
277
  }
259
278
 
260
279
  function testUvpMentionsEmergentRequirements() {
261
- const section = skillContent.split('Unique Value Proposition')[1];
280
+ const section = contentSplit('Unique Value Proposition');
262
281
  if (!section.toLowerCase().includes('emergent')) {
263
282
  throw new Error('Unique Value Proposition must mention emergent requirements');
264
283
  }
@@ -360,7 +379,7 @@ function runTests(opts = {}) {
360
379
  }
361
380
 
362
381
  console.log(`\n=== Results: ${passed} passed, ${failed} failed ===\n`);
363
- errors.forEach(e => console.log(e));
382
+ for (const e of errors) console.log(e);
364
383
 
365
384
  if (exitOnFail && failed > 0) {
366
385
  process.exit(1);
@@ -1,9 +1,9 @@
1
1
  # SKILLS/TEST-SPECIFICATION-ALIGNMENT KNOWLEDGE BASE
2
2
 
3
3
  **Generated:** 2026-07-09
4
- **Commit:** 8408ba6
5
- **Branch:** sprint/2026-07-09-01
6
- **Version:** 0.14.4.0
4
+ **Commit:** df2023f
5
+ **Branch:** main
6
+ **Version:** 0.14.6.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.14.4",
3
+ "version": "0.14.6",
4
4
  "displayName": "XP-Gate",
5
5
  "description": "Extreme Programming quality gates + AI workflow skills for Qoder. Includes 10 quality gates (Gate 0-9), Sprint Flow (11 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-07-09
4
- **Commit:** 8408ba6
5
- **Branch:** sprint/2026-07-09-01
6
- **Version:** 0.14.4.0
4
+ **Commit:** df2023f
5
+ **Branch:** main
6
+ **Version:** 0.14.6.0
7
7
 
8
8
  ## OVERVIEW
9
9
  Delphi Consensus Review — multi-round anonymous expert review (≥90% threshold, 3 experts from ≥2 providers, domestic models only). Supports design + code-walkthrough modes.
@@ -1,9 +1,9 @@
1
1
  # SKILLS/SPRINT-FLOW KNOWLEDGE BASE
2
2
 
3
3
  **Generated:** 2026-07-09
4
- **Commit:** 8408ba6
5
- **Branch:** sprint/2026-07-09-01
6
- **Version:** 0.14.4.0
4
+ **Commit:** df2023f
5
+ **Branch:** main
6
+ **Version:** 0.14.6.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-07-09
4
- **Commit:** 8408ba6
5
- **Branch:** sprint/2026-07-09-01
6
- **Version:** 0.14.4.0
4
+ **Commit:** df2023f
5
+ **Branch:** main
6
+ **Version:** 0.14.6.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-07-09
4
- **Commit:** a09c009
4
+ **Commit:** df2023f
5
5
  **Branch:** main
6
- **Version:** 0.14.3.0
6
+ **Version:** 0.14.6.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-07-09
4
- **Commit:** 8408ba6
5
- **Branch:** sprint/2026-07-09-01
6
- **Version:** 0.14.4.0
4
+ **Commit:** df2023f
5
+ **Branch:** main
6
+ **Version:** 0.14.6.0
7
7
 
8
8
  ## OVERVIEW
9
9
  Delphi Consensus Review — multi-round anonymous expert review (≥90% threshold, 3 experts from ≥2 providers, domestic models only). Supports design + code-walkthrough modes.
@@ -1,9 +1,9 @@
1
1
  # SKILLS/SPRINT-FLOW KNOWLEDGE BASE
2
2
 
3
3
  **Generated:** 2026-07-09
4
- **Commit:** 8408ba6
5
- **Branch:** sprint/2026-07-09-01
6
- **Version:** 0.14.4.0
4
+ **Commit:** df2023f
5
+ **Branch:** main
6
+ **Version:** 0.14.6.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.
@@ -201,6 +201,10 @@ Every phase MUST output its header as the first line of that phase's output. For
201
201
  5. Each phase completion MUST write Phase Summary to `.sprint-state/phase-outputs/phase-{N}-summary.md`
202
202
  6. Each phase completion MUST update `.sprint-state/sprint-state.json`
203
203
 
204
+ ### Required Rendering (MANDATORY per phase)
205
+
206
+ 7. Each phase completion MUST render the ASCII progress dashboard using `templates/sprint-progress-template.md` — the orchestrator reads `sprint-state.json` and outputs the dashboard after every phase's status block, so the user always sees current global progress without needing to ask
207
+
204
208
  ### Phase Output Status Schema (MANDATORY per phase)
205
209
 
206
210
  Each phase MUST close with structured status:
@@ -9,13 +9,32 @@ const path = require('path');
9
9
 
10
10
  const SKILL_MD_PATH = path.join(__dirname, '..', 'SKILL.md');
11
11
  const REFERENCES_DIR = path.join(__dirname, '..', 'references');
12
+ const PHASE_OVERVIEW_PATH = path.join(REFERENCES_DIR, 'phase-overview.md');
12
13
  const PHASE_2_BUILD_PATH = path.join(REFERENCES_DIR, 'phase-3-build.md');
13
14
  const ORCHESTRATION_RULES_PATH = path.join(REFERENCES_DIR, 'orchestration-rules.md');
14
15
 
15
16
  let skillContent = '';
17
+ let phaseOverviewContent = '';
16
18
 
17
19
  function loadSkillMd() {
18
20
  skillContent = fs.readFileSync(SKILL_MD_PATH, 'utf-8');
21
+ if (fs.existsSync(PHASE_OVERVIEW_PATH)) {
22
+ phaseOverviewContent = fs.readFileSync(PHASE_OVERVIEW_PATH, 'utf-8');
23
+ }
24
+ }
25
+
26
+ // Search across SKILL.md AND references/phase-overview.md (progressive disclosure: sections
27
+ // like "Unique Value Proposition" and "Phase Flow Consistency" moved to reference file).
28
+ function contentIncludes(str) {
29
+ return skillContent.includes(str) || phaseOverviewContent.includes(str);
30
+ }
31
+ function contentSplit(str) {
32
+ // Return the part after str from whichever file contains it.
33
+ // Throws descriptive error instead of returning undefined so callers
34
+ // get a clear assertion message rather than a TypeError crash.
35
+ if (skillContent.includes(str)) return skillContent.split(str)[1];
36
+ if (phaseOverviewContent.includes(str)) return phaseOverviewContent.split(str)[1];
37
+ throw new Error(`Section "${str}" not found in SKILL.md or references/phase-overview.md`);
19
38
  }
20
39
 
21
40
  function parseFrontmatter(content) {
@@ -182,21 +201,21 @@ function testPhaseFlowDiagramOrder() {
182
201
  }
183
202
 
184
203
  function testPhaseFlowConsistencySectionExists() {
185
- if (!skillContent.includes('Phase Flow Consistency')) {
186
- throw new Error('SKILL.md must contain "Phase Flow Consistency" section');
204
+ if (!contentIncludes('Phase Flow Consistency')) {
205
+ throw new Error('SKILL.md or references/phase-overview.md must contain "Phase Flow Consistency" section');
187
206
  }
188
207
  console.log(' ✓ Phase Flow Consistency section exists');
189
208
  }
190
209
 
191
210
  function testCanonicalPhaseOrderTableExists() {
192
- if (!skillContent.includes('Canonical Phase Order')) {
193
- throw new Error('SKILL.md must contain "Canonical Phase Order" table');
211
+ if (!contentIncludes('Canonical Phase Order')) {
212
+ throw new Error('SKILL.md or references/phase-overview.md must contain "Canonical Phase Order" table');
194
213
  }
195
214
  console.log(' ✓ Canonical Phase Order table exists');
196
215
  }
197
216
 
198
217
  function testAll11PhasesInPhaseFlowConsistency() {
199
- const section = skillContent.split('Phase Flow Consistency')[1];
218
+ const section = contentSplit('Phase Flow Consistency');
200
219
  const requiredPhases = [
201
220
  'PREP', 'DESIGN', 'BUILD', 'VERIFY', 'SHIP', 'CLOSE',
202
221
  ];
@@ -235,14 +254,14 @@ function testForceLevelsRequiresDelphi() {
235
254
  // === Value Proposition Tests ===
236
255
 
237
256
  function testUniqueValuePropositionExists() {
238
- if (!skillContent.includes('Unique Value Proposition')) {
239
- throw new Error('SKILL.md must contain "Unique Value Proposition" section');
257
+ if (!contentIncludes('Unique Value Proposition')) {
258
+ throw new Error('SKILL.md or references/phase-overview.md must contain "Unique Value Proposition" section');
240
259
  }
241
260
  console.log(' ✓ Unique Value Proposition section exists');
242
261
  }
243
262
 
244
263
  function testUvpMentionsTokenSavings() {
245
- const section = skillContent.split('Unique Value Proposition')[1];
264
+ const section = contentSplit('Unique Value Proposition');
246
265
  if (!section.includes('40') || !section.includes('67') || !section.includes('token')) {
247
266
  throw new Error('Unique Value Proposition must mention 40-67% token savings');
248
267
  }
@@ -250,7 +269,7 @@ function testUvpMentionsTokenSavings() {
250
269
  }
251
270
 
252
271
  function testUvpMentionsHardGate() {
253
- const section = skillContent.split('Unique Value Proposition')[1];
272
+ const section = contentSplit('Unique Value Proposition');
254
273
  if (!section.includes('HARD-GATE')) {
255
274
  throw new Error('Unique Value Proposition must mention HARD-GATE discipline');
256
275
  }
@@ -258,7 +277,7 @@ function testUvpMentionsHardGate() {
258
277
  }
259
278
 
260
279
  function testUvpMentionsEmergentRequirements() {
261
- const section = skillContent.split('Unique Value Proposition')[1];
280
+ const section = contentSplit('Unique Value Proposition');
262
281
  if (!section.toLowerCase().includes('emergent')) {
263
282
  throw new Error('Unique Value Proposition must mention emergent requirements');
264
283
  }
@@ -360,7 +379,7 @@ function runTests(opts = {}) {
360
379
  }
361
380
 
362
381
  console.log(`\n=== Results: ${passed} passed, ${failed} failed ===\n`);
363
- errors.forEach(e => console.log(e));
382
+ for (const e of errors) console.log(e);
364
383
 
365
384
  if (exitOnFail && failed > 0) {
366
385
  process.exit(1);
@@ -1,9 +1,9 @@
1
1
  # SKILLS/TEST-SPECIFICATION-ALIGNMENT KNOWLEDGE BASE
2
2
 
3
3
  **Generated:** 2026-07-09
4
- **Commit:** 8408ba6
5
- **Branch:** sprint/2026-07-09-01
6
- **Version:** 0.14.4.0
4
+ **Commit:** df2023f
5
+ **Branch:** main
6
+ **Version:** 0.14.6.0
7
7
 
8
8
  ## OVERVIEW
9
9
  Test-Specification Alignment Engine — two-stage validation ensuring tests accurately reflect requirements and design specs.