Synthetic synced-plugin discovery proof

Run seed.py with an empty directory argument. Set the enabled Claude provider homePath to that directory in the scenario start-app fixture. Select Claude as the default provider without sending a turn; all other real providers remain disabled. Set PROOF_CLAUDE_CONFIG_DIR to the same directory for the parameterized scenario copy. The executed scenario used a literal local fixture path, replaced by that environment variable in this public copy.

The fixture has no installed_plugins.json: demo:review is synced only, hidden:secret is disabled, foreign:private belongs to another account, and control is an ordinary local skill used during diagnosis.

The scenario uses one fresh project, a real server, and Chromium at 1280 by 800 with the light theme. No first-party OAuth login or live Claude turn is performed. The auth warning is expected for synthetic account metadata. Captures obscure private configuration paths and the model selector label; picker contents are unchanged. Videos show the composer region and stop before provider settings navigation.

AI-assisted; verified with the tests and tools listed above.

Before each enabled startup, rerun seed.py to reset settings and account metadata. For each restart check, write syncClaudeAiPlugins:false to the synthetic settings.json before starting the server, then run synced-plugin-disabled.e2e.ts. The enabled scenario intentionally ends before the restart; no server or browser is shared between those stages. A provider-status refresh alone retained a cached workspace entry during the exploratory toggle, so this proof uses a full restart.
