Make the web build a signed-in beta instead of a demo (#183)

* Make the web build the signed-in Icarus web beta

One PlatformPolicy (lib/config/platform_policy.dart) now answers what
this build offers: whether it is the web beta, whether the on-device
library is shown, whether My Library needs sign-in, which features are
desktop-only, and which are coming to the web beta. Desktop keeps
everything; the web beta is cloud-only and signed in. Local strategies
in browser storage are hidden, not deleted, so bringing local saving to
the web is an edit to PlatformPolicy.webBeta.

- Signed out on the web, My Library is a single Log In action (the
  existing auth dialog); search, sort, and New wait for sign-in. A
  restoring session shows the loading skeleton instead of the prompt.
- Signed in, My Library lists cloud strategies only; the editor's
  quick switcher no longer lists browser-stored strategies. Local
  strategy and folder creation refuse loudly if the policy hides them.
- DemoTag/DemoDialog are replaced by a quiet Beta tag whose dialog lists
  desktop-only and coming features from the policy and links the stable
  Windows installer.
- One helper, ensureFeatureAvailable, replaces the hard-coded "only
  supported in the Windows version" toasts: "<Feature> is desktop-only
  for now." or "<Feature> is coming to the web beta." It also gates the
  folder Export item, the lineup shortcut, and the Add lineup menu
  items, and the image button now stops before its upload dialog.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* Keep the hidden local library untouched and retry a live session on web

Review fixes for the web beta shell:

- Startup migration skips the on-device library where the policy hides
  it (StrategyMigrator.migrateLocalLibrary), so hidden records stay
  byte-identical until local access returns.
- Mouse back/forward records each strategy's source and reopens through
  it, so a cloud strategy sharing an id with a local copy never reopens
  from Hive. loadFromHive and saveToHive now refuse loudly where the
  policy hides the local library, as strategy and folder creation do.
- Signed in but unable to reach the cloud, My Library shows the
  connection error with a Retry that reinitializes Convex auth instead
  of a login prompt. The Shared tab and the cloud-unavailable state no
  longer open the login dialog over an existing session.
- The Beta tag leaves the editor strip; the library strip keeps it as
  the one deliberate exception to DESIGN.md's strip contents.
- Library tests now drive the real FolderNavigator, workspace, and
  create dialogs: restoring -> configuring -> ready, ready auth while
  the workspace is still local, and auth lost with the map picker or
  folder dialog open, each asserting the local boxes are unchanged.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
e5baf16da6Dara Adedeji committed on 9/25/2026, 9:09:24 AM· committed by GitHubparentb32d086
30 files changedLine totals unavailable