0.3.2 — zero lint warnings, daily-story dedup, persisted Stats checkboxes
What's in 0.3.2
Three things in one release:
Zero lint warnings
npm run lint (the local Obsidian-parity check from PR #9) now reports 0 errors / 0 warnings across the production source. The typing pass that did the bulk:
- Structural
PluginDataBlobinterface routes everyloadData()site through one typed wrapper, killing the no-unsafe-* cluster at its root. App.pluginsandIntl.Segmenterget real types (the latter viatsconfig.lib += ES2022.Intl); two@ts-ignorelines disappear frommain.ts,TokenizerServicekeeps the same behavior with a cleaner type.- JSON.parse callsites cast at source: LLM responses, the settings-mirror envelope, the token cache, the triage-context cache.
- 35 Promise warnings cleared via
voidprefixes or sync arrow + IIFE wraps onaddEventListener/ dropdownonChangehandlers. - 8 iOS-blocked deprecations (
setWarning/display) carry per-lineeslint-disable @typescript-eslint/no-deprecated -- iOS Obsidian is on 1.12.7…comments with the explicit 1.13.0 ceiling rationale.
The plugin is no longer at risk of regressing into a delisting cycle when the cloud auto-review runs.
Daily auto-story dedup across devices
Previously, three devices on the same vault would each generate a daily story because the "did today" flag lived in per-device data.json. tickAutoStory now:
- Scans the configured story folder for any file whose basename starts with
${today} -(the same prefixcommitPreviewAsNotewrites). - If found → marks today complete in local state and exits.
- If not → marks the attempt, sleeps 3 minutes as a sync buffer (so a story written by another device has time to land via remotely-save / iCloud), then re-checks before generating.
Three-device users get one story per day instead of three.
Stats dashboard checkboxes persist
Progress chart series + HSK coverage bucket toggles previously lived as in-memory instance fields on StatsView — closing the tab wiped any non-default choice. They now live in CciSettings.progressChartSeries and CciSettings.hskCoverageBuckets, default to the old in-memory values, and route through saveSettings() so they survive a tab reopen and propagate through the settings mirror to other devices.
Coverage: new statsViewPersistence.test.ts (3 tests) checks the defaults, a JSON save→reload roundtrip, and the settings-mirror filter.