
Who
I got tired of "we'll catch it in CI" turning into a Slack autopsy after main already moved. Pre-push should hurt a little when the tree is sketchy and stay quiet when it is clean.
For JS/TS teams (and anyone whose public symbols need docstrings across TS/Swift/Rust/Python/shell) who want one command, one durable REVIEW.md, and the same gate locally and on Blacksmith.
What
I built freview, public HurleyUS/freview. Package @hurleyus/freview 0.1.0. MIT. zsh. bin/freview is 404 lines; bundled bin/scribe is 555. HEAD 23237d9. 22 commits. 0 stars. CLI / package only.

The README and TWITTER-RELEASE-THREAD.md still sell "One command. Five reviews." The orchestrator always appends six sections into root REVIEW.md:
- OBSERVABILITY: embedded Python detects Next / React Native-Expo / Electron / Swift; requires Sentry + PostHog deps, init, and env-signal strings; if
.vercel/project.jsonexists,vercel env ls productionmust show the DSN/key/host set. Library/tooling repos with no platform pass. - HEALTH:
bunx --bun fallow … health --complexity(soft-pass when exit≠0 but no fail glyphs) - AUDIT:
fallow audit - DEAD:
fallow dead-code - DUPLICATION:
fallow dupes - DOCSTRINGS: bundled
scribe(not Michael's old~/bin/scribe)
Before any of that: fallow init + fallow setup-hooks, then freview rewrites the Claude fallow-gate.sh matcher from git commit|push to git push only so local commits stay unblocked.
Flags you actually use: --root, --format, --quiet, --explain, --summary, --ci (SARIF + quiet + fail-on-issues), --fail-on-issues. Clean runs write the file and shut up. Dirty runs print the report and exit 1. Empty SARIF result sets do not fail CI mode.

Install paths: curl both bins into ~/bin, clone + symlink, or bunx github:HurleyUS/freview / bun link. Pre-push snippet in the README only fires on protected main/master refs.
Residue / irony: shell-only package (scripts.lint and scripts.check are literally true), yet .github/workflows/ci.yml still installs zsh and runs bunx --bun github:HurleyUS/freview --ci on blacksmith-4vcpu-ubuntu-2404. May 14 is seven commits all titled "Standardize Blacksmith CI gates." May 14 also briefly committed generated Claude hooks, deleted them seventeen minutes later, then re-tracked them a week later. Second June 22 nightly (23237d9) shares the exact tree with the .uncap nightly: empty HEAD.

Where
Code: github.com/HurleyUS/freview, public, branch main. No homepage. No live web demo. Sibling tooling surface: Fallow + Claude Code hooks + Blacksmith runners.
When
2026-05-13, 1:41–1:51 PM Eastern. Init (150-line freview), Twitter thread, bundle scribe + package.json.
2026-05-13, 7:23–8:06 PM Eastern. Observability gate, then platform-aware rewrite (Next/RN/Electron/Swift + Vercel env).
2026-05-14 afternoon Eastern. Blacksmith CI standardization spam, empty SARIF handling, avoid oxlint on shell-only, hook churn, prettier CI commit.
2026-05-21 morning Eastern. Empty health soft-pass (PR #1), track fallow Claude hook, push-only gate + freview rewriter.
2026-06-22, 5:20 PM Eastern. 8fd392a nightly: .uncap/config.json.
2026-06-22, 6:12 PM Eastern. 23237d9 nightly: empty tree. HEAD.

Why
Terminal scrollback is a graveyard. REVIEW.md survives. "Five reviews" was the pitch; observability became the sixth section the docs never renumbered. A pre-push hook that also rewrites your Claude gate to push-only is the boring guardrail I actually leave installed.
Engagement Q: If your pre-push suite marketed five checks, which sixth gate would you sneak in first: observability, license, or "did CI prettier already fight you"?
