feat(ci): dogfood vendored agent skills on every website release - #44
Merged
Merged
Conversation
Add a "Step 1a — Dogfood" step to release_and_publish.yml that runs
right before the release notes are captured and the version is bumped:
1. Resolve the latest tag of DailybotHQ/deepworkplan-skill and
DailybotHQ/agent-skill via `gh release view`.
2. Compare against the vendored SKILL.md version. Only install
skills that actually moved.
3. Run `npx --yes skills add <repo>@<tag> --skill <name> --force -y`
— the exact command any downstream consumer would run, so this
doubles as a live smoke test.
4. Assert the invariant: installed version equals the requested
tag. Fail the release on mismatch — never publish a website tag
that misrepresents its vendored skills.
5. If any files changed, commit `chore: dogfood vendored skills to
(…)` locally. Step 3's `git push --follow-tags` sends this
commit alongside the version-bump commit + tag in a single
atomic push, and it appears in the auto-generated Release notes.
Semantics: refresh is release-driven, not autonomous. The maintainer
controls when the site adopts new skill versions by choosing when to
merge a PR. No background cron, no drift between "an upstream tag
dropped" and "someone released the site".
Failure semantics:
- `gh release view` blip → warn, skip that skill this release.
- `npx skills add` failure → fail the release.
- Version invariant mismatch → fail the release.
- Both skills already at latest → clean no-op.
Docs: WORKFLOWS.md gets a dedicated "Dogfood step (Step 1a)"
subsection with the failure matrix; AGENTS.md gets a "Vendored agent
skills — refreshed on every website release" section.
Co-authored-by: Cursor <cursoragent@cursor.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Add a release-integrated dogfood step to
release_and_publish.ymlthat keeps the two vendored agent skills (deepworkplan,dailybot) at the latest upstream tag exactly at release time — no autonomous cron, no drift between "an upstream tag dropped" and "someone cut a release".This replaces the abandoned PR #43 (PR-driven cron approach). The maintainer's stated preference: refresh happens only when a release is cut, and the maintainer controls when that is.
What changed
.github/workflows/release_and_publish.yml— new Step 1a — Dogfood, inserted between "Setup GitHub Config" and "Set release body". The step:DailybotHQ/deepworkplan-skillandDailybotHQ/agent-skillviagh release view --json tagName.SKILL.mdversion:field (frontmatter). Sets a per-skill_MOVEDflag; only skills that actually moved are installed.npx --yes skills add <repo>@<tag> --skill <name> --force -y— the exact command any downstream consumer would run, so this doubles as a live smoke test of the upstream tag.SKILL.mdversion equals the requested tag. Fails the release on mismatch..agents/skills/deepworkplan,.agents/skills/dailybot,skills-lock.json. If there is a diff, commitschore: dogfood vendored skills to <list>locally. Step 3'sgit push --follow-tagssends this commit alongside the version-bump commit + tag in a single atomic push.Runs before Step 2 on purpose:
get_github_release_log.shwalks the commit range from the previous release marker to HEAD, so the dogfood commit lands in the auto-generated Release notes alongside the PR that triggered the release.Docs:
.github/docs/WORKFLOWS.md— Step 1a documented with a dedicated Dogfood step subsection, including a failure-mode matrix.AGENTS.md— new "Vendored agent skills — refreshed on every website release" section replacing the old free-form guidance.Design choices
Release-driven, not autonomous. The maintainer wanted control over when the site adopts a new skill version. A background cron would refresh silently overnight and eventually cause a release — the opposite of the intent. Coupling refresh to release means: no unexpected upstream drift shipped to production, no PRs from a bot to review, and the maintainer decides cadence by choosing when to merge.
Runs before the release-notes step. So the dogfood commit appears in the GitHub Release body next to whatever PR triggered the release. A reader sees
chore: dogfood vendored skills to deepworkplan v2.16.3in the release notes forv1.0.75, not a hidden change tucked underHEAD~.Version-match invariant. If
npx skills add <repo>@vX.Y.Zinstalls anything other thanvX.Y.Z(e.g. resolver bug, tag layout drift), the release fails at Step 1a — a broken upstream tag can never quietly slip into a shipped website version.Selective commit message. Commit subject lists only the skills that actually moved:
chore: dogfood vendored skills to deepworkplan v2.16.3(one moved) orchore: dogfood vendored skills to deepworkplan v2.16.3, dailybot v3.10.4(both moved). Neverdogfood vendored skills to deepworkplan v2.16.1 (unchanged), dailybot v3.10.4.Failure semantics
gh release viewblip for one upstream repogh release viewblip for bothnpx skills addfailureLocal validation
The commit-message and moved-flag logic was exhaustively tested against all seven scenarios (both-at-latest, one moved, both moved, one API blip, both API blip, blip + move). Output matches the intended commit subjects exactly.
What this replaces
feat/auto-refresh-vendored-skills) — a cron-driven pair of workflows that opened + auto-merged a "refresh vendored skills" PR daily. Closed with rationale: user wants release-driven refresh, not autonomous. Branch deleted.Test plan
main— the very next release will exercise the new Step 1a end-to-end.chore: dogfood vendored skills to ...shows up in the release commit list (or the clean-no-op path fires cleanly if both skills are already at latest)..agents/skills/deepworkplan/SKILL.mdand.agents/skills/dailybot/SKILL.mdversions matchgh release view --repo DailybotHQ/{deepworkplan-skill,agent-skill}output.Made with Cursor