Harden dual-chain accounting, signed voting and deployment boundaries #53
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?
Dual-chain snapshot voting could replay balances, freeze stale power, open unreviewed revisions, and expose unsafe browser/API boundaries. This change validates complete chain observations and coherent registration boundaries, makes accounting and signed actions transactional, certifies freeze readiness, supervises independent workers, and secures SQL, rendering, CORS and protocol contracts.
It adds forward migrations preserving frozen/history records, immutable independently verifiable v2 receipts, generated OpenAPI/TypeScript contracts, stored-weight UI controls, and explicit operational recovery. Existing hash-only receipts and uncertified legacy polls retain documented verification limits; legacy mutation signatures require v2 re-signing. Governance remains advisory and separate per address/chain; Legal and the existing wallet ports remain in place.
Validation on Rust1.88.0: 71 Rust unit/supervisor tests, 79 integration tests, 225 OpenAPI response validations, 146 frontend tests, production build, 11 Chromium regressions, real second-origin signed amend/retry, 4 optimized timestamp regressions, nginx smoke checks and Gitleaks passed. Followup application coverage passes8 tests, including configured threshold, forbidden headers, and16 genuine signed development-domain/version rejections. Verification uses dedicated marked disposable PostgreSQL with no production URL fallback.
Implementation, invariants, commands and evidence limits crosslinks the ops and third-party agent runbooks. Coolify/live verification follows merge; issues36–43 are not automatically closed. Final issue comments will identify completed criteria and remaining exhaustive fault-matrix checks.
Related: #36 #37 #38 #39 #40 #41 #42 #43.