Skip to content

fix(assets): preserve source identities during atomic filesystem refresh #43

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: Asset source reconciliation. Implementation commits: 273c42ad.

Evidence: complete report, exact-head delivery attachment, portable test-case/raw-measurement/requirement indexes linked by the report. Specific proof: Workflows: stable source IDs through atomic refresh/recovery; Products: Scene/Asset save/close/reopen and installed sources.

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

Parent and confirmed defect

Parent: #27. Direct dependency of #34 and #35.

Real FlappyBird Editor acceptance reproduced an empty File Browser after entering and stopping Play. Public native regressions also reproduce the failure for both tree and list after an unchanged AssetPipeline.Rescan().

AssetFileSystem.Refresh() unregisters and recreates every entry while the asset content revision can remain unchanged. Cached runtime identities become stale. It also clears the live index before filesystem enumeration, so an ordinary enumeration failure can destroy the last complete source view.

Owner and boundaries

Owner: Inno.Assets.Pipeline/AssetFileSystem, using Core Identity and IndexedObjectStore. Presentation remains a consumer; no UI-specific refresh branch, parallel resolver, new identity authority, or generation fallback.

Implementation

  • Enumerate and validate a complete neutral candidate before changing the active index.
  • Preserve existing live entries and runtime identities when their persistent identity and entry kind remain valid.
  • Register new entries with rollback for failed preparation; retire only removed/replaced identities after successful preparation.
  • Reuse the existing store and source filtering/mount rules. Do not add a permanent parallel index or alter plugin read-only ownership.
  • Synchronize current public lifecycle documentation and the real Browser consumers.

Acceptance

  • Unchanged refresh preserves file/directory instances and runtime identities.
  • Added/removed/renamed content has correct lookup and retirement semantics.
  • Missing/unreadable candidate input preserves the previous complete view and its identities.
  • Both native Browser views remain drawable and keyboard-select the current source after unchanged rescan.
  • Real FlappyBird Play -> stop preserves Browser content and Edit selection.
  • Existing source mount, plugin, identity and filesystem regressions pass; final architecture/Wiki checks pass.

Keep this issue open while verified on the branch; close through PR #26 after complete acceptance and merge.

Activity

  1. FLwolfy commented on Oct 27, 2026

    @FLwolfy
    MemberAuthor

    Branch implementation and focused acceptance:

    • Source refresh now enumerates and validates the complete candidate before mutating the active view. A temporary preparation map reuses existing entries by persistent identity; it is not a second persistent identity registry.
    • New Core registrations are rolled back if preparation fails. Removed entries retire after preparation. No UI fallback, extra public API, new event system, or platform branch was introduced.
    • The 13 filesystem regressions passed, including unchanged instance/runtime-ID stability, failed enumeration preserving the complete old view, and removed identity retirement.
    • Both native Browser unchanged-rescan regressions now pass. The six-case navigation/lifecycle run also passed a 100-cycle real Scene open/draw/close test with weak-reference collection while neutral History remains available.
    • Evidence: e07/source-identities.trx and e07/browser-refresh-final.trx under the current local acceptance owner.

    Full asset regressions, real FlappyBird Play/stop replay, final architecture/Wiki validation and CI remain pending. This issue stays open.

  2. FLwolfy commented on Oct 27, 2026

    @FLwolfy
    MemberAuthor

    The final D3D12 FlappyBird product replay now confirms the originally observed regression is resolved: after Play and return to Edit, the same authored asset tree and directory listing remain populated. No Browser fallback or second identity map was added. The filesystem owner preserves unchanged source identities and publishes candidate changes atomically. Normal shutdown exited 0. Evidence: e09/flappybird-final-play-stop-browser.png and products/editor-functional-final.log. Commit: 273c42a; broader candidate changes are still undergoing final gates. Keep open pending merge.

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