Repository source: docs/plans/automatic_guest_identity/automatic_guest_identity_step4_implementation_summary.md
Automatic Guest Identity — Step 4: Implementation Summary
Stage 1 - Operator feature flag and runtime configuration
Changes:
Added the mutable, default-off
FORUM_AUTOMATIC_GUEST_KEYPAIR_ENABLEDoperator flag to the canonical registry and Feature Flags page.Exposed its effective value through the existing layout browser-identity options contract.
Added evaluator and rendered-page coverage.
Verification:
php -lpassed for changed PHP/template/test files../v3 test FeatureFlagEvaluatorTest LocalAppSmokeTest::testAutomaticGuestKeypairFlagRendersBrowserRuntimeOption— 15 passed.
Notes:
The flag is site-record and environment overridable; no browser behavior changes until Stage 2 consumes the option.
Stage 2 - Automatic browser-local guest preparation
Changes:
Load the existing OpenPGP/browser-signing runtime on normal pages only when the operator flag is enabled.
Added a no-prompt automatic
guestpreparation path that defaults to deferred public-key publication.Made first use finish required publication after any in-progress background preparation, preserving one keypair and one coordinator.
Verification:
php -lpassed for the changed renderer and tests../v3 test BrowserSigningNormalizationTest::testAutomaticGuestIdentityDefersPublicationUntilFirstSignedAction BrowserSigningNormalizationTest::testAutomaticGuestIdentityPreservesExistingBrowserKeypair BrowserSigningNormalizationTest::testIdentityPrewarmDoesNotGenerateOrLinkIdentity LocalAppSmokeTest::testAutomaticGuestKeypairFlagRendersBrowserRuntimeOption— 4 passed.
Notes:
Background setup failures are intentionally silent; a subsequent signed action or Account Key page uses the established recovery path.
Stage 3 - Per-browser publication preference
Changes:
Added an Account Key control for this browser's automatic-guest publication preference, defaulting to first signed use.
Persisted the immediate choice only in browser storage and immediately published an existing unpublished key when the visitor explicitly enables it.
Kept existing account-key generation/import publication behavior unchanged and reused the canonical publication and private-site authentication paths.
Verification:
php -lpassed for the Account Key template and changed tests../v3 test BrowserSigningNormalizationTest::testAutomaticGuestIdentityDefersPublicationUntilFirstSignedAction BrowserSigningNormalizationTest::testAutomaticGuestIdentityPreservesExistingBrowserKeypair BrowserSigningNormalizationTest::testAutomaticGuestIdentityPublishesImmediatelyWhenBrowserPreferenceIsSet BrowserSigningNormalizationTest::testAccountGuestPublicationPreferencePersistsAndPublishesCurrentKey LocalAppSmokeTest::testAutomaticGuestKeypairFlagRendersBrowserRuntimeOption— 5 passed.
Notes:
The control is deliberately on Account Key, not the operator Feature Flags page, because it governs only the local browser identity.
Stage 4 - Release verification and operations guidance
Changes:
Documented Feature Flags enablement, browser-local/private-key boundary, publication choices, static-artifact rebuild, and rollback in the README and production runbook.
Added static-board-artifact coverage for the enabled runtime setting and identity assets.
Restored the flat normal signed-action readiness path after the broader suite identified an added promise boundary that delayed existing duplicate-submit flows.
Verification:
php -l tests/LocalAppSmokeTest.phppassed../v3 test LocalAppSmokeTest::testAutomaticGuestKeypairFlagIsIncludedInStaticBoardArtifact— 1 passed../v3 test FeatureFlagEvaluatorTest BrowserSigningNormalizationTest LocalAppSmokeTest— 212 passed, 0 failed.git diff --checkpassed; all four plan-navigation targets exist.
Notes:
The full-suite static-artifact health-check test intentionally logs its simulated missing-asset diagnostic while passing.
Rollback disables future automatic preparation only; it does not and cannot delete browser-local keypairs.