Repository navigation
fix(build): freeze shader authoring inputs without transient publication files #52
Description
Verified on branch / awaiting merge
Production implementation: dd5979c613b0fe8ebd9f7026f25001ceee9f8cee. Delivered head: dbae93e8f211d45a69cdffdb6afa3a33a0af0fa5; the subsequent diff contains documentation/acceptance evidence only. Exact-head CI: Engine CI and NuGet dependency graph passed; all six checks on this exact head are successful. All applicable acceptance conditions for this issue are verified; unavailable physical/manual device checks are explicitly scoped, not reported passed.
Owner: Core IO reserved publication name and frozen shader compiler workspace. Implementation commits: 329568ba.
Evidence: complete report, exact-head delivery attachment, portable test-case/raw-measurement/requirement indexes linked by the report. Specific proof: Contracts: ShaderBuildInputsTests inventory/content/empty directory/failure cases; e52: simultaneous independent SDK outputs with deliberately held candidate; Authored inventory/hash unchanged; final complete builds/CI.
Commands: official tests/Invoke-EditorUiAcceptance.ps1 Contracts/Workflows/Visual/Lifecycle/Products with SDK-selected independent outputs; complete source/entry preparation; formal InnoEngine.Build scripts --ide for the three companions; tests/Invoke-WikiChecks.ps1; controlled public performance fixtures where applicable. The report records original command owners, TRX/binlogs, negative tests, failures, skips, input hashes and device limits.
Profiles overlap; do not sum their pass counts into a distinct-test claim. Windows-only sharing fixtures and Unix-only filesystem fixtures are scoped to the executing host. Real native contexts/simulated display metrics and hidden product feature journeys are not a claim of physical display, OS IME or manual Mac testing. No BGCS/vendor/package/generated-binding modification, parallel Core system, test hook, IVT or private reflection was used.
Keep this issue Open. PR #26 includes an individual Fixes #52 and will close it only when the user merges to master. No automatic merge or premature master-resolution claim.
Original defect, ownership and accepted work
The following baseline observations describe the issue as opened. The verification above supersedes intermediate pending checkpoints; original failed/negative logs remain preserved. Acceptance checkboxes are checked only after the exact delivery-head verification completes.
Approved-plan mapping
Parent #27; #39 repository verification and #40 build/input ownership. This is a newly reproduced prerequisite failure during the final frozen candidate at 564e00d, not an assumed BGCS defect.
Confirmed reproduction
Independent SDK outputs were used for simultaneous normal Editor, source-contract and test builds. CompileShaderTask.CompileProduct declares the complete mutable AssetRoot directory as one NativeBuildInput. Its fingerprint reader enumerated Vertex.ishadersource.imeta.staging-d8ed8cbdff8a4ec49f616d82842ad6aa while another authoring metadata transaction owned that temporary file, and failed with a sharing violation. The source-contract build failed before tests. Evidence: candidate-564e00d0/Contracts/*/Contracts/source-build.log under the current acceptance evidence owner.
The current task hashes its mutable source directory before and after ShaderArtifactBuilder.CompileGraphicsProgram. That builder's authoring pipeline and the exact metadata/frozen-input ownership must be reviewed before choosing a fix. Whether other transient files or producer metadata rewrites affect identity remains a risk to verify, not an additional confirmed defect.
Owner and boundary
The shader authoring/compiler owner defines real source and import-setting inputs; Core IO owns atomic publication; neutral build owns immutable input capture, verification, leases, cancellation and publication. Reuse those existing contracts. Platform/backend language parsing stays in its existing owner. Do not add a generic suffix exclusion to all Native inputs, ignore permanent metadata, disable checks, modify BGCS/vendor/generated files or require serialized independent builds as the fix.
Implementation plan
- Trace actual shader-source enumeration, metadata publication and existing source-freezing helpers.
- Declare the complete permanent source/import-setting closure through the existing authoring source protocol; temporary atomic-publication payloads are not source assets.
- Freeze/copy that closure to the operation's owned input tree and compile there. Do not let a consumer rewrite the authored source tree.
- Compute identity and freshness from the same complete input definition; preserve source edits, compiler/profile changes, cancellation and failure rejection.
- Keep output owners and product parameters isolated; update callers/XML/Wiki and related public-boundary tests.
- Reproduce concurrent metadata publication and independent SDK builds; run current source-contract/product gates on the corrected candidate.
Acceptance
- A deliberately live metadata publication temporary never enters shader input identity or compilation.
- Permanent source and import-setting changes invalidate outputs correctly; real edits during freezing/compilation fail without publishing a valid artifact.
- Compilation leaves authored shader source/metadata unchanged.
- Two independent SDK output owners build the same declared shader product concurrently without temporary-file sharing failures.
- Native/general input declarations still include legitimate files and are not weakened by an unrelated ignore rule.
- Failure/cancellation retain atomic publication and cleanup ownership.
- Current affected tests, architecture/Wiki, Editor and exact-head CI pass.
Keep Open until verified on branch and linked with Fixes in PR #26; close on merge only. No production change has been made for this new finding yet.
Activity
FLwolfy commentedon Oct 29, 2026
The first implementation is verified through the ordinary selected SDK build (Release, zero warnings/errors). Seven public-boundary shader-input cases pass, including a live FileShare.None metadata candidate, permanent-metadata changes, added/deleted/mtime-preserved source edits, explicit general Native inputs, failed-import source immutability and cancellation. Core IO's full suite passes 37 cases. The fix reuses Core atomic-name recognition, AssetSourcePolicy, NativeBuildFingerprint and ProcessOwnedDirectory; the task and compiler consume the same captured input identity. Complete concurrent product/source builds and final architecture/Wiki gates are still pending. No BGCS, vendor or generated-binding changes were made.
FLwolfy commentedon Oct 29, 2026
Implementation is committed and pushed as 329568b (Aaron Liao author/committer, no co-author). The final boundary includes permanent empty directories, source/import-setting bytes, an opaque frozen fingerprint and a caller-retained Core process directory registered with existing maintenance. Nine focused public-boundary tests pass; current shader, Task and CLI SDK compilations pass. Full frozen Contracts and Debug/Release product verification are running. Keep Open / Refs until every applicable acceptance item is verified; no BGCS, vendor or generated-source changes.