Deploy to Staging / Build Images (push) Successful in 5m32s
Deploy to Staging / Deploy to Staging (push) Successful in 44s
Deploy to Staging / Verify Staging (push) Successful in 5s
Deploy to Staging / Notify Staging Ready (push) Successful in 4s
Deploy to Staging / Notify Staging Failure (push) Has been skipped
Removes the old planner/decision-critic/role-agents/domain-agents system (step-injector scripts, stale scopes, sprint-era workflow) and replaces it with 16 ground-truth-verified skills under .claude/skills/: change control, debugging playbook, failure archaeology, architecture contract, domain reference, OCR/Gemini pipeline, config and secrets, build and env, run and operate, diagnostics (with tested scripts), validation and QA, docs and writing, launch readiness, deploy-safety campaign, proof and analysis toolkit, and research frontier. RULE 0/1/2, the temporal-contamination rule, and the decision stress-test protocol are carried forward into the new skills; the retired content remains in git history. Co-Authored-By: Claude Fable 5 <[email protected]>
66 lines
2.3 KiB
Bash
Executable File
66 lines
2.3 KiB
Bash
Executable File
#!/bin/bash
|
|
# local-gate.sh - Run every quality check that works on a dev machine and
|
|
# print a PASS/FAIL table.
|
|
#
|
|
# Why: CI runs ZERO tests and ZERO lint (the only PR gate is that images
|
|
# build and staging boots healthy). This script IS the pre-push gate.
|
|
#
|
|
# Scope (deliberate):
|
|
# - backend lint, type-check, UNIT tests only (--forceExit; open pg/redis
|
|
# handles otherwise hang jest). Integration tests are EXCLUDED: they
|
|
# need a live database and some DROP TABLE CASCADE (owner non-negotiable:
|
|
# never without a fresh backup). audit-log __tests__ also need a DB and
|
|
# are excluded via path pattern.
|
|
# - frontend lint, type-check. Frontend jest is broken outside the
|
|
# container (2026-07-07), so no frontend tests here.
|
|
#
|
|
# Usage: ./local-gate.sh (needs node_modules in backend/ and frontend/:
|
|
# run "npm install" in each first)
|
|
# Exit: 0 = all pass, 1 = at least one failure
|
|
set -u
|
|
|
|
ROOT="$(git rev-parse --show-toplevel 2>/dev/null)"
|
|
[ -z "$ROOT" ] && { echo "ERROR: not inside a git repo" >&2; exit 2; }
|
|
LOGDIR="${TMPDIR:-/tmp}/mvp-local-gate.$$"
|
|
mkdir -p "$LOGDIR"
|
|
|
|
RESULTS=""
|
|
OVERALL=0
|
|
|
|
run_step() { # run_step <label> <dir> <command...>
|
|
label="$1"; dir="$2"; shift 2
|
|
log="$LOGDIR/$(echo "$label" | tr ' /' '__').log"
|
|
printf '%-28s ' "$label..."
|
|
if (cd "$ROOT/$dir" && "$@") >"$log" 2>&1; then
|
|
echo "PASS"
|
|
RESULTS="$RESULTS$label|PASS
|
|
"
|
|
else
|
|
echo "FAIL (log: $log)"
|
|
tail -15 "$log" | sed 's/^/ /'
|
|
RESULTS="$RESULTS$label|FAIL
|
|
"
|
|
OVERALL=1
|
|
fi
|
|
}
|
|
|
|
run_step "backend lint" backend npm run --silent lint
|
|
run_step "backend type-check" backend npm run --silent type-check
|
|
run_step "backend unit tests" backend npm test --silent -- \
|
|
--testPathPattern='(tests/unit|src/core)' \
|
|
--testPathIgnorePatterns='integration' --forceExit
|
|
run_step "frontend lint" frontend npm run --silent lint
|
|
run_step "frontend type-check" frontend npm run --silent type-check
|
|
|
|
echo
|
|
echo "==================== LOCAL GATE ===================="
|
|
printf '%-28s %s\n' "CHECK" "RESULT"
|
|
echo "$RESULTS" | awk -F'|' 'NF { printf "%-28s %s\n", $1, $2 }'
|
|
echo "====================================================="
|
|
if [ "$OVERALL" -eq 0 ]; then
|
|
echo "PASS: safe to push. (Integration tests NOT run - container-only.)"
|
|
else
|
|
echo "FAIL: fix before pushing. CI will NOT catch these."
|
|
fi
|
|
exit "$OVERALL"
|