Annotate and review coding agent plans and code diffs visually, share with your team, send feedback to agents with one click.
This report presents the forensic synthetic code analysis of backnotprop/plannotator, a TypeScript project with 7,012 GitHub stars. SynthScan v2.0 examined 207,794 lines of code across 1090 source files, recording 529 pattern matches distributed across 14 syntactic categories. The overall adjusted score of 3.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).
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.
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.
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.
The scanner identified 529 distinct pattern matches across 14 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.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/bench-startup.sh | 22 | # ── Helpers ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/bench-startup.sh | 88 | # ── Main ───────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/bench-startup.sh | 97 | # ── Scenario 1: No plugin (baseline) ───────────────────────────────── | COMMENT |
| MEDIUM | tests/bench-startup.sh | 116 | # ── Scenario 2: Published npm plugin ───────────────────────────────── | COMMENT |
| MEDIUM | tests/bench-startup.sh | 135 | # ── Scenario 3: Local optimized plugin ─────────────────────────────── | COMMENT |
| MEDIUM | tests/bench-startup.sh | 158 | # ── Summary ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/manual/local/test-sessions.sh | 101 | # ------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/manual/local/test-sessions.sh | 103 | # ------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/manual/local/test-sessions.sh | 118 | # ------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/manual/local/test-sessions.sh | 120 | # ------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/manual/local/test-sessions.sh | 127 | # ------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/manual/local/test-sessions.sh | 129 | # ------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/manual/local/test-sessions.sh | 168 | # ------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/manual/local/test-sessions.sh | 170 | # ------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/manual/local/test-sessions.sh | 197 | # ------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/manual/local/test-sessions.sh | 199 | # ------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/manual/local/test-sessions.sh | 226 | # ------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/manual/local/test-sessions.sh | 228 | # ------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/manual/local/test-sessions.sh | 261 | # ------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/manual/local/test-sessions.sh | 263 | # ------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/manual/local/test-sessions.sh | 324 | # ------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/manual/local/test-sessions.sh | 326 | # ------------------------------------------------------- | COMMENT |
| MEDIUM | tests/manual/local/sandbox-opencode.sh | 1019 | # ============================================================================= | COMMENT |
| MEDIUM | tests/manual/local/sandbox-opencode.sh | 1021 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | tests/manual/path-detection/setup.sh | 59 | # ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/manual/path-detection/setup.sh | 61 | # ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/manual/path-detection/setup.sh | 115 | # ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/manual/path-detection/setup.sh | 117 | # ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/manual/path-detection/setup.sh | 141 | # ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/manual/path-detection/setup.sh | 143 | # ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/manual/path-detection/setup.sh | 268 | # ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/manual/path-detection/setup.sh | 270 | # ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/manual/path-detection/setup.sh | 351 | # ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/manual/path-detection/setup.sh | 354 | # ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/core/open-in-apps.ts | 47 | // ── File manager (always available) ──────────────────────────────────── | COMMENT |
| MEDIUM | packages/core/open-in-apps.ts | 55 | // ── Editors ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/core/open-in-apps.ts | 121 | // ── Terminals ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/shared/prompts-integration.test.ts | 61 | // ── Plan denied ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/shared/prompts-integration.test.ts | 157 | // ── Plan approved ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/shared/prompts-integration.test.ts | 196 | // ── Plan approved with notes ───────────────────────────────────────── | COMMENT |
| MEDIUM | packages/shared/prompts-integration.test.ts | 232 | // ── Plan auto-approved ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/shared/prompts-integration.test.ts | 247 | // ── Annotate file feedback ─────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/shared/prompts-integration.test.ts | 299 | // ── Annotate message feedback ──────────────────────────────────────── | COMMENT |
| MEDIUM | packages/shared/prompts-integration.test.ts | 320 | // ── Annotate approved ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/shared/prompts-integration.test.ts | 335 | // ── Review denied suffix ───────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/shared/prompts-integration.test.ts | 350 | // ── Cross-section isolation ────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/shared/prompts-integration.test.ts | 386 | // ── Malformed config resilience ────────────────────────────────────── | COMMENT |
| MEDIUM | packages/shared/prompts-integration.test.ts | 401 | // ── planDenyFeedback is browser-safe (no Node imports) ──────────────── | COMMENT |
| MEDIUM | packages/shared/prompts.ts | 3 | // ─── Template engine ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/shared/prompts.ts | 15 | // ─── Tool name map ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/shared/prompts.ts | 38 | // ─── Default constants ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/shared/prompts.ts | 64 | // ─── Core resolver ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/shared/prompts.ts | 100 | // ─── Review wrappers ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/shared/prompts.ts | 132 | // ─── Plan wrappers ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/shared/prompts.ts | 202 | // ─── Annotate wrappers ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/shared/prompts.test.ts | 29 | // ─── A1. Template engine ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/shared/prompts.test.ts | 63 | // ─── A2. Plan denied ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/shared/prompts.test.ts | 158 | // ─── A3. Plan approved ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/shared/prompts.test.ts | 241 | // ─── A4. Annotation feedback ───────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/shared/prompts.test.ts | 307 | // ─── A4b. Review denied suffix ─────────────────────────────────────────────── | COMMENT |
| 29 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/install.sh | 709 | function isManagedPlannotatorCommand(value) { | CODE |
| LOW | packages/ui/utils/lookAndFeelAnnouncement.ts | 12 | export function needsLookAndFeelAnnouncement(): boolean { | CODE |
| LOW | packages/ui/utils/lookAndFeelAnnouncement.ts | 16 | export function markLookAndFeelAnnouncementSeen(): void { | CODE |
| LOW | packages/ui/utils/reviewAgentInstructions.ts | 14 | export function buildReviewAgentInstructions(origin: string): string { | CODE |
| LOW | packages/ui/utils/permissionMode.ts | 54 | export function getPermissionModeSettings(): PermissionModeSettings { | CODE |
| LOW | packages/ui/utils/permissionMode.ts | 67 | export function savePermissionModeSettings(mode: PermissionMode): void { | CODE |
| LOW | packages/ui/utils/planAIAnnouncement.ts | 15 | export function markPlanAIAnnouncementSeen(): void { | CODE |
| LOW | packages/ui/utils/annotationHelpers.ts | 7 | export function getAnnotationCountBySection( | CODE |
| LOW | packages/ui/utils/aiProvider.ts | 46 | export function originHasDedicatedAIProvider(origin: Origin | null | undefined): boolean { | CODE |
| LOW | packages/ui/utils/aiProvider.ts | 132 | export function resolveAIModelForProvider( | CODE |
| LOW | packages/ui/utils/aiProvider.ts | 147 | export function resolveAIProviderSelection(options: { | CODE |
| LOW | packages/ui/utils/wideMode.ts | 29 | export function resolveWideModeExitLayout( | CODE |
| LOW | packages/ui/utils/annotateAgentTerminal.ts | 25 | export function resolveAgentTerminalWebSocketUrl(path: string): string { | CODE |
| LOW | packages/ui/utils/planAgentInstructions.ts | 14 | export function buildPlanAgentInstructions(origin: string): string { | CODE |
| LOW | packages/ui/utils/aiPrompt.ts | 16 | export function buildReviewContextPreamble( | CODE |
| LOW | packages/ui/components/InlineMarkdown.tsx | 307 | function canRenderSpacedDollarMath(tex: string): boolean { | CODE |
| LOW | packages/ui/components/InlineMarkdown.tsx | 344 | function emitPlainTextWithBareUrls( | CODE |
| LOW | packages/ui/components/CodeFilePopout.tsx | 110 | function getLineNumberFromSelectionNode(node: Node | null): number | null { | CODE |
| LOW | packages/ui/components/mermaidSvg.ts | 7 | export function normalizeMermaidSvgMarkup(markup: string): string { | CODE |
| LOW | packages/ui/components/sidebar/FileBrowser.tsx | 205 | export function isFileTreeSelectionDisabled( | CODE |
| LOW | packages/ui/components/sidebar/FileBrowser.tsx | 212 | export function getAggregateWorkspaceChange( | CODE |
| LOW | packages/ui/components/goal-setup/GoalSetupSurface.tsx | 1239 | function buildInterviewCopyPayload( | CODE |
| LOW | packages/ui/hooks/useDismissOnOutsideAndEscape.ts | 3 | export function useDismissOnOutsideAndEscape({ | CODE |
| LOW | packages/ui/hooks/useAnnotationDraft.ts | 188 | function parseDraftSavedFileChange( | CODE |
| LOW | packages/ui/hooks/useAnnotationDraft.ts | 221 | function isDraftSourceSaveCapability(value: unknown): value is DraftSourceSaveCapability { | CODE |
| LOW | packages/ui/hooks/useExternalAnnotationHighlights.ts | 27 | export function useExternalAnnotationHighlights(params: { | CODE |
| LOW | packages/ui/hooks/useAIChat.seam.test.tsx | 89 | async function expectResetAbortsActiveTurn(resetKind: 'session' | 'thread'): Promise<void> { | CODE |
| LOW | packages/ui/hooks/useExternalAnnotations.ts | 112 | export function resetExternalAnnotationTransport(): void { | CODE |
| LOW | packages/ui/hooks/useFileBrowser.ts | 42 | function isPermanentFileBrowserFetchError(status: number): boolean { | CODE |
| LOW | packages/ui/hooks/useFileBrowser.ts | 50 | function remapWorkspaceStatusForDir( | CODE |
| LOW | packages/ui/hooks/useAgentSettings.ts | 223 | export function parseReviewProfileByEngine(parsed: { | CODE |
| LOW | packages/ui/shortcuts/core.ts | 255 | export function listRegistryShortcutSections(registry: ShortcutRegistry): ShortcutSection[] { | CODE |
| LOW | packages/ui/shortcuts/core.ts | 297 | export function formatShortcutBindingTokens( | CODE |
| LOW | packages/ui/shortcuts/core.ts | 309 | export function formatShortcutBindingText( | CODE |
| LOW | packages/ui/shortcuts/core.ts | 329 | export function formatShortcutBindingsText( | CODE |
| LOW | packages/ui/shortcuts/core.ts | 397 | export function getMatchingShortcutBindingIndex(event: KeyboardEvent, bindings: string[]): number { | CODE |
| LOW | packages/core/agent-terminal.ts | 49 | export function supportsAnnotateAgentTerminalMode( | CODE |
| LOW | packages/core/source-save.ts | 84 | export function hasSourceSaveConflictSnapshot(response: SourceSaveResponse): response is SourceSaveConflictResponse { | CODE |
| LOW | packages/core/extract-code-paths.ts | 27 | export function extractCandidateCodePaths(markdown: string): string[] { | CODE |
| LOW | packages/server/reference-handlers.ts | 93 | async function resolveCodeFileFromAllowedRoots( | CODE |
| LOW | packages/server/reference-handlers.ts | 123 | function resolveMarkdownFileFromAllowedRoots(input: string, roots: string[]): RouteResolveResult { | CODE |
| LOW | packages/server/review-skill-loader.ts | 429 | export function resolveRequestedReviewProfile( | CODE |
| LOW | packages/server/claude-review.ts | 199 | export function composeClaudeReviewPrompt( | CODE |
| LOW | packages/server/agent-terminal.test.ts | 55 | export function createNodePtyWebSocketServer(options) { | CODE |
| LOW | packages/server/external-annotations.ts | 51 | export function createExternalAnnotationHandler( | CODE |
| LOW | packages/server/agent-review-message.ts | 44 | export function buildWorkspacePromptContextLines( | CODE |
| LOW | packages/server/agent-review-message.ts | 83 | export function buildAgentReviewUserMessageForTarget( | CODE |
| LOW | packages/server/agent-review-message.ts | 108 | export function buildAgentReviewUserMessage( | CODE |
| LOW | packages/server/agent-review-message.ts | 170 | function buildWorkspaceReviewUserMessage( | CODE |
| LOW | packages/server/reference-watch.ts | 32 | export function isFileBrowserWatchIgnoredPath(path: string, root: string): boolean { | CODE |
| LOW | packages/server/reference-watch.ts | 126 | export function handleFileBrowserFilesStream( | CODE |
| LOW | packages/server/agent-terminal.ts | 37 | export async function createBunAgentTerminalBridge(args: { | CODE |
| LOW | packages/server/agent-terminal.ts | 241 | async function startNodeAgentTerminalSidecar( | CODE |
| LOW | packages/server/editor-annotations.ts | 17 | export function createEditorAnnotationHandler(): EditorAnnotationHandler { | CODE |
| LOW | packages/server/browser.ts | 95 | export function shouldTryRemoteBrowserFallback(isRemote: boolean): boolean { | CODE |
| LOW | packages/server/shared-handlers.ts | 23 | export function readDraftGenerationFromUrl(req: Request): number | undefined { | CODE |
| LOW | packages/server/shared-handlers.ts | 31 | export function readDraftGenerationFromBody(body: unknown): number | undefined { | CODE |
| LOW | packages/server/review-workspace.ts | 45 | export async function buildLocalWorkspaceReview( | CODE |
| LOW | packages/server/review-findings.ts | 47 | export function transformSeverityFindings( | CODE |
| LOW⚡ | packages/server/agent-terminal-runtime.ts | 70 | export function getAgentTerminalManagedRuntimeDir( | CODE |
| 207 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/bench-startup.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | tests/manual/local/test-binary.sh | 1 | #!/bin/bash | COMMENT |
| LOW | tests/manual/local/test-sessions.sh | 1 | #!/bin/bash | COMMENT |
| LOW | tests/manual/local/test-jj-review.sh | 1 | #!/bin/bash | COMMENT |
| LOW | tests/manual/local/sandbox-opencode-isolated.sh | 1 | #!/bin/bash | COMMENT |
| LOW | tests/manual/local/test-worktree-review.sh | 1 | #!/bin/bash | COMMENT |
| LOW | tests/manual/local/test-bulk-plans.sh | 1 | #!/bin/bash | COMMENT |
| LOW | tests/manual/local/sandbox-opencode.sh | 1 | #!/bin/bash | COMMENT |
| LOW | tests/manual/local/sandbox-opencode.sh | 21 | # --no-git Don't initialize git repo (tests non-git fallback) | COMMENT |
| LOW | tests/manual/local/sandbox-gemini.sh | 1 | #!/bin/bash | COMMENT |
| LOW | tests/manual/local/test-hook.sh | 1 | #!/bin/bash | COMMENT |
| LOW | tests/manual/local/sandbox-pi.sh | 1 | #!/bin/bash | COMMENT |
| LOW | tests/manual/local/test-opencode-review.sh | 1 | #!/bin/bash | COMMENT |
| LOW | tests/manual/local/test-external-annotations.sh | 1 | #!/bin/bash | COMMENT |
| LOW | tests/manual/local/sandbox-codex.sh | 1 | #!/bin/bash | COMMENT |
| LOW | tests/manual/local/test-codex-plan-review-e2e.sh | 1 | #!/bin/bash | COMMENT |
| LOW | tests/manual/local/test-hook-2.sh | 1 | #!/bin/bash | COMMENT |
| LOW | tests/manual/path-detection/setup.sh | 1 | #!/bin/bash | COMMENT |
| LOW | tests/manual/path-detection/setup.sh | 21 | # │ ├── app/ | COMMENT |
| LOW | tests/manual/path-detection/run-plan.sh | 1 | #!/bin/bash | COMMENT |
| LOW | tests/manual/path-detection/run-annotate-out-of-tree.sh | 1 | #!/bin/bash | COMMENT |
| LOW | scripts/install.test.ts | 921 | expect(sh).toContain('echo "--version requires a tag value, got flag:'); | COMMENT |
| LOW | scripts/install.test.ts | 941 | // hiding exactly the error message this code path is supposed to | COMMENT |
| LOW | scripts/install.test.ts | 1021 | // --version like "0.18.0'; calc; '0.18.0" would break out of the | COMMENT |
| LOW | scripts/install.test.ts | 1041 | // upstream normalization. | COMMENT |
| LOW | scripts/install.test.ts | 1061 | // the pre-check. | COMMENT |
| LOW | scripts/install.test.ts | 1101 | COMMENT | |
| LOW | scripts/install.sh | 1 | #!/bin/bash | COMMENT |
| LOW | scripts/install.sh | 21 | # Uses `sort -V` (version sort) which handles minor/patch width correctly | COMMENT |
| LOW | scripts/install.sh | 381 | COMMENT | |
| LOW | scripts/install.sh | 941 | suffix="[y/N]" | COMMENT |
| LOW | scripts/install.sh | 1141 | # production failure (subsequent code uses absolute paths) but | COMMENT |
| LOW | packages/ui/utils/parser.ts | 201 | checked, | COMMENT |
| LOW | packages/ui/utils/parser.ts | 221 | if (trimmed.startsWith('>')) { | COMMENT |
| LOW | packages/ui/utils/planDiffEngine.ts | 221 | return value.replace(FENCE_SENTINEL_PATTERN, (m) => fenceMap.get(m) ?? m); | COMMENT |
| LOW | packages/ui/utils/planDiffEngine.ts | 301 | if (pairMap.size === 0) return value; | COMMENT |
| LOW | packages/ui/utils/planDiffEngine.ts | 461 | // diffs atomically, avoiding the fragmented/unbalanced-delimiter | COMMENT |
| LOW | packages/ui/components/StickyHeaderLane.tsx | 41 | const snap = (n: number) => Math.floor(n / 16) * 16; | COMMENT |
| LOW | packages/ui/components/types.d.ts | 1 | // Vite globals injected at build time | COMMENT |
| LOW | packages/ui/hooks/useAgentSettings.ts | 1 | import { useCallback, useEffect, useRef, useState } from 'react'; | COMMENT |
| LOW | packages/ui/hooks/useAgentSettings.ts | 41 | // new model entry; DEFAULT_CODEX_FAST (false, same value) covers that without | COMMENT |
| LOW | packages/ui/hooks/useAgentSettings.ts | 301 | } | COMMENT |
| LOW | packages/ui/shortcuts/runtime.ts | 121 | // | COMMENT |
| LOW | packages/server/review.ts | 261 | const warmPRContext = (url: string, ref: PRRef): void => { | COMMENT |
| LOW | packages/server/review.ts | 381 | // branch and lose the upstream baseline. Only when the remote default is | COMMENT |
| LOW | packages/server/review.ts | 441 | // branch — matched as either its local name ("main") or the tracking ref | COMMENT |
| LOW | packages/server/review.ts | 481 | void refreshRemoteBaseInfo().catch(() => {}); | COMMENT |
| LOW | packages/server/review.ts | 621 | // contextOnly=true so it carries only the changeset/how-to-inspect-it text, no | COMMENT |
| LOW | packages/server/review.ts | 741 | // checkout warmup below yields to other requests (e.g. pr-switch), and | COMMENT |
| LOW | packages/server/review.ts | 821 | prMetadata: launchMetadata, | COMMENT |
| LOW | packages/server/review.ts | 1461 | // API: cheap staleness probe — has the underlying VCS state changed | COMMENT |
| LOW | packages/server/agent-jobs.ts | 341 | const stdoutDone = (captureStdout && proc.stdout && typeof proc.stdout !== "number") | COMMENT |
| LOW | packages/server/agent-jobs.ts | 421 | }); | COMMENT |
| LOW | packages/shared/review-core.ts | 441 | COMMENT | |
| LOW | packages/shared/review-core.ts | 1041 | ): Promise<DiffResult> { | COMMENT |
| LOW | packages/review-editor/App.tsx | 241 | const reviewSidebar = useSidebar<ReviewSidebarTab>(false, 'annotations'); | COMMENT |
| LOW | packages/review-editor/App.tsx | 281 | const [committedBase, setCommittedBase] = useState<string | null>(null); | COMMENT |
| LOW | packages/review-editor/App.tsx | 601 | }, []); | COMMENT |
| LOW | packages/review-editor/App.tsx | 1261 | if (data.error) setDiffError(data.error); | COMMENT |
| LOW | packages/review-editor/App.tsx | 1541 | }); | COMMENT |
| 42 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/manual/local/test-binary.sh | 4 | # Usage: | COMMENT |
| LOW | tests/manual/local/test-sessions.sh | 4 | # Usage: | COMMENT |
| LOW | tests/manual/local/test-jj-review.sh | 4 | # Usage: | COMMENT |
| LOW | tests/manual/local/test-loose-list.sh | 5 | # Usage: | COMMENT |
| LOW | tests/manual/local/sandbox-opencode-isolated.sh | 4 | # Usage: | COMMENT |
| LOW | tests/manual/local/test-worktree-review.sh | 4 | # Usage: | COMMENT |
| LOW | tests/manual/local/test-bulk-plans.sh | 4 | # Usage: | COMMENT |
| LOW | tests/manual/local/sandbox-opencode.sh | 4 | # Usage: | COMMENT |
| LOW | tests/manual/local/sandbox-gemini.sh | 4 | # Usage: | COMMENT |
| LOW | tests/manual/local/test-hook.sh | 4 | # Usage: | COMMENT |
| LOW | tests/manual/local/sandbox-pi.sh | 4 | # Usage: | COMMENT |
| LOW | tests/manual/local/test-opencode-review.sh | 4 | # Usage: | COMMENT |
| LOW | tests/manual/local/test-external-annotations.sh | 4 | # Usage: | COMMENT |
| LOW | tests/manual/local/sandbox-codex.sh | 4 | # Usage: | COMMENT |
| LOW | tests/manual/local/test-codex-plan-review-e2e.sh | 8 | # Usage: | COMMENT |
| LOW | tests/manual/local/test-hook-2.sh | 4 | # Usage: | COMMENT |
| LOW | tests/manual/path-detection/setup.sh | 4 | # Usage: | COMMENT |
| LOW | tests/manual/path-detection/run-plan.sh | 4 | # Usage: | COMMENT |
| LOW | tests/manual/path-detection/run-annotate-out-of-tree.sh | 4 | # Usage: | COMMENT |
| LOW | tests/manual/path-detection/run-annotate-in-tree.sh | 4 | # Usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/manual/local/test-sessions.sh | 102 | # Step 0: Build | COMMENT |
| LOW⚡ | tests/manual/local/test-sessions.sh | 119 | # Step 1: Clean slate | COMMENT |
| LOW⚡ | tests/manual/local/test-sessions.sh | 128 | # Step 2: Launch plan server, validate session file content | COMMENT |
| LOW⚡ | tests/manual/local/test-sessions.sh | 169 | # Step 3: Launch review server, validate session file content | COMMENT |
| LOW⚡ | tests/manual/local/test-sessions.sh | 198 | # Step 4: Test `plannotator sessions` listing | COMMENT |
| LOW⚡ | tests/manual/local/test-sessions.sh | 227 | # Step 5: Test `sessions --open` | COMMENT |
| LOW⚡ | tests/manual/local/test-sessions.sh | 262 | # Step 6: Test stale session cleanup (auto + --clean) | COMMENT |
| LOW⚡ | tests/manual/local/test-sessions.sh | 325 | # Step 7: Approve/submit servers, verify session cleanup on exit | COMMENT |
| LOW | .agents/skills/release/SKILL.md | 14 | ### Step 1: Determine scope | COMMENT |
| LOW | .agents/skills/release/SKILL.md | 23 | ### Step 2: Research contributors | COMMENT |
| LOW | .agents/skills/release/SKILL.md | 46 | ### Step 3: Write the release notes | COMMENT |
| LOW | .agents/skills/release/SKILL.md | 112 | ### Step 4: Present for review | COMMENT |
| LOW | packages/core/crypto.test.ts | 36 | p: "# Implementation Plan\n\n## Step 1: Add authentication\n\nWe'll use JWT tokens stored in httpOnly cookies.\n\n## S | CODE |
| LOW⚡ | apps/hook/server/index.ts | 707 | // Step 1: Fast skeleton clone (no checkout, depth 1 — minimal data transfer) | COMMENT |
| LOW⚡ | apps/hook/server/index.ts | 716 | // Step 2: Fetch only the PR head ref (targeted, much faster than full fetch) | COMMENT |
| LOW⚡ | apps/hook/server/index.ts | 723 | // Step 3: Checkout PR head (critical — if this fails, worktree is empty) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/manual/local/test-sessions.sh | 102 | # Step 0: Build | COMMENT |
| LOW⚡ | tests/manual/local/test-sessions.sh | 119 | # Step 1: Clean slate | COMMENT |
| LOW⚡ | tests/manual/local/test-sessions.sh | 128 | # Step 2: Launch plan server, validate session file content | COMMENT |
| LOW⚡ | tests/manual/local/test-sessions.sh | 169 | # Step 3: Launch review server, validate session file content | COMMENT |
| LOW⚡ | tests/manual/local/test-sessions.sh | 198 | # Step 4: Test `plannotator sessions` listing | COMMENT |
| LOW⚡ | tests/manual/local/test-sessions.sh | 227 | # Step 5: Test `sessions --open` | COMMENT |
| LOW⚡ | tests/manual/local/test-sessions.sh | 262 | # Step 6: Test stale session cleanup (auto + --clean) | COMMENT |
| LOW⚡ | tests/manual/local/test-sessions.sh | 325 | # Step 7: Approve/submit servers, verify session cleanup on exit | COMMENT |
| LOW | packages/core/crypto.test.ts | 36 | p: "# Implementation Plan\n\n## Step 1: Add authentication\n\nWe'll use JWT tokens stored in httpOnly cookies.\n\n## S | CODE |
| LOW⚡ | apps/hook/server/index.ts | 707 | // Step 1: Fast skeleton clone (no checkout, depth 1 — minimal data transfer) | COMMENT |
| LOW⚡ | apps/hook/server/index.ts | 716 | // Step 2: Fetch only the PR head ref (targeted, much faster than full fetch) | COMMENT |
| LOW⚡ | apps/hook/server/index.ts | 723 | // Step 3: Checkout PR head (critical — if this fails, worktree is empty) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/manual/local/test-codex-plan-review-e2e.sh | 2 | # End-to-end Codex Stop-hook test harness for Plannotator. | COMMENT |
| MEDIUM | packages/server/review.ts | 1633 | // Snapshot arg: robust against a future await sneaking in | COMMENT |
| MEDIUM | packages/server/review.ts | 1722 | // Snapshot args: robust against a future await sneaking in | COMMENT |
| MEDIUM | apps/pi-extension/server/serverReview.ts | 1575 | // Snapshot arg: robust against a future await sneaking in | COMMENT |
| MEDIUM | apps/pi-extension/server/serverReview.ts | 1652 | // Snapshot args: robust against a future await sneaking in | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/manual/local/enter-codex-plan-review-sandbox.sh | 2 | # Create a fresh isolated Codex + Plannotator sandbox and open a shell inside it. | COMMENT |
| MEDIUM | tests/manual/local/sandbox-opencode.sh | 1837 | # Create a loader file that re-exports from the source. | COMMENT |
| MEDIUM | tests/manual/local/sandbox-gemini.sh | 99 | # Create a temp plan file | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/manual/path-detection/setup.sh | 66 | git config user.email "test@test.com" | CODE |
| LOW⚡ | packages/ui/utils/identity.seam.test.ts | 48 | getIdentity: () => 'user@example.com', | CODE |
| LOW⚡ | packages/ui/utils/identity.seam.test.ts | 51 | return author === 'user@example.com'; | CODE |
| LOW⚡ | packages/ui/utils/identity.seam.test.ts | 57 | expect(isCurrentUser('user@example.com')).toBe(true); | CODE |
| LOW⚡ | packages/ui/utils/identity.seam.test.ts | 59 | expect(checked).toEqual(['user@example.com', 'other@example.com']); | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | packages/shared/code-nav.test.ts | 29 | expect(classifyMatch("export function handleRequest(", "handleRequest", lang)).toBe("definition"); | CODE |
| LOW | packages/shared/code-nav.test.ts | 85 | expect(classifyMatch("def handle_request(self, req):", "handle_request", lang)).toBe("definition"); | CODE |
| LOW | apps/paste-service/core/handler.ts | 90 | export async function handleRequest( | CODE |
| LOW | apps/waitlist-service/core/handler.ts | 29 | export async function handleRequest( | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | packages/ui/HANDOFF.md | 420 | ## The law (guardrails for anyone editing `@plannotator/ui`) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …or-compound/scripts/extract_exit_plan_mode_outcomes.py | 199 | CODE | |
| LOW | …or-compound/scripts/extract_exit_plan_mode_outcomes.py | 368 | CODE | |
| LOW | …or-compound/scripts/extract_exit_plan_mode_outcomes.py | 464 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/manual/local/test-binary.sh | 22 | # Check if plannotator is installed | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …or-compound/scripts/extract_exit_plan_mode_outcomes.py | 29 | CODE |