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.
- package/README.md +16 -11
- package/completions/_shipwright +1 -1
- package/completions/shipwright.bash +3 -8
- package/completions/shipwright.fish +1 -1
- package/config/defaults.json +111 -0
- package/config/event-schema.json +81 -0
- package/config/policy.json +13 -18
- package/dashboard/coverage/coverage-summary.json +14 -0
- package/dashboard/public/index.html +1 -1
- package/dashboard/server.ts +306 -17
- package/dashboard/src/components/charts/bar.test.ts +79 -0
- package/dashboard/src/components/charts/donut.test.ts +68 -0
- package/dashboard/src/components/charts/pipeline-rail.test.ts +117 -0
- package/dashboard/src/components/charts/sparkline.test.ts +125 -0
- package/dashboard/src/core/api.test.ts +309 -0
- package/dashboard/src/core/helpers.test.ts +301 -0
- package/dashboard/src/core/router.test.ts +307 -0
- package/dashboard/src/core/router.ts +7 -0
- package/dashboard/src/core/sse.test.ts +144 -0
- package/dashboard/src/views/metrics.test.ts +186 -0
- package/dashboard/src/views/overview.test.ts +173 -0
- package/dashboard/src/views/pipelines.test.ts +183 -0
- package/dashboard/src/views/team.test.ts +253 -0
- package/dashboard/vitest.config.ts +14 -5
- package/docs/TIPS.md +1 -1
- package/docs/patterns/README.md +1 -1
- package/package.json +5 -7
- package/scripts/adapters/docker-deploy.sh +1 -1
- package/scripts/adapters/tmux-adapter.sh +11 -1
- package/scripts/adapters/wezterm-adapter.sh +1 -1
- package/scripts/check-version-consistency.sh +1 -1
- package/scripts/lib/architecture.sh +126 -0
- package/scripts/lib/bootstrap.sh +75 -0
- package/scripts/lib/compat.sh +89 -6
- package/scripts/lib/config.sh +91 -0
- package/scripts/lib/daemon-adaptive.sh +3 -3
- package/scripts/lib/daemon-dispatch.sh +39 -16
- package/scripts/lib/daemon-health.sh +1 -1
- package/scripts/lib/daemon-patrol.sh +24 -12
- package/scripts/lib/daemon-poll.sh +37 -25
- package/scripts/lib/daemon-state.sh +115 -23
- package/scripts/lib/daemon-triage.sh +30 -8
- package/scripts/lib/fleet-failover.sh +63 -0
- package/scripts/lib/helpers.sh +30 -6
- package/scripts/lib/pipeline-detection.sh +2 -2
- package/scripts/lib/pipeline-github.sh +9 -9
- package/scripts/lib/pipeline-intelligence.sh +85 -35
- package/scripts/lib/pipeline-quality-checks.sh +16 -16
- package/scripts/lib/pipeline-quality.sh +1 -1
- package/scripts/lib/pipeline-stages.sh +242 -28
- package/scripts/lib/pipeline-state.sh +40 -4
- package/scripts/lib/test-helpers.sh +247 -0
- package/scripts/postinstall.mjs +3 -11
- package/scripts/sw +10 -4
- package/scripts/sw-activity.sh +1 -11
- package/scripts/sw-adaptive.sh +109 -85
- package/scripts/sw-adversarial.sh +4 -14
- package/scripts/sw-architecture-enforcer.sh +1 -11
- package/scripts/sw-auth.sh +8 -17
- package/scripts/sw-autonomous.sh +111 -49
- package/scripts/sw-changelog.sh +1 -11
- package/scripts/sw-checkpoint.sh +144 -20
- package/scripts/sw-ci.sh +2 -12
- package/scripts/sw-cleanup.sh +13 -17
- package/scripts/sw-code-review.sh +16 -36
- package/scripts/sw-connect.sh +5 -12
- package/scripts/sw-context.sh +9 -26
- package/scripts/sw-cost.sh +6 -16
- package/scripts/sw-daemon.sh +75 -70
- package/scripts/sw-dashboard.sh +57 -17
- package/scripts/sw-db.sh +506 -15
- package/scripts/sw-decompose.sh +1 -11
- package/scripts/sw-deps.sh +15 -25
- package/scripts/sw-developer-simulation.sh +1 -11
- package/scripts/sw-discovery.sh +112 -30
- package/scripts/sw-doc-fleet.sh +7 -17
- package/scripts/sw-docs-agent.sh +6 -16
- package/scripts/sw-docs.sh +4 -12
- package/scripts/sw-doctor.sh +134 -43
- package/scripts/sw-dora.sh +11 -19
- package/scripts/sw-durable.sh +35 -52
- package/scripts/sw-e2e-orchestrator.sh +11 -27
- package/scripts/sw-eventbus.sh +115 -115
- package/scripts/sw-evidence.sh +114 -30
- package/scripts/sw-feedback.sh +3 -13
- package/scripts/sw-fix.sh +2 -20
- package/scripts/sw-fleet-discover.sh +1 -11
- package/scripts/sw-fleet-viz.sh +10 -18
- package/scripts/sw-fleet.sh +13 -17
- package/scripts/sw-github-app.sh +6 -16
- package/scripts/sw-github-checks.sh +1 -11
- package/scripts/sw-github-deploy.sh +1 -11
- package/scripts/sw-github-graphql.sh +2 -12
- package/scripts/sw-guild.sh +1 -11
- package/scripts/sw-heartbeat.sh +49 -12
- package/scripts/sw-hygiene.sh +45 -43
- package/scripts/sw-incident.sh +48 -74
- package/scripts/sw-init.sh +35 -37
- package/scripts/sw-instrument.sh +1 -11
- package/scripts/sw-intelligence.sh +362 -51
- package/scripts/sw-jira.sh +5 -14
- package/scripts/sw-launchd.sh +2 -12
- package/scripts/sw-linear.sh +8 -17
- package/scripts/sw-logs.sh +4 -12
- package/scripts/sw-loop.sh +641 -90
- package/scripts/sw-memory.sh +243 -17
- package/scripts/sw-mission-control.sh +2 -12
- package/scripts/sw-model-router.sh +73 -34
- package/scripts/sw-otel.sh +11 -21
- package/scripts/sw-oversight.sh +1 -11
- package/scripts/sw-patrol-meta.sh +5 -11
- package/scripts/sw-pipeline-composer.sh +7 -17
- package/scripts/sw-pipeline-vitals.sh +1 -11
- package/scripts/sw-pipeline.sh +478 -122
- package/scripts/sw-pm.sh +2 -12
- package/scripts/sw-pr-lifecycle.sh +27 -25
- package/scripts/sw-predictive.sh +16 -22
- package/scripts/sw-prep.sh +6 -16
- package/scripts/sw-ps.sh +1 -11
- package/scripts/sw-public-dashboard.sh +2 -12
- package/scripts/sw-quality.sh +77 -10
- package/scripts/sw-reaper.sh +1 -11
- package/scripts/sw-recruit.sh +15 -25
- package/scripts/sw-regression.sh +11 -21
- package/scripts/sw-release-manager.sh +19 -28
- package/scripts/sw-release.sh +8 -16
- package/scripts/sw-remote.sh +1 -11
- package/scripts/sw-replay.sh +48 -44
- package/scripts/sw-retro.sh +70 -92
- package/scripts/sw-review-rerun.sh +1 -1
- package/scripts/sw-scale.sh +109 -32
- package/scripts/sw-security-audit.sh +12 -22
- package/scripts/sw-self-optimize.sh +239 -23
- package/scripts/sw-session.sh +3 -13
- package/scripts/sw-setup.sh +8 -18
- package/scripts/sw-standup.sh +5 -15
- package/scripts/sw-status.sh +32 -23
- package/scripts/sw-strategic.sh +129 -13
- package/scripts/sw-stream.sh +1 -11
- package/scripts/sw-swarm.sh +76 -36
- package/scripts/sw-team-stages.sh +10 -20
- package/scripts/sw-templates.sh +4 -14
- package/scripts/sw-testgen.sh +3 -13
- package/scripts/sw-tmux-pipeline.sh +1 -19
- package/scripts/sw-tmux-role-color.sh +0 -10
- package/scripts/sw-tmux-status.sh +3 -11
- package/scripts/sw-tmux.sh +2 -20
- package/scripts/sw-trace.sh +1 -19
- package/scripts/sw-tracker-github.sh +0 -10
- package/scripts/sw-tracker-jira.sh +1 -11
- package/scripts/sw-tracker-linear.sh +1 -11
- package/scripts/sw-tracker.sh +7 -24
- package/scripts/sw-triage.sh +24 -34
- package/scripts/sw-upgrade.sh +5 -23
- package/scripts/sw-ux.sh +1 -19
- package/scripts/sw-webhook.sh +18 -32
- package/scripts/sw-widgets.sh +3 -21
- package/scripts/sw-worktree.sh +11 -27
- package/scripts/update-homebrew-sha.sh +67 -0
- package/templates/pipelines/tdd.json +72 -0
- 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-
|
|
16
|
-
<img src="https://img.shields.io/badge/version-
|
|
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
|
|
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
|
|
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.
|
|
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
|
|
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.
|
|
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),
|
|
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 #
|
|
573
|
+
npm test # 125 shell suites + 16 dashboard test files (141 total), E2E system test
|
|
569
574
|
```
|
|
570
575
|
|
|
571
576
|
## License
|
package/completions/_shipwright
CHANGED
|
@@ -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
|
|
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
|
|
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
|
|
@@ -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
|
+
}
|
package/config/policy.json
CHANGED
|
@@ -35,28 +35,23 @@
|
|
|
35
35
|
"critical": {
|
|
36
36
|
"requiredChecks": [
|
|
37
37
|
"risk-policy-gate",
|
|
38
|
-
"
|
|
39
|
-
"
|
|
38
|
+
"test",
|
|
39
|
+
"smoke",
|
|
40
40
|
"platform-health",
|
|
41
|
-
"
|
|
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", "
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
|
121
|
+
"command": "bash scripts/sw-pipeline.sh status",
|
|
127
122
|
"expectedExitCode": 0,
|
|
128
|
-
"assertions": ["
|
|
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
|
|
135
|
+
"command": "bash scripts/sw-db.sh health",
|
|
141
136
|
"expectedExitCode": 0,
|
|
142
|
-
"assertions": ["schema-valid", "
|
|
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
|
+
}
|