Preflight
Agent skills that drive the Hydrant ticket lifecycle from your AI harness. Stack-agnostic, MCP-pure, MIT-licensed.
npx -y skills add Background-Craft/hydrant-skills --skill preflightAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Run the pre-PR quality gate on a Hydrant branch — lint, build, tests, coverage assessment, acceptance-criteria check, dependency-graph verification, production-safety review, and adversarial review. Use when the user asks for `/preflight`, says "preflight HYD-123", or wants final validation before shipping.
SKILL.md
9.6 KB, ~2.2k tokens by cl100k_base, as published. Nobody here has run it
Preflight
Run the full pre-PR quality gate on the current branch. Execute the gates sequentially; stop and fix issues as they arise. The output is a single report covering every gate, plus an inReview status update on the Hydrant issue if everything passes.
Review principles
- Gates 1–3 are mechanical (lint, build, tests, coverage).
- Gate 4 is production safety.
- Gate 5 is an adversarial review.
- Findings matter more than summaries. A clean bill of health should be earned.
Source of truth
- The user's codebase, build tooling, and tests for the mechanical gates.
- Hydrant MCP (
mcp__hydrant__*) for the issue, its acceptance criteria, and its dependency graph. - The user's
AGENTS.mdAlignment block for stack-specific commands (see below).
Alignment lookup
Read the <!-- BEGIN: hydrant alignment --> block from AGENTS.md if it exists. Relevant keys for /preflight:
lint-cmd— Gate 1.typecheck-cmd— Gate 1.single-file-test-cmd— Gate 2 fallback for branches where the project's full test command is too heavy.package-manager— context for resolving build commands when the project uses one (npm run build,cargo build, etc.).
If Alignment is missing or partial, say so explicitly in the gate report and either skip the corresponding gate or fall back to language-default commands the user can sanity-check (e.g. cargo test for a Rust crate, pytest for a Python project with pyproject.toml). Don't guess. Print one nudge if the Alignment block is absent: Tip: run /align once so /preflight can drive the right lint/build/test commands.
Workflow
Gate 1: Quality
Run, in order:
lint-cmdfrom Alignment, if present.typecheck-cmdfrom Alignment, if present.- The project's build command, if Alignment or the project's manifest makes it discoverable (e.g.
npm run buildwhenpackage.jsonhas abuildscript;cargo buildfor a Cargo project). If undiscoverable, skip and note. - Any project-specific structural check the user has wired into Alignment via a
lint-cmd(e.g. file-size policies). Treat them like lint — failures are blocking.
Rules:
- Lint failures are blocking.
- Typecheck failures are blocking.
- Build failures are blocking.
- Skipped gates are reported, not pretended to pass.
If a structural check (filesize, dependency rules, etc.) fails, treat it as a refactoring signal — not a request for mechanical line-shedding. Prefer cohesive extraction along real responsibility boundaries:
- Pull reusable components, hooks, helpers, or domain modules out at natural seams.
- Move branching logic, transforms, and formatting into tested utilities when appropriate.
- Reduce duplication and clarify ownership between layers.
- Keep behavior intact and add or update tests when logic moves.
Do not pass /preflight by deleting useful context, compressing readable code, or splitting files only to satisfy a threshold. If the right refactor is bigger than the current shipping scope, leave preflight failed and ask the user whether to do the refactor now or explicitly defer the branch.
Gate 2: Tests
Run the project's focused, non-browser test suite if it exists. Resolve via Alignment first; otherwise check the project's manifest for a documented test command.
Rules:
- All failing tests are blocking.
- If there is no test suite, state that clearly and continue.
- For browser-visible behavior, use whatever browser-automation affordance the user's harness provides —
/preflightdoesn't prescribe a tool. After browser checks, clean up any windows or sessions the harness opened.
Gate 3: Test coverage assessment
Review git diff <primary>...HEAD and decide whether tests are required for this branch.
Bias toward writing tests when the diff adds or changes:
- Calculations or transforms.
- Branching logic.
- Backend logic (queries, mutations, actions, server-side handlers).
- Validators or permission checks.
- Existing tested logic.
- Parsing, formatting, or serialization.
Tests are usually not required for:
- Purely declarative UI.
- Docs- or config-only changes.
- Wiring already-tested logic into UI.
If tests are required and missing, write and run them. If they fail, treat as a Gate 2 failure.
Gate 3b: Acceptance-criteria verification
If the branch maps to a Hydrant issue (extract identifier from branch name, e.g. hyd-537-... → HYD-537):
mcp__hydrant__get_issue({ identifier, include: ["context"] }).- Parse the acceptance criteria from the description's
## Acceptance Criteriasection. - Compare each criterion against the diff. Use these verdicts:
- Met — diff demonstrably satisfies the criterion.
- Unmet — diff doesn't satisfy and you can verify that from code.
- Manual — criterion requires human verification (UI behavior, end-to-end flow).
- N/A — criterion no longer applies.
Unmet code-verifiable criteria are warnings — surface them prominently. Don't silently mark as Met.
Gate 3c: Dependency-graph verification
Treat Hydrant's first-class dependency graph as the source of truth. Ignore prose Dependencies: lists in the description except as optional human context.
After mcp__hydrant__get_issue:
- Read
issue.dependencies.blockedBy. - For each blocker, fetch via
mcp__hydrant__get_issueand check status:doneorcanceled→ satisfied.- Any other status → still open.
- If any blockers are still open, surface them prominently with blocker ID, current status, and an explicit
still openflag. - Do not silently ignore open blockers.
- Do not promote dependency findings to BLOCKED unless the user explicitly asks for a vetoing dependency policy.
- Also read
issue.dependencies.blocksandissue.dependencies.relatesTo. (If a payload exposesrelatedinstead ofrelatesTo, handle defensively.) - Emit a
Graphheading in the preflight summary with:blockedBy— each blocker's status and satisfaction classification.blocks.relatesTo/related.
If the branch doesn't clearly map to a Hydrant issue, state that and skip issue-specific gates and status changes.
Gate 4: Production safety
Review the diff for:
- Schema or data-model backward compatibility.
- Deploy-ordering safety between layers (e.g. backend deploys before frontend that consumes new fields).
- Migration needs for any altered data shapes.
- Breaking API or contract changes.
- Seed / fixture / config consistency when schema changes.
Schema or deploy-ordering risks are blocking unless the user explicitly accepts them.
Gate 5: Adversarial review
Perform a fresh review pass with explicit skepticism. Pretend you didn't write any of this code. Inspect:
- Correctness — does it actually do what the issue says? Edge cases handled?
- Security — input validation, authn/authz, injection vectors, secret handling.
- Conventions — fits the project's existing patterns? Doesn't introduce a new style for no reason?
- Completeness — every acceptance criterion addressed? No half-implemented branch?
- Risk — any change to a hot path, shared library, or contract that other code depends on?
- Style (when UI changed) — spacing, hierarchy, loading and error states, accessibility.
Don't restate that the code looks fine. A clean bill of health should be earned with specific observations.
Output
Produce a single preflight summary covering:
- Quality (lint, typecheck, build).
- Tests.
- Coverage decision.
- Acceptance-criteria status.
Graph(blockedBy / blocks / relatesTo-or-related).- Production safety.
- Adversarial review findings.
- Diff size (line count, files touched).
Output the report to the console. Do not write report files to disk.
Post-preflight
If preflight passes and the branch maps to a Hydrant issue:
mcp__hydrant__update_issue({ id, status: "inReview" }).- Ask whether the user wants to run
/yeetto push, open a PR, and ship.
If preflight does not pass, do not move the issue to inReview. Leave the branch state as-is so the user can fix and re-run.
Edge cases
- Alignment is absent. Run gates with documented language-default commands when discoverable; skip and report otherwise. Recommend
/align. - Test suite takes a long time. Run it. Don't skip "for speed" — preflight is the place where the slow checks happen. If the user wants a faster gate, that's
/go's Phase 5, not/preflight. - Diff is huge (1000+ lines). Run all gates anyway, but include a diff-size warning in the summary. Big diffs deserve a slower adversarial review.
- Blockers are still open. Surface as warnings. Do not auto-veto unless the user has opted into a strict dependency policy.
What this skill never does
- Skip a gate to "save time".
- Move issue status past
inReview. Shipping (done) is/yeet's job. - Push, force-push, or open a PR. That's
/yeet. - Auto-fix lint or test failures without surfacing them. Failures are signals; the user decides the fix.
- Mark Unmet acceptance criteria as Met. Honest reports beat optimistic ones.
Why this matters
/preflight is the last cheap chance to catch regressions, missing tests, broken contracts, and unmet acceptance criteria before the change becomes part of main. The cost of catching them here is a few minutes of re-running gates; the cost of catching them post-merge is everyone's morning.
Gives 1 of the 12 instructions most quality gates skills give in ~2.2k tokens
Counted across 1,195 of the 2,094 authors here whose files we hold, read 2026-08-06
- read the output and check the exit codein 55 of 1195, across 14 files
- verify requirements using a line-by-line checklistin 53 of 1195, across 12 files
- identify the verification command proving the claimin 53 of 1195, across 12 files
- run the full verification commandin 51 of 1195, across 11 files
- verify output confirms the claimin 49 of 1195, across 10 files
- check version control diff after agent delegationin 45 of 1195, across 5 files
- state claim with evidencein 43 of 1195, across 3 files
- run the test suitehere, and in 32 of 1195, across 24 files
- keep state in memory by defaultin 27 of 1195, across 6 files
- make prototype runnable with one commandin 26 of 1195, across 5 files
- detect the package manager from lockfilesin 24 of 1195, across 5 files
- produce a verification reportin 23 of 1195, across 12 files
Said here and by no other author read
- execute all gates sequentially and stop on failures
- read alignment configuration for commands
- write missing tests for modified logic
- print the preflight report to the console
- update issue status to inReview if passing
- clean up any opened browser sessions
Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.