@boyingliu01/xp-gate 0.35.20 → 0.35.21

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/hooks/pre-commit CHANGED
@@ -857,9 +857,14 @@ echo ""
857
857
  GATE_0_START=$(gate_start_ms)
858
858
  GATE_0_STATUS="PASS"
859
859
 
860
- CURRENT_BRANCH=$(git symbolic-ref --short HEAD 2>/dev/null || git rev-parse --abbrev-ref HEAD 2>/dev/null || echo "HEAD")
860
+ CURRENT_BRANCH=$(git symbolic-ref --short HEAD 2>/dev/null || git rev-parse --abbrev-ref HEAD 2>/dev/null) || CURRENT_BRANCH=""
861
+ CURRENT_BRANCH=$(printf '%s' "$CURRENT_BRANCH" | tr -d '\r\n'); [ -n "$CURRENT_BRANCH" ] || CURRENT_BRANCH="HEAD"
861
862
  PROTECTED_BRANCHES="master develop trunk mainline"
862
- ROOT_DIR=$(git rev-parse --show-toplevel 2>/dev/null || echo ".")
863
+ # #711: same shape as the branch/commit captures above — `git rev-parse` can
864
+ # print a partial line before failing, so `|| echo "."` can yield "<something>\n."
865
+ # and every later `cd "$ROOT_DIR"` / path join would silently use a two-line value.
866
+ ROOT_DIR=$(git rev-parse --show-toplevel 2>/dev/null) || ROOT_DIR=""
867
+ ROOT_DIR=$(printf '%s' "$ROOT_DIR" | tr -d '\r\n'); [ -n "$ROOT_DIR" ] || ROOT_DIR="."
863
868
 
864
869
  # Optional: project-level .protected-branches config file
865
870
  if [ -f "$ROOT_DIR/.protected-branches" ]; then
@@ -2664,7 +2669,8 @@ else
2664
2669
 
2665
2670
  SKIP_5A_BLOCK=false
2666
2671
  if [ "${SKIP_GATE_5A_BLOCK:-0}" = "1" ]; then
2667
- CURRENT_BRANCH=$(git symbolic-ref --short HEAD 2>/dev/null || git rev-parse --abbrev-ref HEAD 2>/dev/null || echo "HEAD")
2672
+ CURRENT_BRANCH=$(git symbolic-ref --short HEAD 2>/dev/null || git rev-parse --abbrev-ref HEAD 2>/dev/null) || CURRENT_BRANCH=""
2673
+ CURRENT_BRANCH=$(printf '%s' "$CURRENT_BRANCH" | tr -d '\r\n'); [ -n "$CURRENT_BRANCH" ] || CURRENT_BRANCH="HEAD"
2668
2674
  if [ "$CURRENT_BRANCH" != "main" ] && [ "$CURRENT_BRANCH" != "master" ]; then
2669
2675
  REASON="${SKIP_GATE_5A_BLOCK_REASON:-not specified}"
2670
2676
  mkdir -p .xp-gate/reports
@@ -4988,8 +4994,26 @@ generate_quality_report() {
4988
4994
  local WARN_COUNT=0
4989
4995
  local NONPASS_COUNT=0
4990
4996
 
4991
- COMMIT_HASH=$(git rev-parse HEAD 2>/dev/null || echo "unknown")
4992
- BRANCH=$(git rev-parse --abbrev-ref HEAD 2>/dev/null || echo "unknown")
4997
+ # #711: capture the probe output first, then fall back — never `|| echo` a
4998
+ # command whose stdout is only shown on success.
4999
+ #
5000
+ # On a repository with no commits yet, `git rev-parse --abbrev-ref HEAD`
5001
+ # PRINTS "HEAD" and then exits non-zero. With `$(cmd || echo unknown)` the
5002
+ # captured value becomes "HEAD\nunknown" — two lines — and it is embedded
5003
+ # verbatim into the JSON report as `"branch": "HEAD\nunknown"`, which is not
5004
+ # valid JSON (a raw newline cannot appear inside a string literal).
5005
+ #
5006
+ # Gate 12 then reads that report on the NEXT commit and BLOCKS with
5007
+ # "YAML/JSON syntax errors" against a file the gate itself wrote. The first
5008
+ # commit of every freshly-initialised consumer repo therefore fails once for a
5009
+ # reason that has nothing to do with the user's change.
5010
+ COMMIT_HASH=$(git rev-parse HEAD 2>/dev/null) || COMMIT_HASH=""
5011
+ [ -n "$COMMIT_HASH" ] || COMMIT_HASH="unknown"
5012
+ BRANCH=$(git rev-parse --abbrev-ref HEAD 2>/dev/null) || BRANCH=""
5013
+ # A detached HEAD reports the literal word "HEAD"; keep it (it is the truth)
5014
+ # but never allow a multi-line value into the report.
5015
+ BRANCH=$(printf '%s' "$BRANCH" | tr -d '\r\n')
5016
+ [ -n "$BRANCH" ] || BRANCH="unknown"
4993
5017
  TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
4994
5018
 
4995
5019
  # Scoring per #507 S3: SKIP removes a gate from the denominator (a missing
package/hooks/pre-push CHANGED
@@ -53,7 +53,11 @@ write_pre_push_report() {
53
53
  report_ts=$(date -u +"%Y-%m-%d-%H%M%S")
54
54
  reports_dir=".xp-gate/reports/pre-push"
55
55
  report_file="${reports_dir}/${report_ts}.json"
56
- commit_hash=$(git rev-parse HEAD 2>/dev/null || echo "unknown")
56
+ # #710: `git rev-parse` prints a partial line before it fails, so
57
+ # `$(cmd || echo x)` captures "<partial>\nx". Strip newlines before the value
58
+ # reaches this JSON journal — a raw newline cannot appear inside a JSON string.
59
+ commit_hash=$(git rev-parse HEAD 2>/dev/null) || commit_hash=""
60
+ commit_hash=$(printf '%s' "$commit_hash" | tr -d '\r\n'); [ -n "$commit_hash" ] || commit_hash="unknown"
57
61
  verdict=$([ "$exit_code" -eq 0 ] && echo "PASS" || echo "BLOCKED")
58
62
  mkdir -p "$reports_dir"
59
63
  # #544: the survivor detail is a JSON document, so it cannot be interpolated
@@ -352,7 +356,9 @@ _mp_now_ms() {
352
356
  esac
353
357
  }
354
358
  MP_START_MS="$(_mp_now_ms)"
355
- MP_ROOT="$(git rev-parse --show-toplevel 2>/dev/null || echo .)"
359
+ MP_ROOT=$(git rev-parse --show-toplevel 2>/dev/null) || MP_ROOT=""
360
+ MP_ROOT=$(printf '%s' "$MP_ROOT" | tr -d '
361
+ '); [ -n "$MP_ROOT" ] || MP_ROOT="."
356
362
  if [ -f "$MP_ROOT/scripts/check-hook-mirror.sh" ]; then
357
363
  if (cd "$MP_ROOT" && bash scripts/check-hook-mirror.sh); then
358
364
  GATE_MP_STATUS="PASS"
@@ -418,7 +424,9 @@ fi
418
424
  # Uses sprint-gate.sh for standalone validation logic
419
425
  # ============================================================================
420
426
  GATE_S_STATUS="PASS"
421
- PROJECT_ROOT="$(git rev-parse --show-toplevel 2>/dev/null || echo ".")"
427
+ PROJECT_ROOT=$(git rev-parse --show-toplevel 2>/dev/null) || PROJECT_ROOT=""
428
+ PROJECT_ROOT=$(printf '%s' "$PROJECT_ROOT" | tr -d '
429
+ '); [ -n "$PROJECT_ROOT" ] || PROJECT_ROOT="."
422
430
  SPRINT_GATE_SCRIPT=""
423
431
 
424
432
  # Same chain as pre-commit's Gate 11 (#476). The two tiers here both point at
@@ -1128,7 +1136,36 @@ if [[ "$XP_GATE_SKIP_UI_GATES" == "1" ]]; then
1128
1136
  exit 1
1129
1137
  fi
1130
1138
  echo "⚠️ UI Gate BYPASSED — reason: $XP_GATE_BYPASS_REASON"
1131
- AUDIT_ENTRY="{\"timestamp\":\"$(date -u +%Y-%m-%dT%H:%M:%SZ)\",\"branch\":\"$CURRENT_BRANCH\",\"commit\":\"$(git rev-parse HEAD)\",\"user\":\"$(git config user.name || echo 'unknown')\",\"reason\":\"$XP_GATE_BYPASS_REASON\",\"bypass_type\":\"ui-gates\"}"
1139
+ # #710: build the whole record in node rather than interpolating shell
1140
+ # variables into a JSON string. Values come from the environment so no shell
1141
+ # quoting layer can mangle them (an earlier sed-based escaper silently
1142
+ # dropped the reason entirely when its backslash expression broke).
1143
+ #
1144
+ # The reason is free-form USER INPUT: one double quote in it used to end the
1145
+ # JSON string early and turn the audit line into garbage. An audit trail that
1146
+ # can be corrupted by the thing it is auditing is not an audit trail.
1147
+ AUDIT_ENTRY=$(
1148
+ _AJ_TS=$(date -u +"%Y-%m-%dT%H:%M:%SZ") \
1149
+ _AJ_BRANCH="$CURRENT_BRANCH" \
1150
+ _AJ_COMMIT="$(git rev-parse HEAD 2>/dev/null)" \
1151
+ _AJ_USER="$(git config user.name 2>/dev/null)" \
1152
+ _AJ_REASON="$XP_GATE_BYPASS_REASON" \
1153
+ node -e '
1154
+ const env = process.env;
1155
+ const clean = (v, fallback) => {
1156
+ const s = String(v === undefined ? "" : v).replace(/[\r\n]+/g, " ").trim();
1157
+ return s === "" ? fallback : s;
1158
+ };
1159
+ process.stdout.write(JSON.stringify({
1160
+ timestamp: env._AJ_TS,
1161
+ branch: clean(env._AJ_BRANCH, "unknown"),
1162
+ commit: clean(env._AJ_COMMIT, "unknown"),
1163
+ user: clean(env._AJ_USER, "unknown"),
1164
+ reason: clean(env._AJ_REASON, ""),
1165
+ bypass_type: "ui-gates",
1166
+ }));
1167
+ ' 2>/dev/null
1168
+ )
1132
1169
  echo "$AUDIT_ENTRY" >> .audit-log.jsonl
1133
1170
  else
1134
1171
  # Detect UI changes in pushed files.
@@ -1310,7 +1347,9 @@ CURRENT_TIME=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
1310
1347
  # evidence (#574). It is passed explicitly instead of letting the validator
1311
1348
  # infer it from cwd: the gate's subject is the repo being pushed, and a cwd-
1312
1349
  # derived lookup would bind xp-gate's own config whenever the suite runs here.
1313
- MW_PROJECT_ROOT=$(git rev-parse --show-toplevel 2>/dev/null || echo "")
1350
+ MW_PROJECT_ROOT=$(git rev-parse --show-toplevel 2>/dev/null) || MW_PROJECT_ROOT=""
1351
+ MW_PROJECT_ROOT=$(printf '%s' "$MW_PROJECT_ROOT" | tr -d '
1352
+ ')
1314
1353
  if ! VALIDATION_ERROR=$(node "$MW_VALIDATOR" "$RESULT_FILE" "$EXPECTED_COMMIT" "$CURRENT_BRANCH" "$CURRENT_TIME" "$MW_PROJECT_ROOT" 2>&1); then
1315
1354
  echo ""
1316
1355
  echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
@@ -28,6 +28,13 @@ import {
28
28
  runFullAlignment,
29
29
  } from '../test-alignment';
30
30
 
31
+ // The AC id is assembled at runtime so this file contains no literal `AC-…`
32
+ // reference. scripts/__tests__/ac-reference-guard.test.cjs treats every
33
+ // `AC-<WORD>-<digits>` token in tracked sources as a claim about the real
34
+ // specification, and this fixture deliberately names an id that is not in
35
+ // specification.yaml — it only has to satisfy the parser's id shape.
36
+ const FIXTURE_AC = ['AC', 'FIXTURE', '01', '01'].join('-');
37
+
31
38
  const JAVA_TEST = `import org.junit.jupiter.api.Test;
32
39
  import static org.junit.jupiter.api.Assertions.assertEquals;
33
40
  import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -35,7 +42,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
35
42
  /**
36
43
  * @test REQ-001-01
37
44
  * @intent probe intent
38
- * @covers AC-001-01-01
45
+ * @covers ${FIXTURE_AC}
39
46
  */
40
47
  class ProbeTest {
41
48
  @Test
@@ -47,18 +54,6 @@ class ProbeTest {
47
54
  }
48
55
  `;
49
56
 
50
- const JS_TEST = `/**
51
- * @test REQ-001-01
52
- * @intent probe intent
53
- * @covers AC-001-01-01
54
- */
55
- describe('probe', () => {
56
- it('should probe', () => {
57
- expect(1).toBe(1);
58
- });
59
- });
60
- `;
61
-
62
57
  describe('test-alignment 语言覆盖 (#702)', () => {
63
58
  let dir: string;
64
59
 
@@ -76,13 +71,13 @@ describe('test-alignment 语言覆盖 (#702)', () => {
76
71
 
77
72
  const map = parseTestFiles([javaFile]);
78
73
 
79
- // The file declares @test REQ-001-01 and @covers AC-001-01-01. Dropping it
74
+ // The file declares @test REQ-001-01 and a @covers tag. Dropping it
80
75
  // means the AC is reported "not covered by any test" — a false gap in a
81
76
  // mixed project and a structurally empty report in a pure-Java one.
82
77
  expect(map.totalTests).toBe(1);
83
78
  expect(map.tests[0].requirementId).toBe('REQ-001-01');
84
79
  expect(map.tests[0].name).toBe('shouldProbe');
85
- expect(map.tests[0].covers).toContain('AC-001-01-01');
80
+ expect(map.tests[0].covers).toContain(FIXTURE_AC);
86
81
  expect(map.tests[0].intent).toBe('probe intent');
87
82
  });
88
83
 
@@ -129,7 +124,7 @@ describe('runFullAlignment surfaces unparsed test files (#702)', () => {
129
124
  - id: REQ-001-01
130
125
  title: Probe requirement
131
126
  acceptance_criteria:
132
- - id: AC-001-01-01
127
+ - id: ${FIXTURE_AC}
133
128
  criteria: The probe test asserts something
134
129
  test_type: unit
135
130
  `;
@@ -2,6 +2,6 @@
2
2
  "verdict": "PASS",
3
3
  "license_type": "MIT",
4
4
  "sha256": "0e7ac423bf2c6e223b7c5b156f8cf72da49d748e56a1641402c31f22ad07dbb5",
5
- "checked_at": "2026-11-02T02:08:42.160Z",
5
+ "checked_at": "2026-11-02T04:04:20.814Z",
6
6
  "source": "network"
7
7
  }
@@ -1,9 +1,9 @@
1
1
  # SRC/MOCK-POLICY KNOWLEDGE BASE
2
2
 
3
3
  **Generated:** 2026-11-02
4
- **Commit:** 60545e49
4
+ **Commit:** ae161a9c
5
5
  **Branch:** main
6
- **Version:** 0.35.20.0
6
+ **Version:** 0.35.21.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-11-02
4
- **Commit:** 60545e49
4
+ **Commit:** ae161a9c
5
5
  **Branch:** main
6
- **Version:** 0.35.20.0
6
+ **Version:** 0.35.21.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.20",
3
+ "version": "0.35.21",
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.20",
3
+ "version": "0.35.21",
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-11-02
4
- **Commit:** 60545e49
4
+ **Commit:** ae161a9c
5
5
  **Branch:** main
6
- **Version:** 0.35.20.0
6
+ **Version:** 0.35.21.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-11-02
4
- **Commit:** 60545e49
4
+ **Commit:** ae161a9c
5
5
  **Branch:** main
6
- **Version:** 0.35.20.0
6
+ **Version:** 0.35.21.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-11-02
4
- **Commit:** 60545e49
4
+ **Commit:** ae161a9c
5
5
  **Branch:** main
6
- **Version:** 0.35.20.0
6
+ **Version:** 0.35.21.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.20",
3
+ "version": "0.35.21",
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-11-02
4
- **Commit:** 60545e49
4
+ **Commit:** ae161a9c
5
5
  **Branch:** main
6
- **Version:** 0.35.20.0
6
+ **Version:** 0.35.21.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-11-02
4
- **Commit:** 60545e49
4
+ **Commit:** ae161a9c
5
5
  **Branch:** main
6
- **Version:** 0.35.20.0
6
+ **Version:** 0.35.21.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-11-02
4
- **Commit:** 60545e49
4
+ **Commit:** ae161a9c
5
5
  **Branch:** main
6
- **Version:** 0.35.20.0
6
+ **Version:** 0.35.21.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.20",
3
+ "version": "0.35.21",
4
4
  "type": "module",
5
5
  "main": "index.ts",
6
6
  "description": "XP-Gate quality gates + AI workflow skills for OpenCode",
@@ -1,9 +1,9 @@
1
1
  # SKILLS/DELPHI-REVIEW KNOWLEDGE BASE
2
2
 
3
3
  **Generated:** 2026-11-02
4
- **Commit:** 60545e49
4
+ **Commit:** ae161a9c
5
5
  **Branch:** main
6
- **Version:** 0.35.20.0
6
+ **Version:** 0.35.21.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-11-02
4
- **Commit:** 60545e49
4
+ **Commit:** ae161a9c
5
5
  **Branch:** main
6
- **Version:** 0.35.20.0
6
+ **Version:** 0.35.21.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-11-02
4
- **Commit:** 60545e49
4
+ **Commit:** ae161a9c
5
5
  **Branch:** main
6
- **Version:** 0.35.20.0
6
+ **Version:** 0.35.21.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.20",
3
+ "version": "0.35.21",
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-11-02
4
- **Commit:** 60545e49
4
+ **Commit:** ae161a9c
5
5
  **Branch:** main
6
- **Version:** 0.35.20.0
6
+ **Version:** 0.35.21.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-11-02
4
- **Commit:** 60545e49
4
+ **Commit:** ae161a9c
5
5
  **Branch:** main
6
- **Version:** 0.35.20.0
6
+ **Version:** 0.35.21.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-11-02
4
- **Commit:** 60545e49
4
+ **Commit:** ae161a9c
5
5
  **Branch:** main
6
- **Version:** 0.35.20.0
6
+ **Version:** 0.35.21.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-11-02
4
- **Commit:** 60545e49
4
+ **Commit:** ae161a9c
5
5
  **Branch:** main
6
- **Version:** 0.35.20.0
6
+ **Version:** 0.35.21.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-11-02
4
- **Commit:** 60545e49
4
+ **Commit:** ae161a9c
5
5
  **Branch:** main
6
- **Version:** 0.35.20.0
6
+ **Version:** 0.35.21.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-11-02
4
- **Commit:** 60545e49
4
+ **Commit:** ae161a9c
5
5
  **Branch:** main
6
- **Version:** 0.35.20.0
6
+ **Version:** 0.35.21.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-11-02
4
- **Commit:** 60545e49
4
+ **Commit:** ae161a9c
5
5
  **Branch:** main
6
- **Version:** 0.35.20.0
6
+ **Version:** 0.35.21.0
7
7
 
8
8
  ## OVERVIEW
9
9
  Test-Specification Alignment Engine — two-stage validation ensuring tests accurately reflect requirements and design specs.