Deferred from PR #669 review.
Original reviewer comment: #669 (comment)
Context: purgeFilesData commits its own transaction via the persistent NativeDatabase connection, while the immediately following reverse-dependency edge purge still runs through the better-sqlite3 db handle. If the process is interrupted between the two, dangling edges may remain. This is a pre-existing atomicity gap (not a regression from this PR), but now that purge runs through NativeDatabase, the reverse-dep edge deletion could also be folded into purgeFilesData to give true single-transaction atomicity.