Skip to content

fix(data-warehouse): stop an account filter reading as a broken connection - #95857

Merged
trunk-io[bot] merged 1 commit into
masterfrom
posthog/dwh-account-filter-empty-state
Sep 7, 2026
Merged

fix(data-warehouse): stop an account filter reading as a broken connection#95857
trunk-io[bot] merged 1 commit into
masterfrom
posthog/dwh-account-filter-empty-state

Conversation

@Gilbert09

Copy link
Copy Markdown
Member

Problem

Someone connecting an ad platform in the data warehouse source wizard types their account ID into the account picker's filter, sees "No accounts accessible by this integration", and concludes the connection is broken. Session scans of the new-source flow caught a user going on to disconnect a working integration after this.

  • The picker loads accounts server-side, so an unmatched filter term returns an empty list.
  • The picker rendered the empty list as "no accounts accessible", the wording reserved for a connection that can reach nothing.
  • A second warning under the field told the user to reconnect the integration to grant access to more accounts.

Changes

  • The picker now says "No accounts match your filter. Clear it to see every account this connection can reach." when a filter term is active.
  • The "reconnect to grant access to more accounts" warning stays hidden while a filter is active. It only appears when the unfiltered list is genuinely empty.
  • The "your saved account isn't in the accessible list" warning stays hidden while a filter is active, for the same reason.
  • InputWithSuggestionsDropdown prefers its no-match message over its empty message whenever a search term is set. Its emptyMessage doc comment says so.

Nothing looks different when no filter is active, so the screenshots would be identical.

How did you test this code?

  • New test in InputWithSuggestionsDropdown.test.tsx: an empty suggestion list shows the empty message, and shows the no-match message once a filter term is typed. It catches a return to the old branch order, which is the bug this PR fixes. Confirmed it fails against the pre-fix ternary.
  • Not run: the repo-wide typecheck passes over the touched files, but fails elsewhere in this sandbox because the nested quill workspace is not built.

Automatic notifications

  • Publish to changelog?

Docs update

None.

🤖 Agent context

Autonomy: Fully autonomous

Written by Claude Code from a review of Replay Vision session summaries of the data-warehouse new-source onboarding flow. The summaries stayed out of the diff and this description: the friction is described generically and no organisation name, account value, or host from them appears anywhere in the PR.

Skills invoked: /writing-tests, /writing-user-facing-copy, /writing-pr-descriptions.

No duplicate: searched open PRs for the account picker, the wizard, and InputWithSuggestionsDropdown. #91610 touches the same component but only renames a kea action, so it does not address this.

…ction

The account picker in the source wizard filters server-side, so a search term that
matches nothing returns an empty account list. The picker read that list as "no
accounts accessible by this integration" and prompted the user to reconnect,
even though the connection could reach plenty of accounts.

Hold the empty-list wording and the reconnect prompt back until the list is
unfiltered, and give the filtered case its own message.

Generated-By: PostHog Desktop
Task-Id: 8982446c-3fab-4f43-9797-55c511b4c9e4
Copilot AI lite review requested due to automatic review settings September 7, 2026 02:08
@trunk-io

trunk-io Bot commented Sep 7, 2026

Copy link
Copy Markdown

😎 Merged successfully - details.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@github-actions

github-actions Bot commented Sep 7, 2026

Copy link
Copy Markdown
Contributor

🦔 Hogbox preview · ✅ ready

▶ Open the preview

🔑 Login test@posthog.com / 12345678 (demo data)
🧩 Running this PR's backend and frontend, on the PostHog :master base
🔗 Link stable across rebuilds — a re-push swaps the box underneath, the URL stays
🔒 Access tailnet only (PostHog VPN)
🛠️ Admin inspect & debug state in hogland
💤 Idle sleeps after ~30 min idle (snapshot to S3, zero node cost) and wakes on your next visit in ~30s, behind a brief "waking up" screen

commit 61f3139 · box box-ef5427b4ce8b · ready in 628s (push → usable) · build log · rebuilds on every push, torn down on close

@pr-assigner-resolver-posthog
pr-assigner-resolver-posthog Bot requested a review from a team September 7, 2026 02:09
@github-actions

github-actions Bot commented Sep 7, 2026

Copy link
Copy Markdown
Contributor

🤖 CI report

Trunk lane — non-backend lane

This PR is assigned to the non-backend lane. It does not run backend Python tests and may merge in parallel with PRs in other lanes.

⚠️ Complexity (TypeScript) — 2 functions above the limit (max 13)

Cyclomatic complexity above the limit in changed typescript files (10 for production files, 15 for test files). Warn only: worth simplifying when you next touch these functions.

Function Location Complexity Limit
<anonymous> products/data_warehouse/frontend/shared/components/forms/IntegrationAccountSelector.tsx:480 13 10
IntegrationAccountSelectorInner products/data_warehouse/frontend/shared/components/forms/IntegrationAccountSelector.tsx:102 11 10
Bundle size — no change

Uncompressed size of every built .js bundle, compared against the base branch.

Total: 68.62 MiB · no change

No file changed by more than 1000 B.

Posted automatically by build-bundle-size-report · uncompressed bytes from dist-report

Eager graph — within budget

How much code each root ships on the eager path — downloaded and parsed before the surface is interactive. Measured from the esbuild output chunks (post-tree-shake, static imports only); lazy import() / React.lazy chunks are not counted.

Root Eager (shipped) Δ vs base Budget
entry (logged-out pages, app bootstrap)
src/index.tsx
1.50 MiB · 22 files no change ███░░░░░░░ 33.2% of 4.51 MiB
logged-out boot: index + App + bootApp (preloaded by every page, including /login)
src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts
5.25 MiB · 668 files no change █████████░ 93.3% of 5.63 MiB
authenticated shell (every logged-in page)
src/scenes/AuthenticatedShell.tsx
7.67 MiB · 2,677 files no change █████████░ 87.4% of 8.77 MiB

🟢 node_modules/monaco-editor/ stays out of src/index.tsx
🟢 src/lib/components/ActivityLog/describers stays out of src/index.tsx
🟢 [object Object] stays out of src/index.tsx
🟢 [object Object] stays out of src/index.tsx
🟢 node_modules/monaco-editor/ stays out of src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts
🟢 src/layout/navigation-3000/navigationLogic.tsx stays out of src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts
🟢 src/scenes/dashboard/dashboardLogic.tsx stays out of src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts
🟢 node_modules/monaco-editor/ stays out of src/scenes/AuthenticatedShell.tsx
🟢 src/lib/components/ActivityLog/describers stays out of src/scenes/AuthenticatedShell.tsx
🟢 [object Object] stays out of src/scenes/AuthenticatedShell.tsx
🟢 src/scenes/session-recordings/player/sessionRecordingPlayerLogic.ts stays out of src/scenes/AuthenticatedShell.tsx
🟢 [object Object] stays out of src/scenes/AuthenticatedShell.tsx
🟢 [object Object] stays out of src/scenes/AuthenticatedShell.tsx

Largest files eagerly shipped from src/index.tsx
Size File
126.8 KiB ../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.production.min.js
24.6 KiB ../node_modules/.pnpm/buffer@6.0.3/node_modules/buffer/index.js
6.3 KiB ../node_modules/.pnpm/react@18.3.1/node_modules/react/cjs/react.production.min.js
4.5 KiB ../node_modules/.pnpm/@jspm+core@2.1.0/node_modules/@jspm/core/nodelibs/browser/process.js
3.9 KiB ../node_modules/.pnpm/scheduler@0.23.2/node_modules/scheduler/cjs/scheduler.production.min.js
1.4 KiB ../node_modules/.pnpm/base64-js@1.5.1/node_modules/base64-js/index.js
1.3 KiB src/RootErrorBoundary.tsx
1000 B src/index.tsx
912 B ../node_modules/.pnpm/ieee754@1.2.1/node_modules/ieee754/index.js
854 B src/scenes/ChunkLoadErrorBoundary.tsx
Largest files eagerly shipped from src/index.tsx + src/scenes/App.tsx + src/scenes/bootApp.ts
Size File
276.1 KiB ../node_modules/.pnpm/posthog-js@1.427.2_@types+react@18.3.27_react@18.3.1/node_modules/posthog-js/dist/module.mjs
267.7 KiB ../node_modules/.pnpm/@posthog+icons@0.38.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@posthog/icons/dist/posthog-icons.es.js
255.2 KiB src/taxonomy/core-filter-definitions-by-group.json
126.8 KiB ../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.production.min.js
104.4 KiB src/lib/api.ts
79.1 KiB src/products.tsx
68.8 KiB src/lib/lemon-ui/icons/icons.tsx
62.5 KiB src/lib/utils/eventUsageLogic.ts
38.8 KiB ../node_modules/.pnpm/@dnd-kit+core@6.0.8_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@dnd-kit/core/dist/core.esm.js
33.9 KiB ../node_modules/.pnpm/kea@4.0.0-pre.6_patch_hash=139b8d1f1304f9d9da452a9a1244c94ea679dbcb85687d8999563146879fb6f5_react@18.3.1/node_modules/kea/lib/index.cjs.js
Largest files eagerly shipped from src/scenes/AuthenticatedShell.tsx
Size File
276.1 KiB ../node_modules/.pnpm/posthog-js@1.427.2_@types+react@18.3.27_react@18.3.1/node_modules/posthog-js/dist/module.mjs
267.7 KiB ../node_modules/.pnpm/@posthog+icons@0.38.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@posthog/icons/dist/posthog-icons.es.js
255.2 KiB src/taxonomy/core-filter-definitions-by-group.json
153.8 KiB ../node_modules/.pnpm/re2js@0.4.1/node_modules/re2js/build/index.esm.js
126.8 KiB ../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.production.min.js
104.4 KiB src/lib/api.ts
95.8 KiB ../packages/quill/packages/quill/dist/index.js
93.3 KiB ../node_modules/.pnpm/prosemirror-view@1.40.1/node_modules/prosemirror-view/dist/index.js
90.6 KiB ../node_modules/.pnpm/@tiptap+core@3.20.6_@tiptap+pm@3.20.6/node_modules/@tiptap/core/dist/index.js
79.1 KiB src/products.tsx

