Files
exe-reverse/.github/PULL_REQUEST_TEMPLATE.md
root 63b2aca8d8 Fix the budget gate and add CI, lint and coverage guards
- check_budget.py escalated a hard index-row violation to 'warn' on both
  branches, so INDEX_ROW_HARD could never fail anything. It fails now, and
  tests/unit/test_budget_measurement.py pins both thresholds.
- The corpus note counted scripts/__pycache__/*.pyc, so the same commit
  reported 27 scripts after the suite had run and 16 on a clean checkout.
- TOKENS_PER_CHAR is re-derived from a measurement (26,795 chars -> 6,065
  tokens = 4.418); the comment's old figure and its arithmetic were both
  wrong for this file.
- check_repo.py's yaml sentinel carries the type ignore, so mypy is clean
  with PyYAML installed as well as without it.
- The CPUID test now skips with the probe's own note on a host without
  CPUID instead of failing, and pytest.ini points at tests/README.md, which
  exists, instead of an EXTENSION file that never did.

Tooling: .flake8 (a measured 120-column limit), .gitattributes, .gitignore
and .github/workflows/ci.yml (the five gates, the suite on 3.11-3.14 and a
lint job), which is what CONTRIBUTING.md already claimed CI runs. The
pull-request template it refers to now exists.

Content: pitfalls P26-P34 -- the analysis-level failures the catalogue was
missing (sampling read as observation, a self-built parser trusted, a
verification that could not have failed, a shell-mangled command line) --
registered in the symptom index and its routing mirror. FINDINGS F11-F15
record the defects above.

Tests: the coverage guard derives its subject from scripts/ rather than a
hand-written list, pe_triage.py and pe_diff.py gain their first tests, and
plan.py / preflight.py are declared uncovered with reasons.
2026-10-24 14:55:02 +08:00

3.6 KiB

What this changes

One paragraph. What changes, and what a reader can do afterwards that they could not before. If the change is documentation only, say so here and again in the effect surface.

Evidence

Every command below was run in this checkout. Paste the output that decides the question; a summary of confidence is not a result, and should pass is not a run.

python check_repo.py
python check_refs.py
python check_budget.py
python check_routing.py
python check_commands.py
python -m pytest -q
mypy *.py skills/exe-reverse/scripts/*.py
flake8 *.py skills/exe-reverse/scripts/*.py

Output that matters:

<paste the decisive lines, and say what they decide>

Claims added or changed:

Claim Grade What it rests on (command + result)
observed / inferred / unverified
  • No claim is graded above the weakest step in its chain.
  • Every observed has the command and the output beside it.
  • Every negative result names the range, the pattern and what was searched. A search that returned nothing is evidence about the search.
  • Every limit cites the measurement or the constraint that set it, rather than a preference.

Effect surface

Check each line that applies. Documentation only is a claim, so make it explicitly rather than leaving the list blank.

  • SKILL.md — the budget gate output is attached above; it is loaded in full on activation.
  • references/ — a new or renamed file is registered in references/routing.md, reachable from SKILL.md or the README, and carries a navigable head if it passes 100 lines.
  • references/pitfalls.md — a new entry takes the next number and keeps the same shape.
  • scripts/ — a new script is in the routing script table, answers --help on a bare interpreter, and its argument table matches every command the docs tell a reader to run.
  • tests/ — a new script is added to conftest.SCRIPT_FILES or declared uncovered with a reason in tests/cli/test_cli_coverage.py; a fixed defect has a test that fails without it.
  • evidence/ and docs/tool-verification/ — a capability claim moved in both, and the measurement record quotes the command it rests on.
  • README.md and README.zh-CN.md — the two stay in step.
  • docs/tool-verification/FINDINGS.md — a defect found by the repository's own tools is recorded with its symptom, root cause, how it surfaced, and the check that now catches it.
  • Documentation only — no behaviour changed, and the gates above still pass.

Readiness declaration (human owner only)

An agent does not fill this section in. Leave it blank; the reviewer completes it.

  • The change belongs in this repository rather than in a fork or a downstream project.
  • The boundary of what was not exercised is stated, not implied: every route that needs a debugger, a driver, a kernel component, a hypervisor, test signing or a second machine is named as not run here.
  • The serialized evidence is committed, and nothing in it carries target identity or a machine-specific path.
  • The commit is ready to be fast-forwarded onto main.