yeet

star 2

Ship it — formats, builds, tests, commits, and pushes. Accepts --skip-tests flag to skip build+test when caller already verified them. Triggers on: ship it, yeet, push it, commit and push, deploy this, we're done, preflight, preflight check, quality check, pre-commit check, ready to commit.

e128 By e128 schedule Updated 6/11/2026

name: yeet description: > Ship it — formats, builds, tests, commits, and pushes. Accepts --skip-tests flag to skip build+test when caller already verified them. Triggers on: ship it, yeet, push it, commit and push, deploy this, we're done, preflight, preflight check, quality check, pre-commit check, ready to commit. argument-hint: "[--skip-tests] [--dry-run]"

Yeet Skill

Ship it. Quality gate + commit + push in one autonomous pass.

Modes

Invocation Behavior
/yeet Full: PII + format + build+test + commit + push
/yeet --skip-tests Fast path: PII + format only; skips build+test
/yeet --dry-run Quality gate only — no commit or push

--dry-run replaces the retired /preflight skill.

Steps

0. Gather context (parallel batch)

Run all in a single parallel message:

A) scripts/status.sh --json        (working-tree status)
B) scripts/branch.sh --json        (branch info, ahead/behind counts)

Derive from status JSON:

  • Classification: all .md/.json/.yml/.yaml/.txt = docs-only; any .cs/.csproj = code; else mixed
  • If docs-only AND --skip-tests not explicit → auto-enable --skip-tests, log: "Docs/config-only change — skipping build+test"
  • Cache: cs_changed, ahead, has_changes, analyzers_or_scripts_changed
  • Set analyzers_or_scripts_changed = true if any changed file path starts with src/*Analyzers*/ or scripts/

1. Format + build + test

A) Format (unconditional — never skip):

scripts/format.sh

Run this on every yeet, regardless of classification (docs-only, code, mixed), flags (--skip-tests, --dry-run), or working tree state. Reaching step 1 without running scripts/format.sh is a bug.

Runs on the entire solution. This catches violations introduced by prior commits that local format missed (e.g., analyzer-backed style rules that require restore).

If format produces changes and the working tree was previously clean, those changes become the commit.

After format, re-check working tree state. If still no changes (format found nothing, and has_changes was false) → "Nothing to yeet — working tree is clean." Stop.

B) Build + test (conditional): Skip if --skip-tests (explicit or auto-detected docs-only).

scripts/check.sh --no-format --all

If exit code is non-zero → stop and report failures.

C) Analyzer release files (conditional): Only if any staged or unstaged .cs file changes under src/E128.Analyzers/:

C.1) Version bump:

scripts/internal/version-bump.sh E128.Analyzers

This increments the <Version> in the analyzer csproj so the NuGet package ships with a new version. Skip with "Analyzer version bump skipped — no analyzer source changes" if no .cs files changed.

If the version was bumped, re-read the csproj before any subsequent edits.

C.2) Unshipped/Shipped validation:

scripts/internal/analyzer-release-check.sh --json

Parse the JSON output. If status is "issues":

  • missing array → add each ID to Unshipped.md with the correct Rule ID, Category, Severity, and Notes from the analyzer source
  • duplicates array → remove each from Unshipped (Shipped wins)
  • orphans array → remove each orphaned entry from Unshipped.md
  • Verify table format consistency: aligned-column markdown, column order Rule ID | Category | Severity | Notes

If any fixes are needed, apply them silently (auto-approval per project rules). Log what was fixed.

D) README freshness (conditional): Only if any staged or unstaged changes touch analyzer source (src/*Analyzers*/) OR scripts/:

Spawn the readme-auditor agent:

Agent(subagent_type="readme-auditor",
      prompt="Audit all README.md files for staleness and auto-fix drift.")

If the agent produces edits, they become part of this commit. No separate commit.

Skip with "README check skipped — no analyzer or script changes" if neither path is touched.

If --dry-run: report quality gate results and stop here. Do not continue to step 2.

2. Stage + commit + push

  • Stagescripts/internal/stage.sh --include-new (stages all modified tracked + new untracked, excluding secrets)
  • PII scanscripts/internal/precommit.sh (checks staged diff for home paths and email addresses; stop if fail)
  • If lode files staged, show brief summary table (path + one-line change description)
  • Squash — use ahead from cached step 0:
    • ahead > 1: git reset --soft $(git merge-base main HEAD) then re-stage and commit as one
    • 1 or 0: proceed normally
  • Craft commit message — always generate a fresh message from the actual diff, never reuse a prior commit message:
    • Run scripts/diff.sh --staged --json to inspect staged stats
    • Synthesize a conventional commit summary: type(scope): imperative summary covering the full changeset
    • If the branch had multiple distinct concerns, name both in the subject or use a multi-line body
    • Subject line must be <=72 chars; use a body for detail when > 1 major concern
    • Never truncate the subject — if the auto-generated one ends in ..., it is wrong
    • No email addresses — never put an email in the message or any trailer; commit.sh rejects it
  • Commitscripts/internal/commit.sh --skip-precommit "message" (precommit already ran above)
  • Pushgit push (with -u origin <branch> if no upstream set)
  • Create PR — if the current branch is not main, create a pull request:
    gh pr create --title "<commit subject line>" --body "<body>"
    
    • Title: reuse the commit subject line (the type(scope): summary part)
    • Body: generate a ## Summary with 1-3 bullet points covering the changeset, a ## Test plan with bulleted checklist, and the Claude Code footer — never include an email address anywhere in the body
    • If a PR already exists for this branch, skip PR creation silently
    • Report the PR URL at the end

Rules

  • All pending changes ship together — never unstage, cherry-pick, or exclude files from the commit. Everything in the working tree goes into one commit. Do not ask whether to include specific files.
  • Fully autonomous — no user prompts during execution
  • Stop on failure — PII fail, build fail, or test fail halts the pipeline
  • No email addresses — never in a commit message, trailer, or PR body. The PII scan blocks real emails in the staged diff and commit.sh rejects an email in the message; user@example.com placeholders are allowed
  • Single commit per push — squash local commits when ahead > 1
  • Do NOT auto-commit or push again after completing these steps — one-time action
  • --dry-run stops after step 1 — quality check only, no side effects
  • Format is unconditionalscripts/format.sh runs on every yeet; no flag, classification, or condition skips it.
  • Re-read gate — after format runs (step 1A), all .cs file contents are stale. Do NOT Edit any .cs file after step 1 without re-reading first.

Troubleshooting

  • PII scan finds home directory paths — replace with relative paths or env-var substitution
  • Format changes files unexpectedly — expected after editorconfig updates; review diff, re-run build
  • Build passes but tests fail — do not commit; fix tests first
Install via CLI
npx skills add https://github.com/e128/dotnet-reference --skill yeet
Repository Details
star Stars 2
call_split Forks 0
navigation Branch main
article Path SKILL.md
More from Creator