Releases: onlymykazari/obsidian-nextcloud-deck
Release list
1.1.1 — Replace :has CSS selectors
Replaced CSS :has() selectors with explicit root classes to resolve Obsidian review performance warnings.
NextDeck 1.1.0 — Sync Audit Fixes + ETag Caching
NextDeck 1.1.0
P0 Critical — 数据丢失 / 同步完全失败
- savePluginData 顺序修复:
data.json优先持久化,索引/图谱写入改为 best-effort try/catch,防止 vault 写入失败时丢失内存状态 - getStacks 403 防护:
pullBoard中getStacks包裹 try/catch,单个 board 的 403 不再中止整次同步 - fallbackFetchStackCards 实现:当 bulk
/stacks响应不含 cards 时,调用GET /boards/{bid}/stacks/{sid}获取卡片
P1 High — 数据陈旧 / 更新遗漏
- 卡片跨列表移动同步:检测 baseline
stackRemoteId变更,调用reorderCardAPI 将移动同步到 Deck - dirtyForDisk reconciling guard:
writeCardFile循环设置reconciling=true,消除幽灵列表竞态条件
P2 Medium — 性能与可靠性
- ETag 缓存:所有 GET 请求传入缓存 etag(If-None-Match),304 跳过合并,push 后自动失效
- cardIds 快照保护:清空前快照,部分失败时恢复未处理列表的卡片引用
变更文件
src/plugin.js · src/sync-manager.js · src/deck-client.js · src/sync-mapper.js · src/conflict.js
验证
26 tests pass · build OK · syntax check OK
1.0.5 — 修复隔板 pull 失败导致的影子 list + 同步 remote 删板
...
1.0.4 — rename manifest.id to nextdeck
Change manifest.id from obsidian-nextcloud-deck to nextdeck so the Obsidian Community Plugins submission form accepts it. Also flips user-facing strings to NextDeck.
1.0.3 — fundingUrl
Adds manifest.fundingUrl so the Community Plugins card shows a heart icon linking to https://buymeacoffee.com/onlymykazari. No code changes.
1.0.2 — Support section
Adds a Support section in Settings with a 'Buy me a coffee' button and a small link to sponsor the upstream Task Deck author.
1.0.1 — Community Plugins prep
Prep release for Obsidian Community Plugins submission. See PR template in .trae/documents/community-plugin-submission.md. No user-visible changes.
1.0.0 — NextDeck
First stable release. Plugin display name is now NextDeck. Existing users upgrade in place — manifest id (obsidian-nextcloud-deck) unchanged.
0.5.0-pre.26 - stop list duplication on sync
Fix
Lists no longer duplicate after every sync ("4 lists become 8, then 12").
Root cause
A three-way race between pull, our own file writes, and the vault event handler:
- Pull replaces `localBoard.lists` wholesale with fresh uids where needed.
- pullCards then calls `writeCardFile` per refreshed card (pre.22 addition), triggering vault modify events.
- Those events hit the 250ms folder-sync debounce, which runs `reconcileListsFromIndex`.
- `reconcileListsFromIndex` reads the stale index file's list meta (pull never rewrites it), sees uids that don't exist in current `board.lists`, and re-creates them as empty lists.
Result: every sync resurrects the previous generation of list uids, so a 4-list remote board becomes 8 locally, then 12, etc.
Fix
At the end of pull, re-run `writeBoardIndexFile` for every bound board, wrapped in the plugin's `reconciling` guard so our own writes don't fire the folder-sync debounce a second time. This keeps the on-disk list meta in lockstep with in-memory `data.boards`, making `reconcileListsFromIndex` a no-op after the vault event fires.
Test
- Update via BRAT to 0.5.0-pre.26
- Sync now → the extra empty lists should collapse back to the real 4 (they were dropped in memory by pull all along; they came back only via the vault event)
- Sync again → count stays stable at 4
0.5.0-pre.25 - copy Obsidian URL button on attachments
Adds a link-icon button on each attachment tile (in the card modal Attachments panel) that copies an obsidian://open?vault=...&file=... URL for the attachment to the clipboard, in front of the Open and Delete buttons. Handy for pasting the reference into notes.