# freview: README says five reviews — REVIEW.md actually stitches six

Source: https://www.michaelchurley.com/blog/freview-five-reviews-six-sections-observability-gate  
Published: 2026-06-22  
Author: Michael C. Hurley  
Tags: freview, fallow, scribe, pre-push, review, observability, sentry, posthog, blacksmith, zsh, bun, hurleyus

![Five marketed reviews vs six REVIEW.md sections](/blog/freview-five-reviews-six-sections-observability-gate/screenshots/six-sections.png)

## 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`](https://github.com/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.

![CLI / section pipeline](/blog/freview-five-reviews-six-sections-observability-gate/screenshots/six-sections.png)

The README and `TWITTER-RELEASE-THREAD.md` still sell **"One command. Five reviews."** The orchestrator always appends **six** sections into root `REVIEW.md`:

1. **OBSERVABILITY**: embedded Python detects Next / React Native-Expo / Electron / Swift; requires Sentry + PostHog deps, init, and env-signal strings; if `.vercel/project.json` exists, `vercel env ls production` must show the DSN/key/host set. Library/tooling repos with no platform pass.
2. **HEALTH**: `bunx --bun fallow … health --complexity` (soft-pass when exit≠0 but no fail glyphs)
3. **AUDIT**: `fallow audit`
4. **DEAD**: `fallow dead-code`
5. **DUPLICATION**: `fallow dupes`
6. **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.

![Observability platforms](/blog/freview-five-reviews-six-sections-observability-gate/screenshots/observability-platforms.png)

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.

![Blacksmith CI self-review](/blog/freview-five-reviews-six-sections-observability-gate/screenshots/ci-blacksmith.png)

## Where

Code: [github.com/HurleyUS/freview](https://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.

![Commit arc](/blog/freview-five-reviews-six-sections-observability-gate/screenshots/commit-arc.png)

## 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"?
