Repository Analysis

codexu/note-gen

A cross-platform Markdown AI note-taking software.

2.4 Likely human-written View on GitHub

Analysis Overview

This report presents the forensic synthetic code analysis of codexu/note-gen, a TypeScript project with 12,294 GitHub stars. SynthScan v2.0 examined 161,625 lines of code across 692 source files, recording 372 pattern matches distributed across 4 syntactic categories. The overall adjusted score of 2.4 places this repository in the Likely human-written band.

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

2.4
Adjusted Score
2.4
Raw Score
100%
Time Factor
2026-07-13
Last Push
12.3K
Stars
TypeScript
Language
161.6K
Lines of Code
692
Files
372
Pattern Hits
2026-07-14
Scan Date
0.01
HC Hit Rate

What These Metrics Mean

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

Score History

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

Severity Breakdown

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

CRITICAL 0HIGH 4MEDIUM 1LOW 367

Directory Score Breakdown

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

Pattern Findings

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

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

Hyper-Verbose Identifiers238 hits · 242 pts
SeverityFileLineSnippetContext
LOW…/general/interface-settings/file-manager-text-size.tsx16export function FileManagerTextSizeSettings() {CODE
LOWsrc/app/core/setting/about/updater.tsx278 async function handleRestoreIgnoredVersion() {CODE
LOWsrc/app/core/setting/sync/gitlab-sync.tsx109 async function instanceTypeChangeHandler(value: GitlabInstanceType) {CODE
LOWsrc/app/core/setting/sync/gitea-sync.tsx122 async function instanceTypeChangeHandler(value: GiteaInstanceType) {CODE
LOWsrc/app/core/setting/sync/page.tsx208 async function handleExcludeSensitiveConfigChange(checked: boolean) {CODE
LOWsrc/app/core/main/chat/chat-send.tsx26function getLastDisplayableAgentContent(CODE
LOWsrc/app/core/main/chat/streaming-smoother.ts15export function getAdaptiveCharsPerSecond(backlog: number): number {CODE
LOWsrc/app/core/main/chat/prompt-select.tsx23 async function promptSelectChangeHandler(id: string) {CODE
LOWsrc/app/core/main/chat/chat-input.tsx388 async function buildAttachmentsFromBrowserFiles(files: File[], source: 'file' | 'paste', maxCount: number) {CODE
LOWsrc/app/core/main/chat/chat-input.tsx424 async function buildAttachmentsFromLocalPaths(paths: string[], maxCount: number) {CODE
LOWsrc/app/core/main/chat/agent-approval-actions.ts6export function confirmPendingAgentAction(scope: AgentApprovalScope = "once") {CODE
LOWsrc/app/core/main/file/file-item.tsx43function shouldAutoSyncOnInitialRead(options?: { isNewFile?: boolean }) {CODE
LOWsrc/app/core/main/file/file-actions.tsx24 async function copyMarkdownFilesRecursively(CODE
LOWsrc/app/core/main/file/batch-selection-context-menu.tsx21export function BatchSelectionContextMenu({CODE
LOWsrc/app/core/main/file/file-manager.tsx245 function updateSelectionFromPointer(currentX: number, currentY: number) {CODE
LOWsrc/app/core/main/file/file-manager.tsx391 async function handleDeleteSelectedEntries() {CODE
LOWsrc/app/core/main/file/vector-knowledge-menu.tsx107 async function handleToggleExcludeFromKB(checked: boolean) {CODE
LOWsrc/app/core/main/file/file-selection.ts62export function getTopLevelSelectionEntries(entries: FileSelectionEntry[]) {CODE
LOWsrc/app/core/main/file/file-selection.ts78export function isInteractiveSelectionTarget(target: EventTarget | null) {CODE
LOWsrc/app/core/main/file/file-dnd.ts43export function isInvalidFolderMoveTarget(sourcePath: string, targetDirectoryPath: string) {CODE
LOW…/app/core/main/file/folder-item/delete-folder-utils.ts120export async function collectFolderMarkdownPaths(folderPath: string, item: DirTree) {CODE
LOW…/app/core/main/file/folder-item/delete-folder-utils.ts137export async function deleteVectorDocumentsByPaths(paths: string[]) {CODE
LOW…/app/core/main/file/folder-item/delete-folder-utils.ts152export async function deleteLocalFolderIfExists(folderPath: string) {CODE
LOW…/app/core/main/file/folder-item/delete-folder-utils.ts208async function collectGitRemoteFileEntries(platform: GitSyncPlatform, folderPath: string, repo: string) {CODE
LOWsrc/app/core/main/mark/image-record-status.ts50export function getImageRecordDisplayText(CODE
LOWsrc/app/core/main/mark/organize-notes.tsx65function shouldAutoSyncOnInitialRead(options?: { isNewFile?: boolean }) {CODE
LOWsrc/app/core/main/mark/image-gallery.tsx288 function handleToggleImageGroupSelection() {CODE
LOWsrc/app/core/main/mark/organize-onboarding.ts1export function shouldEmitOrganizeOnboardingComplete({CODE
LOWsrc/app/core/main/mark/control-scan.tsx50function isScreenshotDialogControlTarget(target: EventTarget | null) {CODE
LOWsrc/app/core/main/mark/control-scan.tsx87function setCenteredDefaultCropBox(cropper: Cropper) {CODE
LOWsrc/app/core/main/mark/mark-type-meta.ts54export function getMarkTypeListBadgeClasses(type: Mark["type"], textSize?: string) {CODE
LOWsrc/app/core/main/editor/empty-state-actions.ts1export async function createNewNoteFromEmptyState({CODE
LOWsrc/app/core/main/editor/empty-state-actions.ts19export async function startCreateRecordOnboardingStep({CODE
LOWsrc/app/core/main/editor/empty-state-actions.ts44export function getOnboardingSpotlightTarget(step: 'create-record' | 'organize-note' | 'ai-polish') {CODE
LOWsrc/app/core/main/editor/onboarding-state.ts15export function createDefaultOnboardingProgress(): OnboardingProgress {CODE
LOWsrc/app/core/main/editor/onboarding-state.ts26export function normalizeOnboardingProgress(value: unknown): OnboardingProgress {CODE
LOWsrc/app/core/main/editor/onboarding-state.ts80export function shouldShowOnboardingTasks(progress: OnboardingProgress): boolean {CODE
LOWsrc/app/core/main/editor/onboarding-state.ts84export function getCompletionFeedbackMode(CODE
LOWsrc/app/core/main/editor/markdown/markdown-export.ts256export function getMarkdownExportBaseName(filePath?: string) {CODE
LOWsrc/app/core/main/editor/markdown/markdown-export.ts361function registerHighlightLanguages() {CODE
LOWsrc/app/core/main/editor/markdown/markdown-export.ts436async function resolveMarkdownImageSources(html: string, sourcePath?: string) {CODE
LOWsrc/app/core/main/editor/markdown/markdown-export.ts459function sanitizeExportElementAttributes(root: DocumentFragment | Element) {CODE
LOW…p/core/main/editor/markdown/ai-suggestion-highlight.ts62export function clearAiSuggestionHighlight(editor: Editor) {CODE
LOWsrc/app/core/main/editor/markdown/quote-session.ts3export function shouldRestorePendingQuote(CODE
LOWsrc/app/core/main/editor/markdown/markdown-paragraph.ts19export function normalizeMarkdownPlaceholders(markdown: string): string {CODE
LOW…p/core/main/editor/markdown/ai-suggestion-floating.tsx35function calculateFloatingPosition(CODE
LOWsrc/app/core/main/editor/markdown/bubble-menu.tsx78function isKeyboardSelectionIntent(event: KeyboardEvent): boolean {CODE
LOWsrc/app/core/main/editor/markdown/image-src.ts17export function shouldTransformImageSrcToWorkspaceAsset(src: string | null | undefined): boolean {CODE
LOWsrc/app/core/main/editor/markdown/tiptap-editor.tsx169function getEditorBlockDropIndicatorTop(editor: CoreEditor, pos: number, fallbackTop: number) {CODE
LOWsrc/app/core/main/editor/markdown/tiptap-editor.tsx197function clearEditorNativeDropCursor(editor: CoreEditor) {CODE
LOWsrc/app/core/main/editor/markdown/tiptap-editor.tsx207function getDroppedMarkImageMimeType(fileName: string) {CODE
LOWsrc/app/core/main/editor/markdown/tiptap-editor.tsx217function isEditorAiGenerationAction(action: unknown): action is EditorAiGenerationAction {CODE
LOWsrc/app/core/main/editor/markdown/tiptap-editor.tsx328function normalizeWorkspacePathSegments(path: string): string[] {CODE
LOWsrc/app/core/main/editor/markdown/tiptap-editor.tsx438async function getWorkspaceRelativePathForAbsolutePath(path: string): Promise<string | null> {CODE
LOWsrc/app/core/main/editor/markdown/tiptap-editor.tsx450async function getMarkdownHrefForDroppedPath(path: string, currentFilePath: string): Promise<string> {CODE
LOWsrc/app/core/main/editor/markdown/tiptap-editor.tsx466async function createMarkdownLinksForDroppedPaths(files: DroppedFileLink[], currentFilePath: string): Promise<string[]> CODE
LOWsrc/app/core/main/editor/markdown/tiptap-editor.tsx475function getFileUrlsFromDataTransfer(dataTransfer: DataTransfer): string[] {CODE
LOWsrc/app/core/main/editor/markdown/tiptap-editor.tsx496async function getDroppedFileMarkdownLinks(dataTransfer: DataTransfer, currentFilePath: string): Promise<string[]> {CODE
LOWsrc/app/core/main/editor/markdown/tiptap-editor.tsx562async function openLocalPathWithDefaultApp(path: string) {CODE
LOWsrc/app/core/main/editor/markdown/tiptap-editor.tsx592function getImageDimensionFromElement(element: HTMLElement, name: 'width' | 'height'): number | null {CODE
178 more matches not shown…
Fake / Example Data129 hits · 124 pts
SeverityFileLineSnippetContext
LOWmessages/zh.json2134 "placeholder": "搜索 AI 模型",CODE
LOWmessages/zh.json2139 "placeholder": "搜索 Prompt"CODE
LOWmessages/zh.json2145 "placeholder": "搜索语言"CODE
LOWmessages/zh.json45 "placeholder": "选择缩放比例"CODE
LOWmessages/zh.json62 "placeholder": "选择字体",CODE
LOWmessages/zh.json83 "placeholder": "在此输入自定义 CSS 代码。",CODE
LOWmessages/zh.json103 "placeholder": "点击生成按钮将当前配色导出为代码"CODE
LOWmessages/zh.json108 "placeholder": "粘贴配色方案的 JSON 代码"CODE
LOWmessages/zh.json426 "placeholder": "输入 Mermaid 图表代码...",CODE
LOWmessages/zh.json520 "placeholder": "输入 Agent 的身份定义、工具调用约束和 Core Rules。",CODE
LOWmessages/zh.json582 "placeholder": "请选择或搜索模型",CODE
LOWmessages/zh.json593 "placeholder": {CODE
LOWmessages/zh.json923 "placeholder": "选择自动同步时间",CODE
LOWmessages/zh.json977 "placeholder": "输入 S.EE API Token"CODE
LOWmessages/zh.json1201 "placeholder": "使用主模型"CODE
LOWmessages/zh.json1223 "placeholder": "输入自定义提示词...",CODE
LOWmessages/zh.json1876 "placeholder": {CODE
LOWmessages/zh.json2102 "placeholder": {CODE
LOWmessages/zh.json2412 "placeholder": "输入标签名称"CODE
LOWmessages/zh.json2416 "placeholder": "搜索笔记和文章...",CODE
LOWmessages/zh.json2791 "placeholder": "在文档中查找",CODE
LOWmessages/zh.json3036 "placeholder": "输入 / 唤起菜单,或直接开始写作...",CODE
LOWmessages/zh.json3138 "placeholder": "输入 Mermaid 图表代码...",CODE
LOWmessages/zh.json3244 "placeholder": "输入 AI 指令",CODE
LOWmessages/ja.json2091 "placeholder": "AIモデルを検索",CODE
LOWmessages/ja.json2096 "placeholder": "プロンプトを検索"CODE
LOWmessages/ja.json2104 "placeholder": "言語を検索"CODE
LOWmessages/ja.json45 "placeholder": "スケール比率を選択"CODE
LOWmessages/ja.json62 "placeholder": "フォントを選択",CODE
LOWmessages/ja.json83 "placeholder": "ここにカスタム CSS コードを入力",CODE
LOWmessages/ja.json109 "placeholder": "点击生成按钮将当前配色导出为代码"CODE
LOWmessages/ja.json114 "placeholder": "粘贴配色方案的 JSON 代码"CODE
LOWmessages/ja.json372 "placeholder": "Mermaid диаграммаコードを入力...",CODE
LOWmessages/ja.json466 "placeholder": "Agent の身分定義、ツール呼び出し制約、Core Rules を入力してください。",CODE
LOWmessages/ja.json528 "placeholder": "モデルを選択または検索してください",CODE
LOWmessages/ja.json538 "placeholder": {CODE
LOWmessages/ja.json782 "placeholder": "自動同期時間",CODE
LOWmessages/ja.json891 "placeholder": "S.EE API Token を入力"CODE
LOWmessages/ja.json1116 "placeholder": "メインモデルを使用"CODE
LOWmessages/ja.json1138 "placeholder": "カスタムプロンプトを入力...",CODE
LOWmessages/ja.json1867 "placeholder": {CODE
LOWmessages/ja.json2060 "placeholder": {CODE
LOWmessages/ja.json2322 "placeholder": "入力するタグ名"CODE
LOWmessages/ja.json2413 "placeholder": "ノートと記事を検索...",CODE
LOWmessages/ja.json2711 "placeholder": "ドキュメント内を検索",CODE
LOWmessages/ja.json2948 "placeholder": "「/」を入力してメニューを開くか、直接書き始める...",CODE
LOWmessages/ja.json3050 "placeholder": "Mermaid диаграммаコードを入力...",CODE
LOWmessages/ja.json3156 "placeholder": "AI 指示を入力",CODE
LOWmessages/en.json2216 "placeholder": "Search AI models",CODE
LOWmessages/en.json2221 "placeholder": "Search prompts"CODE
LOWmessages/en.json2230 "placeholder": "Search language"CODE
LOWmessages/en.json45 "placeholder": "Select scale ratio"CODE
LOWmessages/en.json62 "placeholder": "Select font",CODE
LOWmessages/en.json83 "placeholder": "Enter custom CSS code here",CODE
LOWmessages/en.json103 "placeholder": "Click the generate button to export current color scheme as code"CODE
LOWmessages/en.json108 "placeholder": "Paste the JSON code of the color scheme"CODE
LOWmessages/en.json426 "placeholder": "Enter Mermaid diagram code...",CODE
LOWmessages/en.json651 "placeholder": "Please select or search for models",CODE
LOWmessages/en.json661 "placeholder": {CODE
LOWmessages/en.json762 "placeholder": "Enter the Agent identity, tool-call constraints, and Core Rules.",CODE
69 more matches not shown…
Synthetic Comment Markers4 hits · 25 pts
SeverityFileLineSnippetContext
HIGHmessages/en.json1924 "description": "The current note is generated by AI and cannot be edited. Convert the current note to an artCODE
HIGHmessages/en.json2111 "description": "The current note is generated by AI and cannot be edited. Convert the current note to an articleCODE
HIGHsrc/app/core/main/mark/organize-notes.tsx598 // Skip sync for AI-generated contentCOMMENT
HIGHsrc/app/core/main/editor/markdown/md-editor-wrapper.tsx115 // Check if this file is currently being generated by AICOMMENT
AI Slop Vocabulary1 hit · 3 pts
SeverityFileLineSnippetContext
MEDIUMsrc/app/core/main/editor/markdown/tiptap-editor.tsx4360 // Try to find searchContent in the document using a more robust methodCOMMENT