10 KiB
Campaign AR Stage 2 connected and closeout gate
Date: 2026-08-22
Verdict: PASS for every machine-local Stage 2 row that the available
credentials and hardware can exercise; a distinct-account remote-player row,
external hardware, and final project-owner acceptance remain explicit gates
Scope and evidence boundary
This report records the executable ACE-connected, dense-scene A/B, long-life, external-package, shader, build, and complete-test work that followed the Stage 1 live approval. It applies the measured constraints and budgets already established in the terrain and atmospheric findings; it does not re-derive them or revisit that report's refuted claims.
The measured binaries were clean-source Release products. The retail renderer remained the default and authoritative path. No physics or collision behavior was changed.
Connected scenario matrix
The three-process connected lifecycle gate passed on exact commit 0b6c6557.
Its report is
logs/connected-world-gate-20260822-132443/report.json.
The capped six-stop process ran for 249.114 seconds, the fresh uncapped reconnect
for 67.917 seconds, and the pack-transition process for 51.277 seconds. All
three exited gracefully with no hard failures. Full graphical-process teardown
and the subsequent fresh Vulkan context/device construction passed.
The route proved:
- capped and uncapped operation, portal travel, reconnect, fresh process, and destination publication/retirement;
- outdoor, Facility Hub interior/dungeon, and outdoor-after-dungeon states;
- atomic High select, retail disable, High re-enable, 1024 x 768 resize, clear, overcast, and rain transitions;
- resource-free retail restoration and active enhanced metadata at every named screenshot; and
- terminal render-scene shadow parity with zero mismatches and zero pending deltas.
The connected metadata makes the caster boundary concrete. The transition row
published 6,624 casters: 374 terrain commands, 6,571 outdoor statics, 26
buildings, 10 animated statics, one local player, 14 non-player creatures, one
other live dynamic, and one equipped child. The capped login row reached 9,533
casters, including 922 animated statics; Holtburg after the dungeon reached
9,539. Facility Hub correctly published Outdoor=false, zero directional
strength, and zero casters. Outdoor DAT publication still cannot distinguish a
tree from other outdoor scenery, and create-object metadata still cannot
distinguish a hostile monster from another non-player creature, so the report
keeps the authoritative OutdoorStatics and NonPlayerCreatures labels.
One diagnostic distinction is retained rather than hidden: streaming frames recorded transient render-frame candidate-order differences before the final candidate sets and digests converged. The authoritative render-scene shadow comparison finished 77/77 with zero mismatch in the transition process; no pack or retail-output divergence remained at the terminal checkpoints.
Dense turning A/B and frame pacing
Matched dense-Arwic runs used the same route, commit 1f75ce05, resolution,
camera turn, server, character, entity population (15,522), and warmed scene:
- Atmospheric Medium:
logs/connected-dense-town-20260822-133441.report.json - retail/off:
logs/connected-dense-town-20260822-133727.report.json
| Phase | Retail CPU p50 / p95 / p99 | Medium CPU p50 / p95 / p99 | Retail GPU p50 / p95 | Medium GPU p50 / p95 |
|---|---|---|---|---|
| Six-second turn | 27.8 / 32.9 / 36.7 ms | 28.6 / 32.2 / 40.2 ms | 0.6 / 1.2 ms | 1.5 / 1.9 ms |
| Stationary | 28.6 / 30.2 / 31.1 ms | 29.1 / 30.9 / 32.6 ms | 0.9 / 0.9 ms | 1.7 / 1.8 ms |
The user's turning hitch reproduces on the retail path: Medium did not worsen turn CPU p95 (32.2 versus 32.9 ms). It adds the expected GPU work, about 0.7–0.9 ms at p95/p50 in this run. The Atmospheric screenshot's pack-owned window reports incremental CPU p50/p95/p99 of 0.209/0.248/0.302 ms, inclusive GPU p50/p95/p99 of 1.374/1.818/1.869 ms, 14,890 casters, three cascades, 61,655,840 resident bytes, and 44,236,800 transient bytes. Medium therefore stays inside its declared CPU, GPU, and 128 MiB resident budgets.
Process working/private memory was also recorded, as required: the stationary Medium process was 1,669.9/2,084.4 MiB versus retail's 1,354.8/1,676.8 MiB. Those process totals include driver and shared host allocations and are not substituted for the exact pack-owned GPU ledger. Retirement and terminal convergence are covered by the long route and deterministic lifecycle gates.
Long lifetime and package lifecycle
The nine-stop Medium route passed on exact commit 1f75ce05:
logs/connected-r6-soak-20260822-134004.report.json.
It ran for 516.064 seconds through Caul, Sawato, Rynthid, Aerlinthe, Sawato
revisit, Holtburg, Caul return, Sawato plateau, and Caul plateau. Every
materialization, movement/jump/combat exercise, return/convergence check, and
graceful close passed. The warnings are expected world/DAT population noise;
there are no renderer, pack-budget, or lifecycle failures.
The connected graphical external-package gate passed all six fresh processes
on exact commit f92479ac. Its machine-readable report is
artifacts/atmospheric-rendering/connected-package-lifecycle-20260822-135333/report.json.
| Scenario | Plugin outcome | Renderer outcome | Persisted selection |
|---|---|---|---|
| Install/select v1 Low | loaded | external v1 active | external v1 |
| Replace by v2 with stale v1 selection | loaded | safe retail fallback with exact version diagnostic | retail |
| Explicitly select v2 High | loaded | external v2 active | external v2 |
| Remove package | failed-not-found | safe retail fallback | retail |
| Inject failure after registration | failed and transaction rolled back | safe retail fallback | retail |
| Correct package and reselect | loaded | external v2 active | external v2 |
Every process connected, entered world, captured its render-pack metadata, disconnected, and exited with code zero. Failure rows created no half-active pack and recovery required an explicit corrected selection.
Remote-player gate availability
The connected remote-player gate was exercised on exact commit a861510a:
artifacts/atmospheric-rendering/connected-remote-player-20260822-140355/report.json.
The observer entered the world and moved at the target location. The concurrent
primary client then timed out waiting for CharacterList: ACE did not permit a
second simultaneous character from the same account. Both clients were closed
cleanly, and the failed row is not represented as renderer evidence.
The gate now reads separate observer credentials from
ACDREAM_TEST_OBSERVER_USER/ACDREAM_TEST_OBSERVER_PASS, rejects same-account
configuration before launch, keeps credentials out of its report, and fails
fast on session failure. Character indexes are independently selectable because
index zero on two accounts still names distinct characters; the entered-world
identity assertion is authoritative. The nonzero RemotePlayers caster row and
visible moving remote-player shadow therefore require only access to a second
account; no missing renderer or test-harness implementation remains.
Final automated gate
On clean exact code commit fa3e7978:
- managed shader regeneration compiled 24/24 Vulkan pairs and produced no tracked SPIR-V difference;
- forced locked restore passed;
- the complete Release solution built with 0 warnings and 0 errors; and
- the repository-owned fresh-process gate passed 15,179/15,179 tests with zero skips or failures across 14 assemblies. App contributed 5,951/5,951.
The complete logs, TRX files, environment inventory, hashes, and aggregate
summary are under
artifacts/atmospheric-rendering/stage2-closeout-release-gate-fa3e7978/.
An earlier rerun exposed that the dense-shadow allocation assertion had only a
single warmup frame and could include tiered-JIT work under full-suite parallel
load. Commit d78ce100 changes that test fixture only: it performs a complete
64-frame dense warm window before measurement. The focused test passed 12
fresh-process repeats, the complete App assembly passed, and the final gate
above is the authority; production renderer behavior was not changed by this
hardening.
Remaining external gates
Campaign AR is not declared shipped by this report. Three evidence classes are not available to this machine-local run:
- A second connected client using a distinct account must produce a nonzero
authoritative
RemotePlayerscaster row and a visible moving remote-player shadow. The connected gate is implemented; the available single account was rejected by ACE for concurrent play as recorded above. - Supported physical GPU classes other than the installed Radeon RX 9070 XT and integrated AMD adapter must repeat the required pack-off/Low/Medium/ High/Auto resolution and pacing rows. The integrated adapter currently proves safe Auto-to-retail fallback, not active Low or the complete matrix.
- The project owner must later perform and explicitly accept the final pack-off/pack-on visual matrix, including moving sun and moon shadows, foliage cutouts, temporal shimmer/cascade seams, indoor gating, rays and sun-only volumetrics, and retail restoration.
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.