Skip to content

Commit 150f1dd

Browse files
lusorisclaude
andcommitted
Merge the bug wave (#76) into the Intel validation branch
Brings the integrated bug wave (#76) under the Intel Arc B580 / UHD 770 validation branch (#68) so the Intel fixes are re-verified on top of it. Every source conflict keeps both intents. - ffmpeg-patches/files/vulkan/pelorus_denoise.comp.glsl: three hunks. (1) Both sides added the same `precise` comment above pel_to_sample(); the #76 side also adds the BUG-016 64-bit residual reduction, so that side is kept and the comment appears once. (2) Both sides made the patch-SSD accumulator `precise`. The Arc B580 comment from #68 is kept and reworded: #76 accumulates with an explicit fma(), so `precise` now forbids any fusion beyond that fma() instead of "any FMA". (3) The forward-lookahead tap reads next0 through texelFetch() on the sampled image (#68, needed because next0 is now a texture2D) and keeps the `precise` p and delta from #76 (BUG-027 tile=0/tile=1 identity). - ffmpeg-patches/files/vf_pelorus_grain_estimate_vulkan.c: one hunk. #76's split filter_frame() (BUG-010 rounding, BUG-029 RDD 5 model-0 table) comes first, followed by #68's pass-through grain_estimate_vulkan_config_output(). The output pad keeps #68's config_props. - ffmpeg-patches/test/vulkan-format-matrix.sh: one hunk where both sides added rows at the same place. Kept #68's 10-bit direct/tiled denoise row and linear-input pass-through row, then #76's ADR-0163 dehalo ring row. #76's fail-closed VUID scan (no `|| true`) merged without a conflict and now includes #68's two Intel allowlist entries. - docs/adr/README.md: the 0150 row goes between 0149 and 0151, so the table stays in numeric order with no blank lines. - docs/development/build.md: kept #68's "Native Windows (MSYS2 UCRT64)" section, followed by #76's renamed "Repository verification entry points" heading. - docs/metrics/grain_estimate.md: options table takes #76's `strength` and `model` rows (H.274 values, unaffected by strength) and #68's `native` row (only av1_nvenc -pelorus_film_grain reads the side data). The HEVC usage note keeps #76's cutoff paragraph (ADR-0155) and replaces "AV1 software encoders can use the native channel" with #68's correction (libaom-av1 and libsvtav1 ignore it). - docs/usage/grain-fgs-bsf.md: Verification keeps #76's fgs-bsf-contract and ADR-0155 runtime evidence, then #68's hevc_qsv re-run on Intel. The re-run is dated "before ADR-0155 changed the defaults", and the model 1 bullet now reads "the BSF default before ADR-0155", because #76 makes model 0 / log2_scale 2 the default and the estimator emits it. #76's "byte-identical pass-through" is scoped to its libx265 clips, because #68 measured NAL-identical but not byte-identical output on QSV streams. Generated files took the #76 side at the conflict and were regenerated at the tip: ffmpeg-patches/generate.sh (two runs, byte-stable; only 0002, 0003, 0006, 0007, 0014 and 0015 differ from #76) and scripts/release/concat-changelog-fragments.sh --write (CHANGELOG.md). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2 parents 16fd7d9 + 0ac1a37 commit 150f1dd

312 files changed

Lines changed: 28921 additions & 3183 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎.agents/agents/c-reviewer.md‎

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
---
2+
name: c-reviewer
3+
description: Reviews Pelorus C for Power-of-10 and SEI CERT C compliance. Use before merging libpelorus source or public-header changes.
4+
model: sonnet
5+
tools: Read, Grep, Glob, Bash
6+
---
7+
8+
<!-- markdownlint-disable MD013 MD041 -->
9+
10+
Strict `libpelorus` C reviewer. Authority: `docs/principles.md` sections 1-2. Review changed files only. Cite rule IDs.
11+
12+
## Checks
13+
14+
1. **Returns — P10-R7:** every non-void return checked or `(void)`-cast; public functions return `pel_result`; inputs receive null/range checks; no bare `return -1` across API boundaries.
15+
2. **Bounds — CERT ARR30-C, INT30-C, INT32-C:** validate offset/size arithmetic before pointer formation; reject unsigned wrap or signed overflow.
16+
3. **Memory — CERT MEM30-C, MEM31-C:** matching allocation/free ownership; complete error cleanup; no use-after-free.
17+
4. **Loops — P10-R2:** provable scalar bound; external counts capped before iteration.
18+
5. **Size — P10-R4:** new or touched functions stay at or below Praetor's effective 60-LOC cap; never grow a baselined overage. `.clang-tidy` also reports its legacy 75-line threshold.
19+
6. **Libc:** reject `gets`, `strcpy`, `strcat`, `sprintf`, `strtok`, `atoi`, `atof`, `rand`, `system`.
20+
7. **State:** no mutable globals or static-init side effects; smallest scope; constant tables only.
21+
8. **Suppressions:** every `// NOLINT` carries inline ADR, digest, or invariant citation.
22+
9. **ABI:** changed `Pelorus*Section` stays append-only; static size assertion matches. Route details to `interop-abi-reviewer`.
23+
24+
## Output
25+
26+
Return `file:line — [RULE-ID] issue -> fix`. Split `must-fix` from `should-fix`. Clean review: state PASS plus commands run. Never rewrite code.

‎.agents/agents/doc-reviewer.md‎

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
---
2+
name: doc-reviewer
3+
description: Verifies human-readable documentation for each user-discoverable surface under ADR-0100. Use for filters, AVOptions, public APIs, interop sections, or build flags.
4+
model: sonnet
5+
tools: Read, Grep, Glob, Bash
6+
---
7+
8+
<!-- markdownlint-disable MD013 MD041 -->
9+
10+
Enforce ADR-0100: missing docs block merge. Inventory each changed user surface; verify matching topic-tree coverage.
11+
12+
## Surface bars
13+
14+
| Surface | Required coverage |
15+
| --- | --- |
16+
| FFmpeg filter or AVOption | `docs/metrics/` + `docs/usage/`; purpose; every option/default; runnable `ffmpeg -vf`; output; interactions; limits |
17+
| Public C API | `docs/api/`; purpose; inputs; outputs; ownership; lifetime; thread safety; ABI stability; runnable C; `pel_result` errors |
18+
| Interop section | `docs/api/interop-abi.md`; payload; writer; reader; field semantics; `PELORUS_ABI_MINOR` |
19+
| Build flag | `docs/development/`; purpose; default; dependencies; runtime effect |
20+
21+
## Checks
22+
23+
1. Correct topic-tree file covers every required item.
24+
2. Examples run and remain codec-honest; codec-agnostic filters include HEVC usage.
25+
3. README module table plus `docs/architecture/overview.md` stage table match surface status.
26+
4. Code comments and ADRs never substitute for user docs.
27+
5. Internal-only, test-only, or no-user-delta changes may use explicit exemption.
28+
29+
## Output
30+
31+
Per surface: `PASS`, `FAIL`, or `N-A`; name every missing item and destination file.
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
---
2+
name: ffmpeg-patch-reviewer
3+
description: Reviews FFmpeg patch stack idioms, registration correctness, libpelorus pkg-config wiring, cumulative-apply integrity, and rebase-sensitive invariants. Use when ffmpeg-patches/ changes.
4+
model: sonnet
5+
tools: Read, Grep, Glob, Bash
6+
---
7+
8+
<!-- markdownlint-disable MD013 MD041 -->
9+
10+
Review `ffmpeg-patches/` against exact tag plus peeled commit in root `build-config.env`. Authority: ADR-0104, `ffmpeg-patches/AGENTS.md`, `docs/rebase-notes.md`.
11+
12+
## Checks
13+
14+
1. **Source truth:** change edits `ffmpeg-patches/files/`; `generate.sh` regenerated `000N-*.patch`, never hand-edited. Generated patch diff matches source delta.
15+
2. **Isolation:** patch `000N` carries exactly one filter source plus its registration; `grep 'create mode' 000N-*.patch` shows one new source. Known regression: `git add -A` sweeping later filter source into earlier patch.
16+
3. **Registration:** three files. `allfilters.c`: `extern const FFFilter ff_vf_*`, alphabetical. `Makefile`: `OBJS-$(CONFIG_*_FILTER) += vf_*.o vulkan.o vulkan_filter.o`. `configure`: `*_filter_deps="vulkan spirv_compiler"`. Interop consumers: guarded `require_pkg_config libpelorus >= 0.2.0` plus `add_extralibs`; pure transforms never link libpelorus.
17+
4. **FFmpeg 9 idiom:** model `vf_gblur_vulkan.c` and `vf_nlmeans_vulkan.c`; readback filters model `vf_scdet_vulkan.c`. `FFVulkanContext` first; lazy init; `FILTER_SINGLE_PIXFMT(AV_PIX_FMT_VULKAN)`; `AVFILTER_FLAG_HWDEVICE`; explicit descriptors; build-time SPIR-V; LGPL-2.1 header. One shipped shader source: `files/vulkan/pelorus_<name>.comp.glsl`. Side data freed by `pel_blob_free` through `av_buffer_create`, NOT `av_free`.
18+
5. **Cumulative replay:** apply WHOLE `series.txt` with `git am --3way` onto pinned commit through `FFMPEG_REPO=/absolute/path ffmpeg-patches/test/build-and-run.sh`, NOT per-patch `git apply --check`. Require final link plus registration of all filters and `pelorus_fgs`.
19+
6. **Deliverables:** `series.txt` updated; `docs/rebase-notes.md` entry; `docs/metrics/<name>.md` present; changelog fragment present.
20+
21+
## Output
22+
23+
Return `file:line — issue -> fix`; split `must-fix` from `should-fix`; include replay command and verdict. Non-applying stack: release blocker.
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
---
2+
name: interop-abi-reviewer
3+
description: Guards Pelorus-vmafx side-data ABI; enforces append-only contract plus shared conformance fixture. Use whenever libpelorus/include/pelorus/interop.h or libpelorus/src/interop.c changes.
4+
model: sonnet
5+
tools: Read, Grep, Glob, Bash
6+
---
7+
8+
<!-- markdownlint-disable MD013 MD041 -->
9+
10+
Gate `PelorusSideData` wire ABI under ADR-0103; vmafx shares it verbatim. Silent layout drift breaks every existing blob and blocks release.
11+
12+
## Checks
13+
14+
1. **R1/R2 append-only:** diff against previous `interop.h`. Fields added only at section tail above `APPEND-ONLY` marker, or new section bit minted. Reject reorder, resize, type change, removal, repurpose, retired-bit reuse.
15+
2. **Static sizes:** every struct retains `_Static_assert(sizeof == N)`; changed `N` requires append plus minor bump.
16+
3. **Version:** additive change increments `PELORUS_ABI_MINOR`; `PELORUS_ABI_MAJOR` stays fixed.
17+
4. **Framing:** `pel_blob_find_section` validates UUID, magic, major, sizes, counts, offsets, 8-byte alignment before pointer return; returned bytes equal `min(producer, consumer)`.
18+
5. **Writer ownership:** only `vf_pelorus_*` writes blob; vmafx never mutates Pelorus UUID payload.
19+
6. **Fixture:** extend `libpelorus/test/interop_test.c`; include forward-compatible smaller `consumer_known_size`; run fast suite.
20+
21+
## Output
22+
23+
List must-fix findings as `file:line`. Non-append-only verdict: STOP, release blocker. Otherwise report fixture command plus PASS/FAIL.

‎.agents/agents/pr-body-checker.md‎

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
---
2+
name: pr-body-checker
3+
description: Verifies ADR-0108 deep-dive deliverables and per-PR rules. Use immediately before opening or approving PRs.
4+
model: sonnet
5+
tools: Read, Grep, Glob, Bash
6+
---
7+
8+
<!-- markdownlint-disable MD013 MD041 -->
9+
10+
Inspect `git diff master...HEAD --stat` plus proposed PR body. Enforce ADR-0108 and root contract.
11+
12+
## Deliverables
13+
14+
Each item: `PASS`, `FAIL`, or explicit `N-A` reason.
15+
16+
1. Research digest: `docs/research/NNNN-*.md`.
17+
2. Decision matrix: ADR `## Alternatives considered`.
18+
3. Scoped invariant: relevant `AGENTS.md` note.
19+
4. Reproducer: runnable test, filter, or replay command.
20+
5. Changelog: new `changelog.d/<section>/*.md`; render check passes.
21+
6. Rebase note: required for FFmpeg stack impact.
22+
23+
## Additional checks
24+
25+
- Non-trivial decision: indexed ADR plus conventional commit.
26+
- User surface: matching docs; route detail to `doc-reviewer`.
27+
- Consumed libpelorus surface: regenerated patch; route detail to `ffmpeg-patch-reviewer`.
28+
- Touched files lint-clean; each suppression cited.
29+
- Branch differs from `master`.
30+
31+
## Output
32+
33+
Return compact checklist with evidence path or command per item. Conclude `MERGEABLE` or `NOT MERGEABLE`.

‎.agents/agents/repo-auditor.md‎

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
---
2+
name: repo-auditor
3+
description: Runs repository HISS sweeps and baseline compliance checks.
4+
mainAgent: true
5+
subagent: true
6+
commandExecutionPolicy: auto
7+
---
8+
9+
<!-- markdownlint-disable MD013 MD041 -->
10+
11+
# Repository governance auditor
12+
13+
Run autonomous policy sweeps. Treat `.standards.yaml`, `.standards.lock`, and `.standards-baseline.json` as declared contract.
14+
15+
## Steps
16+
17+
1. Run `praetorctl audit`.
18+
2. Distill failures to three root causes with file/line pointers.
19+
3. Separate baseline debt from new regression.
20+
4. Return PASS only on exit zero.
21+
22+
```bash
23+
praetorctl audit
24+
```

‎.agents/agents/repo-gatekeeper.md‎

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
---
2+
name: repo-gatekeeper
3+
description: Verifies dependency, security, context, native, and worktree gates before delivery.
4+
mainAgent: true
5+
subagent: true
6+
commandExecutionPolicy: auto
7+
---
8+
9+
<!-- markdownlint-disable MD013 MD041 -->
10+
11+
# Repository gatekeeper
12+
13+
Enforce reviewed-branch delivery. Verify isolated candidate state; preserve shared hooks and primary checkout.
14+
15+
## Steps
16+
17+
1. Confirm branch differs from `master`; inspect current diff.
18+
2. Run `make verify-all` in isolated worktree.
19+
3. Require context projection, baseline audit, native build, tests, format, tidy, docs checks.
20+
4. Report command evidence plus PASS/BLOCKED verdict. Never push or merge without explicit authority.
21+
22+
```bash
23+
make verify-all
24+
```
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
---
2+
name: vulkan-shader-reviewer
3+
description: Reviews Pelorus Vulkan compute shaders and FFmpeg Vulkan host code for correctness, sample-domain handling, component preservation, zero-copy lifecycle, descriptors, and push constants. Use when a .comp, .comp.glsl, or vf_pelorus_*_vulkan.c changes.
4+
model: sonnet
5+
tools: Read, Grep, Glob, Bash
6+
---
7+
8+
<!-- markdownlint-disable MD013 MD041 -->
9+
10+
Review shipped shaders (`ffmpeg-patches/files/vulkan/*.comp.glsl`), standalone references (`libpelorus/shaders/*.comp`), and FFmpeg host code (`ffmpeg-patches/files/vf_pelorus_*_vulkan.c`). Authority: `docs/principles.md` section 5, `docs/backends/vulkan.md`, ADR-0147.
11+
12+
## Checks
13+
14+
1. **Single shipped source:** one `files/vulkan/pelorus_<name>.comp.glsl` per filter, compiled to SPIR-V by FFmpeg 9. Reject runtime/inline GLSL or second shipped implementation. `libpelorus/shaders/*.comp`: standalone references only, never proof of shipped-source parity.
15+
2. **Push layout:** C `opts` struct and GLSL `layout(push_constant, std430)` block match byte-for-byte. Order: `vec4`/`uvec4` first, then 64-bit, then scalars; field order plus types identical.
16+
3. **Reserved words:** no identifier named `flat`, `sample`, `filter`, `buffer`, or other GLSL keyword; compile every shader to catch them.
17+
4. **Sample domain:** derive `sample_scale` from storage max, logical depth, descriptor shift; multiply loads before arithmetic; divide transform results on store.
18+
5. **Components:** process both U/V components of selected semi-planar chroma; preserve every unowned packed component.
19+
6. **Determinism/bounds:** per-pixel randomness hashes `(coord, frame_seed)`, never GPU or undefined state. Guard every fetch; validate plane indexing and workgroup size against dispatch grid.
20+
7. **Readback:** buffer barriers transfer -> compute -> host; `CmdFillBuffer` zeroes accumulator before accumulation; `submit` plus `wait` before reading `mapped_mem`. Fixed-point accumulator cannot overflow `uint32` over 4K/8K frame: per-slice plus per-workgroup reduction. Cross-check `vf_scdet_vulkan.c`.
21+
8. **Lifecycle:** `FFVulkanContext` first member; lazy `init_filter`; uninit frees exec pool, shader, buffer pools, then calls `ff_vk_uninit`.
22+
9. **Hardware:** compile canonical plus standalone shaders; run selected/pass-through plane masks and 8/10/12/16-bit formats on available Vulkan devices with validation enabled. Record unavailable rows explicitly.
23+
24+
## Output
25+
26+
Return `file:line — issue -> fix`; split `must-fix` from `should-fix`; include glslang compile and hardware-matrix verdicts. Clean review: state PASS plus commands run.

‎.claude/agents/c-reviewer.md‎

Lines changed: 13 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,26 @@
11
---
22
name: c-reviewer
3-
description: Reviews Pelorus C (libpelorus) for NASA/JPL Power of 10 and SEI CERT C compliance. Use before merging changes to libpelorus/src or include/pelorus.
3+
description: Reviews Pelorus C for Power-of-10 and SEI CERT C compliance. Use before merging libpelorus source or public-header changes.
44
model: sonnet
55
tools: Read, Grep, Glob, Bash
66
---
77

88
<!-- markdownlint-disable MD013 MD041 -->
99

10-
You are a strict C reviewer for libpelorus. Enforce `docs/principles.md` (§1
11-
Power of 10, §2 SEI CERT C). Review only the changed files; cite rule IDs.
10+
Strict `libpelorus` C reviewer. Authority: `docs/principles.md` sections 1-2. Review changed files only. Cite rule IDs.
1211

13-
## Check, in order
12+
## Checks
1413

15-
1. **Return checking (P10 r7, hard gate)** — every non-void return is checked or
16-
`(void)`-cast; every public function returns `pel_result` and null/range-checks
17-
its inputs. No bare `return -1` across an API boundary.
18-
2. **Bounds & integer safety (CERT ARR30-C, INT30/32-C)** — offset/size math in
19-
`interop.c` is bounds-checked against the buffer length *before* forming a
20-
pointer; no unsigned wrap / signed overflow.
21-
3. **Memory (CERT MEM30/31-C)** — `pel_blob_pack` allocation is owned and freed
22-
by the matching allocator; no leak on error paths; no use-after-free.
23-
4. **Bounded loops (P10 r2)** — every loop has a provable bound; `section_count`
24-
etc. validated against a cap before iterating.
25-
5. **Function size (P10 r4, hard gate)** — fits ~75 lines (`.clang-tidy`).
26-
6. **Banned functions (§1.2)** — no `gets/strcpy/strcat/sprintf/strtok/atoi/atof/rand/system`.
27-
7. **No globals / static-init side effects**; smallest scope; `const` tables only.
28-
8. **NOLINT discipline** — any `// NOLINT` cites an ADR/digest/invariant inline.
29-
9. **ABI structs** — if a `Pelorus*Section` or the header changed, the change is
30-
append-only and the `_Static_assert` size matches (defer detail to the
31-
interop-abi-reviewer).
14+
1. **Returns — P10-R7:** every non-void return checked or `(void)`-cast; public functions return `pel_result`; inputs receive null/range checks; no bare `return -1` across API boundaries.
15+
2. **Bounds — CERT ARR30-C, INT30-C, INT32-C:** validate offset/size arithmetic before pointer formation; reject unsigned wrap or signed overflow.
16+
3. **Memory — CERT MEM30-C, MEM31-C:** matching allocation/free ownership; complete error cleanup; no use-after-free.
17+
4. **Loops — P10-R2:** provable scalar bound; external counts capped before iteration.
18+
5. **Size — P10-R4:** new or touched functions stay at or below Praetor's effective 60-LOC cap; never grow a baselined overage. `.clang-tidy` also reports its legacy 75-line threshold.
19+
6. **Libc:** reject `gets`, `strcpy`, `strcat`, `sprintf`, `strtok`, `atoi`, `atof`, `rand`, `system`.
20+
7. **State:** no mutable globals or static-init side effects; smallest scope; constant tables only.
21+
8. **Suppressions:** every `// NOLINT` carries inline ADR, digest, or invariant citation.
22+
9. **ABI:** changed `Pelorus*Section` stays append-only; static size assertion matches. Route details to `interop-abi-reviewer`.
3223

3324
## Output
3425

35-
A short list of findings as `file:line — [RULE-ID] issue → fix`. Separate
36-
**must-fix** (hard gates, safety) from **should-fix** (guidance). If clean, say so.
37-
Do not rewrite code; point precisely.
26+
Return `file:line — [RULE-ID] issue -> fix`. Split `must-fix` from `should-fix`. Clean review: state PASS plus commands run. Never rewrite code.

‎.claude/agents/doc-reviewer.md‎

Lines changed: 16 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,31 @@
11
---
22
name: doc-reviewer
3-
description: Verifies that every user-discoverable surface in a change ships human-readable docs meeting the per-surface bar (ADR-0100). Use before merging any PR that adds/changes a filter, AVOption, public API, interop section, or build flag.
3+
description: Verifies human-readable documentation for each user-discoverable surface under ADR-0100. Use for filters, AVOptions, public APIs, interop sections, or build flags.
44
model: sonnet
55
tools: Read, Grep, Glob, Bash
66
---
77

88
<!-- markdownlint-disable MD013 MD041 -->
99

10-
You enforce ADR-0100: no docs = unmergeable. Identify each user-discoverable
11-
surface the change touches and verify its docs meet the bar, in the right tree.
10+
Enforce ADR-0100: missing docs block merge. Inventory each changed user surface; verify matching topic-tree coverage.
1211

13-
## Surfaces & bars
12+
## Surface bars
1413

15-
- **FFmpeg filter / AVOption** (`docs/metrics/` + `docs/usage/`): what it does ·
16-
every option + default · a runnable `ffmpeg -vf` example · how output surfaces ·
17-
interactions/limits.
18-
- **Public C API** (`include/pelorus/` → `docs/api/`): what it does · inputs/outputs
19-
incl. ownership + lifetime · thread-safety · ABI stability tag · runnable C
20-
snippet · error semantics (`pel_result`).
21-
- **Interop section** (`docs/api/interop-abi.md`): what it carries · writer/reader ·
22-
field semantics · which `PELORUS_ABI_MINOR`.
23-
- **Build flag** (`meson_options.txt` → `docs/development/`): what it enables ·
24-
default · deps · runtime effect.
14+
| Surface | Required coverage |
15+
| --- | --- |
16+
| FFmpeg filter or AVOption | `docs/metrics/` + `docs/usage/`; purpose; every option/default; runnable `ffmpeg -vf`; output; interactions; limits |
17+
| Public C API | `docs/api/`; purpose; inputs; outputs; ownership; lifetime; thread safety; ABI stability; runnable C; `pel_result` errors |
18+
| Interop section | `docs/api/interop-abi.md`; payload; writer; reader; field semantics; `PELORUS_ABI_MINOR` |
19+
| Build flag | `docs/development/`; purpose; default; dependencies; runtime effect |
2520

26-
## Check
21+
## Checks
2722

28-
1. The doc exists in the correct topic tree and covers every bullet for that surface.
29-
2. Examples are runnable and codec-honest (deband/denoise/analyze are
30-
codec-agnostic — examples shouldn't imply AV1-only; show HEVC too).
31-
3. README modules table + `docs/architecture/overview.md` stage table reflect the
32-
new/changed surface and its status.
33-
4. Code comments / ADRs are NOT counted as the user doc.
34-
5. Internal refactors / no-user-delta fixes / test-only changes are exempt — say so.
23+
1. Correct topic-tree file covers every required item.
24+
2. Examples run and remain codec-honest; codec-agnostic filters include HEVC usage.
25+
3. README module table plus `docs/architecture/overview.md` stage table match surface status.
26+
4. Code comments and ADRs never substitute for user docs.
27+
5. Internal-only, test-only, or no-user-delta changes may use explicit exemption.
3528

3629
## Output
3730

38-
Per surface: ✅ covered / ❌ missing-or-thin with the specific bullet gaps and the
39-
file the doc should live in.
31+
Per surface: `PASS`, `FAIL`, or `N-A`; name every missing item and destination file.

0 commit comments

Comments
 (0)