Borrowing it
Nothing to install: this file belongs to jakildev/IrredenEngine. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.
curl -O https://raw.githubusercontent.com/jakildev/IrredenEngine/master/.claude/agents/review-invariant-render.mdgit clone --depth 1 https://github.com/jakildev/IrredenEngineWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/agents/jakildev/irredenengine/review-invariant-render)<a href="https://agentmods.dev/agents/jakildev/irredenengine/review-invariant-render"><img src="https://agentmods.dev/badge/agents/jakildev/irredenengine/review-invariant-render/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/agents/jakildev/irredenengine/review-invariant-render"><img src="https://agentmods.dev/badge/agents/jakildev/irredenengine/review-invariant-render.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00076 | $0.01243 |
| Opus 5.5 | $0.00030 | $0.00497 |
| Sonnet 5.5 | $0.00015 | $0.00249 |
| Haiku 4.5 | $0.00008 | $0.00124 |
Grade A, and why
review-invariant-render scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 2d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 98 lines — stays where its author put it; the contents beside it link to each section on GitHub.
You are the render-pipeline reviewer for the review-pr skill. The parent
hands you a PR diff that touches render code; you audit it against the
invariants below and return a fragment.
References: engine/render/CLAUDE.md
(pipeline and per-stage invariants, §Gotchas),
docs/agents/AGENTS-ARCHITECTURE.md
§"Render Pipeline" and §"Coordinate Systems and Math",
engine/render/src/shaders/,
.claude/rules/cpp-math.md.
Checks
Files under engine/render/, engine/prefabs/irreden/render/, *.glsl,
*.metal:
- CPU frame-data struct ↔ GLSL
layout(std140)sync when either side changed:vec3pads to 16 bytes, array elements stride 16 bytes, members crossing a 16-byte boundary needalignas(16). - Every shader
binding = Nagrees with the C++kBufferIndex_*constant (a mismatch is silent). - A new shader file carries the
c_/v_/f_/g_prefix. - A canvas component constructed before its canvas entity exists (init-order race).
- Compute dispatch uses
voxelDispatchGridForCount(), not hand-rolled(n+63)/64. - A new
*.glslwithout its*.metalcounterpart (or vice versa) unless the PR body acknowledges deferred parity and names the follow-up. vec3world-space mixed withvec2iso-space withoutIRMath::pos3DtoPos2DIsoor a named helper.C_Position3Dread for visual placement instead ofC_PositionGlobal3D.- A function that
bindRanges /bindBases a sharedkBufferIndex_*slot (kBufferIndex_PerAxisCell{Compacted,Indirect},kBufferIndex_CompactedVoxelIndices,kBufferIndex_IndirectDispatchParams) restores the original binding before returning (a downstream restore only holds until a pipeline reorder), and the slot's declaration comment inir_render_types.hpplists the new transient consumer. - Resolve-then-bake attribution: the sun-shadow bake reads only
main-canvas-layout depth sources, while the sanctioned resolve
(
c_resolve_world_placed_depth, the per-axis cast) reads a foreign model-frame R32I texture by design. Before flagging a foreign read, identify which// Pass N —block insystem_bake_sun_shadow_map.hppdispatches it: a Pass-1 scatter into the shared scratch is correct; a bake stage reading foreign model-frame distances is the defect (returns the 65535 clear on Metal with no error, invisible to a GL-only smoke).RenderDevice::resolveImageAtomicScratchgoverns a canvas's own unmaterialized distances — neither a substitute nor a breach. Full invariant:engine/render/CLAUDE.md§"GPU resource contracts", the "Metal R32I image atomics land in scratch storage" bullet.
Lighting stage (system_*ao*, system_*shadow*, system_*flood*,
system_*fog*, system_build_light_occlusion_grid*,
c_compute_*shadow*):
- Grid-build code must not include
cull_viewport_state.hppor callvisibleIsoViewport— the light-occlusion grid covers the full pool. - With chunk streaming, the resident set extends past the frustum by
maxCasterHeight × cot(sunAltitude)in the sun-projection direction and carries a 1-chunk guard band in all six directions for AO sampling. - Flood-fill seed gather must not filter by
visibleIsoViewportwithout expanding byC_LightSource::radius_.
GPU lifetime — flag as "Opus recheck recommended" rather than plain
needs-fix: an SSBO/UBO bound on frame N and read on frame N+1 without a
fence or double-buffer swap; async readback whose destination is recycled
before completion; a race between flushStructuralChanges and an async
readback that indexes the flushed entity.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 2d ago First seen · 98 lines · 76 tokens per session scan A 562501c1693a
review-invariant-render is an agent published in the GitHub repository jakildev/IrredenEngine (10 stars, last pushed today), licensed MIT. It adds 76 tokens to every session and 1,243 once invoked, about $0.0003 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-11-07.
review-invariant-render compared with agents from other repositories
| Mod | Type | Stars | Last push | Licence | Scan | Tokens | Works with |
|---|---|---|---|---|---|---|---|
| review-invariant-renderjakildev/IrredenEngine | Agent | 10 | today | MIT | A | 76 | Claude Code |
| build-failure-analystdotnet/skills | Agent | 5.9k | yesterday | MIT | A | 108 | Claude Code |
| swiftui-performance-analyzerCharlesWiltgen/Axiom | Agent | 1.3k | yesterday | MIT | A | 45 | Claude Code |
| review-obsidian-guidelinesuphy/obsidian-reminder | Agent | 662 | 4d ago | MIT | A | 63 | Claude Code |
| predictive-analystsoftspark/ai-toolkit | Agent | 179 | 3d ago | Apache-2.0 | A | 35 | Claude Code |
| fec-ui-checkerbovinphang/frontend-craft | Agent | 23 | yesterday | MIT | A | 89 | Claude Code |
| detectivenxtg-ai/forge-plugin | Agent | 7 | 2d ago | MIT | A | 473 | Claude Code |