Outcome
Frameforge currently falls back to session-only storage. Implement actual IndexedDB persistence for projects and imported Blob media; the same infrastructure should benefit Aureon recovery. This can proceed independently of playback.
Specification and implementation
- Implement IDBFactory.open/versioned upgrades, IDBOpenDBRequest, IDBDatabase/createObjectStore/transaction/close, IDBObjectStore.get/put and requests/transactions with result/error, upgradeneeded, success/error, complete/abort events. Specify and test key validation, structured cloning, transaction active windows, serialization and abort rollback. Audit additional standard methods before exposing a claimed profile; unimplemented operations must not appear successful.
- Persist structured project objects and Blob/File bytes with MIME metadata. Do not store native pointer values, V8 handles or filesystem path tokens as serialized browser values. Reuse safe clone semantics and durable blob ownership.
- Use an asynchronous transactional storage backend; document SQLite or alternative selection, schema upgrades, atomicity, quota accounting and recovery. Keep disk I/O off runtime/UI threads. Provide host-controlled data location and clear-data behavior.
- Fix sample storage identity: the current loopback server chooses a random port on every run, changing the web origin. Design a stable admitted app origin (or stable endpoint with explicit instance-conflict policy) and persistent profile. Do not solve this by merging arbitrary origins or dropping port isolation globally.
- Preserve origin partitioning, opaque-origin behavior, denied/unavailable storage errors and multi-context versionchange/blocked handling; settle callbacks on navigation/shutdown. Keep clear-data and deletion bounded and safe.
Tests and verification
Round-trip nested project data and binary Blobs, cross-process app restart, failed transaction rollback, concurrent writers, upgrade/blocked connections, quota/disk-write failure and origin separation. Test absence of half-written project/media pairs after interruption. Verify same app profile restores while a distinct app/origin cannot read it. Add IndexedDB WPT selections with published exclusions.
Acceptance
References
IndexedDB standard.
Original application references
Shared delivery requirements
Parent: #53. Baseline: PR #43 / ce56d49; sample experiments/WebScene.Frameforge.
Reference application: https://github.com/wieslawsoltes/Frameforge (pin f414cd44896b659a5c6da2e4fc596a2ded055f2a, includes demo media and THIRD_PARTY_NOTICES.md).
Implement in WebScene, leaving original application JavaScript/WGSL unchanged. No fake capability objects, synthetic successful events or swallowed errors. Keep public contracts cross-platform with isolated backend implementations; qualify macOS arm64 first and explicitly track Windows/Linux follow-up. Production Avalonia 11 must remain supported; only samples opt into Avalonia 12. Native AOT/trim safety is mandatory.
Add focused native/managed regression coverage and a pinned WPT subset or clearly labeled project-owned contract for non-WebGPU behavior. Applicable WebGPU CTS cases belong with GPU work. Record exact revisions, test commands, negative cases and reproducible evidence in the implementation PR. Unsupported functionality cannot be marked passed; distinguish app coverage from standards conformance. Review existing implementation before adding overlapping infrastructure.
Outcome
Frameforge currently falls back to session-only storage. Implement actual IndexedDB persistence for projects and imported Blob media; the same infrastructure should benefit Aureon recovery. This can proceed independently of playback.
Specification and implementation
Tests and verification
Round-trip nested project data and binary Blobs, cross-process app restart, failed transaction rollback, concurrent writers, upgrade/blocked connections, quota/disk-write failure and origin separation. Test absence of half-written project/media pairs after interruption. Verify same app profile restores while a distinct app/origin cannot read it. Add IndexedDB WPT selections with published exclusions.
Acceptance
References
IndexedDB standard.
Original application references
Shared delivery requirements
Parent: #53. Baseline: PR #43 / ce56d49; sample
experiments/WebScene.Frameforge.Reference application: https://github.com/wieslawsoltes/Frameforge (pin f414cd44896b659a5c6da2e4fc596a2ded055f2a, includes demo media and THIRD_PARTY_NOTICES.md).
Implement in WebScene, leaving original application JavaScript/WGSL unchanged. No fake capability objects, synthetic successful events or swallowed errors. Keep public contracts cross-platform with isolated backend implementations; qualify macOS arm64 first and explicitly track Windows/Linux follow-up. Production Avalonia 11 must remain supported; only samples opt into Avalonia 12. Native AOT/trim safety is mandatory.
Add focused native/managed regression coverage and a pinned WPT subset or clearly labeled project-owned contract for non-WebGPU behavior. Applicable WebGPU CTS cases belong with GPU work. Record exact revisions, test commands, negative cases and reproducible evidence in the implementation PR. Unsupported functionality cannot be marked passed; distinguish app coverage from standards conformance. Review existing implementation before adding overlapping infrastructure.