Repository navigation
Fix on-disk storage robustness and other pre-release review findings - #78
Merged
Merged
Conversation
OpfsSyncObjectStore.get() opened the file with create: true, like put(): reading an absent object created an empty file and returned no bytes, which were then taken for the object data. It now throws, like the asynchronous store. Assisted-by: Claude Opus 5.5
…lures Enabling the on-disk storage mode kept the OPFS store before it was initialised and switched the mode before spilling the objects: after a failure (storage refused, write error), the runtime stayed in disk mode with an unusable store while the toggle showed memory storage, later operations failed although applied, and a further attempt reported the mode as enabled. The store is now kept once initialised only, and a failed switch pages the spilled objects back in and stays in RAM mode (the toggle follows the mode the runtime actually ended in). After a successful call, a storage failure (settling paged-in objects, clearing a replaced store, sweeping) made the call fail, so that running it again applied it twice, and skipped the next reconciliation steps. These steps are now best effort: each one is attempted, objects that cannot be written stay in memory, and the error is reported once through the new onStorageError listener (bridged from the kernel worker), which the app shows as a warning. Assisted-by: Claude Opus 5.5
Every "Save to Macros" button under the Python code blocks of a reply used the title derived from the request, so that saving several blocks created homonymous macros. With several blocks, each title now ends with the number of its block, as the button label does. Assisted-by: Claude Opus 5.5
Events are posted to every peer window, and post() transferred the buffers of each message: a transferred buffer is detached, so the second peer would have received empty buffers, and the caller of emit() lost its own. Events are now structured-cloned; responses, sent to a single peer, still transfer their buffers. Assisted-by: Claude Opus 5.5
…inks The tree registered each child at child_dset.name, which is the path of an object reached through an external link in its own file: that path may be missing from the browsed file, or designate another dataset of it, whose data was then previewed and imported. Children are now registered at their path in the browsed file. Browsed files are copied alone, so their external links are broken and skipped today: this mainly aligns the browser with SigimaX. Assisted-by: Claude Opus 5.5
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes from the pre-release review of
v0.10.0..HEAD(findings re-checked against the code; several were present in v0.10.0 already).On-disk storage
setStorageMode): the OPFS store is kept only onceinit()succeeded (a failed init can be retried), and a switch whose spill fails pages the spilled objects back in and stays in RAM mode. The toggle follows the mode the runtime actually ended in. Before, a failed attempt left the runtime in disk mode with an uninitialised store while the toggle showed RAM, later operations failed although applied, and a further click reported the mode as enabled.diskGuardAfter): each reconciliation step (settle, store clear after a replaced model, sweep, GC) is attempted, objects that cannot be written stay in memory with their data, and the error is reported once per episode through a newonStorageErrorlistener, bridged from the kernel worker (storage-errorevent) and shown as a warning. Before, the call was reported as failed (applied twice if retried) and the next steps were skipped.OpfsSyncObjectStore.get()of an absent object now throws instead of creating an empty file and returning no bytes.Other fixes
child_dset.name(path in the external file). Low impact on the web (files are copied alone, so external links are broken), aligns with Keep the paths of HDF5 objects reached through external links SigimaX#38.Request (2)).Validation
tsc -b, eslint, Prettier,i18n:check: OKpytest tests/python: 532 passeddisk_mode_data.spec.ts(main + worker) andworker_mode.spec.ts: 9 passedNot in this PR: the release blocker (Sigima / DataLab-Capsule development snapshots in
sigima-dependency.jsonanddatalab-capsule-dependency.json), to be handled when they are published.