This report presents the forensic synthetic code analysis of vrtmrz/obsidian-livesync, a TypeScript project with 12,170 GitHub stars. SynthScan v2.0 examined 171,718 lines of code across 742 source files, recording 391 pattern matches distributed across 11 syntactic categories. The overall adjusted score of 5.5 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 391 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 |
|---|---|---|---|---|
| CRITICAL⚡ | test/e2e-obsidian/scripts/hidden-file-snippet-sync.ts | 553 | plugin.core.services.context.noticeGroups.hide("hidden-file-changes"); | CODE |
| CRITICAL | src/main.ts | 214 | const onReady = this.core.services.control.onReady.bind(this.core.services.control); | CODE |
| CRITICAL | src/features/HiddenFileSync/CmdHiddenFileSync.ts | 101 | return this.core.localDatabase.managers.conflictManager.getConflictedDoc(path, rev); | CODE |
| CRITICAL | src/serviceFeatures/useReviewHarness.ts | 24 | (await plugin.core.services.UI.confirm.askYesNoDialog( | CODE |
| CRITICAL⚡ | src/serviceFeatures/redFlag.unit.spec.ts | 1662 | host.mocks.ui.confirm.confirmWithMessage.mockResolvedValueOnce(SIMPLE_FETCH_STAGE1_DETAILED); | CODE |
| CRITICAL⚡ | src/serviceFeatures/redFlag.unit.spec.ts | 1663 | host.mocks.ui.dialogManager.openWithExplicitCancel.mockResolvedValueOnce({ | CODE |
| CRITICAL⚡ | src/serviceFeatures/redFlag.unit.spec.ts | 1671 | host.mocks.ui.confirm.askSelectStringDialogue.mockResolvedValueOnce("Cancel"); | CODE |
| CRITICAL | src/serviceFeatures/redFlag.unit.spec.ts | 488 | host.mocks.ui.confirm.confirmWithMessage.mockResolvedValueOnce(SIMPLE_FETCH_STAGE1_DETAILED); | CODE |
| CRITICAL | src/serviceFeatures/redFlag.unit.spec.ts | 489 | host.mocks.ui.dialogManager.openWithExplicitCancel.mockResolvedValueOnce({ | CODE |
| CRITICAL | src/serviceFeatures/redFlag.unit.spec.ts | 510 | host.mocks.ui.confirm.confirmWithMessage.mockResolvedValueOnce(false); | CODE |
| CRITICAL | src/serviceFeatures/redFlag.unit.spec.ts | 554 | host.mocks.ui.confirm.askSelectStringDialogue.mockResolvedValueOnce("Use active remote"); | CODE |
| CRITICAL | src/serviceFeatures/redFlag.unit.spec.ts | 555 | host.mocks.ui.confirm.confirmWithMessage.mockResolvedValueOnce(false); | CODE |
| CRITICAL | src/serviceFeatures/redFlag.unit.spec.ts | 577 | host.mocks.ui.confirm.askSelectStringDialogue.mockResolvedValueOnce("Cancel"); | CODE |
| CRITICAL | src/serviceFeatures/redFlag.unit.spec.ts | 615 | host.mocks.ui.confirm.askSelectStringDialogue.mockImplementationOnce( | CODE |
| CRITICAL | src/serviceFeatures/redFlag.unit.spec.ts | 618 | host.mocks.ui.confirm.confirmWithMessage.mockResolvedValueOnce(false); | CODE |
| CRITICAL | src/serviceFeatures/redFlag.unit.spec.ts | 641 | host.mocks.ui.confirm.askSelectStringDialogue.mockResolvedValueOnce("Unknown option"); | CODE |
| CRITICAL | src/serviceFeatures/redFlag.unit.spec.ts | 661 | host.mocks.ui.confirm.askSelectStringDialogue.mockImplementationOnce( | CODE |
| CRITICAL | src/serviceFeatures/redFlag.unit.spec.ts | 677 | host.mocks.ui.confirm.confirmWithMessage.mockResolvedValueOnce(false); | CODE |
| CRITICAL | src/serviceFeatures/redFlag.unit.spec.ts | 684 | host.mocks.ui.confirm.confirmWithMessage.mockResolvedValueOnce(SIMPLE_FETCH_STAGE1_DETAILED); | CODE |
| CRITICAL | src/serviceFeatures/redFlag.unit.spec.ts | 883 | host.mocks.ui.confirm.confirmWithMessage.mockResolvedValueOnce(false); | CODE |
| CRITICAL | src/serviceFeatures/redFlag.unit.spec.ts | 913 | host.mocks.ui.confirm.confirmWithMessage.mockResolvedValueOnce(SIMPLE_FETCH_STAGE1_DETAILED); | CODE |
| CRITICAL | src/serviceFeatures/redFlag.unit.spec.ts | 941 | host.mocks.ui.confirm.askSelectStringDialogue.mockResolvedValueOnce("Cancel"); | CODE |
| CRITICAL | src/serviceFeatures/redFlag.unit.spec.ts | 992 | host.mocks.ui.confirm.askSelectStringDialogue.mockResolvedValueOnce("Reboot to re-run the process"); | CODE |
| CRITICAL | src/serviceFeatures/redFlag.unit.spec.ts | 1014 | host.mocks.ui.confirm.askSelectStringDialogue.mockResolvedValueOnce( | CODE |
| CRITICAL | src/serviceFeatures/redFlag.unit.spec.ts | 1032 | host.mocks.ui.dialogManager.openWithExplicitCancel.mockResolvedValueOnce("cancelled"); | CODE |
| CRITICAL | src/serviceFeatures/redFlag.unit.spec.ts | 1126 | host.mocks.ui.dialogManager.openWithExplicitCancel.mockResolvedValueOnce("cancelled"); | CODE |
| CRITICAL | src/serviceFeatures/redFlag.unit.spec.ts | 1137 | host.mocks.ui.dialogManager.openWithExplicitCancel.mockResolvedValueOnce("cancelled"); | CODE |
| CRITICAL | src/serviceFeatures/redFlag.unit.spec.ts | 1203 | host.mocks.ui.confirm.askSelectStringDialogue.mockResolvedValueOnce("OK"); | CODE |
| CRITICAL | src/serviceFeatures/redFlag.unit.spec.ts | 1232 | host.mocks.ui.confirm.askSelectStringDialogue.mockResolvedValueOnce("OK"); | CODE |
| CRITICAL | src/serviceFeatures/redFlag.unit.spec.ts | 1250 | host.mocks.ui.confirm.askSelectStringDialogue.mockResolvedValueOnce("Use this device's settings"); | CODE |
| CRITICAL | src/serviceFeatures/redFlag.unit.spec.ts | 1276 | host.mocks.ui.confirm.askSelectStringDialogue.mockResolvedValueOnce("Retry"); | CODE |
| CRITICAL | src/serviceFeatures/redFlag.unit.spec.ts | 1300 | host.mocks.ui.confirm.askSelectStringDialogue.mockResolvedValueOnce("Cancel"); | CODE |
| CRITICAL | src/serviceFeatures/redFlag.unit.spec.ts | 1331 | host.mocks.ui.confirm.askSelectStringDialogue.mockResolvedValueOnce("Use this device's settings"); | CODE |
| CRITICAL | src/serviceFeatures/redFlag.unit.spec.ts | 1374 | host.mocks.ui.confirm.askYesNoDialog.mockResolvedValueOnce("yes"); | CODE |
| CRITICAL | src/serviceFeatures/redFlag.unit.spec.ts | 1385 | host.mocks.ui.confirm.askYesNoDialog.mockResolvedValueOnce("no"); | CODE |
| CRITICAL | src/serviceFeatures/redFlag.unit.spec.ts | 1396 | host.mocks.ui.confirm.askYesNoDialog.mockResolvedValueOnce("yes"); | CODE |
| CRITICAL | src/serviceFeatures/redFlag.unit.spec.ts | 1692 | host.mocks.ui.dialogManager.openWithExplicitCancel.mockResolvedValueOnce({ | CODE |
| CRITICAL | src/serviceFeatures/redFlag.unit.spec.ts | 1699 | host.mocks.ui.confirm.askSelectStringDialogue.mockResolvedValueOnce("Cancel"); | CODE |
| CRITICAL | src/serviceFeatures/redFlag.unit.spec.ts | 1720 | host.mocks.ui.dialogManager.openWithExplicitCancel.mockResolvedValueOnce({ | CODE |
| CRITICAL | src/serviceFeatures/redFlag.unit.spec.ts | 1727 | host.mocks.ui.confirm.askSelectStringDialogue.mockResolvedValueOnce("Use this device's settings"); | CODE |
| CRITICAL | src/serviceFeatures/redFlag.unit.spec.ts | 1763 | host.mocks.ui.confirm.confirmWithMessage.mockResolvedValueOnce(SIMPLE_FETCH_STAGE1_DETAILED); | CODE |
| CRITICAL | src/serviceFeatures/redFlag.unit.spec.ts | 1764 | host.mocks.ui.dialogManager.openWithExplicitCancel.mockResolvedValueOnce("cancelled"); | CODE |
| CRITICAL | src/serviceFeatures/redFlag.unit.spec.ts | 1810 | host.mocks.ui.dialogManager.openWithExplicitCancel.mockResolvedValueOnce("cancelled"); | CODE |
| CRITICAL | src/serviceFeatures/redFlag.unit.spec.ts | 1825 | host.mocks.ui.dialogManager.openWithExplicitCancel.mockRejectedValueOnce(new Error("Dialog failed")); | CODE |
| CRITICAL | src/serviceFeatures/redFlag.unit.spec.ts | 1843 | host.mocks.ui.confirm.confirmWithMessage.mockResolvedValueOnce(SIMPLE_FETCH_STAGE1_DETAILED); | CODE |
| CRITICAL | src/serviceFeatures/redFlag.unit.spec.ts | 1844 | host.mocks.ui.dialogManager.openWithExplicitCancel.mockResolvedValueOnce({ vault: "identical", extra: {} }); | CODE |
| CRITICAL | src/serviceFeatures/redFlag.unit.spec.ts | 1863 | host.mocks.ui.dialogManager.openWithExplicitCancel.mockResolvedValueOnce({ extra: {} }); | CODE |
| CRITICAL | src/modules/services/ObsidianAppLifecycleService.ts | 13 | void this.context.plugin.app.commands.executeCommandById("app:reload"); | CODE |
| CRITICAL | src/apps/cli/commands/runCommand.unit.spec.ts | 319 | core.services.context.standardIo.prompt.mockResolvedValue(""); | CODE |
| CRITICAL | src/apps/cli/commands/runCommand.unit.spec.ts | 333 | core.services.context.standardIo.prompt.mockResolvedValue(passphrase); | CODE |
| CRITICAL | src/apps/cli/commands/runCommand.unit.spec.ts | 354 | core.services.context.standardIo.prompt.mockResolvedValue("wrong-passphrase"); | CODE |
| CRITICAL | src/apps/cli/commands/runCommand.unit.spec.ts | 369 | core.services.context.standardIo.readStdin.mockResolvedValue("content from stdin"); | CODE |
| CRITICAL | src/apps/cli/commands/runCommand.unit.spec.ts | 414 | const chunk = core.services.context.standardIo.writeStdout.mock.calls.at(-1)?.[0]; | CODE |
| CRITICAL | src/apps/cli/commands/daemonCommand.unit.spec.ts | 170 | const warningCalls = core.services.context.standardIo.writeStderr.mock.calls.filter( | CODE |
| CRITICAL | src/apps/cli/commands/daemonCommand.unit.spec.ts | 187 | const warningCalls = core.services.context.standardIo.writeStderr.mock.calls.filter( | CODE |
| CRITICAL | src/apps/cli/commands/daemonCommand.unit.spec.ts | 313 | const errorCalls = core.services.context.standardIo.writeStderr.mock.calls.filter( | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | test/contracts/serviceContext.ts | 67 | export function observeServiceComposition( | CODE |
| LOW | test/e2e-obsidian/runner/liveSyncWorkflow.ts | 168 | export async function resumeCompatibilityReview( | CODE |
| LOW | test/e2e-obsidian/runner/liveSyncWorkflow.ts | 408 | export async function inspectObsidianServiceContextContract( | CODE |
| LOW | test/e2e-obsidian/runner/liveSyncWorkflow.ts | 439 | export function assertObsidianServiceContextContract(result: ObsidianServiceContextContractResult): void { | CODE |
| LOW | test/e2e-obsidian/runner/liveSyncWorkflow.ts | 519 | export async function waitForLocalDatabaseEntry( | CODE |
| LOW | test/e2e-obsidian/runner/mobileUi.ts | 25 | async function applyObsidianMobileTestMode( | CODE |
| LOW⚡ | test/e2e-obsidian/runner/mobileUi.ts | 95 | export async function setObsidianMobileTestModeBeforePluginStart( | CODE |
| LOW⚡ | test/e2e-obsidian/runner/mobileUi.ts | 103 | export async function setObsidianMobileTestMode(port: number, enabled: boolean, timeoutMs: number): Promise<void> { | CODE |
| LOW⚡ | test/e2e-obsidian/runner/mobileUi.ts | 107 | export async function assertMobileDialogueLayout(page: Page, container: Locator, label: string): Promise<void> { | CODE |
| LOW | test/e2e-obsidian/runner/pathAssertions.ts | 5 | export async function waitForExactCaseOnlyRename( | CODE |
| LOW | test/e2e-obsidian/runner/securitySeed.ts | 47 | export function requireSecuritySeedDocument(document: CouchDbDocument): SecuritySeedDocument { | CODE |
| LOW | test/e2e-obsidian/runner/securitySeed.ts | 69 | export function snapshotSecuritySeedDocument(document: SecuritySeedDocument): SecuritySeedDocumentSnapshot { | CODE |
| LOW | test/e2e-obsidian/runner/securitySeed.ts | 79 | export function changedSynchronisationParameterFields( | CODE |
| LOW | test/e2e-obsidian/runner/remoteActivityWorkflow.ts | 20 | export async function startHeldOneShotReplication(cliBinary: string, env: NodeJS.ProcessEnv): Promise<void> { | CODE |
| LOW | test/e2e-obsidian/runner/remoteActivityWorkflow.ts | 219 | export async function cleanUpHeldRemoteActivity(cliBinary: string, env: NodeJS.ProcessEnv): Promise<void> { | CODE |
| LOW | test/e2e-obsidian/runner/upgradeContinuity.ts | 64 | function assertSequenceDidNotRegress(before: unknown, after: unknown, label: string): void { | CODE |
| LOW | test/e2e-obsidian/runner/upgradeContinuity.ts | 78 | export function assertCouchDbCheckpointContinuity( | CODE |
| LOW | test/e2e-obsidian/runner/upgradeContinuity.ts | 98 | export function assertSomeCouchDbCheckpointAdvanced( | CODE |
| LOW | test/e2e-obsidian/runner/upgradeContinuity.ts | 112 | export function assertCouchDbDocumentsUnchanged( | CODE |
| LOW | test/e2e-obsidian/runner/upgradeContinuity.ts | 123 | export function assertJournalCheckpointLoaded( | CODE |
| LOW | test/e2e-obsidian/runner/upgradeContinuity.ts | 170 | export function assertJournalCheckpointAdvanced( | CODE |
| LOW | test/e2e-obsidian/runner/upgradeContinuity.ts | 188 | export function assertMilestoneContinuity(before: MilestoneIdentity, after: MilestoneIdentity): void { | CODE |
| LOW | test/e2e-obsidian/runner/upgradeWorkflow.ts | 127 | export function createUpgradeScenarioPaths(label: string): UpgradeScenarioPaths { | CODE |
| LOW | test/e2e-obsidian/runner/upgradeWorkflow.ts | 238 | export async function waitForPersistentNodeIdentity( | CODE |
| LOW | test/e2e-obsidian/runner/upgradeWorkflow.ts | 324 | export async function readRuntimeSettingsUpgradeState( | CODE |
| LOW | test/e2e-obsidian/runner/upgradeWorkflow.ts | 367 | export function assertStableReleaseDefaults(state: RuntimeSettingsUpgradeState, configured: boolean): void { | CODE |
| LOW | test/e2e-obsidian/runner/upgradeWorkflow.ts | 408 | export function assertUnconfiguredUpgradeReady( | CODE |
| LOW | test/e2e-obsidian/runner/upgradeWorkflow.ts | 446 | export function assertUnconfiguredUpgradeRestarted(state: RuntimeSettingsUpgradeState, targetVersion: string): void { | CODE |
| LOW | test/e2e-obsidian/runner/upgradeWorkflow.ts | 461 | export function assertStableRemoteSelection( | CODE |
| LOW | test/e2e-obsidian/runner/upgradeWorkflow.ts | 485 | export function assertUpgradeCompatibilityReady( | CODE |
| LOW | test/e2e-obsidian/runner/upgradeWorkflow.ts | 567 | export function assertUpgradeRemainsReady(state: RuntimeUpgradeState, targetVersion: string): void { | CODE |
| LOW | test/e2e-obsidian/runner/upgradeWorkflow.ts | 578 | export async function dismissConfigDoctorIfShown(port: number): Promise<boolean> { | CODE |
| LOW | test/e2e-obsidian/runner/upgradeWorkflow.ts | 720 | export async function createVerifierReturnDelta( | CODE |
| LOW | test/e2e-obsidian/runner/upgradeWorkflow.ts | 773 | export async function runCouchDbReplicationObserved( | CODE |
| LOW | test/e2e-obsidian/runner/upgradeWorkflow.ts | 798 | export async function runJournalReplicationObserved( | CODE |
| LOW | test/e2e-obsidian/runner/upgradeWorkflow.ts | 852 | export async function readLocalCouchDbCheckpoints( | CODE |
| LOW | test/e2e-obsidian/runner/session.ts | 24 | export async function startObsidianLiveSyncSession( | CODE |
| LOW | test/e2e-obsidian/runner/remoteActivity.ts | 72 | async function readRemoteActivitySnapshotFromPage(page: Page): Promise<RemoteActivitySnapshot> { | CODE |
| LOW | test/e2e-obsidian/runner/remoteActivity.ts | 110 | export async function readRemoteActivitySnapshot(port: number): Promise<RemoteActivitySnapshot> { | CODE |
| LOW | test/e2e-obsidian/runner/remoteActivity.ts | 130 | export async function waitForRemoteActivityState( | CODE |
| LOW | test/e2e-obsidian/runner/remoteActivity.ts | 220 | export async function captureRemoteActivityDiagnostics( | CODE |
| LOW | test/e2e-obsidian/runner/ui.ts | 71 | export async function waitForVisibleObsidianDialogue(page: Page, text: string, timeoutMs = 10_000): Promise<Locator> { | CODE |
| LOW | test/e2e-obsidian/runner/ui.ts | 221 | export async function allowPendingObsidianTestVaultOpenAction( | CODE |
| LOW | test/e2e-obsidian/runner/ui.ts | 299 | export async function captureJsonResolveDialogue(port: number): Promise<string> { | CODE |
| LOW | test/e2e-obsidian/runner/releaseArtifact.ts | 103 | export async function ensurePinnedReleaseArtifact( | CODE |
| LOW | test/e2e-obsidian/runner/setupUri.ts | 44 | export async function assertVerticalActionLayout(port: number, title: string): Promise<void> { | CODE |
| LOW | test/e2e-obsidian/runner/setupUri.ts | 113 | export async function generateSetupURIFromDevice( | CODE |
| LOW | test/e2e-obsidian/runner/setupUri.ts | 174 | export async function captureAndStartInitialisation( | CODE |
| LOW | test/e2e-obsidian/runner/setupUri.ts | 257 | export async function continueWithoutRemoteSettings(port: number, captures: SetupCaptureNames): Promise<string> { | CODE |
| LOW | test/e2e-obsidian/runner/setupUri.ts | 278 | export async function acknowledgeDisabledOptionalFeatures(port: number, captures: SetupCaptureNames): Promise<string> { | CODE |
| LOW | test/e2e-obsidian/runner/setupUri.ts | 422 | export async function resumeCompatibilityReviewIfShown(port: number): Promise<boolean> { | CODE |
| LOW | test/e2e-obsidian/runner/objectStorage.ts | 76 | export function createObjectStorageClient(config: ObjectStorageConfig): S3Client { | CODE |
| LOW | test/e2e-obsidian/runner/objectStorage.ts | 88 | export async function ensureObjectStorageBucket(config: ObjectStorageConfig): Promise<void> { | CODE |
| LOW | test/e2e-obsidian/runner/objectStorage.ts | 140 | export async function deleteObjectStoragePrefix(config: ObjectStorageConfig, prefix: string): Promise<void> { | CODE |
| LOW | test/e2e-obsidian/scripts/upgrade-from-stable.ts | 264 | async function runUnconfiguredSettingsUpgrade(context: RunnerContext, port: number): Promise<void> { | CODE |
| LOW | test/e2e-obsidian/scripts/upgrade-from-stable.ts | 359 | async function readCouchDbRemoteSnapshot(config: CouchDbConfig, databaseName: string): Promise<CouchDbRemoteSnapshot> { | CODE |
| LOW | test/e2e-obsidian/scripts/upgrade-from-stable.ts | 384 | async function readObjectStorageRemoteSnapshot( | CODE |
| LOW | test/e2e-obsidian/scripts/upgrade-from-stable.ts | 409 | function assertNoOpCouchDbObservation(observation: CouchDbReplicationObservation): void { | CODE |
| LOW | test/e2e-obsidian/scripts/upgrade-from-stable.ts | 415 | function assertNoOpCouchDbDatabase(before: CouchDbRemoteSnapshot, after: CouchDbRemoteSnapshot): void { | CODE |
| LOW | test/e2e-obsidian/scripts/upgrade-from-stable.ts | 437 | async function configureFreshCouchDbVerifier( | CODE |
| 167 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | docker/docker-compose.yml | 2 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | docker/docker-compose.yml | 23 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | docker/docker-compose.yml | 29 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | docker/docker-compose.yml | 31 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | docker/docker-compose.yml | 66 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | docker/docker-compose.yml | 70 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | docker/docker-compose.yml | 89 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | docker/docker-compose.yml | 93 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | docker/docker-compose.yml | 115 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | docker/docker-compose.yml | 120 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | docker/docker-compose.yml | 146 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | docker/docker-compose.yml | 152 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | docker/docker-compose.yml | 169 | # ============================================================================= | COMMENT |
| MEDIUM | docker/docker-compose.yml | 171 | # ============================================================================= | COMMENT |
| MEDIUM | docker/docker-compose.yml | 182 | # ============================================================================= | COMMENT |
| MEDIUM | docker/docker-compose.yml | 184 | # ============================================================================= | COMMENT |
| MEDIUM | docker/config/cloudflared.yml | 2 | # ============================================================================= | COMMENT |
| MEDIUM | docker/config/cloudflared.yml | 17 | # ============================================================================= | COMMENT |
| MEDIUM | src/apps/cli/test/test-helpers-docker.sh | 46 | # ─── display_test_info ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/apps/cli/test/test-helpers-docker.sh | 59 | # ─── _docker_translate_arg ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/apps/cli/test/test-helpers-docker.sh | 77 | # ─── run_cli ───────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/apps/cli/test/test-helpers-docker.sh | 91 | # ── 1. Translate all host paths to container paths ──────────────────── | COMMENT |
| MEDIUM | src/apps/cli/test/test-helpers-docker.sh | 97 | # ── 2. Split vault path from the rest of the arguments ─────────────── | COMMENT |
| MEDIUM | src/apps/cli/test/test-helpers-docker.sh | 118 | # ── 3. Inject verbose / debug flags ────────────────────────────────── | COMMENT |
| MEDIUM | src/apps/cli/test/test-helpers-docker.sh | 123 | # ── 4. Volume mounts ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/apps/cli/test/test-helpers-docker.sh | 134 | # ── 5. stdin forwarding ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/apps/cli/test/test-helpers.sh | 3 | # ─── local init hook ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/apps/cli/test/test-mirror-linux.sh | 102 | # ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/apps/cli/test/test-mirror-linux.sh | 104 | # ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/apps/cli/test/test-mirror-linux.sh | 131 | # ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/apps/cli/test/test-mirror-linux.sh | 133 | # ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/apps/cli/test/test-mirror-linux.sh | 158 | # ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/apps/cli/test/test-mirror-linux.sh | 160 | # ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/apps/cli/test/test-mirror-linux.sh | 175 | # ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/apps/cli/test/test-mirror-linux.sh | 177 | # ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/apps/cli/test/test-mirror-linux.sh | 200 | # ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/apps/cli/test/test-mirror-linux.sh | 202 | # ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/apps/cli/test/test-mirror-linux.sh | 222 | # ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/apps/cli/test/test-mirror-linux.sh | 224 | # ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/apps/cli/test/test-mirror-linux.sh | 241 | # ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/apps/cli/test/test-mirror-linux.sh | 243 | # ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | src/apps/cli/test/test-daemon-linux.sh | 46 | # ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | src/apps/cli/test/test-daemon-linux.sh | 48 | # ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/apps/cli/test/test-daemon-linux.sh | 84 | # ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/apps/cli/test/test-daemon-linux.sh | 86 | # ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/apps/cli/test/test-daemon-linux.sh | 121 | # ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/apps/cli/test/test-daemon-linux.sh | 123 | # ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/apps/cli/test/test-daemon-linux.sh | 159 | # ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/apps/cli/test/test-daemon-linux.sh | 161 | # ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/apps/cli/deploy/install.sh | 15 | # ── Argument parsing ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/apps/cli/deploy/install.sh | 74 | # ── Vault path ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/apps/cli/deploy/install.sh | 93 | # ── Build ──────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/apps/cli/deploy/install.sh | 104 | # ── Install binary ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/apps/cli/deploy/install.sh | 133 | # ── Write systemd unit ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/apps/cli/deploy/install.sh | 169 | # ── Enable service ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …li/managers/CLIStorageEventManagerAdapter.unit.spec.ts | 5 | // ── chokidar mock ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …li/managers/CLIStorageEventManagerAdapter.unit.spec.ts | 24 | // ── helpers ─────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …li/managers/CLIStorageEventManagerAdapter.unit.spec.ts | 35 | // ── tests ───────────────────────────────────────────────────────────────────── | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | vite.config.ts | 21 | const updatesPath = path.resolve(__dirname, "updates.md"); | COMMENT |
| LOW | vite.config.ts | 41 | // } | COMMENT |
| LOW | terser_vite.config.ts | 21 | // keep_classnames: true, | COMMENT |
| LOW | docker/docker-compose.yml | 1 | # Self-hosted LiveSync — Docker Compose | COMMENT |
| LOW | docker/config/cloudflared.yml | 1 | # cloudflared tunnel configuration for Self-hosted LiveSync | COMMENT |
| LOW | test/shell/minio-init.sh | 21 | # <CORSRule> | COMMENT |
| LOW | utils/livesync-commonlib-version.ts | 1 | // The standalone Deno utilities deliberately remain pinned to one immutable | COMMENT |
| LOW | …features/LocalDatabaseMainte/CmdLocalDatabaseMainte.ts | 781 | // * Compact the database by temporarily setting the revision limit to 1. | COMMENT |
| LOW | …features/LocalDatabaseMainte/CmdLocalDatabaseMainte.ts | 801 | // const req = await _requestToCouchDB( | COMMENT |
| LOW | …features/LocalDatabaseMainte/CmdLocalDatabaseMainte.ts | 821 | // } | COMMENT |
| LOW | src/modules/AbstractModule.ts | 61 | testFail(message: string) { | COMMENT |
| LOW | src/modules/core/ModuleReplicator.ts | 281 | return Promise.resolve(true); | COMMENT |
| LOW | src/modules/core/ModuleReplicator.ts | 301 | // (await this.core.confirm.askYesNoDialog("Do you want to send all chunks before replication?", { | COMMENT |
| LOW | src/modules/features/SettingDialogue/PaneMaintenance.ts | 201 | eventHub.emitEvent(EVENT_REQUEST_PERFORM_GC_V3); | COMMENT |
| LOW | src/modules/features/SettingDialogue/PaneMaintenance.ts | 221 | // button.setButtonText("Rescan").onClick(async () => { | COMMENT |
| LOW | src/modules/features/SettingDialogue/PaneMaintenance.ts | 241 | // new Setting(paneEl) | COMMENT |
| LOW | src/modules/features/SettingDialogue/PaneMaintenance.ts | 261 | // .addButton((button) => | COMMENT |
| LOW | …c/modules/features/SettingDialogue/PaneRemoteConfig.ts | 141 | const actions = new Setting(paneEl).setName($msg("Saved connections")); | COMMENT |
| LOW | …c/modules/features/SettingDialogue/PaneRemoteConfig.ts | 521 | // new Setting(paneEl) | COMMENT |
| LOW | …c/modules/features/SettingDialogue/PaneRemoteConfig.ts | 541 | // private_key: privateKeyPem, | COMMENT |
| LOW | src/modules/main/ModuleLiveSyncMain.ts | 121 | // await this.services.appLifecycle.onUnload(); | COMMENT |
| LOW | src/modules/main/ModuleLiveSyncMain.ts | 141 | // await this.services.setting.onBeforeRealiseSetting(); | COMMENT |
| LOW | src/modules/main/ModuleLiveSyncMain.ts | 161 | // } | COMMENT |
| LOW | src/modules/services/LiveSyncUI/DialogHost.svelte | 1 | <script lang="ts"> | COMMENT |
| LOW | src/apps/cli/docker-entrypoint.sh | 1 | #!/bin/sh | COMMENT |
| LOW | src/apps/cli/test/test-helpers-docker.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | src/apps/cli/test/test-helpers-docker.sh | 21 | # RUN_BUILD Set to 1 to rebuild the Docker image before the test | COMMENT |
| LOW | src/apps/cli/test/test-mirror-linux.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | src/apps/cli/test/test-daemon-linux.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | src/apps/cli/util/minio-init.sh | 21 | # <CORSRule> | COMMENT |
| LOW | src/apps/webpeer/src/vite-env.d.ts | 1 | /// <reference types="svelte" /> | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | docker/README.md | 140 | #### Step 1: Create a Cloudflare Tunnel | COMMENT |
| LOW⚡ | docker/README.md | 150 | #### Step 2: Configure Environment | COMMENT |
| LOW⚡ | docker/README.md | 158 | #### Step 3: Add Public Hostname Route | COMMENT |
| LOW | docker/README.md | 182 | #### Step 4: Start the Stack | COMMENT |
| LOW | docker/README.md | 199 | #### Step 5: Test the Connection | COMMENT |
| LOW | docker/README.md | 211 | #### Step 6: Configure Obsidian Plugin | COMMENT |
| LOW | docs/tips/fast-setup.md | 32 | ### Step 1: Choose Data Processing Method | COMMENT |
| LOW | docs/tips/fast-setup.md | 46 | ### Step 2: Configure Conflict & Deletion Rules | COMMENT |
| LOW | docs/tips/fast-setup.md | 61 | ### Step 3: Automated Synchronisation | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | test/e2e-obsidian/scripts/document-history-restore.ts | 288 | await promptInput.getAttribute("placeholder"), | CODE |
| LOW | src/apps/cli/testdeno/helpers/dataset.ts | 58 | "lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore m | CODE |
| LOW | src/apps/cli/testdeno/helpers/dataset.ts | 58 | "lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore m | CODE |
| LOW | src/apps/webpeer/src/UITest.svelte | 10 | const ret = await confirm.askString("Your name", "What is your name?", "John Doe", false); | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | src/common/messages/combinedMessages.prod.ts | 7662 | def: "How do you want to fetch?\n- Create a local database once before fetching.\n **Low Traffic**, **High CPU* | CODE |
| MEDIUM | src/common/messages/combinedMessages.prod.ts | 7669 | zh: "How do you want to fetch?\n- Create a local database once before fetching.\n **Low Traffic**, **High CPU** | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …s/adr/2026_08_fast_fetch_persistence_and_completion.md | 298 | ### LiveSync orchestration unit tests | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | src/apps/cli/test/test-daemon-linux.sh | 57 | # Write the file that should be ignored. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docker-compose.traefik.yml | 25 | # Don't forget to replace 'obsidian-livesync.example.org' with your own domain | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/apps/cli/deploy/install.sh | 4 | # Usage: | COMMENT |