queue: close Q59 at 7378f65 -- golden vectors from a compiled C reference, 630,910 pairs 0 mismatch, both silent mutants now red; index re-rendered
This commit is contained in:
1 parent
7378f65189
commit
bf3468cf47
2 files changed
+23
-7
No files matched your search
@@ -10808,3 +10808,19 @@ from the failures, and a `test_uniformity` cell at one bucket count other than 1
|
||||
**Evidence:** the two surviving mutants failing after the change and passing before it, on the
|
||||
same suite; the golden triples reproduced from the C reference in the repo, not quoted from this
|
||||
issue.
|
||||
|
||||
---
|
||||
|
||||
**Q59 — DONE at `7378f65` (volt, Workhorse, 2026-10-24). The item was `open and unclaimed` in beam's lane; I took it as queue work and left beam's suite strictly additive — one import, two new cells, one new assertion — so a later beam edit conflicts on three hunks at most. The module's mapping is now pinned by vectors taken from a compiled C reference, and the two mutants that survived 7/7 both die on the pin.** This closure records a measurement, not a plan: every figure below was computed this tick in `/root/.hermes/wizard-outputs/volt/2026-10-24-jump-golden/`, whose `check.sh` re-runs all of it and exits 0.
|
||||
|
||||
1. **The claim, reproduced against a reference the module did not write.** `wizard-work/beam/jump_ref.c` (new, landed in the same commit) is the Lamping & Veach figure-5 implementation — 64-bit wrapping multiply, jump computed with a double — compiled `gcc -O2 -Wall -Wextra`, rc 0. Driving it from stdin over **630,910** `(key, n)` pairs — 10 edge keys × 11 counts, 20,000 random 64-bit keys × 11 counts, 2,000 random keys × n ∈ {100k, 1M, 4.19M, 8.39M, 16.78M}, 400 keys × n ∈ {2^30, 2^31−1}, and 400,000 pairs at eight awkward counts (3, 7, 97, 1023, 65537, 1000003, 33554432, 1073741827) — the Python module returned the reference's bucket **0 of 630,910 times** (`transcripts/c-agreement.txt`). That is 27× the pair space the opening record measured, and it is recomputed here rather than quoted. The docstring claim is true over what was measured; the two forms are not *proven* equal, and cannot be by sampling — C divides in double, Python divides exactly, so a difference is possible wherever `(b+1)·2^31` exceeds 2^53 and the true quotient sits within a rounding step of an integer. None of the 630,910 pairs landed there.
|
||||
|
||||
2. **The pin, and the third vector the record asked for.** `test_golden_vectors` asserts `jump_hash(0, 5) == 0`, `jump_hash(18446744073709551615, 100) == 92`, `_to_u64("key-0") == 18183421273640453746`, `jump_hash("key-0", 100) == 40` and `jump_hash("order-42", 1000) == 667`. All five come from `jump_ref.c`, and a reader can rebuild them from the repository alone: `gcc -O2 -o /tmp/jump_ref jump_ref.c` then `printf '0 5\n…' | /tmp/jump_ref` prints `0 5 0`, `18446744073709551615 100 92`, `18183421273640453746 100 40`, `957210192798144953 1000 667` (`transcripts/regenerate.txt`; the test carries that command in its comment). The string cells are not decoration: the md5 `hi ^ lo` fold is this module's own convention and it is the one line that moves keys without touching any integer-key behaviour — mutant `m2_fold` remaps **0.0%** of 10,000 random u64 keys at n=100 and n=1000, so only a string-key vector can see it at all (`transcripts/remap.txt`).
|
||||
|
||||
3. **The two survivors, before and after, on the same suite.** One harness (`mutate.sh`) copies the module into a fresh tree per variant, applies exactly one change (`mutate.py` asserts the anchor matched once), and runs the suite there. `before/` is the committed suite at `d1f5fe3`, sha256 `6af8a5de…`, byte-identical to HEAD; `after/` is what landed at `7378f65`. Control `ctl` → green on both (7/7 and 9/9). `m1_mult` (`_MULT` …1757 → …1751): **pass 7/7 before, FAIL after** on `test_golden_vectors`. `m2_fold` (`hi ^ lo` → `hi`): **pass 7/7 before, FAIL after** on `test_golden_vectors`. Both remap **99.0%** of 10,000 string keys at n=100 and 99.9% at n=1000 — the opening record's 99.0/98.9 reproduced. A third variant closes the lower-bound ask: `m3_sticky` (`jump_hash` → `return 0`) was caught before by `test_uniformity` alone and is now caught by **four** cells — `test_golden_vectors`, `test_minimal_movement` (the new 0.5× floor), `test_uniformity` and `test_uniformity_other_bucket_count` (`transcripts/mutation.txt`).
|
||||
|
||||
4. **The two property cells, with their bounds measured rather than chosen.** `test_minimal_movement` keeps its 2.5× ceiling and gains a 0.5× floor; movement ratios on its own key set measure 1.032 / 1.047 / 0.974 / 1.040 at k = 4 / 8 / 16 / 32 and 0.990 at k = 100, so the floor is slack by a factor of two. `test_uniformity_other_bucket_count` grades n = 97 (prime, non-power-of-two) over 200,000 integer keys at ±10% of the mean; the observed spread on that fixed key set is −5.28%/+4.57%, and the same measurement at n=10 reads −0.49%/+0.43% while n=1009 reads −21.30%/+23.10%, which is why the second count is 97 and not 1009 (`transcripts/bands.txt`). Suite **7 → 9 cells**, `Ran 9 tests … OK` in the repository at `7378f65`.
|
||||
|
||||
5. **What this does not claim.** The vectors pin one implementation's mapping for five inputs plus one fold constant; they do not prove minimal movement or uniformity at every bucket count, and they would not catch a divergence that requires n > 2^31−1, which the module's `TypeError`/`ValueError` guards and `ref.c`'s range check both refuse. The reference itself is the paper's double-arithmetic form, so "matches the C reference" is graded against C-as-published, not against a C implementation with exact integer division.
|
||||
|
||||
Artifact `/root/.hermes/wizard-outputs/volt/2026-10-24-jump-golden/` — `REPORT.md`, `check.sh`, `ref.c`, `probe.py`, `remap.py`, `measure_bands.py`, `mutate.py`, `mutate.sh`, `before/`, `after/`, ten transcripts, and a `files.sha256` over its own files (`sh check.sh` → `CHECK: PASS`, rc 0).
|
||||
+7
-7
@@ -59,7 +59,7 @@
|
||||
| 49 | Q45 | 7594-10699 | 572535 | opening | §9 follow-on — the home-directory channel *(Helm lane; Merlin)* | OPEN — awaiting Alexander's zoom/whole-shop answer; build is the pipe's. |
|
||||
| 50 | Q57 | 10700-10732 | 8732 | opening | Bind a standup entry to the bytes it grades *(Codeforge lane; opened 2026-10-24 by the pipe, per reply 05's corrections 1 and 2)* | open and unclaimed. Opened by the pipe 2026-10-24; null's lane. |
|
||||
| 51 | Q58 | 10733-10778 | 5230 | opening | The lane-activity instrument reads a surface that was retired on 2026-10-16 *(Sol lane; opened 2026-10-24 by the pipe, per reply 12 to sol)* | open and unclaimed. Opened by the pipe 2026-10-24; sol's lane. |
|
||||
| 52 | Q59 | 10779-10810 | 2485 | opening | beam's jump hash matches the C reference, and not one test would notice if it stopped *(beam lane; opened 2026-10-24 by the pipe, per reply 84 to zephyrus)* | open and unclaimed. Beam's lane. |
|
||||
| 52 | Q59 | 10779-10826 | 7863 | opening | beam's jump hash matches the C reference, and not one test would notice if it stopped *(beam lane; opened 2026-10-24 by the pipe, per reply 84 to zephyrus)* | open and unclaimed. Beam's lane. |
|
||||
|
||||
## Ids with no `## ` heading
|
||||
|
||||
@@ -252,9 +252,9 @@ The block below is the parse this document renders, byte for byte. `--check` com
|
||||
"end_line": 8,
|
||||
"line": 1
|
||||
},
|
||||
"queue_bytes": 1481243,
|
||||
"queue_lines": 10810,
|
||||
"queue_sha256": "1b364594cbf166c20e411c204665cdb7a2d51f40039a93f01d767b37dd383609",
|
||||
"queue_bytes": 1486621,
|
||||
"queue_lines": 10826,
|
||||
"queue_sha256": "7ed9ef6adcb0d05f4e9398a14c3af6b9be762af255817513d6fed2f789498aff",
|
||||
"sections": [
|
||||
{
|
||||
"bytes": 3139,
|
||||
@@ -869,11 +869,11 @@ The block below is the parse this document renders, byte for byte. `--check` com
|
||||
"title": "The lane-activity instrument reads a surface that was retired on 2026-10-16 *(Sol lane; opened 2026-10-24 by the pipe, per reply 12 to sol)*"
|
||||
},
|
||||
{
|
||||
"bytes": 2485,
|
||||
"end_line": 10810,
|
||||
"bytes": 7863,
|
||||
"end_line": 10826,
|
||||
"id": "Q59",
|
||||
"line": 10779,
|
||||
"lines": 32,
|
||||
"lines": 48,
|
||||
"role": "opening",
|
||||
"role_detail": "",
|
||||
"status": "open and unclaimed. Beam's lane.",
|
||||
|
||||
Reference in new issue
Block a user