test(localdb): port store-and-forward replication intents as CDC convergence specs
Task 10. Specifications first, deletion second: the bespoke ReplicationService (explicit Add/Remove/Park/Requeue over Akka) dies at Task 14, so its behaviour is restated here as outcomes the CDC replacement must still deliver. Written in terms of ROWS, not operations — under CDC there is no Add or Park message to observe, only a row that must end up right on both nodes. Not ported: ReplicationOperations_AreDispatchedInIssueOrder. It asserts the mechanism (inline fire-and-forget dispatch), and CDC capture is asynchronous and batched by construction. Its portable content is the ordering OUTCOME — add-then-remove must never converge to present — which is a test here, with that reasoning recorded in the file so it does not read as an accidental drop. DEVIATION: extracted the Phase 1 fixture into LocalDbSitePairHarness rather than duplicating ~150 lines. Phase 1's tests now derive from it and still pass unchanged. The harness registers the Phase 2 tables itself, since production OnReady does not until Task 14; that method is marked for deletion at the cutover, and the 8-table list is written literally so a cutover registering the wrong set fails these tests instead of agreeing with itself. Non-vacuity verified by unregistering sf_messages: 6 of 7 failed. The 7th — the ordering test — PASSED, because an absent row is also what a pair that replicates nothing looks like. Fixed with a control row that must converge in the same window, so the absence is evidence rather than silence. Also corrected two comments from Task 9 that claimed Task 14 makes notification_lists/smtp_configurations replicated. It explicitly does not register them, for the same reason the migrator skips them. Claude-Session: https://claude.ai/code/session_01BL2Vu1ESDQ9SCN4gVKkdts
This commit is contained in:
@@ -465,9 +465,10 @@ public class SiteLocalDbLegacyMigratorTests : IDisposable
|
||||
{
|
||||
// smtp_configurations.password is PLAINTEXT. Both tables are purged on every deploy
|
||||
// and permanently empty by design since the site write paths were removed
|
||||
// (2026-07-10), but a pre-fix legacy file can still hold rows — and Task 14 makes
|
||||
// these tables REPLICATED. Migrating them would push plaintext SMTP passwords across
|
||||
// a replication channel whose only historical payload was exactly that.
|
||||
// (2026-07-10), but a pre-fix legacy file can still hold rows. The cutover also
|
||||
// declines to REGISTER these two for replication, for the same reason — so migrating
|
||||
// them would leave plaintext SMTP passwords in the consolidated database, one future
|
||||
// RegisterReplicated away from being shipped to a peer, for config nothing reads.
|
||||
var sitePath = Path_("scadabridge.db");
|
||||
SeedLegacySiteStorage(sitePath);
|
||||
var config = Config(siteDbPath: sitePath);
|
||||
|
||||
Reference in New Issue
Block a user