Checklist

12 of 17 complete
  • Confirm the retained production parity matrix, intentional exclusions, and whether title/summary editing is actively required; choose the smallest safe legacy-history approach.
  • Restore the bounded parity gaps: authorized private voting, per-run publication visibility, current reports/exports, and access to pre-cutover voting history without legacy writes.
  • Preserve existing end/reset/delete and confidential-case workflows with minimal Rust lifecycle wiring and legacy-reference cleanup; preserve independently completed points. Reproduce consistency regressions against Rails guards/locking before fixing them. No new history-retention guarantee after intentional deletion or distributed coordination subsystem.
  • Configure production deployment basics for both environments: Rust database, signing secret, web/worker connectivity, startup/readiness and inclusion in the existing backup/restore routine.
  • Pass focused parity and real Rails-Rust validation, build the production image, complete a production-shaped staging smoke test, and perform the controlled production cutover.
  • Restore core Rails anonymous-flag parity: immutable creation-time run metadata, normal identity-linked voting, and aggregate results/anonymous label without per-choice voter names or party breakdowns. Implemented in 2b1553354; focused parity and real Rails-Rust validation recorded, with additional verification confirmed by the user. Report/research-export anonymization remains covered by the outstanding reports/exports parity item.
  • Before historical migration, persist and edit custom poll titles/rich-text summaries through the shared Rust/Rails metadata flow, support clearing overrides, and complete unanimous-for/against presentation. Verify authorization, validation, unchanged ballots/privacy, PostgreSQL persistence and the real Rails-Rust round trip.
  • Allow historical unanimous-for/against resolutions to retain explicit unknown attribution (actor_id=null) through SQL, Rust and Rails reads; verify persistence/contracts/rendering while newly created unanimous decisions still require and record the authenticated secretary. No importer in this step.
  • Implement first-class Rust chair-selected tie resolutions with unchanged ballots/counts, choose/change/reset commands, authenticated new actor and unknown historical actor, existing secretary UI/broadcast/report projection reuse and finalized-bias guards. Verify domain boundaries, PostgreSQL/HTTP persistence, Rails authorization/privacy and real browser workflow.
  • Prepare bin/staging for the paired Rails/Rust release: per-environment dedicated database and signing key, reachable API for web/workers, automatic migrations and health smoke checks; deploy the PR to staging and record verified outcomes or blockers.
  • Reproduce and fix staging meeting 4 / case 02/25 infinite frame cancellation/retry and unintended frame requests when hovering nonvoters; preserve existing voting reconciliation and manual-vote behavior with regression/browser validation.
  • Investigate the staging case 03/25 start that changed the tab but left the body waiting; verify persisted state and StartCaseJob failure, reproduce the minimal regression and determine a safe recovery and bounded fix without restarting or changing cases blindly.
  • Deploy a persistent private-network Meilisearch container for voting staging, isolate its data/indexes from other staging environments, update the reachable search configuration and verify indexing and worker queue recovery without clearing queued jobs or modifying visma/maria.
  • Fix overlapping action label/source-title text in the shared secretary voting-start button, preserving source selection and submission behavior; reproduce and validate with actual browser layout at desktop and narrow widths.
  • Fix ongoing-case narrow-screen overflow: stack proposal/voting and speaker columns, wrap the case heading/actions and keep controls inside the viewport; preserve desktop two-column behavior and verify with real browser layout regressions without hiding overflow.
  • Restore protocol generation from authoritative Rust history through existing builders: closed substantive runs only, no invented pending/rejected decisions, typed proposal/point ballots, anonymous aggregate-only results, automatic case-completion generation/publication/resolution, secretary regeneration and existing DOCX export. Verify regressions and a real Rails–Rust round trip; historical import and standalone voting/research reports remain separate.
  • Restore normal voting for non-public cases and meetings through the existing Rust integration, preserving Rails voting-right, content-visibility and decryption behaviour without a new security policy. Reuse session-rendered private frames/broadcast refreshes, existing public/bigscreen visibility and private history/protocol handling. Verify ordinary/manual/unanimous/tie flows, replacements and existing access cases through focused Rails tests and real Rails–Rust/browser acceptance; keep public voting unchanged.
Area
Kaukus
Kind
Feature
Priority
High
Task ID
tsk_6adutxtxcy
Updated