records: land the data from 5 of the 15 open PRs, correct 4 stale claims, leave #471 open - #518
Merged
Conversation
added 6 commits
August 13, 2026 06:45
…`main` has been dangling for days
`main` references `docs/SIZE_SWEEP.md` on **26 lines across 8 files** and does not
contain it. Counted, not recalled:
benchmarks/itx_16bpc_ab_2026-08-10.meta docs/ITX_16BPC_DISPATCH.md
docs/CONTENT_CLASS.md scripts/perf/content_report.py
scripts/perf/content_sweep.sh scripts/perf/itx_ab_report.py
scripts/perf/mk_size_ladder.sh src/safe_simd/cdef_arm.rs
`CONTENT_CLASS.md` alone accounts for 12 of those lines, and #514 left this open
deliberately with a "not on main, here is where it is" pointer at
`measure/size-sweep-intercept` (`30a7294`). #487 carries a BYTE-IDENTICAL copy —
`sha1 eaff7b7071d9e66ab03df29301855463b38ca736` on both `pull/487/head` and
`30a7294` — so landing it here closes that pointer rather than forking it.
Also lands the t=8 half #487 measured, which `SIZE_SWEEP.md` itself listed as
open ("t=1 for the whole ladder"), plus its `docs/SIZE_SWEEP_T8.md` and 9 data
files.
The finding, quoted from the committed record rather than re-derived: all 24
ladder vectors are ONE TILE (`scripts/perf/tile_layout.py`, whose teeth are that
`v4k_8tile` reads 4x2=8 and `v4k_1tile` reads 1), a one-tile frame has exactly
two runnable tasks, and `cores busy` never exceeds 1.19 at any size or thread
count. Re-encoding the same content at 8 tiles moves 4K t=8 from 1.07x to 5.20x
for +0.38% bytes. So the ladder's threading ceiling is the bitstream, not the
decoder — and the campaign's t=8 numbers come from `v4k_8tile`, which is I444 +
8 tiles, while this ladder's 4K cell is I420 + 1 tile. Two different bitstreams
behind one "4K".
Caveat carried forward with the data, not softened: **all 1,944 rows are
load-tagged** (the `measlock` EXIT-trap defect #514's brief now documents let two
agents measure at once), so the absolutes are inflated and the tiled t=8
speedups are LOWER BOUNDS. Gates on the branch: 30/30 bit-identical to dav1d
1.5.4 before any timing, 18/18 thread-invariant with a gate demonstrably able to
fail.
Records only. `examples/avif_to_ivf.rs` is compiled by CI and is left on the
branch as code; `scripts/perf/__pycache__/tile_layout.cpython-314.pyc` is a
stray artefact `30a7294` had already dropped and is not landed. The eleven
`scripts/perf/*` files ARE landed: they are the measurement harness the records
name as their reproduction path, they are not in the decoder build, and #507 set
that precedent with `scripts/x64/build_and_run_x86.sh`.
Source: PR #487 @ 178e070.
…and a third recall-not-count fix The header's 'SIZE_SWEEP.md is NOT on main' pointer was true on 2026-08-12 and is not now. Corrected in place with the old wording quoted, not deleted. Its 'eleven references' was also a recalled number. Counted on the pre-change file: 13 occurrences of the string on 12 lines, 10 of them in the body.
…of these files by name `docs/AGENT_BRIEF.md` §6's V-batch row ends `benchmarks/lf_vbatch_iso_2026-08-10_v1.tsv`, and that file was not on `main`. Same dangling-citation class #514 cleared for `TILED_SCALING.md` and `X64_APPLICABILITY.md` §F; this is the one it did not reach. #488's CONCLUSIONS are already on `main` in four places and none of them change here — AGENT_BRIEF §6 (two rows: the H cap as a structural 1.000, the V cap's +3.0%/+7.9% machinery cost), `OWNERSHIP_MODELS.md:344` (1.971x count cut, t=8 ratio 1.0005, p=1.000), `SHARD_GRANULARITY.md:268` (cited as the converse of #500), and `BOUNDS_MAP.md:473`'s CONTRADICTED section on its soundness TEST. What was missing is the rows underneath them: * `lf_vbatch_2026-08-10_v1.tsv` (208 rows) and `_cap32.tsv` (248) — the paired A/B whose t=8 ratio is that 1.0005. * `lf_vbatch_iso_2026-08-10_v1.tsv` (18) and `_v3.tsv` (18) — the ISOLATION arm, which is the actually-transferable result: machinery kept, cap pinned back to 4, **+18.7% at t=1**. That is the row AGENT_BRIEF cites, and it is the evidence for "price the MACHINERY a count reduction needs", not just the count. * `lf_cap_census_2026-08-10.txt` (101) — the `LFCAP` census behind H's exactly 1.000 at caps 4/8/16/32/64. * `ctx99_sites_2026-08-10.tsv` (24) — the `#[track_caller]` split of `src/ctx.rs:99` across its 12 real callers, summing to 2,534,988 exactly. `main` cites that total in three places (`MUT_RECON_KERNELS.md` :27, :471, :521) and has never carried the breakdown, including the 50/50 split whose `t.l` half is 1,267,494/frame of per-worker buffer. Records only — #488's `src/ctx.rs`, `src/loopfilter.rs` and `lib.rs` probe wiring is NOT landed and stays on `pull/488/head` @ 419d271. Its own body says the tree is back to `f87b12c` with the kernel file byte-identical, so nothing behavioural is being withheld. Source: PR #488 @ 419d271.
… cite it by name `benchmarks/tile_threading_guard_2026-08-06.meta` is referenced by name from `shard_tracker_2026-08-07.meta:274`, `tracker_decomp_2026-08-07.meta:251` and `x64_i265_gap_2026-08-08.meta:33` — the last two for its VECTOR RECIPE, i.e. `main` currently tells a reader to go read a file it does not have. Landing the meta plus its three `.tsv.zst` (5.7 / 6.5 / 6.6 KB). Carries three things that exist nowhere else on `main`: * the #445 regression itself, per-cell (8bpc t=2/4/8 at 1.043-1.082, t=1 flat at 0.997-1.022 as the control, 10-bit unaffected) and the probe that acquits the memcpys — keep both memcpys with one contiguous guard and it measures identical to baseline, so the cost was 2h lock round-trips per block; * the REJECTED one-strided-record attempt, with both variants' numbers; * the vector recipe the two 2026-08-07 metas send readers here for. **A dated supersede is added in place over Result 3, not a deletion.** That section says the strided record is "recorded so it is not retried" — it WAS retried, and #505/#513 made it the default path on 2026-08-11. Its two designs are still correctly refuted and its constraint (leave the dense scan byte-identical) is exactly what the successful retry obeyed, so the section is worth keeping and worth annotating rather than either deleting or leaving to read as current. Records only. #450's `include/dav1d/picture.rs` batching, its `crates/rav1d-disjoint-mut` additions, `examples/bench_ab_decode.rs` and the two `scripts/perf/ab_*` harness files are code and stay on `pull/450/head`. Source: PR #450 @ b5211a0.
…sured, and it corrects `main`'s contention figure The triage brief characterised #471 as "one of the four waiting-policy arms #504 measured as NULL". Reading its committed data says otherwise, so it is landed as a live finding rather than closed as a duplicate. WHAT IS NEW RELATIVE TO #504 (verified against #504's own record, not recalled) #504 ran backoff/yield/relax/park on `c256x2048` at **t=8**, n=15. Its own not-measured list, `benchmarks/c256_contention_2026-08-11.meta:128`, ends with `t=16`. #471 ran spin-64-then-yield on `v4k_8tile`{,`_10b`} at n=16 on an idle box (every committed row `foreign_max = 0`) across t=1/2/4/8/16 and found: * null at t=1/2/4/8 on every statistic — which AGREES with #504; * **0.955 (8bpc) / 0.960 (10bpc) at t=16**, p90 and max moving by the same factor, i.e. the whole distribution shifted rather than a tail being clipped. t=16 is the only cell on this host where threads exceed cores (M4 Pro, 8 P + 4 E = 12 logical). So the joint statement is: refuted at t <= 8 on two cells, OPEN under oversubscription. AGENT_BRIEF §6 gets a second row saying exactly that, and the existing row is re-titled "CLOSED AT t <= 8" with its scope stated. THE CONTENTION FIGURE ON `main` IS WRONG BY 6x, AND THIS IS THE COUNT `crates/rav1d-disjoint-mut/src/tracker_shard.rs:582` and `docs/C256_CONTENTION.md:160` both say the earlier TinyLock nulls were taken "where contention is ~0.02% of registrations". That is `wide_probe::N_SLOW` — a count of `BorrowTracker::add_slow`, the poisoned / live-wide-record / multi-block path — divided by the registration population and quoted as a contention rate. Its provenance is traceable to an `add_slow` count at `benchmarks/verify_compose2_2026-08-08.meta:278`. Directly counted on the same vector with `--features probe-lockstats`: 45,401,450 lock acquisitions/frame, ~27,800 contended = **0.061% of acquisitions / 0.122% of registrations**. Both sites get a dated in-place correction. #504's 0.264% for `c256x2048` t=8 is a different cell, was counted directly, and is explicitly NOT disturbed — nor is §5's "at most 10.7% is waiting" arithmetic. ALSO CARRIED * Two independent prices for `spin_loop()` on this host — 8.28 ns here, 7.6 ns in #504 two days later. Both kept and dated; neither is the ~627 ns that applies under real contention. * #471's record refutes its OWN PR body: the 8bpc t=8 bands [67.8..114.6] / [73.2..112.8] that the body asked to be judged on appear in no committed TSV in this repo and in no issue or PR body except #471 itself, and real base band widths are ~8% of the median, not ~60%. Third instance of the unsourced-number class the campaign keeps having to correct. Records only — the `TinyLock` change itself, the `probe-lockstats` feature and the three `scripts/perf/tail_*` files are code and stay on `pull/471/head` @ 5807083. The shipping build still spins unbounded; nothing here changes that, and it should not be changed without the t=12/24/32 ladder. Source: PR #471 @ 5807083.
… left open Companion to #514's round. Records what landed, what closed, where each closed PR's finding lives on main (checked by reading the file, not by title), the branch head SHA for everything not landed, and the one PR left open with what would settle it. Also states plainly the three supersession claims the triage brief got wrong or imprecise (#471, #469, #472) and two conclusions on closed branches that later rounds refuted (#480's residual attribution, #485/#488's count-is-cost framing).
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #518 +/- ##
=====================================
Coverage 5.51% 5.51%
=====================================
Files 85 85
Lines 36094 36094
=====================================
Hits 1990 1990
Misses 34104 34104 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
This was referenced Aug 13, 2026
Closed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Triage of the 15 PRs open from 2026-08-06 to 2026-08-10, run the way #514's round was: nothing
merged as written, nothing closed whose data exists nowhere else, stale claims corrected in place
with a date rather than deleted. Full index:
benchmarks/pr_triage_2026-08-13.meta.Records only. No decoder code, no
crates/behaviour change, no feature flags. Every closedPR's code stays on its branch at the head SHA recorded in the index. Nothing was re-measured —
another agent holds the box for timed work in a sibling repo — so every figure here is cited from a
committed record, from a CI log, or counted from the tree.
First: I was told three supersession claims that do not survive checking
The task brief asserted these from titles and campaign memory. Stated plainly rather than softened:
"perf(tracker): bounded spin then yield — the shipping build spun without bound #471 is one of the four waiting-policy arms perf(#455): c256x2048 t=8 — a finer shard block and four lock-waiting policies, both refuted, with the residual named #504 measured as NULL" — WRONG. perf(#455): c256x2048 t=8 — a finer shard block and four lock-waiting policies, both refuted, with the residual named #504 ran its
four arms on
c256x2048at t=8, and its own not-measured list(
benchmarks/c256_contention_2026-08-11.meta:128) ends witht=16. perf(tracker): bounded spin then yield — the shipping build spun without bound #471 ran at n=16 on anidle box across t=1..16 and read null at t=1/2/4/8 — agreeing with perf(#455): c256x2048 t=8 — a finer shard block and four lock-waiting policies, both refuted, with the residual named #504 — and 0.955 (8bpc)
/ 0.960 (10bpc) at t=16, with p90 and max moving by the same factor. t=16 is the only cell on
this host where threads (16) exceed cores (12 logical). Not a duplicate. Left open.
"perf(tracker): shard picture planes by COLUMN — a w x h block is ONE borrow at every thread count (0.785x at 8bpc t=8, scaling 4.74x -> 6.13x) #469's column-sharding is the shape The
&mut [u8]recon-kernel refactor, WRITTEN — sound, lands on #481's unsound ceiling at all 8 cells, and +1.6 MB instead of +96 MB #482's column-compactReconBandlanded" — IMPRECISE in away that matters. perf(tracker): shard picture planes by COLUMN — a w x h block is ONE borrow at every thread count (0.785x at 8bpc t=8, scaling 4.74x -> 6.13x) #469's mechanism is a tracker change:
RowMap, per-recordc0/c1columnbands,
cols_meet,COL_ANY,StridedRows. None of those symbols exist anywhere onmain.The
&mut [u8]recon-kernel refactor, WRITTEN — sound, lands on #481's unsound ceiling at all 8 cells, and +1.6 MB instead of +96 MB #482'ssrc/owned_recon.rsis an owned buffer proved by borrowck with no record at all, oneband per WORKER not per tile, removing recon's registrations rather than making them
column-aware. The thing that actually generalises "one record for a rectangle" is perf(tracker): exact strided-rectangle borrow records — measured, default-off, and the cost model they correct #505/The code-placement lottery is removable (16-byte alignment, 1.37% -> 0.18% spread); the CDEF rectangle pays -2.0..-2.5% at t=8; both rectangles flipped ON #513,
and it covers the filter chain — a different population. perf(tracker): shard picture planes by COLUMN — a w x h block is ONE borrow at every thread count (0.785x at 8bpc t=8, scaling 4.74x -> 6.13x) #469's goal was reached by two later
changes, neither of which is its mechanism.
"fix(soundness): the rectangle guard hands out ROWS, not the hull — same one registration, no overlapping
&mut#472 is what perf(tracker): exact strided-rectangle borrow records — measured, default-off, and the cost model they correct #505 implements and The code-placement lottery is removable (16-byte alignment, 1.37% -> 0.18% spread); the CDEF rectangle pays -2.0..-2.5% at t=8; both rectangles flipped ON #513 shipped by default" — CORRECT. Verified:DisjointMutRectGuard::row_mut(&mut self)atcrates/rav1d-disjoint-mut/src/lib.rs:1615, andCargo.tomldeclares__lf_rect/__rows_rectas retained no-ops because "the rectangle isnow the DEFAULT path (2026-08-11)". fix(soundness): the rectangle guard hands out ROWS, not the hull — same one registration, no overlapping
&mut#472's other half — themacos-15-intelcompact_read_per_rowoverlap it analysed and could not fix without an x86 box — wasindependently found, root-caused and fixed as the x86_64 t=8: deblock compact_read_per_row races a concurrent write (identical extents) — 4/768 vectors abort, aarch64 clean #494 t=8 race (
X64_APPLICABILITY.md§G).fix(soundness): the rectangle guard hands out ROWS, not the hull — same one registration, no overlapping
&mut#472 was right that the defect was onmainand not an artefact of its own change.What this lands
docs/SIZE_SWEEP{,_T8}.md+ 9 data + 11scripts/perf/*maincitesSIZE_SWEEP.mdon 26 lines across 8 files and does not contain itbenchmarks/+scripts/perf/paired_ab.pyAGENT_BRIEF.md§6 citeslf_vbatch_iso_2026-08-10_v1.tsvby namebenchmarks/park_not_spin_*maintile_threading_guard_2026-08-06.meta+ 3.tsv.zstmaincite it by name, two for its vector recipeSIZE_SWEEP.mdis byte-identical betweenpull/487/headandmeasure/size-sweep-intercept(
30a7294) —sha1 eaff7b70…— so this closes #514's deliberately-left-open pointer rather thanforking it. Excluded as code:
examples/avif_to_ivf.rs, and a stray__pycache__/*.pycthat30a7294had already dropped.Four stale claims corrected in place, none deleted
crates/rav1d-disjoint-mut/src/tracker_shard.rs:582+docs/C256_CONTENTION.md§5 — both saythe earlier TinyLock nulls were taken "where contention is ~0.02% of registrations". That is the
wrong counter: it is
wide_probe::N_SLOW, a count ofBorrowTracker::add_slow(thepoisoned / wide-record / multi-block path), divided by the registration population and quoted as a
contention rate. Traceable to an
add_slowcount atverify_compose2_2026-08-08.meta:278.Directly counted on the same vector: 0.061% of acquisitions / 0.122% of registrations — six
times, against a different denominator. perf(#455): c256x2048 t=8 — a finer shard block and four lock-waiting policies, both refuted, with the residual named #504's 0.264% for
c256x2048t=8 is a different cell,counted directly, and is explicitly not disturbed; nor is §5's "at most 10.7% is waiting".
docs/AGENT_BRIEF.md§6 — the waiting-policy row re-titled "CLOSED AT t <= 8" with itsscope stated, plus a new row for oversubscription carrying perf(tracker): bounded spin then yield — the shipping build spun without bound #471's numbers and what would settle it.
docs/CONTENT_CLASS.md— its "SIZE_SWEEP.mdis NOT onmain" header is now false. Itsrecalled count ("eleven references") was also wrong: counted on the pre-change file, 13
occurrences on 12 lines, 10 of them in the body. Third recall-not-count slip the campaign has
had to fix.
benchmarks/tile_threading_guard_2026-08-06.meta§Result 3 — "a REJECTED attempt, recorded soit is not retried". It was retried five days later and it paid, because the retry obeyed the
constraint that section ends on (leave the dense scan byte-identical). Annotated, not rewritten:
its two designs are still correctly refuted.
Left open
#471 only. Records landed, code not. What settles it: the t=12 / t=24 / t=32 ladder (queued
on that branch, never got an idle window) and x86_64, where
spin_loop()ispauseand thescheduler is not heterogeneous, so none of it transfers. Do not re-litigate at t <= 8 — that is now
null on two cells and two vectors.
Closed, each with a comment saying why and where its content lives
#450 #451 #468 #469 #472 #473 #474 #475 #480 #481 #485 #487 #488 — the SHA-verified table is in
benchmarks/pr_triage_2026-08-13.meta. #451's head761366e8is already an ancestor ofmain(landed via #454,
490ed78). Two conclusions on closed branches are flagged there as refuted bylater rounds: #480's residual attribution (it is code placement, #506) and #485/#488's
count-is-cost framing (cost tracks distinct shard lines visited, #505).
Gates
cargo fmtclean on both touched packages. The only non-docs/-benchmarks/-scripts/change is adoc comment in
tracker_shard.rs— which does mean this branch touchescrates/rav1d-disjoint-mut/**and so fires the 13 path-filtereddisjoint-mut-ci.ymllegs,including both Miri legs, unlike the other records PRs in this family.