Skip to content

feat(cli-analytics): event capture pipeline#3893

Closed
DanielVisca wants to merge 1 commit into
posthog-code/cli-analytics-identity-consentfrom
posthog-code/cli-analytics-pipeline
Closed

feat(cli-analytics): event capture pipeline#3893
DanielVisca wants to merge 1 commit into
posthog-code/cli-analytics-identity-consentfrom
posthog-code/cli-analytics-pipeline

Conversation

@DanielVisca

@DanielVisca DanielVisca commented Jun 18, 2026

Copy link
Copy Markdown
Contributor

Problem

Changes

Release info Sub-libraries affected

Libraries affected

  • All of them
  • posthog-js (web)
  • posthog-js-lite (web lite)
  • posthog-node
  • posthog-react-native
  • @posthog/react-native-plugin
  • @posthog/react
  • @posthog/ai
  • @posthog/convex
  • @posthog/next
  • @posthog/nextjs-config
  • @posthog/nuxt
  • @posthog/rollup-plugin
  • @posthog/webpack-plugin
  • @posthog/types

Checklist

  • Tests for new code
  • Accounted for the impact of any changes across different platforms
  • Accounted for backwards compatibility of any changes (no breaking changes!)
  • Took care not to unnecessarily increase the bundle size

If releasing new changes

  • Ran pnpm changeset to generate a changeset file

🤖 Agent context

Autonomy: Human-driven (agent-assisted) — or — Fully autonomous


Created with PostHog Code

The sanitize -> truncate -> beforeSend -> capture pipeline shared by every
event: secret redaction, size bounding, $cli_* / $exception property mapping,
and the sink that enforces consent and debug mode at a single chokepoint.

Generated-By: PostHog Code
Task-Id: b56cf1bb-97f1-4daf-a65c-01a2cdb12eaa

DanielVisca commented Jun 18, 2026

Copy link
Copy Markdown
Contributor Author

@github-actions

github-actions Bot commented Jun 18, 2026

Copy link
Copy Markdown
Contributor

📝 No Changeset Found

This PR doesn't include a changeset. A changeset is required to release a new version.

How to add a changeset

Run this command and follow the prompts:

pnpm changeset

Remember: Never use major version bumps for posthog-js as it's autoloaded by clients.

@github-actions

Copy link
Copy Markdown
Contributor
⚠️ `@posthog/cli-analytics` is modified but this PR has no changeset

This is informational — the PR is not blocked. Click the triangle above to collapse, or push a fix and this comment will auto-delete.

Modified in this PR but no changeset added:

  • @posthog/cli-analytics

If this change should ship, run pnpm changeset and select a bump level.
If it isn't user-facing (refactor with no behavior change, internal tooling, generated files), no action needed.

@github-actions

Copy link
Copy Markdown
Contributor

@github-actions

Copy link
Copy Markdown
Contributor

Size Change: +41.4 kB (+0.24%)

Total Size: 17.1 MB

Filename Size Change
packages/cli-analytics/dist/extensions/exceptions.js 1.91 kB +1.91 kB (new file) 🆕
packages/cli-analytics/dist/extensions/exceptions.mjs 532 B +532 B (new file) 🆕
packages/cli-analytics/dist/extensions/posthog-events.js 7.67 kB +7.67 kB (new file) 🆕
packages/cli-analytics/dist/extensions/posthog-events.mjs 5.06 kB +5.06 kB (new file) 🆕
packages/cli-analytics/dist/extensions/sanitization.js 2.44 kB +2.44 kB (new file) 🆕
packages/cli-analytics/dist/extensions/sanitization.mjs 1.25 kB +1.25 kB (new file) 🆕
packages/cli-analytics/dist/extensions/sink.js 4.08 kB +4.08 kB (new file) 🆕
packages/cli-analytics/dist/extensions/sink.mjs 2.29 kB +2.29 kB (new file) 🆕
packages/cli-analytics/dist/extensions/truncation.js 8.91 kB +8.91 kB (new file) 🆕
packages/cli-analytics/dist/extensions/truncation.mjs 7.22 kB +7.22 kB (new file) 🆕
ℹ️ View Unchanged
Filename Size Change
packages/ai/dist/anthropic/index.cjs 28.1 kB 0 B
packages/ai/dist/anthropic/index.mjs 27.7 kB 0 B
packages/ai/dist/gemini/index.cjs 36.5 kB 0 B
packages/ai/dist/gemini/index.mjs 36.3 kB 0 B
packages/ai/dist/index.cjs 55.2 kB 0 B
packages/ai/dist/index.mjs 55.1 kB 0 B
packages/ai/dist/langchain/index.cjs 34.7 kB 0 B
packages/ai/dist/langchain/index.mjs 34.7 kB 0 B
packages/ai/dist/openai-agents/index.cjs 27.8 kB 0 B
packages/ai/dist/openai-agents/index.mjs 27.7 kB 0 B
packages/ai/dist/openai/index.cjs 77.5 kB 0 B
packages/ai/dist/openai/index.mjs 77.2 kB 0 B
packages/ai/dist/otel/index.cjs 17.2 kB 0 B
packages/ai/dist/otel/index.mjs 17.1 kB 0 B
packages/ai/dist/vercel/index.cjs 47.3 kB 0 B
packages/ai/dist/vercel/index.mjs 47.3 kB 0 B
packages/browser/dist/all-external-dependencies.js 270 kB 0 B
packages/browser/dist/array.full.es5.js 377 kB 0 B
packages/browser/dist/array.full.js 457 kB 0 B
packages/browser/dist/array.full.no-********.js 535 kB 0 B
packages/browser/dist/array.js 210 kB 0 B
packages/browser/dist/array.no-********.js 233 kB 0 B
packages/browser/dist/conversations.js 67.6 kB 0 B
packages/browser/dist/crisp-chat-integration.js 1.97 kB 0 B
packages/browser/dist/customizations.full.js 19 kB 0 B
packages/browser/dist/dead-clicks-autocapture.js 14.5 kB 0 B
packages/browser/dist/default-extensions.js 209 kB 0 B
packages/browser/dist/element-inference.js 5.69 kB 0 B
packages/browser/dist/exception-autocapture.js 11.8 kB 0 B
packages/browser/dist/extension-bundles.js 118 kB 0 B
packages/browser/dist/external-scripts-loader.js 3.11 kB 0 B
packages/browser/dist/intercom-integration.js 2.03 kB 0 B
packages/browser/dist/lazy-********.js 157 kB 0 B
packages/browser/dist/logs.js 40.6 kB 0 B
packages/browser/dist/main.js 215 kB 0 B
packages/browser/dist/module.full.js 459 kB 0 B
packages/browser/dist/module.full.no-********.js 538 kB 0 B
packages/browser/dist/module.js 214 kB 0 B
packages/browser/dist/module.no-********.js 236 kB 0 B
packages/browser/dist/module.slim.js 109 kB 0 B
packages/browser/dist/module.slim.no-********.js 116 kB 0 B
packages/browser/dist/posthog-********.js 157 kB 0 B
packages/browser/dist/product-tours-preview.js 76.4 kB 0 B
packages/browser/dist/product-tours.js 115 kB 0 B
packages/browser/dist/recorder-v2.js 104 kB 0 B
packages/browser/dist/recorder.js 104 kB 0 B
packages/browser/dist/rrweb-plugin-console-record.js 6.67 kB 0 B
packages/browser/dist/rrweb-types.js 2.33 kB 0 B
packages/browser/dist/rrweb.js 285 kB 0 B
packages/browser/dist/surveys-preview.js 77.9 kB 0 B
packages/browser/dist/surveys.js 96.5 kB 0 B
packages/browser/dist/tracing-headers.js 3.36 kB 0 B
packages/browser/dist/web-vitals-with-attribution.js 11.8 kB 0 B
packages/browser/dist/web-vitals.js 6.39 kB 0 B
packages/browser/react/dist/esm/index.js 20.9 kB 0 B
packages/browser/react/dist/esm/slim/index.js 17.3 kB 0 B
packages/browser/react/dist/esm/surveys/index.js 4.68 kB 0 B
packages/browser/react/dist/umd/index.js 24.2 kB 0 B
packages/browser/react/dist/umd/slim/index.js 20.1 kB 0 B
packages/browser/react/dist/umd/surveys/index.js 5.45 kB 0 B
packages/cli-analytics/dist/extensions/agent-detection.js 4.41 kB 0 B
packages/cli-analytics/dist/extensions/agent-detection.mjs 3.14 kB 0 B
packages/cli-analytics/dist/extensions/consent.js 2.04 kB 0 B
packages/cli-analytics/dist/extensions/consent.mjs 646 B 0 B
packages/cli-analytics/dist/extensions/constants.js 3.41 kB 0 B
packages/cli-analytics/dist/extensions/constants.mjs 1.34 kB 0 B
packages/cli-analytics/dist/extensions/environment.js 2.02 kB 0 B
packages/cli-analytics/dist/extensions/environment.mjs 631 B 0 B
packages/cli-analytics/dist/extensions/event-types.js 1.39 kB 0 B
packages/cli-analytics/dist/extensions/event-types.mjs 170 B 0 B
packages/cli-analytics/dist/extensions/identity.js 3.76 kB 0 B
packages/cli-analytics/dist/extensions/identity.mjs 1.93 kB 0 B
packages/cli-analytics/dist/extensions/ids.js 2.01 kB 0 B
packages/cli-analytics/dist/extensions/ids.mjs 637 B 0 B
packages/cli-analytics/dist/extensions/intent.js 1.9 kB 0 B
packages/cli-analytics/dist/extensions/intent.mjs 619 B 0 B
packages/cli-analytics/dist/extensions/logger.js 1.44 kB 0 B
packages/cli-analytics/dist/extensions/logger.mjs 204 B 0 B
packages/cli-analytics/dist/extensions/session.js 1.37 kB 0 B
packages/cli-analytics/dist/extensions/session.mjs 129 B 0 B
packages/cli-analytics/dist/types.js 603 B 0 B
packages/cli-analytics/dist/types.mjs 0 B 0 B 🆕
packages/cli-analytics/dist/version.js 1.21 kB 0 B
packages/cli-analytics/dist/version.mjs 45 B 0 B
packages/convex/dist/client/feature-flags/crypto.js 461 B 0 B
packages/convex/dist/client/feature-flags/evaluator.js 16.5 kB 0 B
packages/convex/dist/client/feature-flags/index.js 196 B 0 B
packages/convex/dist/client/feature-flags/match-********.js 14.8 kB 0 B
packages/convex/dist/client/feature-flags/types.js 44 B 0 B
packages/convex/dist/client/index.js 14.6 kB 0 B
packages/convex/dist/component/_generated/api.js 712 B 0 B
packages/convex/dist/component/_generated/component.js 212 B 0 B
packages/convex/dist/component/_generated/dataModel.js 230 B 0 B
packages/convex/dist/component/_generated/server.js 3.74 kB 0 B
packages/convex/dist/component/convex.config.js 1.11 kB 0 B
packages/convex/dist/component/crons.js 1.4 kB 0 B
packages/convex/dist/component/lib.js 21.4 kB 0 B
packages/convex/dist/component/schema.js 694 B 0 B
packages/convex/dist/component/version.js 68 B 0 B
packages/core/dist/cookie.js 5.34 kB 0 B
packages/core/dist/cookie.mjs 3.12 kB 0 B
packages/core/dist/error-tracking/chunk-ids.js 2.54 kB 0 B
packages/core/dist/error-tracking/chunk-ids.mjs 1.31 kB 0 B
packages/core/dist/error-tracking/coercers/dom-exception-coercer.js 2.3 kB 0 B
packages/core/dist/error-tracking/coercers/dom-exception-coercer.mjs 993 B 0 B
packages/core/dist/error-tracking/coercers/error-coercer.js 2.02 kB 0 B
packages/core/dist/error-tracking/coercers/error-coercer.mjs 794 B 0 B
packages/core/dist/error-tracking/coercers/error-event-coercer.js 1.76 kB 0 B
packages/core/dist/error-tracking/coercers/error-event-coercer.mjs 513 B 0 B
packages/core/dist/error-tracking/coercers/event-coercer.js 1.82 kB 0 B
packages/core/dist/error-tracking/coercers/event-coercer.mjs 548 B 0 B
packages/core/dist/error-tracking/coercers/index.js 6.79 kB 0 B
packages/core/dist/error-tracking/coercers/index.mjs 326 B 0 B
packages/core/dist/error-tracking/coercers/object-coercer.js 3.46 kB 0 B
packages/core/dist/error-tracking/coercers/object-coercer.mjs 2.07 kB 0 B
packages/core/dist/error-tracking/coercers/primitive-coercer.js 1.67 kB 0 B
packages/core/dist/error-tracking/coercers/primitive-coercer.mjs 419 B 0 B
packages/core/dist/error-tracking/coercers/promise-rejection-event.js 2.59 kB 0 B
packages/core/dist/error-tracking/coercers/promise-rejection-event.mjs 1.25 kB 0 B
packages/core/dist/error-tracking/coercers/string-coercer.js 2.01 kB 0 B
packages/core/dist/error-tracking/coercers/string-coercer.mjs 820 B 0 B
packages/core/dist/error-tracking/coercers/utils.js 2.06 kB 0 B
packages/core/dist/error-tracking/coercers/utils.mjs 716 B 0 B
packages/core/dist/error-tracking/error-properties-builder.js 5.56 kB 0 B
packages/core/dist/error-tracking/error-properties-builder.mjs 4.23 kB 0 B
packages/core/dist/error-tracking/exception-steps.js 6.87 kB 0 B
packages/core/dist/error-tracking/exception-steps.mjs 4.71 kB 0 B
packages/core/dist/error-tracking/index.js 4.74 kB 0 B
packages/core/dist/error-tracking/index.mjs 191 B 0 B
packages/core/dist/error-tracking/parsers/base.js 1.83 kB 0 B
packages/core/dist/error-tracking/parsers/base.mjs 464 B 0 B
packages/core/dist/error-tracking/parsers/chrome.js 2.73 kB 0 B
packages/core/dist/error-tracking/parsers/chrome.mjs 1.32 kB 0 B
packages/core/dist/error-tracking/parsers/gecko.js 2.47 kB 0 B
packages/core/dist/error-tracking/parsers/gecko.mjs 1.13 kB 0 B
packages/core/dist/error-tracking/parsers/index.js 4.75 kB 0 B
packages/core/dist/error-tracking/parsers/index.mjs 2.1 kB 0 B
packages/core/dist/error-tracking/parsers/node.js 3.94 kB 0 B
packages/core/dist/error-tracking/parsers/node.mjs 2.68 kB 0 B
packages/core/dist/error-tracking/parsers/opera.js 2.26 kB 0 B
packages/core/dist/error-tracking/parsers/opera.mjs 746 B 0 B
packages/core/dist/error-tracking/parsers/safari.js 1.88 kB 0 B
packages/core/dist/error-tracking/parsers/safari.mjs 574 B 0 B
packages/core/dist/error-tracking/parsers/winjs.js 1.72 kB 0 B
packages/core/dist/error-tracking/parsers/winjs.mjs 426 B 0 B
packages/core/dist/error-tracking/types.js 1.33 kB 0 B
packages/core/dist/error-tracking/types.mjs 131 B 0 B
packages/core/dist/error-tracking/utils.js 1.8 kB 0 B
packages/core/dist/error-tracking/utils.mjs 604 B 0 B
packages/core/dist/eventemitter.js 1.78 kB 0 B
packages/core/dist/eventemitter.mjs 571 B 0 B
packages/core/dist/featureFlagUtils.js 5.83 kB 0 B
packages/core/dist/featureFlagUtils.mjs 3.54 kB 0 B
packages/core/dist/gzip.js 5.72 kB 0 B
packages/core/dist/gzip.mjs 3.84 kB 0 B
packages/core/dist/index.js 15.1 kB 0 B
packages/core/dist/index.mjs 1.48 kB 0 B
packages/core/dist/logs/index.js 10.8 kB 0 B
packages/core/dist/logs/index.mjs 9.15 kB 0 B
packages/core/dist/logs/logs-utils.js 6.61 kB 0 B
packages/core/dist/logs/logs-utils.mjs 4.5 kB 0 B
packages/core/dist/logs/types.js 603 B 0 B
packages/core/dist/logs/types.mjs 0 B 0 B 🆕
packages/core/dist/posthog-core-stateless.js 34.6 kB 0 B
packages/core/dist/posthog-core-stateless.mjs 31.7 kB 0 B
packages/core/dist/posthog-core.js 46.4 kB 0 B
packages/core/dist/posthog-core.mjs 41.1 kB 0 B
packages/core/dist/surveys/events.js 4.21 kB 0 B
packages/core/dist/surveys/events.mjs 1.99 kB 0 B
packages/core/dist/surveys/index.js 4.57 kB 0 B
packages/core/dist/surveys/index.mjs 894 B 0 B
packages/core/dist/surveys/translations.js 10 kB 0 B
packages/core/dist/surveys/translations.mjs 7.55 kB 0 B
packages/core/dist/surveys/validation.js 3.06 kB 0 B
packages/core/dist/surveys/validation.mjs 1.51 kB 0 B
packages/core/dist/testing/index.js 2.93 kB 0 B
packages/core/dist/testing/index.mjs 79 B 0 B
packages/core/dist/testing/PostHogCoreTestClient.js 3.15 kB 0 B
packages/core/dist/testing/PostHogCoreTestClient.mjs 1.74 kB 0 B
packages/core/dist/testing/test-utils.js 2.83 kB 0 B
packages/core/dist/testing/test-utils.mjs 1.15 kB 0 B
packages/core/dist/tracing-headers.js 3.38 kB 0 B
packages/core/dist/tracing-headers.mjs 2.08 kB 0 B
packages/core/dist/types.js 9.89 kB 0 B
packages/core/dist/types.mjs 7.16 kB 0 B
packages/core/dist/utils/bot-detection.js 3.28 kB 0 B
packages/core/dist/utils/bot-detection.mjs 1.95 kB 0 B
packages/core/dist/utils/bucketed-rate-limiter.js 3 kB 0 B
packages/core/dist/utils/bucketed-rate-limiter.mjs 1.62 kB 0 B
packages/core/dist/utils/index.js 11.9 kB 0 B
packages/core/dist/utils/index.mjs 1.98 kB 0 B
packages/core/dist/utils/logger.js 2.58 kB 0 B
packages/core/dist/utils/logger.mjs 1.29 kB 0 B
packages/core/dist/utils/number-utils.js 3.32 kB 0 B
packages/core/dist/utils/number-utils.mjs 1.68 kB 0 B
packages/core/dist/utils/promise-queue.js 2 kB 0 B
packages/core/dist/utils/promise-queue.mjs 768 B 0 B
packages/core/dist/utils/string-utils.js 2.73 kB 0 B
packages/core/dist/utils/string-utils.mjs 1.09 kB 0 B
packages/core/dist/utils/type-utils.js 7.43 kB 0 B
packages/core/dist/utils/type-utils.mjs 3.28 kB 0 B
packages/core/dist/utils/user-agent-utils.js 17.7 kB 0 B
packages/core/dist/utils/user-agent-utils.mjs 14.2 kB 0 B
packages/core/dist/vendor/uuidv7.js 8.29 kB 0 B
packages/core/dist/vendor/uuidv7.mjs 6.72 kB 0 B
packages/mcp/dist/extensions/capture.js 3.63 kB 0 B
packages/mcp/dist/extensions/capture.mjs 2.19 kB 0 B
packages/mcp/dist/extensions/compatibility.js 5.63 kB 0 B
packages/mcp/dist/extensions/compatibility.mjs 3.79 kB 0 B
packages/mcp/dist/extensions/constants.js 4.36 kB 0 B
packages/mcp/dist/extensions/constants.mjs 2.25 kB 0 B
packages/mcp/dist/extensions/context-parameters.js 3.9 kB 0 B
packages/mcp/dist/extensions/context-parameters.mjs 2.11 kB 0 B
packages/mcp/dist/extensions/conversation-id.js 7.12 kB 0 B
packages/mcp/dist/extensions/conversation-id.mjs 4.21 kB 0 B
packages/mcp/dist/extensions/event-types.js 1.68 kB 0 B
packages/mcp/dist/extensions/event-types.mjs 459 B 0 B
packages/mcp/dist/extensions/exceptions.js 2.57 kB 0 B
packages/mcp/dist/extensions/exceptions.mjs 1.19 kB 0 B
packages/mcp/dist/extensions/ids.js 2.01 kB 0 B
packages/mcp/dist/extensions/ids.mjs 637 B 0 B
packages/mcp/dist/extensions/instrument-highlevel.js 12.4 kB 0 B
packages/mcp/dist/extensions/instrument-highlevel.mjs 9.74 kB 0 B
packages/mcp/dist/extensions/instrument-********.js 4.11 kB 0 B
packages/mcp/dist/extensions/instrument-********.mjs 2.32 kB 0 B
packages/mcp/dist/extensions/instrumentation.js 14.6 kB 0 B
packages/mcp/dist/extensions/instrumentation.mjs 10.6 kB 0 B
packages/mcp/dist/extensions/intent.js 3.31 kB 0 B
packages/mcp/dist/extensions/intent.mjs 1.68 kB 0 B
packages/mcp/dist/extensions/internal.js 6.39 kB 0 B
packages/mcp/dist/extensions/internal.mjs 4.14 kB 0 B
packages/mcp/dist/extensions/logger.js 1.44 kB 0 B
packages/mcp/dist/extensions/logger.mjs 204 B 0 B
packages/mcp/dist/extensions/mcp-********.js 3.93 kB 0 B
packages/mcp/dist/extensions/mcp-********.mjs 2.56 kB 0 B
packages/mcp/dist/extensions/mcp-sdk-compat.js 4.08 kB 0 B
packages/mcp/dist/extensions/mcp-sdk-compat.mjs 2.22 kB 0 B
packages/mcp/dist/extensions/posthog-events.js 10.1 kB 0 B
packages/mcp/dist/extensions/posthog-events.mjs 6.76 kB 0 B
packages/mcp/dist/extensions/posthog-mcp.js 6.36 kB 0 B
packages/mcp/dist/extensions/posthog-mcp.mjs 4.51 kB 0 B
packages/mcp/dist/extensions/sanitization.js 4.04 kB 0 B
packages/mcp/dist/extensions/sanitization.mjs 2.46 kB 0 B
packages/mcp/dist/extensions/session.js 4.74 kB 0 B
packages/mcp/dist/extensions/session.mjs 2.63 kB 0 B
packages/mcp/dist/extensions/sink.js 4.16 kB 0 B
packages/mcp/dist/extensions/sink.mjs 2.33 kB 0 B
packages/mcp/dist/extensions/tools.js 3.5 kB 0 B
packages/mcp/dist/extensions/tools.mjs 1.61 kB 0 B
packages/mcp/dist/extensions/tracing-helpers.js 2.41 kB 0 B
packages/mcp/dist/extensions/tracing-helpers.mjs 772 B 0 B
packages/mcp/dist/extensions/truncation.js 11.2 kB 0 B
packages/mcp/dist/extensions/truncation.mjs 9.46 kB 0 B
packages/mcp/dist/index.js 7.07 kB 0 B
packages/mcp/dist/index.mjs 4.12 kB 0 B
packages/mcp/dist/types.js 603 B 0 B
packages/mcp/dist/types.mjs 0 B 0 B 🆕
packages/mcp/dist/version.js 1.21 kB 0 B
packages/mcp/dist/version.mjs 45 B 0 B
packages/next/dist/app/PostHogProvider.js 3.33 kB 0 B
packages/next/dist/client/ClientPostHogProvider.js 1.76 kB 0 B
packages/next/dist/client/hooks.js 172 B 0 B
packages/next/dist/client/PostHogPageView.js 1.76 kB 0 B
packages/next/dist/index.client.js 401 B 0 B
packages/next/dist/index.edge.js 447 B 0 B
packages/next/dist/index.js 444 B 0 B
packages/next/dist/index.react-server.js 420 B 0 B
packages/next/dist/middleware/postHogMiddleware.js 3.7 kB 0 B
packages/next/dist/pages.client.js 502 B 0 B
packages/next/dist/pages.edge.js 570 B 0 B
packages/next/dist/pages.js 414 B 0 B
packages/next/dist/pages/getServerSidePostHog.js 1.99 kB 0 B
packages/next/dist/pages/PostHogPageView.js 1.32 kB 0 B
packages/next/dist/pages/PostHogProvider.js 1.61 kB 0 B
packages/next/dist/server/getPostHog.js 2.79 kB 0 B
packages/next/dist/server/nodeClientCache.js 1.31 kB 0 B
packages/next/dist/shared/browser.js 195 B 0 B
packages/next/dist/shared/config.js 2.08 kB 0 B
packages/next/dist/shared/constants.js 201 B 0 B
packages/next/dist/shared/cookie.js 540 B 0 B
packages/next/dist/shared/identity.js 264 B 0 B
packages/next/dist/shared/tracing-headers.js 2.18 kB 0 B
packages/nextjs-config/dist/config.js 6.1 kB 0 B
packages/nextjs-config/dist/config.mjs 4.53 kB 0 B
packages/nextjs-config/dist/index.js 2.24 kB 0 B
packages/nextjs-config/dist/index.mjs 30 B 0 B
packages/nextjs-config/dist/strip-sourcemap-********.js 3.63 kB 0 B
packages/nextjs-config/dist/strip-sourcemap-********.mjs 1.77 kB 0 B
packages/nextjs-config/dist/utils.js 2.94 kB 0 B
packages/nextjs-config/dist/utils.mjs 826 B 0 B
packages/node/dist/client.js 47.8 kB 0 B
packages/node/dist/client.mjs 45.4 kB 0 B
packages/node/dist/entrypoints/index.edge.js 3.85 kB 0 B
packages/node/dist/entrypoints/index.edge.mjs 720 B 0 B
packages/node/dist/entrypoints/index.node.js 5.67 kB 0 B
packages/node/dist/entrypoints/index.node.mjs 1.25 kB 0 B
packages/node/dist/entrypoints/nestjs.js 2.31 kB 0 B
packages/node/dist/entrypoints/nestjs.mjs 42 B 0 B
packages/node/dist/experimental.js 870 B 0 B
packages/node/dist/experimental.mjs 267 B 0 B
packages/node/dist/exports.js 6.75 kB 0 B
packages/node/dist/exports.mjs 582 B 0 B
packages/node/dist/extensions/context/context.js 2.13 kB 0 B
packages/node/dist/extensions/context/context.mjs 863 B 0 B
packages/node/dist/extensions/context/types.js 603 B 0 B
packages/node/dist/extensions/context/types.mjs 0 B 0 B 🆕
packages/node/dist/extensions/error-tracking/autocapture.js 2.66 kB 0 B
packages/node/dist/extensions/error-tracking/autocapture.mjs 1.24 kB 0 B
packages/node/dist/extensions/error-tracking/index.js 4.15 kB 0 B
packages/node/dist/extensions/error-tracking/index.mjs 2.88 kB 0 B
packages/node/dist/extensions/error-tracking/modifiers/context-lines.node.js 8.81 kB 0 B
packages/node/dist/extensions/error-tracking/modifiers/context-lines.node.mjs 7.15 kB 0 B
packages/node/dist/extensions/error-tracking/modifiers/module.node.js 2.78 kB 0 B
packages/node/dist/extensions/error-tracking/modifiers/module.node.mjs 1.45 kB 0 B
packages/node/dist/extensions/error-tracking/modifiers/relative-path.node.js 1.97 kB 0 B
packages/node/dist/extensions/error-tracking/modifiers/relative-path.node.mjs 624 B 0 B
packages/node/dist/extensions/express.js 4.6 kB 0 B
packages/node/dist/extensions/express.mjs 2.49 kB 0 B
packages/node/dist/extensions/feature-flags/cache.js 603 B 0 B
packages/node/dist/extensions/feature-flags/cache.mjs 0 B 0 B 🆕
packages/node/dist/extensions/feature-flags/crypto.js 1.57 kB 0 B
packages/node/dist/extensions/feature-flags/crypto.mjs 395 B 0 B
packages/node/dist/extensions/feature-flags/feature-flags.js 40.8 kB 0 B
packages/node/dist/extensions/feature-flags/feature-flags.mjs 38.7 kB 0 B
packages/node/dist/extensions/nestjs.js 5 kB 0 B
packages/node/dist/extensions/nestjs.mjs 2.9 kB 0 B
packages/node/dist/extensions/sentry-integration.js 4.66 kB 0 B
packages/node/dist/extensions/sentry-integration.mjs 3.17 kB 0 B
packages/node/dist/extensions/tracing-headers.js 3.31 kB 0 B
packages/node/dist/extensions/tracing-headers.mjs 1.53 kB 0 B
packages/node/dist/feature-flag-evaluations.js 5.97 kB 0 B
packages/node/dist/feature-flag-evaluations.mjs 4.63 kB 0 B
packages/node/dist/storage-memory.js 1.52 kB 0 B
packages/node/dist/storage-memory.mjs 297 B 0 B
packages/node/dist/types.js 1.43 kB 0 B
packages/node/dist/types.mjs 224 B 0 B
packages/node/dist/version.js 1.21 kB 0 B
packages/node/dist/version.mjs 46 B 0 B
packages/nuxt/dist/module.mjs 5.29 kB 0 B
packages/nuxt/dist/runtime/composables/useFeatureFlagEnabled.js 566 B 0 B
packages/nuxt/dist/runtime/composables/useFeatureFlagPayload.js 690 B 0 B
packages/nuxt/dist/runtime/composables/useFeatureFlagVariantKey.js 591 B 0 B
packages/nuxt/dist/runtime/composables/usePostHog.js 128 B 0 B
packages/nuxt/dist/runtime/nitro-plugin.js 1.08 kB 0 B
packages/nuxt/dist/runtime/vue-plugin.js 1.14 kB 0 B
packages/plugin-utils/dist/cli.js 3.14 kB 0 B
packages/plugin-utils/dist/cli.mjs 1.64 kB 0 B
packages/plugin-utils/dist/config.js 3.07 kB 0 B
packages/plugin-utils/dist/config.mjs 1.83 kB 0 B
packages/plugin-utils/dist/index.js 4.3 kB 0 B
packages/plugin-utils/dist/index.mjs 217 B 0 B
packages/plugin-utils/dist/spawn-local.js 2.17 kB 0 B
packages/plugin-utils/dist/spawn-local.mjs 918 B 0 B
packages/plugin-utils/dist/utils.js 3.27 kB 0 B
packages/plugin-utils/dist/utils.mjs 1.3 kB 0 B
packages/react-native/dist/autocapture.js 5.05 kB 0 B
packages/react-native/dist/error-tracking/index.js 5.77 kB 0 B
packages/react-native/dist/error-tracking/utils.js 2.58 kB 0 B
packages/react-native/dist/frameworks/wix-navigation.js 1.3 kB 0 B
packages/react-native/dist/hooks/useFeatureFlag.js 1.84 kB 0 B
packages/react-native/dist/hooks/useFeatureFlagResult.js 963 B 0 B
packages/react-native/dist/hooks/useFeatureFlags.js 921 B 0 B
packages/react-native/dist/hooks/useNavigationTracker.js 2.45 kB 0 B
packages/react-native/dist/hooks/usePostHog.js 544 B 0 B
packages/react-native/dist/hooks/utils.js 988 B 0 B
packages/react-native/dist/index.js 4.33 kB 0 B
packages/react-native/dist/logs-********.js 3.66 kB 0 B
packages/react-native/dist/native-deps.js 8.73 kB 0 B
packages/react-native/dist/optional/OptionalAsyncStorage.js 299 B 0 B
packages/react-native/dist/optional/OptionalExpoApplication.js 377 B 0 B
packages/react-native/dist/optional/OptionalExpoDevice.js 347 B 0 B
packages/react-native/dist/optional/OptionalExpoFileSystem.js 386 B 0 B
packages/react-native/dist/optional/OptionalExpoFileSystemLegacy.js 423 B 0 B
packages/react-native/dist/optional/OptionalExpoLocalization.js 383 B 0 B
packages/react-native/dist/optional/OptionalPlugin.js 569 B 0 B
packages/react-native/dist/optional/OptionalReactNativeDeviceInfo.js 415 B 0 B
packages/react-native/dist/optional/OptionalReactNativeLocalize.js 303 B 0 B
packages/react-native/dist/optional/OptionalReactNativeNavigation.js 415 B 0 B
packages/react-native/dist/optional/OptionalReactNativeNavigationWix.js 443 B 0 B
packages/react-native/dist/optional/OptionalReactNativeSafeArea.js 644 B 0 B
packages/react-native/dist/optional/OptionalReactNativeSvg.js 872 B 0 B
packages/react-native/dist/posthog-rn.js 55.2 kB 0 B
packages/react-native/dist/PostHogContext.js 329 B 0 B
packages/react-native/dist/PostHogErrorBoundary.js 3.19 kB 0 B
packages/react-native/dist/PostHogMaskView.js 1.68 kB 0 B
packages/react-native/dist/PostHogProvider.js 4.55 kB 0 B
packages/react-native/dist/storage.js 5.76 kB 0 B
packages/react-native/dist/surveys/components/BottomSection.js 1.51 kB 0 B
packages/react-native/dist/surveys/components/Cancel.js 968 B 0 B
packages/react-native/dist/surveys/components/ConfirmationMessage.js 1.71 kB 0 B
packages/react-native/dist/surveys/components/QuestionHeader.js 1.43 kB 0 B
packages/react-native/dist/surveys/components/QuestionTypes.js 13.4 kB 0 B
packages/react-native/dist/surveys/components/SurveyModal.js 6.33 kB 0 B
packages/react-native/dist/surveys/components/Surveys.js 6.58 kB 0 B
packages/react-native/dist/surveys/getActiveMatchingSurveys.js 2.64 kB 0 B
packages/react-native/dist/surveys/icons.js 10 kB 0 B
packages/react-native/dist/surveys/index.js 600 B 0 B
packages/react-native/dist/surveys/PostHogSurveyProvider.js 6.28 kB 0 B
packages/react-native/dist/surveys/safeStyleSheet.js 448 B 0 B
packages/react-native/dist/surveys/survey-translations.js 1.11 kB 0 B
packages/react-native/dist/surveys/surveys-utils.js 14.2 kB 0 B
packages/react-native/dist/surveys/useActivatedSurveys.js 3.67 kB 0 B
packages/react-native/dist/surveys/useSurveyStorage.js 2.16 kB 0 B
packages/react-native/dist/tooling/expoconfig.js 11.9 kB 0 B
packages/react-native/dist/tooling/metroconfig.js 2.32 kB 0 B
packages/react-native/dist/tooling/posthogMetroSerializer.js 4.86 kB 0 B
packages/react-native/dist/tooling/utils.js 4.05 kB 0 B
packages/react-native/dist/tooling/vendor/expo/expoconfig.js 70 B 0 B
packages/react-native/dist/tooling/vendor/metro/countLines.js 237 B 0 B
packages/react-native/dist/tooling/vendor/metro/utils.js 3.35 kB 0 B
packages/react-native/dist/types.js 70 B 0 B
packages/react-native/dist/utils.js 1.3 kB 0 B
packages/react-native/dist/version.js 130 B 0 B
packages/react/dist/esm/index.js 20.9 kB 0 B
packages/react/dist/esm/slim/index.js 17.3 kB 0 B
packages/react/dist/esm/surveys/index.js 4.68 kB 0 B
packages/react/dist/umd/index.js 24.2 kB 0 B
packages/react/dist/umd/slim/index.js 20.1 kB 0 B
packages/react/dist/umd/surveys/index.js 5.45 kB 0 B
packages/rollup-plugin/dist/index.js 2.44 kB 0 B
packages/rrweb/all/dist/rrweb-all.cjs 625 kB 0 B
packages/rrweb/all/dist/rrweb-all.js 624 kB 0 B
packages/rrweb/all/dist/rrweb-all.umd.cjs 628 kB 0 B
packages/rrweb/all/dist/rrweb-all.umd.min.cjs 296 kB 0 B
packages/rrweb/packer/dist/base-********.js 18.2 kB 0 B
packages/rrweb/packer/dist/base-********.cjs 18.3 kB 0 B
packages/rrweb/packer/dist/base-********.umd.cjs 18.7 kB 0 B
packages/rrweb/packer/dist/base-********.umd.min.cjs 9.5 kB 0 B
packages/rrweb/packer/dist/pack.cjs 347 B 0 B
packages/rrweb/packer/dist/pack.js 285 B 0 B
packages/rrweb/packer/dist/pack.umd.cjs 1.63 kB 0 B
packages/rrweb/packer/dist/pack.umd.min.cjs 1.11 kB 0 B
packages/rrweb/packer/dist/packer.cjs 257 B 0 B
packages/rrweb/packer/dist/packer.js 136 B 0 B
packages/rrweb/packer/dist/packer.umd.cjs 662 B 0 B
packages/rrweb/packer/dist/packer.umd.min.cjs 626 B 0 B
packages/rrweb/packer/dist/unpack.cjs 769 B 0 B
packages/rrweb/packer/dist/unpack.js 702 B 0 B
packages/rrweb/packer/dist/unpack.umd.cjs 1.17 kB 0 B
packages/rrweb/packer/dist/unpack.umd.min.cjs 955 B 0 B
packages/rrweb/plugins/rrweb-plugin-canvas-webrtc-record/dist/rrweb-plugin-canvas-webrtc-record.cjs 37.6 kB 0 B
packages/rrweb/plugins/rrweb-plugin-canvas-webrtc-record/dist/rrweb-plugin-canvas-webrtc-record.js 37.5 kB 0 B
packages/rrweb/plugins/rrweb-plugin-canvas-webrtc-record/dist/rrweb-plugin-canvas-webrtc-record.umd.cjs 38 kB 0 B
packages/rrweb/plugins/rrweb-plugin-canvas-webrtc-record/dist/rrweb-plugin-canvas-webrtc-record.umd.min.cjs 22.2 kB 0 B
packages/rrweb/plugins/rrweb-plugin-canvas-webrtc-replay/dist/rrweb-plugin-canvas-webrtc-replay.cjs 34.3 kB 0 B
packages/rrweb/plugins/rrweb-plugin-canvas-webrtc-replay/dist/rrweb-plugin-canvas-webrtc-replay.js 34.2 kB 0 B
packages/rrweb/plugins/rrweb-plugin-canvas-webrtc-replay/dist/rrweb-plugin-canvas-webrtc-replay.umd.cjs 34.7 kB 0 B
packages/rrweb/plugins/rrweb-plugin-canvas-webrtc-replay/dist/rrweb-plugin-canvas-webrtc-replay.umd.min.cjs 20.5 kB 0 B
packages/rrweb/plugins/rrweb-plugin-console-record/dist/rrweb-plugin-console-record.cjs 14.9 kB 0 B
packages/rrweb/plugins/rrweb-plugin-console-record/dist/rrweb-plugin-console-record.js 14.8 kB 0 B
packages/rrweb/plugins/rrweb-plugin-console-record/dist/rrweb-plugin-console-record.umd.cjs 15.4 kB 0 B
packages/rrweb/plugins/rrweb-plugin-console-record/dist/rrweb-plugin-console-record.umd.min.cjs 7.33 kB 0 B
packages/rrweb/plugins/rrweb-plugin-console-replay/dist/rrweb-plugin-console-replay.cjs 5.01 kB 0 B
packages/rrweb/plugins/rrweb-plugin-console-replay/dist/rrweb-plugin-console-replay.js 4.9 kB 0 B
packages/rrweb/plugins/rrweb-plugin-console-replay/dist/rrweb-plugin-console-replay.umd.cjs 5.44 kB 0 B
packages/rrweb/plugins/rrweb-plugin-console-replay/dist/rrweb-plugin-console-replay.umd.min.cjs 2.64 kB 0 B
packages/rrweb/plugins/rrweb-plugin-sequential-id-record/dist/rrweb-plugin-sequential-id-record.cjs 681 B 0 B
packages/rrweb/plugins/rrweb-plugin-sequential-id-record/dist/rrweb-plugin-sequential-id-record.js 548 B 0 B
packages/rrweb/plugins/rrweb-plugin-sequential-id-record/dist/rrweb-plugin-sequential-id-record.umd.cjs 1.12 kB 0 B
packages/rrweb/plugins/rrweb-plugin-sequential-id-record/dist/rrweb-plugin-sequential-id-record.umd.min.cjs 829 B 0 B
packages/rrweb/plugins/rrweb-plugin-sequential-id-replay/dist/rrweb-plugin-sequential-id-replay.cjs 933 B 0 B
packages/rrweb/plugins/rrweb-plugin-sequential-id-replay/dist/rrweb-plugin-sequential-id-replay.js 820 B 0 B
packages/rrweb/plugins/rrweb-plugin-sequential-id-replay/dist/rrweb-plugin-sequential-id-replay.umd.cjs 1.37 kB 0 B
packages/rrweb/plugins/rrweb-plugin-sequential-id-replay/dist/rrweb-plugin-sequential-id-replay.umd.min.cjs 968 B 0 B
packages/rrweb/record/dist/rrweb-record.cjs 184 kB 0 B
packages/rrweb/record/dist/rrweb-record.js 184 kB 0 B
packages/rrweb/record/dist/rrweb-record.umd.cjs 184 kB 0 B
packages/rrweb/record/dist/rrweb-record.umd.min.cjs 88.1 kB 0 B
packages/rrweb/replay/dist/rrweb-replay.cjs 443 kB 0 B
packages/rrweb/replay/dist/rrweb-replay.js 443 kB 0 B
packages/rrweb/replay/dist/rrweb-replay.umd.cjs 445 kB 0 B
packages/rrweb/replay/dist/rrweb-replay.umd.min.cjs 211 kB 0 B
packages/rrweb/rrdom-nodejs/dist/rrdom-nodejs.cjs 150 kB 0 B
packages/rrweb/rrdom-nodejs/dist/rrdom-nodejs.js 149 kB 0 B
packages/rrweb/rrdom-nodejs/dist/rrdom-nodejs.umd.cjs 152 kB 0 B
packages/rrweb/rrdom-nodejs/dist/rrdom-nodejs.umd.min.cjs 70.8 kB 0 B
packages/rrweb/rrdom/dist/rrdom.cjs 174 kB 0 B
packages/rrweb/rrdom/dist/rrdom.js 173 kB 0 B
packages/rrweb/rrdom/dist/rrdom.umd.cjs 175 kB 0 B
packages/rrweb/rrdom/dist/rrdom.umd.min.cjs 80.8 kB 0 B
packages/rrweb/rrweb-snapshot/dist/record.cjs 33.9 kB 0 B
packages/rrweb/rrweb-snapshot/dist/record.js 32.8 kB 0 B
packages/rrweb/rrweb-snapshot/dist/record.umd.cjs 55.1 kB 0 B
packages/rrweb/rrweb-snapshot/dist/record.umd.min.cjs 26.3 kB 0 B
packages/rrweb/rrweb-snapshot/dist/replay.cjs 138 kB 0 B
packages/rrweb/rrweb-snapshot/dist/replay.js 137 kB 0 B
packages/rrweb/rrweb-snapshot/dist/replay.umd.cjs 161 kB 0 B
packages/rrweb/rrweb-snapshot/dist/replay.umd.min.cjs 74 kB 0 B
packages/rrweb/rrweb-snapshot/dist/rrweb-********.cjs 2.27 kB 0 B
packages/rrweb/rrweb-snapshot/dist/rrweb-********.js 1.42 kB 0 B
packages/rrweb/rrweb-snapshot/dist/rrweb-********.umd.cjs 219 kB 0 B
packages/rrweb/rrweb-snapshot/dist/rrweb-********.umd.min.cjs 92.5 kB 0 B
packages/rrweb/rrweb-snapshot/dist/types-********.cjs 18.3 kB 0 B
packages/rrweb/rrweb-snapshot/dist/types-********.umd.cjs 18.8 kB 0 B
packages/rrweb/rrweb-snapshot/dist/types-********.umd.min.cjs 9.31 kB 0 B
packages/rrweb/rrweb-snapshot/dist/types-********.js 17.8 kB 0 B
packages/rrweb/rrweb/dist/rrweb.cjs 608 kB 0 B
packages/rrweb/rrweb/dist/rrweb.js 608 kB 0 B
packages/rrweb/rrweb/dist/rrweb.umd.cjs 608 kB 0 B
packages/rrweb/rrweb/dist/rrweb.umd.min.cjs 287 kB 0 B
packages/rrweb/types/dist/rrweb-types.cjs 5.75 kB 0 B
packages/rrweb/types/dist/rrweb-types.js 5.46 kB 0 B
packages/rrweb/types/dist/rrweb-types.umd.cjs 6.16 kB 0 B
packages/rrweb/types/dist/rrweb-types.umd.min.cjs 2.86 kB 0 B
packages/rrweb/utils/dist/rrweb-utils.cjs 6.41 kB 0 B
packages/rrweb/utils/dist/rrweb-utils.js 5.95 kB 0 B
packages/rrweb/utils/dist/rrweb-utils.umd.cjs 6.82 kB 0 B
packages/rrweb/utils/dist/rrweb-utils.umd.min.cjs 3.51 kB 0 B
packages/types/dist/capture-log.js 603 B 0 B
packages/types/dist/capture-log.mjs 0 B 0 B 🆕
packages/types/dist/capture.js 603 B 0 B
packages/types/dist/capture.mjs 0 B 0 B 🆕
packages/types/dist/common.js 603 B 0 B
packages/types/dist/common.mjs 0 B 0 B 🆕
packages/types/dist/feature-flags.js 603 B 0 B
packages/types/dist/feature-flags.mjs 0 B 0 B 🆕
packages/types/dist/index.js 603 B 0 B
packages/types/dist/index.mjs 0 B 0 B 🆕
packages/types/dist/posthog-config.js 603 B 0 B
packages/types/dist/posthog-config.mjs 0 B 0 B 🆕
packages/types/dist/posthog.js 603 B 0 B
packages/types/dist/posthog.mjs 0 B 0 B 🆕
packages/types/dist/request.js 603 B 0 B
packages/types/dist/request.mjs 0 B 0 B 🆕
packages/types/dist/segment.js 603 B 0 B
packages/types/dist/segment.mjs 0 B 0 B 🆕
packages/types/dist/session-recording.js 603 B 0 B
packages/types/dist/session-recording.mjs 0 B 0 B 🆕
packages/types/dist/survey.js 603 B 0 B
packages/types/dist/survey.mjs 0 B 0 B 🆕
packages/types/dist/toolbar.js 603 B 0 B
packages/types/dist/toolbar.mjs 0 B 0 B 🆕
packages/types/dist/tree-shakeable.js 603 B 0 B
packages/types/dist/tree-shakeable.mjs 0 B 0 B 🆕
packages/web/dist/index.cjs 13.9 kB 0 B
packages/web/dist/index.mjs 13.8 kB 0 B
packages/webpack-plugin/dist/config.js 1.47 kB 0 B
packages/webpack-plugin/dist/config.mjs 480 B 0 B
packages/webpack-plugin/dist/index.js 5.38 kB 0 B
packages/webpack-plugin/dist/index.mjs 2.04 kB 0 B
tooling/changelog/dist/index.js 3.31 kB 0 B
tooling/rollup-utils/dist/index.js 1.17 kB 0 B

compressed-size-action

@greptile-apps

greptile-apps Bot commented Jun 18, 2026

Copy link
Copy Markdown
Contributor
Prompt To Fix All With AI
Fix the following 4 code review issues. Work through them one at a time, proposing concise fixes.

---

### Issue 1 of 4
packages/cli-analytics/src/extensions/posthog-events.ts:127-132
`addCustomProperties` runs last in both `buildCaptureEvent` and `buildExceptionEvent`, so anything in `event.properties` can silently overwrite system-controlled fields. If a CLI forwards arbitrary user-supplied key-value pairs as `event.properties` and a value like `{ $process_person_profile: true }` ends up there, it overwrites the explicit `processPersonProfile: false` consent signal set in `addRoutingProperties`, creating person profiles for anonymous users who should be excluded. Moving `addCustomProperties` first turns it into a base layer that system properties always override. The same reordering is needed in `buildExceptionEvent`.

```suggestion
function buildCaptureEvent(event: CliEvent): PostHogCaptureEvent {
    const properties: Record<string, unknown> = { [Prop.Source]: POSTHOG_CLI_ANALYTICS_SOURCE }
    addCustomProperties(event, properties)
    addRoutingProperties(event, properties)
    addContextProperties(event, properties)
    addCommandProperties(event, properties)
```

### Issue 2 of 4
packages/cli-analytics/src/extensions/posthog-events.ts:143-159
Same issue as in `buildCaptureEvent`: `addCustomProperties` runs last, meaning a caller can overwrite `$process_person_profile` or `$exception_list` via `event.properties`. Moving it first ensures custom properties form a base layer that structured fields always override.

```suggestion
function buildExceptionEvent(event: CliEvent): PostHogCaptureEvent {
    const properties: Record<string, unknown> = { [Prop.Source]: POSTHOG_CLI_ANALYTICS_SOURCE }
    addCustomProperties(event, properties)
    addRoutingProperties(event, properties)
    addContextProperties(event, properties)

    if (event.error) {
        // Spread the core `$exception_list` / `$exception_level` properties so CLI
        // command failures use the same error-tracking contract as every other SDK.
        Object.assign(properties, event.error)
    }
    if (event.command !== undefined) {
        properties[Prop.Command] = event.command
    }
    if (event.subcommand !== undefined) {
        properties[Prop.Subcommand] = event.subcommand
    }
```

### Issue 3 of 4
packages/cli-analytics/src/__tests__/truncation.test.ts:12-18
Five independent input→output cases bundled into one `it` block. The team convention is to prefer parameterised tests — a single failure here reports as the whole "coerces non-serializable values" test rather than the specific case that broke. The regex-match case for functions needs its own `it` since it can't share the `toBe` matcher.

```suggestion
    it.each<[unknown, unknown]>([
        [undefined, '[undefined]'],
        [Number.NaN, '[NaN]'],
        [Number.POSITIVE_INFINITY, '[Infinity]'],
        [10n, '[BigInt: 10]'],
    ])('coerces %s to %s', (input, expected) => {
        expect(normalize(input)).toBe(expected)
    })

    it('coerces functions to a [Function:...] string', () => {
        expect(normalize(() => 1)).toMatch(/^\[Function:/)
    })
```

### Issue 4 of 4
packages/cli-analytics/src/extensions/sanitization.ts:21
**`auth` term over-matches unrelated keys**

The `auth` alternative has no word boundary, so it matches anywhere the four letters appear: `author`, `authored_by`, `github_auth_url`, etc. A CLI that passes `{ author: 'John Doe' }` in custom properties will have the value silently redacted to `[redacted]`. Since `authorization` is already an explicit alternative in the list and handles the full token-header name, and authentication patterns are typically caught by `credential` or `token`, narrowing this to `\bauth\b` (or removing it in favour of the explicit alternatives) would eliminate the false positives while keeping the intended coverage.

Reviews (1): Last reviewed commit: "feat(cli-analytics): event capture pipel..." | Re-trigger Greptile

Comment on lines +127 to +132
function buildCaptureEvent(event: CliEvent): PostHogCaptureEvent {
const properties: Record<string, unknown> = { [Prop.Source]: POSTHOG_CLI_ANALYTICS_SOURCE }
addRoutingProperties(event, properties)
addContextProperties(event, properties)
addCommandProperties(event, properties)
addCustomProperties(event, properties)

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.

P1 addCustomProperties runs last in both buildCaptureEvent and buildExceptionEvent, so anything in event.properties can silently overwrite system-controlled fields. If a CLI forwards arbitrary user-supplied key-value pairs as event.properties and a value like { $process_person_profile: true } ends up there, it overwrites the explicit processPersonProfile: false consent signal set in addRoutingProperties, creating person profiles for anonymous users who should be excluded. Moving addCustomProperties first turns it into a base layer that system properties always override. The same reordering is needed in buildExceptionEvent.

Suggested change
function buildCaptureEvent(event: CliEvent): PostHogCaptureEvent {
const properties: Record<string, unknown> = { [Prop.Source]: POSTHOG_CLI_ANALYTICS_SOURCE }
addRoutingProperties(event, properties)
addContextProperties(event, properties)
addCommandProperties(event, properties)
addCustomProperties(event, properties)
function buildCaptureEvent(event: CliEvent): PostHogCaptureEvent {
const properties: Record<string, unknown> = { [Prop.Source]: POSTHOG_CLI_ANALYTICS_SOURCE }
addCustomProperties(event, properties)
addRoutingProperties(event, properties)
addContextProperties(event, properties)
addCommandProperties(event, properties)
Prompt To Fix With AI
This is a comment left during a code review.
Path: packages/cli-analytics/src/extensions/posthog-events.ts
Line: 127-132

Comment:
`addCustomProperties` runs last in both `buildCaptureEvent` and `buildExceptionEvent`, so anything in `event.properties` can silently overwrite system-controlled fields. If a CLI forwards arbitrary user-supplied key-value pairs as `event.properties` and a value like `{ $process_person_profile: true }` ends up there, it overwrites the explicit `processPersonProfile: false` consent signal set in `addRoutingProperties`, creating person profiles for anonymous users who should be excluded. Moving `addCustomProperties` first turns it into a base layer that system properties always override. The same reordering is needed in `buildExceptionEvent`.

```suggestion
function buildCaptureEvent(event: CliEvent): PostHogCaptureEvent {
    const properties: Record<string, unknown> = { [Prop.Source]: POSTHOG_CLI_ANALYTICS_SOURCE }
    addCustomProperties(event, properties)
    addRoutingProperties(event, properties)
    addContextProperties(event, properties)
    addCommandProperties(event, properties)
```

How can I resolve this? If you propose a fix, please make it concise.

Comment on lines +143 to +159
function buildExceptionEvent(event: CliEvent): PostHogCaptureEvent {
const properties: Record<string, unknown> = { [Prop.Source]: POSTHOG_CLI_ANALYTICS_SOURCE }
addRoutingProperties(event, properties)
addContextProperties(event, properties)

if (event.error) {
// Spread the core `$exception_list` / `$exception_level` properties so CLI
// command failures use the same error-tracking contract as every other SDK.
Object.assign(properties, event.error)
}
if (event.command !== undefined) {
properties[Prop.Command] = event.command
}
if (event.subcommand !== undefined) {
properties[Prop.Subcommand] = event.subcommand
}
addCustomProperties(event, properties)

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.

P1 Same issue as in buildCaptureEvent: addCustomProperties runs last, meaning a caller can overwrite $process_person_profile or $exception_list via event.properties. Moving it first ensures custom properties form a base layer that structured fields always override.

Suggested change
function buildExceptionEvent(event: CliEvent): PostHogCaptureEvent {
const properties: Record<string, unknown> = { [Prop.Source]: POSTHOG_CLI_ANALYTICS_SOURCE }
addRoutingProperties(event, properties)
addContextProperties(event, properties)
if (event.error) {
// Spread the core `$exception_list` / `$exception_level` properties so CLI
// command failures use the same error-tracking contract as every other SDK.
Object.assign(properties, event.error)
}
if (event.command !== undefined) {
properties[Prop.Command] = event.command
}
if (event.subcommand !== undefined) {
properties[Prop.Subcommand] = event.subcommand
}
addCustomProperties(event, properties)
function buildExceptionEvent(event: CliEvent): PostHogCaptureEvent {
const properties: Record<string, unknown> = { [Prop.Source]: POSTHOG_CLI_ANALYTICS_SOURCE }
addCustomProperties(event, properties)
addRoutingProperties(event, properties)
addContextProperties(event, properties)
if (event.error) {
// Spread the core `$exception_list` / `$exception_level` properties so CLI
// command failures use the same error-tracking contract as every other SDK.
Object.assign(properties, event.error)
}
if (event.command !== undefined) {
properties[Prop.Command] = event.command
}
if (event.subcommand !== undefined) {
properties[Prop.Subcommand] = event.subcommand
}
Prompt To Fix With AI
This is a comment left during a code review.
Path: packages/cli-analytics/src/extensions/posthog-events.ts
Line: 143-159

Comment:
Same issue as in `buildCaptureEvent`: `addCustomProperties` runs last, meaning a caller can overwrite `$process_person_profile` or `$exception_list` via `event.properties`. Moving it first ensures custom properties form a base layer that structured fields always override.

```suggestion
function buildExceptionEvent(event: CliEvent): PostHogCaptureEvent {
    const properties: Record<string, unknown> = { [Prop.Source]: POSTHOG_CLI_ANALYTICS_SOURCE }
    addCustomProperties(event, properties)
    addRoutingProperties(event, properties)
    addContextProperties(event, properties)

    if (event.error) {
        // Spread the core `$exception_list` / `$exception_level` properties so CLI
        // command failures use the same error-tracking contract as every other SDK.
        Object.assign(properties, event.error)
    }
    if (event.command !== undefined) {
        properties[Prop.Command] = event.command
    }
    if (event.subcommand !== undefined) {
        properties[Prop.Subcommand] = event.subcommand
    }
```

How can I resolve this? If you propose a fix, please make it concise.

Comment on lines +12 to +18
it('coerces non-serializable values', () => {
expect(normalize(undefined)).toBe('[undefined]')
expect(normalize(Number.NaN)).toBe('[NaN]')
expect(normalize(Number.POSITIVE_INFINITY)).toBe('[Infinity]')
expect(normalize(() => 1)).toMatch(/^\[Function:/)
expect(normalize(10n)).toBe('[BigInt: 10]')
})

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.

P2 Five independent input→output cases bundled into one it block. The team convention is to prefer parameterised tests — a single failure here reports as the whole "coerces non-serializable values" test rather than the specific case that broke. The regex-match case for functions needs its own it since it can't share the toBe matcher.

Suggested change
it('coerces non-serializable values', () => {
expect(normalize(undefined)).toBe('[undefined]')
expect(normalize(Number.NaN)).toBe('[NaN]')
expect(normalize(Number.POSITIVE_INFINITY)).toBe('[Infinity]')
expect(normalize(() => 1)).toMatch(/^\[Function:/)
expect(normalize(10n)).toBe('[BigInt: 10]')
})
it.each<[unknown, unknown]>([
[undefined, '[undefined]'],
[Number.NaN, '[NaN]'],
[Number.POSITIVE_INFINITY, '[Infinity]'],
[10n, '[BigInt: 10]'],
])('coerces %s to %s', (input, expected) => {
expect(normalize(input)).toBe(expected)
})
it('coerces functions to a [Function:...] string', () => {
expect(normalize(() => 1)).toMatch(/^\[Function:/)
})
Prompt To Fix With AI
This is a comment left during a code review.
Path: packages/cli-analytics/src/__tests__/truncation.test.ts
Line: 12-18

Comment:
Five independent input→output cases bundled into one `it` block. The team convention is to prefer parameterised tests — a single failure here reports as the whole "coerces non-serializable values" test rather than the specific case that broke. The regex-match case for functions needs its own `it` since it can't share the `toBe` matcher.

```suggestion
    it.each<[unknown, unknown]>([
        [undefined, '[undefined]'],
        [Number.NaN, '[NaN]'],
        [Number.POSITIVE_INFINITY, '[Infinity]'],
        [10n, '[BigInt: 10]'],
    ])('coerces %s to %s', (input, expected) => {
        expect(normalize(input)).toBe(expected)
    })

    it('coerces functions to a [Function:...] string', () => {
        expect(normalize(() => 1)).toMatch(/^\[Function:/)
    })
```

How can I resolve this? If you propose a fix, please make it concise.

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

]

/** Keys whose values are redacted wholesale, regardless of content. */
const SENSITIVE_KEY = /(password|passwd|secret|token|api[_-]?key|authorization|auth|credential|private[_-]?key)/i

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.

P2 auth term over-matches unrelated keys

The auth alternative has no word boundary, so it matches anywhere the four letters appear: author, authored_by, github_auth_url, etc. A CLI that passes { author: 'John Doe' } in custom properties will have the value silently redacted to [redacted]. Since authorization is already an explicit alternative in the list and handles the full token-header name, and authentication patterns are typically caught by credential or token, narrowing this to \bauth\b (or removing it in favour of the explicit alternatives) would eliminate the false positives while keeping the intended coverage.

Prompt To Fix With AI
This is a comment left during a code review.
Path: packages/cli-analytics/src/extensions/sanitization.ts
Line: 21

Comment:
**`auth` term over-matches unrelated keys**

The `auth` alternative has no word boundary, so it matches anywhere the four letters appear: `author`, `authored_by`, `github_auth_url`, etc. A CLI that passes `{ author: 'John Doe' }` in custom properties will have the value silently redacted to `[redacted]`. Since `authorization` is already an explicit alternative in the list and handles the full token-header name, and authentication patterns are typically caught by `credential` or `token`, narrowing this to `\bauth\b` (or removing it in favour of the explicit alternatives) would eliminate the false positives while keeping the intended coverage.

How can I resolve this? If you propose a fix, please make it concise.

@github-actions

Copy link
Copy Markdown
Contributor

This PR hasn't seen activity in a week! Should it be merged, closed, or further worked on? If you want to keep it open, post a comment or remove the stale label – otherwise this will be closed in another week.

@github-actions github-actions Bot added the stale label Jun 26, 2026
@github-actions

github-actions Bot commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

This PR was closed due to lack of activity. Feel free to reopen if it's still relevant.

@github-actions github-actions Bot closed this Jul 6, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant