Skip to content

test(build): read package assets from the evaluated project output scope #16

Closed

Description

@FLwolfy

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: SDK-evaluated Restore and process-owned loaded-package test. Implementation commits: 564e00d0, 4d0fdb0a.

Evidence: complete report, exact-head delivery attachment, portable test-case/raw-measurement/requirement indexes linked by the report. Specific proof: Contracts: NuGetLoadedIdentityTests; e16/process-owned-fixture: ten ordinary/isolated entries, forty parent scenarios.

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 #16 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.

Confirmed false failure

tests/build/Inno.Build.Tests/NuGetBindingDependencyTests.cs reads the fixed default obj/project.assets.json instead of the assets file used by the actual build.

Reproduction

Run the test project with SDK ArtifactsPath pointing at an isolated owned output. The default obj can contain BGCS.Runtime 4.1.0 while the actual isolated assets and current lock resolve 4.1.1. The test incorrectly compares the stale default identity to the loaded 4.1.1 assembly. A fresh clone without default obj is also unsupported by the hard-coded read.

Expected: obtain the exact evaluated ProjectAssetsFile/restore scope for the tested project and validate that identity. Do not hide the failure by deleting caches, restoring another output, copying assets or reading a fallback path.

Acceptance

  • Default and isolated ArtifactsPath runs pass using their own evaluated inputs.
  • A missing unrelated default obj does not fail isolated tests.
  • An actual package/load identity mismatch still fails.
  • Ordinary and process-isolated entry points consume the same correct scope.
  • Preserve package isolation and the existing VSTest/xUnit platform.

Evidence: audit F09 and artifacts/acceptance/core-audit-2026-10-24/test-assets-path-mismatch.json. This failure does not indicate a production BGCS 4.1.0 dependency.

Activity

  1. FLwolfy commented on Oct 27, 2026

    @FLwolfy
    MemberAuthor

    Verified additional branch acceptance through the real SDK and public loader: e16/loaded-package-shared.trx has 3 passes (default output, isolated output with no default assets, isolated output with deliberately stale unrelated default assets). e16/loaded-package-isolated.trx has 1 pass in a fresh host. Every case reads the actual evaluated ProjectAssetsFile, resolves the selected runtime asset, and compares it to the actually loaded BGCS.Runtime assembly. The negative case loads a test-owned copied payload whose bytes differ while assembly name and MVID remain identical, and proves the content check rejects it. The collectible negative-test context passes full GC/finalizer/full GC weak-reference retirement. Original NuGet files and archives remain untouched. Final full-suite/CI evidence and commit are pending; issue stays Open awaiting PR #26 merge.

  2. FLwolfy commented on Oct 29, 2026

    @FLwolfy
    MemberAuthor

    The extended full Contracts run found an intermittent test-owner cleanup failure: one loaded-package negative case passed its collectible-context weak assertion, then Windows refused deletion of the test-owned mismatched BGCS.Runtime.dll. The restored/global package was not modified. This is not yet attributed to BGCS. The next diagnostic will also weakly monitor the loaded Assembly and retain the exact failure/cleanup boundary; no unload assertion, timeout or production integrity check will be removed. Evidence: candidate-next/Contracts/7e2833f5448346a09253da45e91aa2cc/Contracts/execution.log.

  3. FLwolfy commented on Oct 29, 2026

    @FLwolfy
    MemberAuthor

    The stronger normal-SDK fixture now verifies both the collectible context and the loaded Assembly are unreachable after the unchanged Full GC / finalizer / Full GC barrier. All three normal scopes pass. Ten additional sequential groups, each running the three normal scopes and the one isolated contract in separate VSTest hosts, pass all 40 executions with successful cleanup (candidate-next/identity-repeats). No retry, suppressed cleanup exception, timeout increase or package modification was added. Commit: test(build): verify loaded assemblies retire with their collectible contexts. The earlier one-off Windows file denial remains recorded without an unsupported root-cause/BGCS claim; the final complete suite must still pass.

  4. FLwolfy commented on Oct 29, 2026

    @FLwolfy
    MemberAuthor

    Reproduced cleanup failure during final full-suite verification

    The ordinary full Build suite at 1917b253 reproduced three NuGetLoadedIdentityTests cleanup failures: deleting the fixture-owned BGCS.Runtime.dll returns UnauthorizedAccessException after the collectible-load probe. The global package remains unmodified; its observed file attributes are Archive, not ReadOnly. The original raw execution log is retained under candidate-1917b253/Contracts/5696b1bd510d4465ae1544b4b6e61c05/Contracts/execution.log. Cleanup currently occurs in the same test process that physically loaded the negative DLL, and the cleanup exception can obscure an earlier failure, so this is not yet assigned to BGCS or a proven independent native-loader cause.

    I am validating a strict ownership correction using the existing test-process invocation pattern: the actual on-disk mismatch load and unchanged full-GC/weak-context/weak-assembly checks execute in an owned child; the parent retains the fixture directory until that process has completely exited, then performs normal deletion. This preserves physical loaded-path/content evidence and every mismatch/unload assertion, without LoadFromStream, package edits, ignored cleanup, relaxed deadlines, private reflection or a production test entry. The complete suite continues collecting its current failures before replacement verification. This issue and PR remain unclosed.

  5. FLwolfy commented on Oct 29, 2026

    @FLwolfy
    MemberAuthor

    Owned process correction committed; focused verification passes

    Pushed 4d0fdb0a47a90fdcf266b40c415f889afc268b81 as Aaron Liao, without co-authors. Production code is unchanged from 1917b253; only the existing test fixture and its focused record changed. Parent SDK restore/output ownership checks remain intact. Actual physical mismatch loading, same-name/same-MVID/content rejection and both strict weak-collection assertions execute in the owned child; normal parent cleanup follows full child exit. No assertion, deadline or cleanup failure is suppressed.

    All four public cases pass. Ten complete ordinary/required-isolated entry repetitions pass, covering40 parent scenarios and their child probes with nonempty verdicts. Focused ownership report records original failures and limits. The independent prototype remains separately identified.

    The replacement final candidate is now rebuilding and rerunning the full applicable acceptance/CI. Keep Open / awaiting complete branch verification; PR #26 remains Draft.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions