shipwright-cli 3.2.0 → 3.3.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 (279) hide show
  1. package/.claude/agents/code-reviewer.md +2 -0
  2. package/.claude/agents/devops-engineer.md +2 -0
  3. package/.claude/agents/doc-fleet-agent.md +2 -0
  4. package/.claude/agents/pipeline-agent.md +2 -0
  5. package/.claude/agents/shell-script-specialist.md +2 -0
  6. package/.claude/agents/test-specialist.md +2 -0
  7. package/.claude/hooks/agent-crash-capture.sh +32 -0
  8. package/.claude/hooks/post-tool-use.sh +3 -2
  9. package/.claude/hooks/pre-tool-use.sh +35 -3
  10. package/README.md +4 -4
  11. package/claude-code/hooks/config-change.sh +18 -0
  12. package/claude-code/hooks/instructions-reloaded.sh +7 -0
  13. package/claude-code/hooks/worktree-create.sh +25 -0
  14. package/claude-code/hooks/worktree-remove.sh +20 -0
  15. package/config/code-constitution.json +130 -0
  16. package/dashboard/middleware/auth.ts +134 -0
  17. package/dashboard/middleware/constants.ts +21 -0
  18. package/dashboard/public/index.html +2 -6
  19. package/dashboard/public/styles.css +100 -97
  20. package/dashboard/routes/auth.ts +38 -0
  21. package/dashboard/server.ts +66 -25
  22. package/dashboard/services/config.ts +26 -0
  23. package/dashboard/services/db.ts +118 -0
  24. package/dashboard/src/canvas/pixel-agent.ts +298 -0
  25. package/dashboard/src/canvas/pixel-sprites.ts +440 -0
  26. package/dashboard/src/canvas/shipyard-effects.ts +367 -0
  27. package/dashboard/src/canvas/shipyard-scene.ts +616 -0
  28. package/dashboard/src/canvas/submarine-layout.ts +267 -0
  29. package/dashboard/src/components/header.ts +8 -7
  30. package/dashboard/src/core/router.ts +1 -0
  31. package/dashboard/src/design/submarine-theme.ts +253 -0
  32. package/dashboard/src/main.ts +2 -0
  33. package/dashboard/src/types/api.ts +2 -1
  34. package/dashboard/src/views/activity.ts +2 -1
  35. package/dashboard/src/views/shipyard.ts +39 -0
  36. package/dashboard/types/index.ts +166 -0
  37. package/docs/plans/2026-02-28-compound-audit-and-shipyard-design.md +186 -0
  38. package/docs/plans/2026-02-28-skipper-shipwright-implementation-plan.md +1182 -0
  39. package/docs/plans/2026-02-28-skipper-shipwright-integration-design.md +531 -0
  40. package/docs/plans/2026-03-01-ai-powered-skill-injection-design.md +298 -0
  41. package/docs/plans/2026-03-01-ai-powered-skill-injection-plan.md +1109 -0
  42. package/docs/plans/2026-03-01-capabilities-cleanup-plan.md +658 -0
  43. package/docs/plans/2026-03-01-clean-architecture-plan.md +924 -0
  44. package/docs/plans/2026-03-01-compound-audit-cascade-design.md +191 -0
  45. package/docs/plans/2026-03-01-compound-audit-cascade-plan.md +921 -0
  46. package/docs/plans/2026-03-01-deep-integration-plan.md +851 -0
  47. package/docs/plans/2026-03-01-pipeline-audit-trail-design.md +145 -0
  48. package/docs/plans/2026-03-01-pipeline-audit-trail-plan.md +770 -0
  49. package/docs/plans/2026-03-01-refined-depths-brand-design.md +382 -0
  50. package/docs/plans/2026-03-01-refined-depths-implementation.md +599 -0
  51. package/docs/plans/2026-03-01-skipper-kernel-integration-design.md +203 -0
  52. package/docs/plans/2026-03-01-unified-platform-design.md +272 -0
  53. package/docs/plans/2026-03-07-claude-code-feature-integration-design.md +189 -0
  54. package/docs/plans/2026-03-07-claude-code-feature-integration-plan.md +1165 -0
  55. package/docs/research/BACKLOG_QUICK_REFERENCE.md +352 -0
  56. package/docs/research/CUTTING_EDGE_RESEARCH_2026.md +546 -0
  57. package/docs/research/RESEARCH_INDEX.md +439 -0
  58. package/docs/research/RESEARCH_SOURCES.md +440 -0
  59. package/docs/research/RESEARCH_SUMMARY.txt +275 -0
  60. package/docs/superpowers/specs/2026-03-10-pipeline-quality-revolution-design.md +341 -0
  61. package/package.json +2 -2
  62. package/scripts/lib/adaptive-model.sh +427 -0
  63. package/scripts/lib/adaptive-timeout.sh +316 -0
  64. package/scripts/lib/audit-trail.sh +309 -0
  65. package/scripts/lib/auto-recovery.sh +471 -0
  66. package/scripts/lib/bandit-selector.sh +431 -0
  67. package/scripts/lib/bootstrap.sh +104 -2
  68. package/scripts/lib/causal-graph.sh +455 -0
  69. package/scripts/lib/compat.sh +126 -0
  70. package/scripts/lib/compound-audit.sh +337 -0
  71. package/scripts/lib/constitutional.sh +454 -0
  72. package/scripts/lib/context-budget.sh +359 -0
  73. package/scripts/lib/convergence.sh +594 -0
  74. package/scripts/lib/cost-optimizer.sh +634 -0
  75. package/scripts/lib/daemon-adaptive.sh +10 -0
  76. package/scripts/lib/daemon-dispatch.sh +106 -17
  77. package/scripts/lib/daemon-failure.sh +34 -4
  78. package/scripts/lib/daemon-patrol.sh +23 -2
  79. package/scripts/lib/daemon-poll-github.sh +361 -0
  80. package/scripts/lib/daemon-poll-health.sh +299 -0
  81. package/scripts/lib/daemon-poll.sh +27 -611
  82. package/scripts/lib/daemon-state.sh +112 -66
  83. package/scripts/lib/daemon-triage.sh +10 -0
  84. package/scripts/lib/dod-scorecard.sh +442 -0
  85. package/scripts/lib/error-actionability.sh +300 -0
  86. package/scripts/lib/formal-spec.sh +461 -0
  87. package/scripts/lib/helpers.sh +177 -4
  88. package/scripts/lib/intent-analysis.sh +409 -0
  89. package/scripts/lib/loop-convergence.sh +350 -0
  90. package/scripts/lib/loop-iteration.sh +682 -0
  91. package/scripts/lib/loop-progress.sh +48 -0
  92. package/scripts/lib/loop-restart.sh +185 -0
  93. package/scripts/lib/memory-effectiveness.sh +506 -0
  94. package/scripts/lib/mutation-executor.sh +352 -0
  95. package/scripts/lib/outcome-feedback.sh +521 -0
  96. package/scripts/lib/pipeline-cli.sh +336 -0
  97. package/scripts/lib/pipeline-commands.sh +1216 -0
  98. package/scripts/lib/pipeline-detection.sh +100 -2
  99. package/scripts/lib/pipeline-execution.sh +897 -0
  100. package/scripts/lib/pipeline-github.sh +28 -3
  101. package/scripts/lib/pipeline-intelligence-compound.sh +431 -0
  102. package/scripts/lib/pipeline-intelligence-scoring.sh +407 -0
  103. package/scripts/lib/pipeline-intelligence-skip.sh +181 -0
  104. package/scripts/lib/pipeline-intelligence.sh +100 -1136
  105. package/scripts/lib/pipeline-quality-bash-compat.sh +182 -0
  106. package/scripts/lib/pipeline-quality-checks.sh +17 -715
  107. package/scripts/lib/pipeline-quality-gates.sh +563 -0
  108. package/scripts/lib/pipeline-stages-build.sh +730 -0
  109. package/scripts/lib/pipeline-stages-delivery.sh +965 -0
  110. package/scripts/lib/pipeline-stages-intake.sh +1133 -0
  111. package/scripts/lib/pipeline-stages-monitor.sh +407 -0
  112. package/scripts/lib/pipeline-stages-review.sh +1022 -0
  113. package/scripts/lib/pipeline-stages.sh +59 -2929
  114. package/scripts/lib/pipeline-state.sh +36 -5
  115. package/scripts/lib/pipeline-util.sh +487 -0
  116. package/scripts/lib/policy-learner.sh +438 -0
  117. package/scripts/lib/process-reward.sh +493 -0
  118. package/scripts/lib/project-detect.sh +649 -0
  119. package/scripts/lib/quality-profile.sh +334 -0
  120. package/scripts/lib/recruit-commands.sh +885 -0
  121. package/scripts/lib/recruit-learning.sh +739 -0
  122. package/scripts/lib/recruit-roles.sh +648 -0
  123. package/scripts/lib/reward-aggregator.sh +458 -0
  124. package/scripts/lib/rl-optimizer.sh +362 -0
  125. package/scripts/lib/root-cause.sh +427 -0
  126. package/scripts/lib/scope-enforcement.sh +445 -0
  127. package/scripts/lib/session-restart.sh +493 -0
  128. package/scripts/lib/skill-memory.sh +300 -0
  129. package/scripts/lib/skill-registry.sh +775 -0
  130. package/scripts/lib/spec-driven.sh +476 -0
  131. package/scripts/lib/test-helpers.sh +18 -7
  132. package/scripts/lib/test-holdout.sh +429 -0
  133. package/scripts/lib/test-optimizer.sh +511 -0
  134. package/scripts/shipwright-file-suggest.sh +45 -0
  135. package/scripts/skills/adversarial-quality.md +61 -0
  136. package/scripts/skills/api-design.md +44 -0
  137. package/scripts/skills/architecture-design.md +50 -0
  138. package/scripts/skills/brainstorming.md +43 -0
  139. package/scripts/skills/data-pipeline.md +44 -0
  140. package/scripts/skills/deploy-safety.md +64 -0
  141. package/scripts/skills/documentation.md +38 -0
  142. package/scripts/skills/frontend-design.md +45 -0
  143. package/scripts/skills/generated/.gitkeep +0 -0
  144. package/scripts/skills/generated/_refinements/.gitkeep +0 -0
  145. package/scripts/skills/generated/_refinements/adversarial-quality.patch.md +3 -0
  146. package/scripts/skills/generated/_refinements/architecture-design.patch.md +3 -0
  147. package/scripts/skills/generated/_refinements/brainstorming.patch.md +3 -0
  148. package/scripts/skills/generated/cli-version-management.md +29 -0
  149. package/scripts/skills/generated/collection-system-validation.md +99 -0
  150. package/scripts/skills/generated/large-scale-c-refactoring-coordination.md +97 -0
  151. package/scripts/skills/generated/pattern-matching-similarity-scoring.md +195 -0
  152. package/scripts/skills/generated/test-parallelization-detection.md +65 -0
  153. package/scripts/skills/observability.md +79 -0
  154. package/scripts/skills/performance.md +48 -0
  155. package/scripts/skills/pr-quality.md +49 -0
  156. package/scripts/skills/product-thinking.md +43 -0
  157. package/scripts/skills/security-audit.md +49 -0
  158. package/scripts/skills/systematic-debugging.md +40 -0
  159. package/scripts/skills/testing-strategy.md +47 -0
  160. package/scripts/skills/two-stage-review.md +52 -0
  161. package/scripts/skills/validation-thoroughness.md +55 -0
  162. package/scripts/sw +9 -3
  163. package/scripts/sw-activity.sh +9 -2
  164. package/scripts/sw-adaptive.sh +2 -1
  165. package/scripts/sw-adversarial.sh +2 -1
  166. package/scripts/sw-architecture-enforcer.sh +3 -1
  167. package/scripts/sw-auth.sh +12 -2
  168. package/scripts/sw-autonomous.sh +5 -1
  169. package/scripts/sw-changelog.sh +4 -1
  170. package/scripts/sw-checkpoint.sh +2 -1
  171. package/scripts/sw-ci.sh +5 -1
  172. package/scripts/sw-cleanup.sh +4 -26
  173. package/scripts/sw-code-review.sh +10 -4
  174. package/scripts/sw-connect.sh +2 -1
  175. package/scripts/sw-context.sh +2 -1
  176. package/scripts/sw-cost.sh +48 -3
  177. package/scripts/sw-daemon.sh +66 -9
  178. package/scripts/sw-dashboard.sh +3 -1
  179. package/scripts/sw-db.sh +59 -16
  180. package/scripts/sw-decide.sh +8 -2
  181. package/scripts/sw-decompose.sh +360 -17
  182. package/scripts/sw-deps.sh +4 -1
  183. package/scripts/sw-developer-simulation.sh +4 -1
  184. package/scripts/sw-discovery.sh +325 -2
  185. package/scripts/sw-doc-fleet.sh +4 -1
  186. package/scripts/sw-docs-agent.sh +3 -1
  187. package/scripts/sw-docs.sh +2 -1
  188. package/scripts/sw-doctor.sh +453 -2
  189. package/scripts/sw-dora.sh +4 -1
  190. package/scripts/sw-durable.sh +4 -3
  191. package/scripts/sw-e2e-orchestrator.sh +17 -16
  192. package/scripts/sw-eventbus.sh +7 -1
  193. package/scripts/sw-evidence.sh +364 -12
  194. package/scripts/sw-feedback.sh +550 -9
  195. package/scripts/sw-fix.sh +20 -1
  196. package/scripts/sw-fleet-discover.sh +6 -2
  197. package/scripts/sw-fleet-viz.sh +4 -1
  198. package/scripts/sw-fleet.sh +5 -1
  199. package/scripts/sw-github-app.sh +16 -3
  200. package/scripts/sw-github-checks.sh +3 -2
  201. package/scripts/sw-github-deploy.sh +3 -2
  202. package/scripts/sw-github-graphql.sh +18 -7
  203. package/scripts/sw-guild.sh +5 -1
  204. package/scripts/sw-heartbeat.sh +5 -30
  205. package/scripts/sw-hello.sh +67 -0
  206. package/scripts/sw-hygiene.sh +6 -1
  207. package/scripts/sw-incident.sh +265 -1
  208. package/scripts/sw-init.sh +18 -2
  209. package/scripts/sw-instrument.sh +10 -2
  210. package/scripts/sw-intelligence.sh +42 -6
  211. package/scripts/sw-jira.sh +5 -1
  212. package/scripts/sw-launchd.sh +2 -1
  213. package/scripts/sw-linear.sh +4 -1
  214. package/scripts/sw-logs.sh +4 -1
  215. package/scripts/sw-loop.sh +432 -1128
  216. package/scripts/sw-memory.sh +356 -2
  217. package/scripts/sw-mission-control.sh +6 -1
  218. package/scripts/sw-model-router.sh +481 -26
  219. package/scripts/sw-otel.sh +13 -4
  220. package/scripts/sw-oversight.sh +14 -5
  221. package/scripts/sw-patrol-meta.sh +334 -0
  222. package/scripts/sw-pipeline-composer.sh +5 -1
  223. package/scripts/sw-pipeline-vitals.sh +2 -1
  224. package/scripts/sw-pipeline.sh +53 -2664
  225. package/scripts/sw-pm.sh +12 -5
  226. package/scripts/sw-pr-lifecycle.sh +2 -1
  227. package/scripts/sw-predictive.sh +7 -1
  228. package/scripts/sw-prep.sh +185 -2
  229. package/scripts/sw-ps.sh +5 -25
  230. package/scripts/sw-public-dashboard.sh +15 -3
  231. package/scripts/sw-quality.sh +2 -1
  232. package/scripts/sw-reaper.sh +8 -25
  233. package/scripts/sw-recruit.sh +156 -2303
  234. package/scripts/sw-regression.sh +19 -12
  235. package/scripts/sw-release-manager.sh +3 -1
  236. package/scripts/sw-release.sh +4 -1
  237. package/scripts/sw-remote.sh +3 -1
  238. package/scripts/sw-replay.sh +7 -1
  239. package/scripts/sw-retro.sh +158 -1
  240. package/scripts/sw-review-rerun.sh +3 -1
  241. package/scripts/sw-scale.sh +10 -3
  242. package/scripts/sw-security-audit.sh +6 -1
  243. package/scripts/sw-self-optimize.sh +6 -3
  244. package/scripts/sw-session.sh +9 -3
  245. package/scripts/sw-setup.sh +3 -1
  246. package/scripts/sw-stall-detector.sh +406 -0
  247. package/scripts/sw-standup.sh +15 -7
  248. package/scripts/sw-status.sh +3 -1
  249. package/scripts/sw-strategic.sh +4 -1
  250. package/scripts/sw-stream.sh +7 -1
  251. package/scripts/sw-swarm.sh +18 -6
  252. package/scripts/sw-team-stages.sh +13 -6
  253. package/scripts/sw-templates.sh +5 -29
  254. package/scripts/sw-testgen.sh +7 -1
  255. package/scripts/sw-tmux-pipeline.sh +4 -1
  256. package/scripts/sw-tmux-role-color.sh +2 -0
  257. package/scripts/sw-tmux-status.sh +1 -1
  258. package/scripts/sw-tmux.sh +3 -1
  259. package/scripts/sw-trace.sh +3 -1
  260. package/scripts/sw-tracker-github.sh +3 -0
  261. package/scripts/sw-tracker-jira.sh +3 -0
  262. package/scripts/sw-tracker-linear.sh +3 -0
  263. package/scripts/sw-tracker.sh +3 -1
  264. package/scripts/sw-triage.sh +2 -1
  265. package/scripts/sw-upgrade.sh +3 -1
  266. package/scripts/sw-ux.sh +5 -2
  267. package/scripts/sw-webhook.sh +3 -1
  268. package/scripts/sw-widgets.sh +3 -1
  269. package/scripts/sw-worktree.sh +15 -3
  270. package/scripts/test-skill-injection.sh +1233 -0
  271. package/templates/pipelines/autonomous.json +27 -3
  272. package/templates/pipelines/cost-aware.json +34 -8
  273. package/templates/pipelines/deployed.json +12 -0
  274. package/templates/pipelines/enterprise.json +12 -0
  275. package/templates/pipelines/fast.json +6 -0
  276. package/templates/pipelines/full.json +27 -3
  277. package/templates/pipelines/hotfix.json +6 -0
  278. package/templates/pipelines/standard.json +12 -0
  279. package/templates/pipelines/tdd.json +12 -0
@@ -0,0 +1,531 @@
1
+ # Skipper + Shipwright Integration Design
2
+
3
+ **Date**: 2026-02-28
4
+ **Status**: Approved
5
+ **Direction**: Shipwright as a native Skipper Hand
6
+ **Depth**: Deep integration — full port to Rust
7
+ **Location**: Fork of Skipper
8
+
9
+ ## Context
10
+
11
+ Shipwright orchestrates autonomous Claude Code agent teams for software delivery (Issue → Pipeline → PR → Deploy). Skipper is a Rust-based Agent Operating System that runs autonomous Hands on schedules with WASM sandboxing, 40 channel adapters, and 16 security layers.
12
+
13
+ This design ports Shipwright's complete feature set into a single `skipper-shipwright` crate within a fork of Skipper, creating a "Software Engineering Hand" that leverages Skipper's kernel, memory, channels, and existing Hands for cross-pollinated intelligence.
14
+
15
+ ## Why This Combination
16
+
17
+ | Shipwright Brings | Skipper Brings |
18
+ | ----------------------------------------------------- | ---------------------------------------------------- |
19
+ | 12-stage delivery pipeline | Rust kernel with scheduling, RBAC, metering |
20
+ | Decision engine with autonomy tiers | WASM sandbox with dual metering |
21
+ | Failure pattern memory + learning | SQLite + vector embeddings for semantic search |
22
+ | GitHub API integration (GraphQL, Checks, Deployments) | 40 channel adapters (Slack, Discord, Telegram, etc.) |
23
+ | DORA metrics + self-optimization | 76+ REST/WS/SSE API endpoints |
24
+ | Multi-repo fleet orchestration | A2A protocol for cross-instance agents |
25
+ | Build loop with self-healing | Loop guard detection (SHA256) |
26
+
27
+ Key differentiator: Skipper's Collector, Researcher, and Predictor Hands become first-class signal sources for Shipwright's decision engine — OSINT-grade analysis, cross-referenced research, and calibrated forecasting feeding directly into what-to-build decisions.
28
+
29
+ ## Crate Structure
30
+
31
+ ```
32
+ skipper/
33
+ ├── crates/
34
+ │ └── skipper-shipwright/
35
+ │ ├── Cargo.toml
36
+ │ ├── src/
37
+ │ │ ├── lib.rs # Public API, re-exports
38
+ │ │ ├── hand.rs # HandDefinition, activation, lifecycle
39
+ │ │ ├── config.rs # ShipwrightConfig types, TOML parsing
40
+ │ │ ├── pipeline/
41
+ │ │ │ ├── mod.rs # Pipeline engine
42
+ │ │ │ ├── stages.rs # 12 stage implementations
43
+ │ │ │ ├── templates.rs # fast/standard/full/hotfix/autonomous/cost-aware
44
+ │ │ │ ├── composer.rs # Dynamic pipeline composition
45
+ │ │ │ └── self_healing.rs # Build loop with retry, backtrack, convergence
46
+ │ │ ├── decision/
47
+ │ │ │ ├── mod.rs # Decision engine orchestrator
48
+ │ │ │ ├── signals.rs # 18 collectors + Skipper Hand signals
49
+ │ │ │ ├── scoring.rs # Value scoring (impact, urgency, effort, confidence, risk)
50
+ │ │ │ └── autonomy.rs # Tier enforcement, rate limiting, halt/resume
51
+ │ │ ├── memory/
52
+ │ │ │ ├── mod.rs # Memory system
53
+ │ │ │ ├── patterns.rs # Failure pattern storage & retrieval
54
+ │ │ │ ├── architecture.rs # Architecture rules & enforcement
55
+ │ │ │ └── learning.rs # A/B testing, outcome learning, weight adjustment
56
+ │ │ ├── fleet/
57
+ │ │ │ ├── mod.rs # Multi-repo orchestration
58
+ │ │ │ ├── daemon.rs # Issue watcher, auto-scaling, worker pool
59
+ │ │ │ ├── dispatch.rs # Job spawning, claim serialization
60
+ │ │ │ └── patrol.rs # Security, deps, coverage, DORA patrol checks
61
+ │ │ ├── github/
62
+ │ │ │ ├── mod.rs # GitHub API client
63
+ │ │ │ ├── graphql.rs # Cached GraphQL queries
64
+ │ │ │ ├── checks.rs # Check Runs API
65
+ │ │ │ ├── deployments.rs # Deployments API
66
+ │ │ │ └── pr.rs # PR lifecycle, reviewer selection
67
+ │ │ └── intelligence/
68
+ │ │ ├── mod.rs # Analysis engine
69
+ │ │ ├── prediction.rs # Risk scoring, anomaly detection
70
+ │ │ ├── dora.rs # DORA metrics
71
+ │ │ └── optimization.rs # Self-tuning, adaptive cycles
72
+ │ ├── agents/
73
+ │ │ └── shipwright/
74
+ │ │ ├── HAND.toml # Hand manifest
75
+ │ │ ├── SKILL.md # Domain expertise
76
+ │ │ └── system_prompt.md # Multi-phase operational playbook
77
+ │ └── tests/
78
+ │ ├── pipeline_tests.rs
79
+ │ ├── decision_tests.rs
80
+ │ ├── memory_tests.rs
81
+ │ ├── fleet_tests.rs
82
+ │ └── integration_tests.rs
83
+ ```
84
+
85
+ ## Pipeline Engine
86
+
87
+ ### Stage Mapping
88
+
89
+ 12 stages execute as Skipper workflow steps with sequential, conditional, and loop support:
90
+
91
+ ```
92
+ intake → plan → design → build ⟲ test → review → compound_quality → pr → merge → deploy → validate → monitor
93
+ ↑ │
94
+ └─────────┘ (self-healing loop)
95
+ ```
96
+
97
+ ### Key Types
98
+
99
+ ```rust
100
+ pub enum Stage {
101
+ Intake, Plan, Design, Build, Test, Review,
102
+ CompoundQuality, Pr, Merge, Deploy, Validate, Monitor,
103
+ }
104
+
105
+ pub struct Pipeline {
106
+ pub id: String,
107
+ pub issue: Option<u64>,
108
+ pub goal: String,
109
+ pub template: PipelineTemplate,
110
+ pub stages: Vec<StageConfig>,
111
+ pub state: PipelineState,
112
+ pub artifacts_dir: PathBuf,
113
+ }
114
+
115
+ pub struct StageConfig {
116
+ pub stage: Stage,
117
+ pub enabled: bool,
118
+ pub gate: Gate, // Auto or Approve
119
+ pub max_iterations: u32,
120
+ pub model: ModelChoice, // haiku/sonnet/opus routing
121
+ pub timeout_seconds: u64,
122
+ }
123
+
124
+ pub enum PipelineState {
125
+ Pending,
126
+ Running { current_stage: Stage, iteration: u32 },
127
+ Paused { at_stage: Stage, reason: String },
128
+ Completed { pr_url: Option<String> },
129
+ Failed { at_stage: Stage, error: String, retries: u32 },
130
+ }
131
+ ```
132
+
133
+ ### Build Loop & Self-Healing
134
+
135
+ ```rust
136
+ pub struct BuildLoop {
137
+ pub max_iterations: u32,
138
+ pub max_restarts: u32,
139
+ pub fast_test_cmd: Option<String>,
140
+ pub fast_test_interval: u32,
141
+ pub convergence_window: u32,
142
+ pub progress: ProgressState,
143
+ }
144
+
145
+ pub enum BuildOutcome {
146
+ TestsPassing,
147
+ Converging { issues_remaining: u32 },
148
+ Diverging,
149
+ Exhausted,
150
+ }
151
+ ```
152
+
153
+ Kernel's dual metering (fuel + epoch interruption) replaces bash timeouts. Skipper's loop guard detection (SHA256 of tool calls) replaces manual convergence checking.
154
+
155
+ ### Templates
156
+
157
+ Six templates stored as Rust constants:
158
+
159
+ | Template | Stages | Gates |
160
+ | ---------- | -------------------------- | --------------------------------- |
161
+ | Fast | intake → build → test → pr | all auto |
162
+ | Standard | + plan, review | approve: plan, review, pr |
163
+ | Full | all 12 stages | approve: plan, review, pr, deploy |
164
+ | Hotfix | intake → build → test → pr | all auto, priority lane |
165
+ | Autonomous | all stages | all auto |
166
+ | CostAware | all stages | model routing by complexity |
167
+
168
+ ## Decision Engine
169
+
170
+ ### Signal Collectors
171
+
172
+ 18 built-in collectors plus Skipper Hand cross-pollination:
173
+
174
+ ```rust
175
+ pub trait SignalCollector: Send + Sync {
176
+ fn name(&self) -> &str;
177
+ fn collect(&self, ctx: &RepoContext) -> Result<Vec<Candidate>>;
178
+ }
179
+
180
+ pub struct Candidate {
181
+ pub id: String,
182
+ pub signal: SignalType,
183
+ pub category: Category,
184
+ pub title: String,
185
+ pub description: String,
186
+ pub evidence: serde_json::Value,
187
+ pub risk_score: u8,
188
+ pub confidence: f64,
189
+ pub dedup_key: String,
190
+ }
191
+
192
+ pub enum SignalType {
193
+ Security, Dependency, Coverage, DeadCode, Performance,
194
+ Architecture, Dora, Documentation, Failure,
195
+ SkipperHand, // Signals from Collector, Researcher, Predictor
196
+ }
197
+ ```
198
+
199
+ ### Skipper Hand Cross-Pollination
200
+
201
+ ```rust
202
+ pub struct HandSignalCollector {
203
+ kernel: Arc<KernelHandle>,
204
+ }
205
+
206
+ impl SignalCollector for HandSignalCollector {
207
+ fn collect(&self, ctx: &RepoContext) -> Result<Vec<Candidate>> {
208
+ let mut candidates = vec![];
209
+
210
+ // Collector Hand → OSINT on dependencies, CVE databases
211
+ if let Some(collector) = self.kernel.get_hand("collector") {
212
+ let intel = collector.query("security vulnerabilities for {}", ctx.dependencies)?;
213
+ candidates.extend(parse_collector_findings(intel));
214
+ }
215
+
216
+ // Researcher Hand → Cross-referenced analysis
217
+ if let Some(researcher) = self.kernel.get_hand("researcher") {
218
+ let report = researcher.query("architecture anti-patterns in {}", ctx.repo_url)?;
219
+ candidates.extend(parse_researcher_findings(report));
220
+ }
221
+
222
+ // Predictor Hand → Forecasting failure probability
223
+ if let Some(predictor) = self.kernel.get_hand("predictor") {
224
+ let forecast = predictor.query("probability of regression in {}", ctx.hot_files)?;
225
+ candidates.extend(parse_predictor_findings(forecast));
226
+ }
227
+
228
+ Ok(candidates)
229
+ }
230
+ }
231
+ ```
232
+
233
+ ### Scoring & Autonomy Tiers
234
+
235
+ ```rust
236
+ pub struct ScoringWeights {
237
+ pub impact: f64, // 0.30
238
+ pub urgency: f64, // 0.25
239
+ pub effort: f64, // 0.20
240
+ pub confidence: f64, // 0.15
241
+ pub risk: f64, // 0.10
242
+ }
243
+
244
+ pub enum AutonomyTier {
245
+ Auto, // Create issue + spawn pipeline immediately
246
+ Propose, // Create issue, wait for approval
247
+ Draft, // Write to drafts only
248
+ }
249
+
250
+ pub struct DecisionLimits {
251
+ pub max_issues_per_day: u32, // 15
252
+ pub max_cost_per_day_usd: f64, // 25.0
253
+ pub cooldown_seconds: u64, // 300
254
+ pub halt_after_failures: u32, // 3
255
+ }
256
+ ```
257
+
258
+ ### Outcome Learning
259
+
260
+ EMA-based weight adjustment stored in Skipper's SQLite:
261
+
262
+ ```rust
263
+ pub struct Outcome {
264
+ pub candidate_id: String,
265
+ pub predicted_score: f64,
266
+ pub actual_success: bool,
267
+ pub duration_minutes: u32,
268
+ pub cost_usd: f64,
269
+ pub signal_source: SignalType,
270
+ }
271
+ ```
272
+
273
+ After 10+ outcomes, weights auto-adjust per signal source.
274
+
275
+ ## Memory System
276
+
277
+ ### Architecture
278
+
279
+ Reuses Skipper's `MemoryStore` (SQLite + sqlite-vec) instead of JSONL:
280
+
281
+ ```rust
282
+ pub struct ShipwrightMemory {
283
+ store: Arc<skipper_memory::MemoryStore>,
284
+ }
285
+
286
+ pub struct FailurePattern {
287
+ pub repo: String,
288
+ pub stage: Stage,
289
+ pub error_class: String,
290
+ pub error_signature: String,
291
+ pub root_cause: String,
292
+ pub fix_applied: String,
293
+ pub fix_commit: Option<String>,
294
+ pub success: bool,
295
+ pub embedding: Vec<f32>,
296
+ }
297
+
298
+ pub struct ArchitectureRule {
299
+ pub repo: String,
300
+ pub layers: Vec<String>,
301
+ pub dependency_rules: Vec<DependencyRule>,
302
+ pub hotspots: HashMap<String, u32>,
303
+ pub conventions: Vec<String>,
304
+ }
305
+ ```
306
+
307
+ ### Semantic Search
308
+
309
+ Vector similarity search replaces keyword/TF-IDF matching:
310
+
311
+ ```rust
312
+ impl ShipwrightMemory {
313
+ pub fn search_similar_failures(
314
+ &self, error_text: &str, repo: &str, limit: usize,
315
+ ) -> Result<Vec<FailurePattern>> {
316
+ let query_embedding = self.store.embed(error_text)?;
317
+ self.store.vector_search("failure_patterns", &query_embedding, limit, Some(&[("repo", repo)]))
318
+ }
319
+
320
+ pub fn compose_context(&self, error: &str, repo: &str) -> String {
321
+ let patterns = self.search_similar_failures(error, repo, 3).unwrap_or_default();
322
+ patterns.iter().map(|p| {
323
+ format!("Previously fixed similar error:\n Cause: {}\n Fix: {}", p.root_cause, p.fix_applied)
324
+ }).collect::<Vec<_>>().join("\n\n")
325
+ }
326
+ }
327
+ ```
328
+
329
+ ### Cross-Hand Memory Sharing
330
+
331
+ All Hands access the same MemoryStore:
332
+
333
+ - Collector finds CVE → stores with embedding → Shipwright finds it during pipeline
334
+ - Predictor queries Shipwright outcomes for calibration
335
+ - Researcher stores architecture analysis → Shipwright enforces it
336
+
337
+ ### Migration
338
+
339
+ ```rust
340
+ pub fn migrate_jsonl_memory(jsonl_path: &Path, store: &MemoryStore) -> Result<u32> {
341
+ // Read JSONL → parse → embed → insert into SQLite
342
+ }
343
+ ```
344
+
345
+ ## Fleet & Daemon
346
+
347
+ ### Fleet Manager
348
+
349
+ ```rust
350
+ pub struct FleetManager {
351
+ kernel: Arc<KernelHandle>,
352
+ repos: Vec<RepoConfig>,
353
+ worker_pool: WorkerPool,
354
+ }
355
+
356
+ pub struct WorkerPool {
357
+ pub total_workers: u32,
358
+ pub min_per_repo: u32,
359
+ pub rebalance_interval: Duration,
360
+ pub scaling: ScalingStrategy,
361
+ }
362
+
363
+ pub enum ScalingStrategy {
364
+ Static { workers: u32 },
365
+ Auto { max_workers: u32, min_workers: u32, worker_mem_gb: u32, cost_per_job_usd: f64 },
366
+ }
367
+ ```
368
+
369
+ ### Daemon as Kernel-Scheduled Job
370
+
371
+ ```rust
372
+ impl FleetManager {
373
+ pub async fn poll_cycle(&self) -> Result<()> {
374
+ for repo in &self.repos {
375
+ let issues = self.github.list_issues(&repo, &repo.watch_labels).await?;
376
+ let new_issues = self.filter_unclaimed(issues)?;
377
+ let scored = self.triage_and_score(new_issues).await?;
378
+ for issue in scored {
379
+ if self.worker_pool.has_capacity(&repo) {
380
+ let agent_id = self.kernel.spawn_agent(
381
+ AgentConfig::from_pipeline(issue, repo)
382
+ ).await?;
383
+ self.worker_pool.claim(repo, agent_id)?;
384
+ }
385
+ }
386
+ }
387
+ Ok(())
388
+ }
389
+ }
390
+ ```
391
+
392
+ ### What the Kernel Replaces
393
+
394
+ | Shipwright Bash | Skipper Kernel |
395
+ | ------------------------------- | ------------------------------- |
396
+ | PID management + flock | Agent registry (atomic) |
397
+ | tmux pane isolation | WASM sandbox |
398
+ | File-based heartbeats | Kernel heartbeat monitor |
399
+ | `while true; sleep 60` | Cron scheduler |
400
+ | `claim_issue()` race conditions | Kernel agent spawn (serialized) |
401
+
402
+ ### Channel Notifications
403
+
404
+ Pipeline events push to configured channels automatically:
405
+
406
+ ```rust
407
+ impl Pipeline {
408
+ async fn notify(&self, event: PipelineEvent) {
409
+ self.kernel.send_channel_message(&self.notify_channels, &event.format()).await;
410
+ }
411
+ }
412
+ ```
413
+
414
+ 40 adapters available: Slack, Discord, Telegram, email, Teams, etc.
415
+
416
+ ## Configuration
417
+
418
+ Single `[shipwright]` section in `skipper.toml`:
419
+
420
+ ```toml
421
+ [shipwright]
422
+ enabled = true
423
+ default_template = "standard"
424
+
425
+ [shipwright.fleet]
426
+ poll_interval_seconds = 60
427
+ auto_scale = true
428
+ max_workers = 8
429
+
430
+ [shipwright.decision]
431
+ enabled = true
432
+ max_issues_per_day = 15
433
+ max_cost_per_day_usd = 25.0
434
+ outcome_learning = true
435
+
436
+ [shipwright.intelligence]
437
+ prediction_enabled = true
438
+ adversarial_enabled = false
439
+
440
+ [shipwright.github]
441
+ watch_labels = ["shipwright", "ready-to-build"]
442
+ auto_merge = false
443
+
444
+ [[shipwright.repos]]
445
+ path = "/home/user/projects/my-app"
446
+ owner = "myorg"
447
+ repo = "my-app"
448
+ template = "autonomous"
449
+ max_parallel = 2
450
+ ```
451
+
452
+ Hot-reload via filesystem watcher — changes apply without restart.
453
+
454
+ ## CLI
455
+
456
+ ```
457
+ skipper shipwright pipeline start --issue 42
458
+ skipper shipwright pipeline resume
459
+ skipper shipwright pipeline status
460
+
461
+ skipper shipwright decide run [--dry-run]
462
+ skipper shipwright decide candidates
463
+ skipper shipwright decide halt / resume
464
+
465
+ skipper shipwright fleet start / status
466
+ skipper shipwright fleet discover --org myorg
467
+
468
+ skipper shipwright memory show / search / import
469
+ skipper shipwright dora
470
+ skipper shipwright cost show
471
+ skipper shipwright doctor
472
+ ```
473
+
474
+ ## Dashboard Pages
475
+
476
+ 6 pages added to Skipper's SPA dashboard:
477
+
478
+ | Page | Route | Content |
479
+ | ------------ | -------------------------- | -------------------------------------- |
480
+ | Pipelines | `/shipwright/pipelines` | Active/completed, stage progress, cost |
481
+ | Fleet | `/shipwright/fleet` | Multi-repo status, worker allocation |
482
+ | Decisions | `/shipwright/decisions` | Candidates, scores, tiers, outcomes |
483
+ | DORA | `/shipwright/dora` | Lead time, deploy frequency, CFR, MTTR |
484
+ | Memory | `/shipwright/memory` | Failure patterns, search, architecture |
485
+ | Intelligence | `/shipwright/intelligence` | Risk predictions, hotspots, anomalies |
486
+
487
+ ## API Endpoints
488
+
489
+ ```
490
+ GET /api/shipwright/pipelines
491
+ POST /api/shipwright/pipelines
492
+ GET /api/shipwright/pipelines/{id}
493
+ GET /api/shipwright/pipelines/{id}/ws
494
+ POST /api/shipwright/decide/run
495
+ GET /api/shipwright/decide/candidates
496
+ GET /api/shipwright/fleet/status
497
+ GET /api/shipwright/dora/{repo}
498
+ GET /api/shipwright/memory/search?q=...
499
+ ```
500
+
501
+ ## Build Sequence
502
+
503
+ | Phase | Module | Depends On | Deliverable |
504
+ | ----- | --------------- | ---------------------------------- | ----------------------------------------------- |
505
+ | 1 | `config.rs` | — | TOML config parsing |
506
+ | 2 | `github/` | config | GitHub API client |
507
+ | 3 | `memory/` | config | Vector memory, migration |
508
+ | 4 | `pipeline/` | config, github, memory | 12-stage engine, templates, self-healing |
509
+ | 5 | `decision/` | config, github, memory, pipeline | Signals, scoring, tiers, Hand cross-pollination |
510
+ | 6 | `intelligence/` | config, github, memory | DORA, prediction, self-optimization |
511
+ | 7 | `fleet/` | config, github, pipeline, decision | Daemon, multi-repo, auto-scaling, patrol |
512
+ | 8 | `hand.rs` | all modules | Hand definition, HAND.toml, SKILL.md |
513
+ | 9 | CLI + API | all modules | Subcommands, REST/WS endpoints |
514
+ | 10 | Dashboard | API | 6 SPA pages |
515
+
516
+ ## Testing Strategy
517
+
518
+ - Unit tests per module with mock GitHub API and mock kernel
519
+ - Integration tests for full pipeline lifecycle
520
+ - Match Skipper standards: zero Clippy warnings, doc comments on all public types
521
+ - Test Hand cross-pollination (Collector → Decision → Pipeline)
522
+
523
+ ## Migration Path
524
+
525
+ 1. Fork & build: `cargo build --release`
526
+ 2. Import memory: `skipper shipwright memory import --jsonl ~/.shipwright/memory/`
527
+ 3. Configure repos in `skipper.toml`
528
+ 4. Activate Hand: `skipper hand activate shipwright`
529
+ 5. Start: `skipper start`
530
+
531
+ Existing bash Shipwright continues to work independently.