Repository navigation
fix(assets): preserve source identities during atomic filesystem refresh #43
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: 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
FLwolfy commentedon Oct 27, 2026
Branch implementation and focused acceptance:
e07/source-identities.trxande07/browser-refresh-final.trxunder 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.
FLwolfy commentedon Oct 27, 2026
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.pngandproducts/editor-functional-final.log. Commit: 273c42a; broader candidate changes are still undergoing final gates. Keep open pending merge.fix(assets): preserve source identities during filesystem refresh