/arc:verify
Run all checks
—What it does
Verify runs your full check suite in order — build, typecheck, lint, tests, debug log audit, git status. If build fails, it stops immediately (no point checking types if it doesn't compile). Reports a concise pass/fail summary table. Supports quick mode for fast feedback and pre-pr mode for thorough checks.
—Why it exists
Running checks manually means forgetting steps. Verify runs them in the right order, stops early on critical failures, and gives you a clear go/no-go answer. Use it before commits, before PRs, or anytime you want to know "is this codebase clean?"
—Design decisions
- —Sequential with early abort. Build must pass before types are checked.
- —Auto-detects tooling. Finds biome vs eslint, vitest vs jest, pnpm vs npm.
- —No agents needed. Simple procedural checks, no subagent overhead.
Source document
Verify Workflow
Run sequential verification checks. Stop on critical failures.
Step 0: Detect Tooling
Before running checks, detect the project's tooling:
Package manager:
pnpm-lock.yaml→pnpmbun.lockborbun.lock→bunyarn.lock→yarnpackage-lock.json→npm
Linter:
biome.jsonorbiome.jsonc→[pm] biome check ..eslintrc*oreslint.config.*→[pm] eslint .
Test framework:
vitest.config.*→[pm] vitest runjest.config.*→[pm] jest
Type checker:
tsconfig.json→[pm] tsc --noEmit
Build:
- Check
package.jsonscripts forbuild→[pm] run build
Step 1: Parse Mode
$ARGUMENTS determines the mode:
| Argument | Mode | Checks |
|---|---|---|
quick | Quick | Build + types only |
full or (none) | Full | All checks |
pre-commit | Pre-commit | Build + types + lint + debug logs (skip tests) |
pre-pr | Pre-PR | All checks + search for hardcoded secrets |
Step 2: Run Checks (in order)
Execute each check sequentially. If a check fails critically, report it and stop.
2a. Build Check
[pm] run build
- If FAIL: Report errors and STOP — nothing else matters if it doesn't build
- If PASS: Continue
2b. Type Check
[pm] tsc --noEmit
- Report error count and locations (
file:line) - Continue even if there are errors (report them in summary)
2c. Lint Check
[pm] biome check .
# or
[pm] eslint .
- Try auto-fix first:
[pm] biome check --write . - Report remaining issues
- Continue
2d. Test Suite (skip in quick and pre-commit modes)
[pm] vitest run
# or
[pm] jest
- Report pass/fail counts
- Report coverage percentage if available
- Continue
2e. Debug Log Audit
Search for leftover debug statements in source files (not test files):
Use Grep tool: Pattern console\.(log|debug|dir|table) in src/ or app/ directories, excluding *.test.* and *.spec.* files
- Report locations
- Note:
console.warnandconsole.errorare intentional — don't flag those
2f. Git Status
git status --short
git diff --stat
- Report uncommitted changes count
- Report staged vs unstaged
2g. Secrets Scan (pre-pr mode only)
Use Grep tool: Search for patterns that suggest hardcoded secrets:
sk_live_,sk_test_,pk_live_,pk_test_(Stripe)AKIA(AWS access keys)ghp_,gho_,ghs_(GitHub tokens)xoxb-,xoxp-(Slack tokens)- Strings assigned to variables named
*_KEY,*_SECRET,*_TOKENthat look like real values (not env var references)
Exclude: .env*, *.example, *.md, node_modules/
Step 3: Summary Report
VERIFICATION: [PASS / FAIL]
Build: [OK / FAIL]
Types: [OK / X errors]
Lint: [OK / X issues]
Tests: [X/Y passed / SKIPPED]
Debug logs: [OK / X found]
Git: [clean / X uncommitted]
Secrets: [OK / X found / SKIPPED]
Ready for PR: [YES / NO]
If any check failed, list the specific issues below the table with file:line references and brief fix suggestions.
Edge Cases
- No build script: Skip build check, note it in summary
- No test framework: Skip tests, note it in summary
- No TypeScript: Skip type check, note it in summary
- Monorepo: If
turbo.jsonor rootpnpm-workspace.yamlexists, run checks at the workspace level (turbo build,turbo typecheck)
What Verify Does NOT Do
- Fix issues (use the fixer agent for that)
- Run E2E tests (use /arc:testing for that)
- Block anything — it reports, the developer decides
- Modify any files