Skip to content

Migrate to shipyard v2 - #26

Merged
chris-peterson merged 4 commits into
mainfrom
shipyard-v2
Aug 22, 2026
Merged

Migrate to shipyard v2#26
chris-peterson merged 4 commits into
mainfrom
shipyard-v2

Conversation

@chris-peterson

Copy link
Copy Markdown
Owner

shipyard v2 fixes deploy-docs.yml and release.yml, both of which were pinned to the wrong line (v1), and makes CI the sole writer of generated artifacts instead of a human running a local script.

  • deploy-docs.yml and release.yml repinned to @v2.
  • preview.yml (an advisory dry-run that reported drift but never blocked it) replaced with project.yml, which commits regenerated plugin.json/hooks.json/suite.describe straight onto the branch on every push.
  • release.yml now triggers on workflow_dispatch with a bump input; shipyard derives the version from plugin.yml and publishes the release from CHANGELOG.md's ## Unreleased section instead of a hand-typed GitHub Release body.
  • scripts/shipyard deleted; local reads go through uvx instead (justfile's peek-projection and docs targets).
  • .gitignore's per-filename list for generated docs/ pages already missed three files v2 renders (_home.md, hooks.md, status.md), so it's now a blanket docs/* ignore with the hand-authored pages allowlisted.

AGENTS.md updated to match, including a stale scripts/gen-plugin-json.py reference and a release-gate claim ("runs the test suite") that wasn't accurate even under v1.

shipyard v2 fixes deploy-docs.yml and release.yml, both of which were
pinned to the wrong line (v1), and makes CI the sole writer of
generated artifacts instead of a human running a local script.

- deploy-docs.yml and release.yml repinned to @v2.
- preview.yml (an advisory dry-run that reported drift but never
  blocked it) replaced with project.yml, which commits regenerated
  plugin.json/hooks.json/suite.describe straight onto the branch on
  every push.
- release.yml now triggers on workflow_dispatch with a bump input;
  shipyard derives the version from plugin.yml and publishes the
  release from CHANGELOG.md's `## Unreleased` section instead of a
  hand-typed GitHub Release body.
- scripts/shipyard deleted; local reads go through `uvx` instead
  (justfile's `peek-projection` and `docs` targets).
- .gitignore's per-filename list for generated docs/ pages already
  missed three files v2 renders (_home.md, hooks.md, status.md), so
  it's now a blanket docs/* ignore with the hand-authored pages
  allowlisted.

AGENTS.md updated to match, including a stale scripts/gen-plugin-json.py
reference and a release-gate claim ("runs the test suite") that wasn't
accurate even under v1.
CI failed on push: shipyard's generate runs build-docs internally,
which now fails the whole projection if a docs/ link resolves to no
published page. docs/README.md and docs/_sidebar.md link to /rules and
/prompts, which are ClaudeWatch's own pages (built by
build/gen-rules-doc.py) — shipyard doesn't know about them, so its
link check saw them as dead links.

Reproduced against a clean checkout (my working tree had stale
docs/rules.md and docs/prompts.md from earlier manual testing, which
masked this locally). Running gen-rules-doc.py before generate puts
both pages on disk before the check runs; confirmed against the same
clean checkout. docs/ isn't committed either way, so this only changes
what's on disk during the job, not what lands.

Applied the same fix to justfile's peek-projection, which has the
identical bug.
Both ran shipyard build-docs before gen-rules-doc.py — the reverse of
what project.yml needed fixing in the previous commit, and just as
broken: build-docs link-checks the whole docs/ tree before
gen-rules-doc.py ever runs, so docs/README.md's and docs/_sidebar.md's
links to /rules and /prompts fail as dead links. Confirmed against a
clean docs/ tree (git-ignored, so untracked leftovers from earlier
manual runs had masked this locally, the same way they masked the
project.yml bug).

Swapped the order in both places, and rewrote gen-rules-doc.py's own
docstring, which had documented the old (now wrong) order explicitly
("run it after shipyard build-docs") — it's the one file every caller
of this script would read first, so it's the place to state the
invariant once rather than trust four call sites to independently get
it right.

Also factored the repeated uvx invocation in the justfile into a
`shipyard` variable, per review.
Declares gen-rules-doc.py as plugin.yml's docs: pre_render:, so
shipyard runs it before build-docs touches docs/ at all instead of
every caller getting the step order right independently.

Drops the manual gen-rules-doc.py steps from project.yml and the
justfile — shipyard runs it now. deploy-docs.yml no longer needs a
custom job at all: with the watches-derived pages accounted for,
shipyard's reusable deploy-docs.yml does exactly what the custom one
did, so it's a one-line caller like release.yml.

Also renamed the docs-preview justfile recipe (serves the rendered
site locally) to preview-docs, matching review feedback — updated
SPEC.md's DEV-04 and STATUS.md's evidence column to match.
@chris-peterson
chris-peterson merged commit d40baef into main Aug 22, 2026
1 check passed
@chris-peterson
chris-peterson deleted the shipyard-v2 branch August 22, 2026 19:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant