Dated 'VM4 correction' notes, not silent rewrites: - AR plan: NoOpRenderPackProductionIntegrationTests is a 2x2 recording- device fixture, not a production pin; the real invariance is VM0's. Both '14,928/14,928 zero skips' totals qualified: hermetic lane filter. - Stage-2 connected report: the dense-town CPU figures ran under the automation observer (9.8 MB/frame alloc) and say nothing about the owner's hitch on the product; clean numbers are VM0's. - Track A report + findings doc: TerrainUtils.GetNormal only orients scenery; the render normals were already smooth; A2 replaced central differences with retail's incident-face average (the reviewer's own premise error). - Findings doc: 'retail brightens' is the fallback path only; real hardware runs the single-pass lerp (VM2). LandscapeDetailTextures = 0 answers the landscape open question. VM0 production table added as the baseline. - Completion audit retail-path row and the review's F1/F2/F3/F5 headers annotated with their closures. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
8.8 KiB
Campaign AR completion audit
Date: 2026-08-22
Branch: codex/atmospheric-rendering-campaign
Status: all implementation and machine-local gates complete; not shipped
Audit boundary
This is the requirement-by-requirement closeout audit for Campaign AR. It uses the measured evidence and constraints in the terrain and atmospheric findings without re-deriving them or revisiting that report's three refuted claims. The detailed connected results remain in the Stage 2 report.
The last remote fetch reported origin/main at 6c79d35c; merge 99cf26e0
is in this branch and git rev-list --left-right --count HEAD...origin/main
reported zero missing main commits. Campaign commits remain local and have not
been pushed.
Requirement ledger
| Requirement | Verdict | Authoritative evidence |
|---|---|---|
| Stage 1 project-owner stop | Pass | The owner's 2026-08-22 “Looks good!” acceptance, after exposure 1.0 → 0.80, is recorded in the live-gate report. |
| Retail-faithful path stays default and authoritative | Pass (evidence strengthened by VM0, 2026-08-22: exact pack-off pixel identity vs 6c79d35c on static content and a clean production perf A/B — see 2026-08-22-vm0-default-path-invariance.md; the no-op oracle named here is a 2x2 recording-device fixture) |
The checked-in production no-op oracle, six physical pack-off rows, connected disable/restore transitions, and package-failure rows all pass. A branch diff contains only newly named atmospheric/detail shader sources plus the generated shader manifest; no pre-campaign retail shader source is modified. |
| Physics and collision unchanged | Pass | git diff origin/main...HEAD -- src/AcDream.Runtime src/AcDream.App/Physics src/AcDream.Core/Physics is empty. The connected routes use the existing gameplay simulation without changing it. |
| Tier 1 bloom, filmic tone mapping, colour grade, vignette, neutral settings, resize, and retained-UI/private-view isolation | Pass for implementation and available automation/physical rows | Slice 1 tests and the RX 9070 XT 30-row matrix pass; final project-owner image judgment remains below. |
| Tier 1 authored-sun rays | Pass for implementation and connected state transitions | Authored sun/day-group/weather, occlusion-mask, behind-camera/off gates, and pre-tonemap composition are automated; connected time/weather transitions pass. Final physical-display dawn/noon/dusk, occlusion, and edge-flicker judgment remains below. |
| Tier 2 moving authored sun/moon shadows are the headline | Pass for implementation, Stage 1 owner gate, and available connected rows | The selected-source contract, stabilized cascades, opaque/cutout casters, animated transforms, receivers, outdoor/indoor gating, and weather energy pass. Connected metadata proves terrain, outdoor statics, buildings, animated statics, local player, non-player creatures, other dynamics, and equipped children. The distinct-account remote-player row remains below. |
| Headline caster membership without fabricated identity | Pass | Diagnostics report source-owned OutdoorStatics and NonPlayerCreatures rather than guessing tree or hostile-monster identity. The transition capture published 6,624 casters and the capped route reached 9,533. |
| Low/Medium/High/Auto scaling and weak-hardware fail-safe | Pass on available hardware | The exact RX 9070 XT 30-row matrix passes. The integrated AMD Auto run retires atomically to retail with a visible reason and a 0.00365% paired sky-masked difference. Other physical adapters remain below. |
| Tier 2+ sun-only volumetric shafts | Pass for implementation and available performance/lifecycle rows | Sun-only selection, weather/indoor gates, independent quality, depth reuse, neutral A/B, and the 2,048-sample reference-GPU cost row pass. Final owner occluder/weather judgment remains below. |
| Connected select/disable/re-enable, resize, weather, interior/dungeon, portal, reconnect, and fresh renderer/device recreation | Pass | logs/connected-world-gate-20260822-132443/report.json: three clean graphical processes, graceful exits, 77/77 terminal render-scene shadow parity, zero mismatch, and zero pending deltas. |
| Dense turning/frame-pacing and desktop-performance investigation | Pass | Matched Medium/retail dense-Arwic reports show the reported turning hitch on both paths. Medium does not worsen CPU p95 (32.2 vs 32.9 ms) and adds about 0.7–0.9 ms GPU work. Pack-owned CPU/GPU/memory measurements stay within Medium budgets. |
| Long-run resource convergence | Pass | logs/connected-r6-soak-20260822-134004.report.json completes the 516.064-second nine-stop route with movement/jump/combat, revisits, convergence, and graceful shutdown. Deterministic 12-cycle and fresh-device fixtures also pass. |
| External pack install/select/update/remove/fail/recover | Pass | artifacts/atmospheric-rendering/connected-package-lifecycle-20260822-135333/report.json: all six fresh connected graphical processes pass; failures create no half-active pack and corrected recovery is explicit. |
| Public pack API and SDK | Pass | BCL-only v1 contracts, manifest schema, semantic bindings, compatibility guide, validator, built-in pack, no-op sample, and two Tier-2 samples are present. External projects reference only AcDream.Plugin.Abstractions, not App or Vulkan. |
| Shaders and generated artifacts | Pass | Managed regeneration compiles 24/24 Vulkan pairs. The final release gate reports no tracked SPIR-V difference after regeneration. |
| Locked restore, Release build, and complete hermetic tests | Pass | artifacts/atmospheric-rendering/stage2-closeout-release-gate-fa3e7978/release-gate-summary.json: clean exact code commit fa3e7978, locked restore pass, zero-warning/error Release build, and 15,179/15,179 tests passing with zero skips/failures across 14 assemblies. |
| Campaign documentation and divergence registration | Pass | Campaign plan, SDK docs, Stage 1/2 reports, roadmap pointer, release-gate graph update, IA-24, and this audit are present. Phase identifier remains Campaign AR. |
| M4 priority is not displaced | Pass | The roadmap and campaign plan retain M4 as the active gameplay milestone and describe Campaign AR as owner-authorized parallel work. No roadmap milestone is reassigned. |
Exact remaining external gates
No further renderer, SDK, tool, test, or machine-local documentation work is known from this audit. Campaign AR remains deliberately not shipped until all three evidence classes below pass:
- Distinct-account remote player. Run
tools/run-connected-render-pack-remote-player-gate.ps1with the primaryACDREAM_TEST_USER/ACDREAM_TEST_PASSand distinct observerACDREAM_TEST_OBSERVER_USER/ACDREAM_TEST_OBSERVER_PASSenvironment variables. Require a nonzero authoritativeRemotePlayerscaster count plus a visible moving remote-player shadow. The same-account attempt is recorded inartifacts/atmospheric-rendering/connected-remote-player-20260822-140355/report.json: the observer entered and moved, then ACE rejected the concurrent primary session. The corrected gate does not serialize credentials. - Unavailable physical adapters. On every other supported physical Vulkan adapter, run the source-identical matrix for pack-off, Low, Medium, High, and Auto at 1920×1080, 2560×1440, and 3840×2160, each capped and uncapped. That is 30 rows per adapter. The installed RX 9070 XT already passes all 30; the installed integrated AMD row proves Auto-to-retail fallback only, so active Low and the other 29 rows on that adapter also remain external.
- Final project-owner visual acceptance. Compare pack off and pack on for Tier-1 neutral output and private views/UI; sun rays at dawn/noon/dusk, behind-camera and occluded states; foliage cutouts; moving local, remote, creature, tree, and building shadows under sun and moon; indoor gating; source transitions; temporal shimmer/pixelation and cascade/bias artifacts; sun-only volumetric weather/occluder behavior; and exact pack-off restoration. The owner must explicitly accept both sides before the plan or roadmap says shipped.
These are evidence gates, not open implementation slices. Any failure reopens only the behavior it contradicts; passing them closes the campaign.