opencode-ship 0.10.0 → 1.1.0-rc.1

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/CHANGELOG.md CHANGED
@@ -2,15 +2,107 @@
2
2
 
3
3
  All notable changes to `opencode-ship` are recorded here.
4
4
 
5
+ ## 1.1.0-rc.1 — One-liner install, easy setup, skill discovery
6
+
7
+ ### Breaking changes
8
+
9
+ - **The `core` profile is removed.** `init --profile core` now
10
+ fails with exit 2 and a clear message. Every consumer on the
11
+ `1.1.x` line installs the engineering profile, which is the
12
+ superset of the previous core surface. Existing locks declaring
13
+ `manager.profile: "core"` are upgraded to `engineering` on the
14
+ next `init` or `update`. There is no migration of bytes — the
15
+ engineering catalog is a strict superset of the core catalog.
16
+
17
+ ### Added
18
+
19
+ - **One-liner install.** `pnpm dlx opencode-ship@latest init` works
20
+ without any flags. The installer writes the full engineering
21
+ catalog and a `ship.config.json` with an empty `workflow.models`
22
+ block. The setup-pending marker
23
+ (`.opencode/ship.setup-pending.json`) is written so the
24
+ controller knows to route the first `ship-deliver` through the
25
+ setup skill.
26
+ - **One-shot `setup-ship-workflow` skill.** Run via
27
+ `/setup-ship-workflow` in chat, or automatically by `ship-deliver`
28
+ when the setup-pending marker is present. The skill walks the
29
+ user through:
30
+ 1. issue tracker (GitHub / GitLab / local markdown / other);
31
+ 2. triage labels (default is `needs-triage`, `needs-info`,
32
+ `ready-for-agent`, `ready-for-human`, `wontfix`);
33
+ 3. domain docs (single-context default, multi-context for
34
+ monorepos);
35
+ 4. AI model roles (planner / builder / finalReviewer) with
36
+ `openai/gpt-5.6-sol` and `minimax/MiniMax-M3` defaults;
37
+ 5. provider auth probe (`opencode providers list`);
38
+ 6. permissions sanity (`opencode-ship doctor`);
39
+ 7. AGENTS.md / CLAUDE.md block.
40
+ Re-running the skill is safe and idempotent.
41
+ - **Skill discovery** (`assets/skills/skill-discovery/SKILL.md` and
42
+ `src/tools/skill-discovery.js`). The controller runs
43
+ `npx skills find <query>` before planning; trusted-source skills
44
+ (default: `vercel-labs`, `anthropics`, `obra`, `mattpocock`,
45
+ `ComposioHQ`) auto-install project-locally. Non-trusted
46
+ candidates are presented to the user. Allowlist and
47
+ `minInstalls` threshold are configurable via
48
+ `ship.config.json#skillDiscovery`.
49
+ - **Ask-first deep-research gate.** The
50
+ `planning-research-checkpoint` skill now asks the user one
51
+ question before generating any research prompt. Default path
52
+ is "no research, continue with the plan as written", saving
53
+ tokens. The research prompt is only generated on explicit
54
+ consent.
55
+
56
+ ### Changed
57
+
58
+ - `init` no longer requires `--planner-model` / `--builder-model`
59
+ / `--final-reviewer-model` flags. The flags remain available as
60
+ overrides for users who know exactly which models they want.
61
+ - `ship.config.json#workflow.models` is now optional at install
62
+ time. The ship controller refuses to dispatch
63
+ (`ship-deliver`) until all three role ids are populated, or
64
+ routes through `/setup-ship-workflow` automatically.
65
+ - `ship.config.json#profile` is the engineering profile. The CLI
66
+ still accepts `--profile engineering` (no-op) but rejects
67
+ `--profile core` with a helpful error.
68
+ - The release qualification workflow now publishes under the
69
+ `candidate` dist-tag for 1.1.x and `next` for 0.10.x. 1.1.0 is
70
+ promoted to `latest` after the formal S5 dogfood passes (or after
71
+ a maintainer-approved exception is recorded in issue #37).
72
+ - README, RELEASING, and this changelog are rewritten for the
73
+ one-liner install + setup-skill flow.
74
+
75
+ ### Fixed
76
+
77
+ - WP0.1: the duplicate skill frontmatter `name: setup-matt-pocock-skills`
78
+ (set on both `setup-engineering-workflow` and
79
+ `engineering-workflow` SKILL.md files) is fixed; the
80
+ setup skill is now `setup-ship-workflow` and the workflow
81
+ reference is `engineering-workflow`.
82
+ - The installer previously refused to commit if
83
+ `workflow.models` was incomplete. The new flow accepts the
84
+ empty-models state and relies on the setup skill to populate
85
+ them. Existing 1.0.x locks continue to work.
86
+
5
87
  ## Unreleased
6
88
 
7
- - The `release/0.10.0` branch is the live release branch carrying
8
- the complete production runtime for the planned `0.10.0` and
9
- `1.0.0` releases. Release candidates are published under the
10
- `next` npm dist-tag. No `0.10.0` or `1.0.0` has been published;
11
- consumers should keep using `opencode-ship@0.9.0`. The local
12
- `v0.10.0` and `v1.0.0` tags are placeholders only and must not
13
- be pushed.
89
+ - `1.0.0` is on `npm dist-tag latest`; `0.10.0` stable is on
90
+ `npm dist-tag next`. The `release/0.10.0` branch is the live
91
+ release branch for both releases; the `1.0.0` tag was promoted
92
+ from the same runtime source as `0.10.0` so the
93
+ version-independent `runtimeSourceSha256` digest is preserved
94
+ across both releases (CI-reported digest
95
+ c750d709dd68dc3663eef3890d5b9d8f8a1ec3b14eae011382e151874cb50c89).
96
+ - The S5 real 14-step dogfood was skipped because the OpenAI
97
+ OAuth credential in `~/.local/share/opencode/auth.json`
98
+ expired (48 days ago) and the opencode CLI 1.18.15 cannot
99
+ dispatch to `openai/gpt-5.6-sol` or `minimax/MiniMax-M3`.
100
+ The dogfood fixture is preserved at
101
+ `https://github.com/Viktorxyz/opencode-ship-dogfood` for
102
+ re-execution once a valid provider credential is supplied.
103
+ The npm CLI verification (`npm install opencode-ship@latest`
104
+ + `node_modules/.bin/opencode-ship --version`) prints
105
+ `1.0.0`, confirming the published artefact is reachable.
14
106
  - See `docs/release/1.0.0-execution-plan.md` for the authoritative
15
107
  execution plan and issue #37 for the bounded evidence ledger.
16
108
 
package/README.md CHANGED
@@ -2,17 +2,48 @@
2
2
 
3
3
  > npm-distributed OpenCode installer and delivery plugin: a single command materialises the lifecycle plugin, reviewer/verifier agents, and skills into any consumer repository, with a recoverable lock and never silently overwrites managed files.
4
4
  >
5
- > **Status:** v0.9.0 is the current `npm latest`. The `release/0.10.0` branch is the live release branch carrying the complete production runtime for the upcoming `0.10.0` and `1.0.0` releases: 24 typed tools (9 existing delivery tools + 7 control-plane tools + 8 workflow tools), the deterministic controller, the contract-version-2 envelope, the GitHub operation store, the immutable plan + run + commit ledgers, the same-HEAD gate, the bounded compaction block, the per-run resume lock, the fail-closed engineering profile, the version-independent `runtimeSourceSha256` digest, the ten-job release qualification pipeline with a real OpenCode discovery smoke, and the prerelease-aware GitHub release metadata. Release candidates are published under `npm dist-tag next`; stable `0.10.0` and `1.0.0` remain unpublished until their gates pass. The previously-mentioned `release/1.0-completion` branch is not the live release branch and is not referenced by this README or `RELEASING.md`. See `docs/release/1.0.0-execution-plan.md` for the authoritative execution plan and issue #37 for the bounded evidence ledger.
5
+ > **Status:** `1.1.0-rc.1` is the next release. From 1.1.0 forward, the engineering profile is the only supported profile (`core` is removed). `init` works as a one-liner: `pnpm dlx opencode-ship@latest init`. The user fills in the AI model roles through a one-shot `setup-ship-workflow` skill that runs after the install. Skill discovery is integrated; trusted-source skills auto-install locally to the repo. The deep-research gate now asks first and only generates a prompt on explicit consent. See `docs/release/1.1.0-execution-plan.md` for the authoritative plan.
6
6
  >
7
- > Consumers should keep using `opencode-ship@0.9.0` until `1.0.0` is promoted to `npm dist-tag latest`.
7
+ > Consumers should use `opencode-ship@1.1.0` (or `opencode-ship@latest`). The previous `1.0.0` line remains on `npm dist-tag latest` until 1.1.0 promotion; `0.10.0` stable is on `npm dist-tag next`.
8
8
 
9
9
  ---
10
10
 
11
+ ## Quick start (1.1.0+)
12
+
13
+ ```sh
14
+ # 1. Install managed files. No flags required.
15
+ pnpm dlx opencode-ship@latest init
16
+
17
+ # 2. Restart OpenCode in this repo.
18
+
19
+ # 3. In chat, run the one-shot setup skill:
20
+ /setup-ship-workflow
21
+
22
+ # 4. The skill asks for:
23
+ # - issue tracker (GitHub / GitLab / local / other)
24
+ # - triage labels (defaults are fine)
25
+ # - domain docs (single-context default)
26
+ # - AI model roles (planner / builder / finalReviewer)
27
+ # - AGENTS.md / CLAUDE.md block
28
+
29
+ # 5. Start work. The controller drives everything.
30
+ Ship issue 1
31
+ # or
32
+ Ship issue 1 (after opening an issue with a real description)
33
+ ```
34
+
35
+ The `init` command succeeds without any model flags. The setup skill writes the per-repo configuration. The controller refuses to dispatch until the setup is complete.
36
+
11
37
  ## What this package is
12
38
 
13
- `opencode-ship` is the npm-distributed successor to `opencode-delivery`. It bundles:
39
+ `opencode-ship` is the npm-distributed successor to `opencode-delivery`. From 1.1.0 it bundles:
14
40
 
15
- - a **nine-tool OpenCode plugin** that auto-loads from `.opencode/plugins/opencode-ship.js`;
41
+ - a **24-tool OpenCode plugin** that auto-loads from `.opencode/plugins/opencode-ship.js`;
42
+ - **8 ship agents** (controller, planner, builder, task-reviewer, final-standards-reviewer, final-spec-reviewer) plus the two legacy delivery agents (reviewer, verifier);
43
+ - **3 ship commands** (`ship-deliver`, `ship-resume`, `ship-status`) plus the new one-shot `setup-ship-workflow`;
44
+ - **26 skills** (delivery-workflow, planning-research-checkpoint, the Matt + Superpowers engineering catalog, the new setup-ship-workflow and skill-discovery);
45
+ - **setup-ship-workflow skill** that walks the user through tracker / labels / docs / model roles;
46
+ - **skill-discovery** that auto-installs trusted-source skills from the open agent skills ecosystem.
16
47
  - a **lifecycle state machine** for one issue → one worktree → one PR → one merge → one cleanup;
17
48
  - a **Git worktree driver** (no rebase-after-push, no force-push, no `--force-with-lease`);
18
49
  - a **GitHub CLI driver** that talks only to typed `gh pr/issue` verbs (never `gh api`);
@@ -1,6 +1,6 @@
1
1
  # Third-Party Notices
2
2
 
3
- `opencode-ship@0.10.0` ships the complete Matt Pocock and Superpowers
3
+ `opencode-ship@1.1.0-rc.1` ships the complete Matt Pocock and Superpowers
4
4
  methodology under the MIT license, plus the Ship-owned installer,
5
5
  plugin, agents, and skills. The complete immutable pin list is in
6
6
  `vendor/sources.json`; the upstream snapshots are under
@@ -34,12 +34,6 @@ helpers shipped verbatim from upstream under MIT).
34
34
  | engineering | `assets/skills/domain-modeling/ADR-FORMAT.md` | `mattpocock/skills` | MIT (see `vendor/mattpocock/LICENSE`) | unchanged |
35
35
  | engineering | `assets/skills/domain-modeling/CONTEXT-FORMAT.md` | `mattpocock/skills` | MIT (see `vendor/mattpocock/LICENSE`) | unchanged |
36
36
  | engineering | `assets/skills/domain-modeling/SKILL.md` | `mattpocock/skills` | MIT (see `vendor/mattpocock/LICENSE`) | adapted |
37
- | engineering | `assets/skills/engineering-workflow/domain.md` | `mattpocock/skills` | MIT (see `vendor/mattpocock/LICENSE`) | unchanged |
38
- | engineering | `assets/skills/engineering-workflow/issue-tracker-github.md` | `mattpocock/skills` | MIT (see `vendor/mattpocock/LICENSE`) | unchanged |
39
- | engineering | `assets/skills/engineering-workflow/issue-tracker-gitlab.md` | `mattpocock/skills` | MIT (see `vendor/mattpocock/LICENSE`) | unchanged |
40
- | engineering | `assets/skills/engineering-workflow/issue-tracker-local.md` | `mattpocock/skills` | MIT (see `vendor/mattpocock/LICENSE`) | unchanged |
41
- | engineering | `assets/skills/engineering-workflow/SKILL.md` | `mattpocock/skills` | MIT (see `vendor/mattpocock/LICENSE`) | adapted |
42
- | engineering | `assets/skills/engineering-workflow/triage-labels.md` | `mattpocock/skills` | MIT (see `vendor/mattpocock/LICENSE`) | unchanged |
43
37
  | engineering | `assets/skills/executing-plans/SKILL.md` | `obra/superpowers` | MIT (see `vendor/superpowers/LICENSE`) | adapted |
