Skip to content

Commit cf5a8a4

Browse files
docs: record the v0.8.2 verification ledger
v0.8.1's ledger recorded a held-out result the released artifacts never carried, which is what #333 is about. This one states the numbers this release publishes and requires them to match the committed results, the README, the evidence page and the benchmark card — publish.yml gates on both suites with --check-recorded, so a disagreement blocks the release rather than shipping past it. It also records what was measured and rejected: the tie-break that cost held-out top-1, the .css/.json removal that measured as an exact no-op, the two attempts at generated-path mentions, and the import-graph label that turned out not to be a defect. A measured non-improvement is a result; burying it is how a stale claim starts. Closes #333 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
1 parent 943b178 commit cf5a8a4

1 file changed

Lines changed: 79 additions & 0 deletions

File tree

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
# FixMap v0.8.2 issue verification ledger
2+
3+
This ledger accounts for the audit sweep filed against v0.8.1 on 2026-08-01 — issues #274
4+
through #419. **The numbers below are the numbers this release publishes.** That is the
5+
point of the document: v0.8.1's ledger recorded a held-out result the released artifacts
6+
never carried (#333), so the ledger, the committed `results.json`, the README, the evidence
7+
page, and the benchmark card must agree here or the release does not ship.
8+
9+
## What the suites measure, as recorded in this tree
10+
11+
| Suite | Top-1 | Top-3 | Top-5 |
12+
| --- | --- | --- | --- |
13+
| Held-out (12 repositories, never tuned against) | 7/12 · 58.3% | 8/12 · 66.7% | 9/12 · 75.0% |
14+
| Development regression (16 repositories) | 11/16 · 68.8% | 16/16 · 100% | 16/16 · 100% |
15+
| Adversarial (8 cases) ||| 8/8 pass, false-confidence rate 0.0 |
16+
17+
Confidence calibration on held-out, which **moved** in this release:
18+
19+
| Label | Cases | Correct | Accuracy |
20+
| --- | ---: | ---: | ---: |
21+
| high | 3 | 2 | 0.667 |
22+
| medium | 7 | 4 | 0.571 |
23+
| low | 2 | 1 | 0.50 |
24+
25+
The `high` band halved (6 cases → 3) and became more accurate (0.50 → 0.667), because
26+
`scanComplete` now means "every candidate was actually read" rather than "the file limit was
27+
not reached". A repository with files past the sample ceiling no longer earns a label it
28+
cannot support. `high` outperforming `medium` is the ordering the label is supposed to have.
29+
30+
**8/12 Top-3 is not a regression against the 9/12 published before v0.8.1.** The held-out
31+
composition changed during the v0.8.1 follow-up: `sindresorhus/got` rotated into the
32+
regression suite once its blob permalink had informed a ranking fix, and a replacement was
33+
drawn by the frozen selection rule. Different repositories, not a different ranker.
34+
35+
## Issue coverage
36+
37+
| Area | Issues | Proof |
38+
| --- | --- | --- |
39+
| Windows paths and scan honesty | #388, #389, #390, #393, #400, #402, #411 | Exclusion patterns normalize `\` to `/` at the single entry point serving CLI, `.fixmapignore` and the Action. A junction fixture created with `mklink /J` ranks once, as the real file. A tracked-but-absent path is diagnosed rather than blamed on `.gitignore`. Tests assert on backslash input directly, since CI runs Ubuntu. |
40+
| Encodings and binary content | #306, #290, #296, #325, #339, #391 | BOM, UTF-16LE and UTF-16BE task files and manifests all parse; a `.ts` file containing NUL bytes is no longer sampled as text. Verified against fixtures on a baseline build and this one. |
41+
| CLI contracts | #283, #288, #300, #303, #317, #326, #350, #357, #363, #364, #365, #367, #368, #370, #373, #381, #392, #394, #395, #415, #419 | `?query`, `#fragment`, `www.`, `api.`, SSH and `file://` forms normalize; credentials, foreign hosts and ports still refuse. An unresolvable `--diff` exits 1. Argument errors went from 50 lines to 3. No Node stack reaches stderr for a `RepositorySourceError`. |
42+
| Language coverage | #311, #312, #332, #340, #341, #342, #354, #359, #383, #416 | `.vue`, `.svelte`, `.java`, `.php`, `.rb`, `.cs`, `.mts`, `.cts` rank; SFCs sample their `<script>` block only. Nested manifests inform detection when the root is silent. Measured after the extension widening alone *and* after the full batch: both suites unchanged. |
43+
| Test routing | #291, #297, #307, #310, #352, #353, #355, #360, #410 | `test:*` scripts route; a nested Go module gets `go test -C <dir> ./...`, which runs as printed; yarn workspaces are addressed by name; test routes are taken before lint and typecheck. |
44+
| Ranking and signals | #274, #281, #299, #305, #331, #358, #374, #379, #386, #401 | Stemming keeps `pass`, `class`, `process`, `status`; all eight inflection pairs converge. Blob, tree and blame links recover their repository-relative paths while badges stay stripped. Every knob was committed and measured separately. |
45+
| MCP parity | #278, #302, #322, #327, #328, #337, #348, #369, #377, #398, #414 | `fixmap_explain` accepts the plan scan options; `format` is case-insensitive; `fixmap_doctor` rejects unknown keys and sets `isError`; `fixmap_compare` validates report shape. Verified against real request handlers, not only the parsers. |
46+
| GitHub Action | #277, #301, #318, #323, #338, #343, #349, #351, #385, #397, #406, #407, #408, #413 | `exclude` no longer splits inside brace groups; a credentialed URL is refused rather than ranked as prose; comments are size-guarded before GitHub's 422; author matching is case-insensitive. |
47+
| Compare, verify, explain, remote | #284, #335, #344, #345, #356, #366, #372, #375, #376, #380, #382, #396, #412, #417 | Exclusion reasons are populated, not only summarized; markdown passed to `verify --report` is named as such; an empty comparison says so; the shallow-clone limitation is stated at the point of failure. |
48+
| Website and documentation | #279, #285, #289, #293, #294, #295, #298, #304, #308, #309, #313, #314, #315, #316, #319, #320, #321, #324, #329, #330, #333, #334, #336, #346, #361, #387, #399, #403, #404, #405, #418 | The demo's command preview reproduces its own controls; Compare's baseline is the previous wording on the same tree; the evidence callout derives its wording from the measured rate; `/robots.txt` returns 200. |
49+
50+
## Measured and rejected, not fixed
51+
52+
Recorded because a measured non-improvement is a result, and burying it is how a stale claim
53+
starts.
54+
55+
- **#282 — tie-break on definition evidence.** Held-out Top-1 fell 7/12 → 6/12. It did not fix
56+
the jest case it was filed about, and it demoted mongoose's `lib/document.js` behind a helper
57+
that merely defines a matching symbol. Reverted; issue closed with the numbers.
58+
- **#347`.css`/`.json` as source extensions.** The reported failure reproduces, but removing
59+
them measures as an exact no-op on both suites, because neither contains a case where an
60+
auxiliary file competes with implementation. Nothing shipped; the issue stays open.
61+
- **#362 / #371 — generated-path mentions.** Two implementations were tried. Redirecting broke a
62+
test asserting that `"dist/x.js is stale"` is a task genuinely about the artifact; adding the
63+
source alongside left the artifact leading at `high`. Both reverted; the issues stay open.
64+
- **#409 — import-graph direction labels.** Not a defect. Verified against a real graph: the
65+
label describes the neighbor's relation to the seed, deliberately the inverse of the map the
66+
edge came from. Swapping them would have reversed every proximity reason in every report. A
67+
regression test now pins the semantics.
68+
69+
## Validation record before publishing
70+
71+
- `npm run ci` green on the release commit: type-check, tests, production audit, lint, build,
72+
Action metadata, server manifest, Action bundle drift, smoke, internal evaluation, and the
73+
1,000-file scan benchmark.
74+
- Held-out and regression suites re-recorded from this tree; `--check-recorded` passes for both,
75+
and `publish.yml` gates on both before the GitHub release is created.
76+
- Adversarial suite: 8/8, false-confidence rate 0.0.
77+
- Diagnostics that describe the checkout rather than the analysis are excluded from recorded
78+
benchmark evidence, because Windows and Linux check out webpack's longest fixture paths
79+
differently and a pinned benchmark must not vary by platform.

0 commit comments

Comments
 (0)