Preserve the legacy electorate during canonical ledger migration #55
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/voting-36-43"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Production's original electorate lives in the legacy voting schema while the newly migrated public ledger tables are empty. Switching pooled search paths alone would omit all 15 registrations and 2 BSC event/balance rows. Forward migration 20261014000105 imports the original records after exact collision checks, preserves full originals and metadata in an audit archive, leaves frozen weights and the canonical migration tracker intact, and requires explicit canonical recovery.
The migration rejects nonidentical collisions atomically and is idempotent for unchanged legacy data. Existing source tables stay untouched. Startup admission allows bounded recovery while liveness remains separate from readiness.
Validation uses Rust1.88 and a fresh marked PostgreSQL16 instance with real SCRAM TCP authentication. Regression additions cover fresh/null/default password refusal and explicit restricted credentials, both-chain process crash/COMMIT/replay matrices, overlapping writers, sustained arrivals, database loss/reconnect, RPC-time SIGTERM, Terra forks, drained-holder recovery, uint256 HTTP accounting, base64/failed Terra executions, signed malleability/domain attacks, and actual Chromium hostile rendering across every entry point. The final combined release run is recorded in the linked evidence before merge.
Live inventory and invariants, verification, ops. Related #36 #37 #38 #39 #40 #41 #42 #43. Live import/recovery and exact-commit deployments follow merge; issue closure requires original acceptance criteria and all comments to pass.
Final verified release run: 73 Rust unit/supervisor tests, 113 integration tests, 245 schema-validated responses, 146 frontend tests, production build, nginx and Gitleaks passed on Rust 1.88.0 with fresh SCRAM PostgreSQL. The two exact-tip fixture races were fixed using bounded cursor barriers; accounting assertions were retained. Optimized timestamp tests and the latest live-probe build also passed.