Skip to content

Ticket the 2026-07-16 audit findings (EN-053..EN-060)#106

Merged
proggeramlug merged 2 commits into
mainfrom
docs/audit-2026-07-16-tickets
Jul 16, 2026
Merged

Ticket the 2026-07-16 audit findings (EN-053..EN-060)#106
proggeramlug merged 2 commits into
mainfrom
docs/audit-2026-07-16-tickets

Conversation

@proggeramlug

@proggeramlug proggeramlug commented Jul 16, 2026

Copy link
Copy Markdown
Contributor

The 2026-07-16 full audit (shooter + engine) found the remaining perf/quality cost concentrated in places that had no tickets — and this registry's own history says unticketed work doesn't happen. Eight new entries, each with file:line evidence verified against today's main:

# What Why it matters
EN-053 🔴 Screen-space shadow-mask pass PCF sampling is ~5.3 ms, paid independently by 4 passes — the biggest GPU lever left
EN-054 🔴 Cache build_world_triangles on tlas_version the 20–60 ms travel hitch = the shooter's wave-spawn spikes, live in shipped defaults
EN-055 🔴 instantiateAnimation API one GLB re-parse per enemy slot = 5.5 s of the shooter's 8 s boot
EN-056 🟡 Per-frame upload/alloc tail lighting UBO ×8–9/frame, bloom bind groups, render graph rebuilt ×2/frame
EN-057 🟡 Gate Hi-Z occlusion on real consumers readback runs every frame for zero rasterized nodes
EN-058 🟡 DXC loud fallback + deployment silent FXC fallback reintroduces "HW ray query silently off" on any box missing two undeployed DLLs
EN-059 🔴 UTF-8 text assets decode as Latin-1 a clean world-file em dash renders as mojibake on screen; blocks localization
EN-060 🟡 Grass distance LOD, quality-gated 1.9 ms, and only if provably imperceptible

EN-053 and EN-060 embed the product owner's standing constraint verbatim: no performance win may cost visual quality — dev-box fps is accepted; real hardware is the target.

Summary by CodeRabbit

  • Documentation
    • Expanded the engine and rendering audit documentation with eight additional tracked items covering rendering performance and correctness.
    • Added new guidance for investigating and validating issues related to shadow cost, SDF clipmap processing, animation reuse, render-graph/frame-time optimization, Hi-Z occlusion behavior, shader compiler boot warnings and packaging, UTF-8 text decoding, and grass distance LOD quality-neutral reduction.

The full shooter+engine audit found the remaining perf cost concentrated in unglamorous, previously UNTICKETED places. EN-053 shadow-mask pass; EN-054 cache build_world_triangles; EN-055 animation instancing; EN-056 per-frame upload/alloc tail; EN-057 Hi-Z with zero consumers; EN-058 DXC silent fallback; EN-059 UTF-8-as-Latin-1 text decode; EN-060 quality-gated grass LOD. EN-053/060 carry the product owner's hard constraint verbatim: no perf win may cost visual quality.
@coderabbitai

coderabbitai Bot commented Jul 16, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: b188aa78-42e9-4e3d-805d-7fd1afcde50e

📥 Commits

Reviewing files that changed from the base of the PR and between 6b87b75 and a5ddc95.

📒 Files selected for processing (1)
  • docs/tickets.md
🚧 Files skipped from review as they are similar to previous changes (1)
  • docs/tickets.md

📝 Walkthrough

Walkthrough

docs/tickets.md adds eight engine and audit tickets, EN-053 through EN-060, covering rendering performance, animation loading, shader compiler fallback, text decoding, and grass distance LOD.

Changes

Engine audit tickets

Layer / File(s) Summary
Rendering performance and LOD tickets
docs/tickets.md
EN-053, EN-054, EN-056, EN-057, and EN-060 document shadow, SDF clipmap, renderer, Hi-Z, and grass LOD issues with proposed approaches.
Asset and text handling tickets
docs/tickets.md
EN-055 and EN-059 document animation instancing and UTF-8 text decoding issues.
Shader compiler build ticket
docs/tickets.md
EN-058 documents DXC/FXC fallback behavior, Windows packaging integration, and Lumen cost measurement.

