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 +99 -7
- package/README.md +35 -4
- package/THIRD_PARTY_NOTICES.md +1 -13
- package/assets/agents/ship-controller.md +4 -0
- package/assets/commands/setup-ship-workflow.md +173 -0
- package/assets/commands/ship-deliver.md +77 -24
- package/assets/skills/delivery-workflow/SKILL.md +3 -1
- package/assets/skills/engineering-workflow/SKILL.md +5 -4
- package/assets/skills/planning-research-checkpoint/SKILL.md +18 -14
- package/assets/skills/setup-engineering-workflow/SKILL.md +121 -72
- package/assets/skills/skill-discovery/SKILL.md +104 -0
- package/dist/cli.js +199 -81
- package/dist/core.js +1 -1
- package/dist/plugin.js +18 -34
- package/docs/release/1.0.0-execution-plan.md +126 -35
- package/package.json +1 -1
- package/schema/ship-config.schema.json +5 -29
- package/vendor/sources.json +0 -198
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
|
-
-
|
|
8
|
-
|
|
9
|
-
`1.0.0`
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
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:**
|
|
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
|
|
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`.
|
|
39
|
+
`opencode-ship` is the npm-distributed successor to `opencode-delivery`. From 1.1.0 it bundles:
|
|
14
40
|
|
|
15
|
-
- a **
|
|
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`);
|
package/THIRD_PARTY_NOTICES.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Third-Party Notices
|
|
2
2
|
|
|
3
|
-
`opencode-ship@
|
|
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.
|
|
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.
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
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
|
|
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:
|
|
3
|
-
description:
|
|
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
|
-
#
|
|
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.
|
|
26
|
-
-
|
|
27
|
-
|
|
28
|
-
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
-
|
|
36
|
-
-
|
|
37
|
-
-
|
|
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.
|