Skip to content

Perceptual quality controller - #1

Merged
liminalism merged 30 commits into
mainfrom
perceptual-quality-controller
Aug 23, 2026
Merged

Perceptual quality controller#1
liminalism merged 30 commits into
mainfrom
perceptual-quality-controller

Conversation

@liminalism

Copy link
Copy Markdown
Owner

No description provided.

Make explicit CLI pgm and ppm output requests emit binary P5 and P6
respectively, so the decoder output matches its advertised extension and
the PPM output is directly consumable by jpxl compare; retain generic
pnm as the image library's dynamically selected PNM subtype.

Also make the handoff checklist run the full workspace test suite in
release mode.

- jpegxl-rs.evidence.cli-netpbm-subtypes-2026-08-21 new -> verified
- jpegxl-rs.evidence.cli-netpbm-workspace-gates-2026-08-21 new -> verified
- jpegxl-rs.evidence.release-workspace-tests-2026-08-21 new -> verified
- jpegxl-rs.observation.balanced-zero-prediction-reserve-negative-2026-08-21 new -> verified
- jpegxl-rs.work.cli-netpbm-subtype-contract new -> completed

Verified by:
- Focused CLI tests passed: explicit PPM/PGM output uses P6/P5 and incompatible channel layouts error.
- The full JPXL build, optimized test suite, strict clippy, and formatting gates passed after the Netpbm subtype fix.
- Release-mode workspace tests pass

AKR-Change: chg-3fe6459830b37adf
AKR-Work: jpegxl-rs.work.cli-netpbm-subtype-contract
AKR-Evidence: @jpegxl-rs.evidence.cli-netpbm-subtypes-2026-08-21/1
AKR-Evidence: @jpegxl-rs.evidence.cli-netpbm-workspace-gates-2026-08-21/1
AKR-Evidence: @jpegxl-rs.evidence.release-workspace-tests-2026-08-21/1
AKR-Graph: sha256:67c44d1238c631adbcdf948b15071e61e576ac9c7d5cd7357611eb16288e43b7
AKR-Tree: a4623ed
Register the current bridge and historical outside-advice documents in
the immutable AKR source library, remove their top-level intake copies
and stale status sidecar, and replace live source-code path references
with stable source IDs.

Adopt G0 comparison truth and G1 diagnostic risk localization as the
next encoder work; replace live source comments with stable source IDs.

- jpegxl-rs.assessment.gap-bridge-2026-08-21 new -> verified
- jpegxl-rs.evidence.gap-advice-ledger-valid-2026-08-21 new -> verified
- jpegxl-rs.evidence.gap-advice-sources-verified-2026-08-21 new -> verified
- jpegxl-rs.evidence.gap-advice-top-level-clean-2026-08-21 new -> verified
- jpegxl-rs.work.gap-advice-source-migration new -> completed
- jpegxl-rs.work.gap-g0-comparison-truth new -> proposed
- jpegxl-rs.work.gap-g1-edge-risk-atlas new -> proposed

Verified by:
- Gap-roadmap ledger adoption validates
- Archived gap-advice sources verify
- Top-level advice intake files removed

AKR-Change: chg-62460395574d514c
AKR-Work: jpegxl-rs.work.gap-advice-source-migration
AKR-Evidence: @jpegxl-rs.evidence.gap-advice-ledger-valid-2026-08-21/1
AKR-Evidence: @jpegxl-rs.evidence.gap-advice-sources-verified-2026-08-21/1
AKR-Evidence: @jpegxl-rs.evidence.gap-advice-top-level-clean-2026-08-21/1
AKR-Graph: sha256:d21535eb4172cd86841adda58f6528ecefdfda67d22e206592a5968daa0d9ee9
AKR-Tree: 06b8d11
Replace the misleading PowerShell-only comparison loop with a
dependency-free Python core and compatibility wrapper that builds
equivalent-output curves, times frozen settings in counterbalanced
order, records complete provenance and work metadata, and emits
authoritative JSONL plus derived flat summaries. Establish a scoped
current photo baseline before changing encoder policy.

Add dependency-free Python curve, adaptive matching, rate-work
enrichment and counterbalanced timing; keep PowerShell as a
compatibility wrapper.

- jpegxl-rs.evidence.gap-g0-harness-tests-2026-08-21 new -> verified
- jpegxl-rs.evidence.gap-g0-photo-baseline-2026-08-21 new -> verified
- jpegxl-rs.evidence.gap-g0-real-oracle-smoke-2026-08-21 new -> verified
- jpegxl-rs.work.gap-g0-comparison-truth proposed -> completed

Verified by:
- G0 comparison harness tests pass
- G0 current photo-anchor parity baseline
- G0 real black-box oracle smoke passes

AKR-Change: chg-5a377cd948dc13c4
AKR-Work: jpegxl-rs.work.gap-g0-comparison-truth
AKR-Evidence: @jpegxl-rs.evidence.gap-g0-harness-tests-2026-08-21/1
AKR-Evidence: @jpegxl-rs.evidence.gap-g0-photo-baseline-2026-08-21/1
AKR-Evidence: @jpegxl-rs.evidence.gap-g0-real-oracle-smoke-2026-08-21/1
AKR-Graph: sha256:54816c6b5a3258ab549d8ed41739913885cbb499f2453724f93e7a633e5f7af5
AKR-Tree: 4f8364d
Add an explicit diagnostic-only AnalysisAtlasV2 and JSONL export with
source-side edge, smoothness, noise and covariance features. Correlate
them against JPXL reconstruction leakage on held-out images without
changing production analysis or encoding decisions; continue to G2 only
if the top-risk area concentrates failures.

Production analysis remains unchanged; held-out fitting retained
gradient energy only.

- jpegxl-rs.evidence.gap-g1-analysis-feature-tests-2026-08-21 new -> verified
- jpegxl-rs.evidence.gap-g1-atlas-export-2026-08-21 new -> verified
- jpegxl-rs.evidence.gap-g1-heldout-risk-2026-08-21 new -> verified
- jpegxl-rs.evidence.gap-g1-production-identity-2026-08-21 new -> verified
- jpegxl-rs.evidence.gap-g1-release-gates-2026-08-21 new -> verified
- jpegxl-rs.work.gap-g1-edge-risk-atlas proposed -> completed

Verified by:
- G1 diagnostic atlas feature tests
- G1 AnalysisAtlasV2 JSONL export
- G1 held-out edge-flat risk recall
- G1 production output identity
- G1 release-mode handoff gates

AKR-Change: chg-6ac7c43b6da51c80
AKR-Work: jpegxl-rs.work.gap-g1-edge-risk-atlas
AKR-Work: jpegxl-rs.evidence.gap-g1-heldout-risk-2026-08-21
AKR-Work: jpegxl-rs.evidence.gap-g1-production-identity-2026-08-21
AKR-Evidence: @jpegxl-rs.evidence.gap-g1-analysis-feature-tests-2026-08-21/1
AKR-Evidence: @jpegxl-rs.evidence.gap-g1-atlas-export-2026-08-21/1
AKR-Evidence: @jpegxl-rs.evidence.gap-g1-heldout-risk-2026-08-21/1
AKR-Evidence: @jpegxl-rs.evidence.gap-g1-production-identity-2026-08-21/1
AKR-Evidence: @jpegxl-rs.evidence.gap-g1-release-gates-2026-08-21/1
AKR-Graph: sha256:685b00d0d23259d15965f9b8ae89aed938879f7fe946246a852f706fb423a207
AKR-Tree: a17a0c8
Evaluate G2's entropy-aware DCT8 finalist refinement against the frozen
corpus, retain only reusable pricing infrastructure that passes its own
gates, and reject the coefficient beam unless it produces an exact-size,
decoder-valid Contract-B quality win. The attempted beam produced no
retained candidate and is not shipped; the deterministic EntropyCostView
remains as measured infrastructure for later bounded work.

Keep the reusable fixed-point cost view and canonical audit; no
production quantizer decision changed because the beam did not clear its
exact-size promotion gate.

- jpegxl-rs.evidence.gap-g2-candidate-rejected-2026-08-21 new -> verified
- jpegxl-rs.evidence.gap-g2-entropy-cost-tests-2026-08-21 new -> verified
- jpegxl-rs.evidence.gap-g2-rate-decoder-identity-2026-08-21 new -> verified
- jpegxl-rs.evidence.gap-g2-release-gates-2026-08-21 new -> verified
- jpegxl-rs.evidence.gap-g2-run-aware-audit-2026-08-21 new -> verified
- jpegxl-rs.work.gap-g2-selective-coefficient-refinement new -> completed

Verified by:
- G2 coefficient beam rejected
- G2 deterministic entropy cost tests
- G2 rate and decoder identity
- G2 release-mode handoff gates
- G2 canonical run-aware entropy audit

AKR-Change: chg-0d7a2d40e07ec768
AKR-Work: jpegxl-rs.work.gap-g2-selective-coefficient-refinement
AKR-Evidence: @jpegxl-rs.evidence.gap-g2-candidate-rejected-2026-08-21/1
AKR-Evidence: @jpegxl-rs.evidence.gap-g2-entropy-cost-tests-2026-08-21/1
AKR-Evidence: @jpegxl-rs.evidence.gap-g2-rate-decoder-identity-2026-08-21/1
AKR-Evidence: @jpegxl-rs.evidence.gap-g2-release-gates-2026-08-21/1
AKR-Evidence: @jpegxl-rs.evidence.gap-g2-run-aware-audit-2026-08-21/1
AKR-Graph: sha256:7d93a4b398094d78d2fbe975e249c32b5d33e37e87f7ccdbbfcbc28fab0bdcf4
AKR-Tree: 598d6a1
Replace hidden Fast/Balanced escalation into the exhaustive Quality
controller with an explicit bounded controller outcome, a hard six-price
exact cap, and at most one two-price fresh-structure rescue while
preserving ordinary-path codestream identity.

- jpegxl-rs.evidence.gap-g3-bounded-controller-tests-2026-08-21 new -> verified
- jpegxl-rs.evidence.gap-g3-decoder-parity-2026-08-21 new -> verified
- jpegxl-rs.evidence.gap-g3-ordinary-path-identity-2026-08-21 new -> verified
- jpegxl-rs.evidence.gap-g3-release-gates-2026-08-21 new -> verified
- jpegxl-rs.evidence.gap-g3-rescue-speed-2026-08-21 new -> verified
- jpegxl-rs.work.gap-g3-bounded-truthful-rate-controller new -> completed

Verified by:
- Release tests prove Fast/Balanced use explicit terminal statuses, reserve ExhaustiveReference for an explicit Quality request, cap bounded searches at six exact prices, allow at most one two-price fresh-structure rescue, and preserve the never-over contract.
- JPXL and jxl-oxide both decoded the representative 2400x1800 G3 Balanced codestream successfully.
- All three frozen 1 bpp Balanced cells stayed on InsideBand with zero rescues and retained their G2 sizes; the 539,958-byte mid stream remained SHA-256 35b1e40af953744efc728b0e6aa81e6753fdafa33ef31e68013e7b98754a31ab.
- The complete release-mode workspace build, test suite including external decoder oracles, clippy warning gate, and formatting check passed.
- The forced Fast miss fixture fell from 1.18-1.26 s with the hidden exhaustive fallback to 0.09 s in all five G3 runs, while its tests prove one bounded fresh rescue and no Quality outcome.

AKR-Change: chg-7a9f44179a20174f
AKR-Work: jpegxl-rs.work.gap-g3-bounded-truthful-rate-controller
AKR-Work: jpegxl-rs.evidence.gap-g3-bounded-controller-tests-2026-08-21
AKR-Work: jpegxl-rs.evidence.gap-g3-rescue-speed-2026-08-21
AKR-Work: jpegxl-rs.evidence.gap-g3-ordinary-path-identity-2026-08-21
AKR-Work: jpegxl-rs.evidence.gap-g3-decoder-parity-2026-08-21
AKR-Work: jpegxl-rs.evidence.gap-g3-release-gates-2026-08-21
AKR-Evidence: @jpegxl-rs.evidence.gap-g3-bounded-controller-tests-2026-08-21/1
AKR-Evidence: @jpegxl-rs.evidence.gap-g3-decoder-parity-2026-08-21/1
AKR-Evidence: @jpegxl-rs.evidence.gap-g3-ordinary-path-identity-2026-08-21/1
AKR-Evidence: @jpegxl-rs.evidence.gap-g3-release-gates-2026-08-21/1
AKR-Evidence: @jpegxl-rs.evidence.gap-g3-rescue-speed-2026-08-21/1
AKR-Graph: sha256:698f8f9504c0712d46234a4535f340f8447cc54bad14fd46d02d1bf0566a3d9b
AKR-Tree: b97f85d
Replace hidden Fast/Balanced escalation into the exhaustive Quality
controller with an explicit bounded controller outcome, a hard six-price
exact cap, and at most one two-price fresh-structure rescue while
preserving ordinary-path codestream identity.

AKR-Change: chg-b16be241f0e0a2d8
AKR-Work: jpegxl-rs.work.gap-g3-bounded-truthful-rate-controller
AKR-Graph: sha256:698f8f9504c0712d46234a4535f340f8447cc54bad14fd46d02d1bf0566a3d9b
AKR-Tree: e485f20
Use the existing exact dirty-frontier harness to quantify cover decision
margins across the bounded controller's anchors and finalist, then
implement selective finalist cover/CfL refresh only if the measured
dirty area and exact quality gate justify its common-path cost;
otherwise retain the calibrated bit-identical controller and record the
negative result.

- jpegxl-rs.evidence.gap-g4-dirty-frontier-screen-2026-08-21 new -> verified
- jpegxl-rs.evidence.gap-g4-promotion-rejected-2026-08-21 new -> verified
- jpegxl-rs.papercut.the-phase-32-corpus-harness-resolves-jpxl new -> verified
- jpegxl-rs.work.gap-g4-selective-cover-refresh new -> completed

Verified by:
- G4 release dirty-frontier corpus screen
- G4 selective refresh promotion gate rejected

AKR-Change: chg-bbc9986e10d29e98
AKR-Work: jpegxl-rs.work.gap-g4-selective-cover-refresh
AKR-Evidence: @jpegxl-rs.evidence.gap-g4-dirty-frontier-screen-2026-08-21/1
AKR-Evidence: @jpegxl-rs.evidence.gap-g4-promotion-rejected-2026-08-21/1
AKR-Graph: sha256:788f6be13dd378eb87498e604c8102ad3aa476d93e8d27975735d760e2c00a3b
AKR-Tree: 2ad80ce
Use the existing exact dirty-frontier harness to quantify cover decision
margins across the bounded controller's anchors and finalist, then
implement selective finalist cover/CfL refresh only if the measured
dirty area and exact quality gate justify its common-path cost;
otherwise retain the calibrated bit-identical controller and record the
negative result.

- jpegxl-rs.evidence.gap-g4-production-identity-2026-08-21 new -> verified
- jpegxl-rs.evidence.gap-g4-release-gates-2026-08-21 new -> verified

Verified by:
- G4 production behavior remains G3-identical
- G4 release workspace gates

AKR-Change: chg-686843cc2646f95f
AKR-Work: jpegxl-rs.work.gap-g4-selective-cover-refresh
AKR-Evidence: @jpegxl-rs.evidence.gap-g4-production-identity-2026-08-21/1
AKR-Evidence: @jpegxl-rs.evidence.gap-g4-release-gates-2026-08-21/1
AKR-Graph: sha256:0454cd9fe4eeffdd9c189109ffcbaa25c4bb331ebffa6f20f8d63477289d2a60
AKR-Tree: 875a33e
Measure extra-bit prevalence on real HF token streams, replace
TokenTape's four dense columns with a packed base word and sparse extra
sidecar under exact replay invariants, then use the resulting census
statistics to screen a two-candidate hybrid-uint finalist mode for
Balanced. Promote the bounded entropy mode only if fixed-rate
density/quality improves within the standing Contract B wall and decoder
gates; otherwise retain it as a measured rejection. Screen the smaller
control-image cache opportunity after the tape result and implement it
only if multiplicity evidence justifies new cache keys.

Reopens G4 only to repair two stale acceptance references after its
prior revision; technical conclusion is unchanged.

- jpegxl-rs.papercut.a-completed-work-revision-retained-two-evidence new -> verified
- jpegxl-rs.papercut.after-a-temporary-comparison-worktree-restored new -> verified
- jpegxl-rs.work.gap-g4-selective-cover-refresh completed -> proposed
- jpegxl-rs.work.gap-g5-packed-entropy-and-bounded-alternatives new -> proposed

AKR-Change: chg-68d69d88cc889c2f
AKR-Work: jpegxl-rs.work.gap-g5-packed-entropy-and-bounded-alternatives
AKR-Work: jpegxl-rs.work.gap-g4-selective-cover-refresh
AKR-Graph: sha256:16306ee05f43a002ee51bed073826a631c005db5c0170f3baf1124242f4f5c89
AKR-Tree: 5368629
Measure extra-bit prevalence on real HF token streams, replace
TokenTape's four dense columns with a packed base word and sparse extra
sidecar under exact replay invariants, then use the resulting census
statistics to screen a two-candidate hybrid-uint finalist mode for
Balanced. Promote the bounded entropy mode only if fixed-rate
density/quality improves within the standing Contract B wall and decoder
gates; otherwise retain it as a measured rejection. Screen the smaller
control-image cache opportunity after the tape result and implement it
only if multiplicity evidence justifies new cache keys.

Refreshes all G4 acceptance references after revision 3 and records G5
packed-memory, quality, identity, decoder, and full release evidence.

- jpegxl-rs.evidence.gap-g4-margin-rejection-refresh-2026-08-21 new -> verified
- jpegxl-rs.evidence.gap-g4-production-no-diff-refresh-2026-08-21 new -> verified
- jpegxl-rs.evidence.gap-g5-bounded-entropy-screen-2026-08-21 new -> verified
- jpegxl-rs.evidence.gap-g5-packed-layout-identity-2026-08-21 new -> verified
- jpegxl-rs.evidence.gap-g5-packed-memory-2026-08-21 new -> verified
- jpegxl-rs.evidence.gap-g5-release-workspace-gates-2026-08-21 new -> verified
- jpegxl-rs.evidence.gap-g5-three-decoder-parity-2026-08-21 new -> verified
- jpegxl-rs.work.gap-g4-selective-cover-refresh proposed -> completed
- jpegxl-rs.work.gap-g5-packed-entropy-and-bounded-alternatives proposed -> completed

Verified by:
- G4 margin and rejection evidence revalidated
- G4 production no-diff revalidated
- G5 bounded entropy promotion screen
- G5 packed tape layout and byte identity
- G5 packed tape memory screen
- G5 full release workspace gates
- G5 JPXL, djxl, and jxl-oxide decoder parity

AKR-Change: chg-58614d93a55bb58c
AKR-Work: jpegxl-rs.work.gap-g5-packed-entropy-and-bounded-alternatives
AKR-Work: jpegxl-rs.work.gap-g4-selective-cover-refresh
AKR-Evidence: @jpegxl-rs.evidence.gap-g4-margin-rejection-refresh-2026-08-21/1
AKR-Evidence: @jpegxl-rs.evidence.gap-g4-production-no-diff-refresh-2026-08-21/1
AKR-Evidence: @jpegxl-rs.evidence.gap-g5-bounded-entropy-screen-2026-08-21/1
AKR-Evidence: @jpegxl-rs.evidence.gap-g5-packed-layout-identity-2026-08-21/1
AKR-Evidence: @jpegxl-rs.evidence.gap-g5-packed-memory-2026-08-21/1
AKR-Evidence: @jpegxl-rs.evidence.gap-g5-release-workspace-gates-2026-08-21/1
AKR-Evidence: @jpegxl-rs.evidence.gap-g5-three-decoder-parity-2026-08-21/1
AKR-Graph: sha256:9fafbcf93d6049867237b5213a9a53e95735c61d4d2be1e0e6aca7d3d4ca0171
AKR-Tree: 4a115ea
Run a fresh release 1/2/4/8-worker matrix on the finalized G5 build for
fixed VarDCT, one fixed probe, production Balanced without rescue, a
Balanced rescue case if one can be reproduced, Quality, and
low/high-effort Modular. Record wall, CPU, context switches, peak RSS,
and hardware counters when the host permits them. Profile and change
production code only if the current matrix confirms deficient
dominant-size scaling and a safe output-preserving region above roughly
5-8% self cost; otherwise close G6 as the measured stop condition.

Adds diagnostics-only local/global phase timers and preserves ordered
section reduction while collecting global-model events on the existing
worker budget.

- jpegxl-rs.work.gap-g6-current-scaling-matrix new -> proposed

AKR-Change: chg-86d4f0ce710fec33
AKR-Work: jpegxl-rs.work.gap-g6-current-scaling-matrix
AKR-Graph: sha256:e4e07a78e973ed7a38f9bb85c3eb894b174df1c81e85b966d6c1cbc35c31462e
AKR-Tree: 6574d60
Run a fresh release 1/2/4/8-worker matrix on the finalized G5 build for
fixed VarDCT, one fixed probe, production Balanced without rescue, a
Balanced rescue case if one can be reproduced, Quality, and
low/high-effort Modular. Record wall, CPU, context switches, peak RSS,
and hardware counters when the host permits them. Profile and change
production code only if the current matrix confirms deficient
dominant-size scaling and a safe output-preserving region above roughly
5-8% self cost; otherwise close G6 as the measured stop condition.

Records release evidence for G6, completes the G0-G6 bridge, retains the
exact-cited bridge source, and removes two uncited full advice documents
while preserving catalog metadata.

- jpegxl-rs.evidence.gap-g6-modular-profile-and-ab-2026-08-21 new -> verified
- jpegxl-rs.evidence.gap-g6-release-workspace-gates-2026-08-21 new -> verified
- jpegxl-rs.evidence.gap-g6-scaling-matrix-2026-08-21 new -> verified
- jpegxl-rs.papercut.finalizing-a-cited-source-with-context-block new -> verified
- jpegxl-rs.work.gap-g6-current-scaling-matrix proposed -> completed

Verified by:
- G6 modular profile and interleaved A/B
- G6 release workspace gates
- G6 thread-scaling matrix and determinism

AKR-Change: chg-ebc29df9c79ea6f5
AKR-Work: jpegxl-rs.work.gap-g6-current-scaling-matrix
AKR-Work: jpegxl-rs.papercut.finalizing-a-cited-source-with-context-block
AKR-Evidence: @jpegxl-rs.evidence.gap-g6-modular-profile-and-ab-2026-08-21/1
AKR-Evidence: @jpegxl-rs.evidence.gap-g6-release-workspace-gates-2026-08-21/1
AKR-Evidence: @jpegxl-rs.evidence.gap-g6-scaling-matrix-2026-08-21/1
AKR-Graph: sha256:7ee28cfe56fbe74293991abcf98930d3694830b2126ee3f6e28a63b7e17f87a0
AKR-Tree: 3fc50ae
External review in sources/outside-advice.md (2026-08-06) diagnoses the
~15x VarDCT and ~30-100x Modular gaps versus libjxl as structural, not
leaf-SIMD deficits. VarDCT: EncodeRequest::defaults for
bench_vardct_fixed

Drops the deleted advice Markdown from the assessment's freshness scope
while retaining its source metadata and live encoder scope.

AKR-Change: chg-8b42fe162cd6c2aa
AKR-Work: jpegxl-rs.assessment.encoder-architecture-outside-advice
AKR-Graph: sha256:49490678a0dc1c797bc2e69073b43750a90922b48d76428c1b0b943f9e30bd10
AKR-Tree: 2943ec9
No AKR work record: Pending bounded-controller correction carried over
from the OpenArc preset/rate fix session; no separate AKR work record

AKR-Change: chg-3d5d8202ae624a19
AKR-Graph: sha256:e41a193694b19545fc511030be80899708467fc0aac2cdcaf83e5017971fa048
AKR-Tree: ced24ac
Register the controller plan and metric advice as AKR sources; add the
missing guard content classes (text/screenshot, line art,
gradients/banding, low-light noise, grayscale, tiny, saturated colour)
as provenance-tracked fixtures with a jpxl.codec-corpus/1 manifest that
assigns every image to calibration, development or locked holdout by
source family; and produce the first (target score, source features) ->
initial effective_scale table from fixed-quantizer sweeps scored with
the reference SSIMULACRA2 (tools/calibrate_initial_rung.py, emitted as
quality_predictor.rs).

- jpegxl-rs.decision.lossy-production-presets active -> superseded
- jpegxl-rs.decision.perceptual-quality-contract new -> proposed
- jpegxl-rs.policy.perceptual-metric-clean-room new -> proposed
- jpegxl-rs.track.perceptual-quality-controller new -> proposed
- jpegxl-rs.work.pqc-pr0-provenance-corpus-calibration new -> proposed
- jpegxl-rs.work.pqc-pr1-target-semantics new -> proposed
- jpegxl-rs.work.pqc-pr2-perceptual-metric new -> proposed
- jpegxl-rs.work.pqc-pr3-pixel-plan-render new -> proposed
- jpegxl-rs.work.pqc-pr4-quality-navigator new -> proposed
- jpegxl-rs.work.pqc-pr5-policy-bank new -> proposed
- jpegxl-rs.work.pqc-pr7-terminal-reducer new -> proposed

AKR-Change: chg-880d94c06a5afd96
AKR-Work: jpegxl-rs.work.pqc-pr0-provenance-corpus-calibration
AKR-Work: jpegxl-rs.decision.perceptual-quality-contract
AKR-Graph: sha256:e41a193694b19545fc511030be80899708467fc0aac2cdcaf83e5017971fa048
AKR-Tree: 73d5fda
Split the pre-entropy plan (spatial + quantized) into a validated
PixelPlan with entropy attached later; extract
build_pixel_plan/attach_entropy in policy without changing output; lift
Gaborish, EPF and LF-smoothing kernel math into jpxl-core; add
jpxl-plan-render reconstructing canonical linear RGB from a
ValidatedPixelPlan with its own orchestration, never calling
jpxl-decode.

AKR-Change: chg-248d26ef29e29188
AKR-Work: jpegxl-rs.work.pqc-pr3-pixel-plan-render
AKR-Work: jpegxl-rs.work.pqc-pr2-perceptual-metric
AKR-Work: jpegxl-rs.policy.perceptual-metric-clean-room
AKR-Graph: sha256:e41a193694b19545fc511030be80899708467fc0aac2cdcaf83e5017971fa048
AKR-Tree: c92cb86
Make Fast and Balanced score-targeted: move PreparedSearch to
CandidateSearchContext with pixel_plan/emission_plan doors; define
PerceptualEvaluator in policy and implement it in jpxl-perceptual over
jpxl-plan-render; generalise the two-anchor crossing helpers to a
log-loss observable; bracket, interpolate with a reserve, one bounded
correction, Pareto frontier, finalist-only entropy, canonical re-score,
hard budgets (Fast 2-3 probes/1-2 prices, Balanced 3-5/2-3), explicit
QualityStatus, measured score guard, jpxl.quality-trace/1 telemetry, and
a codec_compare quality-curve mode with matched-score byte ratios and
BD-rate.

AKR-Change: chg-e47491b88f41feaf
AKR-Work: jpegxl-rs.work.pqc-pr4-quality-navigator
AKR-Work: jpegxl-rs.work.pqc-pr1-target-semantics
AKR-Work: jpegxl-rs.decision.perceptual-quality-contract
AKR-Graph: sha256:e41a193694b19545fc511030be80899708467fc0aac2cdcaf83e5017971fa048
AKR-Tree: 1e6051a
Make Fast and Balanced score-targeted: move PreparedSearch to
CandidateSearchContext with pixel_plan/emission_plan doors; define
PerceptualEvaluator in policy and implement it in jpxl-perceptual over
jpxl-plan-render; generalise the two-anchor crossing helpers to a
log-loss observable; bracket, interpolate with a reserve, one bounded
correction, Pareto frontier, finalist-only entropy, canonical re-score,
hard budgets (Fast 2-3 probes/1-2 prices, Balanced 3-5/2-3), explicit
QualityStatus, measured score guard, jpxl.quality-trace/1 telemetry, and
a codec_compare quality-curve mode with matched-score byte ratios and
BD-rate.

- jpegxl-rs.evidence.pqc-pr0-corpus-manifest-2026-08-22 new -> verified
- jpegxl-rs.evidence.pqc-pr0-predictor-table-2026-08-22 new -> verified
- jpegxl-rs.evidence.pqc-pr0-sources-registered-2026-08-22 new -> verified
- jpegxl-rs.evidence.pqc-pr1-api-semantics-2026-08-22 new -> verified
- jpegxl-rs.evidence.pqc-pr1-cli-contract-2026-08-22 new -> verified
- jpegxl-rs.evidence.pqc-pr2-determinism-2026-08-22 new -> verified
- jpegxl-rs.evidence.pqc-pr2-harness-agreement-2026-08-22 new -> verified
- jpegxl-rs.evidence.pqc-pr2-reference-parity-2026-08-22 new -> verified
- jpegxl-rs.evidence.pqc-pr3-byte-identity-2026-08-22 new -> verified
- jpegxl-rs.evidence.pqc-pr3-render-parity-2026-08-22 new -> verified
- jpegxl-rs.evidence.pqc-pr4-bounded-2026-08-22 new -> verified
- jpegxl-rs.evidence.pqc-pr4-byte-neutral-2026-08-22 new -> verified
- jpegxl-rs.evidence.pqc-pr4-determinism-decoders-2026-08-22 new -> verified
- jpegxl-rs.evidence.pqc-pr4-target-met-dev-split-2026-08-22 new -> verified
- jpegxl-rs.evidence.pqc-pr4-wall-reported-2026-08-22 new -> verified
- jpegxl-rs.evidence.pqc-workspace-gates-2026-08-22 new -> verified
- jpegxl-rs.observation.pqc-pr4-development-split-2026-08-22 new -> verified
- jpegxl-rs.observation.ssimulacra2-f32-recursion-ripple-2026-08-22 new -> verified
- jpegxl-rs.work.pqc-pr0-provenance-corpus-calibration proposed -> completed
- jpegxl-rs.work.pqc-pr1-target-semantics proposed -> completed
- jpegxl-rs.work.pqc-pr2-perceptual-metric proposed -> completed
- jpegxl-rs.work.pqc-pr3-pixel-plan-render proposed -> completed

Verified by:
- The generator reproduces 47 fixtures (47 PPM + 29 PNG + 47 JSON provenance sidecars, idempotent sha256) and the jpxl.codec-corpus/1 manifest test-set/quality-corpus.json (gitignored) validates; splits are calibration 19, development 15, holdout 13 with no source family in two splits; classes text-screenshot 5, line-art 5, gradient 6, saturated 4, tiny 6, noise-lowlight 1, grayscale 2, photo-scene 7, photo 11. 14 generator unit tests pass.
- 256 fixed-quantizer points (16 calibration images x 16 global_scale rungs 400..73728) scored with the reference SSIMULACRA2 in 604 s produced quality_predictor.rs: 56 table cells over 5 luma-variance x 3 flat-fraction buckets plus a fallback log fit [15.62, -1.60, 0.0099, -2.57]. Leave-one-image-out |ln(pred/actual)| median 0.30, p90 2.68 (cells hold 1-4 images); loss-vs-scale slope median -2.34; saturation at 73728 is 0 up to target 70 and 0.06/0.19/0.81/0.94 at 80/85/90/95.
- Both advice documents are registered under sources/external with content hashes (jpxl-ssimulacra2-quality-controller-plan-2026-08-21 dfef416b, jpxl-encoder-metric-advice-2026-08-22 cff3dfa7); the intake copies were removed and catalog.json updated.
- 6/6 facade target tests pass: score 100 is byte-identical to the lossless path, scores outside 0..=100 are rejected, conflicting targets (quality+bpp, bpp+global_scale) are rejected, a perceptual score below 100 runs the quality controller, --global-scale encodes and decodes, and the rate report matches the bytes.
- 4/4 CLI tests pass: --quality without a number resolves to 85 under balanced and 70 under --effort fast (read from the printed quality_target line), conflicting targets exit 1, --global-scale encodes, and --quality 100 routes to lossless; the usage text no longer claims JPXL has no perceptual model.
- Scores are bit-identical between the serial executor, a 3- and 4-thread scoped executor, and between Moments and PlanesOnly reference retention; a reused scorer equals a fresh one; the precomputed-reference path equals a cold pairwise score. 11 unit and 8 integration tests pass.
- The in-memory score of a rendered Balanced plan equals the score of its emitted-and-decoded stream to the printed six decimals, and every facade quality encode's reported achieved score equals an independent re-score of the decoded bytes within 1e-6 (8-bit and 12-bit sources).
- Against the rust-av ssimulacra2 0.5.1 crate: six photograph pairs (1024x768 crops of mid.ppm and source.ppm, noise/blur/quantisation) differ by at most 0.03; the size-drift probe on mid.ppm differs 0.03 at 0.27 MP, 0.09 at 1.1 MP and 0.18 at 4.3 MP (score ~82); synthetic flat-heavy content at score ~93 differs +0.14 at 256x192 up to +1.07 at 1024x768 because the oracle's f32 blur recursion ripple inflates its rectified edge maps while this crate's f64 recursion does not; identical images score exactly 100, monotone in distortion, colour conversion matches to 1e-6 and the blur to 6e-6. The tolerances pin that envelope.
- All existing rate-loop and multi-group byte-identity tests pass unchanged after the PixelPlan split and the attach_entropy extraction; validate_pixels plus attach_and_validate_entropy reassembles an emission plan equal to the original with identical emitted bytes; production rate-mode stream hashes equal the pre-change baseline.
- Plan-rendered pixels equal jpxl-decode's decode of the emitted stream with max |delta| 0 and 0 differing quantized samples in all eleven cases: no filters, Gaborish, EPF 1/2/3 at uniform sharpness 7, EPF 2 with adaptive sharpness, X/B QM scales 3/4, grayscale, a 12-bit source at its own depth, and the Balanced (DCT 8/16/32 cover) and Fast production rate presets on >=256x256 multi-group fixtures. Banded (4-thread) rendering equals the serial render. djxl and jxl-oxide accepted the two perceptual streams sampled in the PR 4 measurement; the full matrix against the external decoders was not run.
- Every development-split encode stayed inside the effort budget table: Balanced probe distribution {2:3, 3:19, 4:17, 5:36} and prices {1:7, 2:68} against caps 5/3; Fast probes {2:6, 3:69} and prices {1:29, 2:46} against caps 3/2. No exhaustive fallback is reachable from Fast or Balanced (the rescue is one bounded extra probe, taken only when nothing met the target).
- Measured against cjxl -e 7 rather than against the rate controller interpolated to the same achieved score: geomean byte ratio at matched achieved SSIMULACRA2 1.108 (Balanced) / 1.268 (Fast) on the development split, with photographs, gradients, grayscale and noisy content smaller than cjxl (BD-rate -4% to -20%) and synthetic text/line art larger (up to +135%). On mid.ppm at target 85 Balanced found 824 KB at 86.0 where the 1 bpp rate encode spends 538 KB at a lower score; the matched-score comparison to the rate controller remains to be tabulated.
- Perceptual streams are byte-identical between 1 and 4 workers (test), rate-mode streams are unchanged (hashes), and djxl plus jxl-oxide accepted the two sampled development-split streams; the AVX2-disabled run (JPXL_DISABLE_AVX2, which also disables the FMA dispatch) and acceptance of every stream by the external decoders were not exercised.
- Development split (15 images) at targets 50/70/80/85/90, both efforts: 0 floor violations in 150 encodes; median |achieved - requested| 0.93 (Balanced) and 2.19 (Fast); achieved score monotone in the request on every image except the 8x8 tile. Inconclusive against the check as written: the locked holdout and targets 30/95 were not run, and Fast's median miss exceeds the 2-point bound.
- Against the provisional 2.0x bound the quality path costs more: development-split median wall ratio quality/rate at matched score 3.46x (Balanced); mid.ppm 4.3 MP --quality 85 4.2 s (5 probes) and --quality 70 2.0 s against --bpp 1.0 0.46 s; the 12 MP photo 12.5 s / 2.97 GB RSS (Balanced) and 10.1 s (Fast) against 1.9 s / 1.30 GB. One probe at 4.3 MP fell from 2.7 s to ~0.6 s in this pass (padded-row EPF, FMA dispatch, banded render and colour, restructured blur passes); plan+entropy+emit are under 0.6 s of the total, so the remaining cost is render+metric.
- Release test suite green across the workspace (the one failure seen in the background run was the PR 1 placeholder CLI test, rewritten in the same tree), clippy clean under -D warnings with default and extended feature sets, fmt clean. Rate-mode production streams on mid.ppm (--bpp 1.0, 4 threads) hash 05bae79d4c96f77b2bb6bd3b1ad6a794331323d11e7c55903db4c4359798701b (balanced) and 07d71108de1fc69fd4fa5cb9e0e71917ec0887510bd21bc7db5eab4a0bf6bc6b (fast), identical to the pre-change binary.

AKR-Change: chg-b12fcbd4ac583f59
AKR-Work: jpegxl-rs.work.pqc-pr4-quality-navigator
AKR-Work: jpegxl-rs.observation.pqc-pr4-development-split-2026-08-22
AKR-Evidence: @jpegxl-rs.evidence.pqc-pr0-corpus-manifest-2026-08-22/1
AKR-Evidence: @jpegxl-rs.evidence.pqc-pr0-predictor-table-2026-08-22/1
AKR-Evidence: @jpegxl-rs.evidence.pqc-pr0-sources-registered-2026-08-22/1
AKR-Evidence: @jpegxl-rs.evidence.pqc-pr1-api-semantics-2026-08-22/1
AKR-Evidence: @jpegxl-rs.evidence.pqc-pr1-cli-contract-2026-08-22/1
AKR-Evidence: @jpegxl-rs.evidence.pqc-pr2-determinism-2026-08-22/1
AKR-Evidence: @jpegxl-rs.evidence.pqc-pr2-harness-agreement-2026-08-22/1
AKR-Evidence: @jpegxl-rs.evidence.pqc-pr2-reference-parity-2026-08-22/1
AKR-Evidence: @jpegxl-rs.evidence.pqc-pr3-byte-identity-2026-08-22/1
AKR-Evidence: @jpegxl-rs.evidence.pqc-pr3-render-parity-2026-08-22/1
AKR-Evidence: @jpegxl-rs.evidence.pqc-pr4-bounded-2026-08-22/1
AKR-Evidence: @jpegxl-rs.evidence.pqc-pr4-byte-neutral-2026-08-22/1
AKR-Evidence: @jpegxl-rs.evidence.pqc-pr4-determinism-decoders-2026-08-22/1
AKR-Evidence: @jpegxl-rs.evidence.pqc-pr4-target-met-dev-split-2026-08-22/1
AKR-Evidence: @jpegxl-rs.evidence.pqc-pr4-wall-reported-2026-08-22/1
AKR-Evidence: @jpegxl-rs.evidence.pqc-workspace-gates-2026-08-22/1
AKR-Graph: sha256:de845ddff0ae8b18da35de1d3808a06d9f4eea25108c8ed9ad365cf6c336e924
AKR-Tree: fd7448d
Add for_quality with the Balanced knobs as a labelled starting policy
and no requested-bitrate branch (at_most_one_bpp deleted); define a
bounded policy bank over chroma QM, quant_lf, restoration, CfL, cover
revision and truncation lambda; Balanced solves baseline plus the two
most relevant alternatives to the same score and keeps the smallest
exact stream; Quality (feature) runs bounded coordinate descent with a
0.5% minimum-saving stop rule.

AKR-Change: chg-2438fd812df8e80a
AKR-Work: jpegxl-rs.work.pqc-pr5-policy-bank
AKR-Work: jpegxl-rs.decision.perceptual-quality-contract
AKR-Graph: sha256:de845ddff0ae8b18da35de1d3808a06d9f4eea25108c8ed9ad365cf6c336e924
AKR-Tree: 53f837f
Make Fast and Balanced score-targeted: move PreparedSearch to
CandidateSearchContext with pixel_plan/emission_plan doors; define
PerceptualEvaluator in policy and implement it in jpxl-perceptual over
jpxl-plan-render; generalise the two-anchor crossing helpers to a
log-loss observable; bracket, interpolate with a reserve, one bounded
correction, Pareto frontier, finalist-only entropy, canonical re-score,
hard budgets (Fast 2-3 probes/1-2 prices, Balanced 3-5/2-3), explicit
QualityStatus, measured score guard, jpxl.quality-trace/1 telemetry, and
a codec_compare quality-curve mode with matched-score byte ratios and
BD-rate.

AKR-Change: chg-a5ab07e6930adf4c
AKR-Work: jpegxl-rs.work.pqc-pr4-quality-navigator
AKR-Work: jpegxl-rs.decision.perceptual-quality-contract
AKR-Graph: sha256:e6d901dc2e27bdff12a4964264f48d8d814322f7332b3e95194ab1959931bea9
AKR-Tree: 57583fa
Enumerate legal terminal-nonzero removals per varblock/channel from the
real coefficient walk, price them with the trained entropy tables, rank
by bytes saved per estimated perceptual loss, apply bounded
non-overlapping batches accepted only by a canonical full-frame score
above the floor (rollback and halve otherwise), retrain at checkpoints,
and exact-price/full-score the final candidate. Then run the
Quality-effort promotion gate: geomean bytes at matched achieved
SSIMULACRA2 <= 0.98x Balanced on the locked holdout with Contract B
guards intact, or keep the feature hidden and record the negative.

AKR-Change: chg-5b357be4b979b4d8
AKR-Work: jpegxl-rs.work.pqc-pr7-terminal-reducer
AKR-Work: jpegxl-rs.decision.perceptual-quality-contract
AKR-Graph: sha256:dabdc0b34fbfe96ad677a19ad6675560419dbc412a6dd47b0823af2a07add86c
AKR-Tree: 1169288
Add for_quality with the Balanced knobs as a labelled starting policy
and no requested-bitrate branch (at_most_one_bpp deleted); define a
bounded policy bank over chroma QM, quant_lf, restoration, CfL, cover
revision and truncation lambda; Balanced solves baseline plus the two
most relevant alternatives to the same score and keeps the smallest
exact stream; Quality (feature) runs bounded coordinate descent with a
0.5% minimum-saving stop rule.

AKR-Change: chg-df66f9ed39a8f2ae
AKR-Work: jpegxl-rs.work.pqc-pr5-policy-bank
AKR-Work: jpegxl-rs.work.pqc-pr7-terminal-reducer
AKR-Graph: sha256:cb1867c2681edb209f947a91066f69fdb3671cc1b5407126620765cacf9b6a1a
AKR-Tree: 9d7db04
Enumerate legal terminal-nonzero removals per varblock/channel from the
real coefficient walk, price them with the trained entropy tables, rank
by bytes saved per estimated perceptual loss, apply bounded
non-overlapping batches accepted only by a canonical full-frame score
above the floor (rollback and halve otherwise), retrain at checkpoints,
and exact-price/full-score the final candidate. Then run the
Quality-effort promotion gate: geomean bytes at matched achieved
SSIMULACRA2 <= 0.98x Balanced on the locked holdout with Contract B
guards intact, or keep the feature hidden and record the negative.

AKR-Change: chg-f5c02e90aaf8af24
AKR-Work: jpegxl-rs.work.pqc-pr7-terminal-reducer
AKR-Work: jpegxl-rs.work.pqc-pr5-policy-bank
AKR-Graph: sha256:8dab61e0fc08dc924e4758f499b1aa228fb587d95eaba6ecf8359723c087b501
AKR-Tree: 824dc64
Enumerate legal terminal-nonzero removals per varblock/channel from the
real coefficient walk, price them with the trained entropy tables, rank
by bytes saved per estimated perceptual loss, apply bounded
non-overlapping batches accepted only by a canonical full-frame score
above the floor (rollback and halve otherwise), retrain at checkpoints,
and exact-price/full-score the final candidate. Then run the
Quality-effort promotion gate: geomean bytes at matched achieved
SSIMULACRA2 <= 0.98x Balanced on the locked holdout with Contract B
guards intact, or keep the feature hidden and record the negative.

- jpegxl-rs.evidence.pqc-pr4-holdout-byte-neutral-2026-08-22 new -> verified
- jpegxl-rs.evidence.pqc-pr4-holdout-byte-neutral-ss2-2026-08-22 new -> verified
- jpegxl-rs.evidence.pqc-pr4-holdout-floor-budget-2026-08-22 new -> verified
- jpegxl-rs.evidence.pqc-pr4-holdout-identity-decoders-2026-08-22 new -> verified
- jpegxl-rs.evidence.pqc-pr4-holdout-monotone-2026-08-22 new -> verified
- jpegxl-rs.evidence.pqc-pr4-holdout-wall-memory-2026-08-22 new -> verified
- jpegxl-rs.evidence.pqc-pr4-holdout-wall-reported-2026-08-22 new -> verified
- jpegxl-rs.evidence.pqc-pr4b-memory-12mp-2026-08-22 new -> verified
- jpegxl-rs.evidence.pqc-pr4b-probe-speed-2026-08-22 new -> verified
- jpegxl-rs.evidence.pqc-pr5-material-reduction-2026-08-22 new -> verified
- jpegxl-rs.evidence.pqc-pr5-no-bpp-branch-2026-08-22 new -> verified
- jpegxl-rs.evidence.pqc-pr5b-structure-reuse-2026-08-22 new -> verified
- jpegxl-rs.evidence.pqc-pr7-balanced-single-shot-2026-08-22 new -> verified
- jpegxl-rs.evidence.pqc-pr7-dev-split-2026-08-22 new -> verified
- jpegxl-rs.observation.pqc-memory-50mp-oom-2026-08-22 new -> verified
- jpegxl-rs.work.pqc-pr4-quality-navigator proposed -> completed

Verified by:
- The frozen CLI was built without --features perceptual, so jpxl compare printed no ssimulacra2 and the matched-score comparison fell back to PSNR: geomean quality/rate bytes 1.0097 (Balanced, 52 in-range cells) and 1.0001 (Fast, 50), both inside +-1%, photographs 0.94-1.01, the aggregate pulled up by text (1.21) and line art (1.11). The SSIMULACRA2-matched number, the intended gate, still has to be measured with a perceptual-feature compare build (.agent/scratch/quality-pr4-closure-20260822/jpxl-compare).
- At matched SSIMULACRA2 on the locked holdout the quality path spends fewer bytes than the rate controller: geomean ratio 0.892 (Balanced, 42/91 in-range cells; photos 0.858, the well-sampled mid-size photos 0.971) and 0.899 (Fast; photos 0.891, mid-size 0.980); every photo image is below 1.0 at both efforts. The 49 out-of-range cells per effort are gradient/saturated/tiny (the rate ladder floors near score 94) and the extreme targets 30/50 (below the rate floor) and 90/95 (above bpp 3.0). The gate's +-1% band is exceeded only in the favourable direction; the magnitude on 50 MP photos is uncertain (near-vertical rate segments), the sign is not. Matched-score wall/RSS (Balanced q85): 4.3 MP 4.08x / 2.16x at bpp 1.5; 12 MP 10.65x / 2.37x at bpp 1.0.
- Locked holdout (13 images incl. three 50 MP sources), 7 targets, both efforts, frozen binary e8f2680e: floor violations 0/91 Balanced and 0/91 Fast at guard 0.0 (strict achieved >= requested) and at 0.30; median |achieved - requested| 0.84 (Balanced, max 14.9 on low targets that saturate the floor) and 1.64 (Fast, max 32.1); every cell inside the budget table (Balanced max 5 probes / 2 prices / 2 structural builds, Fast 3/2/2, zero overages); statuses Balanced met 34 / rescued_fresh_structure 33 / met_work_cap 24, Fast met_work_cap 60 / met 30 / rescued 1; tiny-64x64 went through the perceptual path and held its floor.
- 52/52 holdout cells produce identical sha256 across 1 and 4 threads and with AVX2 disabled; all 182 quality streams decode with exit 0 in both djxl v0.13.0 and jxl-oxide 0.12.6.
- Per-image monotonicity in the target fails on easy synthetic content only: Balanced 4 violations on 2 images, Fast 5 on 2 images (saturated soft primaries, radial gradient, text screenshot) — a few-byte size dip or an achieved-score dip when a lower target already overshot far above it; no photograph violates and no floor is broken. Acceptable as a known limitation of a per-target search with no cross-target memory; a monotone post-rule (never emit fewer bytes than the lower target's stream) is the fix if the contract is to be strict.
- Against the provisional PR 4 bound of <= 2.0x the rate path: 4.3 MP wall 3.23x (1.55 s vs 0.48 s) and RSS 2.17x (1.10 GB vs 0.51 GB); 12 MP wall 8.76x (6.92 s vs 0.79 s, a rescued_fresh_structure five-probe path) and RSS 2.37x (3.14 GB vs 1.33 GB). Peak RSS scales at 255-275 bytes per pixel: the three 50 MP holdout sources take 12.4-12.6 GB and ~28 s each. Wall and memory stay the open PR 4b items (tiled scorer, fewer full-frame probes on rescue).
- Wall and memory at matched SSIMULACRA2 are reported, as the check asks, on both anchors: 4.3 MP Balanced q85 1.55 s / 1.10 GB against bpp 1.5 at 0.38 s / 0.51 GB (4.08x wall, 2.16x RSS); 12 MP 6.92 s / 3.14 GB against bpp 1.0 (10.65x wall, 2.37x RSS; a rescued_fresh_structure five-probe path). Peak RSS scales at 255-275 bytes per pixel (50 MP: 12.4-12.6 GB, ~28 s). The provisional PR 4 bound of 2.0x is not met (recorded separately as pqc-pr4-holdout-wall-memory, fail) and the doc's +25% remains PR 4b's target: after PR 4b's probe speed-up the remaining cost is the number of full-frame probes on the rescue path and the scorer's memory.
- 12 MP peak RSS target <= 2.0 GB not met: ~2.9 GB end-to-end (Balanced q85), 1.6 GB metric-only. Reference retention Moments keeps 549 MB (PlanesOnly 183 MB but only 50 MB lower peak and ~40% slower per probe, so Moments stays, MOMENTS_PIXEL_CAP 24 MP); the scorer's ~12 frame-sized scratch planes (~670 MB) plus the encoder's own ~1.5 GB dominate. Closing it needs a tiled scorer whose band partition and reduction order keep the determinism contract, or plan-lifetime changes in jpxl-encode-policy; deferred as a scoped follow-up.
- SSIMULACRA2 score() at 4.3 MP: serial 610 -> 417-440 ms (target <= 450), 4 threads 219 -> 161-170 ms (target <= 250); convert 249 -> 38 ms from a branch-free reproducible_cbrt plus an AVX2/FMA target_feature build of planes_to_positive_xyb, blur 256 -> 235 ms from a structure-of-arrays vertical pass with an AVX2 strip. Render 283 ms serial -> 155 ms banded at 4 threads now that the evaluator calls render_with and fuses quantize+LUT into a reused buffer. Raw score bits 405358a2f06c4538 identical with AVX2 on and off at 1 and 4 workers; rate streams 05bae79d/07d71108 and the quality streams byte-identical to the pre-change tree (stash isolation).
- Balanced with two ranked policy trials per encode: bytes geomean -0.21% at target 70 and -0.34% at 85, all from the photo scene (-1.03% / -1.71%); every other image byte-identical to the baseline; no score below target (worst drop 0.32). Wall +20% to +87% (mean +51%) against the +25% budget, because each trial rebuilds cover/CfL and the forward cache (structure reuse across policies needs a CandidateSearchContext API for a shared forward cache). The bank is therefore default-off (BALANCED_DEFAULT_POLICY_TRIALS = 0) and opt-in through search_frame_perceptual_with_budget; the feature-gated Quality effort keeps the full bank.
- at_most_one_bpp is deleted and effective_{x,b}_qm_scale take no target or frame size: Fast neutral, Balanced X=3/B=3, the feature-gated Quality rate preset X=3/B=5 at every rate (its research streams may move). Fast and Balanced rate-mode streams hash identically to the baseline; quality_path_has_no_bpp_branch and the updated request.rs pins pass.
- With one shared CandidateSearchContext and the baseline anchor reused by quantizer-side trials (0 structural builds, unit-tested; the forward cache is a pure function of the transform frame and block transform, so sharing needs no keying), the bank lowers bytes at every cell it moves (mid@70 -0.69%, scene@70 -0.59%, scene@85 -1.34%) and never regresses one, achieved >= target everywhere, rate and baseline-only streams byte-identical; but wall is +78% mean (+57..+122%) against the +25% budget because each trial still pays its full-frame render-and-score and its finalist's entropy-train-and-emit. BALANCED_DEFAULT_POLICY_TRIALS stays 0; the reuse plumbing is kept for the feature-gated Quality effort.
- The single-evaluation Balanced reducer (first batch = half the ranked candidates, max 16384 edits) saves 0.4% bytes geomean at targets 70 and 85 (photos 0.4-0.5%, best 2.9%) with zero floor violations, at +21% / +16% wall geomean but up to +62% on one small image. Average inside the +25% Balanced wall budget, worst case outside, for a small gain: Balanced keeps the reducer off until the locked-holdout gate (matched-score bytes, Butteraugli/PSNR guards) is run and the evaluation made cheaper; the feature-gated Quality effort runs the full reducer.
- Development split, Balanced with the reducer on versus off: bytes geomean 0.9825 at target 70 (photos 0.9903, min 0.888) and 0.9912 at 85 (photos 0.9886, min 0.9835); zero floor violations in 30 cells (the reduced stream is kept only when its exact size is smaller and every accepted batch is re-scored canonically); at most 6 evaluations; wall geomean 1.53x / 1.63x. Bytes down at matched-or-better score with bounded work, but the wall exceeds Balanced's +25% budget, so the reducer ships default-off on Balanced (BALANCED_DEFAULT_REDUCER = None) and on for the feature-gated Quality effort; the locked-holdout gate is still to be measured.

AKR-Change: chg-5cfd7ec127d55c0f
AKR-Work: jpegxl-rs.work.pqc-pr7-terminal-reducer
AKR-Work: jpegxl-rs.work.pqc-pr4-quality-navigator
AKR-Evidence: @jpegxl-rs.evidence.pqc-pr4-holdout-byte-neutral-2026-08-22/1
AKR-Evidence: @jpegxl-rs.evidence.pqc-pr4-holdout-byte-neutral-ss2-2026-08-22/1
AKR-Evidence: @jpegxl-rs.evidence.pqc-pr4-holdout-floor-budget-2026-08-22/1
AKR-Evidence: @jpegxl-rs.evidence.pqc-pr4-holdout-identity-decoders-2026-08-22/1
AKR-Evidence: @jpegxl-rs.evidence.pqc-pr4-holdout-monotone-2026-08-22/1
AKR-Evidence: @jpegxl-rs.evidence.pqc-pr4-holdout-wall-memory-2026-08-22/1
AKR-Evidence: @jpegxl-rs.evidence.pqc-pr4-holdout-wall-reported-2026-08-22/1
AKR-Evidence: @jpegxl-rs.evidence.pqc-pr4b-memory-12mp-2026-08-22/1
AKR-Evidence: @jpegxl-rs.evidence.pqc-pr4b-probe-speed-2026-08-22/1
AKR-Evidence: @jpegxl-rs.evidence.pqc-pr5-material-reduction-2026-08-22/1
AKR-Evidence: @jpegxl-rs.evidence.pqc-pr5-no-bpp-branch-2026-08-22/1
AKR-Evidence: @jpegxl-rs.evidence.pqc-pr5b-structure-reuse-2026-08-22/1
AKR-Evidence: @jpegxl-rs.evidence.pqc-pr7-balanced-single-shot-2026-08-22/1
AKR-Evidence: @jpegxl-rs.evidence.pqc-pr7-dev-split-2026-08-22/1
AKR-Graph: sha256:a09d26da173c875f23d570b0aa6c6c56e3ba65cb45a0c71ce7ea85f6ca8ab4b2
AKR-Tree: 2d63fdd
AKR-Change: chg-c23f01c76b0fed77
AKR-Work: jpegxl-rs.work.pqc-quality-rate-curve-closure
AKR-Work: jpegxl-rs.work.pqc-usable-efforts-cost
AKR-Graph: sha256:3c1d5c417d300109ffe11769cc9c3b66110d480e000c2bfe776fb035d220b9ad
AKR-Tree: b69d1e9
Make the checked-in quality-curve mode reproduce the PR4 comparison
without bespoke scratch scripts: when --quality is selected, collect a
same-effort JPXL bitrate ladder as well as cjxl, interpolate log(bytes)
at each achieved SSIMULACRA2 score, report coverage and matched-byte
ratios/BD-rate against both baselines, and preserve the floor,
monotonicity, budget, trace, and guard reporting needed to interpret the
curve.

- jpegxl-rs.evidence.pqc-low-memory-12mp-2026-08-23 new -> verified
- jpegxl-rs.evidence.pqc-low-memory-production-identity-2026-08-23 new -> verified
- jpegxl-rs.evidence.pqc-low-memory-wall-anchors-2026-08-23 new -> verified
- jpegxl-rs.evidence.pqc-low-memory-workspace-gates-2026-08-23 new -> verified
- jpegxl-rs.evidence.pqc-low-memory-xlarge-identity-2026-08-23 new -> verified
- jpegxl-rs.evidence.pqc-pr7-quality-promotion-rejected-2026-08-22 new -> verified
- jpegxl-rs.evidence.pqc-pr7-reducer-holdout-partial-2026-08-22 new -> verified
- jpegxl-rs.evidence.pqc-quality-rate-curve-exact-10of13-2026-08-23 new -> verified
- jpegxl-rs.evidence.pqc-quality-rate-curve-exact-13of13-2026-08-23 new -> verified
- jpegxl-rs.evidence.pqc-quality-rate-curve-replay-2026-08-23 new -> verified
- jpegxl-rs.evidence.pqc-quality-rate-harness-tests-2026-08-23 new -> verified
- jpegxl-rs.evidence.pqc-quality-rate-workspace-gates-2026-08-23 new -> verified
- jpegxl-rs.observation.pqc-pr4-rate-curve-axis-audit-2026-08-23 new -> verified
- jpegxl-rs.papercut.a-full-13-image-curve-run-was-oom-killed-on-the new -> verified
- jpegxl-rs.papercut.after-akr-scratch-keep-quality-rate-curve new -> verified
- jpegxl-rs.papercut.after-akr-scratch-keep-visibly-added-a-new new -> verified
- jpegxl-rs.papercut.knowledge-propose-exposes-scope-as-array new -> verified
- jpegxl-rs.papercut.knowledge-propose-exposes-topic-for-every new -> verified
- jpegxl-rs.papercut.the-frozen-pqc-holdout-reducer-scripts-and new -> verified
- jpegxl-rs.work.pqc-pr5-policy-bank proposed -> abandoned
- jpegxl-rs.work.pqc-pr7-terminal-reducer proposed -> abandoned
- jpegxl-rs.work.pqc-quality-rate-curve-closure new -> completed
- jpegxl-rs.work.pqc-usable-efforts-cost new -> active

Verified by:
- Low-memory Balanced q85 path meets the 12 MP two-GiB RSS ceiling
- Low-memory quality path passes the full locked production-identity matrix
- Controlled matched-score wall anchors after low-memory PQC changes
- Combined quality-rate and low-memory workspace gates pass
- Low-memory quality path makes 50 MP usable and preserves all xlarge quality streams
- Partial locked holdout definitively rejects public Quality promotion
- Partial locked-holdout reducer screen stopped by user
- Corrected common-axis rate curve is exact on 10/13 holdout images; xlarge quality remains memory-blocked
- Exact decoded-pair quality/rate curve closes all 13 locked holdout images
- Integrated quality/rate curve replay emits common-axis matches for both production efforts
- Integrated quality/rate curve replay emits common in-tree metric matches for both production efforts
- Quality-rate harness tests pass
- Quality-rate workspace gates pass

AKR-Change: chg-ccccdebfeba57ad0
AKR-Work: jpegxl-rs.work.pqc-quality-rate-curve-closure
AKR-Work: jpegxl-rs.work.pqc-usable-efforts-cost
AKR-Evidence: @jpegxl-rs.evidence.pqc-low-memory-12mp-2026-08-23/1
AKR-Evidence: @jpegxl-rs.evidence.pqc-low-memory-production-identity-2026-08-23/1
AKR-Evidence: @jpegxl-rs.evidence.pqc-low-memory-wall-anchors-2026-08-23/1
AKR-Evidence: @jpegxl-rs.evidence.pqc-low-memory-workspace-gates-2026-08-23/1
AKR-Evidence: @jpegxl-rs.evidence.pqc-low-memory-xlarge-identity-2026-08-23/1
AKR-Evidence: @jpegxl-rs.evidence.pqc-pr7-quality-promotion-rejected-2026-08-22/1
AKR-Evidence: @jpegxl-rs.evidence.pqc-pr7-reducer-holdout-partial-2026-08-22/1
AKR-Evidence: @jpegxl-rs.evidence.pqc-quality-rate-curve-exact-10of13-2026-08-23/1
AKR-Evidence: @jpegxl-rs.evidence.pqc-quality-rate-curve-exact-13of13-2026-08-23/1
AKR-Evidence: @jpegxl-rs.evidence.pqc-quality-rate-curve-replay-2026-08-23/1
AKR-Evidence: @jpegxl-rs.evidence.pqc-quality-rate-curve-replay-2026-08-23/2
AKR-Evidence: @jpegxl-rs.evidence.pqc-quality-rate-harness-tests-2026-08-23/1
AKR-Evidence: @jpegxl-rs.evidence.pqc-quality-rate-workspace-gates-2026-08-23/1
AKR-Graph: sha256:3c1d5c417d300109ffe11769cc9c3b66110d480e000c2bfe776fb035d220b9ad
AKR-Tree: 0914c51
No AKR work record: Ledger-wide migration: old evidence artifact fields
referenced temporary scratch paths, which AKR now forbids.

AKR-Change: chg-76ae9e7ff29fb6cf
AKR-Graph: sha256:acae991c25923d9f57d87935eb03e6e084769d502e27bc9b14599be981d4dc54
AKR-Tree: 215f64f
Verified by:
- G2 rate and decoder identity
- G2 canonical run-aware entropy audit
- JPXL and jxl-oxide both decoded the representative 2400x1800 G3 Balanced codestream successfully.
- All three frozen 1 bpp Balanced cells stayed on InsideBand with zero rescues and retained their G2 sizes; the 539,958-byte mid stream remained SHA-256 35b1e40af953744efc728b0e6aa81e6753fdafa33ef31e68013e7b98754a31ab.
- Count-only BitWriter price_codestream matches emit sizing; group HF coeff arenas; rate_loop 11/11; vardct-fixed 256 fingerprint 37145644e7e1857f (Contract A). Scratch: .agent/scratch/preopt-baseline-2026-08-06.md
- Pinned image timing covers Balanced and overlay-exercising masking-AQ paths with identical outputs.
- Phase 25 codestream and decoded-image identity
- Phase 25 focused policy tests pass
- Phase 25 image timing screen
- Phase 27 exact-final and decode checks
- Phase 27 six-case image screen
- Workspace build and build --tests warning-free; all 40 workspace test suites pass (0 failures); cargo fmt --all --check clean. Pre-existing (verified at clean HEAD by stashing this change): workspace clippy -D warnings fails on 70 indexing_slicing hits in jpxl-core/src/color.rs from f3be8b8 -- outside this brief, reported in the work note.
- All 8 canonical/masking-AQ streams byte-identical to the pre-change binary (quality-mid sha256 d4b03810... unchanged); every candidate output decodes cleanly (0 failures).
- Pre-change Quality-mid DWARF profile: choose_lane4 12.7% self, quantize-loop family 34.8% of samples. Post-change same scenario: family 27.2% (choose_lane4 self 10.5%), ~22% relative family reduction. Pinned wall-clock screen mixed/noisy on 2 of 6 cases (same host-contamination signature as Phase 30); profile delta carries the cost claim.
- AQ Off wins the three-photo matched-rate gate
- Gaborish screen is an honest negative
- quant_lf 8 improves all three screened photographs
- Forced DCT8 cover loses to hierarchical cover
- EPF iteration signalling is a pixel no-op without filter planning
- jxl-oxide failure begins exactly above signed-16-bit LfQuant
- AQ-Off plus quant_lf 8 candidate is byte-identical after compatibility fix
- Phase 5G cjxl effort-7 equal-rate anchors
- Phase 5G six-scene target-rate corpus matrix
- Phase 5G target-rate default promotion verification
- Phase 5H quant_lf tail screen
- Active EPF improves Butteraugli in all twelve representative cells
- Exact-rate screen rejects the two-pass reconstruction-error AQ signal
- Deeper active EPF is content-dependent and fails the global gate
- Coarser chroma QM allocation is beneficial but not globally safe
- Temporary activity-split modes were removed; the target-rate production stream remains 97,539 bytes with the Phase 5I SHA-256 470ef5f172a54b7ef2822b5e0e07db1640fa9de8a940b9c175a05a9a6bc996b2.
- On small1, small3, and mid2 at one/two bpp, eleven of twelve spatial-polarity cells regressed Butteraugli and every cell regressed SSIMULACRA2; median source variance is rejected as the sharpness signal.
- Before removal, the temporary median-variance policies emitted a real mixed 0/7 sharpness plane with inverse polarities; djxl and jxl-oxide accepted the active spatial EPF stream.
- Phase 5N negative candidate cleanup
- Phase 5N fine AQ perceptual screen
- Phase 5N fine AQ structural and rate gates
- Phase 5O research rollback and production restoration
- Phase 5O special-transform perceptual matrix
- Phase 5O special-transform wire and rate gates
- Phase 6.0 frequency-response harness ran clean on two photographs, control passed
- Phase 8.4 preserves all Phase 8.3 quality and target cells byte-for-byte
- Phase 8.4 cached finalist prices clear the Windows speed gate
- Phase 8.6 finalist-measured HF allocation brief
- Phase 8.6 spatial, channel and frequency localization
- Phase 8.6 independent metric validation
- Q2 chroma-HF attribution sweep
- Q2 compatibility control
- Q2 corpus gates
- Q2 deterministic dual-decoder verification
- Q2 Rust workspace gates
- Q3 corpus gates against the Phase Q2 outputs
- Q3 changed cells are thread-deterministic and dual-decodable
- Q3 dense upper ladder reaches ceiling-bound targets
- Q3 Rust workspace gates on a clean worktree carrying only this pass's patch
- Q3 native Windows speed budget
- Q4 compatibility control and thread determinism
- Q4 corpus gates: calibrated rate model against Phase Q3
- Q4 Rust workspace gates (with the 16-bit API work in the tree)
- Q4 A/B timing: calibrated rate model vs legacy
- Q5 anchored-controller screen recorded; committed defaults reproduce Q4
- Q6 corpus gates against Phase Q4

No AKR work record: Ledger-wide metadata migration: evidence revisions
preserve original observations while replacing forbidden scratch
artifact references.

AKR-Change: chg-10b6cc552ec389cd
AKR-Evidence: @jpegxl-rs.evidence.gap-g2-rate-decoder-identity-2026-08-21/2
AKR-Evidence: @jpegxl-rs.evidence.gap-g2-run-aware-audit-2026-08-21/2
AKR-Evidence: @jpegxl-rs.evidence.gap-g3-decoder-parity-2026-08-21/2
AKR-Evidence: @jpegxl-rs.evidence.gap-g3-ordinary-path-identity-2026-08-21/2
AKR-Evidence: @jpegxl-rs.evidence.opt-v1-count-only-arenas/2
AKR-Evidence: @jpegxl-rs.evidence.phase24-speed-2026-08-16/2
AKR-Evidence: @jpegxl-rs.evidence.phase25-identity-2026-08-16/2
AKR-Evidence: @jpegxl-rs.evidence.phase25-policy-tests-2026-08-16/2
AKR-Evidence: @jpegxl-rs.evidence.phase25-timing-2026-08-16/2
AKR-Evidence: @jpegxl-rs.evidence.phase27-finalist-only-entropy-correctness-2026-08-16/2
AKR-Evidence: @jpegxl-rs.evidence.phase27-finalist-only-entropy-screen-2026-08-16/2
AKR-Evidence: @jpegxl-rs.evidence.phase31-gates-2026-08-16/2
AKR-Evidence: @jpegxl-rs.evidence.phase31-identity-2026-08-16/2
AKR-Evidence: @jpegxl-rs.evidence.phase31-profile-2026-08-16/2
AKR-Evidence: @jpegxl-rs.evidence.phase5a-aq-policy-gate-2026-08-11/2
AKR-Evidence: @jpegxl-rs.evidence.phase5b-gaborish-negative-2026-08-11/2
AKR-Evidence: @jpegxl-rs.evidence.phase5c-lf-hf-balance-2026-08-11/2
AKR-Evidence: @jpegxl-rs.evidence.phase5d-fixed-cover-negative-2026-08-11/2
AKR-Evidence: @jpegxl-rs.evidence.phase5e-epf-signalling-noop-2026-08-11/2
AKR-Evidence: @jpegxl-rs.evidence.phase5f-lfquant-boundary-2026-08-11/2
AKR-Evidence: @jpegxl-rs.evidence.phase5f-quality-regate-2026-08-11/2
AKR-Evidence: @jpegxl-rs.evidence.phase5g-cjxl-equal-rate-anchors-2026-08-11/2
AKR-Evidence: @jpegxl-rs.evidence.phase5g-corpus-matrix-2026-08-11/2
AKR-Evidence: @jpegxl-rs.evidence.phase5g-target-default-2026-08-11/2
AKR-Evidence: @jpegxl-rs.evidence.phase5h-quant-lf-tail-2026-08-11/2
AKR-Evidence: @jpegxl-rs.evidence.phase5i-active-epf-quality-2026-08-11/2
AKR-Evidence: @jpegxl-rs.evidence.phase5j-two-pass-error-quality-2026-08-11/2
AKR-Evidence: @jpegxl-rs.evidence.phase5k-active-epf-depth-quality-2026-08-11/2
AKR-Evidence: @jpegxl-rs.evidence.phase5l-chroma-qm-quality-2026-08-11/2
AKR-Evidence: @jpegxl-rs.evidence.phase5m-spatial-epf-policy-2026-08-11/2
AKR-Evidence: @jpegxl-rs.evidence.phase5m-spatial-epf-quality-2026-08-11/2
AKR-Evidence: @jpegxl-rs.evidence.phase5m-spatial-epf-wire-2026-08-11/2
AKR-Evidence: @jpegxl-rs.evidence.phase5n-fine-aq-policy-2026-08-11/2
AKR-Evidence: @jpegxl-rs.evidence.phase5n-fine-aq-quality-2026-08-11/2
AKR-Evidence: @jpegxl-rs.evidence.phase5n-fine-aq-structure-2026-08-11/2
AKR-Evidence: @jpegxl-rs.evidence.phase5o-special8-cleanup-2026-08-11/2
AKR-Evidence: @jpegxl-rs.evidence.phase5o-special8-quality-2026-08-11/2
AKR-Evidence: @jpegxl-rs.evidence.phase5o-special8-wire-rate-2026-08-11/2
AKR-Evidence: @jpegxl-rs.evidence.phase6-0-frequency-harness-2026-08-12/2
AKR-Evidence: @jpegxl-rs.evidence.phase8-4-quality-identity/2
AKR-Evidence: @jpegxl-rs.evidence.phase8-4-windows-speed/2
AKR-Evidence: @jpegxl-rs.evidence.phase8-6-architecture-brief-2026-08-14/2
AKR-Evidence: @jpegxl-rs.evidence.phase8-6-deficit-localization-2026-08-14/2
AKR-Evidence: @jpegxl-rs.evidence.phase8-6-independent-metric-validation-2026-08-14/2
AKR-Evidence: @jpegxl-rs.evidence.quality-q2-chroma-attribution-2026-08-18/2
AKR-Evidence: @jpegxl-rs.evidence.quality-q2-compatibility-control-2026-08-18/2
AKR-Evidence: @jpegxl-rs.evidence.quality-q2-corpus-gates-2026-08-18/2
AKR-Evidence: @jpegxl-rs.evidence.quality-q2-determinism-decoders-2026-08-18/2
AKR-Evidence: @jpegxl-rs.evidence.quality-q2-rust-gates-2026-08-18/2
AKR-Evidence: @jpegxl-rs.evidence.quality-q3-corpus-gates-2026-08-18/2
AKR-Evidence: @jpegxl-rs.evidence.quality-q3-determinism-decoders-2026-08-18/2
AKR-Evidence: @jpegxl-rs.evidence.quality-q3-ladder-ceiling-fix-2026-08-18/2
AKR-Evidence: @jpegxl-rs.evidence.quality-q3-rust-gates-2026-08-18/2
AKR-Evidence: @jpegxl-rs.evidence.quality-q3-speed-budget-2026-08-18/2
AKR-Evidence: @jpegxl-rs.evidence.quality-q4-compatibility-determinism-2026-08-18/2
AKR-Evidence: @jpegxl-rs.evidence.quality-q4-corpus-gates-2026-08-18/2
AKR-Evidence: @jpegxl-rs.evidence.quality-q4-rust-gates-2026-08-18/2
AKR-Evidence: @jpegxl-rs.evidence.quality-q4-speed-budget-2026-08-18/2
AKR-Evidence: @jpegxl-rs.evidence.quality-q5-controller-screen-2026-08-18/2
AKR-Evidence: @jpegxl-rs.evidence.quality-q6-corpus-gates-2026-08-18/2
AKR-Graph: sha256:82da4a295bc7d73a48bb5f20700d1724a613c312a0b748d93f3df5439677bfd6
AKR-Tree: 9fc9db9
No AKR work record: Classify historical work records under AKR's legacy
provenance exemption after removing forbidden scratch artifact
references.

AKR-Change: chg-66977654a88ff9de
AKR-Graph: sha256:29947c3fadfc107253854896393926aa0698b43a301121176a032e4f7a7260f4
AKR-Tree: a676c99
@liminalism
liminalism merged commit 496cca2 into main Aug 23, 2026
2 checks passed
@liminalism
liminalism deleted the perceptual-quality-controller branch August 23, 2026 17:47
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.

1 participant