Skip to content

docs(state): audit cleanup — close Y4M-OOB + #239, dedup draft rows#403

Merged
lusoris merged 2 commits intomasterfrom
chore/state-md-audit-2026-05-05
May 6, 2026
Merged

docs(state): audit cleanup — close Y4M-OOB + #239, dedup draft rows#403
lusoris merged 2 commits intomasterfrom
chore/state-md-audit-2026-05-05

Conversation

@lusoris
Copy link
Copy Markdown
Owner

@lusoris lusoris commented May 5, 2026

Summary

Audits docs/state.md per ADR-0165 / CLAUDE §12 r13. Three semantic-equivalent edits:

  1. Y4M-411-OOB moved Open → Recently closed. PR fix(y4m): heap-buffer-overflow in 411→422jpeg conversion (dst_c_w==1) #357 / commit 05ba29a6 (merged 2026-05-04) ported the third sub-loop's (x << 1 | 1) < dst_c_w guard to the first and second sub-loops; ASan-clean post-fix on the parked y4m_411_w2_h4_oob_dst.y4m reproducer. Old Open-section row had the bug flagged (open) and the duplicate Recently-closed entry below it carried PR #TBD-fix (this PR, 2026-05-03) placeholder text — both now consolidated into a single Recently-closed row pointing at PR fix(y4m): heap-buffer-overflow in 411→422jpeg conversion (dst_c_w==1) #357.
  2. T7-29 part 4 — Vulkan v2 async pending-fence (ADR-0186 follow-up unblocked) #239 Vulkan fence serialisation removed from Open. Already present in Recently closed under PR #241 / commit e266bf8e; the Open-section copy was left behind when the v2 ring measurement gate flipped ADR-0251 from Proposed to Accepted on 2026-05-03.
  3. Seven duplicate (draft, ...) rows in Recently closed removed (vmaf_tiny_v1.onnx, kernel_template.h 8-SSBO cap, deliverables-check.sh, draft-CI-skip, ffmpeg-patches reviewer command, stale ADR slug refs, CPU score-drift bisect). Each had a merged-commit twin sitting directly below it; the duplicates were stale snapshots from the in-flight period before those PRs squashed onto master.

Net diff: 16 lines removed, 2 added (header date bump + closed-section consolidation). No semantic state changes — every closed bug stayed closed; every open bug stayed open.

Six deep-dive deliverables (ADR-0108)

  • (1) Research digest: no digest needed: trivial doc cleanup, no architectural decision
  • (2) Decision matrix: no alternatives: only-one-way fix — duplicates are duplicates; one canonical row per closed bug per ADR-0165
  • (3) AGENTS.md invariant note: no rebase-sensitive invariants
  • (4) Reproducer / smoke-test command: grep -c '|---|---|---|---|---|' docs/state.md returns 0 (was 1 from the orphaned separator); grep -cE '\\| \\*\\*Y4M-411-OOB\\*\\*' docs/state.md returns 0 in the Open section.
  • (5) CHANGELOG fragment: changelog.d/changed/state-md-audit-y4m-oob-239-cleanup.md
  • (6) Rebase note: no rebase impact: doc-only change to fork-local docs/state.md and changelog.d/; no upstream Netflix/vmaf interaction

Other PR-template invariants

  • Lint-clean (CLAUDE §12 r12): doc-only change; no C / Python / shell touched. mkdocs build exercises the file via the docs site.
  • Doc-substance (CLAUDE §12 r10): not user-discoverable surface; rule does not apply (state.md tracks fork-internal bug status).
  • state.md update (CLAUDE §12 r13): this PR IS the state.md update.
  • ffmpeg-patches (CLAUDE §12 r14): zero libvmaf C-API or CLI changes; rule does not apply.

Test plan

  • grep -nE '\\| \\*\\*Y4M-411-OOB\\*\\*' docs/state.md returns only the Recently-closed row (line ~46)
  • grep -c '|---|---|---|---|---|' docs/state.md returns 0
  • grep -cE 'PR #(296|288|292|300|297|304|305) \\(draft' docs/state.md returns 0
  • mkdocs renders docs/state.md without errors

🤖 Generated with Claude Code

lusoris added a commit that referenced this pull request May 5, 2026
…(ADR-0313) (#410)

* ci(policy): Required Checks Aggregator — unblock doc/Python-only PRs (ADR-0313)

The 23-named-required-check posture (ADR-0037) deadlocks doc/Python-only
PRs: the C-build matrix path-filter-skips on their diffs, but branch
protection counts a path-filter-skip + a never-ran-at-all as not
satisfying the required-check. PR #400 hit this concretely (10/23
succeeded; 13/23 either skipped or never reported; gh pr merge returned
"the base branch policy prohibits the merge").

Aggregator is one workflow with no path filter. It polls up to 8 minutes
for sibling workflows to register, then verifies each named check on the
head SHA reported success/skipped/neutral (or didn't appear at all,
which is the documented path-filter rejection semantics). Aggregator
becomes the single branch-protection required check; the 23 individual
workflows continue to run unchanged.

Manual operator step at adoption (after this PR merges):

  gh api -X PUT "repos/lusoris/vmaf/branches/master/protection/required_status_checks" \
    -F 'strict=true' -F 'contexts=["Required Checks Aggregator"]'

Unblocks #400, #403, #404, #405, #406, #407 currently stuck on the
deadlock. Per user popup direction 2026-05-05.

Files: .github/workflows/required-aggregator.yml (new),
docs/adr/0313-*.md (new), changelog.d/added/*.md (new),
docs/adr/README.md (+1 row), docs/adr/_index_fragments/_order.txt
(+1 line + new fragment), docs/rebase-notes.md §0313.

* ci: retrigger after PR body cleanup

* ci: retrigger after deliverables opt-out polarity fix

---------

Co-authored-by: Lusoris <lusoris@pm.me>
@lusoris lusoris marked this pull request as ready for review May 6, 2026 00:23
Copilot AI review requested due to automatic review settings May 6, 2026 00:23
Moves Y4M-411-OOB heap-buffer-overflow row from Open to Recently
closed (PR #357 / commit 05ba29a landed 2026-05-04); removes the
duplicate Y4M-OOB row + orphaned |---|---|---|---|---| separator;
removes the duplicate #239 Vulkan-fence row from Open (already in
Recently closed under PR #241); clears seven duplicate (draft, ...)
rows whose merged-commit twins lived directly below them.

No semantic state changes — every closed bug stayed closed; every
open bug stayed open. Triggered by /loop merge-train auditing the
state.md surface flagged by ADR-0165 / CLAUDE §12 r13.
@lusoris lusoris force-pushed the chore/state-md-audit-2026-05-05 branch from 18add08 to 0466b09 Compare May 6, 2026 00:23
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR performs a documentation hygiene pass on the fork-local bug tracker (docs/state.md) per ADR-0165/CLAUDE rule 13: it bumps the header update date, removes stale/duplicate entries, and consolidates already-closed bugs into the “Recently closed” section. It also adds a changelog fragment describing the cleanup.

Changes:

  • Update docs/state.md header date and remove duplicate/stale rows (including duplicate Open entries for #239 and Y4M-411-OOB).
  • Consolidate the Y4M-411-OOB fix into a single “Recently closed” row referencing PR #357.
  • Add a changelog.d/changed/ fragment documenting the audit cleanup.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.

File Description
docs/state.md Bumps update date; removes duplicate Open entries; consolidates Y4M-411-OOB and leaves canonical “Recently closed” entries.
changelog.d/changed/state-md-audit-y4m-oob-239-cleanup.md Adds a changelog entry summarizing the state.md audit cleanup.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread docs/state.md
| **CLAUDE.md §12 r14 ffmpeg-patches reviewer command was wrong** — `for p in ffmpeg-patches/000*-*.patch; do git apply --check "$p"; done` only succeeds for patch 0001 because patches 0002–0006 build on each other; correct gate is `git am --3way` series replay against pristine `n8.1` | PR #297 (draft, 2026-05-02) | — (rule wording fix, no ADR) | 2026-05-02 `/refresh-ffmpeg-patches` skill run: per-patch `apply --check` failed on 4/6 patches; `git am --3way` series replay succeeded for all 6 |
| **`docs/state.md` + `CHANGELOG.md` carried 15 stale ADR slug refs** (slug renames where NNNN stayed but filename evolved, e.g. `0152-monotonic-index-rejection.md` → `0152-vmaf-read-pictures-monotonic-index.md`) | PR #304 (draft, 2026-05-02) | — (doc cleanup, no ADR) | mkdocs `--strict` build clean; spot-check verifies each rewritten ref points at the actual on-disk filename for that NNNN. 11 wrong-NNNN refs (different concept under same NNNN, e.g. `0246-gpu-kernel-template.md` while disk-0221 is `vmaf-roi-tool.md`) split into a separate per-ADR-review PR |
| **1.07e-3 CPU `vmaf_v0.6.1` score drift between `/usr/local/bin/vmaf` v3.0.0 and master tip** — surfaced by 2026-05-02 `/run-netflix-bench` subagent run; well within Netflix golden's `places=2` tolerance, so the gate did NOT fire, but the drift was stable + reproducible | PR #305 (draft, 2026-05-02) — bisect identifies upstream Netflix `a44e5e61` (motion edge-mirror bugfix, Kyle Swanson 2026-04-17) inherited at fork root. Per-feature isolation: drift is entirely `integer_motion` (-1.005e-3) + `integer_motion2` (-0.985e-3); ADM and VIF are bit-identical. Snapshot regen via separate PR aligns `testdata/netflix_benchmark_results.json` with the fork's actual behavior. | — (bisect triage, no ADR) | `/bisect-regression` predicate against `vmaf_v0.6.1.json` brackets fork root `41301496` ↔ master `4cd3a8d8`; "first bad" = fork root means drift was inherited, not introduced. Doc at `docs/development/cpu-score-drift-bisect-2026-05-02.md` |
| **`y4m_convert_411_422jpeg` 1-byte heap-buffer-overflow on 4:1:1 streams with `dst_c_w == 1`** — the chroma-upsample routine's first two sub-loops unconditionally wrote `_dst[(x << 1) | 1]`; the third sub-loop already carried the correct `(x << 1 \| 1) < dst_c_w` guard. Triggered by any 4:1:1 Y4M whose width (after Daala chroma decimation) reduces to a 1-pixel destination chroma row — minimal repro: `YUV4MPEG2 W2 H4 F30:1 Ip C411`. Surfaced by the libFuzzer harness staged in PR #348. | PR #357 / commit `05ba29a6` (merged 2026-05-04), report PR #348 (merged 2026-05-04) | — (one-line guard fix, no ADR per CLAUDE §12 r8) | `libvmaf/test/test_y4m_411_oob.c` exercises the W=2 H=4 4:1:1 stream end-to-end through `video_input_open` + `video_input_fetch_frame`; ASan-clean after the fix, faults at `y4m_input.c:507` with `WRITE of size 1` before. The 3 canonical Netflix CPU golden tests (`src01_hrc00_576x324`, both `checkerboard_1920_1080` shifts) are unaffected — none use 4:1:1 with `dst_c_w == 1`. |
@lusoris lusoris merged commit 6f19698 into master May 6, 2026
55 checks passed
@lusoris lusoris deleted the chore/state-md-audit-2026-05-05 branch May 6, 2026 01:06
@lusoris lusoris mentioned this pull request May 6, 2026
9 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants