Jeffy Loop 1.4.1
The adversarial evaluator, named everywhere it acts
A naming and receipts release. No gate, check, or contract changed behavior; what changed is that the loop's independent convergence judge now carries one canonical name - the adversarial evaluator - across every surface that invokes it: the iteration prompt, the plan template, the validator's governance marker (flipped red-green, still 75 checks), the flowchart, and the README. One concept, one name, no synonyms to reconcile.
Ten converged loop runs
The receipts section now lists ten converged /jeffy loop runs, four of them new since 1.4.0:
- PyPortfolioOpt - six runs, 58 iterations, from a CI-red baseline to 356 passing; the adversarial evaluator rejected five convergence attempts before countersigning the sixth.
- dayjs - eight runs, 74 iterations, 45 findings with 10 High in a 63M-downloads-a-week library; names the third boundary class, host-environment defects.
- yfinance - one run, nine iterations; closed a High that upstream's own failing contract test was advertising; names the fourth boundary class, fixture-corpus defects.
- bat - one run, ten iterations, the first target chosen fresh with no prior audit and the first Rust target: a just-merged, unreleased security flag was silently inert whenever output is piped, and the run caught and owned a regression of its own making along the way.
Upstream, the wave continued: fixes are open as PyPortfolioOpt#751, dayjs#3167, and bat#3862 - the last filed before the affected feature's first release - each carrying a regression test proven to fail on the target's own unpatched branch.
A README that tells the story
The README was redesigned end to end: a theme-aware banner, a story-ordered structure, the receipts as a table (stars, iterations to convergence, run status, headline) with one collapsible entry per receipt, the rules grouped by when they bind, and Quickstart now covering git installation for first-time setups.
Upgrading
git pull
./install.sh # Windows PowerShell: .\install.ps1
The installer copies the skill into ~/.claude/, which is what actually runs; pulling alone does not update it.