@boyingliu01/xp-gate 0.25.0 → 0.26.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/adapters/python.sh +53 -3
- package/hooks/lib/python-incremental-typecheck.sh +104 -0
- package/hooks/lib/typecheck.sh +10 -0
- package/hooks/pre-commit +57 -22
- package/lib/mattpocock-license-verdict.json +1 -1
- package/mock-policy/AGENTS.md +3 -3
- package/mutation/AGENTS.md +3 -3
- package/package.json +1 -1
- package/plugins/claude-code/.claude-plugin/plugin.json +1 -1
- package/plugins/claude-code/skills/delphi-review/AGENTS.md +3 -3
- package/plugins/claude-code/skills/sprint-flow/AGENTS.md +3 -3
- package/plugins/claude-code/skills/test-specification-alignment/AGENTS.md +3 -3
- package/plugins/dsh/package.json +1 -1
- package/plugins/dsh/skills/delphi-review/AGENTS.md +3 -3
- package/plugins/dsh/skills/sprint-flow/AGENTS.md +3 -3
- package/plugins/dsh/skills/test-specification-alignment/AGENTS.md +3 -3
- package/plugins/opencode/package.json +1 -1
- package/plugins/opencode/skills/delphi-review/AGENTS.md +3 -3
- package/plugins/opencode/skills/sprint-flow/AGENTS.md +3 -3
- package/plugins/opencode/skills/test-specification-alignment/AGENTS.md +3 -3
- package/plugins/qoder/plugin.json +1 -1
- package/plugins/qoder/skills/delphi-review/AGENTS.md +3 -3
- package/plugins/qoder/skills/sprint-flow/AGENTS.md +3 -3
- package/plugins/qoder/skills/test-specification-alignment/AGENTS.md +3 -3
- package/principles/AGENTS.md +3 -3
- package/skills/delphi-review/AGENTS.md +3 -3
- package/skills/sprint-flow/AGENTS.md +3 -3
- package/skills/test-specification-alignment/AGENTS.md +3 -3
package/adapters/python.sh
CHANGED
|
@@ -91,12 +91,62 @@ run_static_analysis() {
|
|
|
91
91
|
return 0
|
|
92
92
|
fi
|
|
93
93
|
fi
|
|
94
|
-
#
|
|
95
|
-
|
|
94
|
+
# #534: engine selection. mypy is ALWAYS the authoritative engine (determinism —
|
|
95
|
+
# ty is an alpha, ~70% spec conformance, config-incompatible). ty is used ONLY
|
|
96
|
+
# as an explicit opt-in accelerator when XP_GATE_TY=1 AND `ty` is installed:
|
|
97
|
+
# - XP_GATE_TY=1 + ty present -> `ty check <target>` (ty's CLI is `ty check`,
|
|
98
|
+
# not `ty`; exit 1 = type errors -> BLOCK, exit 2 = config/CLI error -> SKIP)
|
|
99
|
+
# - XP_GATE_TY=1 + ty missing -> SKIP (return 0), never BLOCK: the opt-in
|
|
100
|
+
# path must not route through require_tool mypy and false-block a repo that
|
|
101
|
+
# opted into ty but lacks mypy (Delphi R1 Critical).
|
|
102
|
+
# - XP_GATE_TY unset -> pure mypy (authoritative), unchanged.
|
|
103
|
+
# Scope semantics (.xp-gate-mypy-scope / src/ scripts/) are engine-independent
|
|
104
|
+
# and preserved verbatim below.
|
|
105
|
+
local _engine=mypy
|
|
106
|
+
if [ "${XP_GATE_TY:-}" = "1" ]; then
|
|
107
|
+
if command -v ty >/dev/null 2>&1; then
|
|
108
|
+
_engine=ty
|
|
109
|
+
echo " ⚙ engine: ty (Rust, explicit opt-in via XP_GATE_TY=1) — mypy remains the default"
|
|
110
|
+
elif command -v mypy >/dev/null 2>&1; then
|
|
111
|
+
# ty opted in but missing; mypy present -> fall back to the authoritative
|
|
112
|
+
# engine with a warning (never silently drop the type gate, #534 R2 arch).
|
|
113
|
+
echo " ⚠ ty requested (XP_GATE_TY=1) but not installed — falling back to mypy"
|
|
114
|
+
else
|
|
115
|
+
echo " ⚠ ty opted in via XP_GATE_TY=1 but neither ty nor mypy is installed — SKIPPING type check (no BLOCK)"
|
|
116
|
+
echo " install: pip install mypy, or pip install ty (alpha)"
|
|
117
|
+
return 0
|
|
118
|
+
fi
|
|
119
|
+
fi
|
|
120
|
+
# require_tool mypy only on the authoritative (mypy) engine path: when the
|
|
121
|
+
# user opted into ty, a missing mypy must NOT false-BLOCK (Delphi R1 Critical).
|
|
122
|
+
if [ "$_engine" = "mypy" ]; then
|
|
123
|
+
require_tool mypy "mypy" || return 1
|
|
124
|
+
fi
|
|
96
125
|
local _mypy_rc=0
|
|
97
126
|
local _mypy_t
|
|
98
127
|
for _mypy_t in "${MYPY_TARGETS[@]}"; do
|
|
99
|
-
|
|
128
|
+
if [ "$_engine" = "ty" ]; then
|
|
129
|
+
# ty's CLI is `ty check <path>`, not `ty <path>`. Bare `ty`/`ty check .`
|
|
130
|
+
# without targets would recurse the whole tree (== the anti `mypy .`
|
|
131
|
+
# guard #501/#513): targets are always explicit here. Capture ty's own
|
|
132
|
+
# exit code and diagnostics via a temp file (never discard them): a BLOCK
|
|
133
|
+
# with no reason is undebuggable, and a pipe `| head` would lose the code.
|
|
134
|
+
local _ty_rc=0
|
|
135
|
+
local _ty_tmp
|
|
136
|
+
_ty_tmp="$(mktemp)"
|
|
137
|
+
ty check "$_mypy_t" > "$_ty_tmp" 2>&1 || _ty_rc=$?
|
|
138
|
+
if [ "$_ty_rc" -eq 2 ]; then
|
|
139
|
+
echo " ⚠ ty exited $_ty_rc on target '$_mypy_t' (config/CLI error) — SKIPPING, not blocking"
|
|
140
|
+
head -30 "$_ty_tmp"
|
|
141
|
+
elif [ "$_ty_rc" -ne 0 ]; then
|
|
142
|
+
echo " ty report for '$_mypy_t' (exit $_ty_rc):"
|
|
143
|
+
head -30 "$_ty_tmp"
|
|
144
|
+
_mypy_rc=1
|
|
145
|
+
fi
|
|
146
|
+
rm -f "$_ty_tmp"
|
|
147
|
+
else
|
|
148
|
+
mypy "$_mypy_t" || _mypy_rc=1
|
|
149
|
+
fi
|
|
100
150
|
done
|
|
101
151
|
return $_mypy_rc
|
|
102
152
|
}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
|
|
3
|
+
# Incremental Python type-checking helpers for the pre-commit Python branch
|
|
4
|
+
# (#534). This is the FAST staged-only pass: pre-commit runs it on just the
|
|
5
|
+
# .py/.pyi files that changed, so a large repo doesn't pay full-inference CPU
|
|
6
|
+
# on every commit. It complements the FULL mypy pass (githooks/adapters/
|
|
7
|
+
# python.sh run_static_analysis, reachable via the adapter CLI / CI), which is
|
|
8
|
+
# where cross-module blind spots get caught.
|
|
9
|
+
#
|
|
10
|
+
# Sourced by githooks/pre-commit (the python) case. Requires CHANGED_FILES
|
|
11
|
+
# (space/newline separated, repo-root relative) to be in scope, matching the
|
|
12
|
+
# rest of the inline branch.
|
|
13
|
+
#
|
|
14
|
+
# Shellcheck: functions are the public API used by pre-commit; SC1091 sources
|
|
15
|
+
# are intentionally not resolved here (adapter-common not needed).
|
|
16
|
+
|
|
17
|
+
# Extract the staged .py/.pyi files from CHANGED_FILES, one per line.
|
|
18
|
+
# Excludes vendored/ignored trees (.venv, venv, node_modules) that a hook
|
|
19
|
+
# should never type-check. Handles whitespace in paths (echo + grep would
|
|
20
|
+
# split them).
|
|
21
|
+
python_staged_py_files() {
|
|
22
|
+
local f
|
|
23
|
+
while IFS= read -r f || [ -n "$f" ]; do
|
|
24
|
+
case "$f" in
|
|
25
|
+
.venv/*|venv/*|node_modules/*) continue ;;
|
|
26
|
+
*.py|*.pyi) printf '%s\n' "$f" ;;
|
|
27
|
+
esac
|
|
28
|
+
done <<< "$CHANGED_FILES"
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
# Run incremental mypy over the given staged files, returning mypy's REAL exit
|
|
32
|
+
# code (never a pipe stage's). Adds --follow-imports=silent so that a change to
|
|
33
|
+
# A.py that references an unchanged B.py does not surface B's own pre-existing
|
|
34
|
+
# diagnostics — only caller-level signature errors are reported. Callers must
|
|
35
|
+
# pass the file list as arguments (already filtered to .py/.pyi).
|
|
36
|
+
#
|
|
37
|
+
# Scope discipline (same .xp-gate-mypy-scope contract as python.sh): a staged
|
|
38
|
+
# file OUTSIDE the declared mypy scope is skipped with a note rather than type-
|
|
39
|
+
# checked, keeping the incremental pass consistent with the full pass. Files in
|
|
40
|
+
# scope default to "under src/ or scripts/" when no scope file exists.
|
|
41
|
+
python_typecheck_incremental() {
|
|
42
|
+
[ "$#" -gt 0 ] || return 0
|
|
43
|
+
|
|
44
|
+
# Resolve the declared scope (identical precedence to run_static_analysis):
|
|
45
|
+
# .xp-gate-mypy-scope (one target per line) wins; else src/ and scripts/
|
|
46
|
+
# are the implicit default. Any staged .py outside this surface is skipped.
|
|
47
|
+
local -a SCOPE_DIRS=()
|
|
48
|
+
local _declared=0 line target
|
|
49
|
+
if [ -f .xp-gate-mypy-scope ]; then
|
|
50
|
+
while IFS= read -r line || [ -n "$line" ]; do
|
|
51
|
+
line="${line%%#*}"
|
|
52
|
+
line="${line#"${line%%[![:space:]]*}"}"
|
|
53
|
+
line="${line%"${line##*[![:space:]]}"}"
|
|
54
|
+
[ -z "$line" ] && continue
|
|
55
|
+
_declared=1
|
|
56
|
+
# Normalize trailing slashes (`src/` -> `src`) so the `$target/*` prefix
|
|
57
|
+
# match below never sees a doubled slash (`src//a.py` would never match).
|
|
58
|
+
line="${line%/}"
|
|
59
|
+
SCOPE_DIRS+=("$line")
|
|
60
|
+
done < .xp-gate-mypy-scope
|
|
61
|
+
else
|
|
62
|
+
[ -d src ] && SCOPE_DIRS+=(src)
|
|
63
|
+
[ -d scripts ] && SCOPE_DIRS+=(scripts)
|
|
64
|
+
fi
|
|
65
|
+
|
|
66
|
+
# If a scope file is declared but yields nothing, every staged .py is out of
|
|
67
|
+
# scope -> SKIP (exit 0), mirroring the full pass.
|
|
68
|
+
local _in_scope=false
|
|
69
|
+
local -a TYPECHECK_FILES=()
|
|
70
|
+
local f
|
|
71
|
+
if [ "${#SCOPE_DIRS[@]}" -gt 0 ]; then
|
|
72
|
+
for f in "$@"; do
|
|
73
|
+
_in_scope=false
|
|
74
|
+
for target in "${SCOPE_DIRS[@]}"; do
|
|
75
|
+
case "$f" in
|
|
76
|
+
"$target"/*) _in_scope=true ;;
|
|
77
|
+
esac
|
|
78
|
+
[ "$_in_scope" = true ] && break
|
|
79
|
+
done
|
|
80
|
+
if [ "$_in_scope" = true ]; then
|
|
81
|
+
TYPECHECK_FILES+=("$f")
|
|
82
|
+
else
|
|
83
|
+
echo " ℹ️ mypy incremental: '$f' is outside declared scope — skipped"
|
|
84
|
+
fi
|
|
85
|
+
done
|
|
86
|
+
fi
|
|
87
|
+
|
|
88
|
+
[ "${#TYPECHECK_FILES[@]}" -gt 0 ] || return 0
|
|
89
|
+
|
|
90
|
+
# Capture mypy's exit code directly. A pipeline like
|
|
91
|
+
# mypy ... | head -20 | tail -10; rc=$?
|
|
92
|
+
# loses mypy's real status (the pipe stage's rc is used instead), which made
|
|
93
|
+
# the gate pass silently on real type errors. Redirect to a temp file, take
|
|
94
|
+
# mypy's own exit code, then print a truncated view.
|
|
95
|
+
local tmp
|
|
96
|
+
tmp="$(mktemp)"
|
|
97
|
+
echo "Running mypy type checking (incremental)..."
|
|
98
|
+
mypy --follow-imports=silent --ignore-missing-imports "${TYPECHECK_FILES[@]}" > "$tmp" 2>&1
|
|
99
|
+
local _mypy_rc=$?
|
|
100
|
+
head -20 "$tmp"
|
|
101
|
+
tail -10 "$tmp"
|
|
102
|
+
rm -f "$tmp"
|
|
103
|
+
return "$_mypy_rc"
|
|
104
|
+
}
|
package/hooks/lib/typecheck.sh
CHANGED
|
@@ -3,6 +3,16 @@
|
|
|
3
3
|
# Gate 1 TypeScript static analysis — the single place that decides HOW a project
|
|
4
4
|
# is type-checked (#436).
|
|
5
5
|
#
|
|
6
|
+
# NOT incremental (deliberately, #534): TypeScript type-checking cannot be
|
|
7
|
+
# reduced to "staged files only". `tsc` has no single-file check mode — it must
|
|
8
|
+
# resolve the whole module graph to report a file's real type errors, so
|
|
9
|
+
# type-checking only the changed files would silently miss "changing B.ts breaks
|
|
10
|
+
# an unchanged caller in A.ts". Pre-commit therefore runs the project's full
|
|
11
|
+
# typecheck (`npm run typecheck` / `npx tsc --noEmit`) every commit. This is the
|
|
12
|
+
# CORRECTNESS-preserving exception to xp-gate's incremental rule: lint (ESLint /
|
|
13
|
+
# Biome) IS incremental (staged files / --staged), but type-check stays full
|
|
14
|
+
# because incremental type-checking would be wrong, not just slower.
|
|
15
|
+
#
|
|
6
16
|
# Before this file, `githooks/pre-commit` and `githooks/adapters/typescript.sh` each
|
|
7
17
|
# hardcoded `npx tsc --noEmit`. Plain tsc cannot resolve `.vue` single-file
|
|
8
18
|
# components, so every `import X from './Foo.vue'` became a TS2307 and a Vue project
|
package/hooks/pre-commit
CHANGED
|
@@ -235,6 +235,11 @@ source "${AUDIT_SCRIPT_DIR}/lib/coverage-total.sh"
|
|
|
235
235
|
# unit-testable without executing this hook.
|
|
236
236
|
source "${AUDIT_SCRIPT_DIR}/lib/python-test-selection.sh"
|
|
237
237
|
|
|
238
|
+
# Issue #534: incremental Python type-check for the pre-commit python branch —
|
|
239
|
+
# staged-only mypy (fast) that complements python.sh's CI-aligned full pass.
|
|
240
|
+
# Kept in a library so the exit-code capture and scope handling are unit-testable.
|
|
241
|
+
source "${AUDIT_SCRIPT_DIR}/lib/python-incremental-typecheck.sh"
|
|
242
|
+
|
|
238
243
|
# Read max_duration_ms from .xp-gate-config.json (default 7200000 = 2 hours)
|
|
239
244
|
_MAX_DURATION_MS=$(node -e "try{const c=JSON.parse(require('fs').readFileSync('${PROJECT_ROOT_FOR_AUDIT}/.xp-gate-config.json','utf8'));console.log((c.audit&&c.audit.max_duration_ms)||7200000);}catch(e){console.log(7200000);}" 2>/dev/null || echo "7200000")
|
|
240
245
|
|
|
@@ -1308,24 +1313,38 @@ else
|
|
|
1308
1313
|
fi
|
|
1309
1314
|
fi
|
|
1310
1315
|
|
|
1311
|
-
# Optional: Type checking with mypy
|
|
1316
|
+
# Optional: Type checking with mypy — INCREMENTAL (fast, staged-only).
|
|
1317
|
+
#
|
|
1318
|
+
# Responsibility boundary (#534):
|
|
1319
|
+
# * This branch (python case) runs mypy ONLY over the staged .py/.pyi
|
|
1320
|
+
# files via python_typecheck_incremental — seconds, not a full inference
|
|
1321
|
+
# pass. Uses --follow-imports=silent so a change to A.py that references
|
|
1322
|
+
# an unchanged B.py does NOT surface B's pre-existing diagnostics; only
|
|
1323
|
+
# caller-level signature errors still block. Its exit code is captured
|
|
1324
|
+
# directly (temp file), which is deterministic and does not depend on
|
|
1325
|
+
# set -o pipefail (the old `... | head | tail; rc=$?` worked only under
|
|
1326
|
+
# pipefail and could drop mypy's status when the pattern is copied into
|
|
1327
|
+
# a non-pipefail context).
|
|
1328
|
+
# * The FULL mypy pass lives OUTSIDE this hook: run_static_analysis()
|
|
1329
|
+
# (githooks/adapters/python.sh) is reachable via the adapter CLI and the
|
|
1330
|
+
# general adapter route, and CI installs mypy (quality-gates.yml) for
|
|
1331
|
+
# typed projects. NOTE: the pre-commit python case is fully inline and
|
|
1332
|
+
# never routes to run_static_analysis — so the incremental blind spot
|
|
1333
|
+
# (cross-module signature break on an unchanged file) is the accepted
|
|
1334
|
+
# trade-off here, backstopped by full mypy wherever that surface runs.
|
|
1335
|
+
# Both paths coexist: this one is the fast pre-commit pass.
|
|
1312
1336
|
if command -v mypy &> /dev/null; then
|
|
1337
|
+
# Collect staged .py/.pyi via the helper (whitespace-safe, bash-3
|
|
1338
|
+
# compatible — macOS default bash is 3.2, so avoid mapfile).
|
|
1313
1339
|
MYPY_ARGS=()
|
|
1314
1340
|
while IFS= read -r staged_file; do
|
|
1315
|
-
|
|
1316
|
-
|
|
1317
|
-
|
|
1318
|
-
|
|
1319
|
-
if [ "${#MYPY_ARGS[@]}" -eq 0 ]; then
|
|
1320
|
-
MYPY_EXIT=0
|
|
1321
|
-
else
|
|
1322
|
-
echo "Running mypy type checking (optional)..."
|
|
1323
|
-
mypy --ignore-missing-imports "${MYPY_ARGS[@]}" 2>&1 | head -20 | tail -10
|
|
1324
|
-
MYPY_EXIT=$?
|
|
1325
|
-
fi
|
|
1341
|
+
MYPY_ARGS+=("$staged_file")
|
|
1342
|
+
done < <(python_staged_py_files)
|
|
1343
|
+
python_typecheck_incremental "${MYPY_ARGS[@]}"
|
|
1344
|
+
MYPY_EXIT=$?
|
|
1326
1345
|
if [ "$MYPY_EXIT" -ne 0 ]; then
|
|
1327
1346
|
echo ""
|
|
1328
|
-
echo "❌ BLOCKED -
|
|
1347
|
+
echo "❌ BLOCKED - MYPY TYPE ERRORS detected"
|
|
1329
1348
|
echo "Fix the type errors above before committing."
|
|
1330
1349
|
exit 1
|
|
1331
1350
|
fi
|
|
@@ -1342,16 +1361,32 @@ else
|
|
|
1342
1361
|
echo "ℹ️ golangci-lint not available — skipping Go linting"
|
|
1343
1362
|
echo "⏭️ SKIPPED - Code quality (golangci-lint not available)"
|
|
1344
1363
|
else
|
|
1345
|
-
|
|
1346
|
-
golangci-lint run
|
|
1347
|
-
|
|
1348
|
-
|
|
1349
|
-
|
|
1350
|
-
|
|
1351
|
-
echo "
|
|
1352
|
-
|
|
1364
|
+
# #534: run golangci-lint over ONLY the staged .go files (incremental),
|
|
1365
|
+
# not the whole repo. `golangci-lint run` with no args scans every package
|
|
1366
|
+
# and dominates pre-commit time on large Go repos. golangci-lint accepts
|
|
1367
|
+
# explicit file targets. No staged .go files -> SKIP (nothing to lint).
|
|
1368
|
+
GO_FILES=$(echo "$CHANGED_FILES" | grep '\.go$' || true)
|
|
1369
|
+
if [ -z "$GO_FILES" ]; then
|
|
1370
|
+
echo "✅ PASSED - No staged Go files to lint."
|
|
1371
|
+
else
|
|
1372
|
+
echo "Running golangci-lint (incremental, staged .go)..."
|
|
1373
|
+
# #534: capture golangci-lint's REAL exit code via a temp file, not a
|
|
1374
|
+
# pipe stage's (`... | head -30; rc=$?` would take head's status; it only
|
|
1375
|
+
# works because of set -o pipefail, which is fragile and inconsistent with
|
|
1376
|
+
# the python incremental helper's temp-file pattern).
|
|
1377
|
+
GO_TMP=$(mktemp)
|
|
1378
|
+
golangci-lint run $GO_FILES > "$GO_TMP" 2>&1
|
|
1379
|
+
GOLANGCI_EXIT=$?
|
|
1380
|
+
head -30 "$GO_TMP"
|
|
1381
|
+
rm -f "$GO_TMP"
|
|
1382
|
+
if [ "$GOLANGCI_EXIT" -ne 0 ]; then
|
|
1383
|
+
echo ""
|
|
1384
|
+
echo "❌ BLOCKED - GOLANGCI-LINT ERRORS detected"
|
|
1385
|
+
echo "Fix the lint errors above before committing."
|
|
1386
|
+
exit 1
|
|
1387
|
+
fi
|
|
1388
|
+
echo "✅ PASSED - golangci-lint."
|
|
1353
1389
|
fi
|
|
1354
|
-
echo "✅ PASSED - golangci-lint."
|
|
1355
1390
|
fi
|
|
1356
1391
|
;;
|
|
1357
1392
|
|
package/mock-policy/AGENTS.md
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# SRC/MOCK-POLICY KNOWLEDGE BASE
|
|
2
2
|
|
|
3
|
-
**Generated:** 2026-10-
|
|
4
|
-
**Commit:**
|
|
3
|
+
**Generated:** 2026-10-16
|
|
4
|
+
**Commit:** 98096abe
|
|
5
5
|
**Branch:** main
|
|
6
|
-
**Version:** 0.
|
|
6
|
+
**Version:** 0.26.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.
|
package/mutation/AGENTS.md
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# SRC/MUTATION KNOWLEDGE BASE
|
|
2
2
|
|
|
3
|
-
**Generated:** 2026-10-
|
|
4
|
-
**Commit:**
|
|
3
|
+
**Generated:** 2026-10-16
|
|
4
|
+
**Commit:** 98096abe
|
|
5
5
|
**Branch:** main
|
|
6
|
-
**Version:** 0.
|
|
6
|
+
**Version:** 0.26.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": "xp-gate",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.26.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
|
-
**Generated:** 2026-10-
|
|
4
|
-
**Commit:**
|
|
3
|
+
**Generated:** 2026-10-16
|
|
4
|
+
**Commit:** 98096abe
|
|
5
5
|
**Branch:** main
|
|
6
|
-
**Version:** 0.
|
|
6
|
+
**Version:** 0.26.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
|
-
**Generated:** 2026-10-
|
|
4
|
-
**Commit:**
|
|
3
|
+
**Generated:** 2026-10-16
|
|
4
|
+
**Commit:** 98096abe
|
|
5
5
|
**Branch:** main
|
|
6
|
-
**Version:** 0.
|
|
6
|
+
**Version:** 0.26.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
|
-
**Generated:** 2026-10-
|
|
4
|
-
**Commit:**
|
|
3
|
+
**Generated:** 2026-10-16
|
|
4
|
+
**Commit:** 98096abe
|
|
5
5
|
**Branch:** main
|
|
6
|
-
**Version:** 0.
|
|
6
|
+
**Version:** 0.26.0.0
|
|
7
7
|
|
|
8
8
|
## OVERVIEW
|
|
9
9
|
Test-Specification Alignment Engine — two-stage validation ensuring tests accurately reflect requirements and design specs.
|
package/plugins/dsh/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@boyingliu01/dsh-plugin-xp-gate",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.26.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
|
-
**Generated:** 2026-10-
|
|
4
|
-
**Commit:**
|
|
3
|
+
**Generated:** 2026-10-16
|
|
4
|
+
**Commit:** 98096abe
|
|
5
5
|
**Branch:** main
|
|
6
|
-
**Version:** 0.
|
|
6
|
+
**Version:** 0.26.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
|
-
**Generated:** 2026-10-
|
|
4
|
-
**Commit:**
|
|
3
|
+
**Generated:** 2026-10-16
|
|
4
|
+
**Commit:** 98096abe
|
|
5
5
|
**Branch:** main
|
|
6
|
-
**Version:** 0.
|
|
6
|
+
**Version:** 0.26.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
|
-
**Generated:** 2026-10-
|
|
4
|
-
**Commit:**
|
|
3
|
+
**Generated:** 2026-10-16
|
|
4
|
+
**Commit:** 98096abe
|
|
5
5
|
**Branch:** main
|
|
6
|
-
**Version:** 0.
|
|
6
|
+
**Version:** 0.26.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
|
# SKILLS/DELPHI-REVIEW KNOWLEDGE BASE
|
|
2
2
|
|
|
3
|
-
**Generated:** 2026-10-
|
|
4
|
-
**Commit:**
|
|
3
|
+
**Generated:** 2026-10-16
|
|
4
|
+
**Commit:** 98096abe
|
|
5
5
|
**Branch:** main
|
|
6
|
-
**Version:** 0.
|
|
6
|
+
**Version:** 0.26.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
|
-
**Generated:** 2026-10-
|
|
4
|
-
**Commit:**
|
|
3
|
+
**Generated:** 2026-10-16
|
|
4
|
+
**Commit:** 98096abe
|
|
5
5
|
**Branch:** main
|
|
6
|
-
**Version:** 0.
|
|
6
|
+
**Version:** 0.26.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
|
-
**Generated:** 2026-10-
|
|
4
|
-
**Commit:**
|
|
3
|
+
**Generated:** 2026-10-16
|
|
4
|
+
**Commit:** 98096abe
|
|
5
5
|
**Branch:** main
|
|
6
|
-
**Version:** 0.
|
|
6
|
+
**Version:** 0.26.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.
|
|
3
|
+
"version": "0.26.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
|
-
**Generated:** 2026-10-
|
|
4
|
-
**Commit:**
|
|
3
|
+
**Generated:** 2026-10-16
|
|
4
|
+
**Commit:** 98096abe
|
|
5
5
|
**Branch:** main
|
|
6
|
-
**Version:** 0.
|
|
6
|
+
**Version:** 0.26.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
|
-
**Generated:** 2026-10-
|
|
4
|
-
**Commit:**
|
|
3
|
+
**Generated:** 2026-10-16
|
|
4
|
+
**Commit:** 98096abe
|
|
5
5
|
**Branch:** main
|
|
6
|
-
**Version:** 0.
|
|
6
|
+
**Version:** 0.26.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
|
-
**Generated:** 2026-10-
|
|
4
|
-
**Commit:**
|
|
3
|
+
**Generated:** 2026-10-16
|
|
4
|
+
**Commit:** 98096abe
|
|
5
5
|
**Branch:** main
|
|
6
|
-
**Version:** 0.
|
|
6
|
+
**Version:** 0.26.0.0
|
|
7
7
|
|
|
8
8
|
## OVERVIEW
|
|
9
9
|
Test-Specification Alignment Engine — two-stage validation ensuring tests accurately reflect requirements and design specs.
|
package/principles/AGENTS.md
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# PRINCIPLES CHECKER MODULE
|
|
2
2
|
|
|
3
|
-
**Generated:** 2026-10-
|
|
4
|
-
**Commit:**
|
|
3
|
+
**Generated:** 2026-10-16
|
|
4
|
+
**Commit:** 98096abe
|
|
5
5
|
**Branch:** main
|
|
6
|
-
**Version:** 0.
|
|
6
|
+
**Version:** 0.26.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
|
-
**Generated:** 2026-10-
|
|
4
|
-
**Commit:**
|
|
3
|
+
**Generated:** 2026-10-16
|
|
4
|
+
**Commit:** 98096abe
|
|
5
5
|
**Branch:** main
|
|
6
|
-
**Version:** 0.
|
|
6
|
+
**Version:** 0.26.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
|
-
**Generated:** 2026-10-
|
|
4
|
-
**Commit:**
|
|
3
|
+
**Generated:** 2026-10-16
|
|
4
|
+
**Commit:** 98096abe
|
|
5
5
|
**Branch:** main
|
|
6
|
-
**Version:** 0.
|
|
6
|
+
**Version:** 0.26.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
|
-
**Generated:** 2026-10-
|
|
4
|
-
**Commit:**
|
|
3
|
+
**Generated:** 2026-10-16
|
|
4
|
+
**Commit:** 98096abe
|
|
5
5
|
**Branch:** main
|
|
6
|
-
**Version:** 0.
|
|
6
|
+
**Version:** 0.26.0.0
|
|
7
7
|
|
|
8
8
|
## OVERVIEW
|
|
9
9
|
Test-Specification Alignment Engine — two-stage validation ensuring tests accurately reflect requirements and design specs.
|