TL;DR: faf loop drives any repo to 🏆 100% or the honest human wall — sourcing every slot it can with provenance, asking only what only you know, never inventing.

One Command, Three Honest Endings

Getting a project to a full .faf used to be a back-and-forth. faf loop closes it. It runs the whole arc — initautoscore — sourcing everything detection can prove, then hands you what's left as plain questions.

It stops at one of three honest terminals. It never invents a slot to fake a win.

TerminalWhat it means
done🏆 100%. Everything sourced, nothing left to ask.
needs-humanAsks only the slots only a human can answer.
stuckSourced everything sourceable — nothing left for a human to add.

That's the whole promise: drive to 100% or reach the honest wall and tell you exactly which wall it is.

Provenance, Not Guesses

Every sourced 6W value now carries where it came from. relentlessContext seeds each slot as {value, source, confidence} — a confirm-or-edit suggestion, never an auto-confirmed guess.

{
  "who":  { "value": "Backend teams", "source": "README", "confidence": "high" },
  "where":{ "value": "Published on npm", "source": "package.json", "confidence": "high" }
}

You see the value and its receipt. Confirm it or correct it — faf never confirms it for you. The Table-of-8 seeds the same way, from the project goal and the detailed README form, each carrying its source and confidence.

The Interview-16 Lock

The boundary between what a human answers and what the repo sources is now typed at the Truth. SIX_WS_INTERVIEW (the 6Ws — human) and STACK_INTERVIEW (sourced from manifests) carry distinct slot-path types.

Mix a sourced slot into the human interview and it's a compile error. The machine can no longer ask you a question it already knows the answer to — the line between "only you know this" and "the repo already said this" is enforced at build time, not by good intentions.

Relentless, Fixed

Dogfooding the loop on real repos caught three heuristics being too eager or too shy. All three fixed:

  • WHO now catches an optional qualifier — "Built for backend teams".
  • WHERE accepts short platform names — "Published on npm".
  • WHY no longer over-matches a bare "goal" mid-sentence.

Smaller signals, caught. The relentless extractor reads what your repo actually says — and now reads it more honestly.

Try It

npm install -g faf-cli@6.14.0

Or run it with no install:

bunx faf loop

GitHub

Source and release notes.

faf-cli

npm

Install the latest version.

faf-cli

The Numbers

  • v6.14.0 — Released June 22, 2026
  • 962/962 — Tests passing, 0 fail
  • 3 — Honest terminals (done / needs-human / stuck)
  • {value, source, confidence} — Provenance on every sourced 6W
  • 0 — Slots ever invented to reach 100%