Skip to content

0.3.2 — zero lint warnings, daily-story dedup, persisted Stats checkboxes

Choose a tag to compare

@davadev davadev released this 17 Jun 08:30
· 2 commits to main since this release
9a8fe0d

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 PluginDataBlob interface routes every loadData() site through one typed wrapper, killing the no-unsafe-* cluster at its root.
  • App.plugins and Intl.Segmenter get real types (the latter via tsconfig.lib += ES2022.Intl); two @ts-ignore lines disappear from main.ts, TokenizerService keeps 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 void prefixes or sync arrow + IIFE wraps on addEventListener / dropdown onChange handlers.
  • 8 iOS-blocked deprecations (setWarning / display) carry per-line eslint-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:

  1. Scans the configured story folder for any file whose basename starts with ${today} - (the same prefix commitPreviewAsNote writes).
  2. If found → marks today complete in local state and exits.
  3. 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.