Skip to content

Lay foundation for workspaces#464

Draft
synzen wants to merge 17 commits into
mainfrom
worktree-teams-foundation
Draft

Lay foundation for workspaces#464
synzen wants to merge 17 commits into
mainfrom
worktree-teams-foundation

Conversation

@synzen

@synzen synzen commented Jun 7, 2026

Copy link
Copy Markdown
Owner

No description provided.

synzen added 15 commits June 7, 2026 18:02
The round-trip spec drives two real browser sessions through a
multi-redirect OAuth bootstrap, the one-time-code email verification, and
accept in a single test. That exceeds Playwright's 30s default budget, so
the invitee bootstrap's authenticated-shell wait would blow the timeout
and Playwright would tear down the context mid-goto ("Target page ...
has been closed"). Mark it test.slow() to match the sibling
self-accept-guard spec, which does the same two-session dance.
…tion

# Conflicts:
#	services/backend-api/client/src/features/feed/components/AddUserFeedDialog/index.tsx
#	services/backend-api/client/src/pages/UserSettings.tsx
#	services/backend-api/src/services/user-feeds/user-feeds.service.ts
#	services/backend-api/test/helpers/user-feeds.harness.ts
One member's personal Reddit grant backs every Reddit feed in a workspace
(Zapier/Buffer model): workspace feeds resolve ONLY the workspace connection
and personal feeds ONLY the creator's, with no fallback in either direction.

- Workspace.externalCredentials with connectedByUserId attribution; surfaced
  on the workspace detail endpoint as redditConnection ("Connected by X")
- Reddit OAuth login accepts ?workspaceId, carried via a session-stored state
  nonce (also fixes the previously hardcoded state="state" CSRF gap); the
  callback verifies workspace membership before exchanging the code
- Credential resolution by feed scope at every chokepoint: lookup-detail
  construction, the mandatory-connection gate, lookup-key sync (user-keyed
  sync now excludes workspace feeds), scheduled-fetch pipelines, delivery
  events, previews/test sends, and the credential refresh sweep
- Revoke-on-exit: when the connecting member leaves or is removed, the grant
  is revoked at Reddit, the connection is marked REVOKED, workspace feeds
  stop fetching with it, and every member is emailed (any member can
  reconnect with their own account)
- DELETE /workspaces/:slug/reddit-connection (any member) + workspace
  settings Integrations UI; reddit gates (UrlValidationResult, BrowseFeeds,
  EditUserFeedDialog, FixFeedRequestsCTA) are workspace-aware via FeedScope
…ree-teams-foundation

# Conflicts:
#	e2e/e2e-mock.sh
…etting exhaustion

- Map host.docker.internal to 127.0.0.1 on CI runners so the host-side
  browser can follow backend-issued OAuth redirects to the mock Discord
  and Reddit servers (Docker Desktop provides this mapping; Linux
  runners do not, leaving popups stuck on chrome-error://chromewebdata/)
- Only create the ephemeral Paddle notification setting for runs that
  include the e2e-paddle project; mocked web shards never receive real
  webhooks and were exhausting the sandbox's active-settings cap
- Reclaim stale ephemeral notification settings (leaked by hard-killed
  runners) before creating a new one, using a created= timestamp in the
  description to spare settings belonging to concurrent runs
@synzen synzen force-pushed the worktree-teams-foundation branch from ed0178d to 66200cc Compare June 11, 2026 09:35
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.

1 participant