Repository source: docs/plans/vote_identity_readiness/vote_identity_readiness_step4_implementation_summary.md
Vote Identity Readiness — Step 4: Implementation Summary
Stage 1 - Complete existing-identity prewarm
Changes:
Added an existing-identity-only readiness path to vote-surface idle prewarming.
Existing stored keypairs now finish fingerprint, publication/verification, and identity-hint readiness before a vote; missing keypairs cannot enter generation from that path.
Verification:
node --check public/assets/browser_signing.jsphp -l tests/BrowserSigningNormalizationTest.php./v3 test BrowserSigningNormalizationTest::testIdentityPrewarmFullyReadiesStoredVoteIdentity BrowserSigningNormalizationTest::testIdentityPrewarmWithoutStoredKeypairDoesNotCreateOrPublishIdentity— 2 passed.
Notes:
Full background readiness is restricted to vote surfaces; compose-only pages keep their prior lightweight prewarm behavior.
Stage 2 - Wire all reaction-page entry points
Changes:
Extended the canonical lazy signing loader to detect stored local keypairs on reaction-only pages and load signing assets during idle time.
Initialization now targets the full document, allowing the existing browser-signing initializer to discover reaction roots after lazy loading.
Verification:
node --check public/assets/lazy_compose_signing.jsphp -l tests/LazyComposeSigningTest.php./v3 test LazyComposeSigningTest— 3 passed.
Notes:
Pages without a stored keypair do not load signing assets until existing compose intent or reaction-click behavior requests them.
Stage 3 - Join readiness at vote time
Changes:
Added explicit stored-vote-identity readiness states for idle work, including ready and failed states.
A ready identity now bypasses
Preparing identity...; an in-flight or absent identity keeps existing progress feedback, and a failed prewarm requests visible verification/retry before writing a reaction.
Verification:
node --check public/assets/browser_signing.jsnode --check public/assets/thread_reactions.jsphp -l tests/BrowserSigningNormalizationTest.php./v3 test BrowserSigningNormalizationTest::testIdentityPrewarmFullyReadiesStoredVoteIdentity BrowserSigningNormalizationTest::testIdentityPrewarmWithoutStoredKeypairDoesNotCreateOrPublishIdentity BrowserSigningNormalizationTest::testPostReactionAppliesOptimisticStateBeforeFetchResolvesAndHidesAfterResponse BrowserSigningNormalizationTest::testPostReactionServerFailureRollsBackOptimisticState— 4 passed.
Notes:
Reaction writes and their existing pending/rollback behavior remain unchanged; readiness affects only the prerequisite and feedback timing.
Stage 4 - Release verification and recovery regression
Changes:
Corrected successful existing-identity prewarm to report the ready state consumed by reaction feedback.
Added regression coverage for that ready-state handoff.
Verification:
node --check public/assets/browser_signing.js public/assets/thread_reactions.js public/assets/lazy_compose_signing.jsphp -l tests/BrowserSigningNormalizationTest.php && php -l tests/LazyComposeSigningTest.php./v3 test BrowserSigningNormalizationTest LazyComposeSigningTest LocalAppSmokeTest::testAssetFingerprintPathsUseContentHashFilenames LocalAppSmokeTest::testApplicationRendersCoreRoutes QuoteCardDisplayNumberTest::testQdbListingPagesLoadTheVoteButtonAndIdentityLoaderScripts— 80 passed.A full
./v3 testrun was started twice, but this environment ends long-running child commands without returning a terminal result; the focused suite above covers the changed browser logic, lazy asset loading, and application asset rendering.
Notes:
No database, endpoint, template, or no-JavaScript behavior changed.