Land PR

SkillDev tools

Validate, regenerate, branch, commit, push, and open the PR. Runs the local quality gate first, so a remote build cannot fail on something a local gate catches.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the Land PR skill

What this skill tells your AI

The instructions your AI receives, as published by hephaestus-build/hephaestus in .agents/skills/land-pr/SKILL.md and read by ahel’s review.

1. See what changed

git status --short
git diff --name-only HEAD

Nothing staged or modified means nothing to land.

2. Know which CI legs your diff triggers

detect-changes in .github/workflows/cicd.yml holds the path filters; read it rather than guessing. Two shapes surprise people: docs/**, scripts/** and the root lint, format and tsconfig files select the Tooling and Docs leg, not the App Server leg; and package.json or pnpm-lock.yaml select every source leg.

3. Format, then check

vp run format
vp run check

check is the complete local quality gate: every gate in the quality group in vite.config.ts, and every one also runs in CI. CI additionally runs service tests, builds, images, security checks, and workflow-specific gates. Formatting must never be the reason a remote build fails.

4. Regenerate what your change invalidated

Generated artefacts are never hand-edited, and regeneration is destructive — it empties the target directory first, so stash local edits.

vp run generate:api          # controllers or DTOs changed: rewrites openapi.yaml AND webapp/src/api
vp run db:draft-changelog    # entities changed (needs Docker); writes and wires the changelog, then prune it
vp run db:generate-erd-docs  # after pruning a changelog

generate:api:specs packages the reactor and boots the executable JAR on ports it allocates itself, so nothing needs freeing; root AGENTS.md § Command caveats covers the HEPHAESTUS_APPLICATION_JAR shortcut for a JAR you already built.

5. Run the tests your diff can break

vp run test:webapp
vp run test:server:unit

6. Re-run format + check

Regeneration produces unformatted output. Run step 3 again; both must be green on the final tree.

7. Changeset

A PR touching server/, webapp/ or docker/ needs a .changeset/*.md or verify-changesets fails it.

vp exec changeset          # user-facing: pick the bump, write the summary in the operator's voice
vp exec changeset --empty  # no user-facing effect; say why in the body

vp exec changeset is interactive — with no TTY, hand-write .changeset/<slug>.md. The rules — voice, bump, pre-1.0 minor with **Operators:** and a .migration/<slug>.md fragment, never MIGRATION.md — are in .changeset/README.md. Touching db/changelog/ without touching .changeset/ is always wrong.

8. Branch, commit, push

git branch --show-current    # if main, branch first
git checkout -b <type>/<description>
git add -A
git commit -m "<type>(<scope>): <description>"
git push -u origin HEAD

Types and scopes are enumerated in commitlint.config.ts, which is what validates the PR title — read it there rather than from a copy. No ! in the title; pre-1.0 breaking changes are carried by the changeset, not the header.

9. Open the PR

PAGER=cat gh pr view --json number,url

If that reports that the current branch has no pull request, create it:

PAGER=cat gh pr create --base main --title "<type>(<scope>): <description>" --body "$(cat <<'BODY'
## What changed and why

<1-2 sentences: what and why>

## How to test

<manual steps, or "CI covers this">

## Release impact

<link the changeset and state operator action, or explain why neither applies>

## Notes for reviewers

<risks, tradeoffs, follow-up work, or delete this section>

## Visual evidence

<UI: before and after. Motion or timing: a short video. Otherwise delete this section.>
BODY
)"

10. Upload visual evidence

For a UI change, save PR-only evidence under the ignored tmp/ directory and inspect it for secrets, personal data, and unrelated content. Give each image alt text that describes the visible state. For a video, describe the demonstrated behavior in the PR body.

mkdir -p tmp
gh pr edit --attach './tmp/before.png#Settings before the change' --attach './tmp/after.png#Settings after the change'

An upload can add earlier files before a later file fails. Inspect the PR before retrying, then attach only the missing files.

11. Verify

PAGER=cat gh pr view --json url,title -q '"PR: \(.title)\nURL: \(.url)"'

Open the URL and check that every attachment renders, describes the intended state, and contains no sensitive or unrelated content.

Signals

GitHub stars
21
Forks
2
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
land-pr
Source
github.com/hephaestus-build/hephaestus