docs(render): audit Campaign AR completion evidence

This commit is contained in:
Erik 2026-08-22 14:18:21 +02:00
parent d84edf0ceb
commit 772526d0cd
4 changed files with 92 additions and 14 deletions

View file

@ -0,0 +1,73 @@
# 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](../plans/2026-08-21-atmospheric-rendering.md). It uses the
measured evidence and constraints in the
[terrain and atmospheric findings](2026-08-21-terrain-and-atmospheric-rendering-findings.md)
without re-deriving them or revisiting that report's three refuted claims. The
detailed connected results remain in the
[Stage 2 report](2026-08-22-atmospheric-stage2-connected-gate.md).
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 11 branch commits and zero missing main commits before this audit's
documentation-only closeout commit.
## 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](2026-08-22-atmospheric-stage1-live-gate.md). |
| Retail-faithful path stays default and authoritative | Pass | 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`](../../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.70.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`](../../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`](../../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-d78ce100/release-gate-summary.json`](../../artifacts/atmospheric-rendering/stage2-closeout-release-gate-d78ce100/release-gate-summary.json): clean exact code commit `d78ce100`, 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:
1. **Distinct-account remote player.** Run
`tools/run-connected-render-pack-remote-player-gate.ps1` with separate
primary and observer ACE credentials. Require a nonzero authoritative
`RemotePlayers` caster count plus a visible moving remote-player shadow.
The same-account attempt is recorded in
[`artifacts/atmospheric-rendering/connected-remote-player-20260822-140355/report.json`](../../artifacts/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.
2. **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.
3. **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.

View file

@ -172,3 +172,6 @@ not available to this machine-local run:
These are evidence gates, not authorization for more renderer features. The
current code, SDK, connected lifecycle, package lifecycle, long lifetime, and
machine-local automation are complete.
The campaign-wide requirement ledger and exact external-row definition are in
the [Campaign AR completion audit](2026-08-22-atmospheric-campaign-completion-audit.md).