|
| 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