Capture first. Organize later. A local-first Markdown app that turns scattered records into clear notes with AI.
This report summarizes scanner evidence for codexu/note-gen, a TypeScript project with 12,958 GitHub stars. SynthScan examined 336,130 lines of code across 1187 source files, recording 1067 pattern matches distributed across 5 syntactic categories. The legacy adjusted pattern signal is 3.1 (Low pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.
Can maintainers explain intent, assumptions, and trade-offs? 880 finding(s).
Are imports declared and package/API names verified? 187 finding(s).
Are wrappers, guards, and repeated structures necessary? 875 finding(s).
Which changes need focused human review? 1067 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 1067 distinct pattern matches across 5 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. 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 configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …/app/core/setting/general/system-behavior-settings.tsx | 86 | async function handleAutostartMinimizedChange(enabled: boolean) { | CODE |
| LOW | …/general/interface-settings/file-manager-text-size.tsx | 16 | export function FileManagerTextSizeSettings() { | CODE |
| LOW | src/app/core/setting/plugins/installed-plugins-tab.tsx | 241 | function hasReviewedCurrentManifest(plugin: InstalledPlugin, workspaceState?: PluginWorkspaceState): boolean { | CODE |
| LOW⚡ | src/app/core/setting/plugins/plugin-display.ts | 111 | export function isWorkspacePathPermissionScope(scope: string): boolean { | CODE |
| LOW⚡ | src/app/core/setting/plugins/plugin-display.ts | 117 | export function isNetworkOriginPermissionScope(scope: string): boolean { | CODE |
| LOW⚡ | src/app/core/setting/plugins/plugin-display.ts | 121 | export function isSafePluginNetworkOrigin(value: string): boolean { | CODE |
| LOW | src/app/core/setting/plugins/plugin-display.ts | 136 | export function normalizeRelativePluginPath(value: string): string { | CODE |
| LOW | src/app/core/setting/plugins/developer-tab.tsx | 117 | async function chooseDevelopmentDirectory() { | CODE |
| LOW | src/app/core/setting/about/updater.tsx | 285 | async function handleRestoreIgnoredVersion() { | CODE |
| LOW | src/app/core/setting/rag/settings.tsx | 271 | async function restoreDefaultExcludedPaths() { | CODE |
| LOW | src/app/core/setting/components/setting-base.tsx | 47 | export function MobileSettingActionOutlet() { | CODE |
| LOW | src/app/core/setting/ai/page.tsx | 34 | function getPlatformAvatarFallback(config: AiConfig) { | CODE |
| LOW | src/app/core/setting/ai/page.tsx | 40 | function getCustomPlatformAvatarStyle(config: AiConfig) { | CODE |
| LOW | …skills/components/recommended-skill-install-dialog.tsx | 36 | export function RecommendedSkillInstallDialog({ skill, onClose }: RecommendedSkillInstallDialogProps) { | CODE |
| LOW | …ore/setting/sync/self-hosted-personal-data-options.tsx | 17 | export function SelfHostedPersonalDataOptions() { | CODE |
| LOW | src/app/core/setting/sync/self-hosted-sync.tsx | 258 | async function acknowledgeExperimentalRisk() { | CODE |
| LOW | src/app/core/setting/sync/page.tsx | 189 | async function handleWorkspaceRepoChange(workspacePath: string, repoPlatform: SyncRepoPlatform, repo: string) { | CODE |
| LOW | src/app/core/setting/sync/page.tsx | 287 | async function handleExcludeSensitiveConfigChange(checked: boolean) { | CODE |
| LOW | …ore/setting/sync/components/workspace-repo-mapping.tsx | 218 | function resolveRepositoryConfirmation(accepted: boolean) { | CODE |
| LOW | …ore/setting/sync/components/workspace-repo-mapping.tsx | 261 | function handleRepositoryPickerChange(workspacePath: string, open: boolean) { | CODE |
| LOW | …ore/setting/sync/components/workspace-repo-mapping.tsx | 300 | async function resolveDefaultWorkspacePath() { | CODE |
| LOW | …ore/setting/sync/components/workspace-repo-mapping.tsx | 522 | function updateCurrentPlatformState(state: SyncStateEnum) { | CODE |
| LOW | src/app/core/main/chat/chat-send.tsx | 62 | function resolveRecordedApprovalEvent(event: AgentTraceEvent, records: ConfirmationRecord[]): AgentTraceEvent { | CODE |
| LOW | src/app/core/main/chat/chat-send.tsx | 75 | function getLastDisplayableAgentContent( | CODE |
| LOW | src/app/core/main/chat/streaming-smoother.ts | 15 | export function getAdaptiveCharsPerSecond(backlog: number): number { | CODE |
| LOW | src/app/core/main/chat/agent-run-timeline.tsx | 148 | function hasRecordedQuestionAnswers(event: AgentTraceEvent) { | CODE |
| LOW | src/app/core/main/chat/prompt-select.tsx | 29 | async function promptSelectChangeHandler(id: string) { | CODE |
| LOW | src/app/core/main/chat/agent-session-context.ts | 71 | export function getContextualArticleSnapshot(articleState: { | CODE |
| LOW | src/app/core/main/chat/agent-session-context.ts | 83 | export function buildCanvasSelectionContext(context: CanvasSelectionContext | null) { | CODE |
| LOW | src/app/core/main/chat/agent-session-context.ts | 164 | export async function buildAgentSteeringContext(request: AgentRequestSnapshot, isMobile: boolean) { | CODE |
| LOW | src/app/core/main/chat/agent-permission-mode.tsx | 23 | export function AgentPermissionModeSelect() { | CODE |
| LOW | src/app/core/main/chat/chat-input.tsx | 747 | function removeLastComposerContext(): boolean { | CODE |
| LOW | src/app/core/main/chat/chat-input.tsx | 896 | async function buildAttachmentsFromBrowserFiles(files: File[], source: 'file' | 'paste', maxCount: number) { | CODE |
| LOW | src/app/core/main/chat/chat-input.tsx | 932 | async function buildAttachmentsFromLocalPaths(paths: string[], maxCount: number) { | CODE |
| LOW | src/app/core/main/chat/agent-approval-actions.ts | 8 | function getActionableConfirmation(expectedId?: string) { | CODE |
| LOW | src/app/core/main/chat/agent-approval-actions.ts | 23 | export function confirmPendingAgentAction(scope: AgentApprovalScope = "once", expectedId?: string) { | CODE |
| LOW | src/app/core/main/file/file-tree-action-policy.ts | 43 | export function buildFileTreeSyncStatusMap(tree: DirTree[]) { | CODE |
| LOW | src/app/core/main/file/file-item.tsx | 52 | function shouldAutoSyncOnInitialRead(options?: { isNewFile?: boolean }) { | CODE |
| LOW | src/app/core/main/file/use-markdown-import.ts | 22 | function markdownNameFromDocumentName(fileName: string) { | CODE |
| LOW | src/app/core/main/file/use-markdown-import.ts | 42 | async function copyMarkdownFilesRecursively( | CODE |
| LOW | src/app/core/main/file/batch-selection-context-menu.tsx | 28 | export function BatchSelectionContextMenu({ | CODE |
| LOW | src/app/core/main/file/file-more-menu.tsx | 223 | async function handleUploadKnowledgeBase() { | CODE |
| LOW | src/app/core/main/file/file-more-menu.tsx | 245 | async function handleDownloadKnowledgeBase() { | CODE |
| LOW | src/app/core/main/file/file-tree-model.ts | 49 | export function filterFileTreeByVisibility( | CODE |
| LOW | src/app/core/main/file/file-manager.tsx | 86 | function prioritizeLocalSearchResults(tree: DirTree[]): DirTree[] { | CODE |
| LOW | src/app/core/main/file/file-manager.tsx | 291 | function updateSelectionFromPointer(currentX: number, currentY: number) { | CODE |
| LOW | src/app/core/main/file/file-manager.tsx | 418 | async function handleDeleteSelectedEntries() { | CODE |
| LOW | src/app/core/main/file/cloud-library-menu.tsx | 142 | async function handleUploadKnowledgeBase() { | CODE |
| LOW | src/app/core/main/file/cloud-library-menu.tsx | 168 | async function handleDownloadKnowledgeBase() { | CODE |
| LOW | src/app/core/main/file/use-workspace-file-watcher.ts | 41 | function toWorkspaceRelativeWatchPath(path: string, normalizedRoot: string): string { | CODE |
| LOW | src/app/core/main/file/vector-knowledge-menu.tsx | 109 | async function handleToggleExcludeFromKB(checked: boolean) { | CODE |
| LOW | src/app/core/main/file/file-selection.ts | 78 | export function getTopLevelSelectionEntries(entries: FileSelectionEntry[]) { | CODE |
| LOW | src/app/core/main/file/file-selection.ts | 126 | export function isInteractiveSelectionTarget(target: EventTarget | null) { | CODE |
| LOW | src/app/core/main/file/file-dnd.ts | 57 | export function isInvalidFolderMoveTarget(sourcePath: string, targetDirectoryPath: string) { | CODE |
| LOW | src/app/core/main/file/system-trash.ts | 9 | async function resolveExistingAbsolutePath(relativePath: string, workspaceRoot?: string) { | CODE |
| LOW | …/app/core/main/file/folder-item/delete-folder-utils.ts | 95 | export async function collectFolderMarkdownPaths(folderPath: string, item: DirTree) { | CODE |
| LOW | …/app/core/main/file/folder-item/delete-folder-utils.ts | 112 | export async function deleteVectorDocumentsByPaths(paths: string[], folderPath?: string) { | CODE |
| LOW | …/app/core/main/file/folder-item/delete-folder-utils.ts | 131 | export async function deleteLocalFolderIfExists(folderPath: string) { | CODE |
| LOW | …/app/core/main/file/folder-item/delete-folder-utils.ts | 246 | async function collectGitRemoteFileEntries(platform: GitSyncPlatform, folderPath: string, repo: string) { | CODE |
| LOW | src/app/core/main/mark/image-record-status.ts | 50 | export function getImageRecordDisplayText( | CODE |
| 815 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | messages/zh.json | 205 | "placeholder": "选择缩放比例" | CODE |
| LOW | messages/zh.json | 222 | "placeholder": "选择字体", | CODE |
| LOW | messages/zh.json | 243 | "placeholder": "在此输入自定义 CSS 代码。", | CODE |
| LOW | messages/zh.json | 265 | "placeholder": "点击生成按钮将当前配色导出为代码" | CODE |
| LOW | messages/zh.json | 270 | "placeholder": "粘贴配色方案的 JSON 代码" | CODE |
| LOW | messages/zh.json | 860 | "placeholder": "搜索插件命令...", | CODE |
| LOW | messages/zh.json | 1283 | "placeholder": "输入 Mermaid 图表代码...", | CODE |
| LOW | messages/zh.json | 1504 | "placeholder": "例如:默认使用简洁中文回答。留空则只使用系统核心规则。", | CODE |
| LOW | messages/zh.json | 1643 | "placeholder": "请选择或搜索模型", | CODE |
| LOW | messages/zh.json | 1654 | "placeholder": { | CODE |
| LOW | messages/zh.json | 2387 | "placeholder": "选择自动同步时间", | CODE |
| LOW | messages/zh.json | 2772 | "placeholder": "输入 S.EE API Token" | CODE |
| LOW | messages/zh.json | 3244 | "placeholder": "使用主模型" | CODE |
| LOW | messages/zh.json | 4035 | "placeholder": { | CODE |
| LOW | messages/zh.json | 4277 | "placeholder": { | CODE |
| LOW | messages/zh.json | 4310 | "placeholder": "搜索 AI 模型", | CODE |
| LOW | messages/zh.json | 4321 | "placeholder": "搜索 Prompt" | CODE |
| LOW | messages/zh.json | 4327 | "placeholder": "搜索语言" | CODE |
| LOW | messages/zh.json | 4696 | "placeholder": "搜索指令...", | CODE |
| LOW | messages/zh.json | 4741 | "placeholder": "搜索文件、文件夹、记录或画布...", | CODE |
| LOW | messages/zh.json | 4948 | "placeholder": "输入标签名称" | CODE |
| LOW | messages/zh.json | 4952 | "placeholder": "搜索笔记、记录和画布...", | CODE |
| LOW | messages/zh.json | 5185 | "placeholder": "选择笔记", | CODE |
| LOW | messages/zh.json | 5589 | "placeholder": "搜索文件...", | CODE |
| LOW | messages/zh.json | 5860 | "placeholder": "在文档中查找", | CODE |
| LOW | messages/zh.json | 6151 | "placeholder": "输入 / 唤起菜单,或直接开始写作...", | CODE |
| LOW | messages/zh.json | 6334 | "placeholder": "输入 Mermaid 图表代码...", | CODE |
| LOW | messages/zh.json | 6440 | "placeholder": "输入 AI 指令", | CODE |
| LOW | messages/ja.json | 205 | "placeholder": "スケール比率を選択" | CODE |
| LOW | messages/ja.json | 222 | "placeholder": "フォントを選択", | CODE |
| LOW | messages/ja.json | 243 | "placeholder": "ここにカスタム CSS コードを入力", | CODE |
| LOW | messages/ja.json | 271 | "placeholder": "点击生成按钮将当前配色导出为代码" | CODE |
| LOW | messages/ja.json | 276 | "placeholder": "粘贴配色方案的 JSON 代码" | CODE |
| LOW | messages/ja.json | 786 | "placeholder": "Mermaid диаграммаコードを入力...", | CODE |
| LOW | messages/ja.json | 1007 | "placeholder": "例:既定では簡潔な日本語で回答する。空欄の場合はコアルールのみを使用します。", | CODE |
| LOW | messages/ja.json | 1146 | "placeholder": "モデルを選択または検索してください", | CODE |
| LOW | messages/ja.json | 1156 | "placeholder": { | CODE |
| LOW | messages/ja.json | 1693 | "placeholder": "自動同期時間", | CODE |
| LOW | messages/ja.json | 2243 | "placeholder": "S.EE API Token を入力" | CODE |
| LOW | messages/ja.json | 2643 | "placeholder": "メインモデルを使用" | CODE |
| LOW | messages/ja.json | 3381 | "placeholder": "プラグインのコマンドを検索...", | CODE |
| LOW | messages/ja.json | 4021 | "placeholder": { | CODE |
| LOW | messages/ja.json | 4235 | "placeholder": { | CODE |
| LOW | messages/ja.json | 4267 | "placeholder": "AIモデルを検索", | CODE |
| LOW | messages/ja.json | 4278 | "placeholder": "プロンプトを検索" | CODE |
| LOW | messages/ja.json | 4286 | "placeholder": "言語を検索" | CODE |
| LOW | messages/ja.json | 4599 | "placeholder": "コマンドを検索...", | CODE |
| LOW | messages/ja.json | 4644 | "placeholder": "ファイル、フォルダー、記録、キャンバスを検索...", | CODE |
| LOW | messages/ja.json | 4855 | "placeholder": "入力するタグ名" | CODE |
| LOW | messages/ja.json | 5073 | "placeholder": "ノートを選択", | CODE |
| LOW | messages/ja.json | 5324 | "placeholder": "ノート、記録、キャンバスを検索...", | CODE |
| LOW | messages/ja.json | 5506 | "placeholder": "ファイルを検索...", | CODE |
| LOW | messages/ja.json | 5777 | "placeholder": "ドキュメント内を検索", | CODE |
| LOW | messages/ja.json | 6060 | "placeholder": "「/」を入力してメニューを開くか、直接書き始める...", | CODE |
| LOW | messages/ja.json | 6243 | "placeholder": "Mermaid диаграммаコードを入力...", | CODE |
| LOW | messages/ja.json | 6349 | "placeholder": "AI 指示を入力", | CODE |
| LOW | messages/de.json | 205 | "placeholder": "Skalierungsverhältnis auswählen" | CODE |
| LOW | messages/de.json | 222 | "placeholder": "Schriftart auswählen", | CODE |
| LOW | messages/de.json | 243 | "placeholder": "Eigenen CSS-Code hier eingeben", | CODE |
| LOW | messages/de.json | 265 | "placeholder": "Klicke auf Generieren, um das aktuelle Farbschema als Code zu exportieren" | CODE |
| 127 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | messages/en.json | 4083 | "description": "The current note is generated by AI and cannot be edited. Convert the current note to an art | CODE |
| HIGH | messages/en.json | 4283 | "description": "The current note is generated by AI and cannot be edited. Convert the current note to an article | CODE |
| HIGH | src/app/core/main/editor/markdown/md-editor-wrapper.tsx | 183 | // Check if this file is currently being generated by AI | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | src/app/core/main/editor/markdown/tiptap-editor.tsx | 7324 | // Try to find searchContent in the document using a more robust method | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …c/app/core/main/editor/markdown/code-block-markdown.ts | 1 | // Markdown round-trip handlers for fenced code blocks. | COMMENT |