Commit graph

4540 commits

Author SHA1 Message Date
Erik
3a9d5b01a8 docs(overhaul): accept exterior repair and diagnose portal reveal cycle #474 2026-09-05 09:05:58 +02:00
Erik
41ca024515 docs(overhaul): prepare ordered geometry witness after owner gate 2026-09-05 08:50:23 +02:00
Erik
aae5758971 docs(overhaul): close C1c reviews and record owner exterior re-gate 2026-09-05 08:41:29 +02:00
Erik
b8d80e507f docs(overhaul): record provisional exterior coverage re-gate for #473 2026-09-05 08:24:37 +02:00
Erik
bf23673f3d fix(rendering): preserve opaque building coverage under detail MSAA (#473) 2026-09-05 08:07:51 +02:00
Erik
d35ed1aece docs(overhaul): contract #473 opaque detail coverage repair 2026-09-05 07:49:16 +02:00
Erik
ec8edb1573 docs(overhaul): record owner gate failure #473 and bound exterior diagnosis 2026-09-05 07:30:26 +02:00
Erik
02219318a0 docs(overhaul): prove replay projection cause and contract permanent correction 2026-09-05 07:13:43 +02:00
Erik
3f5ca9ff4f docs(overhaul): capture retail projection mode and contract replay diagnosis 2026-09-05 07:00:53 +02:00
Erik
7c7ccc6252 docs(overhaul): record s5 closeout retail capture stop 2026-09-05 06:03:12 +02:00
Erik
4237a6b2b3 docs(overhaul): contract s5 closeout witness harness 2026-09-05 05:46:34 +02:00
Erik
aa51cb88b0 docs(overhaul): contract s5 closeout offline gate 2026-09-05 05:27:50 +02:00
Erik
29c05e48c8 docs(overhaul): close s5 c5 2026-09-05 05:26:03 +02:00
Erik
1b7ee4e581 test(rendering): include static walk owners in guard
Scan both instance and static declared fields so a second static WalkPView or RetailFrameWalk owner cannot evade the final-graph architecture proof. Preserve the exact owner/count assertions.

Mutation evidence (both restored):

1. Added static WalkPView field to RetailPViewRenderer -> WalkFrameOwners_AreUnique first failed Assert.All: expected RetailFrameWalk owner, actual RetailPViewRenderer (3 fields).

2. Added static RetailFrameWalk field to RetailFrameWalk -> WalkFrameOwners_AreUnique first failed Assert.Single with _frameWalk and MutatedStaticRetailFrameWalk.
2026-09-05 05:18:17 +02:00
Erik
e625dc4e6b docs(overhaul): contract c5 owner guard fix 2026-09-05 05:18:17 +02:00
Erik
bf53e2ad6e refactor(rendering): delete superseded visibility probes
Delete the callerless portal-BFS research graph and spent renderer probe families while retaining the production RetailFrameWalk path, terrain diagnostics, membership invariant, and walk transcript.

Mutation evidence (all restored):

1. Restored PortalVisibilityBuilder type -> AppAssembly_ContainsNoSupersededPortalGraphTypes first failed Assert.Empty with AcDream.App.Rendering.PortalVisibilityBuilder.

2. Restored ACDREAM_PROBE_FACILITY_STAIRS -> ProductionSource_ContainsNoDeletedRendererProbe_AndRetainsWalkTranscriptProof first failed Assert.Empty on RenderingDiagnostics.cs.

3. Added a second RetailFrameWalk field -> WalkFrameOwners_AreUnique first failed Assert.Single with _frameWalk and _mutatedSecondFrameWalk.

4. Added OrderBy to OrderedStream -> OrderedWalkStream_HasNoCrossStreamReorder first failed Assert.DoesNotContain on OrderBy(.

5. Added IDatReaderWriter parameter -> FrameTimeWalkOwners_HaveNoRawDatDependency first failed Assert.Empty on RetailFrameWalk.MutatedRawDatParameter.
2026-09-05 05:18:17 +02:00
Erik
b77989c323 docs(overhaul): contract s5 c5 cleanup 2026-09-05 04:16:26 +02:00
Erik
b372467cf5 docs(overhaul): close issue 469 2026-09-05 04:08:41 +02:00
Erik
62efc72cb3 test(overhaul): add issue 469 lighting transition route 2026-09-05 04:04:32 +02:00
Erik
94ddde69af Fix atmospheric receiver light direction
Keep both atmospheric vertex receivers on retail's exact authored, unnormalized uLights direction in every shadow-gate state while preserving the selected celestial direction for fragment shadow projection and volumetrics. Regenerate the affected SPIR-V and amend IA-24.

Proof adds committed-SPIR-V dataflow checks, parent plain/pipeline source pins, and a real Vulkan mesh+terrain pixel witness owned by Lane=Vulkan.

Mutation first failures (all restored):

1. Restoring the mesh shadow/celestial branch failed CommittedProductionAtmosphericReceivers_KeepAuthoredLightAcrossShadowGate at line 27: expected Pixel 128/128/128/255, actual 0/0/0/255.

2. Restoring the terrain shadow/celestial branch failed the same witness at line 28: expected Pixel 128/128/128/255, actual 0/0/0/255.

3. Normalizing the authored mesh direction failed AssertAuthoredHalfIntensity at line 277: expected 126..129, actual 255.

4. Removing atmospheric_volumetric.frag's celestial xyz use failed ProductionShadowAndVolumetricModules_StillNormalizeTheCelestialProjectionDirection at line 61: Assert.Single found no matching member-5 access.

5. Restoring IA-24's old celestial-base-light claim failed BuiltInAndDeclaredShadowGraphsUseTheSameTypedPriorVisibilitySelector at line 1482: the authored unnormalized uLights sole-base-light assertion was absent.
2026-09-05 04:03:17 +02:00
Erik
8098875240 docs(overhaul): contract issue 469 lighting ownership 2026-09-05 03:29:21 +02:00
Erik
2f1e625fea docs(overhaul): close issue 470 2026-09-05 03:23:55 +02:00
Erik
19b44e5e3a test(overhaul): add issue 470 pinned A-B route 2026-09-05 03:20:44 +02:00
Erik
b333edb4f2 test(vulkan): publish readback before host mapping
Record the exact sync2 COPY/TRANSFER_WRITE to HOST/HOST_READ buffer dependency over the copied readback range before ending and submitting the existing command buffer. Preserve coherent mapping and queue-idle completion.

Add a portable guard that inspects the descriptor factory used by the live ReadBack path and pins copy, descriptor, barrier, end, and submit order without initializing Vulkan.

Mutations performed and restored:

1. Removed the live post-copy barrier: the guard first failed with Expected copy -> descriptor -> barrier -> end -> submit, got 4260, -1, -1, -1, 4386, 4900.

2. Changed source access to TransferReadBit: the guard first failed Assert.Equal, expected Access2TransferWriteBit, actual Access2TransferReadBit.

3. Moved the correct barrier before the copy: the guard first failed with Expected copy -> descriptor -> barrier -> end -> submit, got 4657, 4260, 4525, 4594, 4783, 5297.
2026-09-05 03:19:55 +02:00
Erik
7506e5f14e test(vulkan): isolate the hardware witness lane
Tag the production offscreen witness as Lane=Vulkan, exclude capability-owned tests from the portable Release filter, and give lavapipe an explicit trait-only invocation after the portable Vulkan contracts.

Document the lane and pin witness, portable-filter, and workflow ownership without initializing Vulkan.

Mutations performed and restored:

1. Removed the witness trait: VulkanLaneOwnershipContractTests first failed Assert.Matches because the Lane=Vulkan/Fact/method pattern was absent.

2. Removed Lane!=Vulkan from the default filter: the contract first failed Assert.Contains, not found Lane!=Vulkan.

3. Weakened the dedicated invocation to Lane!=Vulkan: the contract first failed Assert.Contains, not found --filter Lane=Vulkan in the hardware step.

4. Narrowed the dedicated invocation with FullyQualifiedName: the contract first failed Assert.DoesNotContain because FullyQualifiedName was present at position 231.
2026-09-05 03:19:55 +02:00
Erik
15a796c3a1 fix(rendering): split ordinary transform and sidecar indices
Use the shared absolute base-instance domain only for mesh transforms and subtract the published transform prefix for every live ordinary sidecar. Regenerate the production module and pin its hash.

Add real ordered-recording, committed-SPIR-V structure, and headless production-Vulkan pixel witnesses at nonzero prefixes, including receiver active/inactive invariance.

Mutations performed and restored:

1. Transform lookup -> local instanceIndex: MeshModernSharedIndexSpirvTests first failed Assert.Contains, item 368 not found in [27,377,27] (and the pixel witness found 0 dark pixels).

2. Selection sidecar -> absolute transformIndex: MeshModernSharedIndexOffscreenTests first failed: Expected a dark local-sidecar instance, found 0 matching pixels.

3. Published TextureIndexB -> 0: SharedTransformPrefix recording first failed Assert.Equal, expected 3, actual 0.

4. Receiver choice inverted: inactive first failed because expected mesh_modern was absent and only mesh_atmospheric was recorded; active failed conversely.

5. Offscreen shader directory -> copied test output: witness first failed the exact-path Assert.Equal (expected repo src/AcDream.App/Rendering/Shaders/spv, actual tests/AcDream.App.Tests/bin/Release/net10.0/Rendering/Shaders/spv).
2026-09-05 03:19:55 +02:00
Erik
56837f547f docs(overhaul): contract issue 470 readback barrier 2026-09-05 03:07:47 +02:00
Erik
011ab1c182 docs(overhaul): isolate issue 470 Vulkan proof
Record retail/behavior review pass 1/10: renderer behavior is correct, but the physical-device witness cannot live in the portable Release lane. Bind fix round 1 to an explicit Vulkan lane owned by the existing lavapipe job and current-machine proof.
2026-09-05 02:50:35 +02:00
Erik
67a8bc21f6 docs(overhaul): contract ordered sidecar index repair
Bind S5 packet section 27 for issue 470. The contract preserves the shared absolute transform index while making every live per-submission sidecar local, requires a nonzero-prefix production recording and offscreen pixel witness, and keeps receiver selection plus issue 469 out of scope.
2026-09-05 02:15:10 +02:00
Erik
d43f6809b4 docs(overhaul): close S5 c4 and narrow ordered sidecars 2026-09-05 02:12:19 +02:00
Erik
03a108ffa5 fix(rendering): restore classic transparent batching
Restore the pre-c4 classic immediate path for transparent commands without active building detail: always use the shared alpha pipeline and coalesce adjacent same-cull commands across TranslucencyKind boundaries. Keep detail-active material selection, detail arm/reset, and inner cull-run splitting unchanged.

Required mutations and first discriminating failures (all restored):

1. Non-detail arm restored to PipelineForBlend: ClassicImmediate_NonDetailUsesAlphaBlendWhenDetailIsDisabledOrUnavailable first reported InvAlpha/detail-disabled at line 1258; expected wb-mesh-alpha-1x, actual wb-mesh-inverse-1x.

2. Translucency equality split restored with the alpha arm intact: ClassicImmediate_NonDetailCrossBlendRunCoalescesIntoOnePhysicalDraw failed at line 1279; Assert.Single saw 3 physical MDI records.

3. Detail-active command forced onto AlphaBlend: ClassicImmediate_DetailActiveUsesExactMaterialPipelineAndArm failed at line 1303; expected wb-mesh-raw-additive-depth-write-1x, actual wb-mesh-alpha-1x.
2026-09-05 02:03:13 +02:00
Erik
d5cfd1c916 Fix alpha-tested blend depth writes
Add paired depth-write variants for all five blended SetSurface families in ordinary and atmospheric Wb pipeline sets at both sample counts and in EnvCell. Select them only from the carried AlphaTestEnabled state, retain pure-Clip and Translucent override behavior, and cover disposal plus partial-construction rollback.

Correct the three stale depth oracles and the AP register count/temporary AP-232 overclaim.

Required restored mutations and first discriminating failures:

1. Wb StraightAlpha+Clip collapsed to depth-off: WalkStaticStreamPopulatorTests.ImmediateBuildingDetail_UsesExactResolvedSetSurfaceState failed at line 1278; expected wb-mesh-alpha-depth-write-1x, binds were wb-mesh-alpha-1x.

2. EnvCell raw Additive+Clip collapsed to depth-off: EnvCellAlphaDrawSourceTests.DetailOn_EveryEnvCellFamilyDrawsOnceInPlaceWithAuthoredOpacity failed at line 132; expected envcell-raw-additive-depth-write, actual envcell-raw-additive.

3. EnvCell non-Clip raw Additive forced depth-on: the same production transcript failed at line 132; first row expected envcell-raw-additive, actual envcell-raw-additive-depth-write.

4. Late Translucent|Clip override forced alpha-test/depth-on: the same production transcript failed at line 132; expected envcell-alpha, actual envcell-alpha-depth-write.
2026-09-05 02:03:13 +02:00
Erik
15ed57a1e7 fix(rendering): carry retail SetSurface state to detail draws
Resolve exact SetSurface blend, alpha-test, and fog state once during extraction and preserve it through recipe-10 prepared payloads, Wb/EnvCell command data, Vulkan pipelines, push constants, and both ordinary/atmospheric one-pass shaders. Preserve AP-240 Wb pure-Clip immediate opaque/A2C while EnvCell uses retail premultiplied Clip; detail-off routing remains unchanged. Correct AP-232 and register the remaining detail-off state divergence.

Mutation first failures (all restored):
- raw Add->SRCALPHA/ONE: WalkStaticStreamPopulatorTests.ImmediateBuildingDetail_UsesExactResolvedSetSurfaceState line 1278, expected wb-mesh-raw-additive-1x.
- inverse-add->alpha-add: same test line 1278, expected wb-mesh-inverse-additive-1x.
- remove Env inverse: EnvCellAlphaDrawSourceTests.DetailOn_EveryEnvCellFamilyDrawsOnceInPlaceWithAuthoredOpacity line 132, expected envcell-inverse.
- raw IsAdditive precedence: same test line 132, Translucent|Clip|Additive expected envcell-alpha.
- Wb paletted ParamB=0: OrderPreservingSubmitterTests line 333, expected 0.392156869.
- Wb DDS ParamB=0.05: same test line 333, expected 0.784313738.
- disable Alpha+Clip test: WalkStaticStreamPopulatorTests line 1286, expected 0.784313738.
- always fog raw Add: same test line 1287, expected no-fog true.
- disable fog non-Add: same test line 1287, expected no-fog false.
- X=a*qA: RetailDetailTextureContractTests line 261, shared squared-alpha substring absent.
- X includes base alpha: same test line 262, forbidden baseTexel.a present.
- CLIP uses 0.05: EnvCellAlphaDrawSourceTests.ClipShaders_UseGreaterEqualForThePerRangeReference line 367.
- second detail draw: EnvCell detail-on line 131, collection contained 2 draws.
- straight-alpha substitute: Wb immediate line 1278, expected wb-mesh-additive-1x.
- omit ordered detail arm: OrderPreservingSubmitterTests line 318, expected (77,3.5), got (0,0).
- omit atmospheric combine: RetailDetailTextureContractTests line 260, shared include absent.
- drop serialized opacity: ObjectMeshDataSerializerTests line 292, expected opacity bits, got 1.0.
- stale detail arm: atmospheric adjacency line 402, expected slot 0, got 77.
- per-frame surface map: EnvCell warmed allocation line 285, expected 0 B, got 204800 B.
2026-09-05 02:03:13 +02:00
Erik
75664805f8 feat(rendering): port retail one-pass detail material
Replace the building and EnvCell detail replay with retail's exact single-pass stage result, including authored surface opacity, squared detail alpha, final-alpha clipping, and the original subset pipeline/order. Arm the ordered walk command in place to close #471, delete the replay pipelines/shaders, and advance prepared content to recipe 9.

Mutation witnesses (each restored before commit):
- X=a*qA: RetailDetailTextureContractTests.BothShaderFamiliesUseTheSharedOnePassSourceAndDebugPrecedesDetailSample line 174, missing materialAlpha * detail.a * detail.a.
- X*=base alpha: same test line 175, forbidden baseTexel.a found.
- CLIP against base alpha: EnvCellAlphaDrawSourceTests.ClipShaders_UseGreaterEqualForThePerRangeReference line 260, final-X conditional missing.
- second detail draw: EnvCellAlphaDrawSourceTests.DetailOn_EveryEnvCellFamilyDrawsOnceInPlaceWithAuthoredOpacity line 105, Assert.Single saw 2 MDI calls.
- straight-alpha substitution: WalkStaticStreamPopulatorTests.ImmediateBuildingDetail_RetainsOriginalFramebufferFamily line 1244, Additive first failed (only wb-mesh-alpha-1x recorded; InvAlpha also failed).
- omit ordered arm: OrderPreservingSubmitterTests.PrepareThenDraw_OrdinaryBuildingClipBuildingOrdinary_ArmsOnePassInPlace line 305, expected (77,3.5), got (0,0).
- omit atmospheric combine: RetailDetailTextureContractTests.BothShaderFamiliesUseTheSharedOnePassSourceAndDebugPrecedesDetailSample line 173, atmospheric shared include missing.
- drop serialized opacity: ObjectMeshDataSerializerTests.SurfaceOpacity_RoundTripsBitExactlyAndDeterministically line 288, first reported 0.5 bits 1056964608 vs 1065353216.
- stale detail arm: ordered adjacency test line 307, expected following ordinary (0,0), got (77,3.5).
- per-frame surface map: EnvCellAlphaDrawSourceTests.ProductionWholeLeaf_WarmedScanSubmitRhiAndFilteredReplayDoNotAllocate line 178, expected 0 B, got 147456 B.

Verification before commit: shader compiler 23/23; focused App 213/213; Content 75/75; Core Wb 10/10; launcher migration 6/6; Release solution build 0 warnings / 0 errors; git diff --check clean.
2026-09-05 02:03:13 +02:00
Erik
13dbb79eeb docs(overhaul): contract S5 c4 detail-off fix 2026-09-05 01:47:17 +02:00
Erik
c47a43eb72 docs(overhaul): contract S5 c4 depth-state fix 2026-09-05 01:12:33 +02:00
Erik
ee8d585651 docs(overhaul): preserve AP-240 in c4 fix 2026-09-05 00:25:45 +02:00
Erik
2281fdb3d6 docs(overhaul): contract S5 c4 material-state fix 2026-09-05 00:08:49 +02:00
Erik
9f410d8b75 docs(overhaul): contract exact S5 c4 detail material 2026-09-04 23:02:33 +02:00
Erik
678bffaa85 docs(overhaul): close S5 c3 and file ordered pack defect 2026-09-04 22:45:47 +02:00
Erik
c673f767e9 feat(rendering): port retail building degrade walk
Add exact retail building degrade selection, shared FPS/degrade ownership, complete-body gating, selected-shell submission, ordinary ladder mesh residency, frame-scoped retry rearm, Config controls, installed-DAT census, and lifecycle/allocation proofs.

Reviews: OpenAI retail pass 3 PASS; OpenAI production pass 5 PASS. Gates: Release 0W/0E; focused 285/285; hermetic 16811/16811; InstalledDat 469 pass, 10 documented fail, 1 documented skip; both manifests 30/30.
2026-09-04 22:29:18 +02:00
Erik
d0f45f6a99 docs(overhaul): contract S5 c3 fix round 3 2026-09-04 21:56:08 +02:00
Erik
ccd88eabcc docs(overhaul): contract S5 c3 fix round 2 2026-09-04 21:33:29 +02:00
Erik
5cc437bf98 docs(overhaul): refresh S5 c3 packet status 2026-09-04 21:15:59 +02:00
Erik
e18e23a5d3 docs(overhaul): allow ten review passes 2026-09-04 21:15:43 +02:00
Erik
def7fd2119 docs(overhaul): contract S5 c3 fix round 1 2026-09-04 21:13:33 +02:00
Erik
e2f5385037 docs(overhaul): switch remaining agents to OpenAI 2026-09-04 19:57:24 +02:00
Erik
185590e016 docs(overhaul): contract S5 c3 building degrades 2026-09-04 19:08:39 +02:00
Erik
c3ac20b2ad docs(overhaul): close S5 c2 landing gate 2026-09-04 18:44:50 +02:00
Erik
ef819eedf5 docs(overhaul): record S5 c2 clean evidence
Replace the stale pending-evidence result with the exact clean-commit hermetic, broader InstalledDat, and canonical comparison identities, filters, counts, and verified manifests. Preserve the broader artifact as valid noncanonical evidence and record both zero-difference nonpassing comparisons against accepted S5-c1.

Record retail review PASS and production review FAIL solely on the corrected evidence prose, with code, architecture, GPU-flight, lifecycle, allocation, and scope otherwise passing. Mark the documentation-only fix round implemented pending narrow re-review without advancing S5-c2 to landed.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-09-04 18:20:31 +02:00