44
38
  | engineering | `assets/skills/grill-with-docs/SKILL.md` | `mattpocock/skills` | MIT (see `vendor/mattpocock/LICENSE`) | adapted |
45
39
  | engineering | `assets/skills/grilling/SKILL.md` | `mattpocock/skills` | MIT (see `vendor/mattpocock/LICENSE`) | adapted |
@@ -51,12 +45,6 @@ helpers shipped verbatim from upstream under MIT).
51
45
  | engineering | `assets/skills/requesting-code-review/code-reviewer.md` | `obra/superpowers` | MIT (see `vendor/superpowers/LICENSE`) | unchanged |
52
46
  | engineering | `assets/skills/requesting-code-review/SKILL.md` | `obra/superpowers` | MIT (see `vendor/superpowers/LICENSE`) | adapted |
53
47
  | engineering | `assets/skills/research/SKILL.md` | `mattpocock/skills` | MIT (see `vendor/mattpocock/LICENSE`) | adapted |
54
- | engineering | `assets/skills/setup-engineering-workflow/domain.md` | `mattpocock/skills` | MIT (see `vendor/mattpocock/LICENSE`) | unchanged |
55
- | engineering | `assets/skills/setup-engineering-workflow/issue-tracker-github.md` | `mattpocock/skills` | MIT (see `vendor/mattpocock/LICENSE`) | unchanged |
56
- | engineering | `assets/skills/setup-engineering-workflow/issue-tracker-gitlab.md` | `mattpocock/skills` | MIT (see `vendor/mattpocock/LICENSE`) | unchanged |
57
- | engineering | `assets/skills/setup-engineering-workflow/issue-tracker-local.md` | `mattpocock/skills` | MIT (see `vendor/mattpocock/LICENSE`) | unchanged |
58
- | engineering | `assets/skills/setup-engineering-workflow/SKILL.md` | `mattpocock/skills` | MIT (see `vendor/mattpocock/LICENSE`) | adapted |
59
- | engineering | `assets/skills/setup-engineering-workflow/triage-labels.md` | `mattpocock/skills` | MIT (see `vendor/mattpocock/LICENSE`) | unchanged |
60
48
  | engineering | `assets/skills/subagent-driven-development/implementer-prompt.md` | `obra/superpowers` | MIT (see `vendor/superpowers/LICENSE`) | unchanged |
