skills/tap-alignment/SKILL.md
Detect and fix drift between a project and the conventions encoded in `jwa-tobrew`, prek, and the tap ADRs. Trigger when the user says "align", "any drift", "verify conventions", or asks why a particular file/symlink/script is required.
npx skillsauth add jwa91/agentskills tap-alignmentInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
The tap codifies conventions in three layers, and jwa-tobrew align is the tool that detects when reality drifts from any of them.
docs/adr/ — why a convention exists. Read these before changing one. Five live as of v0.2.0; numbered, never renumbered.align rules in tools/jwa-tobrew/align.go — what the convention requires, with auto-fix when safe. Detects mode (tap vs project) from cwd contents; emits findings, optionally applies them.prek.toml hooks — when the rules run. The jwa-tobrew-align hook re-runs align on every commit that touches paths that affect tap conventions. The conventional-commit hook runs on every commit message.A new convention should be added to all three: ADR (why) → align rule (what) → prek-hook scope adjustment (when).
align looks at the cwd and picks one:
Casks/ and Formula/ exist. Checks that agentskills is on PATH so generated skills can be materialized, docs/adr/ exists, README has <!-- BEGIN ITEMS --> / <!-- END ITEMS --> markers, CHANGELOG.md exists, and if the tap embeds a Go CLI (go.mod at root), .goreleaser.yaml is also at root.go.mod, Package.swift, or an *.xcodeproj/*.xcworkspace exists. Checks: .env.template is present; .gitignore blocks .env*; .agents/skills/release/ exists with harness links from agentskills link; per kind: Go → .goreleaser.yaml; cask → scripts/release.sh.If neither set of markers is found, align errors with "not a tap and not a recognised project".
Each finding has one of two shapes:
align can fix it (file creation, symlink creation, .gitignore append). Reports as → <path> — <action>. Apply with --apply.init --kind=cask to scaffold). Reports as ! <path> — ... [manual]. Run the suggested command yourself.align exits non-zero if any finding remains after the run; that's what makes it suitable as a CI check or pre-commit hook.
Casks/, Formula/, .agents/skills/, docs/adr/, tools/jwa-tobrew/, README.md, or CHANGELOG.md. (prek does this automatically when the hook is installed.)jwa-tobrew init in a fresh project — confirms the scaffold is complete..env.template content — the file's existence is checked but the op:// reference's value isn't. The runtime wrapper is now jwa-harden run, which resolves the template before exec; op run --env-file= works as a manual fallback. Don't promote the .env.template file itself as eternal — the resolution path may evolve further..rb schema — desc, homepage, semver version, github source, filename↔name match. Queued for doctor --strict (TODO #2 in TODO.md).tap.toml JSON-schema validation — Queued for TODO #4..rb against its GitHub release — Queued for TODO #1, will run as a daily CI cron.When you read a finding that feels wrong, check this list — it might be a known gap rather than a real drift.
docs/adr/000N-<slug>.md. If you don't have a "why", the convention is probably not worth adding.tools/jwa-tobrew/align.go (in alignTap or alignProject). Auto-applyable if reasonable; manual otherwise.jwa-tobrew-align hook's files: regex in prek.toml so the hook fires when the relevant paths change.prek run --all-files to verify the existing repo doesn't drift; fix or --apply.Unreleased.scaffold-cli if the convention affects new projects)..claude/skills/<name> is a real dir, not a symlink — happens when a skill is created via Claude tooling and not migrated. Fix: align --apply migrates it to .agents/skills/<name>/ and symlinks back..rb is hand-edited without running jwa-tobrew config. Fix: jwa-tobrew config regenerates and you commit the diff.tap.toml and .rbs disagree — same cause as above. config is the one-shot..rb flagged in tap mode — not flagged by align (fine to exist), but bump/release will refuse it. The source repo's GoReleaser owns updates; that's intentional, not drift.data-ai
Release the current project to the personal Homebrew tap from repo-local release config. Use when the user says "release", "ship", "cut a version", "publish", "make a new tag", or asks how to make a new version available via jwa91/tap.
tools
Use the `jwa-harden` CLI for secret-safe command execution, env-template discovery, and signing/notarization preflight checks. Trigger when a command needs secrets, when `.env.template` or 1Password references are involved, or before signed release flows.
documentation
Modify or extend the `jwa-tobrew` scaffolding system — the templates that `init` writes into target projects. Trigger when the user says "add a new scaffold kind", "change what init writes", "update the templates", or asks how the embedded templates are wired.
tools
Advise on the stack for a new project. Given what the user wants to build, plus the user's principles and preferences, propose a language + tools as a short written proposal. Use when starting a new project or deciding what to build something in.