shipwright-cli 2.4.0 → 3.0.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.
Files changed (161) hide show
  1. package/README.md +16 -11
  2. package/completions/_shipwright +1 -1
  3. package/completions/shipwright.bash +3 -8
  4. package/completions/shipwright.fish +1 -1
  5. package/config/defaults.json +111 -0
  6. package/config/event-schema.json +81 -0
  7. package/config/policy.json +13 -18
  8. package/dashboard/coverage/coverage-summary.json +14 -0
  9. package/dashboard/public/index.html +1 -1
  10. package/dashboard/server.ts +306 -17
  11. package/dashboard/src/components/charts/bar.test.ts +79 -0
  12. package/dashboard/src/components/charts/donut.test.ts +68 -0
  13. package/dashboard/src/components/charts/pipeline-rail.test.ts +117 -0
  14. package/dashboard/src/components/charts/sparkline.test.ts +125 -0
  15. package/dashboard/src/core/api.test.ts +309 -0
  16. package/dashboard/src/core/helpers.test.ts +301 -0
  17. package/dashboard/src/core/router.test.ts +307 -0
  18. package/dashboard/src/core/router.ts +7 -0
  19. package/dashboard/src/core/sse.test.ts +144 -0
  20. package/dashboard/src/views/metrics.test.ts +186 -0
  21. package/dashboard/src/views/overview.test.ts +173 -0
  22. package/dashboard/src/views/pipelines.test.ts +183 -0
  23. package/dashboard/src/views/team.test.ts +253 -0
  24. package/dashboard/vitest.config.ts +14 -5
  25. package/docs/TIPS.md +1 -1
  26. package/docs/patterns/README.md +1 -1
  27. package/package.json +5 -7
  28. package/scripts/adapters/docker-deploy.sh +1 -1
  29. package/scripts/adapters/tmux-adapter.sh +11 -1
  30. package/scripts/adapters/wezterm-adapter.sh +1 -1
  31. package/scripts/check-version-consistency.sh +1 -1
  32. package/scripts/lib/architecture.sh +126 -0
  33. package/scripts/lib/bootstrap.sh +75 -0
  34. package/scripts/lib/compat.sh +89 -6
  35. package/scripts/lib/config.sh +91 -0
  36. package/scripts/lib/daemon-adaptive.sh +3 -3
  37. package/scripts/lib/daemon-dispatch.sh +39 -16
  38. package/scripts/lib/daemon-health.sh +1 -1
  39. package/scripts/lib/daemon-patrol.sh +24 -12
  40. package/scripts/lib/daemon-poll.sh +37 -25
  41. package/scripts/lib/daemon-state.sh +115 -23
  42. package/scripts/lib/daemon-triage.sh +30 -8
  43. package/scripts/lib/fleet-failover.sh +63 -0
  44. package/scripts/lib/helpers.sh +30 -6
  45. package/scripts/lib/pipeline-detection.sh +2 -2
  46. package/scripts/lib/pipeline-github.sh +9 -9
  47. package/scripts/lib/pipeline-intelligence.sh +85 -35
  48. package/scripts/lib/pipeline-quality-checks.sh +16 -16
  49. package/scripts/lib/pipeline-quality.sh +1 -1
  50. package/scripts/lib/pipeline-stages.sh +242 -28
  51. package/scripts/lib/pipeline-state.sh +40 -4
  52. package/scripts/lib/test-helpers.sh +247 -0
  53. package/scripts/postinstall.mjs +3 -11
  54. package/scripts/sw +10 -4
  55. package/scripts/sw-activity.sh +1 -11
  56. package/scripts/sw-adaptive.sh +109 -85
  57. package/scripts/sw-adversarial.sh +4 -14
  58. package/scripts/sw-architecture-enforcer.sh +1 -11
  59. package/scripts/sw-auth.sh +8 -17
  60. package/scripts/sw-autonomous.sh +111 -49
  61. package/scripts/sw-changelog.sh +1 -11
  62. package/scripts/sw-checkpoint.sh +144 -20
  63. package/scripts/sw-ci.sh +2 -12
  64. package/scripts/sw-cleanup.sh +13 -17
  65. package/scripts/sw-code-review.sh +16 -36
  66. package/scripts/sw-connect.sh +5 -12
  67. package/scripts/sw-context.sh +9 -26
  68. package/scripts/sw-cost.sh +6 -16
  69. package/scripts/sw-daemon.sh +75 -70
  70. package/scripts/sw-dashboard.sh +57 -17
  71. package/scripts/sw-db.sh +506 -15
  72. package/scripts/sw-decompose.sh +1 -11
  73. package/scripts/sw-deps.sh +15 -25
  74. package/scripts/sw-developer-simulation.sh +1 -11
  75. package/scripts/sw-discovery.sh +112 -30
  76. package/scripts/sw-doc-fleet.sh +7 -17
  77. package/scripts/sw-docs-agent.sh +6 -16
  78. package/scripts/sw-docs.sh +4 -12
  79. package/scripts/sw-doctor.sh +134 -43
  80. package/scripts/sw-dora.sh +11 -19
  81. package/scripts/sw-durable.sh +35 -52
  82. package/scripts/sw-e2e-orchestrator.sh +11 -27
  83. package/scripts/sw-eventbus.sh +115 -115
  84. package/scripts/sw-evidence.sh +114 -30
  85. package/scripts/sw-feedback.sh +3 -13
  86. package/scripts/sw-fix.sh +2 -20
  87. package/scripts/sw-fleet-discover.sh +1 -11
  88. package/scripts/sw-fleet-viz.sh +10 -18
  89. package/scripts/sw-fleet.sh +13 -17
  90. package/scripts/sw-github-app.sh +6 -16
  91. package/scripts/sw-github-checks.sh +1 -11
  92. package/scripts/sw-github-deploy.sh +1 -11
  93. package/scripts/sw-github-graphql.sh +2 -12
  94. package/scripts/sw-guild.sh +1 -11
  95. package/scripts/sw-heartbeat.sh +49 -12
  96. package/scripts/sw-hygiene.sh +45 -43
  97. package/scripts/sw-incident.sh +48 -74
  98. package/scripts/sw-init.sh +35 -37
  99. package/scripts/sw-instrument.sh +1 -11
  100. package/scripts/sw-intelligence.sh +362 -51
  101. package/scripts/sw-jira.sh +5 -14
  102. package/scripts/sw-launchd.sh +2 -12
  103. package/scripts/sw-linear.sh +8 -17
  104. package/scripts/sw-logs.sh +4 -12
  105. package/scripts/sw-loop.sh +641 -90
  106. package/scripts/sw-memory.sh +243 -17
  107. package/scripts/sw-mission-control.sh +2 -12
  108. package/scripts/sw-model-router.sh +73 -34
  109. package/scripts/sw-otel.sh +11 -21
  110. package/scripts/sw-oversight.sh +1 -11
  111. package/scripts/sw-patrol-meta.sh +5 -11
  112. package/scripts/sw-pipeline-composer.sh +7 -17
  113. package/scripts/sw-pipeline-vitals.sh +1 -11
  114. package/scripts/sw-pipeline.sh +478 -122
  115. package/scripts/sw-pm.sh +2 -12
  116. package/scripts/sw-pr-lifecycle.sh +27 -25
  117. package/scripts/sw-predictive.sh +16 -22
  118. package/scripts/sw-prep.sh +6 -16
  119. package/scripts/sw-ps.sh +1 -11
  120. package/scripts/sw-public-dashboard.sh +2 -12
  121. package/scripts/sw-quality.sh +77 -10
  122. package/scripts/sw-reaper.sh +1 -11
  123. package/scripts/sw-recruit.sh +15 -25
  124. package/scripts/sw-regression.sh +11 -21
  125. package/scripts/sw-release-manager.sh +19 -28
  126. package/scripts/sw-release.sh +8 -16
  127. package/scripts/sw-remote.sh +1 -11
  128. package/scripts/sw-replay.sh +48 -44
  129. package/scripts/sw-retro.sh +70 -92
  130. package/scripts/sw-review-rerun.sh +1 -1
  131. package/scripts/sw-scale.sh +109 -32
  132. package/scripts/sw-security-audit.sh +12 -22
  133. package/scripts/sw-self-optimize.sh +239 -23
  134. package/scripts/sw-session.sh +3 -13
  135. package/scripts/sw-setup.sh +8 -18
  136. package/scripts/sw-standup.sh +5 -15
  137. package/scripts/sw-status.sh +32 -23
  138. package/scripts/sw-strategic.sh +129 -13
  139. package/scripts/sw-stream.sh +1 -11
  140. package/scripts/sw-swarm.sh +76 -36
  141. package/scripts/sw-team-stages.sh +10 -20
  142. package/scripts/sw-templates.sh +4 -14
  143. package/scripts/sw-testgen.sh +3 -13
  144. package/scripts/sw-tmux-pipeline.sh +1 -19
  145. package/scripts/sw-tmux-role-color.sh +0 -10
  146. package/scripts/sw-tmux-status.sh +3 -11
  147. package/scripts/sw-tmux.sh +2 -20
  148. package/scripts/sw-trace.sh +1 -19
  149. package/scripts/sw-tracker-github.sh +0 -10
  150. package/scripts/sw-tracker-jira.sh +1 -11
  151. package/scripts/sw-tracker-linear.sh +1 -11
  152. package/scripts/sw-tracker.sh +7 -24
  153. package/scripts/sw-triage.sh +24 -34
  154. package/scripts/sw-upgrade.sh +5 -23
  155. package/scripts/sw-ux.sh +1 -19
  156. package/scripts/sw-webhook.sh +18 -32
  157. package/scripts/sw-widgets.sh +3 -21
  158. package/scripts/sw-worktree.sh +11 -27
  159. package/scripts/update-homebrew-sha.sh +67 -0
  160. package/templates/pipelines/tdd.json +72 -0
  161. package/scripts/sw-pipeline.sh.mock +0 -7
package/README.md CHANGED
@@ -12,8 +12,8 @@
12
12
  <p align="center">
13
13
  <a href="https://github.com/sethdford/shipwright/actions/workflows/test.yml"><img src="https://github.com/sethdford/shipwright/actions/workflows/test.yml/badge.svg" alt="Tests"></a>
14
14
  <a href="https://github.com/sethdford/shipwright/actions/workflows/shipwright-pipeline.yml"><img src="https://github.com/sethdford/shipwright/actions/workflows/shipwright-pipeline.yml/badge.svg" alt="Pipeline"></a>
15
- <img src="https://img.shields.io/badge/tests-103_suites_passing-4ade80?style=flat-square" alt="103 suites">
16
- <img src="https://img.shields.io/badge/version-2.4.0-00d4ff?style=flat-square" alt="v2.4.0">
15
+ <img src="https://img.shields.io/badge/tests-141_suites_passing-4ade80?style=flat-square" alt="141 suites">
16
+ <img src="https://img.shields.io/badge/version-3.0.0-00d4ff?style=flat-square" alt="v3.0.0">
17
17
  <img src="https://img.shields.io/badge/license-MIT-green?style=flat-square" alt="MIT License">
18
18
  <img src="https://img.shields.io/badge/bash-3.2%2B-7c3aed?style=flat-square" alt="Bash 3.2+">
19
19
  </p>
@@ -24,7 +24,7 @@
24
24
 
25
25
  - [Shipwright Builds Itself](#shipwright-builds-itself)
26
26
  - [Code Factory Pattern](#code-factory-pattern)
27
- - [What's New in v2.4.0](#whats-new-in-v240)
27
+ - [What's New in v3.0.0](#whats-new-in-v300)
28
28
  - [How It Works](#how-it-works)
29
29
  - [Install](#install)
30
30
  - [Quick Start](#quick-start)
@@ -43,7 +43,7 @@
43
43
 
44
44
  This repo uses Shipwright to process its own issues. Label a GitHub issue with `shipwright` and the autonomous pipeline takes over: semantic triage, plan, design, build, test, review, quality gates, PR. No human in the loop.
45
45
 
46
- **[See it live](https://github.com/sethdford/shipwright/actions/workflows/shipwright-pipeline.yml)** | **[Create an issue](https://github.com/sethdford/shipwright/issues/new?template=shipwright.yml)** and watch it build.
46
+ **[See it live](https://github.com/sethdford/shipwright/actions/workflows/shipwright-pipeline.yml)** | **[Create an issue](https://github.com/sethdford/shipwright/issues/new?template=shipwright-build.yml)** and watch it build.
47
47
 
48
48
  ---
49
49
 
@@ -77,7 +77,12 @@ Shipwright extends the Code Factory pattern with capabilities most implementatio
77
77
  - **12-stage pipeline** with self-healing builds, adversarial review, and compound quality gates
78
78
  - **Predictive risk scoring** using GitHub signals (security alerts, contributor expertise, file churn)
79
79
  - **Persistent memory** — failure patterns, fix effectiveness, and prediction accuracy compound over time
80
+ - **Auto-learning** — self-optimize runs automatically after every pipeline completion
81
+ - **Unified model routing** — single source of truth for model selection across all components
82
+ - **Evidence-gated merges** — SHA discipline ensures all evidence validated against current PR head
83
+ - **Semantic quality audits** — Claude-powered audits with grep fallback when Claude unavailable
80
84
  - **18 autonomous agents** with specialized roles (PM, reviewer, security auditor, test generator, etc.)
85
+ - **Cross-platform compatibility** — portable date helpers, file_mtime, and compat layer for macOS/Linux
81
86
  - **Fleet operations** — the Code Factory pattern applied across every repo in your org
82
87
  - **Cost intelligence** — per-pipeline cost tracking, budget enforcement, adaptive model routing
83
88
  - **Self-optimization** — DORA metrics analysis auto-tunes daemon config and template weights
@@ -103,7 +108,7 @@ shipwright incident gap sla
103
108
 
104
109
  ---
105
110
 
106
- ## What's New in v2.4.0
111
+ ## What's New in v3.0.0
107
112
 
108
113
  **Code Factory pattern** — deterministic, risk-aware agent delivery with machine-verifiable evidence:
109
114
 
@@ -223,7 +228,7 @@ shipwright fleet start
223
228
  shipwright fix "upgrade deps" --repos ~/a,~/b,~/c
224
229
 
225
230
  # Release automation
226
- shipwright version bump 2.2.2
231
+ shipwright version bump 2.4.0
227
232
  shipwright changelog generate
228
233
  ```
229
234
 
@@ -277,7 +282,7 @@ Each stage is configurable with quality gates that auto-proceed or pause for app
277
282
 
278
283
  ### Intelligence Layer
279
284
 
280
- 7 modules that make the pipeline smarter over time. All optional, all degrade gracefully.
285
+ 7 modules that make the pipeline smarter over time. **Auto mode**: intelligence is enabled when Claude CLI is available; set `intelligence.enabled=false` to disable. All modules degrade gracefully.
281
286
 
282
287
  | Module | What It Does |
283
288
  | ---------------------------- | --------------------------------------------------------------------------------------------------------------------- |
@@ -442,7 +447,7 @@ shipwright fix "feat: add auth" --repos ~/a,~/b,~/c
442
447
  shipwright fleet-viz
443
448
 
444
449
  # Release automation
445
- shipwright version bump 2.2.2
450
+ shipwright version bump 2.4.0
446
451
  shipwright changelog generate
447
452
  shipwright deploys list
448
453
 
@@ -494,7 +499,7 @@ shipwright templates list
494
499
 
495
500
  ## Architecture
496
501
 
497
- 100+ bash scripts (~100K lines), 103 test suites (1000+ tests), plus a TypeScript dashboard server. Bash 3.2 compatible — runs on macOS and Linux out of the box.
502
+ 100+ bash scripts (~100K lines), 125 shell test suites + 16 dashboard test files (141 total), plus E2E system test proving full daemon→pipeline→loop→PR flow. Dashboard at 98% coverage. Bash 3.2 compatible — runs on macOS and Linux out of the box.
498
503
 
499
504
  **Core Layers:**
500
505
 
@@ -560,12 +565,12 @@ Tools & UX
560
565
 
561
566
  ## Contributing
562
567
 
563
- **Let Shipwright build it:** Create an issue using the [Shipwright template](https://github.com/sethdford/shipwright/issues/new?template=shipwright.yml) and label it `shipwright`. The autonomous pipeline will triage, plan, build, test, review, and create a PR.
568
+ **Let Shipwright build it:** Create an issue using the [Shipwright template](https://github.com/sethdford/shipwright/issues/new?template=shipwright-build.yml) and label it `shipwright`. The autonomous pipeline will triage, plan, build, test, review, and create a PR.
564
569
 
565
570
  **Manual development:** Fork, branch, then:
566
571
 
567
572
  ```bash
568
- npm test # 1000+ tests across 103 suites
573
+ npm test # 125 shell suites + 16 dashboard test files (141 total), E2E system test
569
574
  ```
570
575
 
571
576
  ## License
@@ -1,4 +1,4 @@
1
- #compdef shipwright sw cct
1
+ #compdef shipwright sw
2
2
  # ╔═══════════════════════════════════════════════════════════════════════════╗
3
3
  # ║ Shipwright — Zsh tab completions ║
4
4
  # ║ Auto-install to ~/.zsh/completions/ during shipwright init ║
@@ -10,10 +10,10 @@ _shipwright_completions() {
10
10
  prev="${COMP_WORDS[COMP_CWORD-1]}"
11
11
 
12
12
  # Top-level commands (includes groups and flat commands)
13
- local commands="agent quality observe release intel init setup session status ps logs templates doctor cleanup reaper upgrade loop pipeline worktree prep daemon fleet memory cost db fix dashboard jira linear tracker heartbeat checkpoint webhook decompose connect remote launchd intelligence optimize predict adversarial simulate architecture vitals docs tmux github checks deploys pr context help version"
13
+ local commands="agent quality observe release intel init setup session status ps logs templates doctor cleanup reaper upgrade loop pipeline worktree prep daemon fleet memory cost db fix dashboard jira linear tracker heartbeat checkpoint webhook decompose connect remote launchd intelligence optimize predict adversarial simulation architecture vitals docs tmux github checks deploys pr context help version"
14
14
 
15
15
  case "$prev" in
16
- shipwright|sw|cct)
16
+ shipwright|sw)
17
17
  COMPREPLY=( $(compgen -W "$commands" -- "$cur") )
18
18
  return 0
19
19
  ;;
@@ -30,7 +30,7 @@ _shipwright_completions() {
30
30
  return 0
31
31
  ;;
32
32
  release)
33
- COMPREPLY=( $(compgen -W "release release-manager changelog deploy" -- "$cur") )
33
+ COMPREPLY=( $(compgen -W "release release-manager changelog deploy build" -- "$cur") )
34
34
  return 0
35
35
  ;;
36
36
  intel)
@@ -121,10 +121,6 @@ _shipwright_completions() {
121
121
  COMPREPLY=( $(compgen -W "review merge cleanup feedback" -- "$cur") )
122
122
  return 0
123
123
  ;;
124
- budget)
125
- COMPREPLY=( $(compgen -W "set show" -- "$cur") )
126
- return 0
127
- ;;
128
124
  esac
129
125
 
130
126
  # Flags for subcommands already handled above; fall back to commands
@@ -178,4 +174,3 @@ _shipwright_completions() {
178
174
 
179
175
  complete -F _shipwright_completions shipwright
180
176
  complete -F _shipwright_completions sw
181
- complete -F _shipwright_completions cct
@@ -4,7 +4,7 @@
4
4
  # Place in ~/.config/fish/completions/
5
5
 
6
6
  # Disable file completions by default
7
- for cmd in shipwright sw cct
7
+ for cmd in shipwright sw
8
8
  complete -c $cmd -f
9
9
 
10
10
  # Top-level commands (includes groups and flat commands)
@@ -0,0 +1,111 @@
1
+ {
2
+ "$schema": "https://shipwright.dev/schemas/defaults-v1.json",
3
+ "description": "Default values for all Shipwright tunables. Override via daemon-config.json, config/policy.json, or SHIPWRIGHT_* env vars.",
4
+ "version": "1",
5
+ "network": {
6
+ "connect_timeout": 10,
7
+ "max_time": 60,
8
+ "gh_timeout": 30,
9
+ "retry_count": 3,
10
+ "retry_delay": 2
11
+ },
12
+ "daemon": {
13
+ "poll_interval": 30,
14
+ "max_parallel": 4,
15
+ "watch_label": "shipwright",
16
+ "issue_limit": 100,
17
+ "on_success_remove_label": true,
18
+ "health_check_interval": 60,
19
+ "stale_job_timeout_hours": 2,
20
+ "branch_pattern": "shipwright/issue-{issue}",
21
+ "worktree_dir": ".worktrees"
22
+ },
23
+ "pipeline": {
24
+ "max_iterations": 20,
25
+ "build_test_retries": 3,
26
+ "claude_timeout": 1800,
27
+ "heartbeat_interval": 30,
28
+ "branch_pattern": "shipwright/issue-{issue}",
29
+ "stage_order": [
30
+ "intake",
31
+ "plan",
32
+ "design",
33
+ "build",
34
+ "test",
35
+ "review",
36
+ "compound_quality",
37
+ "pr",
38
+ "merge",
39
+ "deploy",
40
+ "validate",
41
+ "monitor"
42
+ ]
43
+ },
44
+ "loop": {
45
+ "claude_timeout": 1800,
46
+ "sleep_between_iterations": 2,
47
+ "max_restarts": 0,
48
+ "fast_test_interval": 5,
49
+ "convergence_threshold": 3,
50
+ "multi_agent_sleep": 5
51
+ },
52
+ "dashboard": {
53
+ "port": 8767,
54
+ "poll_interval_ms": 2000,
55
+ "ws_heartbeat_ms": 30000
56
+ },
57
+ "webhook": {
58
+ "port": 8765,
59
+ "secret_length": 32,
60
+ "max_payload_bytes": 1048576
61
+ },
62
+ "urls": {
63
+ "linear_api": "https://api.linear.app/graphql",
64
+ "github_api": "https://api.github.com",
65
+ "github_device_code": "https://github.com/login/device/code",
66
+ "github_device_login": "https://github.com/login/device",
67
+ "otel_endpoint": "http://localhost:4318",
68
+ "tpm_repo": "https://github.com/tmux-plugins/tpm",
69
+ "bun_install": "https://bun.sh/install"
70
+ },
71
+ "intelligence": {
72
+ "cache_ttl": 3600,
73
+ "complexity_bands": { "low": 3, "medium": 6, "high": 10 },
74
+ "miss_rate_high": 30,
75
+ "miss_rate_low": 5,
76
+ "anomaly_threshold": 3.0,
77
+ "ab_test_ratio": 0.2,
78
+ "claude_timeout": 60
79
+ },
80
+ "quality": {
81
+ "gate_score_threshold": 70,
82
+ "secret_threshold": 3,
83
+ "min_file_count": 10,
84
+ "score_weight_per_file": 25,
85
+ "pass_rate_threshold": 5.0
86
+ },
87
+ "cleanup": {
88
+ "artifact_age_days": 7,
89
+ "heartbeat_stale_seconds": 300,
90
+ "checkpoint_max_count": 10
91
+ },
92
+ "labels": {
93
+ "watch": "shipwright",
94
+ "ready_to_build": "ready-to-build",
95
+ "hotfix": "hotfix",
96
+ "claimed_prefix": "claimed:",
97
+ "incident": ["hotfix", "shipwright"],
98
+ "incident_labels": "hotfix,shipwright",
99
+ "harness_gap": ["harness-gap", "shipwright"],
100
+ "harness_gap_labels": "harness-gap,shipwright"
101
+ },
102
+ "limits": {
103
+ "triage_issues": 100,
104
+ "triage_unlabeled": 50,
105
+ "strategic_closed": 30,
106
+ "dora_days": 30,
107
+ "log_tail_lines": 100,
108
+ "function_scan_limit": 0,
109
+ "dependency_scan_limit": 0
110
+ }
111
+ }
@@ -0,0 +1,81 @@
1
+ {
2
+ "$schema": "https://shipwright.dev/schemas/events-v1.json",
3
+ "description": "Known Shipwright event types and their expected fields",
4
+ "version": "1",
5
+ "event_types": {
6
+ "pipeline.started": {
7
+ "required": ["job_id"],
8
+ "optional": ["issue", "goal", "template"]
9
+ },
10
+ "pipeline.completed": {
11
+ "required": ["job_id"],
12
+ "optional": ["duration_s", "result"]
13
+ },
14
+ "pipeline.failed": {
15
+ "required": ["job_id"],
16
+ "optional": ["error", "stage"]
17
+ },
18
+ "stage.started": { "required": ["job_id", "stage"], "optional": [] },
19
+ "stage.completed": {
20
+ "required": ["job_id", "stage"],
21
+ "optional": ["duration_s"]
22
+ },
23
+ "stage.failed": { "required": ["job_id", "stage"], "optional": ["error"] },
24
+ "daemon.started": { "required": [], "optional": ["pid", "mode"] },
25
+ "daemon.stopped": { "required": [], "optional": ["reason"] },
26
+ "daemon.claimed": { "required": ["issue"], "optional": ["repo", "title"] },
27
+ "daemon.released": { "required": ["issue"], "optional": ["reason"] },
28
+ "daemon.spawn": {
29
+ "required": ["issue"],
30
+ "optional": ["template", "worktree"]
31
+ },
32
+ "daemon.complete": {
33
+ "required": ["issue"],
34
+ "optional": ["result", "duration_s"]
35
+ },
36
+ "daemon.failure": {
37
+ "required": ["issue"],
38
+ "optional": ["error", "retry_count"]
39
+ },
40
+ "loop.started": { "required": [], "optional": ["goal", "test_cmd"] },
41
+ "loop.iteration": {
42
+ "required": ["iteration"],
43
+ "optional": ["test_result"]
44
+ },
45
+ "loop.completed": { "required": [], "optional": ["iterations", "result"] },
46
+ "cost.recorded": {
47
+ "required": ["cost_usd"],
48
+ "optional": ["model", "tokens_in", "tokens_out", "stage"]
49
+ },
50
+ "intelligence.analysis": {
51
+ "required": ["analysis_type"],
52
+ "optional": ["result", "cache_hit"]
53
+ },
54
+ "memory.captured": {
55
+ "required": ["memory_type"],
56
+ "optional": ["pattern", "repo"]
57
+ },
58
+ "quality.gate": {
59
+ "required": ["gate_name", "passed"],
60
+ "optional": ["score", "details"]
61
+ },
62
+ "pr.created": {
63
+ "required": ["pr_number"],
64
+ "optional": ["title", "branch"]
65
+ },
66
+ "deploy.started": { "required": ["environment"], "optional": ["version"] },
67
+ "deploy.completed": {
68
+ "required": ["environment"],
69
+ "optional": ["version", "duration_s"]
70
+ },
71
+ "heartbeat.write": {
72
+ "required": ["job_id"],
73
+ "optional": ["stage", "iteration"]
74
+ },
75
+ "session.started": {
76
+ "required": ["session_id"],
77
+ "optional": ["template", "agents"]
78
+ },
79
+ "session.ended": { "required": ["session_id"], "optional": ["duration_s"] }
80
+ }
81
+ }
@@ -35,28 +35,23 @@
35
35
  "critical": {
36
36
  "requiredChecks": [
37
37
  "risk-policy-gate",
38
- "tests",
39
- "e2e-smoke",
38
+ "test",
39
+ "smoke",
40
40
  "platform-health",
41
- "code-review-agent"
41
+ "shellcheck"
42
42
  ],
43
43
  "requiredReviewers": 1,
44
44
  "requiredEvidence": ["cli", "api"],
45
45
  "requireDocsDriftCheck": true
46
46
  },
47
47
  "high": {
48
- "requiredChecks": [
49
- "risk-policy-gate",
50
- "tests",
51
- "e2e-smoke",
52
- "code-review-agent"
53
- ],
48
+ "requiredChecks": ["risk-policy-gate", "test", "smoke"],
54
49
  "requiredReviewers": 0,
55
50
  "requiredEvidence": ["cli"],
56
51
  "requireDocsDriftCheck": false
57
52
  },
58
53
  "medium": {
59
- "requiredChecks": ["risk-policy-gate", "tests"],
54
+ "requiredChecks": ["risk-policy-gate", "test"],
60
55
  "requiredReviewers": 0,
61
56
  "requiredEvidence": [],
62
57
  "requireDocsDriftCheck": false
@@ -94,21 +89,21 @@
94
89
  "name": "dashboard-loads",
95
90
  "type": "browser",
96
91
  "entrypoint": "/",
97
- "baseUrl": "http://localhost:3000",
92
+ "baseUrl": "http://localhost:8767",
98
93
  "assertions": ["page-title-visible", "websocket-connected"]
99
94
  },
100
95
  {
101
96
  "name": "pipeline-status",
102
97
  "type": "browser",
103
98
  "entrypoint": "/pipeline",
104
- "baseUrl": "http://localhost:3000",
99
+ "baseUrl": "http://localhost:8767",
105
100
  "assertions": ["stage-list-rendered", "progress-indicator-visible"]
106
101
  },
107
102
  {
108
103
  "name": "dashboard-api-health",
109
104
  "type": "api",
110
105
  "method": "GET",
111
- "url": "http://localhost:3000/api/health",
106
+ "url": "http://localhost:8767/api/health",
112
107
  "expectedStatus": 200,
113
108
  "assertions": ["status-ok", "response-has-version"]
114
109
  },
@@ -116,16 +111,16 @@
116
111
  "name": "dashboard-ws-connect",
117
112
  "type": "api",
118
113
  "method": "GET",
119
- "url": "http://localhost:3000/api/ws-status",
114
+ "url": "http://localhost:8767/api/ws-status",
120
115
  "expectedStatus": 200,
121
116
  "assertions": ["websocket-active"]
122
117
  },
123
118
  {
124
119
  "name": "pipeline-cli-smoke",
125
120
  "type": "cli",
126
- "command": "bash scripts/sw-pipeline.sh status --json",
121
+ "command": "bash scripts/sw-pipeline.sh status",
127
122
  "expectedExitCode": 0,
128
- "assertions": ["valid-json-output", "has-pipeline-state"]
123
+ "assertions": ["has-pipeline-state"]
129
124
  },
130
125
  {
131
126
  "name": "policy-validation",
@@ -137,9 +132,9 @@
137
132
  {
138
133
  "name": "db-schema-integrity",
139
134
  "type": "database",
140
- "command": "bash scripts/sw-db.sh check",
135
+ "command": "bash scripts/sw-db.sh health",
141
136
  "expectedExitCode": 0,
142
- "assertions": ["schema-valid", "migrations-current"]
137
+ "assertions": ["schema-valid", "db-accessible"]
143
138
  }
144
139
  ]
145
140
  },
@@ -0,0 +1,14 @@
1
+ {"total": {"lines":{"total":602,"covered":593,"skipped":0,"pct":98.5},"statements":{"total":671,"covered":657,"skipped":0,"pct":97.91},"functions":{"total":142,"covered":139,"skipped":0,"pct":97.88},"branches":{"total":311,"covered":285,"skipped":0,"pct":91.63},"branchesTrue":{"total":0,"covered":0,"skipped":0,"pct":100}}
2
+ ,"/Users/sethford/Documents/shipwright/dashboard/src/components/charts/bar.ts": {"lines":{"total":30,"covered":30,"skipped":0,"pct":100},"functions":{"total":1,"covered":1,"skipped":0,"pct":100},"statements":{"total":34,"covered":34,"skipped":0,"pct":100},"branches":{"total":28,"covered":27,"skipped":0,"pct":96.42}}
3
+ ,"/Users/sethford/Documents/shipwright/dashboard/src/components/charts/donut.ts": {"lines":{"total":13,"covered":13,"skipped":0,"pct":100},"functions":{"total":1,"covered":1,"skipped":0,"pct":100},"statements":{"total":13,"covered":13,"skipped":0,"pct":100},"branches":{"total":0,"covered":0,"skipped":0,"pct":100}}
4
+ ,"/Users/sethford/Documents/shipwright/dashboard/src/components/charts/pipeline-rail.ts": {"lines":{"total":58,"covered":58,"skipped":0,"pct":100},"functions":{"total":2,"covered":2,"skipped":0,"pct":100},"statements":{"total":62,"covered":62,"skipped":0,"pct":100},"branches":{"total":34,"covered":31,"skipped":0,"pct":91.17}}
5
+ ,"/Users/sethford/Documents/shipwright/dashboard/src/components/charts/sparkline.ts": {"lines":{"total":44,"covered":44,"skipped":0,"pct":100},"functions":{"total":2,"covered":2,"skipped":0,"pct":100},"statements":{"total":52,"covered":52,"skipped":0,"pct":100},"branches":{"total":36,"covered":34,"skipped":0,"pct":94.44}}
6
+ ,"/Users/sethford/Documents/shipwright/dashboard/src/core/api.ts": {"lines":{"total":142,"covered":141,"skipped":0,"pct":99.29},"functions":{"total":74,"covered":73,"skipped":0,"pct":98.64},"statements":{"total":151,"covered":149,"skipped":0,"pct":98.67},"branches":{"total":31,"covered":28,"skipped":0,"pct":90.32}}
7
+ ,"/Users/sethford/Documents/shipwright/dashboard/src/core/helpers.ts": {"lines":{"total":65,"covered":65,"skipped":0,"pct":100},"functions":{"total":14,"covered":14,"skipped":0,"pct":100},"statements":{"total":87,"covered":87,"skipped":0,"pct":100},"branches":{"total":65,"covered":65,"skipped":0,"pct":100}}
8
+ ,"/Users/sethford/Documents/shipwright/dashboard/src/core/router.ts": {"lines":{"total":94,"covered":94,"skipped":0,"pct":100},"functions":{"total":14,"covered":14,"skipped":0,"pct":100},"statements":{"total":100,"covered":99,"skipped":0,"pct":99},"branches":{"total":52,"covered":49,"skipped":0,"pct":94.23}}
9
+ ,"/Users/sethford/Documents/shipwright/dashboard/src/core/sse.ts": {"lines":{"total":14,"covered":14,"skipped":0,"pct":100},"functions":{"total":6,"covered":6,"skipped":0,"pct":100},"statements":{"total":15,"covered":15,"skipped":0,"pct":100},"branches":{"total":4,"covered":3,"skipped":0,"pct":75}}
10
+ ,"/Users/sethford/Documents/shipwright/dashboard/src/core/state.ts": {"lines":{"total":38,"covered":38,"skipped":0,"pct":100},"functions":{"total":13,"covered":13,"skipped":0,"pct":100},"statements":{"total":44,"covered":44,"skipped":0,"pct":100},"branches":{"total":14,"covered":14,"skipped":0,"pct":100}}
11
+ ,"/Users/sethford/Documents/shipwright/dashboard/src/core/ws.ts": {"lines":{"total":85,"covered":77,"skipped":0,"pct":90.58},"functions":{"total":14,"covered":12,"skipped":0,"pct":85.71},"statements":{"total":93,"covered":82,"skipped":0,"pct":88.17},"branches":{"total":42,"covered":29,"skipped":0,"pct":69.04}}
12
+ ,"/Users/sethford/Documents/shipwright/dashboard/src/design/icons.ts": {"lines":{"total":6,"covered":6,"skipped":0,"pct":100},"functions":{"total":1,"covered":1,"skipped":0,"pct":100},"statements":{"total":7,"covered":7,"skipped":0,"pct":100},"branches":{"total":5,"covered":5,"skipped":0,"pct":100}}
13
+ ,"/Users/sethford/Documents/shipwright/dashboard/src/design/tokens.ts": {"lines":{"total":13,"covered":13,"skipped":0,"pct":100},"functions":{"total":0,"covered":0,"skipped":0,"pct":100},"statements":{"total":13,"covered":13,"skipped":0,"pct":100},"branches":{"total":0,"covered":0,"skipped":0,"pct":100}}
14
+ }
@@ -733,7 +733,7 @@
733
733
 
734
734
  <!-- Footer -->
735
735
  <footer class="footer">
736
- <span>Shipwright Fleet Command v2.3.1</span>
736
+ <span>Shipwright Fleet Command v2.4.0</span>
737
737
  <span>Dashboard refreshes via WebSocket</span>
738
738
  </footer>
739
739