Repository navigation
Fix launch crash and empty-library bugs; add multiple libraries + manifest inference (1.1.0) - #1
Merged
Conversation
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.
Started from the reported bug — "the app won't let me see or select files," a fatal dialog on launch — and fixed the full chain it uncovered, verified on a real Windows + OneDrive setup. Full write-up in
FIXES.md.Bugs fixed
1. Launch crash —
UNKNOWN: unknown error, watch(44a3ec6)The library watcher's recursive
fs.watchonly guarded its synchronous setup. On Windows, a recursive watch over an OneDrive-synced folder (the defaultDocumentsroot) or a network share fires an asynchronouserrorevent with no listener, so Node re-throws it and the main process dies before the window renders. Fix: attach an'error'listener (degrade to manual refresh) + main-processuncaughtException/unhandledRejectionguards.2. Unreachable library hung the UI on "Loading…" (
d730fcc)Every IPC handler funnels through
libraryRoot(), whosefs.mkdirthrew on an offline share/deleted folder;library:scanrejected and the renderer'sreload()had notry/catch. Fix:libraryRoot()never throws,library:scanreturns a soft error object, and the renderer shows a dismissable error banner with Retry.3. Folder shown but 0 modules — OneDrive on-demand files (
0aa5aee)OneDrive "Files On-Demand" placeholders are reparse points that
readdirreports as symlinks, soentry.isFile()was false and the scan skipped every module while still listing the directory. Fix: anentryKind()helper thatstat-resolves ambiguous entries (metadata only, no download), plus a self-diagnosing empty state (htmlCount+ skip reasons).4. Standalone-tool timelines had no manifest (
627ec6a)Files exported by the standalone tool carry a
<title>and aconst DATA = {…}but nomodule-manifest, so they were correctly found but rejected. Fix: ShopDeck now infers a manifest when one is absent — id from the filename, title from<title>, and for tool-swap timelines the part/event-count/date-range/tags fromDATA. Inferred modules are flaggedinferred: true(card shows "· no manifest"); real manifests stay authoritative. Import no longer rejects manifest-less HTML.Features
d730fcc). New pure-Nodeelectron/libraries.js: a library is a named pointer{ id, name, root }. Rename edits the app-side label only (the folder on disk is never renamed); remove just unlinks it (files stay); the last library can't be removed; legacy single-root installs migrate automatically. New IPClibraries:list/add/rename/remove/switch/reveal, a top-bar switcher, and a Libraries manager in Settings.d8ec34c,c967885).build-windows.ymlbuilds NSIS + portable installers onwindows-latestand uploads them as a private artifact — used for the test builds throughout.release.yml(public release on av*tag) is unchanged.Version
Bumped to 1.1.0 (
3a363df) — minor, since it adds features on top of the fixes.Tests
test/library.test.mjs+test/libraries.test.mjs— 24 pure-Node tests passing, including OneDrive/symlink discovery and manifest inference (timeline + generic). CI (node --test, Ubuntu) and the Windows installer build are both green. Electron can't be launched in the CI/agent environment (install scripts blocked, perCLAUDE.md); each fix was confirmed on the user's real Windows machine via a fresh installer build, ending with all 9 timelines showing correctly.🤖 Generated with Claude Code
https://claude.ai/code/session_019rbmo7LSmxRtFf5zwfvw83