Repository Analysis

growthbook/growthbook

Open Source Feature Flags, Experimentation, and Product Analytics

2.8 Likely human-written View on GitHub

Analysis Overview

This report presents the forensic synthetic code analysis of growthbook/growthbook, a TypeScript project with 7,991 GitHub stars. SynthScan v2.0 examined 809,610 lines of code across 3250 source files, recording 1985 pattern matches distributed across 20 syntactic categories. The overall adjusted score of 2.8 places this repository in the Likely human-written band.

The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).

2.8
Adjusted Score
2.8
Raw Score
100%
Time Factor
2026-07-14
Last Push
8.0K
Stars
TypeScript
Language
809.6K
Lines of Code
3.2K
Files
2.0K
Pattern Hits
2026-07-14
Scan Date
0.01
HC Hit Rate

What These Metrics Mean

Adjusted Score
Primary synthetic code indicator. Raw score normalised per 1,000 lines of code and multiplied by the temporal discount factor. This is the definitive comparative metric — use it to rank repositories by AI authorship density.
Raw Score
The unmodified sum of all severity-weighted, context-multiplied pattern match scores before temporal discounting. Reflects the absolute signal strength independent of when the repository was last active.
Time Factor
The temporal discount multiplier (0–100%) applied to the raw score. Repositories last updated before ChatGPT's launch (Nov 2022) receive a 5% factor. Full signal is only assigned to repositories active in the post-adoption era (Jan 2024+).
Pattern Hits
Total count of individual pattern matches across all files and categories. A high hit count with a low score may indicate a very large codebase with isolated AI snippets; a low count with a high score indicates dense, concentrated AI signatures.
HC Hit Rate
High+Critical pattern hits per file, averaged across the repository. This orthogonal signal catches repositories where a few files are densely packed with high-severity AI tells — a strong indicator even when the normalised score appears moderate due to codebase size.
Lines of Code / Files
Total lines and files analysed. The scanner examines 94 file extensions. These denominators are used to normalise the score, enabling fair comparison between repositories of vastly different sizes.

Score History

Longitudinal tracking requires multiple scan runs. Once this repository is re-scanned after new commits land, this chart will visualise how the synthetic code signal evolves over time — enabling you to detect whether AI authorship is growing, stabilising, or being actively corrected by human engineers.

No multi-scan history yet — run the scanner again to build trend data.

Severity Breakdown

Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.

CRITICAL 2HIGH 23MEDIUM 79LOW 1881

Directory Score Breakdown

This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.

Pattern Findings

The scanner identified 1985 distinct pattern matches across 20 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.

Reading the findings table: The Severity column indicates the diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.

