shipwright-cli 2.2.1 → 2.2.2
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/README.md +12 -13
- package/docs/AGI-PLATFORM-PLAN.md +5 -5
- package/docs/AGI-WHATS-NEXT.md +11 -8
- package/docs/README.md +2 -0
- package/package.json +1 -1
- package/scripts/check-version-consistency.sh +72 -0
- package/scripts/lib/daemon-adaptive.sh +610 -0
- package/scripts/lib/daemon-dispatch.sh +489 -0
- package/scripts/lib/daemon-failure.sh +387 -0
- package/scripts/lib/daemon-patrol.sh +1113 -0
- package/scripts/lib/daemon-poll.sh +1202 -0
- package/scripts/lib/daemon-state.sh +550 -0
- package/scripts/lib/daemon-triage.sh +490 -0
- package/scripts/lib/helpers.sh +51 -0
- package/scripts/lib/pipeline-intelligence.sh +0 -6
- package/scripts/lib/pipeline-quality-checks.sh +2 -0
- package/scripts/lib/pipeline-stages.sh +20 -0
- package/scripts/sw +26 -4
- package/scripts/sw-activity.sh +1 -1
- package/scripts/sw-adaptive.sh +2 -2
- package/scripts/sw-adversarial.sh +1 -1
- package/scripts/sw-architecture-enforcer.sh +1 -1
- package/scripts/sw-auth.sh +1 -1
- package/scripts/sw-autonomous.sh +1 -1
- package/scripts/sw-changelog.sh +1 -1
- package/scripts/sw-checkpoint.sh +1 -1
- package/scripts/sw-ci.sh +1 -1
- package/scripts/sw-cleanup.sh +1 -1
- package/scripts/sw-code-review.sh +1 -1
- package/scripts/sw-connect.sh +1 -1
- package/scripts/sw-context.sh +1 -1
- package/scripts/sw-cost.sh +1 -1
- package/scripts/sw-daemon.sh +52 -4816
- package/scripts/sw-dashboard.sh +1 -1
- package/scripts/sw-db.sh +1 -1
- package/scripts/sw-decompose.sh +1 -1
- package/scripts/sw-deps.sh +1 -1
- package/scripts/sw-developer-simulation.sh +1 -1
- package/scripts/sw-discovery.sh +1 -1
- package/scripts/sw-doc-fleet.sh +1 -1
- package/scripts/sw-docs-agent.sh +1 -1
- package/scripts/sw-docs.sh +1 -1
- package/scripts/sw-doctor.sh +42 -1
- package/scripts/sw-dora.sh +1 -1
- package/scripts/sw-durable.sh +1 -1
- package/scripts/sw-e2e-orchestrator.sh +1 -1
- package/scripts/sw-eventbus.sh +1 -1
- package/scripts/sw-feedback.sh +1 -1
- package/scripts/sw-fix.sh +1 -1
- package/scripts/sw-fleet-discover.sh +1 -1
- package/scripts/sw-fleet-viz.sh +3 -3
- package/scripts/sw-fleet.sh +1 -1
- package/scripts/sw-github-app.sh +1 -1
- package/scripts/sw-github-checks.sh +1 -1
- package/scripts/sw-github-deploy.sh +1 -1
- package/scripts/sw-github-graphql.sh +1 -1
- package/scripts/sw-guild.sh +1 -1
- package/scripts/sw-heartbeat.sh +1 -1
- package/scripts/sw-hygiene.sh +1 -1
- package/scripts/sw-incident.sh +1 -1
- package/scripts/sw-init.sh +1 -1
- package/scripts/sw-instrument.sh +1 -1
- package/scripts/sw-intelligence.sh +1 -1
- package/scripts/sw-jira.sh +1 -1
- package/scripts/sw-launchd.sh +1 -1
- package/scripts/sw-linear.sh +1 -1
- package/scripts/sw-logs.sh +1 -1
- package/scripts/sw-loop.sh +1 -1
- package/scripts/sw-memory.sh +1 -1
- package/scripts/sw-mission-control.sh +1 -1
- package/scripts/sw-model-router.sh +1 -1
- package/scripts/sw-otel.sh +4 -4
- package/scripts/sw-oversight.sh +1 -1
- package/scripts/sw-pipeline-composer.sh +1 -1
- package/scripts/sw-pipeline-vitals.sh +1 -1
- package/scripts/sw-pipeline.sh +16 -56
- package/scripts/sw-pipeline.sh.mock +7 -0
- package/scripts/sw-pm.sh +1 -1
- package/scripts/sw-pr-lifecycle.sh +1 -1
- package/scripts/sw-predictive.sh +1 -1
- package/scripts/sw-prep.sh +1 -1
- package/scripts/sw-ps.sh +1 -1
- package/scripts/sw-public-dashboard.sh +1 -1
- package/scripts/sw-quality.sh +1 -1
- package/scripts/sw-reaper.sh +1 -1
- package/scripts/sw-recruit.sh +9 -1
- package/scripts/sw-regression.sh +1 -1
- package/scripts/sw-release-manager.sh +1 -1
- package/scripts/sw-release.sh +1 -1
- package/scripts/sw-remote.sh +1 -1
- package/scripts/sw-replay.sh +1 -1
- package/scripts/sw-retro.sh +1 -1
- package/scripts/sw-scale.sh +8 -5
- package/scripts/sw-security-audit.sh +1 -1
- package/scripts/sw-self-optimize.sh +158 -7
- package/scripts/sw-session.sh +1 -1
- package/scripts/sw-setup.sh +1 -1
- package/scripts/sw-standup.sh +3 -3
- package/scripts/sw-status.sh +1 -1
- package/scripts/sw-strategic.sh +1 -1
- package/scripts/sw-stream.sh +8 -2
- package/scripts/sw-swarm.sh +7 -10
- package/scripts/sw-team-stages.sh +1 -1
- package/scripts/sw-templates.sh +1 -1
- package/scripts/sw-testgen.sh +1 -1
- package/scripts/sw-tmux-pipeline.sh +1 -1
- package/scripts/sw-tmux.sh +1 -1
- package/scripts/sw-trace.sh +1 -1
- package/scripts/sw-tracker.sh +24 -6
- package/scripts/sw-triage.sh +1 -1
- package/scripts/sw-upgrade.sh +1 -1
- package/scripts/sw-ux.sh +1 -1
- package/scripts/sw-webhook.sh +1 -1
- package/scripts/sw-widgets.sh +1 -1
- package/scripts/sw-worktree.sh +1 -1
package/scripts/sw-dashboard.sh
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
set -euo pipefail
|
|
7
7
|
trap 'echo "ERROR: $BASH_SOURCE:$LINENO exited with status $?" >&2' ERR
|
|
8
8
|
|
|
9
|
-
VERSION="2.2.
|
|
9
|
+
VERSION="2.2.2"
|
|
10
10
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
11
11
|
|
|
12
12
|
# ─── Cross-platform compatibility ──────────────────────────────────────────
|
package/scripts/sw-db.sh
CHANGED
package/scripts/sw-decompose.sh
CHANGED
package/scripts/sw-deps.sh
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
set -euo pipefail
|
|
7
7
|
trap 'echo "ERROR: $BASH_SOURCE:$LINENO exited with status $?" >&2' ERR
|
|
8
8
|
|
|
9
|
-
VERSION="2.2.
|
|
9
|
+
VERSION="2.2.2"
|
|
10
10
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
11
11
|
|
|
12
12
|
# ─── Cross-platform compatibility ──────────────────────────────────────────
|
package/scripts/sw-discovery.sh
CHANGED
package/scripts/sw-doc-fleet.sh
CHANGED
package/scripts/sw-docs-agent.sh
CHANGED
package/scripts/sw-docs.sh
CHANGED
package/scripts/sw-doctor.sh
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
# ║ ║
|
|
5
5
|
# ║ Checks prerequisites, installed files, PATH, and common issues. ║
|
|
6
6
|
# ╚═══════════════════════════════════════════════════════════════════════════╝
|
|
7
|
-
VERSION="2.2.
|
|
7
|
+
VERSION="2.2.2"
|
|
8
8
|
set -euo pipefail
|
|
9
9
|
trap 'echo "ERROR: $BASH_SOURCE:$LINENO exited with status $?" >&2' ERR
|
|
10
10
|
|
|
@@ -45,6 +45,15 @@ RESET="${RESET:-\033[0m}"
|
|
|
45
45
|
PASS=0
|
|
46
46
|
WARN=0
|
|
47
47
|
FAIL=0
|
|
48
|
+
SKIP_PLATFORM_SCAN=false
|
|
49
|
+
|
|
50
|
+
# Parse doctor flags
|
|
51
|
+
for _arg in "$@"; do
|
|
52
|
+
case "$_arg" in
|
|
53
|
+
--skip-platform-scan) SKIP_PLATFORM_SCAN=true ;;
|
|
54
|
+
--version|-V) echo "sw-doctor $VERSION"; exit 0 ;;
|
|
55
|
+
esac
|
|
56
|
+
done
|
|
48
57
|
|
|
49
58
|
check_pass() { success "$*"; PASS=$((PASS + 1)); }
|
|
50
59
|
check_warn() { warn "$*"; WARN=$((WARN + 1)); }
|
|
@@ -352,6 +361,29 @@ else
|
|
|
352
361
|
echo -e " ${DIM}Re-run install.sh to install the CLI${RESET}"
|
|
353
362
|
fi
|
|
354
363
|
|
|
364
|
+
# ═════════════════════════════════════════════════════════════════════════════
|
|
365
|
+
# 4b. Version consistency (Shipwright repo only)
|
|
366
|
+
# ═════════════════════════════════════════════════════════════════════════════
|
|
367
|
+
REPO_ROOT_DOC="$(cd "$SCRIPT_DIR/.." 2>/dev/null && pwd)"
|
|
368
|
+
if [[ -n "$REPO_ROOT_DOC" && -f "$REPO_ROOT_DOC/package.json" ]] && \
|
|
369
|
+
command -v jq &>/dev/null && \
|
|
370
|
+
[[ "$(jq -r '.name // ""' "$REPO_ROOT_DOC/package.json" 2>/dev/null)" == "shipwright-cli" ]]; then
|
|
371
|
+
echo ""
|
|
372
|
+
echo -e "${PURPLE}${BOLD} VERSION CONSISTENCY${RESET} ${DIM}(Shipwright repo)${RESET}"
|
|
373
|
+
echo -e "${DIM} ──────────────────────────────────────────${RESET}"
|
|
374
|
+
if [[ -x "$SCRIPT_DIR/check-version-consistency.sh" ]]; then
|
|
375
|
+
if bash "$SCRIPT_DIR/check-version-consistency.sh" 2>/dev/null; then
|
|
376
|
+
check_pass "Version consistent (package.json, README, scripts)"
|
|
377
|
+
else
|
|
378
|
+
check_warn "Version drift — package.json, README, or scripts out of sync"
|
|
379
|
+
echo -e " ${DIM}Run: shipwright version check${RESET}"
|
|
380
|
+
echo -e " ${DIM}Fix: shipwright version bump <x.y.z>${RESET}"
|
|
381
|
+
fi
|
|
382
|
+
else
|
|
383
|
+
check_warn "check-version-consistency.sh not found"
|
|
384
|
+
fi
|
|
385
|
+
fi
|
|
386
|
+
|
|
355
387
|
# ═════════════════════════════════════════════════════════════════════════════
|
|
356
388
|
# 5. Pane Display
|
|
357
389
|
# ═════════════════════════════════════════════════════════════════════════════
|
|
@@ -1011,6 +1043,13 @@ echo -e "${DIM} ─────────────────────
|
|
|
1011
1043
|
SCRIPT_DIR_DOC="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
1012
1044
|
REPO_DIR_DOC="$(cd "$SCRIPT_DIR_DOC/.." && pwd)"
|
|
1013
1045
|
PH_FILE="$REPO_DIR_DOC/.claude/platform-hygiene.json"
|
|
1046
|
+
# Auto-run platform-refactor scan if report is missing (unless --skip-platform-scan)
|
|
1047
|
+
if [[ ! -f "$PH_FILE" ]] && [[ "$SKIP_PLATFORM_SCAN" != "true" ]]; then
|
|
1048
|
+
if [[ -f "$SCRIPT_DIR_DOC/sw-hygiene.sh" ]]; then
|
|
1049
|
+
info " Platform hygiene report not found — running scan..."
|
|
1050
|
+
bash "$SCRIPT_DIR_DOC/sw-hygiene.sh" platform-refactor >/dev/null 2>&1 || true
|
|
1051
|
+
fi
|
|
1052
|
+
fi
|
|
1014
1053
|
if [[ -f "$PH_FILE" ]] && command -v jq &>/dev/null; then
|
|
1015
1054
|
hc=$(jq -r '.counts.hardcoded // 0' "$PH_FILE" 2>/dev/null || echo "0")
|
|
1016
1055
|
fb=$(jq -r '.counts.fallback // 0' "$PH_FILE" 2>/dev/null || echo "0")
|
|
@@ -1019,6 +1058,8 @@ if [[ -f "$PH_FILE" ]] && command -v jq &>/dev/null; then
|
|
|
1019
1058
|
hack=$(jq -r '.counts.hack // 0' "$PH_FILE" 2>/dev/null || echo "0")
|
|
1020
1059
|
check_pass "Platform hygiene: hardcoded=$hc fallback=$fb TODO=$todo FIXME=$fixme HACK=$hack"
|
|
1021
1060
|
info " Refresh: shipwright hygiene platform-refactor"
|
|
1061
|
+
elif [[ "$SKIP_PLATFORM_SCAN" == "true" ]]; then
|
|
1062
|
+
info " Platform hygiene skipped (--skip-platform-scan)"
|
|
1022
1063
|
else
|
|
1023
1064
|
check_warn "Platform hygiene not run — run: shipwright hygiene platform-refactor"
|
|
1024
1065
|
fi
|
package/scripts/sw-dora.sh
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
set -euo pipefail
|
|
9
9
|
trap 'echo "ERROR: $BASH_SOURCE:$LINENO exited with status $?" >&2' ERR
|
|
10
10
|
|
|
11
|
-
VERSION="2.2.
|
|
11
|
+
VERSION="2.2.2"
|
|
12
12
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
13
13
|
|
|
14
14
|
# ─── Cross-platform compatibility ──────────────────────────────────────────
|
package/scripts/sw-durable.sh
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
set -euo pipefail
|
|
8
8
|
trap 'echo "ERROR: $BASH_SOURCE:$LINENO exited with status $?" >&2' ERR
|
|
9
9
|
|
|
10
|
-
VERSION="2.2.
|
|
10
|
+
VERSION="2.2.2"
|
|
11
11
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
12
12
|
|
|
13
13
|
# ─── Cross-platform compatibility ──────────────────────────────────────────
|
package/scripts/sw-eventbus.sh
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
set -euo pipefail
|
|
8
8
|
trap 'echo "ERROR: $BASH_SOURCE:$LINENO exited with status $?" >&2' ERR
|
|
9
9
|
|
|
10
|
-
VERSION="2.2.
|
|
10
|
+
VERSION="2.2.2"
|
|
11
11
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
12
12
|
|
|
13
13
|
# ─── Cross-platform compatibility ──────────────────────────────────────────
|
package/scripts/sw-feedback.sh
CHANGED
package/scripts/sw-fix.sh
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
set -euo pipefail
|
|
7
7
|
trap 'echo "ERROR: $BASH_SOURCE:$LINENO exited with status $?" >&2' ERR
|
|
8
8
|
|
|
9
|
-
VERSION="2.2.
|
|
9
|
+
VERSION="2.2.2"
|
|
10
10
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
11
11
|
|
|
12
12
|
# ─── Cross-platform compatibility ──────────────────────────────────────────
|
package/scripts/sw-fleet-viz.sh
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
set -euo pipefail
|
|
7
7
|
trap 'echo "ERROR: $BASH_SOURCE:$LINENO exited with status $?" >&2' ERR
|
|
8
8
|
|
|
9
|
-
VERSION="2.2.
|
|
9
|
+
VERSION="2.2.2"
|
|
10
10
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
11
11
|
REPO_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
12
12
|
|
|
@@ -213,8 +213,8 @@ show_insights() {
|
|
|
213
213
|
|
|
214
214
|
# Fleet-wide success rate (last 30 days)
|
|
215
215
|
local total_pipelines successful_pipelines
|
|
216
|
-
total_pipelines=$(grep '"type":"
|
|
217
|
-
successful_pipelines=$(grep '"type":"
|
|
216
|
+
total_pipelines=$(grep '"type":"pipeline.completed"' "$EVENTS_FILE" 2>/dev/null | tail -5000 | wc -l || echo "0")
|
|
217
|
+
successful_pipelines=$(grep '"type":"pipeline.completed".*"status":"success"' "$EVENTS_FILE" 2>/dev/null | tail -5000 | wc -l || echo "0")
|
|
218
218
|
|
|
219
219
|
local success_rate=0
|
|
220
220
|
if [[ "$total_pipelines" -gt 0 ]]; then
|
package/scripts/sw-fleet.sh
CHANGED
package/scripts/sw-github-app.sh
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
set -euo pipefail
|
|
7
7
|
trap 'echo "ERROR: $BASH_SOURCE:$LINENO exited with status $?" >&2' ERR
|
|
8
8
|
|
|
9
|
-
VERSION="2.2.
|
|
9
|
+
VERSION="2.2.2"
|
|
10
10
|
SCRIPT_DIR="${SCRIPT_DIR:-$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)}"
|
|
11
11
|
REPO_DIR="${REPO_DIR:-$(cd "$SCRIPT_DIR/.." && pwd)}"
|
|
12
12
|
|
package/scripts/sw-guild.sh
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
set -euo pipefail
|
|
7
7
|
trap 'echo "ERROR: $BASH_SOURCE:$LINENO exited with status $?" >&2' ERR
|
|
8
8
|
|
|
9
|
-
VERSION="2.2.
|
|
9
|
+
VERSION="2.2.2"
|
|
10
10
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
11
11
|
|
|
12
12
|
# ─── Cross-platform compatibility ──────────────────────────────────────────
|
package/scripts/sw-heartbeat.sh
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
set -euo pipefail
|
|
7
7
|
trap 'echo "ERROR: $BASH_SOURCE:$LINENO exited with status $?" >&2' ERR
|
|
8
8
|
|
|
9
|
-
VERSION="2.2.
|
|
9
|
+
VERSION="2.2.2"
|
|
10
10
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
11
11
|
|
|
12
12
|
# ─── Cross-platform compatibility ──────────────────────────────────────────
|
package/scripts/sw-hygiene.sh
CHANGED
package/scripts/sw-incident.sh
CHANGED
package/scripts/sw-init.sh
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
# ║ ║
|
|
9
9
|
# ║ --deploy Detect platform and generate deployed.json template ║
|
|
10
10
|
# ╚═══════════════════════════════════════════════════════════════════════════╝
|
|
11
|
-
VERSION="2.2.
|
|
11
|
+
VERSION="2.2.2"
|
|
12
12
|
set -euo pipefail
|
|
13
13
|
trap 'echo "ERROR: $BASH_SOURCE:$LINENO exited with status $?" >&2' ERR
|
|
14
14
|
|
package/scripts/sw-instrument.sh
CHANGED
package/scripts/sw-jira.sh
CHANGED
package/scripts/sw-launchd.sh
CHANGED
package/scripts/sw-linear.sh
CHANGED
package/scripts/sw-logs.sh
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
# ║ ║
|
|
5
5
|
# ║ Captures tmux pane scrollback and provides log browsing/search. ║
|
|
6
6
|
# ╚═══════════════════════════════════════════════════════════════════════════╝
|
|
7
|
-
VERSION="2.2.
|
|
7
|
+
VERSION="2.2.2"
|
|
8
8
|
set -euo pipefail
|
|
9
9
|
trap 'echo "ERROR: $BASH_SOURCE:$LINENO exited with status $?" >&2' ERR
|
|
10
10
|
|
package/scripts/sw-loop.sh
CHANGED
package/scripts/sw-memory.sh
CHANGED
package/scripts/sw-otel.sh
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
set -euo pipefail
|
|
7
7
|
trap 'echo "ERROR: $BASH_SOURCE:$LINENO exited with status $?" >&2' ERR
|
|
8
8
|
|
|
9
|
-
VERSION="2.2.
|
|
9
|
+
VERSION="2.2.2"
|
|
10
10
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
11
11
|
REPO_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
12
12
|
|
|
@@ -94,16 +94,16 @@ cmd_metrics() {
|
|
|
94
94
|
event_type=$(echo "$line" | jq -r '.type // empty' 2>/dev/null || true)
|
|
95
95
|
|
|
96
96
|
case "$event_type" in
|
|
97
|
-
pipeline_start)
|
|
97
|
+
pipeline_start|pipeline.started)
|
|
98
98
|
((total_pipelines++))
|
|
99
99
|
((active_pipelines++))
|
|
100
100
|
;;
|
|
101
|
-
pipeline_complete)
|
|
101
|
+
pipeline_complete|pipeline.completed)
|
|
102
102
|
((active_pipelines--))
|
|
103
103
|
((succeeded_pipelines++))
|
|
104
104
|
((status_success++))
|
|
105
105
|
;;
|
|
106
|
-
pipeline_failed)
|
|
106
|
+
pipeline_failed|pipeline.failed)
|
|
107
107
|
((active_pipelines--))
|
|
108
108
|
((failed_pipelines++))
|
|
109
109
|
((status_failed++))
|
package/scripts/sw-oversight.sh
CHANGED
package/scripts/sw-pipeline.sh
CHANGED
|
@@ -11,7 +11,7 @@ unset CLAUDECODE 2>/dev/null || true
|
|
|
11
11
|
# Ignore SIGHUP so tmux attach/detach doesn't kill long-running plan/design/review stages
|
|
12
12
|
trap '' HUP
|
|
13
13
|
|
|
14
|
-
VERSION="2.2.
|
|
14
|
+
VERSION="2.2.2"
|
|
15
15
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
16
16
|
REPO_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
17
17
|
|
|
@@ -49,6 +49,18 @@ BOLD="${BOLD:-\033[1m}"
|
|
|
49
49
|
RESET="${RESET:-\033[0m}"
|
|
50
50
|
# Policy + pipeline quality thresholds (config/policy.json via lib/pipeline-quality.sh)
|
|
51
51
|
[[ -f "$SCRIPT_DIR/lib/pipeline-quality.sh" ]] && source "$SCRIPT_DIR/lib/pipeline-quality.sh"
|
|
52
|
+
# shellcheck source=lib/pipeline-state.sh
|
|
53
|
+
[[ -f "$SCRIPT_DIR/lib/pipeline-state.sh" ]] && source "$SCRIPT_DIR/lib/pipeline-state.sh"
|
|
54
|
+
# shellcheck source=lib/pipeline-github.sh
|
|
55
|
+
[[ -f "$SCRIPT_DIR/lib/pipeline-github.sh" ]] && source "$SCRIPT_DIR/lib/pipeline-github.sh"
|
|
56
|
+
# shellcheck source=lib/pipeline-detection.sh
|
|
57
|
+
[[ -f "$SCRIPT_DIR/lib/pipeline-detection.sh" ]] && source "$SCRIPT_DIR/lib/pipeline-detection.sh"
|
|
58
|
+
# shellcheck source=lib/pipeline-quality-checks.sh
|
|
59
|
+
[[ -f "$SCRIPT_DIR/lib/pipeline-quality-checks.sh" ]] && source "$SCRIPT_DIR/lib/pipeline-quality-checks.sh"
|
|
60
|
+
# shellcheck source=lib/pipeline-intelligence.sh
|
|
61
|
+
[[ -f "$SCRIPT_DIR/lib/pipeline-intelligence.sh" ]] && source "$SCRIPT_DIR/lib/pipeline-intelligence.sh"
|
|
62
|
+
# shellcheck source=lib/pipeline-stages.sh
|
|
63
|
+
[[ -f "$SCRIPT_DIR/lib/pipeline-stages.sh" ]] && source "$SCRIPT_DIR/lib/pipeline-stages.sh"
|
|
52
64
|
PIPELINE_COVERAGE_THRESHOLD="${PIPELINE_COVERAGE_THRESHOLD:-60}"
|
|
53
65
|
PIPELINE_QUALITY_GATE_THRESHOLD="${PIPELINE_QUALITY_GATE_THRESHOLD:-70}"
|
|
54
66
|
|
|
@@ -760,55 +772,7 @@ notify() {
|
|
|
760
772
|
fi
|
|
761
773
|
}
|
|
762
774
|
|
|
763
|
-
# ───
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
# ─── Pipeline libs (extracted for decomposition) ─────────────────────────
|
|
767
|
-
# shellcheck source=lib/pipeline-github.sh
|
|
768
|
-
[[ -f "$SCRIPT_DIR/lib/pipeline-github.sh" ]] && source "$SCRIPT_DIR/lib/pipeline-github.sh"
|
|
769
|
-
# shellcheck source=lib/pipeline-detection.sh
|
|
770
|
-
[[ -f "$SCRIPT_DIR/lib/pipeline-detection.sh" ]] && source "$SCRIPT_DIR/lib/pipeline-detection.sh"
|
|
771
|
-
|
|
772
|
-
PIPELINE_STATUS="pending"
|
|
773
|
-
CURRENT_STAGE=""
|
|
774
|
-
STARTED_AT=""
|
|
775
|
-
UPDATED_AT=""
|
|
776
|
-
STAGE_STATUSES=""
|
|
777
|
-
LOG_ENTRIES=""
|
|
778
|
-
|
|
779
|
-
# shellcheck source=lib/pipeline-state.sh
|
|
780
|
-
[[ -f "$SCRIPT_DIR/lib/pipeline-state.sh" ]] && source "$SCRIPT_DIR/lib/pipeline-state.sh"
|
|
781
|
-
|
|
782
|
-
show_stage_preview() {
|
|
783
|
-
local stage_id="$1"
|
|
784
|
-
echo ""
|
|
785
|
-
echo -e "${PURPLE}${BOLD}━━━ Stage: ${stage_id} ━━━${RESET}"
|
|
786
|
-
case "$stage_id" in
|
|
787
|
-
intake) echo -e " Fetch issue, detect task type, create branch, self-assign" ;;
|
|
788
|
-
plan) echo -e " Generate plan via Claude, post task checklist to issue" ;;
|
|
789
|
-
design) echo -e " Generate Architecture Decision Record (ADR), evaluate alternatives" ;;
|
|
790
|
-
build) echo -e " Delegate to ${CYAN}shipwright loop${RESET} for autonomous building" ;;
|
|
791
|
-
test) echo -e " Run test suite and check coverage" ;;
|
|
792
|
-
review) echo -e " AI code review on the diff, post findings" ;;
|
|
793
|
-
pr) echo -e " Create GitHub PR with labels, reviewers, milestone" ;;
|
|
794
|
-
merge) echo -e " Wait for CI checks, merge PR, optionally delete branch" ;;
|
|
795
|
-
deploy) echo -e " Deploy to staging/production with rollback" ;;
|
|
796
|
-
validate) echo -e " Smoke tests, health checks, close issue" ;;
|
|
797
|
-
monitor) echo -e " Post-deploy monitoring, health checks, auto-rollback" ;;
|
|
798
|
-
esac
|
|
799
|
-
echo ""
|
|
800
|
-
}
|
|
801
|
-
|
|
802
|
-
# ─── Stage Functions ────────────────────────────────────────────────────────
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
# shellcheck source=lib/pipeline-stages.sh
|
|
806
|
-
[[ -f "$SCRIPT_DIR/lib/pipeline-stages.sh" ]] && source "$SCRIPT_DIR/lib/pipeline-stages.sh"
|
|
807
|
-
# shellcheck source=lib/pipeline-quality-checks.sh
|
|
808
|
-
[[ -f "$SCRIPT_DIR/lib/pipeline-quality-checks.sh" ]] && source "$SCRIPT_DIR/lib/pipeline-quality-checks.sh"
|
|
809
|
-
# shellcheck source=lib/pipeline-intelligence.sh
|
|
810
|
-
[[ -f "$SCRIPT_DIR/lib/pipeline-intelligence.sh" ]] && source "$SCRIPT_DIR/lib/pipeline-intelligence.sh"
|
|
811
|
-
|
|
775
|
+
# ─── Error Classification ──────────────────────────────────────────────────
|
|
812
776
|
# Classifies errors to determine whether retrying makes sense.
|
|
813
777
|
# Returns: "infrastructure", "logic", "configuration", or "unknown"
|
|
814
778
|
|
|
@@ -1636,12 +1600,8 @@ pipeline_post_completion_cleanup() {
|
|
|
1636
1600
|
# Reset status to idle (preserves the file for reference but unblocks new runs)
|
|
1637
1601
|
local tmp_state
|
|
1638
1602
|
tmp_state=$(mktemp)
|
|
1639
|
-
|
|
1640
|
-
|
|
1641
|
-
else
|
|
1642
|
-
rm -f "$tmp_state"
|
|
1643
|
-
warn "Failed to reset state file status to idle" 2>/dev/null || true
|
|
1644
|
-
fi
|
|
1603
|
+
sed 's/^status: .*/status: idle/' "$STATE_FILE" > "$tmp_state" 2>/dev/null || true
|
|
1604
|
+
mv "$tmp_state" "$STATE_FILE"
|
|
1645
1605
|
fi
|
|
1646
1606
|
|
|
1647
1607
|
if [[ "$cleaned" -gt 0 ]]; then
|