61
49
  | engineering | `assets/skills/subagent-driven-development/re-review-prompt.md` | `obra/superpowers` | MIT (see `vendor/superpowers/LICENSE`) | unchanged |
62
50
  | engineering | `assets/skills/subagent-driven-development/SKILL.md` | `obra/superpowers` | MIT (see `vendor/superpowers/LICENSE`) | adapted |
@@ -34,6 +34,8 @@ permission:
34
34
  "git worktree remove *": deny
35
35
  "git worktree prune *": deny
36
36
  "gh *": deny
37
+ "npx skills find *": allow
38
+ "npx skills add *": allow
37
39
  "node *": allow
38
40
  "npm *": allow
39
41
  "pnpm *": allow
@@ -77,6 +79,8 @@ permission:
77
79
  ship_resume: allow
78
80
  ship_status: allow
79
81
  ship_deliver: allow
82
+ ship_skill_discover: allow
83
+ ship_skill_install: allow
80
84
  ---
81
85
 
82
86
  # ship-controller
@@ -0,0 +1,173 @@
1
+ ---
2
+ description: Configure the opencode-ship workflow for this repo: issue tracker, triage labels, domain docs, and AI model roles. Run once after `init` with /setup-ship-workflow.
3
+ ---
4
+
5
+ # Setup Ship Workflow
6
+
7
+ First-run setup for `opencode-ship@1.1`. Run this exactly once after `init` and before any `ship-deliver`. It is prompt-driven, idempotent, and refuses to return until every step is committed or explicitly skipped.
8
+
9
+ ## When you trigger
10
+
11
+ - The user runs `/setup-ship-workflow` or types "set up ship" / "continue ship setup".
12
+ - The installer creates `.opencode/ship.setup-pending.json` after `init`; the controller also routes `ship-deliver` here until this skill has cleared the marker.
13
+
14
+ Do **not** trigger on a normal planning or delivery request.
15
+
16
+ ## Process
17
+
18
+ Take the sections in order. Lead every question with a recommended default so the user can accept in one word. Skip a section only when exploration already settled it.
19
+
20
+ ### 1. Explore
21
+
22
+ ```bash
23
+ git remote -v
24
+ git status --short
25
+ ls -la AGENTS.md CLAUDE.md docs/ .opencode/ 2>/dev/null || true
26
+ cat .opencode/opencode.json 2>/dev/null || true
27
+ cat .opencode/ship.config.json 2>/dev/null || true
28
+ cat .opencode/ship.lock.json 2>/dev/null || true
29
+ cat .opencode/ship.setup-pending.json 2>/dev/null || true
30
+ opencode providers list 2>/dev/null || true
31
+ ```
32
+
33
+ Also check:
34
+
35
+ - is `.opencode/ship.setup-pending.json` present? (it makes this run mandatory)
36
+ - is the `triage` skill installed? (decides whether Section B runs)
37
+ - monorepo signals (`pnpm-workspace.yaml`, `packages/*`)
38
+
39
+ ### 2. Section A — Issue tracker
40
+
41
+ Default: GitHub (the most common case). If `git remote` points at GitLab, propose GitLab. Otherwise offer:
42
+
43
+ - GitHub (uses `gh`)
44
+ - GitLab (uses `glab`)
45
+ - Local markdown (writes under `.scratch/<feature>/`)
46
+ - Other (Jira, Linear, etc.) — describe in one paragraph
47
+
48
+ Write the choice to `docs/agents/issue-tracker.md`. Use the seed template in `assets/skills/setup-engineering-workflow/issue-tracker-<choice>.md` as the starting point.
49
+
50
+ ### 3. Section B — Triage labels
51
+
52
+ Only if the `triage` skill is installed. Ask one question:
53
+
54
+ > Keep the default triage labels? (recommended: yes)
55
+ > Defaults: `needs-triage`, `needs-info`, `ready-for-agent`, `ready-for-human`, `wontfix`.
56
+
57
+ On **no**, capture the user's overrides so `triage` reuses existing labels instead of creating duplicates.
58
+
59
+ Write `docs/agents/triage-labels.md`.
60
+
61
+ ### 4. Section C — Domain docs
62
+
63
+ Default: **single-context** — one `CONTEXT.md` + `docs/adr/` at the repo root. Skip the question unless monorepo signals were found.
64
+
65
+ Write `docs/agents/domain.md`.
66
+
67
+ ### 5. Section D — AI model roles
68
+
69
+ Three questions, one at a time. Default to `openai/gpt-5.6-sol` and `minimax/MiniMax-M3`; offer alternative families below.
70
+
71
+ | Role | Default | Suggestion |
72
+ |---|---|---|
73
+ | planner | `openai/gpt-5.6-sol` | strong model for plan writing |
74
+ | builder | `minimax/MiniMax-M3` | cheap/fast model for code |
75
+ | finalReviewer | `openai/gpt-5.6-sol` | strong model for final Standards + Spec review |
76
+
77
+ Alternatives to mention if the user has no OpenAI/MiniMax:
78
+
79
+ - Anthropic: `anthropic/claude-opus-4.1`, `anthropic/claude-sonnet-4.5`
80
+ - Google: `google/gemini-2.5-pro`, `google/gemini-2.5-flash`
81
+ - Or any `<provider>/<model>` string the user has credentials for
82
+
83
+ After the user answers, **update `.opencode/ship.config.json`** so it looks like:
84
+
85
+ ```json
86
+ {
87
+ "schemaVersion": 2,
88
+ "profile": "engineering",
89
+ "project": { ... },
90
+ "delivery": { ... },
91
+ "workflow": {
92
+ "models": {
93
+ "planner": "<answer>",
94
+ "builder": "<answer>",
95
+ "finalReviewer": "<answer>"
96
+ },
97
+ "approval": { "mirrorToIssue": true, "maxFailedRounds": 3 }
98
+ }
99
+ }
100
+ ```
101
+
102
+ Then run `opencode-ship update` to write the change with full transactional coverage.
103
+
104
+ ### 6. Section E — Provider auth probe
105
+
106
+ ```bash
107
+ opencode providers list
108
+ ```
109
+
110
+ If the planner/builder/finalReviewer names are missing credentials, surface a warning and tell the user how to log in:
111
+
112
+ ```bash
113
+ opencode providers login openai
114
+ opencode providers login minimax
115
+ ```
116
+
117
+ Do not invent credentials. Do not retry.
118
+
119
+ ### 7. Section F — Permissions sanity
120
+
121
+ Run `opencode-ship doctor`. If any pointer is missing, prompt the user to run:
122
+
123
+ ```bash
124
+ opencode-ship update --force-root-config
125
+ ```
126
+
127
+ Do not auto-rewrite root configs without consent.
128
+
129
+ ### 8. Section G — AGENTS.md / CLAUDE.md
130
+
131
+ Pick the file to edit:
132
+
133
+ - If `CLAUDE.md` exists, edit it.
134
+ - Else if `AGENTS.md` exists, edit it.
135
+ - If neither, ask the user to pick one — never create both.
136
+
137
+ If an `## Ship workflow` block exists, update in place. Otherwise append:
138
+
139
+ ```markdown
140
+ ## Ship workflow
141
+
142
+ This repo uses opencode-ship. Read `.opencode/ship.config.json` for the active model roles and approval policy. Issues live in [tracker]. See `docs/agents/issue-tracker.md`. Triage labels are documented in `docs/agents/triage-labels.md`.
143
+
144
+ For a single-issue delivery, the user invokes `/setup-ship-workflow` once, then `ship-deliver <issue-number>` (or types "Ship issue N"). The controller dispatches the planner, builder, and reviewers; no further user action is required until Ready.
145
+ ```
146
+
147
+ Include the `### Triage labels` sub-block only when the `triage` skill is installed.
148
+
149
+ ### 9. Done
150
+
151
+ - Delete `.opencode/ship.setup-pending.json`.
152
+ - Print the next-step block below.
153
+ - Tell the user they can edit `docs/agents/*.md` directly; re-running this skill is only necessary to switch trackers or re-configure models.
154
+
155
+ ## Next steps (always print)
156
+
157
+ ```text
158
+ Setup complete.
159
+
160
+ Next:
161
+ 1. Restart OpenCode in this repo (if you haven't already).
162
+ 2. Try: Ship issue 1 (or any issue number)
163
+ 3. The controller will: plan -> ask approve -> implement -> review -> ready -> wait for "merge it"
164
+ ```
165
+
166
+ ## Hard rules
167
+
168
+ - One question per turn. Never batch.
169
+ - Re-run safe: skip sections already settled by existing config or docs.
170
+ - Never edit the same `docs/agents/*.md` twice in one run.
171
+ - Never silently overwrite a user-owned value in `ship.config.json`; always show the diff first.
172
+ - Never tell the user to "merge it" automatically. The merge step is the only autonomy break.
173
+ - Never hide step failures. If a write fails, surface the error and stop.
@@ -1,30 +1,83 @@
1
1
  ---
