Skip to content

Integrations soft launch: no error without a server, a new-feature note, experimental toggle behind a facilitator unlock - #1835

Closed
michielbdejong wants to merge 3 commits into
developfrom
claude/integrations-soft-launch
Closed

michielbdejong wants to merge 3 commits into
developfrom
claude/integrations-soft-launch

Conversation

@michielbdejong

Copy link
Copy Markdown
Contributor

For the integrations soft launch on app.atomic.place.

Merging to develop affects the deployed app (staging deploys from develop). @michielbdejong, please confirm before this is merged.

What changes

  1. No error without a server. "Try Atomic" → Integrations showed Error: Connection query failed; refusing to infer an empty collection: IntegrationStore asked /query for the drive's connections, and on app.atomic.place (no node behind the origin) that returns the SPA's HTML. A new driveHasServer(store, drive) (false for a local-only drive such as the demo workspace, and for an origin probed as having no node) now skips the connection and installation queries, which leaves the lists empty and shows no alert. The /plugin-catalog fetch is skipped on a nodeless origin for the same reason.
  2. A note at the top of Integrations: "This is a new feature. Plugins will show up here soon for you to try out." (Once experimental plugins are switched on, it reads "…You are seeing experimental plugins to try out.")
  3. The "Show experimental plugins" toggle is hidden on Integrations and in Settings, unless the user already has the preference switched on, or it was unlocked on this device.

Facilitator unlock (user-testing sessions)

On the tester's device, open:

https://app.atomic.place/app/integrations?preview=plugins

That stores integration-preview-unlocked:<agent DID> = true in localStorage and shows the "Show experimental plugins" checkbox on Integrations and in Settings → plugins. It is per agent and per device. Nothing in the UI links to it, so ordinary users won't find it. Anyone who flips the switch keeps it, so it can't disappear while they're using it. To lock the device again, turn the toggle off and remove that localStorage key.

Left for phase 2

The default integration proxy URL is unchanged, and VITE_INTEGRATION_PROXY_URL is not set. That waits until the proxy is deployed (ontola/atomic-saas#149).

Tests

  • New e2e/tests/integration-demo.spec.ts: opens the demo workspace, answers /query with HTML as app.atomic.place does, and checks for no alert, no query, the note, and no toggle. It fails on develop on the error alert and passes here.
  • e2e/tests/integration-visibility.spec.ts: covers the unlock, the missing toggle for ordinary users, and the missing toggle in Settings. All 5 pass locally. One run had a flake in "visibility toggles are hidden when the catalog enables nothing" (catalog stuck on "Loading integrations…"). It passed on 3 reruns.
  • vitest: integrationVisibility.test.ts, driveData.test.ts (driveHasServer), useIntegrationVisibility.test.ts. Typecheck and pnpm run lint are clean. The only lint output is warnings of kinds that already appear in this code.
  • The .po catalogs are at the dev server's fixed point: no churn after a clean .wuchale and a vite run.

Screenshots

These show the no-server demo workspace with /query answered by HTML. Before and after at desktop and 375 px, plus the facilitator-unlocked state. They are attached in the comments below or shared in chat.

🤖 Generated with Claude Code

Michiel de Jong and others added 2 commits September 25, 2026 16:46
…p server queries without a server

The demo workspace (and any drive on an origin with no node) no longer asks
/query for its connections, which on app.atomic.place returned the app's HTML
and showed "Connection query failed". A note at the top says the feature is
new. The "Show experimental plugins" toggle is only offered to users who
already turned it on, or who unlocked it on this device through
/integrations?preview=plugins during a user-testing session.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The demo spec now serves `/query` the SPA's HTML, the way the hosted origin
with no node answers it, waits for the page to go quiet, and checks there is
no error alert, no query was sent, the new-feature note shows and the
experimental toggle does not. On develop it fails on the "Connection query
failed" alert.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@michielbdejong

Copy link
Copy Markdown
Contributor Author

Merge-risk triage (2026-09-28). This is a read-only review of this PR's own diff. The rule it applies: nothing that works today may break for existing users or clients, and new behaviour is added alongside the old. The stack is being rebased onto develop as one chain before merging, so line references are against the current stacked base.

Verdict: RISKY: hold for a maintainer decision

It removes behaviour current users have, and ships a hidden unlock to staging:

  • "Show experimental plugins" is hidden on Integrations and in Settings unless the user already turned it on or the device was unlocked (IntegrationSettings.tsx:47, useIntegrationVisibility.ts:228).
  • It flips an existing e2e assertion from toBeVisible() to toHaveCount(0) (e2e/tests/integration-visibility.spec.ts:165-168), which breaks the no-existing-test-breaks rule.
  • It ships a hidden ?preview=plugins URL unlock (IntegrationStore.tsx:95). It only reveals a UI preference, so it's not a privilege escalation.
  • It shows a "This is a new feature" note to every user.

The driveHasServer part (no error alert on a demo or server-less drive) is an additive bug fix and could be split out as a safe PR. Conflicts with develop are only the four .po catalogs: keep both sides, or rebase and run pnpm clean-translations with vite stopped.

🤖 Generated with Claude Code

Conflicts only in the translation catalogs, where both sides appended
entries at the end; kept both and confirmed with a vite run that the
result is the extractor's fixed point.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@michielbdejong

Copy link
Copy Markdown
Contributor Author

Develop is merged in (469bcc0), and this merges cleanly again. The only conflicts were in the .po files, where both sides were kept; the catalogs are at the extractor's fixed point. Vitest, typecheck, lint and the Playwright integration-demo and integration-visibility specs all pass. Michiel approved it on 25 Sep, so it's ready for a trekmeester batch.

joepio commented Oct 5, 2026

Copy link
Copy Markdown
Member

Landed on develop in the combined batch #2060 (95707c0), tested together in one full run. Closing as included.


Generated by Claude Code

@joepio joepio closed this Oct 5, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants