onlyworlds_obsidian-plugin/vault
Titus 72b26e3304 audit fixes: upload link-loss guard + migration wikilinks + id-match
Cold pre-release audit (release-auditor, verified against source) found one
real regression + polish:

#1 DATA-LOSS (regression vs 2.3.0): the bulk upload path (Export/Upload World)
built a full-field PATCH from a SHORTENED link list when a [[Name]] didn't
resolve locally, stripping the server's copy of the dropped link. The span
path guards this (omit-field-on-unresolved); the frontmatter path lost it.
Fix: frontmatterToPayloadFields gains omitFieldOnUnresolved; readElement sets
it so any field with an unresolvable link is OMITTED (server value wins), not
shortened. Self-contained detection (input-count vs resolved-count) — no
reliance on a caller-supplied tracking array (a test caught that fragility).
4 new tests pin it.

#2 polish: migration now renders link fields as [[Name]] wikilinks (was raw
ids until next download) — scrapeIdToName resolver threaded into
apiDataToFrontmatter.

#3 polish: DownloadWorldCommand.findElementByIdInCategory matches frontmatter
 first (was span-only), so re-download rename detection works on migrated
notes.

#4 (NameChanger self-write during download) left as documented no-op traffic.

Gate: tsc clean, build clean, 64/64 tests.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 09:52:09 +02:00
..
element-file.ts audit fixes: upload link-loss guard + migration wikilinks + id-match 2026-07-17 09:52:09 +02:00
element-transform.ts audit fixes: upload link-loss guard + migration wikilinks + id-match 2026-07-17 09:52:09 +02:00
folder-format.ts Phase C: OnlyWorlds folder bridge (export/import commands) 2026-07-16 14:03:07 +02:00
world-id-marker.ts keeper ruling: stable per-vault world identity for the folder bridge 2026-07-16 14:11:38 +02:00
world-key.ts fix wrong-world writes + false-success rename toast (2.2.1) 2026-07-12 14:52:40 +02:00