- check_budget.py counted scripts/__pycache__/*.pyc in its corpus note, so the same commit reported 27 scripts on a machine that had run the suite and 16 on a clean checkout. The routing gate said 16 throughout; two gates disagreeing about one tree was the finding. - TOKENS_PER_CHAR was calibrated against a 67,011-character SKILL.md and the docstring's arithmetic (0.30 characters-to-tokens) did not describe that measurement. Re-measured here: 54,983 chars -> 12,906 tokens = 4.260; the constant and both comments now carry the number this tree measures. - test_budget_measurement.py pins the corpus exclusion, so a bytecode cache cannot re-enter the count and quietly change it again. - .github/PULL_REQUEST_TEMPLATE.md carries what CONTRIBUTING.md asks a contributor for: what was run, the four labels, what has to move with the change, and the boundary that was not exercised.
3.5 KiB
What this changes
One or two sentences. Name the file or the behaviour, not the intention.
What I ran
python check_repo.py && python check_refs.py && python check_routing.py \
&& python check_commands.py && python check_budget.py && python -m pytest -q
Paste the output that decides the question, including any gate that was red before the change and
why. Report only checks that actually executed — should pass is not a result, and a run on one
device, one ABI or one sample says so in the line where it is quoted.
<decisive output>
If mypy or flake8 are not installed locally, say that here: CI runs them, and a contributor
without them cannot reproduce that half.
Claims
Every claim carries one of the four labels this repository uses. observed requires both the command
and its output; inferred means it was not run; unverified means someone else said so; unknown
means nobody looked.
| Claim | Label | Command and result, or what would have to exist for it to be observed |
|---|---|---|
| observed / inferred / unverified / unknown |
- No chain is labelled above its weakest step.
- A negative result says whether it was
absent,unknownorpresent but unreadable, and names the probe's coverage. Only the first is a finding. - A measurement names the version, device or ABI it came from.
What has to move with it
Check every line that applies. These are the rows that cost a red CI run when they are missed.
- A reference file — named in
references/routing.md, reachable fromSKILL.mdor the README, with a load-this-when head if it passes 100 lines. - A script — a row in the routing script table, its capability declared in
scripts/capabilities.py, and--helpworking on a bare interpreter. - A symptom-index row — mirrored into
references/routing.md, which is compared rather than generated. - A section heading — every section reference that pointed at the old name is updated.
- A documented command — the flags are copied from
--help, not retyped. SKILL.md— the budget line is attached above; it is loaded in full on activation.- A capability claim — the row in
evidence/capability-matrix.jsonand the line inreferences/evidence-summary.md. No gate compares them; that is why the reviewer reads them. - A new pitfall — next number, same four headings.
README.mdandREADME.zh-CN.md— the two stay in step.- Documentation only — say so explicitly; a blank list is not the same statement.
Boundaries
Where something could not be exercised here, ship the measured half plus an explicitly labelled
template for the rest, and state what would have to exist for the other half to become observed.
- Anything needing a device, adb, frida, a rooted phone or the network is named as not run here, rather than described as working.
- One variable changed per result: if a result moved, it is attributable to the one thing this change touched.
- The scan in
scripts/scan_leaks.pywas run over the files being published, and its findings are resolved — including names and metadata that no pattern reads.