QuickAdd for Obsidian
This report summarizes scanner evidence for chhoumann/quickadd, a TypeScript project with 2,376 GitHub stars. SynthScan examined 238,473 lines of code across 1282 source files, recording 448 pattern matches distributed across 10 syntactic categories. The legacy adjusted pattern signal is 5.2 (Moderate 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.
Can maintainers explain intent, assumptions, and trade-offs? 342 finding(s).
Are imports declared and package/API names verified? 106 finding(s).
Are wrappers, guards, and repeated structures necessary? 285 finding(s).
Which changes need focused human review? 448 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 448 distinct pattern matches across 10 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 |
|---|---|---|---|---|
| CRITICAL | tests/e2e/suggestion-list-width.test.ts | 77 | `(() => { void app.plugins.plugins.quickadd.api.executeChoice(${jsLiteral(capture.name)}).catch(() => {}); return true | CODE |
| CRITICAL | tests/e2e/suggestion-list-width.test.ts | 123 | `(() => { void app.plugins.plugins.quickadd.api.executeChoice(${jsLiteral(template.name)}).catch(() => {}); return tru | CODE |
| CRITICAL | tests/e2e/date-time-prompt-timezone.test.ts | 57 | `(() => { void app.plugins.plugins.quickadd.api.executeChoice(${jsLiteral(capture.name)}).catch(() => {}); return true | CODE |
| CRITICAL | tests/e2e/settings-popout-save.test.ts | 72 | const order = app.plugins.plugins.quickadd.settings.choices.map((choice) => choice.name); | CODE |
| CRITICAL | tests/e2e/prompt-cancellation.test.ts | 149 | app.plugins.plugins.quickadd.api.executeChoice(${name}).then( | CODE |
| CRITICAL | tests/e2e/prompt-cancellation.test.ts | 158 | await obsidian.dev.evalJson(`(() => { void app.plugins.plugins.quickadd.api.executeChoice(${name}); return true; })() | CODE |
| CRITICAL | tests/e2e/prompt-cancellation.test.ts | 229 | await obsidian.dev.evalJson(`(() => { void app.plugins.plugins.quickadd.api.executeChoice(${jsLiteral(macro.name)}); re | CODE |
| CRITICAL | tests/e2e/date-picker-layout.test.ts | 13 | void app.plugins.plugins.quickadd.api.requestInputs([ | CODE |
| CRITICAL | tests/e2e/date-picker-layout.test.ts | 59 | void app.plugins.plugins.quickadd.api.requestInputs([ | CODE |
| CRITICAL | tests/e2e/date-picker-layout.test.ts | 81 | void app.plugins.plugins.quickadd.api.datePrompt('due date').catch(() => undefined); | CODE |
| CRITICAL | tests/e2e/date-picker-layout.test.ts | 118 | void app.plugins.plugins.quickadd.api.requestInputs([ | CODE |
| CRITICAL | tests/e2e/date-picker-layout.test.ts | 128 | void app.plugins.plugins.quickadd.api.datePrompt('due date').catch(() => undefined); | CODE |
| CRITICAL | tests/e2e/date-picker-layout.test.ts | 151 | void app.plugins.plugins.quickadd.api.datePrompt('due date').catch(() => undefined); | CODE |
| CRITICAL | tests/e2e/date-picker-layout.test.ts | 186 | void app.plugins.plugins.quickadd.api.requestInputs([ | CODE |
| CRITICAL | tests/e2e/date-picker-layout.test.ts | 242 | void app.plugins.plugins.quickadd.api.datePrompt('due date').catch(() => undefined); | CODE |
| CRITICAL | tests/e2e/phone-keyboard.test.ts | 53 | app.plugins.plugins.quickadd.api.format("{{VDATE:due,YYYY-MM-DD}}").catch(() => {}); | CODE |
| CRITICAL | tests/e2e/phone-keyboard.test.ts | 70 | app.plugins.plugins.quickadd.api.format("{{VALUE:${OPTIONS}|multi}}").catch(() => {}); | CODE |
| CRITICAL | tests/e2e/ai-prompt-template-picker.test.ts | 37 | void app.plugins.plugins.quickadd.api.executeChoice("AI picker macro").then( | CODE |
| CRITICAL | tests/e2e/package-import-normalize.test.ts | 142 | `app.plugins.plugins.quickadd.settings.choices.find((choice) => choice.id === "qa-e2e-legacy-open")?.fileOpening ?? nu | CODE |
| CRITICAL | tests/e2e/property-capture.test.ts | 54 | await app.plugins.plugins.quickadd.api.executeChoice(${JSON.stringify(choice.name)}, { input: ["old", "a,b", "new", " | CODE |
| CRITICAL | tests/e2e/multi-select-layout.test.ts | 15 | app.plugins.plugins.quickadd.api.format(${jsLiteral(format)}).catch(() => {}); | CODE |
| CRITICAL | tests/e2e/daily-note-token.test.ts | 186 | await obsidian.dev.evalJsonAsync(`app.plugins.plugins.quickadd.api.executeChoice(${JSON.stringify(choice.name)}, { val | CODE |
| CRITICAL | tests/e2e/prompt-draft-clear.test.ts | 38 | `(() => { void app.plugins.plugins.quickadd.api.executeChoice(${jsLiteral(capture.name)}).catch(() => {}); return true | CODE |
| CRITICAL | tests/e2e/multi-select-escape.test.ts | 50 | app.plugins.plugins.quickadd.api.executeChoice(${jsLiteral(capture.name)}) | CODE |
| CRITICAL | tests/e2e/multi-select-escape.test.ts | 66 | ["multi-select picker", `app.plugins.plugins.quickadd.api.format("{{VALUE:Alpha,Beta,Gamma|multi}}")`], | CODE |
| CRITICAL | tests/e2e/multi-select-escape.test.ts | 67 | ["checkbox prompt", `app.plugins.plugins.quickadd.api.checkboxPrompt(["Alpha", "Beta", "Gamma"])`], | CODE |
| CRITICAL | tests/e2e/choice-builder-pages.test.ts | 66 | `app.plugins.plugins.quickadd.settings.choices.find((c) => c.id === ${jsLiteral(id)}) ?? null`, | CODE |
| CRITICAL | tests/e2e/open-note-writes.test.ts | 68 | `await app.plugins.plugins.quickadd.api.executeChoice(${JSON.stringify(choice.name)});`; | CODE |
| CRITICAL⚡ | tests/e2e/open-note-writes.test.ts | 117 | app.workspace.activeLeaf.view.editor.replaceRange("typed ", { line: 3, ch: 0 }); | CODE |
| CRITICAL | tests/e2e/open-note-writes.test.ts | 141 | const original = await getContext().obsidian.dev.evalJson<string>("app.workspace.activeLeaf.view.editor.getValue()"); | CODE |
| CRITICAL | tests/e2e/open-note-writes.test.ts | 160 | app.workspace.activeLeaf.view.editor.replaceRange("typed ", { line: 3, ch: 0 }); | CODE |
| CRITICAL | tests/e2e/open-note-writes.test.ts | 199 | await app.plugins.plugins.quickadd.api.applyTemplateToActiveFile(${JSON.stringify(template)}, { mode: ${JSON.stringif | CODE |
| CRITICAL | tests/e2e/open-note-writes.test.ts | 213 | await app.plugins.plugins.quickadd.api.applyTemplateToActiveFile(${JSON.stringify(template)}, { mode: ${JSON.stringif | CODE |
| CRITICAL | tests/e2e/open-note-writes.test.ts | 224 | app.workspace.activeLeaf.view.editor.replaceRange("typed ", { line: 3, ch: 0 }); | CODE |
| CRITICAL | tests/e2e/open-note-writes.test.ts | 225 | await app.plugins.plugins.quickadd.api.applyTemplateToActiveFile(${JSON.stringify(template)}, { mode: "cursor" }); | CODE |
| CRITICAL | tests/e2e/open-note-writes.test.ts | 238 | app.workspace.activeLeaf.view.editor.replaceRange("My first thought", { line: 0, ch: 0 }); | CODE |
| CRITICAL | tests/e2e/open-note-writes.test.ts | 239 | await app.plugins.plugins.quickadd.api.applyTemplateToActiveFile(${JSON.stringify(template)}); | CODE |
| CRITICAL | tests/e2e/open-note-writes.test.ts | 267 | app.workspace.activeLeaf.view.editor.replaceRange("- b", { line: 2, ch: 0 }); | CODE |
| CRITICAL | tests/e2e/open-note-writes.test.ts | 268 | await app.plugins.plugins.quickadd.api.ai.tools.vault().append_to_note | CODE |
| CRITICAL | tests/e2e/template-folder-typed.test.ts | 39 | `app.plugins.plugins.quickadd.settings.choices.find(c => c.id === ${JSON.stringify(choice.id)})?.folder.folders`, | CODE |
| CRITICAL | tests/e2e/date-prompt-draft.test.ts | 39 | `(() => { void app.plugins.plugins.quickadd.api.executeChoice(${jsLiteral(capture.name)}).catch(() => {}); return true | CODE |
| CRITICAL | tests/e2e/one-page-alignment.test.ts | 17 | void app.plugins.plugins.quickadd.api.requestInputs(inputs).catch(() => undefined); | CODE |
| CRITICAL | tests/e2e/popout-suggestions.test.ts | 20 | void app.plugins.plugins.quickadd.api.inputPrompt("Owner window").then( | CODE |
| CRITICAL | tests/e2e/repeat-capture-drafts.test.ts | 49 | `(() => { void app.plugins.plugins.quickadd.api.executeChoice(${jsLiteral(name)}); return true; })()`, | CODE |
| CRITICAL | tests/e2e/repeat-capture-drafts.test.ts | 107 | `(() => { void app.plugins.plugins.quickadd.api.executeChoice(${jsLiteral(macro.name)}); return true; })()`, | CODE |
| CRITICAL | tests/e2e/one-page-pinned-actions.test.ts | 75 | void app.plugins.plugins.quickadd.api.requestInputs(inputs) | CODE |
| CRITICAL | tests/e2e/one-page-pinned-actions.test.ts | 132 | void app.plugins.plugins.quickadd.api.requestInputs([ | CODE |
| CRITICAL | tests/e2e/one-page-suggester-ranking.test.ts | 20 | window.__qaRankingForm = app.plugins.plugins.quickadd.api.requestInputs(${JSON.stringify([ | CODE |
| CRITICAL | tests/e2e/ai-failure-notices.test.ts | 85 | void app.plugins.plugins.quickadd.api.executeChoice(${JSON.stringify(name)}).then( | CODE |
| CRITICAL | tests/e2e/template-cursor.test.ts | 197 | while (!app.workspace.activeLeaf.view.editor.getValue().includes("[[")) { | CODE |
| CRITICAL | tests/e2e/template-cursor.test.ts | 243 | await obsidian.dev.evalJson("app.workspace.activeLeaf.view.editor.setCursor({line:3,ch:0}); true"); | CODE |
| CRITICAL | tests/e2e/template-cursor.test.ts | 244 | await obsidian.dev.evalJsonAsync(`(async () => { await app.plugins.plugins.quickadd.api.applyTemplateToActiveFile(${JS | CODE |
| CRITICAL | tests/e2e/template-cursor.test.ts | 262 | probe.pending = app.plugins.plugins.quickadd.api.applyTemplateToActiveFile(${JSON.stringify(template)}, { mode: "curs | CODE |
| CRITICAL | tests/e2e/template-cursor.test.ts | 335 | await app.plugins.plugins.quickadd.api.applyTemplateToActiveFile(${JSON.stringify(template)}, { mode: "bottom" }); | CODE |
| CRITICAL | tests/e2e/template-cursor.test.ts | 352 | await app.plugins.plugins.quickadd.api.applyTemplateToActiveFile(${JSON.stringify(template)}, { mode: "cursor" }); | CODE |
| CRITICAL | tests/e2e/capture-cursor.test.ts | 199 | app.workspace.activeLeaf.view.editor.setSelections([ | CODE |
| CRITICAL | tests/e2e/capture-cursor.test.ts | 247 | app.workspace.activeLeaf.view.editor.setSelections([ | CODE |
| CRITICAL | tests/e2e/capture-cursor.test.ts | 279 | app.workspace.activeLeaf.view.editor.setSelections([ | CODE |
| CRITICAL | tests/e2e/capture-cursor.test.ts | 311 | await getContext().obsidian.dev.evalJson("(() => { app.workspace.activeLeaf.view.editor.setCursor({line:0,ch:5}); retu | CODE |
| CRITICAL⚡ | tests/e2e/capture-cursor.test.ts | 325 | await getContext().obsidian.dev.evalJson("(() => { app.workspace.activeLeaf.view.editor.setSelection({line:0,ch:0},{li | CODE |
| 20 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/examplePackages.test.ts | 138 | function expectMacroCommandsWellFormed(choice: IMacroChoice, where: string): void { | CODE |
| LOW | tests/vitest-setup.ts | 23 | export function installObsidianDomHelpers(window: Window): void { | CODE |
| LOW | tests/suggesters/formatSuggesterHarness.ts | 10 | export function ensureObsidianDomPolyfills(): void { | CODE |
| LOW | tests/e2e/file-exists-behavior.test.ts | 101 | function expectSingleFrontmatterBlock(content: string) { | CODE |
| LOW | tests/e2e/file-exists-behavior.test.ts | 115 | async function runChoiceAndWaitForContent(name: string, file: string, expected: string): Promise<string> { | CODE |
| LOW | tests/e2e/macro-member-access.test.ts | 97 | async function runChoiceAndWaitForContent( | CODE |
| LOW | tests/e2e/capture-cursor.test.ts | 81 | async function typeIntoLatestCaptureFormat(text: string) { | CODE |
| LOW | tests/e2e/capture-cursor.test.ts | 115 | async function expectOneNothingToCaptureNotice() { | CODE |
| LOW | tests/e2e/e2eVault.ts | 23 | export function createQuickAddObsidianClient(): ObsidianClient { | CODE |
| LOW | tests/e2e/e2eVault.ts | 36 | export async function acquireQuickAddVaultRunLock( | CODE |
| LOW | tests/helpers/unhandledRejections.ts | 9 | export async function collectUnhandledRejections( | CODE |
| LOW | tests/helpers/formatters/plugin.ts | 3 | export function createSelectionFormatterPlugin(): QuickAdd { | CODE |
| LOW | tests/helpers/formatters/plugin.ts | 14 | export function createCaptureFormatterPlugin(): QuickAdd { | CODE |
| LOW | tests/helpers/preflight/modal.ts | 66 | export function ensureObsidianDomPolyfills(): void { | CODE |
| LOW | docs/public/scripts/citationsManager.js | 89 | function replaceIllegalFileNameCharactersInString(string) { | CODE |
| LOW | docs/public/scripts/movies.js | 133 | function replaceIllegalFileNameCharactersInString(input) { | CODE |
| LOW | docs/public/scripts/BookFinder.js | 62 | function replaceIllegalFileNameCharactersInString(string) { | CODE |
| LOW | docs/public/scripts/EzImport.js | 364 | async function getHighlightsAfterDateForItem(element, date) { | CODE |
| LOW | docs/public/scripts/EzImport.js | 390 | function replaceIllegalFileNameCharactersInString(string) { | CODE |
| LOW | docs/public/scripts/migrateDataviewToFrontmatter.js | 208 | function parseInlineFieldsWithWikilinks(content, allowedProperties = [], migrateAll = false) { | CODE |
| LOW | docs/public/scripts/migrateDataviewToFrontmatter.js | 593 | function parseCommaSeparatedWithWikilinks(value) { | CODE |
| LOW | docs/public/scripts/TodoistScript.js | 127 | function formatTasksToTasksPluginTask(tasks) { | CODE |
| LOW | …/docs/docs/Examples/Macro_MigrateDataviewProperties.md | 273 | function parseCommaSeparatedWithWikilinks(value) { | CODE |
| LOW | src/importCycles.test.ts | 158 | function stronglyConnectedComponents(): Map<string, number> { | CODE |
| LOW | src/types/choiceCommands.ts | 35 | export function shouldRegisterPickDayCommand(input: { | CODE |
| LOW | src/types/linkPlacement.ts | 53 | export function placementSupportsFrontmatter( | CODE |
| LOW | src/types/linkPlacement.ts | 72 | export function placementSupportsSelectionAlias( | CODE |
| LOW | src/types/linkPlacement.ts | 110 | function normalizeAppendLinkDestination( | CODE |
| LOW | src/types/linkPlacement.ts | 190 | export function normalizeAppendLinkOptions(appendLink: boolean | AppendLinkOptions): AppendLinkOptions & { linkType: Lin | CODE |
| LOW | src/template/fileExistsPolicy.ts | 93 | function existingNoteActionDefinition(value: unknown) { | CODE |
| LOW | src/template/fileExistsPolicy.ts | 180 | export function getDefaultBehaviorForCategory( | CODE |
| LOW | src/template/fileExistsPolicy.ts | 198 | export function mapLegacyFileExistsModeToId( | CODE |
| LOW | src/template/fileExistsPolicy.ts | 219 | export async function resolveCreateNewCollisionFilePath( | CODE |
| LOW | src/template/fileExistsPolicy.ts | 227 | export async function resolveIncrementedCollisionPath( | CODE |
| LOW | src/template/fileExistsPolicy.ts | 250 | export async function resolveDuplicateSuffixCollisionPath( | CODE |
| LOW | src/formatters/capture-insert-after-linkcurrent.test.ts | 7 | async function replaceLinkToCurrentFileInString( | CODE |
| LOW | src/formatters/capture-insert-after-linkcurrent.test.ts | 60 | function insertTextAfterPositionInBody(text: string, body: string, pos: number): string { | CODE |
| LOW | src/formatters/capture-insert-after-linkcurrent.test.ts | 117 | function replaceTitleInStringLocal(input: string, title: string): string { | CODE |
| LOW | src/formatters/helpers/inlineScriptSpans.ts | 89 | export function hasUnterminatedInlineScriptFence(input: string): boolean { | CODE |
| LOW⚡ | src/formatters/helpers/previewHelpers.ts | 130 | export function getCurrentFileLinkPreview(activeFile?: {basename: string, path: string} | null): string { | CODE |
| LOW⚡ | src/formatters/helpers/previewHelpers.ts | 139 | export function getCurrentFileLinkToSectionPreview(activeFile?: {basename: string, path: string} | null): string { | CODE |
| LOW⚡ | src/formatters/helpers/previewHelpers.ts | 146 | export function getCurrentFileNamePreview(activeFile?: {basename: string} | null): string { | CODE |
| LOW⚡ | src/formatters/helpers/previewHelpers.ts | 156 | export function getCurrentFolderPathPreview( | CODE |
| LOW | src/formatters/helpers/dateTokens.ts | 27 | export function defaultDateVariableFormat(withTime: boolean): string { | CODE |
| LOW | src/formatters/helpers/dateTokens.ts | 41 | export function rememberDateVariableFormat( | CODE |
| LOW | src/formatters/helpers/dateTokens.ts | 88 | export function snapshotDateVariableFormats( | CODE |
| LOW | src/formatters/helpers/dateTokens.ts | 94 | export function restoreDateVariableFormats( | CODE |
| LOW | src/formatters/helpers/dateTokens.ts | 211 | export async function replaceDateVariableInString(input: string, context: DateVariableContext): Promise<string> { | CODE |
| LOW | src/formatters/helpers/insertionPositioning.ts | 187 | export function shouldSkipBlankLinesAfterMatch( | CODE |
| LOW | src/formatters/helpers/insertionPositioning.ts | 200 | export function findInsertAfterPositionWithBlankLines( | CODE |
| LOW | src/formatters/helpers/insertionPositioning.ts | 230 | export function findInsertAfterPositionAtSectionEnd( | CODE |
| LOW | src/formatters/helpers/insertionPositioning.ts | 314 | export function maskNonBodyHeadingsForSearch( | CODE |
| LOW | src/formatters/helpers/insertionPositioning.ts | 333 | export function insertTextAfterPositionInBody( | CODE |
| LOW | src/formatters/helpers/insertionPositioning.ts | 390 | export function insertTextBeforePositionInBody( | CODE |
| LOW | src/formatters/helpers/sectionLink.ts | 34 | export function sanitizeHeadingForSubpath(heading: string): string { | CODE |
| LOW | src/formatters/helpers/orderedSectionPlacement.ts | 119 | export function computeOrderedSectionInsertIndex( | CODE |
| LOW | src/utils/generatedFilePath.ts | 25 | function collapseControlRunsWithSpaces(value: string): string { | CODE |
| LOW | src/utils/generatedFilePath.ts | 114 | export function describeIllegalFilePathChars(chars: readonly string[]): string { | CODE |
| LOW | src/utils/generatedFilePath.ts | 126 | export function describeIllegalFilePathCharsForRun( | CODE |
| LOW | src/utils/generatedFilePath.ts | 149 | export function normalizeGeneratedFilePath( | CODE |
| 225 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/e2e/conditional-branch-persistence.test.ts | 21 | // (settingsPopoutWindow), so the settings GUI may live in the main document | COMMENT |
| LOW | docs/public/scripts/migrateDataviewToFrontmatter.js | 121 | // Frontmatter property names behave case-insensitively in Obsidian, | COMMENT |
| LOW | docs/public/scripts/migrateDataviewToFrontmatter.js | 241 | // non-fence so a real field after the block still migrates. | COMMENT |
| LOW | docs/public/scripts/migrateDataviewToFrontmatter.js | 321 | // the name region, the line is mid-content (e.g. a code span sits | COMMENT |
| LOW | .github/workflows/release-trigger.yml | 1 | # Caller stub: release trigger (stage 2) for quickadd. | COMMENT |
| LOW | src/constants.ts | 1 | export const VALUE_SYNTAX = "{{value}}"; | COMMENT |
| LOW | src/constants.ts | 41 | ); | COMMENT |
| LOW | src/constants.ts | 61 | // failing. This mirrors FILE_REGEX's `[^\n\r{}]*`; nested tokens inside a | COMMENT |
| LOW | src/constants.ts | 81 | // 1. The comma arm is `,([^\n\r}|]*)`, not `,\s*([^\n\r}|]*)`. The old `\s*` | COMMENT |
| LOW | src/constants.ts | 161 | ); | COMMENT |
| LOW | src/quickAddInstance.ts | 1 | // Dependency-light holder for the active QuickAdd plugin instance. | COMMENT |
| LOW | src/types/linkPlacement.ts | 221 | linkType: "link", | COMMENT |
| LOW | src/formatters/formatDisplayFormatter.ts | 141 | // The depth counter is preview-LOCAL on purpose. At run time | COMMENT |
| LOW | src/formatters/fileNameDisplayFormatter.ts | 101 | // the vault (TemplateChoiceEngine, TemplateInsertEngine, | COMMENT |
| LOW | src/formatters/fileNameDisplayFormatter.ts | 141 | // second, misleading sentence on top of "Template not found". | COMMENT |
| LOW | src/formatters/fileNameDisplayFormatter.ts | 361 | protected async replaceDateVariableInString(input: string): Promise<string> { | COMMENT |
| LOW | src/formatters/previewDiagnostics.ts | 81 | // typed UserCancelError (#1577), and letting it reach that gate would report | COMMENT |
| LOW | src/formatters/formatter.ts | 401 | protected abstract suggestForFile( | COMMENT |
| LOW | src/formatters/helpers/orderedCaptureInsertion.ts | 41 | // CRLF-safe line model: the helper detects headings on \r-stripped lines; | COMMENT |
| LOW | src/formatters/helpers/insertionPositioning.ts | 341 | // frontmatter-aware "top" insertion lives in insertAtNoteBodyStart instead. | COMMENT |
| LOW | src/formatters/helpers/vaultPrompts.ts | 21 | } | COMMENT |
| LOW | src/utils/unhandledRejectionReporter.ts | 141 | // subclass, ChoiceAbortError, is how QuickAdd reports involuntary aborts that | COMMENT |
| LOW | src/utils/InlineFieldParser.ts | 1 | import { splitWikilinkAwareList } from "./splitWikilinkAwareList"; | COMMENT |
| LOW | src/gui/suggesters/utils.ts | 161 | return; | COMMENT |
| LOW | src/gui/suggesters/choiceSuggester.ts | 381 | ): void { | COMMENT |
| LOW | src/gui/choiceList/MultiChoiceListItem.svelte | 81 | // Nested children reordered: write the new order back to this Multi choice (the | COMMENT |
| LOW | src/gui/choiceList/ChoiceList.svelte | 21 | isEmptyFolder = false, | COMMENT |
| LOW | src/gui/choiceList/ChoiceList.svelte | 41 | // writes back to choice.choices mid-drag. | COMMENT |
| LOW | src/gui/choiceList/ChoiceList.svelte | 81 | const isMobile = Platform.isMobile; | COMMENT |
| LOW | src/gui/components/DragHandle.svelte | 1 | <script lang="ts"> | COMMENT |
| LOW | src/gui/MacroGUIs/UserScriptSettingsModal.ts | 341 | const setting = new Setting(this.contentEl).setName(name); | COMMENT |
| LOW | src/gui/MacroGUIs/CommandList.svelte | 41 | saveCommands, | COMMENT |
| LOW | src/gui/MacroGUIs/CommandList.svelte | 81 | // disagreed with the stored macro. | COMMENT |
| LOW | …gui/ChoiceBuilder/components/FormatPreviewField.svelte | 81 | // Never over an error about something OTHER than the path: a pass can fail and | COMMENT |
| LOW | …gui/ChoiceBuilder/components/FormatPreviewField.svelte | 101 | // "Preview:" assert that this IS what you will get. | COMMENT |
| LOW | src/gui/GlobalVariables/GlobalVariablesView.svelte | 21 | const state = settingsStore.getState(); | COMMENT |
| LOW | src/engine/MacroChoiceEngine.ts | 221 | async run(): Promise<void> { | COMMENT |
| LOW | src/engine/MacroChoiceEngine.ts | 261 | COMMENT | |
| LOW | src/engine/TemplateEngine.ts | 201 | // Validate the final path segment, not just the whole string — a | COMMENT |
| LOW | src/engine/TemplateEngine.ts | 281 | resolvedTemplatePath: string | COMMENT |
| LOW | src/services/choiceService.ts | 241 | const isMulti = choice.type === "Multi"; | COMMENT |
| LOW | src/services/packageImportService.ts | 401 | Array.from(preparedChoices.values()), | COMMENT |
| LOW | src/services/packageValidation.ts | 41 | // match (decodeAssetPreview), so two assets at one path could show benign bytes | COMMENT |
| LOW | src/services/packageValidation.ts | 61 | // runOnStartup:true) that actually installs — suppressing the capability | COMMENT |
| LOW | src/preflight/runOnePagePreflight.ts | 161 | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/examplePackages.test.ts | 67 | Multi: ["placeholder"], | CODE |
| LOW | tests/vitest-setup.ts | 85 | for (const key of ["title", "href", "type", "value", "placeholder"] as const) { | CODE |
| LOW | tests/e2e/open-note-writes.test.ts | 23 | const filler = Array.from({ length: Math.ceil(${kb} * 1024 / 58) }, (_, i) => "Line " + i + " lorem ipsum dolor sit am | CODE |
| LOW | tests/e2e/open-note-writes.test.ts | 23 | const filler = Array.from({ length: Math.ceil(${kb} * 1024 / 58) }, (_, i) => "Line " + i + " lorem ipsum dolor sit am | CODE |
| LOW⚡ | tests/e2e/open-note-writes.test.ts | 120 | expect(result.editor.split("\n").slice(0, 5)).toEqual(["# Encounters", "- captured ", "- first", "", "typed Line 0 lor | CODE |
| LOW⚡ | tests/e2e/open-note-writes.test.ts | 120 | expect(result.editor.split("\n").slice(0, 5)).toEqual(["# Encounters", "- captured ", "- first", "", "typed Line 0 lor | CODE |
| LOW | tests/e2e/open-note-writes.test.ts | 173 | expect(targetState.editor.split("\n").slice(0, 5)).toEqual(["# Encounters", "- captured", "- first", "", "typed Line 0 | CODE |
| LOW | tests/e2e/open-note-writes.test.ts | 173 | expect(targetState.editor.split("\n").slice(0, 5)).toEqual(["# Encounters", "- captured", "- first", "", "typed Line 0 | CODE |
| LOW | docs/src/content/docs/docs/QuickAddAPI.md | 160 | "John Doe" | CODE |
| LOW | docs/src/content/docs/docs/QuickAddAPI.md | 457 | { name: "John Doe", email: "john@example.com", company: "ACME" }, | CODE |
| LOW | docs/src/content/docs/docs/TemplatePropertyTypes.md | 77 | QuickAdd.variables.authors = ["John Doe", "Jane Smith", "Bob Wilson"]; | CODE |
| LOW | …/docs/docs/Examples/Macro_MigrateDataviewProperties.md | 151 | Author: "John Doe" | CODE |
| LOW | src/quickAddApi.test.ts | 460 | "placeholder", | CODE |
| LOW | src/quickAddApi.test.ts | 467 | "placeholder", | CODE |
| LOW | src/formatters/displayFormatters-standins.test.ts | 55 | body: "Acme Corp", | CODE |
| LOW | src/formatters/displayFormatters-standins.test.ts | 56 | fileName: "Acme Corp", | CODE |
| LOW | src/formatters/helpers/previewHelpers.ts | 17 | "client": "Acme Corp" | CODE |
| LOW | src/formatters/helpers/getEndOfSection.test.ts | 288 | "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer sit amet commodo mi, nec consequat tellus.", | CODE |
| LOW | src/formatters/helpers/getEndOfSection.test.ts | 288 | "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer sit amet commodo mi, nec consequat tellus.", | CODE |
| LOW | src/formatters/helpers/getEndOfSection.test.ts | 305 | "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer sit amet commodo mi, nec consequat tellus.", | CODE |
| LOW | src/formatters/helpers/getEndOfSection.test.ts | 305 | "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer sit amet commodo mi, nec consequat tellus.", | CODE |
| LOW | src/utils/InlineFieldParser.test.ts | 32 | expected: { "status": ["in-progress"], "priority": ["high"], "assignee": ["John Doe"] }, | CODE |
| LOW | src/gui/suggesters/choiceSuggester.test.ts | 258 | describe("placeholder", () => { | CODE |
| LOW | src/gui/MacroGUIs/UserScriptSettingsModal.ts | 137 | "placeholder" in entry ? entry.placeholder : undefined, | CODE |
| LOW | src/engine/userScriptExecution.test.ts | 87 | const secrets = new Map([["stored-token-id", "fake-token"]]); | CODE |
| LOW | src/engine/userScriptExecution.test.ts | 100 | "Todoist API token": "fake-token", | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | docs/src/content/docs/docs/AIAssistant.md | 240 | ### Max tokens is the context window {#max-tokens} | COMMENT |
| MEDIUM | src/ai/tools/runToolLoop.ts | 239 | // off an in-progress agentic run. A model that simply stopped, a single-turn | COMMENT |
| MEDIUM | src/ai/tools/runToolLoop.audit-cleanup.test.ts | 101 | // agentic budget exhaustion — must stay 'stop'. | COMMENT |
| MEDIUM | src/gui/choiceList/ChoiceView.addRace.test.ts | 90 | // The real handler reads altKey off the click event (Alt = scaffold only). | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | src/logger/consoleErrorLogger.ts | 29 | // Always pass the original error or create a new one to leverage Dev Tools' stack trace UI | COMMENT |
| MEDIUM | src/logger/consoleErrorLogger.ts | 47 | // Always pass the original error or create a new one to leverage Dev Tools' stack trace UI | COMMENT |
| MEDIUM | src/gui/choiceList/AddChoiceControls.svelte | 66 | // and is robust to Svelte 5's event delegation (currentTarget is the | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | docs/src/content/docs/docs/AIAssistant.md | 326 | ### Example: AI-generated note title {#example-ai-generated-note-title} | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docs/src/content/docs/docs/Choices/MacroChoice.md | 45 | ### Step 1: Create the macro choice {#step-1-create-a-macro-choice} | COMMENT |
| LOW | docs/src/content/docs/docs/Choices/MacroChoice.md | 56 | ### Step 2: Build the macro {#step-2-build-your-macro} | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/agent-skill.test.ts | 32 | const example = /## Create a new choice[\s\S]*?```json\r?\n([\s\S]*?)```/.exec(skill)?.[1]; | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .audit/measure-lines.py | 11 | CODE |