From 896b374f56be1dfe316abb635e7bb3c52053b728 Mon Sep 17 00:00:00 2001 From: altair823 Date: Sat, 2 May 2026 12:19:39 +0900 Subject: [PATCH] =?UTF-8?q?fix(tag-vocab):=20T2=20review=20minor/nit=202?= =?UTF-8?q?=EA=B1=B4=20(#3=20v0.2.3)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - M1: prompt.test.ts test 4 변수명 candidateIdx → headerIdx (실제 anchor 가 'Today's date' 헤더) - N1: prompt.ts return 직전 self-delimited block 컨벤션 1줄 코멘트 skip: N2 (PROMPT_VERSION 테스트 redundancy nit — harmless guard), N3 (vocab dedup/normalize — Task 1 caller 책임) Co-Authored-By: Claude Opus 4.7 (1M context) --- src/main/ai/prompt.ts | 1 + tests/unit/prompt.test.ts | 8 ++++---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main/ai/prompt.ts b/src/main/ai/prompt.ts index 147fc8f..a649ec2 100644 --- a/src/main/ai/prompt.ts +++ b/src/main/ai/prompt.ts @@ -17,6 +17,7 @@ ${candidates.map((c, i) => ` ${i + 1}. ${c.iso ?? '(ambiguous)'} — matched to ? `\nExisting vocabulary tags (most-used first): ${vocab.join(', ')}\nPrefer reusing a vocabulary tag when the meaning matches; create new tags only when the meaning is genuinely new.\n` : ''; + // candidateBlock & vocabBlock are self-delimited with leading/trailing \n return `You organize raw personal notes into structured metadata. Today's date in Korea Standard Time (KST): ${todayKst} diff --git a/tests/unit/prompt.test.ts b/tests/unit/prompt.test.ts index e19cee6..6d27932 100644 --- a/tests/unit/prompt.test.ts +++ b/tests/unit/prompt.test.ts @@ -19,13 +19,13 @@ describe('prompt', () => { expect(out).toContain('Prefer reusing'); }); - it('vocab block appears between candidate block and JSON rules', () => { + it('vocab block appears after header and before JSON rules', () => { const out = buildPrompt('hello', '2026-05-02', [], ['design']); - const candidateIdx = out.indexOf("Today's date"); + const headerIdx = out.indexOf("Today's date"); const vocabIdx = out.indexOf('Existing vocabulary'); const jsonRulesIdx = out.indexOf('Return a JSON object'); - expect(candidateIdx).toBeGreaterThan(-1); - expect(vocabIdx).toBeGreaterThan(candidateIdx); + expect(headerIdx).toBeGreaterThan(-1); + expect(vocabIdx).toBeGreaterThan(headerIdx); expect(jsonRulesIdx).toBeGreaterThan(vocabIdx); }); });