Vault Event Tracking¶
Retired app-only Obsidian event ledger retained for explicit compatibility; never bootstrapped on the opted-out normal path.
Details¶
Historical compatibility reference for the event-driven Obsidian file ledger. It is disabled with the Obsidian feature and must not bootstrap listeners, probe the bridge, retry, or produce setup advice in that state.
How it works¶
On bootstrap (idempotent, auto-called by queries): 1. Load persisted ledger from localStorage (survives Obsidian restarts) 2. Compact entries older than rolling window (default 7 days, configurable via obsidian.vault_events_window_days in config.yaml) 3. Reconcile offline changes by scanning getMarkdownFiles() and comparing mtimes 4. Register vault.on('create'|'modify'|'rename'|'delete') listeners (after onLayoutReady)
Listeners update compact per-file stats in memory, debounced to localStorage every 5 seconds.
Data Model¶
Per-file entry: last (unix ms of most recent event), days ({YYYY-MM-DD: N} modify count per day within window), created (unix ms if created within window), renamedFrom (previous path if renamed).
API¶
bootstrap(window_days=7) -> initialize/re-initialize ledger. get_hot_files(since_date, until_date?, limit=20, exclude_folders?) -> ranked files by modification hotness. get_recent_files(since_hours=2, limit=30, exclude_folders?) -> recently modified files. status() -> ledger stats.
Storage¶
In-memory: window.__wb_vault_ledger. Persistent: localStorage["wb-vault-ledger"] (~50KB for 400 files). Rolling window configurable.
Integration¶
infer_activity(deep=True) uses vault event ledger when available, falling back to mtime scanning. Hot files skill fuses vault events with KTR writing intensity.
Caveats¶
- Listeners only active while Obsidian is running with work-buddy plugin
- Offline changes reconciled from mtimes on bootstrap (count=1, no frequency data)
- localStorage is per-vault in Obsidian -- multi-vault setups get separate ledgers