Beautiful, AI-native markdown IDE and LLM wiki
This report presents the forensic synthetic code analysis of inkeep/open-knowledge, a TypeScript project with 2,864 GitHub stars. SynthScan v2.0 examined 852,821 lines of code across 3328 source files, recording 3277 pattern matches distributed across 11 syntactic categories. The overall adjusted score of 5.9 places this repository in the Low AI signal 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 3277 distinct pattern matches across 11 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 | packages/core/tests/health/parse-health-gate.ts | 37 | // ───────────────────────── Types ────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/core/tests/health/parse-health-gate.ts | 83 | // ───────────────────────── Comparison (pure) ────────────────────────────── | COMMENT |
| MEDIUM | packages/core/tests/health/parse-health-gate.ts | 123 | // ───────────────────────── Harvest (effectful) ──────────────────────────── | COMMENT |
| MEDIUM | packages/core/tests/health/parse-health-gate.ts | 164 | // ───────────────────────── Corpus loading ───────────────────────────────── | COMMENT |
| MEDIUM | packages/core/tests/health/parse-health-gate.ts | 185 | // ───────────────────────── Baseline IO ──────────────────────────────────── | COMMENT |
| MEDIUM | packages/core/tests/health/parse-health-gate.ts | 197 | // ───────────────────────── Formatting ───────────────────────────────────── | COMMENT |
| MEDIUM | packages/core/tests/health/parse-health-gate.ts | 216 | // ───────────────────────── CLI ──────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/core/tests/perf/regression-gate.test.ts | 221 | // ───────────────────────── Loader runtime validation ───────────────────── | COMMENT |
| MEDIUM⚡ | packages/core/tests/perf/markdown-bench.test.ts | 41 | // ───────────────────────── Gating ───────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | packages/core/tests/perf/markdown-bench.test.ts | 47 | // ───────────────────────── Methodology constants ────────────────────────── | COMMENT |
| MEDIUM⚡ | packages/core/tests/perf/markdown-bench.test.ts | 52 | // ───────────────────────── Stats helpers ────────────────────────────────── | COMMENT |
| MEDIUM | packages/core/tests/perf/markdown-bench.test.ts | 92 | // ───────────────────────── Runner metadata ──────────────────────────────── | COMMENT |
| MEDIUM | packages/core/tests/perf/markdown-bench.test.ts | 132 | // ───────────────────────── Measurement ──────────────────────────────────── | COMMENT |
| MEDIUM | packages/core/tests/perf/markdown-bench.test.ts | 185 | // ───────────────────────── Test ─────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/core/tests/perf/regression-gate.ts | 33 | // ───────────────────────── Types ────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/core/tests/perf/regression-gate.ts | 115 | // ───────────────────────── Core comparison ──────────────────────────────── | COMMENT |
| MEDIUM | packages/core/tests/perf/regression-gate.ts | 173 | // ───────────────────────── Formatting ───────────────────────────────────── | COMMENT |
| MEDIUM | packages/core/tests/perf/regression-gate.ts | 198 | // ───────────────────────── IO helpers ───────────────────────────────────── | COMMENT |
| MEDIUM | packages/core/tests/perf/regression-gate.ts | 269 | // ───────────────────────── CLI ──────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/core/src/shadow-repo-layout.ts | 576 | // ─── In-memory checkpoint body metadata ──────── | COMMENT |
| MEDIUM | packages/core/src/shadow-repo-layout.ts | 781 | // ─── ok-actor: body line ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/core/src/shadow-repo-layout.ts | 1039 | // ─── Subject-prefix scheme ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/core/src/shadow-repo-layout.ts | 1080 | // ─── Change-note subject composition ───────────────────────────────────────── | COMMENT |
| MEDIUM | packages/core/src/shadow-repo-layout.test.ts | 843 | // ─── auto-consolidation kind ─────────────────── | COMMENT |
| MEDIUM | packages/core/src/shadow-repo-layout.test.ts | 905 | // ─── parseOkActor / formatOkActor / formatWipSubject ───────────────── | COMMENT |
| MEDIUM | packages/core/src/shadow-repo-layout.test.ts | 1029 | // ─── writer_id + summaries consolidation (ok-contributors retirement) ──────── | COMMENT |
| MEDIUM | packages/core/src/shadow-repo-layout.test.ts | 1435 | // ─── Subject-prefix format helpers ────────────────────── | COMMENT |
| MEDIUM | packages/core/src/schema-invariant.test.ts | 25 | // ── Schema shape capture ──────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/core/src/schema-invariant.test.ts | 103 | // ── Snapshot loading ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/core/src/schema-invariant.test.ts | 112 | // ── Allowed narrowings ────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/core/src/schema-invariant.test.ts | 235 | // ── Tests ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/core/src/handoff/prompt-composer.test.ts | 894 | // ── composeTerminalBareLaunchPrompt — docked-terminal bare launch ─────────── | COMMENT |
| MEDIUM | packages/core/src/utils/youtube-embed.test.ts | 5 | // ── Recognized hosts → canonical /embed/<id> output ─────────────────── | COMMENT |
| MEDIUM | packages/core/src/utils/youtube-embed.test.ts | 28 | // ── Timestamp preservation ──────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/core/src/utils/youtube-embed.test.ts | 94 | // ── Rejected inputs → null ──────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/core/src/schemas/api/share.ts | 152 | // ─── Publish-to-GitHub wizard ──────────────────────────────────────── | COMMENT |
| MEDIUM | packages/core/src/schemas/api/share.ts | 307 | // ─── Shared branch-name validator ───────────────────────────────────── | COMMENT |
| MEDIUM | packages/core/src/schemas/api/share.ts | 386 | // ─── Git auth failure classifier ────────────────────────────────────── | COMMENT |
| MEDIUM | packages/core/src/schemas/api/share.ts | 521 | // ─── Branch-info (share-link branch-awareness) ──────────────────────── | COMMENT |
| MEDIUM | packages/core/src/schemas/api/share.ts | 586 | // ─── Checkout (share-link branch-awareness) ─────────────────────────── | COMMENT |
| MEDIUM | packages/core/src/schemas/api/share.ts | 694 | // ─── Target-status (share-link receive integrity) ───────────────────── | COMMENT |
| MEDIUM | packages/core/src/schemas/api/tags-search.ts | 313 | // ─── Skills (`/api/skill`, `/api/skills`) ──────────────────────── | COMMENT |
| MEDIUM | packages/core/src/schemas/api/pages.test.ts | 370 | // ─── Cluster C URN tokens ─────────────────────────────────────── | COMMENT |
| MEDIUM | packages/core/src/schemas/api/local-op.test.ts | 96 | // ─── Cluster H: sync + seed handlers ─────────────────────────────── | COMMENT |
| MEDIUM | packages/core/src/schemas/api/document-read.test.ts | 32 | // ─── read endpoint success schemas ──────────────────────────── | COMMENT |
| MEDIUM | packages/core/src/extensions/list.ts | 37 | // ────────────────────────── Helpers ────────────────────────── | COMMENT |
| MEDIUM | packages/core/src/extensions/list.ts | 138 | // ────────────────────────── List Node ────────────────────────── | COMMENT |
| MEDIUM | packages/core/src/extensions/list.ts | 309 | // ────────────────────────── ListItem Node ────────────────────────── | COMMENT |
| MEDIUM | packages/core/src/registry/types.ts | 13 | // ── PropDef discriminated union ────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/core/src/registry/types.ts | 194 | // ── SerializeContext + helper types ────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/core/src/registry/types.ts | 225 | // ── JsxComponentMeta — discriminated on `surface` ─────────────────────────── | COMMENT |
| MEDIUM | packages/core/src/registry/registry.test.ts | 967 | // ─── Schema-flip-drift meta-test (parallel to precedent #47) ───────── | COMMENT |
| MEDIUM | packages/core/src/registry/registry.test.ts | 967 | // ─── Schema-flip-drift meta-test (parallel to precedent #47) ───────── | COMMENT |
| MEDIUM | packages/core/src/registry/built-ins.ts | 58 | // ── Callout ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/core/src/registry/built-ins.ts | 651 | // ── Accordion ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/core/src/registry/built-ins.ts | 656 | // ── Constraints (load-bearing) ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/core/src/registry/built-ins.ts | 672 | // ── Namespace collision ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/core/src/registry/built-ins.ts | 679 | // ── `children` semantics ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/core/src/registry/built-ins.ts | 737 | // ── Compat descriptor prop subsets ─────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/core/src/registry/built-ins.ts | 821 | // ── Tabs / Tab ─────────────────────────────────────────────────────────────── | COMMENT |
| 696 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | oxlint.config.ts | 1 | import { defineConfig } from 'oxlint'; | COMMENT |
| LOW | …/__fixtures__/no-roundtrip-identity-oracle.fixture.tsx | 61 | // contract, NOT a leak. No `serialize(parse(...))`, two different inputs. | COMMENT |
| LOW | …fixtures__/no-raw-html-interactive-element.fixture.tsx | 1 | // FIXTURE — drives `no-raw-html-interactive-element.test.ts` via shell-out | COMMENT |
| LOW | …gins/__fixtures__/cst-pm-handler-todo-stub.fixture.tsx | 1 | // FIXTURE - drives `cst-pm-handler-todo-stub.test.ts` via shell-out | COMMENT |
| LOW | …/__fixtures__/no-unportaled-editor-content.fixture.tsx | 1 | // FIXTURE — drives `no-unportaled-editor-content.test.ts` via shell-out | COMMENT |
| LOW | …/__fixtures__/no-unportaled-editor-content.fixture.tsx | 61 | // even though `EditorContent` is named there. | COMMENT |
| LOW | …ures__/class-proof-registration-discipline.fixture.tsx | 1 | // FIXTURE — drives `class-proof-registration-discipline.test.ts` via | COMMENT |
| LOW | …tures__/path-conditional-map-driven-origin.fixture.tsx | 1 | // FIXTURE — drives `path-conditional-map-driven-origin.test.ts` via shell-out | COMMENT |
| LOW | …/__fixtures__/require-windowshide-on-spawn.fixture.tsx | 1 | // FIXTURE — drives `require-windowshide-on-spawn.test.ts` via shell-out to | COMMENT |
| LOW | docs/next-env.d.ts | 1 | /// <reference types="next" /> | COMMENT |
| LOW | docs/scripts/generate-brand-assets.ts | 1 | import { mkdirSync, readFileSync, writeFileSync } from 'node:fs'; | COMMENT |
| LOW | docs/src/lib/brand-assets.ts | 1 | // The /brand page and downloadable brand kit now live in the marketing app | COMMENT |
| LOW | docs/src/lib/ok-wordmark.data.ts | 1 | // Generated from public/ok-wordmark.svg — do not hand-edit. | COMMENT |
| LOW | scripts/bun-install-ci.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | scripts/bun-install-ci.sh | 21 | # engages — the hang rides the GitHub job to its `timeout-minutes` cap, | COMMENT |
| LOW | scripts/bun-install-ci.sh | 41 | # not substitute. | COMMENT |
| LOW | scripts/bun-install-ci.sh | 61 | # Tests inject a stub script here. The | COMMENT |
| LOW | scripts/bun-install-ci.sh | 81 | # ≈ 12.75 min < 15 min. A healthy cold install | COMMENT |
| LOW | scripts/bun-install-ci.sh | 141 | INSTALL_ARGV=("$BUN_INSTALL_CMD") | COMMENT |
| LOW | scripts/check-knip-clean.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | scripts/check-i18n-drift.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | scripts/husky-prepare.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | scripts/husky-prepare.sh | 21 | # This guard skips husky entirely in the monorepo case so the parent's | COMMENT |
| LOW | scripts/check-schema-snapshot-clean.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | scripts/check-husky-prepare-guard.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | packages/core/src/shadow-repo-layout.ts | 261 | return null; | COMMENT |
| LOW | packages/core/src/shadow-repo-layout.ts | 601 | COMMENT | |
| LOW | packages/core/src/shadow-repo-layout.test.ts | 1601 | // un-truncated `${base} — ${summary}` fits in 72 chars, with an embedded | COMMENT |
| LOW | packages/core/src/schema-invariant.test.ts | 161 | // Drop the legacy `content` attr | COMMENT |
| LOW | packages/core/src/schema-invariant.test.ts | 181 | // Three rendered:false attrs (`sourceForm`/`target`/`anchor`) previously | COMMENT |
| LOW | packages/core/src/schema-invariant.test.ts | 281 | // Content expression must be identical (strict-equality check). | COMMENT |
| LOW | packages/core/src/index.ts | 301 | type WikiLinkAttrs, | COMMENT |
| LOW | packages/core/src/index.ts | 941 | // types.ts` for the app renderer's optional `window.okDesktop` access. Keeping | COMMENT |
| LOW | packages/core/src/config/schema.ts | 121 | // `preview.*` is no longer a schema section. The code-block preview iframe | COMMENT |
| LOW | packages/core/src/config/schema.ts | 141 | // user-configurable in practice (or in the case of editorModeDefault, | COMMENT |
| LOW | packages/core/src/config/schema.ts | 161 | // reveal). Project scope would bleed one teammate's view choice across | COMMENT |
| LOW | packages/core/src/config/schema.ts | 261 | 'Soft-wrap long lines in the source (CodeMirror) editor. A personal preference (user scope).', | COMMENT |
| LOW | packages/core/src/config/schema.ts | 341 | .default({ enabled: null, default: null }), | COMMENT |
| LOW | packages/core/src/config/bind-config-doc.ts | 281 | let doc = parseDocument(currentContent); | COMMENT |
| LOW | packages/core/src/config/field-registry.test.ts | 161 | test('project-strict fields cover autoSync.default + content.* + telemetry.localSink.*', () => { | COMMENT |
| LOW | packages/core/src/config/write-config-patch.ts | 201 | // the second write silently overwrites keys touched only by the first. | COMMENT |
| LOW | packages/core/src/handoff/urn-ipc-registry.ts | 221 | // Cluster A — agent-write/-write-md/-patch/-undo (HTTP-only; no IPC counterpart for agent writes) | COMMENT |
| LOW | packages/core/src/constants/embedded-host.ts | 1 | export type EmbeddedHost = 'cursor' | 'codex' | 'claude-desktop' | null; | COMMENT |
| LOW | packages/core/src/constants/upload.ts | 401 | 'ico', | COMMENT |
| LOW | packages/core/src/constants/upload.ts | 441 | // (CodeMirror, read-only) when previewing. Safe to serve `inline` | COMMENT |
| LOW | packages/core/src/constants/upload.ts | 581 | // Each set is a STRICT subset of its canonical-class set (asserted below), | COMMENT |
| LOW | packages/core/src/constants/upload.ts | 621 | // No per-class assertSubset for `SIDEBAR_TEXT_EXTENSIONS` — text formats | COMMENT |
| LOW | packages/core/src/constants/upload.ts | 661 | INLINE_RENDERABLE_EXTENSIONS, | COMMENT |
| LOW | packages/core/src/constants/editors.ts | 101 | // Pi implements the Agent Skills standard and scans `.pi/skills` natively | COMMENT |
| LOW | packages/core/src/constants/editors.ts | 181 | 'claude-desktop': null, | COMMENT |
| LOW | packages/core/src/constants/editors.ts | 201 | // LM Studio's MCP config is a single user-global `mcp.json` (it follows | COMMENT |
| LOW | packages/core/src/utils/link-targets.test.ts | 141 | COMMENT | |
| LOW | packages/core/src/schemas/api.type-tests.ts | 81 | COMMENT | |
| LOW | packages/core/src/schemas/api/_envelope.ts | 161 | // object, validates it through `ProblemDetailsSchema.parse()`, and emits with | COMMENT |
| LOW | packages/core/src/schemas/api/_envelope.ts | 221 | // `no-active-session` is handleAgentUndo-specific. | COMMENT |
| LOW | packages/core/src/schemas/api/_envelope.ts | 241 | 'urn:ok:error:too-many-agent-sessions', | COMMENT |
| LOW | packages/core/src/schemas/api/_envelope.ts | 261 | // `backlink-index-not-configured` flags the (rare) startup state where | COMMENT |
| LOW | packages/core/src/schemas/api/_envelope.ts | 281 | // gate; `principal-not-available` is the 404 case when local git-config | COMMENT |
| LOW | packages/core/src/schemas/api/_envelope.ts | 301 | // rollback / rename / delete / template — so SDK consumers can branch on | COMMENT |
| LOW | packages/core/src/schemas/api/_envelope.ts | 321 | // absolute path). All other error paths reuse shared `invalid-request`, | COMMENT |
| 1095 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …me-plugins/__fixtures__/microcopy-ellipsis.fixture.tsx | 14 | export function PositiveJsxAttributePlaceholder() { | CODE |
| LOW | …s/src/app/d/[encoded]/splash-download-split-button.tsx | 28 | export function SplashDownloadSplitButton({ | CODE |
| LOW | packages/core/scripts/chrome-resolver.ts | 106 | export function resolveChromeTokensFromCss(cssPath: string): ChromeTokens { | CODE |
| LOW | packages/core/scripts/chrome-resolver.ts | 120 | export function renderChromeConstantsModule(tokens: ChromeTokens): string { | CODE |
| LOW | packages/core/scripts/preview-theme-token-resolver.ts | 136 | export function resolvePreviewThemeTokensFromCss(cssPath: string): ResolvedPreviewToken[] { | CODE |
| LOW | packages/core/scripts/preview-theme-token-resolver.ts | 170 | export function renderPreviewThemeTokensModule(tokens: ResolvedPreviewToken[]): string { | CODE |
| LOW | packages/core/src/shadow-repo-layout.ts | 1004 | export function okActorToShadowContributor(a: OkActorEntry): ShadowContributor { | CODE |
| LOW | packages/core/src/helper-bundle.ts | 65 | export function resolveHelperBundleBinary(parentExecPath: string): string { | CODE |
| LOW | packages/core/src/y-prosemirror-patch.test.ts | 92 | function resolveInstalledPackageDir(packageName: string): string { | CODE |
| LOW | packages/core/src/metrics/parse-health.ts | 180 | export function incrementWholeDocFallback(): void { | CODE |
| LOW | packages/core/src/metrics/parse-health.ts | 188 | export function incrementWholeDocBudgetFallback(): void { | CODE |
| LOW⚡ | packages/core/src/metrics/parse-health.ts | 201 | export function incrementJsxRenderFailure(component: string): void { | CODE |
| LOW⚡ | packages/core/src/metrics/parse-health.ts | 206 | export function incrementJsxAutoConvertFailed(component: string): void { | CODE |
| LOW⚡ | packages/core/src/metrics/parse-health.ts | 211 | export function incrementJsxAutoConvertSucceeded(component: string): void { | CODE |
| LOW | packages/core/src/metrics/parse-health.ts | 241 | export function incrementJsxStuckCopyFailed(component: string): void { | CODE |
| LOW | packages/core/src/metrics/parse-health.ts | 246 | export function incrementJsxStuckDeleteFailed(component: string): void { | CODE |
| LOW | packages/core/src/metrics/parse-health.ts | 257 | export function incrementJsxPopoverCloseRestoreFailed(component: string): void { | CODE |
| LOW | packages/core/src/metrics/parse-health.ts | 263 | export function incrementJsxKeyboardDeleteFailed(component: string): void { | CODE |
| LOW | packages/core/src/metrics/parse-health.ts | 275 | export function incrementBlockGripClickSelectFailed(nodeType: string): void { | CODE |
| LOW | packages/core/src/metrics/parse-health.ts | 288 | export function incrementJsxArrowNodeSelectFailed( | CODE |
| LOW | packages/core/src/metrics/parse-health.ts | 302 | export function incrementYpsMismatchBlock(): void { | CODE |
| LOW | packages/core/src/metrics/parse-health.ts | 307 | export function incrementYpsMismatchInline(): void { | CODE |
| LOW | packages/core/src/sharing/candidate-selection.ts | 460 | function compareCandidatesForTiebreak(a: Candidate, b: Candidate): number { | CODE |
| LOW | packages/core/src/sharing/receive-flow.ts | 94 | export function findRecentProjectsForRepo( | CODE |
| LOW | packages/core/src/config/schema.ts | 59 | export function normalizeAttachmentFolderPath(value: string): string { | CODE |
| LOW | packages/core/src/config/schema.ts | 64 | export function isValidAttachmentFolderPath(value: string): boolean { | CODE |
| LOW | packages/core/src/config/yaml-patch.ts | 23 | function ensureCollectionAncestors( | CODE |
| LOW | packages/core/src/handoff/prompt-composer.ts | 175 | export function composeTerminalBareLaunchPrompt(relativePath: string | null): string { | CODE |
| LOW | packages/core/src/handoff/prompt-composer.ts | 571 | function fitInstructionForDirective(directive: string, instruction: string): string { | CODE |
| LOW | packages/core/src/handoff/prompt-composer.ts | 968 | function assembleDocSelectionPrompt( | CODE |
| LOW | packages/core/src/bridge/parse-equivalence.ts | 13 | function stripTrailingLineWhitespace(body: string): string { | CODE |
| LOW | packages/core/src/bridge/apply-diff.ts | 64 | function applyByPrefixSuffixMiddleReplace( | CODE |
| LOW | packages/core/src/bridge/doc-boundary-space.ts | 21 | export function reattachLeadingDocBoundary(text: string, boundary: string): string { | CODE |
| LOW | packages/core/src/bridge/doc-boundary-space.ts | 27 | export function projectMergeBoundarySpace(text: string): string { | CODE |
| LOW | packages/core/src/bridge/normalize.ts | 86 | function foldJsxContainerBoundaryBlanks(lines: readonly string[]): string[] { | CODE |
| LOW | packages/core/src/bridge/normalize.ts | 222 | export function detectAppliedToleranceClasses(left: string, right: string): BridgeToleranceClass[] { | CODE |
| LOW | packages/core/src/bridge/structural-freshness.ts | 28 | function stripResolverDerivedAttrs(node: PmStructuralNode): PmStructuralNode { | CODE |
| LOW | packages/core/src/bridge/structural-freshness.ts | 78 | export function createStructuralFreshnessChecker( | CODE |
| LOW | packages/core/src/bridge/merge-three-way.ts | 147 | export function assertContentPreservation( | CODE |
| LOW | packages/core/src/bridge/tolerance-telemetry.ts | 50 | export function setToleranceTelemetryHook(h: ToleranceTelemetryHook | null): void { | CODE |
| LOW | packages/core/src/bridge/pm-structural-equivalence.ts | 303 | function firstStructuralDivergence(expected: unknown, actual: unknown, path = 'doc'): string { | CODE |
| LOW | packages/core/src/bridge/pm-structural-equivalence.ts | 325 | export function compareRoundTripStructural( | CODE |
| LOW | packages/core/src/markdown/mdast-to-hast-handlers.ts | 27 | function collectStaticJsxAttributes( | CODE |
| LOW | packages/core/src/markdown/handler-shadow-audit.ts | 82 | export function collectExtensionHandlerKeys(extensions: readonly unknown[]): string[] { | CODE |
| LOW | packages/core/src/markdown/handler-shadow-audit.ts | 96 | export function computeShadowedHandlerKeys( | CODE |
| LOW | packages/core/src/markdown/autolink-void-html-guard.ts | 56 | function indexUppercaseCloseTagsByName(source: string): Map<string, number[]> { | CODE |
| LOW | packages/core/src/markdown/autolink-void-html-guard.ts | 102 | function isAngleBracketDestinationOpen(offset: number, result: string): boolean { | CODE |
| LOW | packages/core/src/markdown/entity-ref-guard.ts | 17 | function countPrecedingBackslashes(source: string, before: number): number { | CODE |
| LOW | packages/core/src/markdown/entity-ref-guard.ts | 67 | function restoreEntityRefsInString(s: string): { | CODE |
| LOW | …ckages/core/src/markdown/details-accordion-promoter.ts | 72 | function promoteSingleLineParagraph(paragraph: Paragraph): MdxJsxFlowElement | null { | CODE |
| LOW | …ckages/core/src/markdown/details-accordion-promoter.ts | 179 | export function detailsAccordionPromoterPlugin() { | CODE |
| LOW | packages/core/src/markdown/parser-drop-closure.ts | 337 | export function extractFromMarkdownHandlerKeys(libSource: string): string[] { | CODE |
| LOW | packages/core/src/markdown/parser-drop-closure.ts | 367 | export function extractPreprocessTransforms(preprocessSource: string): { | CODE |
| LOW | packages/core/src/markdown/table-cell-flatten.ts | 19 | function substituteBreaksWithBrHtml(node: { children?: Nodes[] }): void { | CODE |
| LOW | packages/core/src/markdown/to-markdown-handlers.ts | 748 | function quotedAttrExpressionValue(value: string): string { | CODE |
| LOW | packages/core/src/markdown/to-markdown-handlers.ts | 812 | function isWhitespaceNumericCharRef(body: string): boolean { | CODE |
| LOW | packages/core/src/markdown/to-markdown-handlers.ts | 915 | function escapeActiveDelimiterRuns(value: string, info: Info): string { | CODE |
| LOW | packages/core/src/markdown/to-markdown-handlers.ts | 951 | function encodeAttentionBoundaries(between: string, info: Info, delim: string): string { | CODE |
| LOW | packages/core/src/markdown/to-markdown-handlers.ts | 967 | function shouldEncodeAttentionBoundary( | CODE |
| LOW | packages/core/src/markdown/merged-walker.ts | 9 | export function mergedPostParseWalkerPlugin() { | CODE |
| 975 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | README.md | 53 | ok init # scaffold the project + wire up your AI editors (Claude Code, Claude Desktop, Cursor, Codex, OpenCode, | CODE |
| MEDIUM | scripts/husky-prepare.sh | 29 | # `_/` scaffolding and the chmod would silently no-op, leaving cruft. | COMMENT |
| MEDIUM | scripts/husky-prepare.sh | 54 | # husky has nothing to register. Skip to avoid empty scaffolding. | COMMENT |
| MEDIUM | scripts/check-husky-prepare-guard.sh | 116 | # husky setup to avoid creating empty `_/` scaffolding. | COMMENT |
| MEDIUM | packages/core/src/handoff/prompt-composer.ts | 296 | // body ends in a blockquoted brief, an `@`-mention line, or the scaffold | COMMENT |
| MEDIUM | packages/core/src/handoff/prompt-composer.test.ts | 403 | // existing-repo empty brief: neutral, no scaffold-from-scratch directive. | COMMENT |
| MEDIUM | packages/app/tests/integration/bridge-matrix.test.ts | 359 | // Agent undo/redo endpoints were removed (broken scaffold removal). | COMMENT |
| MEDIUM | …ests/integration/conflict-aware-write-surfaces.test.ts | 383 | // Seed the .ok scaffold + git so createTestServer's ensureProjectGit is a no-op. | COMMENT |
| MEDIUM | …ests/integration/conflict-aware-write-surfaces.test.ts | 604 | // Real git + .ok/ scaffold so SyncEngine constructs without bailing. | COMMENT |
| MEDIUM | packages/app/src/components/SeedDialog.tsx | 156 | // typing doesn't strobe "Computing scaffold plan…" between keystrokes. | COMMENT |
| MEDIUM | …kages/app/src/components/CreatedItemsList.dom.test.tsx | 50 | // Subfolder scaffold into `brain/`: the plan creates the parent folder plus | COMMENT |
| MEDIUM | …kages/app/src/components/CreatedItemsList.dom.test.tsx | 105 | // Re-scaffold where the folder already exists: only its templates are in | COMMENT |
| MEDIUM | packages/app/src/components/ProjectSwitcher.tsx | 184 | // dialog drives the full scaffold + open-in-new-window flow itself. | COMMENT |
| MEDIUM | packages/desktop/electron-builder.yml | 255 | # smoke path for M2 scaffolding before cert procurement completes. | COMMENT |
| MEDIUM | …ckages/desktop/src/main/worktree-setup-inherit.test.ts | 143 | // Full `.ok/` scaffold parity with a fresh setup. | COMMENT |
| MEDIUM | packages/desktop/src/main/ok-init.ts | 121 | // Coalesce concurrent callers onto the same scaffold. Their result is | COMMENT |
| MEDIUM | packages/desktop/src/main/create-new-project.test.ts | 620 | // skipped — the project is valid but carries no pack scaffold. | COMMENT |
| MEDIUM | packages/desktop/src/main/worktree-service.ts | 180 | // Inherit the root project's OK setup (`.ok/` scaffold + editor/MCP wiring) | COMMENT |
| MEDIUM | packages/desktop/src/main/index.ts | 4175 | // for adjusting content scope at scaffold time, so this telemetry | COMMENT |
| MEDIUM | packages/desktop/src/main/index.ts | 4200 | // scaffold branch won't re-fire. | COMMENT |
| MEDIUM | packages/desktop/src/main/folder-admission.ts | 260 | // standalone treatment lets the server-side ok-init endpoint scaffold | COMMENT |
| MEDIUM | packages/server/src/api-extension.ok-init.test.ts | 223 | // The containment gate fires before `initContent` — no scaffold written. | COMMENT |
| MEDIUM | packages/server/src/boot.test.ts | 121 | // scaffold at projectDir only and confirm boot succeeds. | COMMENT |
| MEDIUM | packages/server/src/boot.test.ts | 152 | // preflight is anchored to `projectDir`, so a config-shaped scaffold under | COMMENT |
| MEDIUM | packages/server/src/tag-index.test.ts | 263 | idx.updateDocumentFromMarkdown('__template__/docs/my-template', '#scaffold note\n'); | CODE |
| MEDIUM | packages/server/src/boot.ts | 507 | // Pre-createServer scaffold hook. CLI passes initContent; desktop omits. | COMMENT |
| MEDIUM | packages/server/src/api-extension.ts | 11528 | // anchor pointing outside home can't slip a scaffold write past the | COMMENT |
| MEDIUM | packages/server/src/api-extension.ts | 11594 | // (e.g., a checkout flow racing scaffold writes). | COMMENT |
| MEDIUM | packages/server/src/git-preflight-boot.test.ts | 255 | // instead, we point `contentDir` at a directory missing the .ok scaffold | COMMENT |
| MEDIUM | packages/server/src/git-preflight-boot.test.ts | 297 | // Boot reached the next gate (config scaffold missing). That proves | COMMENT |
| MEDIUM | packages/server/src/init-project.test.ts | 135 | // The folder-metadata explainer block was removed from the scaffold too. | COMMENT |
| MEDIUM | packages/server/src/init-project.test.ts | 180 | // `.okignore`) as a symlink could either (a) append OK scaffold lines to a | COMMENT |
| MEDIUM | packages/server/src/init-project.test.ts | 182 | // (b) plant the OK scaffold contents at an arbitrary path via the | COMMENT |
| MEDIUM | packages/server/src/init-project.ts | 151 | # exists as mental scaffolding, not as enforced filesystem structure. | COMMENT |
| MEDIUM | packages/server/src/init-project.ts | 342 | // .gitignore: merge-on-upgrade — append missing scaffold entries to an | COMMENT |
| MEDIUM | packages/server/src/init-project.ts | 343 | // existing file rather than skipping outright. Today's scaffold is a single | COMMENT |
| MEDIUM | packages/server/src/seed/starter.ts | 1679 | // Root scaffold: OKF reserved files (index.md / log.md) belong at the | COMMENT |
| MEDIUM | packages/server/src/seed/plan.ts | 112 | // Each gets independent existence checks so a partial scaffold (e.g. user | COMMENT |
| MEDIUM | packages/cli/src/cli.ts | 198 | // seed command — stateless content-scaffold, no config needed | COMMENT |
| MEDIUM | packages/cli/src/commands/start.test.ts | 731 | // scaffold one for us — seed manually. | COMMENT |
| MEDIUM | packages/cli/src/commands/start.test.ts | 1423 | // bootStartServer — no scaffold when .ok/config.yml is absent | COMMENT |
| MEDIUM | packages/cli/src/commands/start.test.ts | 1432 | // Intentionally no .ok/config.yml — the test asserts ok start refuses to scaffold. | COMMENT |
| MEDIUM | packages/cli/src/commands/clone.ts | 344 | // Auto-init: scaffold .ok/ unconditionally. `runInit` is idempotent | COMMENT |
| MEDIUM | packages/cli/src/commands/init.ts | 2192 | // (excludes the scaffold-failure early return, where no config exists); | COMMENT |
| MEDIUM | packages/cli/src/commands/init.test.ts | 164 | // scaffold: config-only, no content subdirs. | COMMENT |
| MEDIUM | packages/cli/src/commands/init.test.ts | 168 | // created lazily by writers — not part of the scaffold. | COMMENT |
| MEDIUM | packages/cli/src/commands/init.test.ts | 315 | // But the .ok/ config scaffold IS created | COMMENT |
| MEDIUM | packages/cli/src/commands/init.test.ts | 352 | // Config scaffold should still have been created | COMMENT |
| MEDIUM | packages/cli/src/commands/init.test.ts | 1249 | // .ok/ scaffold still landed (project creation succeeded). | COMMENT |
| MEDIUM | packages/cli/src/commands/init.test.ts | 1785 | // Scaffolding-failure shape: flag requested, no config written, scaffold failed. | COMMENT |
| MEDIUM | packages/cli/src/commands/init.test.ts | 1795 | // Pre-existing-config shape (same undefined contentDir, but scaffold succeeded): | COMMENT |
| MEDIUM | packages/cli/src/commands/start.ts | 1026 | skipAutoInit: true, // Guard already ran above; no scaffold fn to pass | CODE |
| MEDIUM | packages/cli/src/commands/share/publish.ts | 297 | // scaffold is staged BEFORE the initial commit lands. Any | COMMENT |
| MEDIUM | packages/native-config/src/mcp_edit.rs | 249 | // Drop the ` ` prefix the `v = ` scaffold left on the value, so it carries | COMMENT |
| MEDIUM | .github/workflows/release.yml | 6 | # Beta path: event-driven on `push` to legacy/main with a paths filter on | COMMENT |
| MEDIUM | .github/workflows/release.yml | 87 | # event-driven betas and promote-stable route their npm publishes here. | COMMENT |
| MEDIUM | .github/workflows/release.yml | 253 | # top-level `bun run build` (turbo orchestrates the dep order: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | packages/core/src/config/write-config-patch.ts | 187 | // Step 0: scope-violation check. Catches misrouted writes BEFORE any | COMMENT |
| LOW | packages/core/src/config/write-config-patch.ts | 240 | // Step 1: read current file content (or empty for lazy first-write). | COMMENT |
| LOW | packages/core/src/config/write-config-patch.ts | 255 | // Step 2: parse the existing YAML (or empty document for first-write). | COMMENT |
| LOW⚡ | packages/core/src/config/write-config-patch.ts | 280 | // Step 3: apply the patch to the Document. | COMMENT |
| LOW⚡ | packages/core/src/config/write-config-patch.ts | 283 | // Step 4: serialize to JS for safeParse (validation), and to string for | COMMENT |
| LOW | packages/core/src/config/write-config-patch.ts | 309 | // Step 5: serialize the doc to YAML. For lazy first-write, prepend the | COMMENT |
| LOW | packages/core/src/config/write-config-patch.ts | 323 | // Step 6: ensure parent directory exists, then atomic write. | COMMENT |
| LOW⚡ | packages/app/tests/integration/bridge-matrix.test.ts | 755 | // Step 1: Baseline via WYSIWYG | COMMENT |
| LOW⚡ | packages/app/tests/integration/bridge-matrix.test.ts | 760 | // Step 2: Server-side agent write via HTTP API (appends content to Y.Text | COMMENT |
| LOW | packages/app/tests/integration/bridge-matrix.test.ts | 772 | // Step 3: Client's user appends via WYSIWYG — an incremental edit, | COMMENT |
| LOW | packages/app/tests/integration/bridge-matrix.test.ts | 784 | // Step 4: Both user edit and agent content should be present | COMMENT |
| LOW | …sts/integration/vite-worker-cachedir-isolation.test.ts | 280 | // Step 1: resolve the per-worker cacheDir identifier from the | COMMENT |
| LOW | …sts/integration/vite-worker-cachedir-isolation.test.ts | 312 | // Step 2: enumerate rmSync call sites in the fixture. The two | COMMENT |
| LOW | …sts/integration/vite-worker-cachedir-isolation.test.ts | 335 | // Step 3: pair each contentDir teardown with a sibling | COMMENT |
| LOW⚡ | …kages/app/tests/perf/scenarios/m3-defer-mount-sweep.ts | 147 | // Step 1: navigate to root to discard any in-memory editor cache. | COMMENT |
| LOW⚡ | …kages/app/tests/perf/scenarios/m3-defer-mount-sweep.ts | 151 | // Step 2: cold-load the target doc and measure. | COMMENT |
| LOW | packages/app/tests/perf/scenarios/warm-switch-cached.ts | 68 | // Step 1: warm up docA + docB | COMMENT |
| LOW | packages/app/tests/perf/scenarios/warm-switch-cached.ts | 92 | // Step 2: force Activity-mount eviction of docA | COMMENT |
| LOW | packages/app/tests/perf/scenarios/warm-switch-cached.ts | 105 | // Step 3: navigate back to docA — V2 cache should reparent, not rebuild. | COMMENT |
| LOW⚡ | …ckages/app/tests/stress/observer-a-multi-client.e2e.ts | 109 | // Step 1: user on Client A starts typing into the editor (focus + position cursor | COMMENT |
| LOW⚡ | …ckages/app/tests/stress/observer-a-multi-client.e2e.ts | 114 | // Step 2: agent writes additional content to the same line via server-side API. | COMMENT |
| LOW | …ckages/app/tests/stress/observer-a-multi-client.e2e.ts | 136 | // Step 3: Client A's user types at the end of the line (which now includes the | COMMENT |
| LOW⚡ | packages/app/tests/stress/qa-sidebar-responsive.e2e.ts | 975 | // Step 1: pin open at narrow. | COMMENT |
| LOW⚡ | packages/app/tests/stress/qa-sidebar-responsive.e2e.ts | 979 | // Step 2: resize wide. Above slot is absent → smart default opens. | COMMENT |
| LOW⚡ | packages/app/tests/stress/qa-sidebar-responsive.e2e.ts | 982 | // Step 3: explicit collapse at wide → above slot recorded; below untouched. | COMMENT |
| LOW⚡ | packages/app/tests/stress/qa-sidebar-responsive.e2e.ts | 988 | // Step 4: resize back to narrow → below slot honored → right reopens. | COMMENT |
| LOW⚡ | packages/app/tests/stress/qa-sidebar-responsive.e2e.ts | 991 | // Step 5: both slots still coexist (the wide-visit's collapse did not | COMMENT |
| LOW | packages/app/src/server/agent-sim.ts | 221 | // Step 1: Read current document | COMMENT |
| LOW | packages/app/src/server/agent-sim.ts | 237 | // Step 2: Seed if empty or missing recognizable sections | COMMENT |
| LOW | packages/app/src/server/agent-sim.ts | 263 | // Step 3: Run patch sequence | COMMENT |
| LOW⚡ | packages/app/src/server/agent-sim.ts | 307 | // Step 1: Read file from disk | COMMENT |
| LOW⚡ | packages/app/src/server/agent-sim.ts | 315 | // Step 2: Seed via HTTP API if empty or missing patch targets | COMMENT |
| LOW | packages/app/src/server/agent-sim.ts | 334 | // Step 3: Run edit sequence directly on disk | COMMENT |
| LOW | packages/app/src/server/agent-flow.test.ts | 69 | // Step 1: Seed document with initial content | COMMENT |
| LOW | packages/app/src/server/agent-flow.test.ts | 83 | // Step 2: Agent writes another paragraph (simulates agent writing while doc is open) | COMMENT |
| LOW⚡ | packages/app/src/server/agent-flow.test.ts | 94 | // Step 3: Toggle to source — serialize Y.Doc → markdown | COMMENT |
| LOW⚡ | packages/app/src/server/agent-flow.test.ts | 103 | // Step 4: Simulate user editing in source mode — add a line | COMMENT |
| LOW⚡ | packages/app/src/server/agent-flow.test.ts | 106 | // Step 5: Toggle back to WYSIWYG — parse markdown → updateYFragment | COMMENT |
| LOW | packages/app/src/server/agent-flow.test.ts | 117 | // Step 6: Verify — serialize again to check all content survived | COMMENT |
| LOW⚡ | …nts/CreateProjectDialog.cascade-staleness.dom.test.tsx | 602 | // Step 1: type a name → block-nested banner appears. This is the | COMMENT |
| LOW⚡ | …nts/CreateProjectDialog.cascade-staleness.dom.test.tsx | 611 | // Step 2: install a MutationObserver on the banner's parent (subtree: | COMMENT |
| LOW⚡ | …nts/CreateProjectDialog.cascade-staleness.dom.test.tsx | 631 | // Step 3: type more characters. The probe re-runs against the new | COMMENT |
| LOW⚡ | …nts/CreateProjectDialog.cascade-staleness.dom.test.tsx | 638 | // Step 4: wait — event-driven — for the debounced re-probe to fire. | COMMENT |
| LOW | …nts/CreateProjectDialog.cascade-staleness.dom.test.tsx | 649 | // Step 5: wait for cascade to re-settle to block-nested (banner | COMMENT |
| LOW | …nts/CreateProjectDialog.cascade-staleness.dom.test.tsx | 697 | // Step 1: type a name → cascade settles to 'free' (initial nullable | COMMENT |
| LOW | …nts/CreateProjectDialog.cascade-staleness.dom.test.tsx | 708 | // Step 2: install a controllable deferred on findEnclosingGitRoot so | COMMENT |
| LOW | …nts/CreateProjectDialog.cascade-staleness.dom.test.tsx | 723 | // Step 3: edit the name — bumps deps → cascade useEffect re-runs → | COMMENT |
| LOW | …nts/CreateProjectDialog.cascade-staleness.dom.test.tsx | 745 | // Step 4: resolve the deferred → probe settles → cascade re-renders | COMMENT |
| LOW | …nts/CreateProjectDialog.cascade-staleness.dom.test.tsx | 797 | // Step 1: type a name → cascade probes → settles to confirm-git. | COMMENT |
| LOW | …nts/CreateProjectDialog.cascade-staleness.dom.test.tsx | 808 | // Step 2: capture the polling callback. The polling setInterval | COMMENT |
| LOW | …nts/CreateProjectDialog.cascade-staleness.dom.test.tsx | 820 | // Step 3: install a controllable deferred on findEnclosingGitRoot | COMMENT |
| LOW | …nts/CreateProjectDialog.cascade-staleness.dom.test.tsx | 832 | // Step 4: trigger a fresh probe via name edit → cascade-probe | COMMENT |
| LOW⚡ | packages/app/src/editor/provider-pool.test.ts | 2980 | // Step 1: open A, let its persistence write to IDB, close it. | COMMENT |
| LOW⚡ | packages/app/src/editor/provider-pool.test.ts | 2987 | // Step 2: rename A → B. The fix calls closeAndClearPersistence on | COMMENT |
| LOW⚡ | packages/app/src/editor/provider-pool.test.ts | 2996 | // Step 3: open B (the new location), let it persist, close it. | COMMENT |
| LOW⚡ | packages/app/src/editor/provider-pool.test.ts | 3003 | // Step 4: rename B → A (the move-back). This is the critical step: | COMMENT |
| LOW⚡ | packages/app/src/editor/provider-pool.test.ts | 3012 | // Step 5: open A again. With the IDB cleared in step 4, the new | COMMENT |
| LOW | packages/app/src/editor/extensions/mark-identity.ts | 112 | // Step 1: map previous ranges forward. | COMMENT |
| LOW | packages/app/src/editor/extensions/mark-identity.ts | 134 | // Step 2: walk new doc, match spans to mapped ranges. | COMMENT |
| LOW⚡ | …ver/src/server-observers-paired-write-baseline.test.ts | 52 | // Step 1: Agent paired-write via composeAndWriteRawBody. | COMMENT |
| 23 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | packages/core/src/config/write-config-patch.ts | 187 | // Step 0: scope-violation check. Catches misrouted writes BEFORE any | COMMENT |
| LOW | packages/core/src/config/write-config-patch.ts | 240 | // Step 1: read current file content (or empty for lazy first-write). | COMMENT |
| LOW | packages/core/src/config/write-config-patch.ts | 255 | // Step 2: parse the existing YAML (or empty document for first-write). | COMMENT |
| LOW⚡ | packages/core/src/config/write-config-patch.ts | 280 | // Step 3: apply the patch to the Document. | COMMENT |
| LOW⚡ | packages/core/src/config/write-config-patch.ts | 283 | // Step 4: serialize to JS for safeParse (validation), and to string for | COMMENT |
| LOW | packages/core/src/config/write-config-patch.ts | 309 | // Step 5: serialize the doc to YAML. For lazy first-write, prepend the | COMMENT |
| LOW | packages/core/src/config/write-config-patch.ts | 323 | // Step 6: ensure parent directory exists, then atomic write. | COMMENT |
| LOW⚡ | packages/app/tests/integration/bridge-matrix.test.ts | 755 | // Step 1: Baseline via WYSIWYG | COMMENT |
| LOW⚡ | packages/app/tests/integration/bridge-matrix.test.ts | 760 | // Step 2: Server-side agent write via HTTP API (appends content to Y.Text | COMMENT |
| LOW | packages/app/tests/integration/bridge-matrix.test.ts | 772 | // Step 3: Client's user appends via WYSIWYG — an incremental edit, | COMMENT |
| LOW | packages/app/tests/integration/bridge-matrix.test.ts | 784 | // Step 4: Both user edit and agent content should be present | COMMENT |
| LOW | …sts/integration/vite-worker-cachedir-isolation.test.ts | 280 | // Step 1: resolve the per-worker cacheDir identifier from the | COMMENT |
| LOW | …sts/integration/vite-worker-cachedir-isolation.test.ts | 312 | // Step 2: enumerate rmSync call sites in the fixture. The two | COMMENT |
| LOW | …sts/integration/vite-worker-cachedir-isolation.test.ts | 335 | // Step 3: pair each contentDir teardown with a sibling | COMMENT |
| LOW⚡ | …kages/app/tests/perf/scenarios/m3-defer-mount-sweep.ts | 147 | // Step 1: navigate to root to discard any in-memory editor cache. | COMMENT |
| LOW⚡ | …kages/app/tests/perf/scenarios/m3-defer-mount-sweep.ts | 151 | // Step 2: cold-load the target doc and measure. | COMMENT |
| LOW | packages/app/tests/perf/scenarios/warm-switch-cached.ts | 68 | // Step 1: warm up docA + docB | COMMENT |
| LOW | packages/app/tests/perf/scenarios/warm-switch-cached.ts | 92 | // Step 2: force Activity-mount eviction of docA | COMMENT |
| LOW | packages/app/tests/perf/scenarios/warm-switch-cached.ts | 105 | // Step 3: navigate back to docA — V2 cache should reparent, not rebuild. | COMMENT |
| LOW⚡ | …ckages/app/tests/stress/observer-a-multi-client.e2e.ts | 109 | // Step 1: user on Client A starts typing into the editor (focus + position cursor | COMMENT |
| LOW⚡ | …ckages/app/tests/stress/observer-a-multi-client.e2e.ts | 114 | // Step 2: agent writes additional content to the same line via server-side API. | COMMENT |
| LOW | …ckages/app/tests/stress/observer-a-multi-client.e2e.ts | 136 | // Step 3: Client A's user types at the end of the line (which now includes the | COMMENT |
| LOW⚡ | packages/app/tests/stress/qa-sidebar-responsive.e2e.ts | 975 | // Step 1: pin open at narrow. | COMMENT |
| LOW⚡ | packages/app/tests/stress/qa-sidebar-responsive.e2e.ts | 979 | // Step 2: resize wide. Above slot is absent → smart default opens. | COMMENT |
| LOW⚡ | packages/app/tests/stress/qa-sidebar-responsive.e2e.ts | 982 | // Step 3: explicit collapse at wide → above slot recorded; below untouched. | COMMENT |
| LOW⚡ | packages/app/tests/stress/qa-sidebar-responsive.e2e.ts | 988 | // Step 4: resize back to narrow → below slot honored → right reopens. | COMMENT |
| LOW⚡ | packages/app/tests/stress/qa-sidebar-responsive.e2e.ts | 991 | // Step 5: both slots still coexist (the wide-visit's collapse did not | COMMENT |
| LOW | packages/app/src/server/agent-sim.ts | 221 | // Step 1: Read current document | COMMENT |
| LOW | packages/app/src/server/agent-sim.ts | 237 | // Step 2: Seed if empty or missing recognizable sections | COMMENT |
| LOW | packages/app/src/server/agent-sim.ts | 263 | // Step 3: Run patch sequence | COMMENT |
| LOW⚡ | packages/app/src/server/agent-sim.ts | 307 | // Step 1: Read file from disk | COMMENT |
| LOW⚡ | packages/app/src/server/agent-sim.ts | 315 | // Step 2: Seed via HTTP API if empty or missing patch targets | COMMENT |
| LOW | packages/app/src/server/agent-sim.ts | 334 | // Step 3: Run edit sequence directly on disk | COMMENT |
| LOW | packages/app/src/server/agent-flow.test.ts | 69 | // Step 1: Seed document with initial content | COMMENT |
| LOW | packages/app/src/server/agent-flow.test.ts | 83 | // Step 2: Agent writes another paragraph (simulates agent writing while doc is open) | COMMENT |
| LOW⚡ | packages/app/src/server/agent-flow.test.ts | 94 | // Step 3: Toggle to source — serialize Y.Doc → markdown | COMMENT |
| LOW⚡ | packages/app/src/server/agent-flow.test.ts | 103 | // Step 4: Simulate user editing in source mode — add a line | COMMENT |
| LOW⚡ | packages/app/src/server/agent-flow.test.ts | 106 | // Step 5: Toggle back to WYSIWYG — parse markdown → updateYFragment | COMMENT |
| LOW | packages/app/src/server/agent-flow.test.ts | 117 | // Step 6: Verify — serialize again to check all content survived | COMMENT |
| LOW⚡ | …nts/CreateProjectDialog.cascade-staleness.dom.test.tsx | 602 | // Step 1: type a name → block-nested banner appears. This is the | COMMENT |
| LOW⚡ | …nts/CreateProjectDialog.cascade-staleness.dom.test.tsx | 611 | // Step 2: install a MutationObserver on the banner's parent (subtree: | COMMENT |
| LOW⚡ | …nts/CreateProjectDialog.cascade-staleness.dom.test.tsx | 631 | // Step 3: type more characters. The probe re-runs against the new | COMMENT |
| LOW⚡ | …nts/CreateProjectDialog.cascade-staleness.dom.test.tsx | 638 | // Step 4: wait — event-driven — for the debounced re-probe to fire. | COMMENT |
| LOW | …nts/CreateProjectDialog.cascade-staleness.dom.test.tsx | 649 | // Step 5: wait for cascade to re-settle to block-nested (banner | COMMENT |
| LOW | …nts/CreateProjectDialog.cascade-staleness.dom.test.tsx | 697 | // Step 1: type a name → cascade settles to 'free' (initial nullable | COMMENT |
| LOW | …nts/CreateProjectDialog.cascade-staleness.dom.test.tsx | 708 | // Step 2: install a controllable deferred on findEnclosingGitRoot so | COMMENT |
| LOW | …nts/CreateProjectDialog.cascade-staleness.dom.test.tsx | 723 | // Step 3: edit the name — bumps deps → cascade useEffect re-runs → | COMMENT |
| LOW | …nts/CreateProjectDialog.cascade-staleness.dom.test.tsx | 745 | // Step 4: resolve the deferred → probe settles → cascade re-renders | COMMENT |
| LOW | …nts/CreateProjectDialog.cascade-staleness.dom.test.tsx | 797 | // Step 1: type a name → cascade probes → settles to confirm-git. | COMMENT |
| LOW | …nts/CreateProjectDialog.cascade-staleness.dom.test.tsx | 808 | // Step 2: capture the polling callback. The polling setInterval | COMMENT |
| LOW | …nts/CreateProjectDialog.cascade-staleness.dom.test.tsx | 820 | // Step 3: install a controllable deferred on findEnclosingGitRoot | COMMENT |
| LOW | …nts/CreateProjectDialog.cascade-staleness.dom.test.tsx | 832 | // Step 4: trigger a fresh probe via name edit → cascade-probe | COMMENT |
| LOW⚡ | packages/app/src/editor/provider-pool.test.ts | 2980 | // Step 1: open A, let its persistence write to IDB, close it. | COMMENT |
| LOW⚡ | packages/app/src/editor/provider-pool.test.ts | 2987 | // Step 2: rename A → B. The fix calls closeAndClearPersistence on | COMMENT |
| LOW⚡ | packages/app/src/editor/provider-pool.test.ts | 2996 | // Step 3: open B (the new location), let it persist, close it. | COMMENT |
| LOW⚡ | packages/app/src/editor/provider-pool.test.ts | 3003 | // Step 4: rename B → A (the move-back). This is the critical step: | COMMENT |
| LOW⚡ | packages/app/src/editor/provider-pool.test.ts | 3012 | // Step 5: open A again. With the IDB cleared in step 4, the new | COMMENT |
| LOW | packages/app/src/editor/extensions/mark-identity.ts | 112 | // Step 1: map previous ranges forward. | COMMENT |
| LOW | packages/app/src/editor/extensions/mark-identity.ts | 134 | // Step 2: walk new doc, match spans to mapped ranges. | COMMENT |
| LOW⚡ | …ver/src/server-observers-paired-write-baseline.test.ts | 52 | // Step 1: Agent paired-write via composeAndWriteRawBody. | COMMENT |
| 23 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | packages/app/tests/perf/scenarios/sweep-cache-regime.ts | 57 | * # Per-fixture run for fast iteration on harness changes: | COMMENT |
| MEDIUM | packages/app/tests/perf/lib/tempo-client.test.ts | 287 | // convert — verifying via substring keeps the test robust against | COMMENT |
| MEDIUM | …/perf/baselines/2026-05-01-post-leak-fix-baseline.json | 140 | "Anchored to merge commit that integrates origin/main containing PR #397 (TipTap+Yjs leak fix), PR #408 (perf-harnes | CODE |
| MEDIUM | …kages/app/tests/stress/docs-open-scroll-restore.e2e.ts | 149 | // makes the assertion robust against PM scrollHeight drift across the | COMMENT |
| MEDIUM | …ages/app/tests/stress/outline-toolbar-occlusion.e2e.ts | 370 | // text is robust to that detail; there is exactly one such line in the doc. | COMMENT |
| MEDIUM | packages/app/tests/stress/list-keymap.e2e.ts | 123 | // robust to that mapping and clearer about intent. | COMMENT |
| MEDIUM | packages/app/scripts/measure-stress.sh | 47 | # A run that measured nothing appends nothing: harness crashed before its | COMMENT |
| MEDIUM | packages/app/scripts/measure-stress.sh | 181 | # anything else — not a measurement. Either the harness never reached | COMMENT |
| MEDIUM⚡ | packages/app/scripts/measure-fuzz.sh | 205 | # Optional appended field (newer harness): converged-late count — seeds that | COMMENT |
| MEDIUM⚡ | packages/app/scripts/measure-fuzz.sh | 207 | # passes by the harness; recorded here as a perf signal. | COMMENT |
| MEDIUM⚡ | packages/app/scripts/measure-fuzz.sh | 217 | # anything else — not a measurement: no RESULT line (the harness | COMMENT |
| MEDIUM⚡ | packages/app/scripts/measure-fuzz.sh | 225 | # robust against future field reorderings (within reason — extending the | COMMENT |
| MEDIUM | packages/app/src/components/OutlinePanel.tsx | 129 | // the guard keeps this robust under future layout changes. | COMMENT |
| MEDIUM | packages/app/src/presence/use-presence.test.ts | 228 | // states. Treat falsy values uniformly so the predicate is robust. | COMMENT |
| MEDIUM | packages/app/src/editor/TiptapEditor.tsx | 1287 | // Using index (not slug) keeps this robust to duplicate heading texts without | COMMENT |
| MEDIUM | …kages/app/src/editor/slash-command/component-items.tsx | 465 | // the one just inserted. This is robust whether the cursor lands before | COMMENT |
| MEDIUM | …/src/editor/clipboard/clipboard-line-structure.test.ts | 156 | // Destination-robust oracle: model default HTML whitespace folding | COMMENT |
| MEDIUM | packages/desktop/electron-builder.yml | 103 | # harness-config write routes through its toml_edit addon. Like | COMMENT |
| MEDIUM | packages/desktop/tests/main/url-scheme-handler.test.ts | 2078 | // both so the receiver path stays robust across Electron versions and | COMMENT |
| MEDIUM | packages/server/src/config-file-watcher.ts | 66 | // is the robust pattern: chokidar's directory watch sees `add`, | COMMENT |
| MEDIUM | packages/server/src/apply-managed-rename.ts | 205 | // robust if future passes do). | COMMENT |
| MEDIUM | packages/server/src/api-extension.ts | 17812 | // robust against test-mock `ServerResponse` shapes that don't | COMMENT |
| MEDIUM | packages/server/src/server-factory.test.ts | 1472 | // named marker is robust against future additions of other extensions | COMMENT |
| MEDIUM | …/server/src/mcp/tools/output-schema-strictness.test.ts | 176 | // field to reject. The probe below is robust to this case because it | COMMENT |
| MEDIUM | packages/cli/src/commands/mcp-chain-validation.test.ts | 124 | '# command -v npx suppressed by test harness\n', | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | packages/core/src/handoff/prompt-composer.test.ts | 673 | 'lorem ipsum dolor sit amet '.repeat(2000), | CODE |
| LOW | packages/core/src/handoff/prompt-composer.test.ts | 673 | 'lorem ipsum dolor sit amet '.repeat(2000), | CODE |
| LOW | packages/core/src/handoff/prompt-composer.test.ts | 695 | const hugeSelection = 'lorem ipsum dolor sit amet '.repeat(2000); | CODE |
| LOW | packages/core/src/handoff/prompt-composer.test.ts | 695 | const hugeSelection = 'lorem ipsum dolor sit amet '.repeat(2000); | CODE |
| LOW | packages/core/src/handoff/prompt-composer.test.ts | 719 | const hugeSelection = 'lorem ipsum dolor sit amet '.repeat(2000); | CODE |
| LOW | packages/core/src/handoff/prompt-composer.test.ts | 719 | const hugeSelection = 'lorem ipsum dolor sit amet '.repeat(2000); | CODE |
| LOW | packages/core/src/handoff/prompt-composer.test.ts | 745 | const hugeSelection = 'lorem ipsum dolor sit amet '.repeat(2000); | CODE |
| LOW | packages/core/src/handoff/prompt-composer.test.ts | 745 | const hugeSelection = 'lorem ipsum dolor sit amet '.repeat(2000); | CODE |
| LOW | packages/core/src/handoff/prompt-composer.test.ts | 774 | selectionMarkdown: 'lorem ipsum dolor sit amet '.repeat(2000), | CODE |
| LOW | packages/core/src/handoff/prompt-composer.test.ts | 774 | selectionMarkdown: 'lorem ipsum dolor sit amet '.repeat(2000), | CODE |
| LOW | packages/core/src/handoff/prompt-composer.test.ts | 1300 | const hugeSelection = 'lorem ipsum dolor sit amet '.repeat(2000); | CODE |
| LOW | packages/core/src/handoff/prompt-composer.test.ts | 1300 | const hugeSelection = 'lorem ipsum dolor sit amet '.repeat(2000); | CODE |
| LOW | …ests/integration/conflict-aware-write-surfaces.test.ts | 388 | await execFileAsync('git', ['-C', tmpDir, 'config', 'user.email', 'test@test.com']); | CODE |
| LOW | …ests/integration/conflict-aware-write-surfaces.test.ts | 835 | 'test@test.com', | CODE |
| LOW | packages/app/tests/perf/lib/bundle-check.test.ts | 38 | // Lorem ipsum repeated — compresses well, so gzipped is small. | COMMENT |
| LOW | …kages/app/tests/stress/bridge-convergence.fuzz.test.ts | 226 | const filler = 'lorem ipsum dolor sit amet '.repeat(25000); | CODE |
| LOW | …kages/app/tests/stress/bridge-convergence.fuzz.test.ts | 226 | const filler = 'lorem ipsum dolor sit amet '.repeat(25000); | CODE |
| LOW | …kages/app/tests/stress/command-palette-semantic.e2e.ts | 96 | await expect(cmdkInput(page)).toHaveAttribute('placeholder', 'Search by meaning'); | CODE |
| LOW | packages/app/scripts/audit-strings/extract.ts | 16 | 'placeholder', | CODE |
| LOW | packages/app/src/editor/components/Mirror.tsx | 37 | function StatusFrame(props: { tone: 'placeholder' | 'error'; children: React.ReactNode }) { | CODE |
| LOW | packages/app/src/editor/components/Mirror.tsx | 63 | <StatusFrame tone="placeholder"> | CODE |
| LOW | packages/app/src/editor/components/Mirror.tsx | 76 | <StatusFrame tone="placeholder"> | CODE |
| LOW | …/src/editor/clipboard/clipboard-line-structure.test.ts | 588 | state: EditorState.create({ schema, doc: docFromMarkdown('placeholder') }), | CODE |
| LOW | …/src/editor/clipboard/clipboard-line-structure.test.ts | 685 | const probe = mountView(docFromMarkdown('placeholder')); | CODE |
| LOW⚡ | …ver/src/server-observers-paired-write-baseline.test.ts | 57 | const fixturePayload = '## Section 1\n\nLorem ipsum dolor sit amet.\n'; | CODE |
| LOW⚡ | …ver/src/server-observers-paired-write-baseline.test.ts | 57 | const fixturePayload = '## Section 1\n\nLorem ipsum dolor sit amet.\n'; | CODE |
| LOW | packages/server/src/rename-log.test.ts | 539 | await git.raw('config', 'user.email', 'test@test.com'); | CODE |
| LOW | packages/server/src/rename-log.test.ts | 847 | await git.raw('config', 'user.email', 'test@test.com'); | CODE |
| LOW | packages/server/src/rename-log.test.ts | 1134 | await git.raw('config', 'user.email', 'test@test.com'); | CODE |
| LOW | packages/server/src/shadow-repo.test.ts | 55 | await git.raw('config', 'user.email', 'test@test.com'); | CODE |
| LOW | packages/server/src/shadow-repo.test.ts | 79 | await git.raw('config', 'user.email', 'test@test.com'); | CODE |
| LOW | packages/server/src/shadow-repo.test.ts | 95 | await git.raw('config', 'user.email', 'test@test.com'); | CODE |
| LOW | packages/server/src/shadow-repo.test.ts | 112 | await git.raw('config', 'user.email', 'test@test.com'); | CODE |
| LOW | packages/server/src/shadow-repo.test.ts | 138 | await git.raw('config', 'user.email', 'test@test.com'); | CODE |
| LOW | packages/server/src/shadow-repo.test.ts | 208 | await git.raw('config', 'user.email', 'test@test.com'); | CODE |
| LOW | packages/server/src/shadow-repo.test.ts | 318 | await git.raw('config', 'user.email', 'test@test.com'); | CODE |
| LOW | packages/server/src/shadow-repo.test.ts | 399 | await git.raw('config', 'user.email', 'test@test.com'); | CODE |
| LOW | packages/server/src/shadow-repo.test.ts | 439 | await git.raw('config', 'user.email', 'test@test.com'); | CODE |
| LOW | packages/server/src/shadow-repo.test.ts | 567 | await git.raw('config', 'user.email', 'test@test.com'); | CODE |
| LOW | packages/server/src/shadow-repo.test.ts | 860 | await git.raw('config', 'user.email', 'test@test.com'); | CODE |
| LOW | packages/server/src/shadow-repo.test.ts | 1078 | await git.raw('config', 'user.email', 'test@test.com'); | CODE |
| LOW | packages/server/src/shadow-repo.test.ts | 1360 | await git.raw('config', 'user.email', 'test@test.com'); | CODE |
| LOW | packages/server/src/shadow-repo.test.ts | 1376 | GIT_AUTHOR_EMAIL: 'test@test.com', | CODE |
| LOW | packages/server/src/shadow-repo.test.ts | 1378 | GIT_COMMITTER_EMAIL: 'test@test.com', | CODE |
| LOW | …ges/server/src/server-observers.producer-guard.test.ts | 221 | await git.raw('config', 'user.email', 'test@test.com'); | CODE |
| LOW | …ges/server/src/server-observers.producer-guard.test.ts | 484 | await brokenGit.raw('config', 'user.email', 'test@test.com'); | CODE |
| LOW | packages/server/src/sync-engine.test.ts | 84 | await git.raw('config', 'user.email', 'test@test.com'); | CODE |
| LOW | packages/server/src/sync-engine.test.ts | 257 | await git.raw('config', 'user.email', 'test@test.com'); | CODE |
| LOW | packages/server/src/sync-engine.test.ts | 338 | await git.raw('config', 'user.email', 'test@test.com'); | CODE |
| LOW | packages/server/src/sync-engine.test.ts | 1252 | await git.raw('config', 'user.email', 'test@test.com'); | CODE |
| LOW | packages/server/src/sync-engine.test.ts | 1291 | await git.raw('config', 'user.email', 'test@test.com'); | CODE |
| LOW | packages/server/src/sync-engine.test.ts | 1324 | await git.raw('config', 'user.email', 'test@test.com'); | CODE |
| LOW | packages/server/src/sync-engine.test.ts | 1375 | await git.raw('config', 'user.email', 'test@test.com'); | CODE |
| LOW | packages/server/src/sync-engine.test.ts | 1426 | await git.raw('config', 'user.email', 'test@test.com'); | CODE |
| LOW | packages/server/src/sync-engine.test.ts | 1886 | await git.raw('config', 'user.email', 'test@test.com'); | CODE |
| LOW | packages/server/src/config-persistence.test.ts | 404 | writeFileSync(parentPath, 'placeholder', 'utf-8'); | CODE |
| LOW | packages/server/src/boot.test.ts | 91 | writeFileSync(resolve(contentDir, 'placeholder'), ''); | CODE |
| LOW | packages/server/src/shadow-branch-gc.test.ts | 35 | await git.raw('config', 'user.email', 'test@test.com'); | CODE |
| LOW | packages/server/src/shadow-branch-gc.test.ts | 57 | await git.raw('config', 'user.email', 'test@test.com'); | CODE |
| LOW | packages/server/src/shadow-branch-gc.test.ts | 106 | await git.raw('config', 'user.email', 'test@test.com'); | CODE |
| 19 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | …tests/integration/removal-phantom-resurrection.test.ts | 81 | const ext = server.instance.hocuspocus.configuration.extensions.find( | CODE |
| CRITICAL | packages/app/src/editor/extensions/JsxComponentView.tsx | 516 | const fallbackNode = node.type.schema.nodes.rawMdxFallback.create( | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | packages/app/tests/stress/tabs-component-strip.e2e.ts | 48 | ### Create a new project | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | packages/app/scripts/perf-prod.sh | 10 | # Usage: | COMMENT |