PvZ identity and Dave's first meeting
Yumina is the account authority. The native PvZ profile is an internal game save, not a second login. Browser storage is scoped by the immutable Yumina account ID; display-name changes must never select another save. Guests use browser-local progress and a separate session display name.
Entry and conversation
- The free, localized first message appears when the first lawn of a new Adventure becomes playable. It pauses the board, with quiet music. It does not call an LLM. Guests can dismiss it and continue playing.
- The first-meeting marker now lives in
userdata/yumina-campaign.json, alongside the campaign ID. It survives reopening, local persistence and explicit cloud adoption. New saves allocate this ID before native profile creation; old saves retain the legacy notebook association. - Returning players do not get the same first-lawn interruption again. The message remains available by opening Dave. Existing advanced saves use their chapter context, rather than receiving first-lawn planting instructions.
- Signed-in chapter introductions are recorded in the campaign notebook. A guest who already saw the free introduction does not get an extra paid arrival request when attaching that first meeting to their account.
- Later autonomous comments can follow cleared waves, lost plants or mower use, or quiet opportunities from level 3 onward. The native checks still enforce calm conditions, a 90-second interval and at most two background calls per level. Eligible later levels also have the optional tin encounter. The model may remain silent; an opportunity is not a guaranteed interruption.
Account controls and boundaries
- The original change-user sign now opens the shared Player & progress panel in the web build. It offers the current Yumina identity/account link, guest name editing and progress status. Desktop-native standalone builds keep their existing profile picker. No existing save/profile files are deleted.
- Signed-in players can open that same panel from their name in the page bar.
- Verified account name/avatar take precedence over stale embedding URL hints. Long names scale to fit the native welcome sign. Animated matrix text now uses the same missing-glyph browser fallback as ordinary labels, fixing blank Chinese names on that sign. The full name remains in the account panel, within the existing 24-character game display limit.
- Login updates presentation without replacing a running room seat or loading different game files into a live Adventure. A guest may explicitly adopt their Adventure into an account without an existing cloud save. An existing account Adventure is never silently overwritten.
- A logout/account switch clears Dave's cached account, notebook and model state even while he is offstage. Dave refuses to connect a different account to an account-owned Adventure, including when its initial cloud fetch failed. The original account must be restored, or a fresh visit can load the new account.
- Server account checks, save revision guards, ledger accounting and regional relay credentials remain in place. This release changes no billing or match protocol semantics.
Verification
51 browser-shell tests pass, including new coverage for campaign intro persistence, adoption/owner boundaries, stale URL identity and account-change notifications. The native WASM build and release upload validation pass.
An isolated real-WASM browser run at 844x390 verified the native sign, guest name editing, free intro, reopening without another intro, login resuming exactly one requested reply, explicit cloud adoption, account-priority identity on reload, returning-member behavior and blocking Dave after switching accounts. It made one fixture AI request and reported no page errors. Cloud adoption and a separate Chinese account used fixture saves only. No production account, credits or provider was used for this test. The Chinese phone panel stays within the viewport.
Evidence is in output/dave-ui-rebuild/audit-profile-flow.log and profile-*.png in the main workspace. The final real-WASM run passed against release e26702664f, game commit bf42d3a, including the rendered Chinese welcome sign. That release is admitted alongside prior builds; publishing the page requires no restart of either regional match host. Public delivery is verified separately.
Published verification
Release e26702664f is uploaded to S3. Public /pvz/ HTML matches the staged file byte for byte. The main API loaded the updated admission list in successful deployment 98d22705-1505-4622-9210-7e71d28a5d4a; both regional match deployments remain unchanged. The documentation-only push was correctly skipped by Railway's watch patterns, so the admission environment update used an explicit main-service redeploy.
A fresh production guest browser at 844x390 reached the native profile sign, opened Player & progress, entered Adventure, received the fixed free opening and persisted its campaign/intro marker. Zero paid requests and zero page errors. Evidence: output/dave-ui-rebuild/audit-profile-public.log and profile-public-phone.png in the main workspace.
