fnl-verification
Skill4 starsChanged 14 days agoMITView on GitHub
Verify before claiming or accepting work. Use when an agent or session reports a task done or tests passing, when choosing which tests to run after a change, when deciding whether a full suite is needed, before heavy container-backed or end-to-end runs, and before saying anything is done, fixed or passing.
In this repository19 other files it gives its agents.
- rules/AGENTS.mdAGENTS.md
- skills/fnl-delegate/references/agents.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- fnl-advisorSkill
- fnl-askSkill
- fnl-coding-routerSkill
- fnl-commit-messagesSkill
- fnl-delegateSkill
- fnl-handoffSkill
- fnl-open-source-reviewSkill
- fnl-plugin-packagingSkill
- fnl-restore-pointSkill
- fnl-review-gateSkill
- fnl-security-review-gateSkill
- fnl-session-hygieneSkill
- fnl-setupSkill
- fnl-statusSkill
- fnl-updateSkill
- fnl-versioningSkill
The file
We split this skill into the rules it gives an agent
4 rules. About 0 are common, 4 are distinctive, and 0 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈4
Distinctive · estimate
This author's own choices. Worth a look.
0
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 18
Keep local fixtures small (about 1,000 items) unless the owner asks for larger stages.
- Distinctive: line 23
Read the output, not the exit code alone: count what ran, what skipped and what was filtered out.
- Distinctive: line 38
Never print, dump, log or assert on the process environment.
- Distinctive: line 62
Read references/judgments.md for each semantic check, host-answer completion, fallback and validation.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Verification
A report is a claim. The diff and the test output you read yourself are the evidence.
Pairs with tdd and diagnosing-bugs from mattpocock/skills, which produce the red and green evidence this skill reads.
Choose the tests
Advisory (agent judgment): Talk to the user in the language they are using, including questions and option labels; keep command names, flags, file paths, skill names and other technical names unchanged.
- Run the targeted tests at checkpoints, not after every edit: those covering the changed code and its traced consumers, plus the project's lint and unit checks for those packages. Pick them from the diff (packages, test name patterns, the end-to-end suite only when the user-facing path changed). Say when no test covers the change; when that change alters runtime behavior, name the gap and propose a test rather than skip it.
- Run a full suite only when the owner asks. Gates and pull requests use targeted tests; CI runs the rest after an authorized push. When the change touches widely shared code whose consumers you cannot trace in full, propose a full suite and wait for the owner's yes.
- Keep local fixtures small (about 1,000 items) unless the owner asks for larger stages.
- Heavy jobs (container-backed suites, scale measurements, end-to-end runs) run one at a time per machine under an atomic
mkdirlock (fnl-delegate"Heavy jobs" points to the snippet; without it,until mkdir "$LOCK"; do sleep 15; done, then remove the lock when the job ends); light targeted runs may overlap. Keep the machine awake for long runs.
Read the evidence
- Read the output, not the exit code alone: count what ran, what skipped and what was filtered out. A skipped or partially green run is not a pass.
- Missing setup, a missing API or credential is not a behavioral pass: report it as blocked.
- Enabled configuration, a tool's DONE, a tick in a task list or a moved HEAD is not proof of behavior.
- For queries, reports, infrastructure changes and forecasts, a run that completed is not proof the result is right: see
fnl-coding-routerreferences/non-code-work.md.
Bind proof to final bytes
Evidence belongs to the exact revision, contracts, dependencies, configuration and environment it ran on. A later change invalidates only the evidence it affects; rerun those checks and keep the required final ones.
Report each check as PASS, FAIL, PENDING, SKIP, WAIVED (with who waived it and why) or N/A. Only the owner waives a check; an agent proposes the waiver with its reason and leaves the check PENDING until the owner agrees, unless the project's rules already waive it.
run_env.py is the only way the plugin starts a delegate or test command: it builds an allowlisted
child environment, shared with delegate_env.py and verify_claim.py (script-enforced).
For a manual targeted test: python3 -I <this skill folder>/scripts/run_env.py -- <test argv>.
The quota probe and ps snapshot keep their own scoped allowlists under the CLAUDE.md exceptions.
Never print, dump, log or assert on the process environment; test synthetic mappings and key names only.
Accepting someone else's work
The coordinator checks the branch and base, every hunk's acceptance-criterion trace, and the targeted test output before accepting a delegated report (advisory, agent judgment). Run the self-contained command:
python3 -I <this skill folder>/scripts/verify_claim.py --brief <json> --base <full commit id> --head <reported full commit id> --ledger-id <dispatch id> --checkout <task checkout> --requests-out <new private local file>The JSON brief is an explicit execution contract approved by the coordinator (advisory, agent judgment): scope is a list of relative file names or glob patterns; tests is a nonempty list of argv arrays, never shell command strings; criteria is a list of objects with identifiers C1 through C9999 and an English question. For example:
{"scope":["src/parser.py","tests/test_parser.py"],"tests":[["python3","-I","tests/test_parser.py"]],"criteria":[{"id":"C1","question":"The supplied evidence shows the parser rejects empty input."}]}List whole test modules and their traced consumers; never list a full suite (advisory, agent judgment). The script refuses shells and full-suite discovery, runs exactly the listed argv arrays with no shell, limits each command to 300 seconds and 64 KiB combined output, and kills the process group when it ends. The coordinator confirms that any custom test command is targeted; a script cannot infer its coverage (advisory, agent judgment).
verify_claim.py checks the reported head, ancestor base, clean checkout before and after testing, changed-file scope and test exits. It prints PASS/FAIL plus the evidence, then writes a metadata-only verify receipt through record.py (script-enforced). Exits: 0 for passing mechanics, 1 for failed mechanics, 2 for invalid input or unavailable evidence/storage. Exit 0 grants no acceptance. The receipt holds head, checkout hash, test/mechanical results, an evidence-packet digest and each criterion's identifier, answer, source and fallback flag; no criterion text,
commands, output or paths.
For a criterion comparing two documents, use {"id":"C2","documents":[{"path":"docs/first.md","question":"The document states the reset interval is fifteen minutes."},{"path":"docs/second.md","question":"The document states the reset interval is fifteen minutes."}]}. The coordinator splits the criterion into equivalent positive statements per document (advisory, agent judgment); the script reads each independently at the reported head, asks once per document and compares answers in code. Both must be yes for support; either no is reported as no, otherwise
insufficient. Two no answers never prove agreement.
Read references/judgments.md for each semantic check, host-answer completion, fallback and validation.
After the coordinator decides to accept, fnl-delegate's ledger.py finish --outcome accepted --checkout <task checkout> requires a passing receipt for that checkout's current head (script-enforced). Work with nothing to check may use the logged, counted --accept-unverified --reason <text> escape hatch; keep the full reason in the coordinator report, as the ledger stores only its digest. This gate covers delegated work in the ledger only; the coordinator's own work stays under the review gate and an agent bypassing the ledger is not blocked.
Claims
State what was run and what it showed. Distinguish drafted, verified, integrated, delivered and parked. Verification grants no publication, push or deploy authority.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