Hyper-Verbose Identifiers1587 hits · 1582 pts
SeverityFileLineSnippetContext
LOWpackages/stats-ts/src/contextualBanditWeights.ts450export function computeContextualBanditWeights(CODE
LOWpackages/stats-ts/src/statistics.ts573export function computeThetaRegressionAdjustedRatio(CODE
LOWpackages/stats-ts/src/statistics.ts752export function createThetaAdjustedStatistics(CODE
LOWpackages/stats-ts/src/settings.ts264export function getContextualBanditSettings(CODE
LOWpackages/stats-ts/src/utils.ts146export function isStatisticallySignificant(ci: number[]): boolean {CODE
LOWpackages/stats-ts/src/banditWeights.ts125function probKthArmIsBiggestGaussHermite(CODE
LOWpackages/stats-ts/src/banditWeights.ts141export function bestArmProbabilitiesGaussHermite(CODE
LOWpackages/sdk-js/src/core.ts1038function getStickyBucketExperimentKey(CODE
LOWpackages/sdk-js/src/core.ts1046export function getStickyBucketAttributeKey(CODE
LOWpackages/sdk-js/src/core.ts1053function getStickyBucketAssignments(CODE
LOWpackages/sdk-js/src/core.ts1087function generateStickyBucketAssignmentDoc(CODE
LOWpackages/sdk-js/src/core.ts1118function deriveStickyBucketIdentifierAttributes(CODE
LOWpackages/sdk-js/src/core.ts1149export async function getAllStickyBucketAssignmentDocs(CODE
LOWpackages/sdk-js/src/core.ts1158export function getStickyBucketAttributes(CODE
LOWpackages/sdk-js/src/util.ts377export function getAutoExperimentChangeType(CODE
LOWpackages/shared/test/decisionCriteria.test.ts14function setMetricsOnResultsStatus({CODE
LOWpackages/shared/test/permissions-demo-project.test.ts32 function getAdminPermissionsForDemoOnlyOrg(): Permissions {CODE
LOWpackages/shared/test/snapshot-analysis-chunks.test.ts89function makeExperimentSnapshotAnalysisChunk(CODE
LOWpackages/shared/scripts/gen-sdk-resources.ts14function defineSDKCapabilityVersion(sdk: string, capabilities: string[]) {CODE
LOWpackages/shared/src/dates.ts89export function dateStringArrayBetweenDates(CODE
LOWpackages/shared/src/sql.ts126export function usesBackslashStringEscapes(CODE
LOWpackages/shared/src/ai-chat.ts89export function stringifyToolResultForStorage(output: unknown): string {CODE
LOWpackages/shared/src/ai.ts289export function resolveImageModelIdForSdk(model: string): string {CODE
LOWpackages/shared/src/ai.ts381export function buildImageAspectInstruction({CODE
LOWpackages/shared/src/ai.ts433export function getProviderFromEmbeddingModel(CODE
LOWpackages/shared/src/ai.ts554export function formatAIRateLimitRetryMessage(CODE
LOWpackages/shared/src/snapshot-analysis-chunks.ts64export function encodeSnapshotAnalysisChunks(CODE
LOWpackages/shared/src/snapshot-analysis-chunks.ts229export function decodeSnapshotAnalysisChunks(CODE
LOWpackages/shared/src/snapshot-analysis-chunks.ts378export function migrateLegacySnapshotAnalysisChunkData(CODE
LOWpackages/shared/src/power/power.ts430export function sequentialPowerSequentialVariance(CODE
LOWpackages/shared/src/power/power.ts447export function sequentialPowerStandardError(CODE
LOWpackages/shared/src/power/power.ts476function getSequentialTuningParameter(CODE
LOWpackages/shared/src/power/power.ts727function calculatePriorMeanSpecified(CODE
LOWpackages/shared/src/power/power.ts739function calculatePriorVarianceSpecified(CODE
LOWpackages/shared/src/power/power.ts759function calculatePriorVarianceDGP(CODE
LOWpackages/shared/src/power/power.ts784function getMarginalVarianceTauHat(CODE
LOW…ed/src/settings/resolvers/genMetricOverrideResolver.ts12export default function genMetricOverrideResolver(CODE
LOWpackages/shared/src/sdk-versioning/sdk-payload.ts93export function conditionHasSavedGroupErrors(CODE
LOWpackages/shared/src/sdk-versioning/index.ts254export function getMinSupportedSDKVersions(CODE
LOWpackages/shared/src/enterprise/power.ts97function sequentialIntervalHalfwidth(CODE
LOWpackages/shared/src/enterprise/power.ts108function calculateMidExperimentPowerSingleError(CODE
LOWpackages/shared/src/enterprise/power.ts128export function calculateMidExperimentPowerSingle(CODE
LOWpackages/shared/src/enterprise/power.ts290function calculateMidExperimentPowerBayes(CODE
LOWpackages/shared/src/enterprise/power.ts310function calculateMidExperimentPowerFreq(CODE
LOWpackages/shared/src/enterprise/power.ts334export function calculateMidExperimentPower(CODE
LOWpackages/shared/src/enterprise/power.ts441export function getAverageExposureOverLastNDays(CODE
LOWpackages/shared/src/enterprise/pipeline.ts41export function normalizeIncrementalFullRefreshField(CODE
LOWpackages/shared/src/enterprise/pipeline.ts55export function getIncrementalFullRefreshReasons(CODE
LOWpackages/shared/src/enterprise/pipeline.ts81export function isExperimentCoveredByIncrementalPipeline(CODE
LOWpackages/shared/src/enterprise/pipeline.ts99export function getUnsupportedIncrementalExperimentTypeReason(CODE
LOWpackages/shared/src/enterprise/pipeline.ts119export function isExperimentIncrementalEnabled(CODE
LOWpackages/shared/src/enterprise/pipeline.ts137export function getIncrementalPipelineUnsupportedReason(params: {CODE
LOWpackages/shared/src/enterprise/pipeline.ts226export function bigQueryCreateTableOptions(CODE
LOWpackages/shared/src/enterprise/pipeline.ts239export function databricksCreateTableOptions(CODE
LOWpackages/shared/src/enterprise/pipeline.ts249export function snowflakeCreateTableOptions(CODE
LOWpackages/shared/src/enterprise/pipeline.ts258export function getPipelineValidationCreateTableQuery({CODE
LOWpackages/shared/src/enterprise/pipeline.ts271export function getPipelineValidationInsertQuery({CODE
LOWpackages/shared/src/enterprise/pipeline.ts281export function getPipelineValidationDropTableQuery({CODE
LOWpackages/shared/src/enterprise/pipeline.ts293export function bigQueryCreateTablePartitions(CODE
LOWpackages/shared/src/enterprise/pipeline.ts325export function prestoCreateTablePartitions(columns: string[]) {CODE
1527 more matches not shown…
Decorative Section Separators62 hits · 188 pts
SeverityFileLineSnippetContext
MEDIUMpackages/shared/src/util/features.ts1436// ── Scheduled / deferred publish ────────────────────────────────────────────COMMENT
MEDIUMpackages/shared/src/revisions/helpers.ts460// ── Revision display helpers ─────────────────────────────────────────────────COMMENT
MEDIUMpackages/shared/src/revisions/scheduledPublish.ts1// ── Scheduled / deferred publish ────────────────────────────────────────────COMMENT
MEDIUM…/front-end/test/components/RampScheduleSection.test.ts232 // ── Timing changes must NOT break the match ───────────────────────────────COMMENT
MEDIUM…rprise/components/ProductAnalytics/ExplorerContext.tsx66 // ─── State ─────────────────────────────────────────────────────────────COMMENT
MEDIUM…rprise/components/ProductAnalytics/ExplorerContext.tsx91 // ─── Modifiers ─────────────────────────────────────────────────────────COMMENT
MEDIUMpackages/front-end/styles/global.scss3794// ── rrweb-player control bar overrides ───────────────────────────────────────COMMENT
MEDIUM…-end/components/RampSchedule/RampMonitoringSignals.tsx971 // ── Signal-aware buttons (rollback / hold) ──────────────────────────────COMMENT
MEDIUM…-end/components/RampSchedule/RampMonitoringSignals.tsx1073 // ── Approval CTA ────────────────────────────────────────────────────────COMMENT
MEDIUM…ges/front-end/components/RampSchedule/RampTimeline.tsx27// ─── helpers ────────────────────────────────────────────────────────────────COMMENT
MEDIUM…ges/front-end/components/RampSchedule/RampTimeline.tsx153// ─── PopoverEffectRow ─────────────────────────────────────────────────────────COMMENT
MEDIUM…ges/front-end/components/RampSchedule/RampTimeline.tsx176// ─── Popover patch display ────────────────────────────────────────────────────COMMENT
MEDIUM…ges/front-end/components/RampSchedule/RampTimeline.tsx338// ─── Node popover content ─────────────────────────────────────────────────────COMMENT
MEDIUM…ges/front-end/components/RampSchedule/RampTimeline.tsx568// ─── NodeDot ─────────────────────────────────────────────────────────────────COMMENT
MEDIUM…ges/front-end/components/RampSchedule/RampTimeline.tsx594// ─── Node ────────────────────────────────────────────────────────────────────COMMENT
MEDIUM…ges/front-end/components/RampSchedule/RampTimeline.tsx669// ─── Connector ───────────────────────────────────────────────────────────────COMMENT
MEDIUM…ges/front-end/components/RampSchedule/RampTimeline.tsx691// ─── RampTimeline ─────────────────────────────────────────────────────────────COMMENT
MEDIUM…ges/front-end/components/RampSchedule/RampTimeline.tsx701// ─── Exported helpers (used by parent pages to build header rows) ─────────────COMMENT
MEDIUM…ges/front-end/components/RampSchedule/RampTimeline.tsx752// ─── RampTimeline ─────────────────────────────────────────────────────────────COMMENT
MEDIUM…ront-end/components/RampSchedule/RampScheduleModal.tsx27// ─── Types ────────────────────────────────────────────────────────────────────COMMENT
MEDIUM…ront-end/components/RampSchedule/RampScheduleModal.tsx38// ─── Helpers ─────────────────────────────────────────────────────────────────COMMENT
MEDIUM…ront-end/components/RampSchedule/RampScheduleModal.tsx129// ─── Component ───────────────────────────────────────────────────────────────COMMENT
MEDIUM…ront-end/components/RampSchedule/RampScheduleModal.tsx143 // ── Ramp section state ───────────────────────────────────────────────────COMMENT
MEDIUM…ront-end/components/RampSchedule/RampScheduleModal.tsx150 // ── Save ─────────────────────────────────────────────────────────────────COMMENT
MEDIUM…ront-end/components/RampSchedule/RampScheduleModal.tsx218 // ── Render ────────────────────────────────────────────────────────────────COMMENT
MEDIUM…t-end/components/RampSchedule/RampTimeline.module.scss1// ─── Theme-aware color tokens ────────────────────────────────────────────────COMMENT
MEDIUM…t-end/components/RampSchedule/RampTimeline.module.scss16// ─── constants (mirrored from TSX) ──────────────────────────────────────────COMMENT
MEDIUM…t-end/components/RampSchedule/RampTimeline.module.scss41// ─── NodeDot ─────────────────────────────────────────────────────────────────COMMENT
MEDIUM…t-end/components/RampSchedule/RampTimeline.module.scss74// ─── Node ────────────────────────────────────────────────────────────────────COMMENT
MEDIUM…t-end/components/RampSchedule/RampTimeline.module.scss100// ─── Connector ───────────────────────────────────────────────────────────────COMMENT
MEDIUM…t-end/components/RampSchedule/RampTimeline.module.scss127// ─── PopoverEffectRow ─────────────────────────────────────────────────────────COMMENT
MEDIUM…t-end/components/RampSchedule/RampTimeline.module.scss138// ─── NodePopoverContent ───────────────────────────────────────────────────────COMMENT
MEDIUM…t-end/components/RampSchedule/RampTimeline.module.scss150// ─── Scheduled date two-line label ───────────────────────────────────────────COMMENT
MEDIUM…t-end/components/RampSchedule/RampTimeline.module.scss156// ─── RampTimeline root ───────────────────────────────────────────────────────COMMENT
MEDIUM…s/front-end/components/Features/FeatureDiffRenders.tsx255// ─── Ramp schedule diff helpers ──────────────────────────────────────────────COMMENT
MEDIUM…s/front-end/components/Features/FeatureDiffRenders.tsx1658// ─── Prerequisite diff helpers ───────────────────────────────────────────────COMMENT
MEDIUM…t-end/components/SavedGroups/SavedGroupDiffRenders.tsx150// ─── Section renders ─────────────────────────────────────────────────────────COMMENT
MEDIUM…t-end/components/SavedGroups/SavedGroupDiffRenders.tsx582// ─── Badge getters ────────────────────────────────────────────────────────────COMMENT
MEDIUM…nt-end/components/Experiment/ExperimentDiffRenders.tsx43// ─── Helpers ─────────────────────────────────────────────────────────────────COMMENT
MEDIUM…nt-end/components/Experiment/ExperimentDiffRenders.tsx141// ─── Section renders ──────────────────────────────────────────────────────────COMMENT
MEDIUM…nt-end/components/Experiment/ExperimentDiffRenders.tsx179 // ── Attribute targeting (condition) ──────────────────────────────────────COMMENT
MEDIUM…nt-end/components/Experiment/ExperimentDiffRenders.tsx207 // ── Saved group targeting ─────────────────────────────────────────────────COMMENT
MEDIUM…nt-end/components/Experiment/ExperimentDiffRenders.tsx233 // ── Prerequisite targeting ────────────────────────────────────────────────COMMENT
MEDIUM…nt-end/components/Experiment/ExperimentDiffRenders.tsx261 // ── Traffic (coverage + weights) ─────────────────────────────────────────COMMENT
MEDIUM…nt-end/components/Experiment/ExperimentDiffRenders.tsx287 // ── Namespace ─────────────────────────────────────────────────────────────COMMENT
MEDIUM…nt-end/components/Experiment/ExperimentDiffRenders.tsx308 // ── Hash seed ─────────────────────────────────────────────────────────────COMMENT
MEDIUM…nt-end/components/Experiment/ExperimentDiffRenders.tsx589 // ── Bandit schedule / burn-in ──────────────────────────────────────────────COMMENT
MEDIUM…nt-end/components/Experiment/ExperimentDiffRenders.tsx623 // ── Long-text fields ───────────────────────────────────────────────────────COMMENT
MEDIUM…nt-end/components/Experiment/ExperimentDiffRenders.tsx638 // ── Fallback for any future/unhandled fields ───────────────────────────────COMMENT
MEDIUM…nt-end/components/Experiment/ExperimentDiffRenders.tsx752// ─── Badge getters ────────────────────────────────────────────────────────────COMMENT
MEDIUM…ckages/front-end/components/Reviews/diffCopyFormats.ts175// ── "LLM / agents": XML-wrapped before/after per entity ──────────────────────COMMENT
MEDIUM…nt-end/components/Reviews/Feature/revisionLogReplay.ts7// ─── Log replay engine ────────────────────────────────────────────────────────COMMENT
MEDIUMpackages/back-end/test/services/rampSchedule.test.ts807 // ── condition ────────────────────────────────────────────────────────────COMMENT
MEDIUMpackages/back-end/test/services/rampSchedule.test.ts834 // ── savedGroups ──────────────────────────────────────────────────────────COMMENT
MEDIUMpackages/back-end/test/services/rampSchedule.test.ts861 // ── prerequisites ────────────────────────────────────────────────────────COMMENT
MEDIUMpackages/back-end/test/services/rampSchedule.test.ts888 // ── force (null is a valid value, not a clear signal) ────────────────────COMMENT
MEDIUMpackages/back-end/test/services/rampSchedule.test.ts907 // ── cross-field independence ──────────────────────────────────────────────COMMENT
MEDIUMpackages/back-end/src/events/eventEnvironments.ts9// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMpackages/back-end/src/events/eventEnvironments.ts27// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMpackages/back-end/src/services/experiment-feature.ts426 // ── Phase 1: prune stale + gate on approval + merge against live ─────────COMMENT
2 more matches not shown…
Over-Commented Block131 hits · 125 pts
SeverityFileLineSnippetContext
LOWcharts/growthbook/values.yaml81 # - name: EMAIL_HOSTCOMMENT
LOWcharts/growthbook/values.yaml101 # - name: S3_REGIONCOMMENT
LOWcharts/growthbook/values.yaml121 # value: ""COMMENT
LOWcharts/growthbook/charts/server/Chart.yaml1apiVersion: v2COMMENT
LOWcharts/growthbook/charts/server/Chart.yaml21# incremented each time you make changes to the application. Versions are not expected toCOMMENT
LOWcharts/growthbook/charts/server/values.yaml81 paths:COMMENT
LOWdocs/sidebars.js441 type: "doc",COMMENT
LOWdocs/src/styles/custom.scss261// --ifm-color-primary-lighter: #d9bff8;COMMENT
LOWdocs/src/styles/components/_menus.scss141 // padding-inline-end: 0;COMMENT
LOWdocs/src/styles/components/_stepper.scss41 background: var(--stepper-step-number-border);COMMENT
LOWdocs/src/styles/components/_button-card.scss41 // Unused classes that we may use in the futureCOMMENT
LOWdocs/src/styles/components/_button-card.scss61 // &.button-card--default {COMMENT
LOWdocs/src/styles/components/_markdown.scss1// html[data-theme="light"] {COMMENT
LOWpackages/shared/types/feature.d.ts61// `environments: string[]`. Upgraded by `upgradeV0Feature`.COMMENT
LOWpackages/shared/types/query.d.ts81 | "aggregatedFactTableCreate"COMMENT
LOWpackages/shared/types/stats.d.ts21// comparisons / display strings) or any single piece of it without pullingCOMMENT
LOWpackages/shared/src/snapshot-analysis-chunks.ts341// -- Legacy chunk migration --COMMENT
LOWpackages/shared/src/enterprise/product-analytics/sql.ts681 `Selected unit ${selectedUnit} is not in the fact table user id types`,COMMENT
LOWpackages/shared/src/util/diffFormats.ts1// Schema-keyed JSON formats for change-sets (feature revisions, etc.). TheseCOMMENT
LOWpackages/shared/src/util/diffFormats.ts241// {COMMENT
LOWpackages/shared/src/util/diffFormats.ts301COMMENT
LOWpackages/shared/src/util/event-forwarder-datasource.ts21COMMENT
LOWpackages/shared/src/util/format-json.ts1// Format a parsed JSON value for display/storage with one design rule:COMMENT
LOWpackages/shared/src/util/features.ts361 }COMMENT
LOWpackages/shared/src/util/features.ts461 // safely, so preserve the value's `$extends` array verbatim (lossless, justCOMMENT
LOWpackages/shared/src/util/features.ts1361 // because changes were published after approval.COMMENT
LOWpackages/shared/src/util/features.ts1541 normalizeMetadataValue(k, revision.metadata![k]),COMMENT
LOWpackages/shared/src/util/features.ts2161COMMENT
LOWpackages/shared/src/util/index.ts401 if (rule.environments === undefined) return applicableEnvs;COMMENT
LOWpackages/shared/src/validators/constant.ts81}COMMENT
LOWpackages/shared/src/validators/constant.ts181}COMMENT
LOWpackages/shared/src/validators/features.ts541COMMENT
LOWpackages/shared/src/validators/features.ts621 // auto-publish executes with this user's authority. Absent when armed byCOMMENT
LOWpackages/shared/src/validators/revisions.ts161 // `authorId` when absent.COMMENT
LOWpackages/front-end/ui/Modal/index.tsx281COMMENT
LOW…/front-end/test/components/RampScheduleSection.test.ts401});COMMENT
LOWpackages/front-end/test/services/importing.test.ts1141 // The LD importer produces output consumed directly by the v2 writeCOMMENT
LOW…ages/front-end/test/services/statsig-importing.test.ts1import { StatsigFeatureGate } from "@/services/importing/statsig/types";COMMENT
LOW…components/ProductAnalytics/AIChat/ChatMessageList.tsx161 !!item.toolResultData &&COMMENT
LOWpackages/front-end/components/OpenVisualEditorLink.tsx61COMMENT
LOW…es/front-end/components/GeneralSettings/AISettings.tsx61// We present a closed dropdown rather than free text — letting usersCOMMENT
LOW…components/Experiment/CompareExperimentEventsModal.tsx101// Exhaustiveness-checked map of every ExperimentPhaseStringDates field to itsCOMMENT
LOW…s/front-end/components/Experiment/SnapshotProvider.tsx141 // the dimensionless snapshotCOMMENT
LOW…components/Experiment/VisualChangesetTable.module.scss1// Component-local stylesheet for the redesigned "Values" block (visualCOMMENT
LOW…ont-end/components/Experiment/VisualChangesetTable.tsx381COMMENT
LOW…t-end/components/Experiment/visualChangesetHumanize.ts21 // filenames, color/border tokens, line counts) is either crypticCOMMENT
LOWpackages/front-end/components/Revision/RevisionDiff.tsx21 // "full" renders the human-readable summary followed by the JSON diffsCOMMENT
LOW…/front-end/components/Revision/revisionTimelineLogs.ts161 // are available — i.e. the diff/raw-JSON the disclosure was scoped toCOMMENT
LOW…/front-end/components/Revision/ReviewAndPublishTab.tsx381 scheduledPending && !!revision.scheduledPublishBypassApproval;COMMENT
LOW…ckages/front-end/components/Reviews/diffCommentRefs.ts1import { diffLines } from "diff";COMMENT
LOW…ckages/front-end/components/Reviews/diffCommentRefs.ts21// is the semantic key of the diff section (see `FeatureRevisionDiff.key`),COMMENT
LOWpackages/front-end/components/Reviews/ReviewHeader.tsx61 title: string;COMMENT
LOW…/front-end/components/Reviews/reviewAndPublishState.ts1import type { RevisionStatus } from "shared/validators";COMMENT
LOW…/front-end/components/Reviews/reviewAndPublishState.ts41 // can return it to draft even if someone else requested the review.COMMENT
LOW…ages/front-end/components/Reviews/DivergenceNotice.tsx21 // When the approval is stale: when the surviving approval was given and howCOMMENT
LOW…/front-end/components/Reviews/ReviewCommentPopover.tsx61interface Props {COMMENT
LOW…/front-end/components/Reviews/ReviewCommentPopover.tsx81 // the non-armed "Submit and Publish" option, which publishes as the reviewer.COMMENT
LOW…ages/front-end/components/Reviews/RevisionTimeline.tsx81COMMENT
LOW…ont-end/components/Reviews/ScheduledPublishControl.tsx41// mode dropdown ("when approved" vs "on a specific date" — mutually exclusive onCOMMENT
LOW…ont-end/components/Reviews/ScheduledPublishControl.tsx81 // { scheduledPublishAt: null } to clear.COMMENT
71 more matches not shown…
Cross-Language Confusion (JS/TS)13 hits · 88 pts
SeverityFileLineSnippetContext
HIGH…ghlighting/Snippets/MultivariateFeatureCodeSnippet.tsx167print(value)CODE
HIGH…ghlighting/Snippets/MultivariateFeatureCodeSnippet.tsx220print(value)CODE
HIGH…axHighlighting/Snippets/GrowthBookSetupCodeSnippet.tsx518 print("Viewed Experiment")CODE
HIGH…axHighlighting/Snippets/GrowthBookSetupCodeSnippet.tsx519 print("Experiment Id: ", experiment.key)CODE
HIGH…axHighlighting/Snippets/GrowthBookSetupCodeSnippet.tsx520 print("Variation Id: ", experimentResult.variationId)CODE
HIGH…axHighlighting/Snippets/GrowthBookSetupCodeSnippet.tsx679 print("Viewed Experiment")CODE
HIGH…axHighlighting/Snippets/GrowthBookSetupCodeSnippet.tsx680 print("Experiment Id: " + experiment.key)CODE
HIGH…axHighlighting/Snippets/GrowthBookSetupCodeSnippet.tsx681 print("Variation Id: " + result.key)CODE
HIGH…axHighlighting/Snippets/GrowthBookSetupCodeSnippet.tsx778 print("Viewed Experiment")CODE
HIGH…axHighlighting/Snippets/GrowthBookSetupCodeSnippet.tsx779 print("Experiment Id: " + gbExperiment.key)CODE
HIGH…axHighlighting/Snippets/GrowthBookSetupCodeSnippet.tsx780 print("Variation Id: " + gbExperimentResult.variationId)CODE
HIGH…taxHighlighting/Snippets/BooleanFeatureCodeSnippet.tsx190 print("Feature is enabled!")CODE
HIGHpackages/back-end/src/services/notebook.ts244print(create_notebook(CODE
Fake / Example Data80 hits · 72 pts
SeverityFileLineSnippetContext
LOWpackages/shared/test/permissions-demo-project.test.ts16 ownerEmail: "test@test.com",CODE
LOWpackages/shared/test/permissions.test.ts12 ownerEmail: "test@test.com",CODE
LOWpackages/shared/test/permissions.test.ts976 ownerEmail: "test@test.com",CODE
LOWpackages/shared/test/resolveConstants.test.ts287 expect(resolveConstantRefs("{{ @const:full }}", map)).toBe("Jane Doe");CODE
LOW…ckages/front-end/components/Forms/MultiSelectField.tsx195 "value" | "onChange" | "options" | "multi" | "initialOption" | "placeholder"CODE
LOW…ckages/front-end/components/Forms/MultiSelectField.tsx252 | "placeholder"CODE
LOWpackages/front-end/components/Forms/SelectField.tsx49 "value" | "onChange" | "options" | "multi" | "initialOption" | "placeholder"CODE
LOW…ages/front-end/components/Features/CustomHookModal.tsx56 email: "user@example.com",CODE
LOW…front-end/components/CustomFields/CustomFieldModal.tsx400 {...form.register("placeholder")}CODE
LOWpackages/back-end/README.md4531. Run `yarn workspace back-end generate-dummy-data`. This will create CSV files in `/tmp/csv`CODE
LOWpackages/back-end/package.json23 "generate-dummy-data": "ts-node ./test/data-generator/new-generator.ts",CODE
LOWpackages/back-end/test/migrations.test.ts2087 ownerEmail: "test@test.com",CODE
LOWpackages/back-end/test/migrations.test.ts2102 ownerEmail: "test@test.com",CODE
LOWpackages/back-end/test/migrations.test.ts2134 ownerEmail: "test@test.com",CODE
LOWpackages/back-end/test/permissions.test.ts3057// ownerEmail: "test@test.com",COMMENT
LOWpackages/back-end/test/permissions.test.ts3125// ownerEmail: "test@test.com",COMMENT
LOWpackages/back-end/test/permissions.test.ts14 ownerEmail: "test@test.com",CODE
LOWpackages/back-end/test/permissions.test.ts1481 ownerEmail: "test@test.com",CODE
LOWpackages/back-end/test/permissions.test.ts1642 ownerEmail: "test@test.com",CODE
LOWpackages/back-end/test/permissions.test.ts1858 ownerEmail: "test@test.com",CODE
LOWpackages/back-end/test/permissions.test.ts2017 ownerEmail: "test@test.com",CODE
LOWpackages/back-end/test/permissions.test.ts2135 ownerEmail: "test@test.com",CODE
LOWpackages/back-end/test/permissions.test.ts2294 ownerEmail: "test@test.com",CODE
LOWpackages/back-end/test/permissions.test.ts2384 ownerEmail: "test@test.com",CODE
LOWpackages/back-end/test/permissions.test.ts2485 ownerEmail: "test@test.com",CODE
LOWpackages/back-end/test/permissions.test.ts2581 ownerEmail: "test@test.com",CODE
LOWpackages/back-end/test/permissions.test.ts2649 ownerEmail: "test@test.com",CODE
LOWpackages/back-end/test/permissions.test.ts2717 ownerEmail: "test@test.com",CODE
LOWpackages/back-end/test/permissions.test.ts2785 ownerEmail: "test@test.com",CODE
LOWpackages/back-end/test/permissions.test.ts2853 ownerEmail: "test@test.com",CODE
LOWpackages/back-end/test/permissions.test.ts2921 ownerEmail: "test@test.com",CODE
LOWpackages/back-end/test/permissions.test.ts2989 ownerEmail: "test@test.com",CODE
LOWpackages/back-end/test/permissions.test.ts3194 ownerEmail: "test@test.com",CODE
LOWpackages/back-end/test/permissions.test.ts3281 ownerEmail: "test@test.com",CODE
LOWpackages/back-end/test/permissions.test.ts3402 ownerEmail: "test@test.com",CODE
LOWpackages/back-end/test/permissions.test.ts3489 ownerEmail: "test@test.com",CODE
LOWpackages/back-end/test/permissions.test.ts3576 ownerEmail: "test@test.com",CODE
LOWpackages/back-end/test/permissions.test.ts3667 ownerEmail: "test@test.com",CODE
LOWpackages/back-end/test/permissions.test.ts3791 ownerEmail: "test@test.com",CODE
LOWpackages/back-end/test/permissions.test.ts3882 ownerEmail: "test@test.com",CODE
LOWpackages/back-end/test/permissions.test.ts4091 ownerEmail: "test@test.com",CODE
LOWpackages/back-end/test/permissions.test.ts4335 ownerEmail: "test@test.com",CODE
LOWpackages/back-end/test/permissions.test.ts4544 ownerEmail: "test@test.com",CODE
LOWpackages/back-end/test/permissions.test.ts4656 ownerEmail: "test@test.com",CODE
LOWpackages/back-end/test/permissions.test.ts4774 ownerEmail: "test@test.com",CODE
LOWpackages/back-end/test/permissions.test.ts4886 ownerEmail: "test@test.com",CODE
LOWpackages/back-end/test/permissions.test.ts5059 ownerEmail: "test@test.com",CODE
LOWpackages/back-end/test/permissions.test.ts5117 ownerEmail: "test@test.com",CODE
LOWpackages/back-end/test/permissions.test.ts5175 ownerEmail: "test@test.com",CODE
LOWpackages/back-end/test/permissions.test.ts5232 ownerEmail: "test@test.com",CODE
LOWpackages/back-end/test/permissions.test.ts5329 ownerEmail: "test@test.com",CODE
LOWpackages/back-end/test/permissions.test.ts5452 ownerEmail: "test@test.com",CODE
LOWpackages/back-end/test/permissions.test.ts5586 ownerEmail: "test@test.com",CODE
LOWpackages/back-end/test/permissions.test.ts5645 ownerEmail: "test@test.com",CODE
LOWpackages/back-end/test/permissions.test.ts5722 ownerEmail: "test@test.com",CODE
LOWpackages/back-end/test/permissions.test.ts5876 ownerEmail: "test@test.com",CODE
LOWpackages/back-end/test/permissions.test.ts5931 ownerEmail: "test@test.com",CODE
LOWpackages/back-end/test/permissions.test.ts6051 ownerEmail: "test@test.com",CODE
LOWpackages/back-end/test/permissions.test.ts6197 ownerEmail: "test@test.com",CODE
LOWpackages/back-end/test/permissions.test.ts6271 ownerEmail: "test@test.com",CODE
20 more matches not shown…
Synthetic Comment Markers6 hits · 45 pts
SeverityFileLineSnippetContext
HIGHpackages/shared/src/ai.ts301// When an AI-generated image replaces an existing one on the page, it dropsCOMMENT
HIGH…rprise/components/ProductAnalytics/ExplorerContext.tsx233 // so configs loaded from URLs, saved explorations, or AI-generatedCOMMENT
HIGHpackages/back-end/src/util/secrets.ts304// Kraken.io credentials — AI-generated images are resized + re-encoded toCOMMENT
HIGHpackages/back-end/src/api/visual-editor-ai/scopeCss.ts1// Scopes a stylesheet under a single root selector so an AI-generatedCOMMENT
HIGH…/back-end/src/api/visual-editor-ai/postPromoteImage.ts8// Moves an AI-generated image out of the throwaway `gen/` quarantine prefixCOMMENT
HIGHpackages/back-end/src/services/imageOptimization.ts11// AI-generated images are optimized via the Kraken.io API (resize + WebP),COMMENT
Structural Annotation Overuse23 hits · 40 pts
SeverityFileLineSnippetContext
LOW.agents/guides/backend/api-patterns.md72#### Step 1: Create the OpenAPI specCOMMENT
LOW.agents/guides/backend/api-patterns.md106#### Step 2: Wire up the API config in the modelCOMMENT
LOW.agents/guides/backend/api-patterns.md129#### Step 3: Register the model for routingCOMMENT
LOW.agents/guides/backend/api-patterns.md133#### Step 4: Implement `toApiInterface`COMMENT
LOW.agents/guides/backend/model-patterns.md11### Step 1: Create the Base ClassCOMMENT
LOW.agents/guides/backend/model-patterns.md38### Step 2: Extend with Permission LogicCOMMENT
LOW.agents/guides/backend/model-patterns.md64### Step 3: Add to the RequestContext so it can be used from anywhereCOMMENT
LOWpackages/sdk-js/README.md41### Step 1: Configure your appCOMMENT
LOWpackages/sdk-js/README.md73### Step 2: Start Feature Flagging!COMMENT
LOWpackages/front-end/components/DataViz/PivotTable.tsx434 // Step 1: Extract metadataCOMMENT
LOWpackages/front-end/components/DataViz/PivotTable.tsx437 // Step 2: Get sorted x-axis valuesCOMMENT
LOWpackages/front-end/components/DataViz/PivotTable.tsx440 // Step 3: Build lookup map for efficient row accessCOMMENT
LOWpackages/front-end/components/DataViz/PivotTable.tsx446 // Step 4: Build column headersCOMMENT
LOWpackages/front-end/components/DataViz/PivotTable.tsx453 // Step 5: Build rows (with or without dimensions)COMMENT
LOWpackages/sdk-react/README.md38### Step 1: Configure your appCOMMENT
LOWpackages/sdk-react/README.md80### Step 2: Start feature flagging!COMMENT
LOWpackages/back-end/test/services/rampSchedule.test.ts669 // Step 0: baseline for bothCOMMENT
LOWpackages/back-end/test/services/rampSchedule.test.ts674 // Step 1: only TARGET_A coverage updateCOMMENT
LOWpackages/back-end/test/services/rampSchedule.test.ts676 // Step 2: only TARGET_B condition updateCOMMENT
LOWpackages/back-end/test/services/rampSchedule.test.ts987 // Step 2: sum = 300 (step 0) + 0 (pure approval, step 1) + 600 (step 2) = 900COMMENT
LOWpackages/back-end/test/services/rampSchedule.test.ts3969 // Step 0: pure approval (no interval). Step 1: instant (no interval, no holds).COMMENT
LOWpackages/back-end/src/models/FeatureRevisionModel.ts1847 // Step 1: bake this reviewer's verdict, scoped to their own entry soCOMMENT
LOWpackages/back-end/src/models/FeatureRevisionModel.ts1882 // Step 2: reconcile `status` from the stored reviews (CAS-guarded on bothCOMMENT
Modern AI Meta-Vocabulary9 hits · 27 pts
SeverityFileLineSnippetContext
MEDIUMpackages/shared/test/decisionCriteria.test.ts487 // All guardrails losing - should matchCOMMENT
MEDIUM…-end/components/RampSchedule/RampMonitoringSignals.tsx973 // guardrails or active hold signals always take priority over the approvalCOMMENT
MEDIUM…-end/components/SafeRollout/Results/CompactResults.tsx149 // Only include goals in calculation, not secondary or guardrailsCOMMENT
MEDIUM…ents/DecisionCriteria/DecisionCriteriaModalContent.tsx49// Direction options for guardrailsCOMMENT
MEDIUMpackages/front-end/hooks/useExperimentTableRows.ts305 // Only include goals in calculation, not secondary or guardrailsCOMMENT
MEDIUMpackages/back-end/src/util/migrations.ts858 // We know the metric ids included, but don't know if they were goals or guardrailsCOMMENT
MEDIUMpackages/back-end/src/models/ExperimentModel.ts1432 // Remove from guardrailsCOMMENT
MEDIUMpackages/back-end/src/services/rampSchedule.ts1004 // guardrails here is the required mechanism to get them into analysisSummary.COMMENT
MEDIUMpackages/back-end/src/services/rampScheduleEvaluator.ts39 // guardrails/health, min sample size, signal metrics) has already cleared.COMMENT
Verbosity Indicators13 hits · 26 pts
SeverityFileLineSnippetContext
LOWpackages/front-end/components/DataViz/PivotTable.tsx434 // Step 1: Extract metadataCOMMENT
LOWpackages/front-end/components/DataViz/PivotTable.tsx437 // Step 2: Get sorted x-axis valuesCOMMENT
LOWpackages/front-end/components/DataViz/PivotTable.tsx440 // Step 3: Build lookup map for efficient row accessCOMMENT
LOWpackages/front-end/components/DataViz/PivotTable.tsx446 // Step 4: Build column headersCOMMENT
LOWpackages/front-end/components/DataViz/PivotTable.tsx453 // Step 5: Build rows (with or without dimensions)COMMENT
LOWpackages/front-end/services/sqlAutoComplete.ts151 // So we need to check if the path is empty before adding it to the completionsCOMMENT
LOWpackages/back-end/test/services/rampSchedule.test.ts669 // Step 0: baseline for bothCOMMENT
LOWpackages/back-end/test/services/rampSchedule.test.ts674 // Step 1: only TARGET_A coverage updateCOMMENT
LOWpackages/back-end/test/services/rampSchedule.test.ts676 // Step 2: only TARGET_B condition updateCOMMENT
LOWpackages/back-end/test/services/rampSchedule.test.ts987 // Step 2: sum = 300 (step 0) + 0 (pure approval, step 1) + 600 (step 2) = 900COMMENT
LOWpackages/back-end/test/services/rampSchedule.test.ts3969 // Step 0: pure approval (no interval). Step 1: instant (no interval, no holds).COMMENT
LOWpackages/back-end/src/models/FeatureRevisionModel.ts1847 // Step 1: bake this reviewer's verdict, scoped to their own entry soCOMMENT
LOWpackages/back-end/src/models/FeatureRevisionModel.ts1882 // Step 2: reconcile `status` from the stored reviews (CAS-guarded on bothCOMMENT
Hallucination Indicators2 hits · 20 pts
SeverityFileLineSnippetContext
CRITICALpackages/back-end/src/api/projects/putProject.ts14 req.context.models.projects.updateValidator.parse(req.body),CODE
CRITICALpackages/back-end/src/api/projects/postProject.ts7 const payload = req.context.models.projects.createValidator.parse(req.body);CODE
Unused Imports20 hits · 17 pts
SeverityFileLineSnippetContext
LOWpackages/stats/tests/test_utils.py1CODE
LOWpackages/stats/tests/test_utils.py3CODE
LOWpackages/stats/tests/test_utils.py6CODE
LOWpackages/stats/tests/test_utils.py7CODE
LOWpackages/stats/tests/test_shared_models.py6CODE
LOWpackages/stats/tests/test_midexperimentpower.py1CODE
LOWpackages/stats/tests/test_midexperimentpower.py2CODE
LOWpackages/stats/tests/test_midexperimentpower.py3CODE
LOWpackages/stats/tests/test_midexperimentpower.py5CODE
LOWpackages/stats/tests/test_midexperimentpower.py6CODE
LOWpackages/stats/tests/test_gbstats.py8CODE
LOWpackages/stats/tests/test_gbstats.py8CODE
LOWpackages/stats/tests/test_gbstats.py8CODE
LOWpackages/stats/tests/test_gbstats.py22CODE
LOWpackages/stats/tests/test_gbstats.py24CODE
LOWpackages/stats/tests/test_gbstats.py29CODE
LOWpackages/stats/tests/test_devtools.py1CODE
LOWpackages/stats/tests/test_devtools.py2CODE
LOWpackages/stats/tests/test_devtools.py3CODE
LOWpackages/stats/tests/test_devtools.py6CODE
Cross-File Repetition3 hits · 15 pts
SeverityFileLineSnippetContext
HIGHpackages/stats/gbstats/models/tests.py0return uninformative output when ab test analysis can't be performed adequatelySTRING
HIGHpackages/stats/gbstats/frequentist/tests.py0return uninformative output when ab test analysis can't be performed adequatelySTRING
HIGHpackages/stats/gbstats/bayesian/tests.py0return uninformative output when ab test analysis can't be performed adequatelySTRING
AI Slop Vocabulary5 hits · 14 pts
SeverityFileLineSnippetContext
MEDIUM…kages/front-end/styles/_bootstrap-theme-overrides.scss459 // Absolutely centered inside the host cell — the in-flow icon was forcingCOMMENT
LOWpackages/stats/gbstats/gbstats.py334 # if there are no goal metrics, just use 1 as the number of testsCOMMENT
MEDIUMpackages/back-end/src/app.ts234 // TODO: more robust health check?COMMENT
MEDIUM…s/back-end/src/routers/revision/revision.controller.ts881 // is robust to benign serialization drift between the client's cachedCOMMENT
MEDIUMpackages/back-end/src/services/features.ts1927 // We might want to investigate a more robust solution in the future.COMMENT
Deep Nesting15 hits · 12 pts
SeverityFileLineSnippetContext
LOWpackages/stats/tests/frequentist/test_tests.py39CODE
LOWpackages/stats/tests/frequentist/test_post_strat.py170CODE
LOWpackages/stats/tests/bayesian/test_tests.py27CODE
LOWpackages/stats/gbstats/gbstats.py162CODE
LOWpackages/stats/gbstats/gbstats.py192CODE
LOWpackages/stats/gbstats/gbstats.py280CODE
LOWpackages/stats/gbstats/gbstats.py317CODE
LOWpackages/stats/gbstats/gbstats.py745CODE
LOWpackages/stats/gbstats/gbstats.py1054CODE
LOWpackages/stats/gbstats/gbstats.py1373CODE
LOWpackages/stats/gbstats/models/tests.py1364CODE
LOWpackages/stats/gbstats/models/tests.py1523CODE
LOWpackages/stats/gbstats/devtools/simulation.py150CODE
LOWpackages/stats/gbstats/devtools/simulation.py292CODE
LOW…back-end/test/integrations/integration-query-runner.py295CODE
Self-Referential Comments3 hits · 10 pts
SeverityFileLineSnippetContext
MEDIUM…axHighlighting/Snippets/GrowthBookSetupCodeSnippet.tsx616# Create a context for the current user/requestCOMMENT
MEDIUMpackages/stats/gbstats/gbstats.py938 # Create a copy to avoid SettingWithCopy warnings or mutating the originalCOMMENT
MEDIUMpackages/stats/gbstats/gbstats.py1083 # Create the variation response objectCOMMENT
Excessive Try-Catch Wrapping7 hits · 8 pts
SeverityFileLineSnippetContext
LOWpackages/stats/gbstats/utils.py180 except Exception as e:CODE
LOWpackages/stats/gbstats/gbstats.py1453 except Exception as e:CODE
LOW…back-end/test/integrations/integration-query-runner.py317 except Exception as e:CODE
MEDIUM…back-end/test/integrations/integration-query-runner.py280def read_queries_cache() -> dict:CODE
LOWpackages/back-end/scripts/stats_server.py18 except Exception as e:CODE
LOWpackages/back-end/scripts/stats_server.py35 except Exception as e:CODE
LOWpackages/back-end/scripts/stats_server.py49 except Exception as e:CODE
Magic Placeholder Names1 hit · 5 pts
SeverityFileLineSnippetContext
HIGHpackages/back-end/src/scripts/generate-openapi.ts344 parts.push(` -H 'Authorization: Bearer YOUR_API_KEY'`);CODE
Redundant / Tautological Comments2 hits · 4 pts
SeverityFileLineSnippetContext
LOWpackages/stats/gbstats/gbstats.py948 # Check if the original column exists before trying to replace itCOMMENT
LOW.github/workflows/auto-approve-docs-changes.yml65 # Check if any non-markdown or non-mdx files existCOMMENT
Overly Generic Function Names1 hit · 1 pts
SeverityFileLineSnippetContext
LOW…axHighlighting/Snippets/GrowthBookSetupCodeSnippet.tsx1025async function handleRequest(event) {CODE
AI Structural Patterns2 hits · 1 pts
SeverityFileLineSnippetContext
LOWpackages/stats/gbstats/gbstats.py925CODE
LOWpackages/stats/gbstats/gbstats.py1051CODE