Estimated code review effort: 1 (Trivial) | ~5 minutes

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and concisely summarizes the main change: adding audit tickets EN-053 through EN-060.
Description check ✅ Passed The description gives a detailed summary and context, but it does not include the template's Test plan or Notes sections.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch docs/audit-2026-07-16-tickets

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/tickets.md`:
- Around line 1777-1779: Update the shadow-mask proposal in the ticket to scope
it to the main screen-space/deferred lighting consumer, or explicitly define
separate masks or cached shadow data for the independently rendered GI
card-light and planar-probe consumers; do not imply that one render-resolution
screen-space mask serves all consumers.
- Around line 1883-1887: Update the quality gate described under “Hard
constraint from the product owner: no visible quality loss” to require temporal
validation in addition to A/B screenshots. Require camera-motion or multi-frame
captures at relevant distances and, where applicable, across temporal-upscaling
configurations, verifying no shimmer, popping, or unstable thinning before
accepting dithered per-instance dropout.
- Around line 1864-1867: Update the mojibake diagnosis in the documented text to
identify CP1252 or another non-UTF-8 single-byte decoding, not Latin-1, and
ensure the example uses the correct CP1252 rendering. Keep the explanation
encoding-neutral if preferred while preserving the
readFile/loadWorld-to-drawText context.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: e6a01643-2f2d-4a04-af11-531c8f179af9

📥 Commits

Reviewing files that changed from the base of the PR and between 898cb4c and 6b87b75.

📒 Files selected for processing (1)
  • docs/tickets.md

Comment thread docs/tickets.md
Comment on lines +1777 to +1779
Fix shape: a screen-space **shadow-mask pass** at render resolution — compute
the sun-shadow term once, sample the mask from every consumer. Optionally
distance-adaptive tap counts. **Hard constraint: quality-neutral.** The

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Scope the shadow-mask proposal to compatible consumers.

A render-resolution screen-space mask can serve the main deferred lighting view, but it cannot directly provide correct shadow terms for the independently rendered GI card-light and planar-probe consumers named above. Scope the ticket to screen-space lighting, or specify separate masks/cache data in each consumer’s coordinate space.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/tickets.md` around lines 1777 - 1779, Update the shadow-mask proposal in
the ticket to scope it to the main screen-space/deferred lighting consumer, or
explicitly define separate masks or cached shadow data for the independently
rendered GI card-light and planar-probe consumers; do not imply that one
render-resolution screen-space mask serves all consumers.

Comment thread docs/tickets.md
Comment on lines +1864 to +1867
`Arena 02 a-hat-euro-quote Outdoor plaza` — the three-char cp1252 image of
the UTF-8 bytes. So somewhere between `readFile`/`loadWorld` and `drawText`,
file bytes are decoded per-byte (Latin-1) instead of as UTF-8. Every
non-ASCII character in any text asset (world names, future localized strings

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Use CP1252, not Latin-1, for this mojibake diagnosis. The — output matches UTF-8 bytes misread as CP1252; Latin-1 would render â��. Keep the wording encoding-neutral, or say “likely CP1252/non-UTF-8 single-byte decoding.”

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/tickets.md` around lines 1864 - 1867, Update the mojibake diagnosis in
the documented text to identify CP1252 or another non-UTF-8 single-byte
decoding, not Latin-1, and ensure the example uses the correct CP1252 rendering.
Keep the explanation encoding-neutral if preferred while preserving the
readFile/loadWorld-to-drawText context.

Comment thread docs/tickets.md
Comment on lines +1883 to +1887
**Hard constraint from the product owner: no visible quality loss.** A naive
density cut reads as the far field thinning and is REJECTED by definition.
Acceptable shapes: dithered per-instance dropout beyond the distance where a
blade is sub-pixel (its coverage already handled by the shader's distance
ramp), with A/B screenshots at multiple distances proving indistinguishable.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Add temporal validation to the quality gate.

A/B screenshots can miss shimmer, popping, or unstable thinning caused by dithered per-instance dropout. Require camera-motion or multi-frame captures, ideally across the relevant temporal-upscaling configurations, before accepting the optimization.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/tickets.md` around lines 1883 - 1887, Update the quality gate described
under “Hard constraint from the product owner: no visible quality loss” to
require temporal validation in addition to A/B screenshots. Require
camera-motion or multi-frame captures at relevant distances and, where
applicable, across temporal-upscaling configurations, verifying no shimmer,
popping, or unstable thinning before accepting dithered per-instance dropout.

@proggeramlug
proggeramlug merged commit f718d2a into main Jul 16, 2026
10 checks passed
@proggeramlug
proggeramlug deleted the docs/audit-2026-07-16-tickets branch July 16, 2026 10:17
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