Skip to content

feat(warehouse): cover 258 warehouse source kinds - #1145

Open
Gilbert09 wants to merge 3 commits into
mainfrom
tom/warehouse-registry-coverage
Open

feat(warehouse): cover 258 warehouse source kinds#1145
Gilbert09 wants to merge 3 commits into
mainfrom
tom/warehouse-registry-coverage

Conversation

@Gilbert09

@Gilbert09 Gilbert09 commented Aug 26, 2026

Copy link
Copy Markdown
Member

Problem

The detection registry knew 189 of PostHog's released data warehouse source
types. Users of the other released sources got no offer at all. GoogleSheets
was the only featured GA source that was missing.

An earlier revision of this PR also removed the Intercom, Plain and Polar
detectors, because the catalog lists a dwh_intercom, dwh_plain or
dwh_polar feature flag against each one. That was wrong, and commit
bd840d6b reverts it.

A flag name says nothing about who the flag lets through. All three flags are
active, cover a single group at 100 percent, and carry no property targeting:
dwh_plain (654465), dwh_intercom (682662) and dwh_polar (682661). Every
user can reach all three sources, so the wizard should keep detecting them.

Changes

  • Add 69 detectors. The registry now covers 258 kinds.
    • Databases (7): Firebase, Neon, PlanetScale MySQL, DynamoDB, MotherDuck,
      Databricks, SingleStore.
    • LLM and AI (5): Browserbase, E2B, Weights & Biases, LlamaCloud, Zep.
    • Payments (8): Lemon Squeezy, Razorpay, Adyen, ChartMogul, Airwallex,
      Flutterwave, Dodo Payments, Whop.
    • Email and marketing (10): Loops, Knock, Amazon SES, beehiiv, Mailtrap,
      Plunk, Ortto, Postscript, Marketo, Lob.
    • Comms (3): Telnyx, Plivo, Courier.
    • E-commerce (1): BigCommerce.
    • Dev and infrastructure (24): Algolia, Inngest, Trigger.dev, Ably, Netlify,
      Railway, Render, Fly.io, Heroku, DigitalOcean, Grafana, Better Stack,
      Honeycomb, Descope, FusionAuth, Hookdeck, n8n, dbt, Fastly, Bunny.net,
      Codecov, Sourcegraph, Temporal.io, Hatchet.
    • Productivity and sales (10): Google Sheets, Formbricks, Tally, Jotform,
      GitBook, WordPress, Clockify, DocuSign, PandaDoc, Gong.
    • Advertising (1): Dub.
  • Every new entry is in-cli. None of these sources has an OAuth-only field, so
    the agent can collect the credentials in the terminal.
  • Tell the agent to send the kind string as source_type, never the display
    label. PostHog rejects the label, for example Hugging Face against
    HuggingFace.

Every package name was checked against the npm registry, PyPI and RubyGems.
Every kind was checked against the live source catalog.

Known precision trade-offs

The file already documents the DATABASE_URL to Postgres trade-off. These four
new entries carry a comment in the same style:

  • Dbt — the signals prove the project uses dbt, not dbt Cloud. The source
    needs dbt Cloud credentials.
  • TemporalIO — the signals also match a self-hosted cluster. The source wants
    Temporal Cloud mTLS certificates.
  • Firebase — the firebase client SDK also covers auth-only projects, which
    have no data to import.
  • Wordpress — recall is low, because PHP composer.json is not a manifest we
    read.

Two candidates were rejected. PlanetScalePostgres has no distinguishable
footprint, because those projects use DATABASE_URL. Framer would only match
the Motion animation packages.

Ambiguous env keys use an exact match instead of a prefix: RENDER_API_KEY,
COURIER_AUTH_TOKEN, TALLY_API_KEY, LOB_API_KEY, DUB_API_KEY,
FLY_API_TOKEN and the three documented TRIGGER_* keys. Amazon SES matches
AWS_SES_ only, never a bare AWS_.

Test plan

Covered by CI. src/lib/warehouse-sources/__tests__/detect.test.ts gains:

  • npm, Python, Ruby and env-key cases for the new detectors.
  • A parameterized table of 14 env keys, each asserted to detect exactly one
    source.
  • The intended double detection: @neondatabase/serverless plus DATABASE_URL
    reports both Neon and Postgres.
  • Negatives: framer-motion and motion detect nothing, and a lone
    TRIGGER_WORKFLOW, COURIER_TRACKING_URL, RENDER_MODE or
    TALLY_LEDGER_ID key detects nothing.
  • The three removed kinds are no longer detectable.
  • A guard test that asserts every kind in SOURCE_DETECTORS is unique, and a
    second guard that every entry has a label and at least one signal.

Full suite: 2047 passed, 0 failed. Prettier and ESLint are clean. tsc --noEmit
reports the same 30 pre-existing errors as main, none in the files touched here.

Intercom, Plain and Polar sit behind the dwh_intercom, dwh_plain and
dwh_polar feature flags. Most users cannot finish the setup the wizard
offers, and in two weeks the wizard spent 42 offers on them.

The wizard cannot read those flags. It reads a flag snapshot, but that
snapshot comes from the wizard's own telemetry project, not the user's
PostHog project. The MCP has no flag-check tool either. So a per-entry
gate would have nothing to evaluate. Remove the three entries and keep
one comment that names the flags, so we can restore them later.
The registry covered 189 of the released data warehouse source types.
This adds 69 more, so the wizard now recognises 255 kinds.

The new entries cover databases (Firebase, Neon, PlanetScale MySQL,
DynamoDB, MotherDuck, Databricks, SingleStore), LLM and AI tools,
payments, email, comms, dev and infrastructure services, forms and
productivity tools. Google Sheets was the last missing featured GA
source.

Every entry is in-cli. None of these sources has an OAuth-only field,
so the agent can collect the credentials in the terminal.

Also tell the agent to send the kind string, not the display label, as
source_type. PostHog rejects the label.
@Gilbert09
Gilbert09 requested review from a team as code owners August 26, 2026 08:18
@github-actions

Copy link
Copy Markdown

🧙 Wizard CI

Run the Wizard CI and test your changes against wizard-workbench example apps by replying with a GitHub comment using one of the following commands:

Test all apps:

  • /wizard-ci all

Test all apps in a directory:

  • /wizard-ci ai-observability
  • /wizard-ci basic-integration
  • /wizard-ci mcp-analytics
  • /wizard-ci replay-vision
  • /wizard-ci revenue
  • /wizard-ci self-driving

Test an individual app:

  • /wizard-ci ai-observability/anthropic
  • /wizard-ci ai-observability/groq
  • /wizard-ci ai-observability/manual-capture
Show more apps
  • /wizard-ci ai-observability/openai
  • /wizard-ci ai-observability/openai-agents
  • /wizard-ci ai-observability/vercel-ai
  • /wizard-ci basic-integration/android
  • /wizard-ci basic-integration/angular
  • /wizard-ci basic-integration/astro
  • /wizard-ci basic-integration/django
  • /wizard-ci basic-integration/fastapi
  • /wizard-ci basic-integration/flask
  • /wizard-ci basic-integration/flutter
  • /wizard-ci basic-integration/javascript-node
  • /wizard-ci basic-integration/javascript-web
  • /wizard-ci basic-integration/laravel
  • /wizard-ci basic-integration/next-js
  • /wizard-ci basic-integration/nuxt
  • /wizard-ci basic-integration/python
  • /wizard-ci basic-integration/rails
  • /wizard-ci basic-integration/react-native
  • /wizard-ci basic-integration/react-router
  • /wizard-ci basic-integration/sveltekit
  • /wizard-ci basic-integration/swift
  • /wizard-ci basic-integration/tanstack-router
  • /wizard-ci basic-integration/tanstack-start
  • /wizard-ci basic-integration/vue
  • /wizard-ci mcp-analytics/custom-dispatcher
  • /wizard-ci mcp-analytics/typescript-sdk
  • /wizard-ci replay-vision/javascript-node
  • /wizard-ci replay-vision/next-js
  • /wizard-ci replay-vision/react-vite
  • /wizard-ci revenue/stripe
  • /wizard-ci self-driving/astro
  • /wizard-ci self-driving/fastapi
  • /wizard-ci self-driving/nuxt
  • /wizard-ci self-driving/react-router
  • /wizard-ci self-driving/sveltekit

Results will be posted here when complete.

{
kind: 'Firebase',
label: 'Firebase',
mode: 'in-cli',

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Medium: Credentials enter the model context

A malicious repository can add one of these package or environment-key signals and cause the wizard to request credentials for the detected source. The released warehouse skill collects credentials for every in-cli source as non-sensitive text because the PostHog creation tools reject secret-vault references, so the resulting API keys and passwords are returned directly to the agent and sent through the model context. This applies to all newly added in-cli entries; keep them on the deep-link path until source creation accepts an opaque credential reference or another host-side handoff that never exposes the plaintext to the agent.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

The finding is accurate, but it describes the existing design of the whole in-cli path. This PR does not introduce it.

The registry already holds 172 in-cli entries that collect credentials the same way. The reason is upstream: external-data-sources-create rejects secret-vault references, so the skill must collect plain-text values to pass to it. That constraint is documented in the warehouse skill, not accidental.

Moving only the new entries to deep-link would make them behave differently from every comparable existing source, and would stop the wizard connecting any of them from the terminal. That is the feature. It would also leave the 172 existing entries exposed, so it does not close the gap it names.

The real fix belongs in PostHog: source creation needs to accept an opaque credential reference. Tracked separately in PostHog/posthog#89015, with production evidence from agents that hit this.

Keeping the new entries on in-cli here.

@veria-ai

veria-ai Bot commented Aug 26, 2026

Copy link
Copy Markdown

PR overview

This pull request expands the warehouse source registry to cover 255 source kinds and removes the three previously flag-gated entries. It also configures how newly recognized sources are handled during warehouse setup.

One security issue remains open: newly added in-CLI source flows can collect API keys and passwords as plain text and expose them to the model context. A malicious repository can influence source detection and induce the wizard to request those credentials, creating a concrete credential-disclosure path; no issues have yet been addressed.

Open issues (1)

Fixed/addressed: 0 · PR risk: 8/10

This reverts commit 680e7aa.

The removal rested on a wrong reading. Intercom, Plain and Polar each declare
a feature flag in the source catalog, and I treated the presence of the flag
name as proof the source was gated.

A flag name says nothing about who the flag lets through. All three flags are
active, cover one group at 100 percent, and carry no property targeting:

  dwh_plain     654465
  dwh_intercom  682662
  dwh_polar     682661

So all three sources reach every user, and the wizard should keep detecting
them. The 42 offers in two weeks were correct, not wasted.

Restore the three detectors, and restore Plain to SELF_DRIVING_TOOL_KINDS.
The test that asserted the three were absent now asserts the opposite, so the
next reader sees why a declared flag is not a gate.
@Gilbert09 Gilbert09 changed the title feat(warehouse): cover 255 warehouse source kinds and drop the flag-gated three feat(warehouse): cover 258 warehouse source kinds Aug 26, 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.

1 participant