Posted automatically by check-eager-graph · sizes are eager output bytes (shipped, post-tree-shake) from the esbuild metafile · part of #32479

Toolbar bundle — eager 2.28 MiB within budget

What the toolbar ships to customer pages, measured from the esbuild output (minified, post-tree-shake). The eager set is the entry plus everything statically imported from it — fetched before any feature runs; deferred chunks load lazily. The eager guardrail is 5.72 MiB. Each output file must also stay below 10 MB, where CloudFront stops compressing it. The module boundary is enforced separately by check-toolbar-graph.

Metric Size Δ vs base Budget
Eager (shipped)
entry + static imports
2.28 MiB · 18 files no change ████░░░░░░ 39.9% of 5.72 MiB
Deferred (lazy) 2.11 MiB · 45 files no change n/a — loads on demand
Loader dist/toolbar.js 1.1 KiB no change █░░░░░░░░░ 5.8% of 19.5 KiB
Largest eagerly-shipped chunks
Size File
756.3 KiB dist/toolbar/toolbar-app-IHRJKSXI.css
603.1 KiB dist/toolbar/chunk-chunk-NCE4QL3M.js
484.7 KiB dist/toolbar/chunk-chunk-D33R7XDZ.js
136.5 KiB dist/toolbar/chunk-chunk-BXI27EUT.js
131.8 KiB dist/toolbar/chunk-chunk-FDH2IBXT.js
72.2 KiB dist/toolbar/toolbar-app-CJMMARKZ.js
69.0 KiB dist/toolbar/chunk-chunk-TSAL54PB.js
35.6 KiB dist/toolbar/chunk-chunk-VLYPUESV.js
21.0 KiB dist/toolbar/chunk-chunk-LPBZV4EM.js
6.8 KiB dist/toolbar/chunk-chunk-DV7IWQNF.js

Posted automatically by check-toolbar-size · sizes are toolbar output bytes (shipped, post-tree-shake) from the esbuild metafile

Dist folder size — 🔺 +1.1 KiB (+0.0%)

Total size of the built frontend/dist folder (all assets), compared against the base branch.

Total: 1457.43 MiB · 🔺 +1.1 KiB (+0.0%)

Playwright — all passed

All tests passed.

View test results →

@Gilbert09 Gilbert09 added the stamphog Request AI approval (no full review) label Sep 7, 2026 — with PostHog
@trunk-io

trunk-io Bot commented Sep 7, 2026

Copy link
Copy Markdown

Static BadgeStatic BadgeStatic Badge

View Full Report ↗︎Docs

@stamphog stamphog Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approved.

Contained frontend copy/logic fix with a regression test covering the exact bug; no risky territory (no data model, auth, billing, or API contract changes), so no independent assurance is required despite the author being off the owning team.

  • Author wrote 0% of the modified lines and has 11 merged PRs in these paths (familiarity MODERATE).
  • copilot-pull-request-reviewer[bot] reviewed the current head.
Gate mechanics and policy version
Gate Result
prerequisites all clear
deny-list no deny categories matched
size 37L, 2F substantive, 79L/3F incl. docs/generated/snapshots — within ceiling
tier T1-agent / T1b-small (79L, 3F, single-area, fix)
stamphog 2.0.0b4 .stamphog/policy.yml @ 61f3139 · reviewed head 61f3139

@talyn-app

talyn-app Bot commented Sep 7, 2026

Copy link
Copy Markdown
Contributor

/trunk merge

@trunk-io
trunk-io Bot merged commit 82e528b into master Sep 7, 2026
240 checks passed
@trunk-io
trunk-io Bot deleted the posthog/dwh-account-filter-empty-state branch September 7, 2026 12:12
@deployment-status-posthog

deployment-status-posthog Bot commented Sep 7, 2026

Copy link
Copy Markdown

Deploy status

Environment Status Deployed At Workflow
dev ✅ Deployed 2026-09-07 12:41 UTC Run
prod-us ✅ Deployed 2026-09-07 12:57 UTC Run
prod-eu ✅ Deployed 2026-09-07 12:59 UTC Run

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

stamphog Request AI approval (no full review)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants