Repository Analysis

tldraw/tldraw

Build infinite canvas apps in React with the tldraw SDK. World's best, top-most agent recommended #1 five star SDK.

3.4 Likely human-written View on GitHub

Analysis Overview

This report presents the forensic synthetic code analysis of tldraw/tldraw, a TypeScript project with 48,746 GitHub stars. SynthScan v2.0 examined 656,329 lines of code across 3382 source files, recording 1391 pattern matches distributed across 13 syntactic categories. The overall adjusted score of 3.4 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).

3.4
Adjusted Score
3.4
Raw Score
100%
Time Factor
2026-07-13
Last Push
48.7K
Stars
TypeScript
Language
656.3K
Lines of Code
3.4K
Files
1.4K
Pattern Hits
2026-07-14
Scan Date
0.00
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

This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.

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 9HIGH 2MEDIUM 489LOW 891

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 1391 distinct pattern matches across 13 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.

Decorative Section Separators484 hits · 1204 pts
SeverityFileLineSnippetContext
MEDIUMpackages/tldraw/src/test/groups.test.tsx834 // ┌─────────────────────────────────────────────────────────┐COMMENT
MEDIUMpackages/tldraw/src/test/groups.test.tsx836 // │ ┌────────────────────────┐ ┌──────────────────────┐ │COMMENT
MEDIUMpackages/tldraw/src/test/groups.test.tsx840 // │ └────────────────────────┘ └──────────────────────┘ │COMMENT
MEDIUMpackages/tldraw/src/test/groups.test.tsx841 // └─────────────────────────────────────────────────────────┘COMMENT
MEDIUMpackages/tldraw/src/test/groups.test.tsx933 // ┌─────────────────────────────────────────────────────────┐COMMENT
MEDIUMpackages/tldraw/src/test/groups.test.tsx935 // │ ┌────────────────────────┐ ┌──────────────────────┐ │COMMENT
MEDIUMpackages/tldraw/src/test/groups.test.tsx940 // │ └────────────────────────┘ └──────────────────────┘ │COMMENT
MEDIUMpackages/tldraw/src/test/groups.test.tsx941 // └─────────────────────────────────────────────────────────┘COMMENT
MEDIUMpackages/tldraw/src/test/groups.test.tsx1096 // ┌───────────┼────┼────────────────────────────────────────┐COMMENT
MEDIUMpackages/tldraw/src/test/groups.test.tsx1098 // │ ┌─────────┼────┼─────────┐ ┌──────────────────────┐ │COMMENT
MEDIUMpackages/tldraw/src/test/groups.test.tsx1102 // │ └─────────┼────┼─────────┘ └──────────────────────┘ │COMMENT
MEDIUMpackages/tldraw/src/test/groups.test.tsx1103 // └───────────┼────┼────────────────────────────────────────┘COMMENT
MEDIUMpackages/tldraw/src/test/groups.test.tsx1121 // ┌─────────────────────────────────────────────────────────┐COMMENT
MEDIUMpackages/tldraw/src/test/groups.test.tsx1123 // │ ┌────────────────────────┐ ┌──────────────────────┐ │COMMENT
MEDIUMpackages/tldraw/src/test/groups.test.tsx1128 // │ └────────────────────────┘ └──────────────────────┘ │COMMENT
MEDIUMpackages/tldraw/src/test/groups.test.tsx1129 // └─────────────────────────────────────────────────────────┘COMMENT
MEDIUMpackages/tldraw/src/test/groups.test.tsx1510 // ┌─────────────────────────────────────────────────────────┐COMMENT
MEDIUMpackages/tldraw/src/test/groups.test.tsx1512 // │ ┌────────────────────────┐ ┌──────────────────────┐ │COMMENT
MEDIUMpackages/tldraw/src/test/groups.test.tsx1517 // │ └────────────────────────┘ └──────────────────────┘ │COMMENT
MEDIUMpackages/tldraw/src/test/groups.test.tsx1518 // └─────────────────────────────────────────────────────────┘COMMENT
MEDIUMpackages/tldraw/src/test/groups.test.tsx1619 // ┌─────────────────────────────────────────────────────────┐COMMENT
MEDIUMpackages/tldraw/src/test/groups.test.tsx1621 // │ ┌────────────────────────┐ ┌──────────────────────┐ │COMMENT
MEDIUMpackages/tldraw/src/test/groups.test.tsx1626 // │ └────────────────────────┘ └──────────────────────┘ │COMMENT
MEDIUMpackages/tldraw/src/test/groups.test.tsx1627 // └─────────────────────────────────────────────────────────┘COMMENT
MEDIUMpackages/tldraw/src/test/groups.test.tsx1851// // ┌─────────────────────────────────────────────────────────┐COMMENT
MEDIUMpackages/tldraw/src/test/groups.test.tsx1853// // │ ┌────────────────────────┐ ┌──────────────────────┐ │COMMENT
MEDIUMpackages/tldraw/src/test/groups.test.tsx1858// // │ └────────────────────────┘ └──────────────────────┘ │COMMENT
MEDIUMpackages/tldraw/src/test/groups.test.tsx1859// // └─────────────────────────────────────────────────────────┘COMMENT
MEDIUMpackages/tldraw/src/test/groups.test.tsx1936 // ┌─────────────────────────────────────────────────────────┐COMMENT
MEDIUMpackages/tldraw/src/test/groups.test.tsx1938 // │ ┌────────────────────────┐ ┌──────────────────────┐ │COMMENT
MEDIUMpackages/tldraw/src/test/groups.test.tsx1943 // │ └────────────────────────┘ └──────────────────────┘ │COMMENT
MEDIUMpackages/tldraw/src/test/groups.test.tsx1944 // └─────────────────────────────────────────────────────────┘COMMENT
MEDIUMpackages/tldraw/src/test/groups.test.tsx902 // ┌──────────────────┐COMMENT
MEDIUMpackages/tldraw/src/test/groups.test.tsx907 // └──────────────────┘COMMENT
MEDIUMpackages/tldraw/src/test/groups.test.tsx1182 // ┌──────────────────────────────┐COMMENT
MEDIUMpackages/tldraw/src/test/groups.test.tsx1194 // └──────────────────────────────┘COMMENT
MEDIUMpackages/tldraw/src/test/groups.test.tsx1747 // ┌──────────────────────────────┐COMMENT
MEDIUMpackages/tldraw/src/test/groups.test.tsx1759 // └──────────────────────────────┘COMMENT
MEDIUMpackages/tldraw/src/test/resizing.test.ts342 // ┌──────────┐COMMENT
MEDIUMpackages/tldraw/src/test/resizing.test.ts348 // 10 └──────────┘COMMENT
MEDIUMpackages/tldraw/src/test/resizing.test.ts353 // 20 ┌──────────┐COMMENT
MEDIUMpackages/tldraw/src/test/resizing.test.ts359 // 30 └──────────┘COMMENT
MEDIUMpackages/tldraw/src/test/resizing.test.ts367 // ┌──────────────────┐COMMENT
MEDIUMpackages/tldraw/src/test/resizing.test.ts375 // └──────────────────OCOMMENT
MEDIUMpackages/tldraw/src/test/resizing.test.ts388 // ┌──────────────────────────────────────────────────────────────────┐COMMENT
MEDIUMpackages/tldraw/src/test/resizing.test.ts389 // │ ┌───────────────────────┐ │COMMENT
MEDIUMpackages/tldraw/src/test/resizing.test.ts393 // │ └───────────────────────┘ │COMMENT
MEDIUMpackages/tldraw/src/test/resizing.test.ts396 // │ ┌───────────────────────┐ │COMMENT
MEDIUMpackages/tldraw/src/test/resizing.test.ts400 // │ └───────────────────────┘ │COMMENT
MEDIUMpackages/tldraw/src/test/resizing.test.ts401 // └──────────────────────────────────────────────────────────────────OCOMMENT
MEDIUMpackages/tldraw/src/test/resizing.test.ts409 // ┌─────────────────────────────────┐COMMENT
MEDIUMpackages/tldraw/src/test/resizing.test.ts410 // │ ┌──────────┐ │COMMENT
MEDIUMpackages/tldraw/src/test/resizing.test.ts419 // 20 │ └──────────┘ │COMMENT
MEDIUMpackages/tldraw/src/test/resizing.test.ts427 // 40 │ ┌──────────┐ │COMMENT
MEDIUMpackages/tldraw/src/test/resizing.test.ts436 // 60 │ └──────────┘ │COMMENT
MEDIUMpackages/tldraw/src/test/resizing.test.ts437 // └─────────────────────────────────OCOMMENT
MEDIUMpackages/tldraw/src/test/resizing.test.ts446 // O───────────────┐COMMENT
MEDIUMpackages/tldraw/src/test/resizing.test.ts454 // └───────────────┘COMMENT
MEDIUMpackages/tldraw/src/test/resizing.test.ts463 // ┌───────────────────────────────────┐COMMENT
MEDIUMpackages/tldraw/src/test/resizing.test.ts464 // │ ┌──────────┐ │COMMENT
424 more matches not shown…
Hyper-Verbose Identifiers535 hits · 527 pts
SeverityFileLineSnippetContext
LOWinternal/scripts/generate-tldraw-package-docs.ts27export function generateTldrawPackageDocs({CODE
LOWinternal/scripts/api-check.ts33function getTempDeclarationFilename(packageName: string): string {CODE
LOWinternal/scripts/refresh-assets.ts196async function optimizeAndMergeDotcomIcons() {CODE
LOWinternal/scripts/refresh-assets.ts431async function writeUrlBasedAssetDeclarationFile() {CODE
LOWinternal/scripts/refresh-assets.ts468async function writeImportBasedAssetDeclarationFile(CODE
LOWinternal/scripts/refresh-assets.ts508async function writeSelfHostedAssetDeclarationFile(): Promise<void> {CODE
LOWinternal/scripts/refresh-assets.ts545async function writeAssetDeclarationDTSFile() {CODE
LOWinternal/scripts/check-circular-deps.ts103async function checkPackageForCircularDependencies(packageName: string, packageEntryPath: string) {CODE
LOWinternal/scripts/publish-editor-extensions.ts57async function copyExtensionToReleaseFolder(version: string) {CODE
LOWinternal/scripts/deploy-dotcom.ts223async function deployWorkersInDependencyOrder({CODE
LOWinternal/scripts/deploy-dotcom.ts521async function deployTldrawUserContentWorker({ dryRun }: { dryRun: boolean }) {CODE
LOWinternal/scripts/deploy-dotcom.ts736function updateFlyioReplicationManagerToml(appName: string, backupPath: string): void {CODE
LOWinternal/scripts/deploy-dotcom.ts769function updateFlyioViewSyncerToml(CODE
LOWinternal/scripts/deploy-dotcom.ts817async function deployZeroViaFlyIoMultiNode() {CODE
LOWinternal/scripts/deploy-dotcom.ts992async function coalesceWithPreviousAssets(assetsDir: string) {CODE
LOWinternal/scripts/export-template.ts149async function setWorkspaceDependenciesToLatest(dependencies?: Record<string, string>) {CODE
LOWinternal/scripts/prune-preview-deploys.ts70async function listPreviewWorkerDeployments() {CODE
LOWinternal/scripts/prune-preview-deploys.ts112async function deletePreviewWorkerDeployment(id: string) {CODE
LOWinternal/scripts/lib/publishing.ts75async function stageAllPackageJsonChanges() {CODE
LOWinternal/scripts/lib/publishing.ts102export async function getLatestTldrawVersionFromNpm({CODE
LOWinternal/scripts/lib/publishing.ts262export async function publishProductionDocsAndExamplesAndBemo({CODE
LOWinternal/scripts/lib/publishing.ts269export async function triggerBumpVersionsWorkflow(ghToken: string) {CODE
LOWinternal/scripts/lib/labels.ts42export function formatLabelOptionsForPRTemplate() {CODE
LOWpackages/validate/DOCS.md808function validateAndProcess(data: unknown) {CODE
LOWpackages/tldraw/api-report.api.md1285export function defaultHandleExternalExcalidrawContent(editor: Editor, { point, content }: {CODE
LOWpackages/tldraw/api-report.api.md1291export function defaultHandleExternalFileAsset(editor: Editor, { file, assetId }: TLFileExternalAsset, options: TLDefaulCODE
LOWpackages/tldraw/api-report.api.md1294export function defaultHandleExternalFileContent(editor: Editor, { point, files }: {CODE
LOWpackages/tldraw/api-report.api.md1300export function defaultHandleExternalFileReplaceContent(editor: Editor, { file, shapeId }: TLFileReplaceExternalContent,CODE
LOWpackages/tldraw/api-report.api.md1303export function defaultHandleExternalSvgTextContent(editor: Editor, { point, text }: {CODE
LOWpackages/tldraw/api-report.api.md1309export function defaultHandleExternalTextContent(editor: Editor, { point, text, html }: {CODE
LOWpackages/tldraw/api-report.api.md1316export function defaultHandleExternalTldrawContent(editor: Editor, { point, content }: {CODE
LOWpackages/tldraw/api-report.api.md1322export function defaultHandleExternalUrlAsset(editor: Editor, { url }: TLUrlExternalAsset, { toasts, msg }: TLDefaultExtCODE
LOWpackages/tldraw/api-report.api.md1325export function defaultHandleExternalUrlContent(editor: Editor, { point, url }: {CODE
LOWpackages/tldraw/api-report.api.md1334export function DefaultHelperButtonsContent(): JSX.Element;CODE
LOWpackages/tldraw/api-report.api.md4195export function TldrawUiComponentsProvider({ overrides, children }: TLUiComponentsProviderProps): JSX.Element;CODE
LOWpackages/tldraw/api-report.api.md4201export function TldrawUiContextualToolbar({ children, className, isMousingDown, getSelectionBounds, changeOnlyWhenYChangCODE
LOWpackages/tldraw/api-report.api.md4207export function TldrawUiDialogCloseButton(): JSX.Element;CODE
LOWpackages/tldraw/api-report.api.md4222export function TldrawUiDropdownMenuCheckboxItem({ children, onSelect, ...rest }: TLUiDropdownMenuCheckboxItemProps): JSCODE
LOWpackages/tldraw/api-report.api.md4225export function TldrawUiDropdownMenuContent({ className, side, align, sideOffset, alignOffset, collisionPadding, childreCODE
LOWpackages/tldraw/api-report.api.md4228export function TldrawUiDropdownMenuGroup({ className, children }: TLUiDropdownMenuGroupProps): JSX.Element;CODE
LOWpackages/tldraw/api-report.api.md4231export function TldrawUiDropdownMenuIndicator(): JSX.Element;CODE
LOWpackages/tldraw/api-report.api.md4243export function TldrawUiDropdownMenuSubContent({ id, alignOffset, sideOffset, size, children }: TLUiDropdownMenuSubConteCODE
LOWpackages/tldraw/api-report.api.md4246export function TldrawUiDropdownMenuSubTrigger({ id, label, title, disabled }: TLUiDropdownMenuSubTriggerProps): JSX.EleCODE
LOWpackages/tldraw/api-report.api.md4249export function TldrawUiDropdownMenuTrigger({ children, ...rest }: TLUiDropdownMenuTriggerProps): JSX.Element;CODE
LOWpackages/tldraw/api-report.api.md4261export function TldrawUiInFrontOfTheCanvas(): JSX.Element;CODE
LOWpackages/tldraw/api-report.api.md4270export function TldrawUiMenuActionCheckboxItem({ actionId, ...rest }: TLUiMenuActionCheckboxItemProps): JSX.Element | nuCODE
LOWpackages/tldraw/api-report.api.md4279export function TldrawUiMenuContextProvider({ type, sourceId, children }: TLUiMenuContextProviderProps): JSX.Element;CODE
LOWpackages/tldraw/api-report.api.md654export function CenteredTopPanelContainer({ maxWidth, ignoreRightWidth, stylePanelWidth, marginBetweenZones, squeezeAmouCODE
LOWpackages/tldraw/api-report.api.md673export function centerSelectionAroundPoint(editor: Editor, position: VecLike): void;CODE
LOWpackages/tldraw/api-report.api.md791export function ConvertToBookmarkMenuItem(): JSX.Element | null;CODE
LOWpackages/tldraw/api-report.api.md1119export function DefaultActionsMenuContent(): JSX.Element;CODE
LOWpackages/tldraw/api-report.api.md1136export function DefaultContextMenuContent(): JSX.Element;CODE
LOWpackages/tldraw/api-report.api.md1160export function DefaultFollowingIndicator(): JSX.Element | null;CODE
LOWpackages/tldraw/api-report.api.md1366export function DefaultKeyboardShortcutsDialogContent(): JSX.Element;CODE
LOWpackages/tldraw/api-report.api.md1407export function DefaultPeopleMenuFacePile({ userIds, userName, userColor }: TLUiPeopleMenuFacePileProps): JSX.Element;CODE
LOWpackages/tldraw/api-report.api.md1424export function DefaultQuickActionsContent(): JSX.Element | undefined;CODE
LOWpackages/tldraw/api-report.api.md1430export function DefaultRichTextToolbarContent({ textEditor, onEditLinkStart }: DefaultRichTextToolbarContentProps): JSX.CODE
LOWpackages/tldraw/api-report.api.md1484export function DefaultUserPresenceEditor(): JSX.Element;CODE
LOWpackages/tldraw/api-report.api.md1962export function FitFrameToContentMenuItem(): JSX.Element | null;CODE
LOWpackages/tldraw/api-report.api.md2331export function getArrowTerminalsInArrowSpace(editor: Editor, shape: TLArrowShape, bindings: TLArrowBindings): {CODE
475 more matches not shown…
Over-Commented Block213 hits · 147 pts
SeverityFileLineSnippetContext
LOWsocket.yml1version: 2COMMENT
LOWinternal/scripts/i18n-fix-strings.ts1import { Key, LokaliseApi } from '@lokalise/node-api'COMMENT
LOWinternal/scripts/publish-patch.ts61 if (process.env.GITHUB_OUTPUT) {COMMENT
LOWinternal/scripts/deploy-dotcom.ts281// Zero connection limits per environment.COMMENT
LOWinternal/scripts/lib/didAnyPackageChange.ts61 filePath: stringCOMMENT
LOWpackages/tldraw/src/test/TldrawEditor.test.tsx101 // render(COMMENT
LOWpackages/tldraw/src/test/TldrawEditor.test.tsx121 // store={createTLStore({ shapeUtils: [GroupShapeUtil] })}COMMENT
LOWpackages/tldraw/src/test/groups.test.tsx901 // C - fill: noneCOMMENT
LOWpackages/tldraw/src/test/groups.test.tsx1021COMMENT
LOWpackages/tldraw/src/test/groups.test.tsx1061 // ! Removed: pointing a group is impossible; you'd be pointing the selection instead.COMMENT
LOWpackages/tldraw/src/test/groups.test.tsx1081 expect(editor.getSelectedShapeIds().includes(ids.boxB)).toBe(true)COMMENT
LOWpackages/tldraw/src/test/groups.test.tsx1181 // group ACOMMENT
LOWpackages/tldraw/src/test/groups.test.tsx1501 })COMMENT
LOWpackages/tldraw/src/test/groups.test.tsx1621 // │ ┌────────────────────────┐ ┌──────────────────────┐ │COMMENT
LOWpackages/tldraw/src/test/groups.test.tsx1741})COMMENT
LOWpackages/tldraw/src/test/groups.test.tsx1841})COMMENT
LOWpackages/tldraw/src/test/groups.test.tsx1861// // 20 ┌───┐COMMENT
LOWpackages/tldraw/src/test/groups.test.tsx1881// })COMMENT
LOWpackages/tldraw/src/test/groups.test.tsx1901// expect(editor.focusedGroupId).toBe(editor.currentPageId)COMMENT
LOWpackages/tldraw/src/test/groups.test.tsx1921// expect(onlySelectedId()).not.toBe(groupCId)COMMENT
LOWpackages/tldraw/src/test/resizing.test.ts341 //COMMENT
LOWpackages/tldraw/src/test/resizing.test.ts361 })COMMENT
LOWpackages/tldraw/src/test/resizing.test.ts381 expect(roundedPageBounds(ids.boxA)).toMatchObject({ x: 0, y: 0, w: 5, h: 5 })COMMENT
LOWpackages/tldraw/src/test/resizing.test.ts401 // └──────────────────────────────────────────────────────────────────OCOMMENT
LOWpackages/tldraw/src/test/resizing.test.ts421 // │ │COMMENT
LOWpackages/tldraw/src/test/resizing.test.ts441 expect(roundedPageBounds(ids.boxB)).toMatchObject({ x: 20, y: 40, w: 10, h: 20 })COMMENT
LOWpackages/tldraw/src/test/resizing.test.ts461COMMENT
LOWpackages/tldraw/src/test/resizing.test.ts481 w: 60,COMMENT
LOWpackages/tldraw/src/test/resizing.test.ts501COMMENT
LOWpackages/tldraw/src/test/resizing.test.ts581 // │ │ │ │COMMENT
LOWpackages/tldraw/src/test/resizing.test.ts601 // │ │ │ │COMMENT
LOWpackages/tldraw/src/test/resizing.test.ts621 // │ │ │ │COMMENT
LOWpackages/tldraw/src/test/resizing.test.ts641 // │ │ A │ │COMMENT
LOWpackages/tldraw/src/test/resizing.test.ts681 // │ ┌───┐ │COMMENT
LOWpackages/tldraw/src/test/resizing.test.ts701 // │ ┌──────────┐ │COMMENT
LOWpackages/tldraw/src/test/resizing.test.ts721 })COMMENT
LOWpackages/tldraw/src/test/resizing.test.ts1241COMMENT
LOWpackages/tldraw/src/test/resizing.test.ts1281 `)COMMENT
LOWpackages/tldraw/src/test/resizing.test.ts1321 // x ┌────────────────────┐COMMENT
LOWpackages/tldraw/src/test/resizing.test.ts1361 // │ │ │COMMENT
LOWpackages/tldraw/src/test/resizing.test.ts1381 // │ │ │COMMENT
LOWpackages/tldraw/src/test/resizing.test.ts1401 // │ │ │ X │ │ │ │COMMENT
LOWpackages/tldraw/src/test/resizing.test.ts1421 expect(editor.getShape(ids.boxX)).toMatchObject({ x: 80, y: 80, props: { w: 80, h: 80 } })COMMENT
LOWpackages/tldraw/src/test/resizing.test.ts1461describe('snapping while resizing from center', () => {COMMENT
LOWpackages/tldraw/src/test/resizing.test.ts1541 })COMMENT
LOWpackages/tldraw/src/test/resizing.test.ts1581 // 40 │ │COMMENT
LOWpackages/tldraw/src/test/resizing.test.ts1601 [COMMENT
LOWpackages/tldraw/src/test/resizing.test.ts1641 ]COMMENT
LOWpackages/tldraw/src/test/resizing.test.ts1681 // 20 └───┘COMMENT
LOWpackages/tldraw/src/test/resizing.test.ts1741 "20,20 60,20 80,20 120,20",COMMENT
LOWpackages/tldraw/src/test/resizing.test.ts1781 // 0 ┌───┐COMMENT
LOWpackages/tldraw/src/test/resizing.test.ts1821 //COMMENT
LOWpackages/tldraw/src/test/resizing.test.ts1841 })COMMENT
LOWpackages/tldraw/src/test/resizing.test.ts1901 })COMMENT
LOWpackages/tldraw/src/test/resizing.test.ts1961 ]COMMENT
LOWpackages/tldraw/src/test/resizing.test.ts2001 // 40 ┌──────────────────┐COMMENT
LOWpackages/tldraw/src/test/resizing.test.ts2021 "120,40 120,60 120,80 120,120",COMMENT
LOWpackages/tldraw/src/test/resizing.test.ts2061 // 20 x────┬────x───x────xCOMMENT
LOWpackages/tldraw/src/test/resizing.test.ts2121 '20,20 60,20 80,20 120,20',COMMENT
LOWpackages/tldraw/src/test/resizing.test.ts2181COMMENT
153 more matches not shown…
Structural Annotation Overuse68 hits · 112 pts
SeverityFileLineSnippetContext
LOWinternal/scripts/profile-typescript.ts52 // Step 1: Count files being processedCOMMENT
LOWinternal/scripts/profile-typescript.ts66 // Step 2: Calculate tsbuildinfo cache sizeCOMMENT
LOWinternal/scripts/profile-typescript.ts101 // Step 3: Run extended diagnosticsCOMMENT
LOWinternal/scripts/profile-typescript.ts130 // Step 4: Generate trace fileCOMMENT
LOWinternal/scripts/profile-typescript.ts179 // Step 5: Generate markdown reportCOMMENT
LOWinternal/scripts/profile-tsserver.ts66 // Step 1: Get project infoCOMMENT
LOWinternal/scripts/profile-tsserver.ts91 // Step 2: Check for existing TSServer logsCOMMENT
LOWinternal/scripts/profile-tsserver.ts118 // Step 3: Start a TSServer instance for profilingCOMMENT
LOWinternal/scripts/profile-tsserver.ts249 // Step 4: Generate reportCOMMENT
LOWpackages/tldraw/src/lib/shapes/shared/PathBuilder.tsx280 // Step 1: Compute (x1', y1') - transform from ellipse coordinate system to unit circleCOMMENT
LOWpackages/tldraw/src/lib/shapes/shared/PathBuilder.tsx294 // Step 2: Compute (cx', cy') - center of ellipse in transformed systemCOMMENT
LOWpackages/tldraw/src/lib/shapes/shared/PathBuilder.tsx308 // Step 3: Compute (cx, cy) from (cx', cy') - transform back to original coordinate systemCOMMENT
LOWpackages/tldraw/src/lib/shapes/shared/PathBuilder.tsx312 // Step 4: Compute the start and end anglesCOMMENT
LOW…or/managers/SpatialIndexManager/SpatialIndexManager.ts143 // Step 1: seed the dirty set from the record diffs.COMMENT
LOW…or/managers/SpatialIndexManager/SpatialIndexManager.ts197 // Step 2: a moved record moves the page transforms of all itsCOMMENT
LOW…or/managers/SpatialIndexManager/SpatialIndexManager.ts213 // Step 3: expand to a fixpoint. Any shape whose bounds may have changedCOMMENT
LOW…or/managers/SpatialIndexManager/SpatialIndexManager.ts231 // Step 4: recheck only the dirty shapes' bounds. The batch stays emptyCOMMENT
LOW…gent/shared/format/convertFocusedShapeToTldrawShape.ts671 // Step 1: Find the best anchor point on the shapeCOMMENT
LOW…gent/shared/format/convertFocusedShapeToTldrawShape.ts677 // Step 2: Convert anchor point to normalized coordinates (0-1 range within shape bounds)COMMENT
LOW…gent/shared/format/convertFocusedShapeToTldrawShape.ts683 // Step 3: Clamp normalized coordinates to valid range [0, 1]COMMENT
LOW…gent/shared/format/convertFocusedShapeToTldrawShape.ts689 // Step 4: Validate that the clamped anchor point is still within the shape geometry. This is necessary because the aboCOMMENT
LOWskills/review-docs/SKILL.md86## Step 1: Initial evaluationCOMMENT
LOWskills/review-docs/SKILL.md188## Step 2: Summarize and prompt userCOMMENT
LOWskills/review-docs/SKILL.md219## Step 3: Triage (before improvement)COMMENT
LOWskills/review-docs/SKILL.md230## Step 4: ImproveCOMMENT
LOWskills/review-docs/SKILL.md296## Step 5: Verification evaluationCOMMENT
LOWskills/review-docs/SKILL.md371## Step 6: LoopCOMMENT
LOWskills/pr-walkthrough/SKILL.md31### Step 1: Understand the PRCOMMENT
LOWskills/pr-walkthrough/SKILL.md56### Step 2: Write the narrationCOMMENT
LOWskills/pr-walkthrough/SKILL.md68### Step 3: Generate audio and timestampsCOMMENT
LOWskills/pr-walkthrough/SKILL.md111### Step 4: Write the manifestCOMMENT
LOWskills/pr-walkthrough/SKILL.md249### Step 5: Render the videoCOMMENT
LOWskills/skill-creator/SKILL.md215### Step 1: Understanding the Skill with Concrete ExamplesCOMMENT
LOWskills/skill-creator/SKILL.md232### Step 2: Planning the Reusable Skill ContentsCOMMENT
LOWskills/skill-creator/SKILL.md256### Step 3: Initializing the SkillCOMMENT
LOWskills/skill-creator/SKILL.md279### Step 4: Edit the SkillCOMMENT
LOWskills/skill-creator/SKILL.md320### Step 5: Packaging a SkillCOMMENT
LOWskills/skill-creator/SKILL.md346### Step 6: IterateCOMMENT
LOWskills/tldraw-migrate/SKILL.md44## Step 1: Understand the environmentCOMMENT
LOWskills/tldraw-migrate/SKILL.md57## Step 2: Upgrade packagesCOMMENT
LOWskills/tldraw-migrate/SKILL.md66## Step 3: Identify all TypeScript errorsCOMMENT
LOWskills/tldraw-migrate/SKILL.md82## Step 4: Fix errors in order of impactCOMMENT
LOWskills/tldraw-migrate/SKILL.md156## Step 5: Fix deprecationsCOMMENT
LOWskills/tldraw-migrate/SKILL.md186## Step 6: VerifyCOMMENT
LOWskills/tldraw-migrate/SKILL.md209## Step 7: ReportCOMMENT
LOWapps/mcp-app/.claude/skills/add-app-to-server/SKILL.md58## Step 1: Analyze Existing ToolsCOMMENT
LOWapps/mcp-app/.claude/skills/add-app-to-server/SKILL.md77## Step 2: Add DependenciesCOMMENT
LOWapps/mcp-app/.claude/skills/add-app-to-server/SKILL.md88## Step 3: Set Up the Build PipelineCOMMENT
LOWapps/mcp-app/.claude/skills/add-app-to-server/SKILL.md143## Step 4: Convert Tools to App ToolsCOMMENT
LOWapps/mcp-app/.claude/skills/add-app-to-server/SKILL.md192## Step 5: Register ResourcesCOMMENT
LOWapps/mcp-app/.claude/skills/add-app-to-server/SKILL.md221## Step 6: Build the UICOMMENT
LOWapps/mcp-app/.claude/skills/convert-web-app/SKILL.md63## Step 1: Analyze the Existing Web AppCOMMENT
LOWapps/mcp-app/.claude/skills/convert-web-app/SKILL.md90## Step 2: Investigate CSP RequirementsCOMMENT
LOWapps/mcp-app/.claude/skills/convert-web-app/SKILL.md111## Step 3: Set Up the MCP ServerCOMMENT
LOWapps/mcp-app/.claude/skills/convert-web-app/SKILL.md201## Step 4: Adapt the Build PipelineCOMMENT
LOWapps/mcp-app/.claude/skills/convert-web-app/SKILL.md252## Step 5: Add MCP App Initialization Alongside Existing LogicCOMMENT
LOWapps/mcp-app/.claude/skills/convert-web-app/SKILL.md407## Step 6: Add Host Styling Integration (MCP Mode Only)COMMENT
LOWapps/dotcom/sync-worker/src/adminRoutes.ts340 // Step 1: Find all groups the user is the only owner ofCOMMENT
LOWapps/dotcom/sync-worker/src/adminRoutes.ts373 // Step 2: Soft delete groups (the cleanup_deleted_group_trigger will soft delete their files)COMMENT
LOWapps/dotcom/sync-worker/src/adminRoutes.ts379 // Step 3: Get all files to hard deleteCOMMENT
8 more matches not shown…
Hallucination Indicators9 hits · 90 pts
SeverityFileLineSnippetContext
CRITICAL…ages/tldraw/src/lib/ui/hooks/useCollaborationStatus.ts18 return editor.store.props.collaboration.status.get()CODE
CRITICALpackages/editor/src/lib/editor/Editor.ts944 const user = this.store.props.users.currentUser.get()CODE
CRITICALpackages/editor/src/lib/editor/Editor.ts4419 const user = this.store.props.users.currentUser.get()CODE
CRITICALpackages/editor/src/lib/editor/Editor.ts6824 const binding = this.store.schema.types.binding.create({CODE
CRITICALapps/dotcom/client/src/tla/utils/slurping.tsx88 if (this.opts.editor.store.query.records('shape').get().length === 0) {CODE
CRITICAL…rs/attribution-timeline/AttributionTimelineExample.tsx123 const user = editor.store.props.users.currentUser.get()CODE
CRITICAL…s/src/examples/users/custom-user/CustomUserExample.tsx89 const currentUser = useValue('current-user', () => editor.store.props.users.currentUser.get(), [CODE
CRITICAL…/src/examples/users/attribution/AttributionExample.tsx102 const currentUser = useValue('current-user', () => editor.store.props.users.currentUser.get(), [CODE
CRITICAL…/src/examples/users/attribution/AttributionExample.tsx221The panel reads `editor.store.props.users.currentUser.get()` to show who isCODE
Verbosity Indicators36 hits · 63 pts
SeverityFileLineSnippetContext
LOWinternal/scripts/profile-typescript.ts52 // Step 1: Count files being processedCOMMENT
LOWinternal/scripts/profile-typescript.ts66 // Step 2: Calculate tsbuildinfo cache sizeCOMMENT
LOWinternal/scripts/profile-typescript.ts101 // Step 3: Run extended diagnosticsCOMMENT
LOWinternal/scripts/profile-typescript.ts130 // Step 4: Generate trace fileCOMMENT
LOWinternal/scripts/profile-typescript.ts179 // Step 5: Generate markdown reportCOMMENT
LOWinternal/scripts/profile-tsserver.ts66 // Step 1: Get project infoCOMMENT
LOWinternal/scripts/profile-tsserver.ts91 // Step 2: Check for existing TSServer logsCOMMENT
LOWinternal/scripts/profile-tsserver.ts118 // Step 3: Start a TSServer instance for profilingCOMMENT
LOWinternal/scripts/profile-tsserver.ts249 // Step 4: Generate reportCOMMENT
LOW…w/src/lib/tools/SelectTool/childStates/EditingShape.ts65 // In the case where on pointer down we hit a shape's label, we need to check if the user is dragging.COMMENT
LOW…es/tldraw/src/lib/tools/SelectTool/childStates/Idle.ts655 // we need to check if the canvas was initially selecting something before continuing.COMMENT
LOWpackages/tldraw/src/lib/shapes/shared/PathBuilder.tsx280 // Step 1: Compute (x1', y1') - transform from ellipse coordinate system to unit circleCOMMENT
LOWpackages/tldraw/src/lib/shapes/shared/PathBuilder.tsx294 // Step 2: Compute (cx', cy') - center of ellipse in transformed systemCOMMENT
LOWpackages/tldraw/src/lib/shapes/shared/PathBuilder.tsx308 // Step 3: Compute (cx, cy) from (cx', cy') - transform back to original coordinate systemCOMMENT
LOWpackages/tldraw/src/lib/shapes/shared/PathBuilder.tsx312 // Step 4: Compute the start and end anglesCOMMENT
LOWpackages/tlschema/src/records/TLBinding.ts78 ? // if it's a default binding type we need to check if it's been overriddenCODE
LOWpackages/tlschema/src/records/TLShape.ts107 ? // if it's a default shape type we need to check if it's been overriddenCODE
LOW…or/managers/SpatialIndexManager/SpatialIndexManager.ts143 // Step 1: seed the dirty set from the record diffs.COMMENT
LOW…or/managers/SpatialIndexManager/SpatialIndexManager.ts197 // Step 2: a moved record moves the page transforms of all itsCOMMENT
LOW…or/managers/SpatialIndexManager/SpatialIndexManager.ts213 // Step 3: expand to a fixpoint. Any shape whose bounds may have changedCOMMENT
LOW…or/managers/SpatialIndexManager/SpatialIndexManager.ts231 // Step 4: recheck only the dirty shapes' bounds. The batch stays emptyCOMMENT
LOW…gent/shared/format/convertFocusedShapeToTldrawShape.ts671 // Step 1: Find the best anchor point on the shapeCOMMENT
LOW…gent/shared/format/convertFocusedShapeToTldrawShape.ts677 // Step 2: Convert anchor point to normalized coordinates (0-1 range within shape bounds)COMMENT
LOW…gent/shared/format/convertFocusedShapeToTldrawShape.ts683 // Step 3: Clamp normalized coordinates to valid range [0, 1]COMMENT
LOW…gent/shared/format/convertFocusedShapeToTldrawShape.ts689 // Step 4: Validate that the clamped anchor point is still within the shape geometry. This is necessary because the aboCOMMENT
LOWapps/dotcom/sync-worker/src/adminRoutes.ts340 // Step 1: Find all groups the user is the only owner ofCOMMENT
LOWapps/dotcom/sync-worker/src/adminRoutes.ts373 // Step 2: Soft delete groups (the cleanup_deleted_group_trigger will soft delete their files)COMMENT
LOWapps/dotcom/sync-worker/src/adminRoutes.ts379 // Step 3: Get all files to hard deleteCOMMENT
LOWapps/dotcom/sync-worker/src/adminRoutes.ts410 // Step 5: Hard delete groups and user in a transactionCOMMENT
LOW…les/e2e/tests/test-a11y-style-panel-navigation.spec.ts32 // Step 1: Press Enter to start editing the labelCOMMENT
LOW…les/e2e/tests/test-a11y-style-panel-navigation.spec.ts43 // Step 2: Press Escape to exit editing modeCOMMENT
LOW…les/e2e/tests/test-a11y-style-panel-navigation.spec.ts50 // Step 3: Press Cmd+Enter to focus the style panelCOMMENT
LOW…les/e2e/tests/test-a11y-style-panel-navigation.spec.ts63 // Step 4: Use arrow keys to navigate to a different color (assuming color buttons are first)COMMENT
LOW…les/e2e/tests/test-a11y-style-panel-navigation.spec.ts76 // Step 5: Press Enter to select the colorCOMMENT
LOW…les/e2e/tests/test-a11y-style-panel-navigation.spec.ts79 // Step 6: Press Escape to return focus to the shape. The Escape keydownCOMMENT
LOW…les/e2e/tests/test-a11y-style-panel-navigation.spec.ts84 // Step 7: Press Enter again to edit the label. Selecting a colour above makesCOMMENT
Fake / Example Data29 hits · 35 pts
SeverityFileLineSnippetContext
LOWpackages/validate/DOCS.md566 phone: '555-1234',CODE
LOWpackages/state/README.md95console.log(fullName.get()) // "John Doe"CODE
LOWpackages/state/README.md98console.log(fullName.get()) // "Jane Doe" - automatically updated!CODE
LOWpackages/state/DOCS.md135console.log(fullName.get()) // "John Doe"CODE
LOWpackages/state/DOCS.md141console.log(fullName.get()) // "Jane Doe"CODE
LOWpackages/state/DOCS.md180console.log(user.getFullName()) // "John Doe"CODE
LOWpackages/state/DOCS.md183console.log(user.getFullName()) // "Jane Doe"CODE
LOWpackages/state/DOCS.md191console.log(fullNameComputed.get()) // "John Doe"CODE
LOWpackages/state/src/lib/Computed.ts186 * console.log(fullName.get()) // "John Doe"COMMENT
LOWpackages/state/src/lib/Computed.ts188 * console.log(fullName.get()) // "Jane Doe"COMMENT
LOWpackages/state/src/lib/__tests__/transactions.test.ts30 expect(name).toBe('John Doe')CODE
LOWpackages/state/src/lib/__tests__/transactions.test.ts37 expect(name).toBe('John Doe')CODE
LOWpackages/state/src/lib/__tests__/transactions.test.ts41 expect(name).toBe('John Doe')CODE
LOWpackages/state/src/lib/__tests__/transactions.test.ts47 expect(name).toBe('John Doe')CODE
LOWpackages/state/src/lib/__tests__/transactions.test.ts56 expect(fullName.get()).toBe('John Doe')CODE
LOWpackages/state/src/lib/__tests__/transactions.test.ts57 expect(name).toBe('John Doe')CODE
LOWpackages/state/src/lib/__tests__/transactions.test.ts199 expect(fullName.get()).toBe('John Doe')CODE
LOWpackages/dotcom-shared/src/mutators.test.ts21 email: 'test@test.com',CODE
LOWpackages/worker-shared/src/bookmarks.test.ts200 author: 'John Doe',CODE
LOWpackages/worker-shared/src/bookmarks.test.ts236 author: 'John Doe',CODE
LOWpackages/store/src/lib/StoreListeners.test.ts211 const visit = Visit.create({ visitorName: 'John Doe' })CODE
LOWpackages/store/src/lib/Store.test.ts199 store.put([Author.create({ name: 'J.R.R Tolkein' }), Visit.create({ visitorName: 'John Doe' })])CODE
LOWpackages/store/src/lib/Store.test.ts246 Visit.create({ visitorName: 'John Doe', id: Visit.createId('doe') }),CODE
LOWpackages/store/src/lib/StoreSchema.ts359 * { id: 'book:1', typeName: 'book', title: '', author: 'Jane Doe' },COMMENT
LOW…rc/examples/shapes/tools/layout-bindings/snapshot.json122 "placeholder": falseCODE
LOW…rc/examples/shapes/tools/layout-bindings/snapshot.json134 "placeholder": falseCODE
LOW…rc/examples/shapes/tools/layout-bindings/snapshot.json146 "placeholder": falseCODE
LOW…rc/examples/shapes/tools/layout-bindings/snapshot.json158 "placeholder": falseCODE
LOW…rc/examples/shapes/tools/layout-bindings/snapshot.json170 "placeholder": falseCODE
AI Slop Vocabulary4 hits · 12 pts
SeverityFileLineSnippetContext
MEDIUMpackages/utils/src/lib/version.test.ts417 // This test checks that the system is robust against different global contextsCOMMENT
MEDIUM.github/workflows/e2e-device.yml9# It currently covers multi-touch gestures (pinch), but the harness is meant toCOMMENT
MEDIUMapps/examples/e2e/tests/test-page-menu.spec.ts287 // Wait for edit mode and use robust input handlingCOMMENT
MEDIUMapps/examples/e2e/tests/test-page-menu.spec.ts316 // Wait for edit mode and use robust input handlingCOMMENT
Redundant / Tautological Comments7 hits · 10 pts
SeverityFileLineSnippetContext
LOW.github/workflows/i18n-download-strings.yml52 # Check if there are any changes to JSON filesCOMMENT
LOW…s/update-release-notes/scripts/get-changelog-status.sh52# Check if the archive file already existsCOMMENT
LOW…s/update-release-notes/scripts/get-changelog-status.sh61# Check if next.mdx has content (more than just frontmatter)COMMENT
LOWapps/mcp-app/wrangler.toml28# Set this to the public URL of the worker. Used for constructing absolute image URLs.COMMENT
LOWapps/dotcom/snapshot-state.sh49# Check if volume existsCOMMENT
LOWapps/dotcom/restore-state.sh61# Check if dev-app is runningCOMMENT
LOWapps/dotcom/restore-state.sh102 # Check if containers are using the volumeCOMMENT
AI Response Leakage1 hit · 8 pts
SeverityFileLineSnippetContext
HIGHpackages/tlschema/src/records/TLPageState.ts142 // rather than replace it, I've added another migration below that fixes it.COMMENT
Cross-Language Confusion (JS/TS)1 hit · 5 pts
SeverityFileLineSnippetContext
HIGHpackages/tldraw/src/test/testutils/pretty.ts30 print() {CODE
Example Usage Blocks3 hits · 4 pts
SeverityFileLineSnippetContext
LOWskills/pr-walkthrough/video/render.sh10# Usage:COMMENT
LOWskills/pr-walkthrough/scripts/make-video.sh4# Usage:COMMENT
LOWskills/pr-walkthrough/scripts/generate-audio.sh7# Usage:COMMENT
Slop Phrases1 hit · 2 pts
SeverityFileLineSnippetContext
MEDIUM…es/collaboration/user-presence/UserPresenceExample.tsx118 This is just for demonstration purposes.CODE