@boyingliu01/xp-gate 0.28.0 → 0.29.0

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
@@ -285,6 +285,104 @@ gate_start_ms() {
285
285
  now_ms
286
286
  }
287
287
 
288
+ # ---------------------------------------------------------------------------
289
+ # #537: per-language coverage classification.
290
+ #
291
+ # A gate that SKIPs tells the reader nothing on its own — "documentation
292
+ # project", "tool not installed" and "nothing changed" are wildly different
293
+ # facts that used to collapse into one word. A PowerShell-primary repo could
294
+ # therefore look fully covered while 3.3k lines were measured by nothing.
295
+ #
296
+ # classify_coverage_reason REASON GATE_STATUS
297
+ # -> covered | not_applicable | no_changes | tool_missing | unknown
298
+ #
299
+ # FAIL CLOSED: an unrecognised reason is `unknown`, never `covered`. `covered`
300
+ # is reachable ONLY by a gate that actually passed (PASS / WARN /
301
+ # PASS_WITH_WARNINGS) with no skip reason attached.
302
+ # ---------------------------------------------------------------------------
303
+ classify_coverage_reason() {
304
+ local reason="${1:-}"
305
+ local gate_status="${2:-}"
306
+
307
+ case "$reason" in
308
+ documentation_project) echo "not_applicable" ;;
309
+ architecture_skip_exemption) echo "not_applicable" ;;
310
+ no_source_files_changed) echo "no_changes" ;;
311
+ # Gate 4 names the same concept "no_matching_files_changed"; Gate 3/6 use
312
+ # the shorter form. Both mean "the tool exists, nothing to look at".
313
+ no_matching_files_changed) echo "no_changes" ;;
314
+ tool_missing|tool_not_installed|no_powershell_tool|no_archlint_detector|checker_not_found)
315
+ echo "tool_missing" ;;
316
+ # archlint / import-linter / arch-go / Java arch tests exist as concepts but
317
+ # this repo carries no config for the language, so nothing was measured.
318
+ architecture_not_configured) echo "tool_missing" ;;
319
+ # Gate 4's checker ran but crashed. Not covered, not "tool missing" — the
320
+ # measurement was attempted and failed, so the honest answer is unknown.
321
+ checker_execution_error) echo "unknown" ;;
322
+ "")
323
+ case "$gate_status" in
324
+ PASS|WARN|PASS_WITH_WARNINGS|PASSED) echo "covered" ;;
325
+ *) echo "unknown" ;;
326
+ esac
327
+ ;;
328
+ *) echo "unknown" ;;
329
+ esac
330
+ }
331
+
332
+ # #537: record where the language key set came from. PROJECT_LANGS is derived
333
+ # from the CURRENTLY CHANGED files, not from a static inventory of the repo, so
334
+ # a docs-only commit legitimately yields an empty set. Reporting the matrix
335
+ # without this provenance would repeat the sin the matrix exists to fix.
336
+ resolve_languages_source() {
337
+ local override_langs="${1:-}"
338
+ local config_langs="${2:-}"
339
+ local resolved_langs="${3:-}"
340
+ if [ -n "$override_langs" ]; then
341
+ echo "override"
342
+ elif [ -n "$config_langs" ]; then
343
+ echo "config"
344
+ elif [ -n "$resolved_langs" ]; then
345
+ echo "changed_files"
346
+ else
347
+ echo "none"
348
+ fi
349
+ }
350
+
351
+ # #537: resolve Gate 6's reason for ONE language.
352
+ #
353
+ # Reads the flattened GATE_6_LANG_REASONS ("lang=reason,lang=reason") because
354
+ # the associate array that produced it is function-local to the gate and
355
+ # invisible to generate_quality_report().
356
+ #
357
+ # The scalar GATE_6_REASON is a SUMMARY across languages and must NOT be used
358
+ # as a per-language fallback when per-language detail exists: with langs
359
+ # "typescript iac" where only iac lacks a detector, the scalar reads
360
+ # no_archlint_detector and would relabel typescript — the exact language
361
+ # archlint had just measured. A real probe run exposed this:
362
+ # langs=[typescript iac] reasons=[iac=no_archlint_detector]
363
+ #
364
+ # So: an explicit pair wins; otherwise there is no skip reason for this
365
+ # language, and "no reason" + PASS status is precisely what `covered` means.
366
+ # The scalar only speaks for every language when there is no detail at all
367
+ # (config-missing / bash<4 paths).
368
+ coverage_g6_reason_for() {
369
+ local lang="${1:-}"
370
+ local detail="${GATE_6_LANG_REASONS:-}"
371
+ local scalar="${GATE_6_REASON:-}"
372
+ local pairs=",${detail},"
373
+ local reason=""
374
+ case "$pairs" in
375
+ *",${lang}="*)
376
+ reason="${pairs#*",${lang}="}"
377
+ reason="${reason%%,*}"
378
+ ;;
379
+ esac
380
+ if [ -z "$reason" ] && [ -z "$detail" ] && [ -n "$scalar" ]; then
381
+ reason="$scalar"
382
+ fi
383
+ echo "$reason"
384
+ }
385
+
288
386
  # Audit helper — records gate execution to .xp-gate/audit.jsonl
289
387
  # NEVER blocks commit on failure (try/catch around npx tsx).
290
388
  # Usage: record_gate_audit <gate_id> <gate_name> <passed> <issues_found> <start_ms>
@@ -2902,6 +3000,15 @@ else
2902
3000
 
2903
3001
  # Check if architecture config exists (use $PROJECT_ROOT — hook may have cd'd to a subdir via ARCH-03)
2904
3002
  if [ -f "$PROJECT_ROOT/architecture.yaml" ] || [ -f "$PROJECT_ROOT/.architecturerc" ] || [ -f "$PROJECT_ROOT/.archlint.yaml" ]; then
3003
+ # #537: per-language reason bookkeeping. Gate 3/4 are single-language gates
3004
+ # and get away with one scalar reason; Gate 6 loops, so a scalar would lose
3005
+ # information ("TS passed, PS has no detector" cannot be one string).
3006
+ # Bash 4 associative array, with a scalar aggregate for the legacy field.
3007
+ GATE_6_REASON=""
3008
+ GATE_6_LANG_REASONS=""
3009
+ if [ "${BASH_VERSINFO[0]:-0}" -ge 4 ]; then
3010
+ declare -A GATE_6_REASON_BY_LANG=()
3011
+ fi
2905
3012
  # Different architecture tools per language
2906
3013
  for CURRENT_LANG in $PROJECT_LANGS; do
2907
3014
  case "$CURRENT_LANG" in
@@ -2947,6 +3054,8 @@ else
2947
3054
  else
2948
3055
  echo " ✅ TypeScript architecture validation completed (zero-tolerance mode). no baseline found."
2949
3056
  fi
3057
+ # #537: archlint actually ran here, so there is no skip reason. The
3058
+ # matrix reads an absent reason + PASS status as `covered`.
2950
3059
  ;;
2951
3060
  "python")
2952
3061
  # detect any import-linter carrier (incl. pyproject.toml [tool.importlinter])
@@ -2972,6 +3081,12 @@ else
2972
3081
  else
2973
3082
  echo " ℹ️ No import-linter config found (.import-linter.yml/.importlinter/[tool.importlinter]) - skipping"
2974
3083
  echo " ⏭️ SKIPPED - Python architecture validation (no config)"
3084
+ # #537: no config means Python architecture was NOT measured. Without
3085
+ # this the matrix would call it `covered` simply because the branch
3086
+ # recorded nothing — the exact false-confidence the matrix prevents.
3087
+ if [ "${BASH_VERSINFO[0]:-0}" -ge 4 ]; then
3088
+ GATE_6_REASON_BY_LANG["$CURRENT_LANG"]="architecture_not_configured"
3089
+ fi
2975
3090
  fi
2976
3091
  ;;
2977
3092
  "go")
@@ -2988,6 +3103,10 @@ else
2988
3103
  else
2989
3104
  echo " ℹ️ No arch-go.yaml found - skipping Go architecture"
2990
3105
  echo " ⏭️ SKIPPED - Go architecture validation (no config)"
3106
+ # #537: same reasoning as the Python branch above.
3107
+ if [ "${BASH_VERSINFO[0]:-0}" -ge 4 ]; then
3108
+ GATE_6_REASON_BY_LANG["$CURRENT_LANG"]="architecture_not_configured"
3109
+ fi
2991
3110
  fi
2992
3111
  ;;
2993
3112
  "java")
@@ -3004,19 +3123,63 @@ else
3004
3123
  else
3005
3124
  echo " ℹ️ No architecture test files found - skipping"
3006
3125
  echo " ⏭️ SKIPPED - Architecture validation (no tests)"
3126
+ # #537: no test files means Java architecture was NOT measured.
3127
+ if [ "${BASH_VERSINFO[0]:-0}" -ge 4 ]; then
3128
+ GATE_6_REASON_BY_LANG["$CURRENT_LANG"]="architecture_not_configured"
3129
+ fi
3007
3130
  fi
3008
3131
  ;;
3009
3132
  *)
3010
3133
  echo " ℹ️ Architecture validation not configured for $CURRENT_LANG"
3011
3134
  echo " ⏭️ SKIPPED - Architecture validation (not configured for $CURRENT_LANG)"
3135
+ # #537: archlint ships no detector for this language. Say so in a way
3136
+ # the quality report can read, instead of leaving the dimension silent.
3137
+ if [ "${BASH_VERSINFO[0]:-0}" -ge 4 ]; then
3138
+ GATE_6_REASON_BY_LANG["$CURRENT_LANG"]="no_archlint_detector"
3139
+ fi
3012
3140
  ;;
3013
3141
  esac
3014
3142
  done # end for CURRENT_LANG (architecture)
3143
+
3144
+ # #537: fold the per-language reasons into the legacy scalar. Homogeneous
3145
+ # reasons survive as-is; a genuine mix becomes the `mixed` sentinel, which
3146
+ # classify_coverage_reason() maps to `unknown` (fail closed) rather than
3147
+ # pretending one language's verdict covers all of them.
3148
+ #
3149
+ # `declare -A` inside a function is FUNCTION-LOCAL in bash, and the report
3150
+ # is written by generate_quality_report() — a different function. So the
3151
+ # assoc array is flattened into this global string, which the report parses.
3152
+ # (Found by running the hook: the matrix reported tool_missing for
3153
+ # typescript because the lookup saw an empty array.)
3154
+ GATE_6_LANG_REASONS=""
3155
+ _g6_seen=""
3156
+ _g6_mixed=0
3157
+ for _g6_lang in $PROJECT_LANGS; do
3158
+ _g6_r=""
3159
+ if [ "${BASH_VERSINFO[0]:-0}" -ge 4 ]; then
3160
+ _g6_r="${GATE_6_REASON_BY_LANG[$_g6_lang]:-}"
3161
+ fi
3162
+ if [ -n "$_g6_r" ]; then
3163
+ GATE_6_LANG_REASONS="${GATE_6_LANG_REASONS:+$GATE_6_LANG_REASONS,}${_g6_lang}=${_g6_r}"
3164
+ if [ -z "$_g6_seen" ]; then
3165
+ _g6_seen="$_g6_r"
3166
+ elif [ "$_g6_seen" != "$_g6_r" ]; then
3167
+ _g6_mixed=1
3168
+ fi
3169
+ fi
3170
+ done
3171
+ if [ "$_g6_mixed" = "1" ]; then
3172
+ GATE_6_REASON="mixed"
3173
+ else
3174
+ GATE_6_REASON="$_g6_seen"
3175
+ fi
3015
3176
  else
3016
3177
  # Architecture config is REQUIRED — BLOCK if missing
3017
3178
  if [ -f "$PROJECT_ROOT/.architecture-skip" ]; then
3018
3179
  echo " ⚠️ Architecture config missing but .architecture-skip present — allowed to skip"
3019
3180
  echo " ⏭️ SKIPPED - Architecture validation (.architecture-skip exemption)"
3181
+ # #537: an explicit exemption is "not applicable", not "tool missing".
3182
+ GATE_6_REASON="architecture_skip_exemption"
3020
3183
  else
3021
3184
  echo ""
3022
3185
  echo "❌ ARCHITECTURE CONFIG MISSING - COMMIT BLOCKED"
@@ -3563,6 +3726,37 @@ generate_quality_report() {
3563
3726
  local REPORT_FILE="${STATUS_DIR}/${BRANCH}.json"
3564
3727
  mkdir -p "$(dirname "$REPORT_FILE")"
3565
3728
 
3729
+ # ── #537: per-language coverage matrix ───────────────────────────────────────
3730
+ # Answers "was this dimension actually measured for this language?" instead of
3731
+ # letting every SKIP read as a pass. Built by whitelist splicing (the same
3732
+ # technique as DEGRADED_JSON above) rather than jq, because jq is an OPTIONAL
3733
+ # dependency here (see the `command -v jq` guard earlier in this file) and a
3734
+ # missing jq must not silently cost us the whole matrix.
3735
+ #
3736
+ # Safety: every spliced value is one of the five enum literals below — no
3737
+ # quotes, backslashes or newlines can reach the JSON. Language names are
3738
+ # whitelisted too, and a name that fails the whitelist is reported in
3739
+ # coverageWarnings instead of being silently dropped.
3740
+ local COVERAGE_MATRIX_JSON=""
3741
+ local COVERAGE_WARNINGS_JSON=""
3742
+ local _cm_lang _cm_g3 _cm_g4 _cm_g6 _cm_entry
3743
+ for _cm_lang in $PROJECT_LANGS; do
3744
+ if ! echo "$_cm_lang" | grep -qE '^[a-z][a-z0-9+]*$'; then
3745
+ COVERAGE_WARNINGS_JSON="${COVERAGE_WARNINGS_JSON:+$COVERAGE_WARNINGS_JSON, }\"unsupported_language_name\""
3746
+ continue
3747
+ fi
3748
+ _cm_g3=$(classify_coverage_reason "${GATE_3_REASON:-}" "${GATE_3_STATUS:-PASS}")
3749
+ _cm_g4=$(classify_coverage_reason "${GATE_4_REASON:-}" "${GATE_4_STATUS:-PASS}")
3750
+ # Gate 6 reason for this language — extracted so the rule is testable
3751
+ # rather than inlined (see coverage_g6_reason_for below).
3752
+ _cm_g6_reason=$(coverage_g6_reason_for "$_cm_lang")
3753
+ _cm_g6=$(classify_coverage_reason "$_cm_g6_reason" "${GATE_6_STATUS:-PASS}")
3754
+ _cm_entry="\"${_cm_lang}\": {\"gate3_complexity\": \"${_cm_g3}\", \"gate4_principles\": \"${_cm_g4}\", \"gate6_architecture\": \"${_cm_g6}\"}"
3755
+ COVERAGE_MATRIX_JSON="${COVERAGE_MATRIX_JSON:+$COVERAGE_MATRIX_JSON, }${_cm_entry}"
3756
+ done
3757
+ local LANGUAGES_SOURCE
3758
+ LANGUAGES_SOURCE=$(resolve_languages_source "${_RESOLVED_LANG_OVERRIDE:-}" "${_CONFIG_LANGS:-}" "${PROJECT_LANGS:-}")
3759
+
3566
3760
  cat > "$REPORT_FILE" << ENDJSON
3567
3761
  {
3568
3762
  "reportVersion": "2.0",
@@ -3581,6 +3775,9 @@ generate_quality_report() {
3581
3775
  "score": $SCORE_JSON,
3582
3776
  "verdict": "$VERDICT"
3583
3777
  },
3778
+ "languagesSource": "${LANGUAGES_SOURCE}",
3779
+ "coverageMatrix": {${COVERAGE_MATRIX_JSON}},
3780
+ "coverageWarnings": [${COVERAGE_WARNINGS_JSON}],
3584
3781
  "gates": {
3585
3782
  "gate1_static_analysis": {
3586
3783
  "name": "Code Quality (Static + Lint + Shell)",
@@ -3616,6 +3813,7 @@ generate_quality_report() {
3616
3813
  "gate6_arch_boyscout": {
3617
3814
  "name": "Architecture + Boy Scout Rule",
3618
3815
  "status": "${GATE_6_STATUS:-PASS}",
3816
+ "reason": "${GATE_6_REASON:-}",
3619
3817
  "boyScoutPassed": $BS_PASSED,
3620
3818
  "boyScoutBlocked": $BS_BLOCKED
3621
3819
  },
package/hooks/pre-push CHANGED
@@ -153,8 +153,15 @@ fi
153
153
  DOC_ONLY=true
154
154
  SOURCE_EXTENSIONS="\.py$|\.js$|\.cjs$|\.mjs$|\.ts$|\.tsx$|\.java$|\.go$|\.rs$|\.cpp$|\.c$|\.swift$|\.kt$|\.sh$|\.dart$|\.ps1$|\.m$|\.mm$|\.h$|\.hpp$"
155
155
 
156
+ # Extensionless hook scripts and test files are CODE, not documentation.
157
+ # Measured consequence of the old list: a commit touching githooks/pre-push and
158
+ # its .bats suite was classified "Documentation-only push (no source code
159
+ # files)" and the walkthrough was skipped — the single most safety-critical
160
+ # script in the repo, exempt from review by a filename-shape accident.
161
+ NON_EXT_SOURCE_RE='^(githooks/(pre-commit|pre-push|post-merge|install\.sh|verify\.sh)|[^/]+\.bats)$|/__tests__/'
162
+
156
163
  for file in $PUSHED_FILES; do
157
- if echo "$file" | grep -qE "$SOURCE_EXTENSIONS"; then
164
+ if echo "$file" | grep -qE "$SOURCE_EXTENSIONS" || echo "$file" | grep -qE "$NON_EXT_SOURCE_RE"; then
158
165
  DOC_ONLY=false
159
166
  break
160
167
  fi
@@ -954,6 +961,7 @@ else
954
961
  # GATE MW: VALIDATE CODE WALKTHROUGH RESULT FILE
955
962
  # ============================================================================
956
963
  RESULT_FILE=".code-walkthrough-result.json"
964
+ MW_SKIPPED=0
957
965
 
958
966
  # Skipped on main/master by design, exactly like Gate ML and Gate UI above.
959
967
  # Work is already walkthrough-reviewed on the feature branch before it lands, so
@@ -962,6 +970,7 @@ RESULT_FILE=".code-walkthrough-result.json"
962
970
  # the release commit itself changes nothing anyone reviewed. githooks/AGENTS.md
963
971
  # documented this skip; the code did not implement it (drift fixed here).
964
972
  if [ "$CURRENT_BRANCH" = "main" ] || [ "$CURRENT_BRANCH" = "master" ]; then
973
+ MW_SKIPPED=1
965
974
  echo ""
966
975
  echo " ℹ️ Gate MW skipped (pushing to ${CURRENT_BRANCH} — pre-reviewed via branch walkthrough)"
967
976
  echo ""
@@ -1038,13 +1047,20 @@ fi
1038
1047
  # ============================================================================
1039
1048
  echo ""
1040
1049
  echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
1050
+ # Say what actually happened. Printing "VERIFIED" on a skipped gate would be a
1051
+ # claim the hook cannot support — the same dishonesty (evidence asserting an
1052
+ # unperformed check) that Gate MW exists to prevent.
1053
+ if [ "$MW_SKIPPED" = "1" ]; then
1054
+ echo " ℹ️ GATE MW: CODE WALKTHROUGH SKIPPED (main-branch push)"
1055
+ else
1041
1056
  echo " ✅ GATE MW: CODE WALKTHROUGH VERIFIED"
1057
+ fi
1042
1058
  echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
1043
1059
  echo ""
1044
1060
  echo "Branch: $CURRENT_BRANCH"
1045
1061
  echo "Files changed: $FILES_CHANGED"
1046
1062
  echo "Lines: +$LINES_ADDED -$LINES_DELETED"
1047
- if [ -f "$RESULT_FILE" ]; then
1063
+ if [ "$MW_SKIPPED" != "1" ] && [ -f "$RESULT_FILE" ]; then
1048
1064
  echo ""
1049
1065
  echo "Code walkthrough result:"
1050
1066
  echo " Commit: $EXPECTED_COMMIT"
@@ -2,6 +2,6 @@
2
2
  "verdict": "PASS",
3
3
  "license_type": "MIT",
4
4
  "sha256": "0e7ac423bf2c6e223b7c5b156f8cf72da49d748e56a1641402c31f22ad07dbb5",
5
- "checked_at": "2026-10-19T12:19:52.510Z",
5
+ "checked_at": "2026-10-19T16:16:19.910Z",
6
6
  "source": "network"
7
7
  }
@@ -1,9 +1,9 @@
1
1
  # SRC/MOCK-POLICY KNOWLEDGE BASE
2
2
 
3
3
  **Generated:** 2026-10-19
4
- **Commit:** 07d3036f
4
+ **Commit:** 88bfe6a6
5
5
  **Branch:** main
6
- **Version:** 0.28.0.0
6
+ **Version:** 0.29.0.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-19
4
- **Commit:** 07d3036f
4
+ **Commit:** 88bfe6a6
5
5
  **Branch:** main
6
- **Version:** 0.28.0.0
6
+ **Version:** 0.29.0.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.28.0",
3
+ "version": "0.29.0",
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.28.0",
3
+ "version": "0.29.0",
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-19
4
- **Commit:** 07d3036f
4
+ **Commit:** 88bfe6a6
5
5
  **Branch:** main
6
- **Version:** 0.28.0.0
6
+ **Version:** 0.29.0.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-19
4
- **Commit:** 07d3036f
4
+ **Commit:** 88bfe6a6
5
5
  **Branch:** main
6
- **Version:** 0.28.0.0
6
+ **Version:** 0.29.0.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-19
4
- **Commit:** 07d3036f
4
+ **Commit:** 88bfe6a6
5
5
  **Branch:** main
6
- **Version:** 0.28.0.0
6
+ **Version:** 0.29.0.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.28.0",
3
+ "version": "0.29.0",
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-19
4
- **Commit:** 07d3036f
4
+ **Commit:** 88bfe6a6
5
5
  **Branch:** main
6
- **Version:** 0.28.0.0
6
+ **Version:** 0.29.0.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-19
4
- **Commit:** 07d3036f
4
+ **Commit:** 88bfe6a6
5
5
  **Branch:** main
6
- **Version:** 0.28.0.0
6
+ **Version:** 0.29.0.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-19
4
- **Commit:** 07d3036f
4
+ **Commit:** 88bfe6a6
5
5
  **Branch:** main
6
- **Version:** 0.28.0.0
6
+ **Version:** 0.29.0.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.28.0",
3
+ "version": "0.29.0",
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-19
4
- **Commit:** 07d3036f
4
+ **Commit:** 88bfe6a6
5
5
  **Branch:** main
6
- **Version:** 0.28.0.0
6
+ **Version:** 0.29.0.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-19
4
- **Commit:** 07d3036f
4
+ **Commit:** 88bfe6a6
5
5
  **Branch:** main
6
- **Version:** 0.28.0.0
6
+ **Version:** 0.29.0.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-19
4
- **Commit:** 07d3036f
4
+ **Commit:** 88bfe6a6
5
5
  **Branch:** main
6
- **Version:** 0.28.0.0
6
+ **Version:** 0.29.0.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.28.0",
3
+ "version": "0.29.0",
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-19
4
- **Commit:** 07d3036f
4
+ **Commit:** 88bfe6a6
5
5
  **Branch:** main
6
- **Version:** 0.28.0.0
6
+ **Version:** 0.29.0.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-19
4
- **Commit:** 07d3036f
4
+ **Commit:** 88bfe6a6
5
5
  **Branch:** main
6
- **Version:** 0.28.0.0
6
+ **Version:** 0.29.0.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-19
4
- **Commit:** 07d3036f
4
+ **Commit:** 88bfe6a6
5
5
  **Branch:** main
6
- **Version:** 0.28.0.0
6
+ **Version:** 0.29.0.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-19
4
- **Commit:** 07d3036f
4
+ **Commit:** 88bfe6a6
5
5
  **Branch:** main
6
- **Version:** 0.28.0.0
6
+ **Version:** 0.29.0.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-19
4
- **Commit:** 07d3036f
4
+ **Commit:** 88bfe6a6
5
5
  **Branch:** main
6
- **Version:** 0.28.0.0
6
+ **Version:** 0.29.0.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-19
4
- **Commit:** 07d3036f
4
+ **Commit:** 88bfe6a6
5
5
  **Branch:** main
6
- **Version:** 0.28.0.0
6
+ **Version:** 0.29.0.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-19
4
- **Commit:** 07d3036f
4
+ **Commit:** 88bfe6a6
5
5
  **Branch:** main
6
- **Version:** 0.28.0.0
6
+ **Version:** 0.29.0.0
7
7
 
8
8
  ## OVERVIEW
9
9
  Test-Specification Alignment Engine — two-stage validation ensuring tests accurately reflect requirements and design specs.