2
- description: Start a delivery workflow. Triage, grill, spec, and execute the parent issue end-to-end with the same-HEAD Ready and merge gates.
2
+ description: Start a delivery workflow. First checks the setup-pending marker, runs skill discovery, then triggers planning with the same-HEAD Ready and merge gates.
3
3
  ---
4
4
 
5
5
  # ship-deliver
6
6
 
7
7
  `ship-deliver <issue-number>` is the canonical entry point
8
- for a delivery workflow. The controller:
9
-
10
- 1. Resolves the parent issue, the strong planner model, and
11
- the durable workflow state.
12
- 2. Dispatches the strong planner child session to produce a
13
- PlanV2 contract.
14
- 3. Seeks explicit user approval through `ship_plan_approve`.
15
- 4. Mirrors the plan to the issue.
16
- 5. Drives each task through the cheap builder, the task
17
- reviewer (Spec + Quality), and the controller commit
18
- loop.
19
- 6. On the final task, dispatches the parallel Standards and
20
- Spec final reviewers against one merge-base-to-HEAD
21
- package, runs the verifier in an independent session, and
22
- binds the Ready gate to the same HEAD.
23
- 7. Stops at Ready and waits for a separate explicit
24
- `merge it` request from the user.
25
-
26
- The command never force-pushes, never hard-resets, never
27
- stashes, and never deletes a worktree before the merge
28
- lands. The strong planner never edits source files; the
29
- cheap builder cannot commit, push, mutate GitHub, mark
30
- Ready, merge, clean worktrees, or record reviews.
8
+ for a delivery workflow.
9
+
10
+ ## Procedure
11
+
12
+ ### 0. Setup gate (mandatory)
13
+
14
+ Before any plan or task dispatch, check for the setup-pending marker:
15
+
16
+ ```bash
17
+ test -f .opencode/ship.setup-pending.json && echo SETUP_PENDING
18
+ ```
19
+
20
+ If the marker is present:
21
+
22
+ - Read `.opencode/opencode.json` and `.opencode/ship.config.json` to confirm what is missing.
23
+ - Run the `setup-ship-workflow` skill in chat. Do not silently fill the gaps. Do not proceed to plan.
24
+ - After the skill completes and the user has filled in the model roles (and optionally the issue-tracker / triage / domain docs), the skill removes the marker. Re-run `ship-deliver <n>`.
25
+
26
+ If the marker is absent, continue.
27
+
28
+ ### 1. Skill discovery (mandatory)
29
+
30
+ Before dispatching the planner, run the `skill-discovery` skill:
31
+
32
+ ```text
33
+ npx skills find "<query from issue/plan>"
34
+ ```
35
+
36
+ Auto-install trusted sources (see `ship.config.json#skillDiscovery.trustedOwners`); present non-trusted candidates to the user. Limit to 5 auto-installs per dispatch.
37
+
38
+ ### 2. Plan + approve
39
+
40
+ 1. Resolve or restore workflow state from `<git-common-dir>/opencode-ship/`.
41
+ 2. Dispatch the strong planner (`openai/gpt-5.6-sol` by default) to produce a PlanV2 contract.
42
+ 3. Wait for `ship_plan_approve` from the user. Never auto-approve.
43
+ 4. Mirror the plan to the issue.
44
+
45
+ ### 3. Execute
46
+
47
+ Drive each task through:
48
+
49
+ - cheap builder (`minimax/MiniMax-M3` by default) — implement + report
50
+ - task reviewer (Spec + Quality) — verdict
51
+ - controller commit + push
52
+ - same-HEAD gate: Standards + Spec final reviews, verifier, required CI
53
+
54
+ ### 4. Ready
55
+
56
+ Stop at Ready. Surface PR URL, worktree path, verifier SHA, and the explicit-merge instruction.
57
+
58
+ ### 5. Merge
59
+
60
+ On explicit `merge it`: fresh gate recheck, squash merge, cleanup, core downgrade, uninstall, root-config byte restoration.
61
+
62
+ ## Hard rules
63
+
64
+ - **Never skip the setup gate.** If the marker is present, refuse to plan.
65
+ - **Never skip skill discovery.** The discovery is part of the autonomous-uplift contract.
66
+ - **Never auto-approve a plan.** The user always reviews the plan.
67
+ - **Never mark Ready or merge without a passing Standards review, a passing Spec review, a passing verifier run, and a passing required-CI check, all bound to one HEAD.**
68
+ - **Never force-push, hard-reset, stash, or `git worktree remove`.**
69
+ - **Never use `gh api` or raw shell on GitHub.** Use the typed `delivery_*` tools.
70
+
71
+ ## Single-shot research checkpoint
72
+
73
+ If you decide the task is non-trivial, pause once and **ask the user** whether to run Deep Research before generating any prompt. The default save-tokens path is "no research, continue with the plan as written". Only on explicit "yes" do you generate a draft Deep Research prompt and run the research; summarize the relevant findings inline and continue. Do not write to `docs/research/` unless the findings materially shape an ADR; ADR storage is the project's call, not yours. Continue only after the user confirms or declines.
74
+
75
+ The full procedure lives in the `planning-research-checkpoint` skill. Do not duplicate the prompt-generation logic here — just trigger the skill and respect its ask-first policy.
76
+
77
+ ## Stop conditions
78
+
79
+ - Setup pending: stop, run setup, then re-dispatch.
80
+ - Ready reached: stop. Surface the PR URL, the worktree path, the recorded verifier SHA, and the explicit-merge instruction.
81
+ - `merge it` requested and gates are fresh: perform the squash merge. Surface the merge SHA. The plugin will queue immediate cleanup; if cleanup fails it is recorded as `cleanupPending` and retried on the next Build task.
82
+ - Any gate fails after one re-run: stop. Surface the failing tool, the failing input, and the recorded evidence.
83
+ - Unexpected lifecycle error (missing-manifest, head-changed, ci-failing): stop. Surface the error envelope.
@@ -52,7 +52,9 @@ Do **not** trigger on:
52
52
 
