From 75db364a1d12c865d67a3865efc9902b40e5f486 Mon Sep 17 00:00:00 2001 From: afiqzudinhadi Date: Wed, 5 Aug 2026 20:35:36 +0800 Subject: [PATCH] fix(library): exclude no_resolve notes from sync no-id count --- packages/obsidian/src/library/LibraryEngine.ts | 7 ++++++- tests/library-engine.test.ts | 14 ++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/packages/obsidian/src/library/LibraryEngine.ts b/packages/obsidian/src/library/LibraryEngine.ts index 8488d8e..dc98f73 100644 --- a/packages/obsidian/src/library/LibraryEngine.ts +++ b/packages/obsidian/src/library/LibraryEngine.ts @@ -62,7 +62,12 @@ export async function libraryFolderSync(spec: MediaTypeSpec, deps: LibraryEngine const filename = filenameOf(note.path); if (isSkippableNote(filename, frontmatter, spec.itemType)) continue; if (!spec.hasId(frontmatter)) { - report.skippedNoId++; + // no_resolve opt-outs are deliberate manual notes — keep them out of the actionable no-id count + if (hasNoResolveFlag(frontmatter)) { + deps.log(`no_resolve flag set, skipping sync: ${note.path}`); + } else { + report.skippedNoId++; + } continue; } if (!opts.full && !spec.isActive(frontmatter)) { diff --git a/tests/library-engine.test.ts b/tests/library-engine.test.ts index dd4f566..8b8150a 100644 --- a/tests/library-engine.test.ts +++ b/tests/library-engine.test.ts @@ -439,4 +439,18 @@ describe('libraryFolderResolve: no_resolve flag', () => { expect(report.skippedNoResolve).toBe(0); expect(report.resolved).toEqual(['A.md']); }); + + test('SYNC: no_resolve id-less note excluded from skippedNoId (silent log skip); plain id-less note still counted', async () => { + const { spec } = makeFakeSpec({}); + const flagged = NO_ID_NOTE.replace('fake_id: ', 'fake_id: \nno_resolve: true'); + const logs: string[] = []; + const { deps } = makeDeps([ + { path: 'Flagged.md', content: flagged }, + { path: 'Plain.md', content: NO_ID_NOTE }, + ]); + deps.log = (m: string) => logs.push(m); + const report = await libraryFolderSync(spec, deps, { full: true }); + expect(report.skippedNoId).toBe(1); + expect(logs.some(l => l.includes('no_resolve flag set, skipping sync: Flagged.md'))).toBe(true); + }); });