Repository navigation
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: Compiler-tool graph and SDK-owned output identity. Implementation commits: 6a656b67, 8dcceb94, 870a0af0.
Evidence: complete report, exact-head delivery attachment, portable test-case/raw-measurement/requirement indexes linked by the report. Specific proof: Contracts: CompilerToolBuildScope/GeneratorRestoreScope/owned Task inputs; Repeated official source, Editor and isolated output builds; Final Windows/ARM64 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 #40 and will close it only when the user merges to master. No automatic merge or premature master-resolution claim.
Provenance clarification
The retained binlog proves distinct Csc producer instances targeting the same output under different evaluated IDE/build properties, plus a neutral Foundation bootstrap sharing its caller's output owner. The correction separates/normalizes the responsible SDK owners; real concurrent public SDK output tests, repeated full graphs and exact-head Windows/ARM64 CI pass. A kernel-handle PID was not captured; no antivirus or BGCS attribution is claimed. This distinction is preserved rather than presenting a guessed process as forensic proof.
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.
Parent and confirmed failure
Parent #27. Repeated standard .NET SDK builds of the Editor native test graph fail with CS2012 when writing Inno.Core.Serialization.Generators.dll. The failure occurred first in the ordinary Debug output and then in a unique SDK ArtifactsPath owned by this acceptance run.
Evidence:
- D:/InnoEngine-Verification/editor-ui-closure-2026-10-27/e01-imgui.log
- D:/InnoEngine-Verification/editor-ui-closure-2026-10-27/e04-native-controls.log
The D: file has only its original hardlink. A compiler server process is present; the exact lock owner and whether graph/property duplication contributes are still under investigation. Do not attribute the failure to BGCS.
Owner and boundary
Compiler-tool project references, SDK build identity and any task/analyzer load boundary that consumes their outputs. Preserve normal SDK/MSBuild workflows and the independent output owner. Do not modify BGCS, generated bindings or platform policy.
Work
- Identify the actual file-lock owner and record the relevant evaluated reference/compilation paths.
- Reproduce the failure through public SDK build entry points.
- Correct the responsible load or graph boundary; do not rely on deleting caches, serializing all builds, skipping compilation or killing the user's IDE.
- Preserve SDK-selected output locations, compiler-tool neutrality and Restore/compilation evaluation isolation.
Acceptance
- Repeated unchanged and changed owned-output builds succeed.
- Ordinary supported single-root builds and isolated ArtifactsPath builds use consistent tool identities.
- Relevant compiler/analyzer/Task ownership regressions pass without IVT or reflection backdoors.
- Final Editor UI suites can run using the standard build pipeline.
- Record commands, lock provenance, commit and results. Keep open until verified and merged through PR refactor(editor): unify UI ownership and editing workflows #26.
Activity
FLwolfy commentedon Oct 27, 2026
Branch progress: compiler-tool graph correction
Implemented in
6a656b67oneditor-ui.Public SDK binlog inspection confirmed three project instances sharing the same ordinary compiler-tool output: analyzer references, the scripting compiler's runtime references, and task-foundation references carried different product/build-control properties. No persistent file lock was found after failure; this evidence identifies an overlapping-writer risk, not a confirmed long-lived compiler-server lock.
The SDK now reports the referenced project's own
IsRoslynComponentthroughAdditionalTargetFrameworkInfoProperty. The shared reference boundary normalizes analyzer, runtime and SDK-added transitive edges consistently. It retains SDKArtifactsPathand configuration. Product properties, parentBuildProjectReferencesand task operation ownership do not become compiler-tool inputs. Explicit direct SDK RID requests remain unchanged.Verified focused evidence:
e40/compiler-tool-scope-final.trx: 4 passed, 0 failed.e04/controls-verified.trxbefore the final operation-owner normalization; complete final suites remain pending.Evidence owner:
D:/InnoEngine-Verification/editor-ui-closure-2026-10-27. No BGCS, vendor, generated-binding or platform source was changed. This issue remains open while final ordinary/owned Editor and task-host regressions are completed.FLwolfy commentedon Oct 27, 2026
Final Release cold-build acceptance reproduced another graph split. The preserved binlog proves two concurrent Csc tasks write the same generator DLL (instances 12 and 18); their effective build globals differ only by an explicit
BuildingInsideVisualStudio=falseversus absence. Task bootstrap owner and BuildProjectReferences normalization already worked for these compilation requests. The SDK diagnostic mentions a possible Defender holder, but the confirmed cause is duplicate graph identities, not an established antivirus defect. Extending the existing public SDK regression to include the real Editor metadata before changing normalization. Evidence:editor-release-final.binlog,e40/release-graph-failure.json. No process termination, security settings, serialization workaround, BGCS or generated-source changes.FLwolfy commentedon Oct 27, 2026
The expanded public SDK regression now passes in both Debug and Release (2 cases, each checks cold build, unchanged reuse and changed Tool source). Before normalization both cases independently rejected the extra BuildingInsideVisualStudio global. The actual Release product build is progressing through its native/managed preparation and remains under acceptance; it is not yet counted as passed. One additional acceptance-runner error was independently isolated: forcing TEMP beneath the deep result hierarchy made an ordinary SDK project's 269-character working directory unable to start csc.exe. The runner now accepts an explicit temporary root rather than forcing this layout; all 9 previously affected SDK/CMake contracts pass using the owned short D: root. No production platform path policy or global compiler/SDK settings were changed.
FLwolfy commentedon Oct 27, 2026
Committed correction: 8dcceb9. The neutral Foundation bootstrap now uses its own stable SDK output scope (
<ArtifactsPath>/.inno-task-foundation, or the fixed Task foundation scope for ordinary outputs). It retains product/publish property isolation instead of coupling Foundation to Browser/AOT/RID settings. No per-operation generation directory or parallel lock/cache protocol was introduced. All 27 focused bootstrap/runtime/solution/compiler-tool cases passed (e40/stable-bootstrap.trx), including actual Debug/Release graphs and foreign publish-property probes. The previously reported Release product result was a failure, not a pass; it is retained in the report. Submitted-source Debug/Release product rebuilds are still in progress.FLwolfy commentedon Oct 27, 2026
The root cause is now supported by binlog evidence, rather than an antivirus assumption. Two compiler-tool build identities differed by
BuildingInsideVisualStudio; additionally the neutral Foundation bootstrap removed caller properties but shared the caller's ordinary output directory. Commits8dcceb94and the compiler-tool normalization preserve neutral inputs and allocate a stable independent SDK intermediate scope.e40/stable-bootstrap.trxpassed all 27 public SDK regressions (Debug/Release, cold/hot/changed source, Browser/AOT/RID caller isolation). The official Editor Debug and Release builds, and the Build development entry, now pass with zero errors. Final UI suites are running. No global build serialization, IDE termination, BGCS change, or platform-policy relocation was used. Status: verified targeted fixes on branch; final gate pending; keep Open until merge.FLwolfy commentedon Oct 28, 2026
Additional confirmed acceptance-entry defect
The final Editor Debug and Release builds pass. Building the unified seven-suite UI selection then fails in CompileShaderTask because the test acceptance entry forwards the SDK-selected native target and product props but omits the separately selected InnoToolTarget. A suite that references the real BGFX runtime exposes the omission. This is an acceptance orchestration defect, not a missing platform default or a BGCS defect.
The correction will forward the actual SDK-evaluated tool-host fact; it will not infer it from the target, add a platform table, or modify the backend. The isolated-test entry will consume the explicit tool fact, resolving the official Editor entry only when a native caller has not already supplied it. The failed graph log remains
final-ui-suites-build.log; its replacement will use a new evidence log.FLwolfy commentedon Oct 28, 2026
A follow-up review found that the unified builders globally set InnoTestNativeProduct=editor. This overrides project ownership and makes otherwise headless suites with transitive native references prepare the full Editor product repeatedly. The three actual native UI suites already declare their own product. I am removing the global test-product override, declaring the native requirement on Build.Tests (whose real script-reference acceptance previously demonstrated that dependency), and retaining the selected SDK target/tool/product facts. Production preparation and the native test target remain unchanged. The corrected actual SDK graph and ordinary/isolated execution must pass before this follow-up is verified.
FLwolfy commentedon Oct 28, 2026
A fresh, full Debug SDK graph containing both official development entries has now reproduced CS2012 in Inno.Extensibility.Catalogs: two compiler producers target the same isolated obj output. This run used its own ArtifactsPath, distinct from the active contract suite, and did not use BuildProjectReferences=false. The captured binlog is e46/closure-applications-Debug.binlog. I am comparing the actual ProjectStarted global-property identities before changing the build boundary; serializing the graph or copying DLLs is not an acceptable fix. The earlier entry-only preparation failed to supply its complete runtime and is separately marked invalid setup. This full-graph failure is new evidence for the existing #40 owner, not a BGCS defect or a reason to weaken platform separation.
FLwolfy commentedon Oct 28, 2026
The actual .NET 10.0.402 SDK regression reproduced missing output separation: normal Debug/Release passed; both ArtifactsPath cases failed because neutral/product requests selected the same assets, intermediate and assembly paths (
e40/output-ownership-red-sdk.trx: 2 passed, 2 failed). The real two-entry build also produced CS2012.The candidate selects the SDK ArtifactsProjectName before default paths, using actual native target, tools target, product props and native fingerprint. Caller output roots and SDK configuration/TFM/RID pivots remain intact; compiler tools remain neutral. Execution-only IDE properties do not create another restore owner. The initial four-case SDK regression is green (
e40/output-ownership-green.trx), including real two-node parallel compilation. Expanded boundary checks and the full fresh two-entry graph are running. This is engine output ownership, not a BGCS change. The issue remains Open pending complete verification and merge.FLwolfy commentedon Oct 28, 2026
The exact-head CI output-owner failure is corrected in the fixture without changing production paths.
e40/sdk-owner-executed.trxpasses on Windows Release: both real concurrent SDK requests explicitly execute Build, export their actual TargetPath/ProjectAssetsFile/IntermediateAssembly, and prove existence, owner containment and disjoint outputs. The structured-result directory is prepared before SDK startup and owned child processes have bounded retirement. Earlier fixture preparation failures (missing result parent; evaluation-only request without an explicit target) remain failed records.The expanded final suite and exact committed CI remain required. This issue stays Open.