fix(conflicts): disable automatic .obsidian LWW mutation (#145) - #156
Conversation
Foreground and background sync previously invoked a timestamp-based resolver that could delete, replace, or promote .obsidian conflict copies without a contemporaneous user decision. Remove both automatic call paths, preserve but ignore the legacy preference, retain the gomobile entry point as a non-mutating compatibility no-op, and keep conflicts in the manual review flow. What could go wrong and why this is safe: an overlooked caller or stale bridge binary could still mutate user bytes. The Go export itself now performs no filesystem operation, issue-numbered tests preserve exact bytes across Mtime, clock-skew, and missing-original cases, the XCFramework was rebuilt, and the complete Go and Xcode suites pass. Closes #145
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Repository UI Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (14)
💤 Files with no reviewable changes (1)
Included review availability: Your plan includes up to 2 reviews per rolling hour; 1 remains after this review. 📜 Recent review details⏰ Context from checks skipped due to timeout. (2)
🧰 Additional context used📓 Path-based instructions (11)**/*.swift📄 CodeRabbit inference engine (Custom checks)
Files:
ios/**/*.swift📄 CodeRabbit inference engine (README.md)
Files:
⚙️ CodeRabbit configuration file
Files:
**/*⚙️ CodeRabbit configuration file
Files:
docs/decisions/**/*📄 CodeRabbit inference engine (docs/decisions/014-vault-subfolders-override-stray-root-config.md)
Files:
docs/decisions/**/*.{go,swift,md}📄 CodeRabbit inference engine (docs/decisions/022-diagnostics-helper-credentials-and-mutual-pairing.md)
Files:
docs/**/*📄 CodeRabbit inference engine (docs/helper-publication-rollout.md)
Files:
docs/**/*.{md,go,sh}📄 CodeRabbit inference engine (docs/helper-runtime-packaging-readiness.md)
Files:
docs/**/*.{go,md}📄 CodeRabbit inference engine (docs/helper-runtime-packaging-readiness.md)
Files:
**/*.md⚙️ CodeRabbit configuration file
Files:
go/**/*.go📄 CodeRabbit inference engine (README.md)
Files:
go/bridge/**/*.go⚙️ CodeRabbit configuration file
Files:
🧠 Learnings (3)📚 Learning: 2026-06-10T18:47:10.724ZApplied to files:
📚 Learning: 2026-07-12T23:04:14.842ZApplied to files:
📚 Learning: 2026-07-12T23:03:04.680ZApplied to files:
🔇 Additional comments (12)
📝 WalkthroughWalkthroughVaultSync now leaves ChangesManual
Estimated code review effort: 3 (Moderate) | ~25 minutes Merge Risk: ⚪ Minimal · up to This PR routes conflicts through manual review and makes the compatibility entry point non-mutating. Localization-key parity should be confirmed during normal review, but no actionable merge-blocking risk remains. Possibly related issues
Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 7✅ Passed checks (7 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Foreground and background sync previously invoked a timestamp-based resolver that could delete, replace, or promote .obsidian conflict copies without a contemporaneous user decision.
Remove both automatic call paths, preserve but ignore the legacy preference, retain the gomobile entry point as a non-mutating compatibility no-op, and keep conflicts in the manual review flow.
What could go wrong and why this is safe: an overlooked caller or stale bridge binary could still mutate user bytes. The Go export itself now performs no filesystem operation, issue-numbered tests preserve exact bytes across Mtime, clock-skew, and missing-original cases, the XCFramework was rebuilt, and the complete Go and Xcode suites pass.
Closes #145
What & why
Component(s)
Testing
cd go && make patch && go test -tags noassets ./bridgecd notify && go test ./...xcodebuild testSummary
.obsidianconflict resolution in foreground and background sync.AutoResolveStateConflictsas a non-mutating compatibility no-op.