Skip to main content

lint-and-test-gate

WHAT: After editing shell / bats / TypeScript in this repo, run the matching gate command (`./dev/lint-shell.sh`, `./dev/test-bats-docker.sh`, or `npm test`) before claiming the change is done, and quote the pass output. WHEN: Any finished edit in dotenv/, plugins/, tests/, config/, or lib/node/. DO-NOT: Run the local `./dev/test-bats.sh` when `./dev/test-bats-docker.sh` is available; skip the gate because "it's a small change"; claim done without quoting the pass tail.

설치로 이동

소스 정보

저장소
weikinhuang/dotfiles
최근 소스 활동
2026년 5월 22일 22:26
감지된 SKILL.md 언어
영어
스타
21
포크
3

설치 방법

기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.

소스 파일 검토

설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.

SKILL.md 표시 중

SKILL.md
소스 지침 · 읽기 전용 미리보기
name
lint-and-test-gate
description
WHAT: After editing shell / bats / TypeScript in this repo, run the matching gate command (`./dev/lint-shell.sh`, `./dev/test-bats-docker.sh`, or `npm test`) before claiming the change is done, and quote the pass output. WHEN: Any finished edit in dotenv/, plugins/, tests/, config/, or lib/node/. DO-NOT: Run the local `./dev/test-bats.sh` when `./dev/test-bats-docker.sh` is available; skip the gate because "it's a small change"; claim done without quoting the pass tail.
# Lint and Test Gate Every change to shell, bats, or TypeScript in this repo has a specific gate command. Run it, quote the last few lines of pass output, then claim the change is done. This is the repo-specific instance of the harness-agnostic `verify-before-claim` skill. ## The gate table Match what you touched to the command you run: | Touched | Gate command | | ----------------------------------------------------- | -------------------------------------------------------------------------------------- | | Any `.sh` file (dotenv, plugins, config, bin scripts) | `./dev/lint-shell.sh` | | Any `.bats` file (added or edited) | `./dev/test-bats-docker.sh tests/<changed-path>.bats` then `./dev/test-bats-docker.sh` | | Any `lib/node/**/*.ts` or `lib/node/**/*.spec.ts` | `npm test` | | Anything that changed shell AND added/changed a test | Run both gates above. | | A public-surface doc change (REFERENCE.md, README.md) | No gate - but confirm the change is consistent with the code. | Always prefer a focused run first (single file / single path), then a full-suite run to catch ordering breakage. ## Docker is the default for bats Run `./dev/test-bats-docker.sh`, not `./dev/test-bats.sh`, unless Docker is unavailable. Docker pins the bats, bats-support, and bats-assert versions and bypasses host drift. `-q` mutes pass noise, which is useful when you're running the full suite: ```bash ./dev/test-bats-docker.sh -q ./dev/test-bats-docker.sh tests/dotenv/bin/git-sync.bats # focused ./dev/test-bats-docker.sh tests/plugins/ # subtree ``` ## Quote the pass tail When the gate passes, copy the last 3-6 lines of output into your reply. For bats that's the summary line (`<N> tests, 0 failures`); for shellcheck it's silent on success so `./dev/lint-shell.sh` exiting 0 is the signal - say so explicitly. Good: > Ran `./dev/lint-shell.sh` - exited 0 (no shellcheck or shfmt findings). > > Ran `./dev/test-bats-docker.sh tests/dotenv/bin/git-sync.bats`: > > ```text > 12 tests, 0 failures > ``` Bad: > Tests pass, looks good. ## When you can skip the gate Only when the change has no executable impact the gate could catch: - Pure documentation edits (README, REFERENCE, AGENTS.md). - A skill / agent config file that isn't code. - The user explicitly said "don't run tests, I'll run them". If in doubt, run the gate. The cost is small; the cost of claiming done on a broken change is large. ## Lint-staged and pre-commit If `lint-staged` / git hooks are wired in, they run a subset of gates on commit. That's backup, not a substitute - run the gate yourself first so you can react to failures without a broken commit in progress. ## Anti-patterns - **"I only touched one line, no need to test."** Pass the gate anyway; one-line changes have bitten this repo before. - **Running just the focused test and skipping the suite on a refactor.** Cross-file changes need the full suite to catch ordering / isolation bugs. - **Using `./dev/test-bats.sh` because Docker feels slow.** Docker is the reference environment. If it's slow, run focused tests during development and the full suite before claiming done. - **Claiming pass without quoting the output.** Users shouldn't have to rerun to confirm. - **Running `npm test` when only shell changed.** Wrong gate - it won't catch shell issues and wastes time. - **Ignoring shellcheck findings.** They're treated as errors, not warnings, by `./dev/lint-shell.sh`. Fix them. ## Quick reference | Change | Run this | | ------------------------------------------- | ------------------------------------------------------------------------------------ | | Tiny shell tweak | `./dev/lint-shell.sh` | | New / edited bats test | `./dev/test-bats-docker.sh tests/<path>.bats` then `./dev/test-bats-docker.sh -q` | | New bin script (script + completion + test) | `./dev/lint-shell.sh` and `./dev/test-bats-docker.sh tests/dotenv/bin/<script>.bats` | | New plugin | `./dev/lint-shell.sh` and `./dev/test-bats-docker.sh tests/plugins/<name>.bats` | | TypeScript helper in `lib/node/` | `npm test` | | Mixed shell + TS | All three: `./dev/lint-shell.sh`, `./dev/test-bats-docker.sh -q`, `npm test` |
GitHub에서 보기