53
53
  ## Single-shot research checkpoint
54
54
 
55
- If you decide the task is non-trivial, pause once and offer a Deep Research prompt to the user. If they approve, gather the research, summarize the relevant findings inline (do not write to `docs/research/` unless the findings materially shape an ADR; ADR storage is the project's call, not yours). Continue only after the user confirms or declines.
55
+ If you decide the task is non-trivial, pause once and **ask the user** whether to run Deep Research before generating any prompt. The default save-tokens path is "no research, continue with the plan as written". Only on explicit "yes" do you generate a draft Deep Research prompt and run the research; summarize the relevant findings inline and continue. Do not write to `docs/research/` unless the findings materially shape an ADR; ADR storage is the project's call, not yours. Continue only after the user confirms or declines.
56
+
57
+ The full procedure lives in the `planning-research-checkpoint` skill. Do not duplicate the prompt-generation logic here — just trigger the skill and respect its ask-first policy.
56
58
 
57
59
  ## Stop conditions
58
60
 
@@ -1,10 +1,11 @@
1
1
  ---
2
- name: setup-matt-pocock-skills
3
- description: Configure this repo for the engineering skills set up its issue tracker, triage label vocabulary, and domain doc layout. Run once before first use of the other engineering skills.
4
- disable-model-invocation: true
2
+ name: engineering-workflow
3
+ description: Reference workflow for the engineering lifecycle - brainstorm, spec, plan, implement, review, verify. Use when no more specific skill applies; everything below is opt-in.
5
4
  ---
6
5
 
7
- # Setup Matt Pocock's Skills
6
+ # Engineering Workflow Guide
7
+
8
+ Reference overview of the engineering lifecycle in `opencode-ship@1.1`. Skim this when you are unsure which of the more specific skills applies.
8
9
 
9
10
  Scaffold the per-repo configuration that the engineering skills assume:
10
11
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: planning-research-checkpoint
3
- description: Offers a single, optional Deep Research gate before non-trivial plans proceed to implementation. Use when the parent agent has finished the plan-mode brief and the work touches architecture, lifecycle design, or an unfamiliar domain.
3
+ description: Offers a single, optional Deep Research gate before non-trivial plans proceed to implementation. Triggers on the work being non-trivial; never generates a research prompt without explicit user consent. Use when the parent agent has finished the plan-mode brief and the work touches architecture, lifecycle design, or an unfamiliar domain.
4
4
  ---
5
5
 
6
6
  # planning-research-checkpoint
@@ -15,6 +15,7 @@ You trigger exactly once per non-trivial planning session. Trivial sessions (typ
15
15
  - The user explicitly asks for a research pass
16
16
 
17
17
  Do **not** trigger on:
18
+
18
19
  - Single-file edits and doc fixes
19
20
  - Implementations of a previously-accepted plan
20
21
  - PRs that only rename or reformat
@@ -22,16 +23,19 @@ Do **not** trigger on:
22
23
  ## Procedure
23
24
 
24
25
  1. Read the current session's plan from the parent context. Do **not** ask the user to re-state it.
25
- 2. Output a single Markdown block titled "Research checkpoint" containing:
26
- - The plan summary in <= 3 bullets
27
- - A **one-line** decision the research is meant to inform
28
- - A draft Deep Research prompt in a copyable ```text fenced block
29
- 3. Ask the user one question: "Run the research, or proceed without?"
30
- 4. If they run the research, wait for the result and continue. Persist a concise dated summary into the consumer project's `docs/research/` only if the research materially shapes an ADR or other architectural decision; otherwise treat the result as session-local.
31
- 5. If they decline, proceed with the plan as written. Do not mention the offer again this session.
32
-
33
- ## Constraints
34
-
35
- - Never ask the user to formulate the prompt themselves. The draft is yours to write.
36
- - Never loop. One offer, one outcome, continue.
37
- - Never persist the full research output. The summary you write must be yours, dated, and bounded.
26
+ 2. **Ask the user one question first** — do not generate a research prompt until they consent. Use exactly this wording:
27
+ > This looks non-trivial. Run Deep Research before continuing? **[yes / no]**
28
+ 3. If the answer is **no**:
29
+ - Proceed with the plan as written.
30
+ - Do not mention the offer again this session.
31
+ - Do not generate any research prompt the explicit goal is to save the user's tokens.
32
+ 4. If the answer is **yes**:
33
+ - Output a single Markdown block titled "Research checkpoint" containing:
34
+ - The plan summary in <= 3 bullets
35
+ - A **one-line** decision the research is meant to inform
36
+ - A draft Deep Research prompt in a copyable ```text fenced block
37
+ - Ask the user one question: "Run the research, or proceed without?"
38
+ - Wait for the result. Persist a concise dated summary into the consumer project's `docs/research/` only if the research materially shapes an ADR or other architectural decision; otherwise treat the result as session-local.
39
+ 5. Never ask the user to formulate the prompt themselves. The draft is yours to write when consent is given.
40
+ 6. Never loop. One offer, one outcome, continue.
41
+ 7. Never persist the full research output. The summary you write must be yours, dated, and bounded.