# Fewertools local teaching pack · 10 October 2026

These scripts need Python 3.10+ standard library; the worktree demo also needs Git 2.28+. No dependencies are installed, network requests made, accounts accessed, email sent or provider products invoked.

- `python3 review-permissions.py permissions.example.json` inspects a synthetic settings object. It does not implement or test Claude permission matching.
- `python3 worktree-demo.py` creates a disposable Git repository in the system temporary directory, checks four isolation facts and removes it. It is the only script that creates Git state; it never opens your repository.
- `python3 inspect-newsletter-csv.py subscribers.synthetic.csv` reads a local CSV and emits aggregates/row numbers. Local status and consent labels are invented, not verified opt-ins, billable subscribers or permission to email. The email check is deliberately a shape check, not RFC validation. Exact-address grouping does not normalize case, aliases or provider identities. No transformed import file is emitted.

The CSV inspector requires unique, nonempty headers including `email`, `status`, `consent_state` and `joined_on`. Every record must have exactly the header's field count. Extra or missing fields, invalid headers, broken CSV quoting and unreadable input stop inspection with a fixed error code and, for row-width errors, the logical CSV record number (header is record 1). Unrecognized status labels are counted only under the fixed `unmapped` bucket, never echoed as report keys. No contact values or raw parser errors are returned. The command exits 1 on these errors; an empty field with its comma still present is a field value, not a missing column. Quoted commas and newlines remain supported.
- `python3 score-wer.py wer-fixtures.json` scores seven invented text pairs. Its normalization and tie-breaking are explicit and do not reproduce every published WER implementation. Empty references return null WER.
- `python3 make-audio-fixtures.py`, then `python3 audio-budget.py mono.synthetic.wav stereo.synthetic.wav --rate=0.02` generates silent local fixtures and a hypothetical cost. The rate has no vendor or currency attribution. No recognizer executes.

Saved `*-results.json` files are actual local outputs from this teaching pack, not native provider results. Re-running Git on a different version can change version metadata; the assertions concern file/commit relationships. The CSV as-of date is intentionally pinned to 2026-10-10. Work on private copies when adapting scripts to real data; keep personal files out of public repositories.

No comparative winner, deliverability claim, security guarantee, actual invoice, native migration or recognition quality is established. The accompanying articles link the exact official sources for their limited factual claims.
