careermate 0.0.7 → 0.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/AGENTS.md +2 -2
  2. package/LICENSE +1 -1
  3. package/README.md +108 -91
  4. package/THIRD_PARTY_NOTICES.md +2 -1
  5. package/bin/careermate.mjs +11 -2
  6. package/dist/career-os/eop/cover-letter.md +13 -6
  7. package/dist/career-os/eop/interview-prep.md +1 -0
  8. package/dist/career-os/knowledge/cover-letter.md +7 -3
  9. package/dist/career-os/knowledge/fit-matching.md +2 -0
  10. package/dist/career-os/knowledge/verifiers/ai-detection-risk.md +57 -0
  11. package/dist/career-os/knowledge/verifiers/human-voice.md +7 -2
  12. package/dist/career-os/knowledge/verifiers/truthfulness.md +1 -0
  13. package/dist/doctor.mjs +19760 -1018
  14. package/dist/mcp.mjs +19783 -1035
  15. package/dist/migrate.mjs +289 -20
  16. package/dist/public/i18n/en/applications.js +19 -0
  17. package/dist/public/i18n/en/common.js +10 -0
  18. package/dist/public/i18n/en/documents.js +0 -10
  19. package/dist/public/i18n/en/home.js +5 -0
  20. package/dist/public/i18n/en/jobs.js +18 -1
  21. package/dist/public/i18n/en/profile.js +0 -5
  22. package/dist/public/i18n/en/settings.js +5 -2
  23. package/dist/public/i18n/ko/applications.js +19 -0
  24. package/dist/public/i18n/ko/common.js +9 -0
  25. package/dist/public/i18n/ko/documents.js +0 -10
  26. package/dist/public/i18n/ko/home.js +5 -0
  27. package/dist/public/i18n/ko/jobs.js +18 -1
  28. package/dist/public/i18n/ko/profile.js +0 -5
  29. package/dist/public/i18n/ko/settings.js +5 -2
  30. package/dist/public/lib.js +101 -0
  31. package/dist/public/pages/applications.js +95 -15
  32. package/dist/public/pages/documents.js +20 -14
  33. package/dist/public/pages/home.js +38 -6
  34. package/dist/public/pages/interview.js +11 -4
  35. package/dist/public/pages/jobs.js +71 -1
  36. package/dist/public/pages/profile.js +2 -3
  37. package/dist/public/pages/settings.js +2 -2
  38. package/dist/public/styles.css +52 -4
  39. package/dist/web.mjs +19001 -758
  40. package/docs/FAQ.md +13 -3
  41. package/docs/MCP_TOOLS.md +32 -12
  42. package/docs/career-os/eop/cover-letter.md +13 -6
  43. package/docs/career-os/eop/interview-prep.md +1 -0
  44. package/docs/career-os/knowledge/cover-letter.md +7 -3
  45. package/docs/career-os/knowledge/fit-matching.md +2 -0
  46. package/docs/career-os/knowledge/verifiers/ai-detection-risk.md +57 -0
  47. package/docs/career-os/knowledge/verifiers/human-voice.md +7 -2
  48. package/docs/career-os/knowledge/verifiers/truthfulness.md +1 -0
  49. package/package.json +5 -2
  50. package/packages/core/src/index.ts +2 -0
  51. package/packages/core/src/jobsearch.ts +190 -0
  52. package/packages/core/src/offers.ts +41 -0
  53. package/packages/core/src/services.ts +29 -3
  54. package/packages/core/src/summary.ts +431 -9
  55. package/packages/core/src/verify/charcount.ts +87 -0
  56. package/packages/core/src/verify/index.ts +1 -0
  57. package/packages/core/src/verify/lint.ts +5 -0
  58. package/packages/db/src/connection.ts +70 -2
  59. package/packages/db/src/index.ts +1 -0
  60. package/packages/db/src/repositories.ts +179 -13
  61. package/packages/db/src/schema.ts +169 -8
  62. package/packages/exporters/src/docx.ts +165 -0
  63. package/packages/exporters/src/index.ts +142 -9
  64. package/packages/exporters/src/markdown.ts +16 -11
  65. package/packages/knowledge/src/index.ts +8 -3
  66. package/packages/mcp-tools/src/result.ts +9 -0
  67. package/packages/mcp-tools/src/tools.ts +303 -60
  68. package/packages/parsers/src/documents.ts +7 -1
  69. package/packages/prompts/src/humanize.ts +4 -0
  70. package/packages/shared/src/schemas.ts +198 -0
  71. package/scripts/init.ts +7 -0
@@ -0,0 +1,57 @@
1
+ # AI 탐지 리스크 (AI-detection-risk) — CareerMate 교차검증 루브릭 (Phase A)
2
+
3
+ > 이 검증기는 연결된 AI가 한국 채용 산출물(특히 자기소개서·경력기술서)을 **저장 직전** 점검할 때 적용하는 **크리틱 루브릭**이다. CareerMate는 루브릭을 제공하고, 실제 검사·판정은 연결된 AI가 수행한다(내부 LLM 없음).
4
+
5
+ > **역할 경계 (중요).** 이 루브릭의 목적은 **탐지기를 속이는 것이 아니다.** "GPT킬러를 우회하는 법"을 가르치지 않는다 — 그것은 기만이고, 한국 HR 현실에서도 실패하는 전략이다. 이 루브릭이 보장하려는 것은 **글이 실제로 지원자 본인의 것이고(진정성), 면접에서 한 문장 한 문장 설명할 수 있는가(방어가능성)** 다. 그 결과로 탐지 리스크는 *부차적으로* 낮아진다. 즉 검사 대상은 "AI 티"가 아니라 **"내 것이 아닌·설명 못 하는 부분"** 이다. (문체의 "AI 티" 자체는 짝 검증기 [`human-voice.md`](./human-voice.md)가 담당한다 — 둘은 역할이 다르다.)
6
+
7
+ ## 1. 목적 — 왜 한국 시장에서 이게 별도 검증기인가
8
+
9
+ 한국 채용은 자기소개서 비중이 크고, **AI 작성 탐지가 제도화**돼 있다. 검증된 시장 사실:
10
+
11
+ - 2025년 제출 자소서의 **약 64%가 AI 작성으로 추정**됐고(전년 48.5%), 전 문항 AI 작성도 20.6%로 늘었다.
12
+ - **무하유 GPT킬러**(문장 구조·확률분포·패턴 기반 AI 생성률 산출)는 탐지 정확도를 **최대 98%**로 표방하며 LG전자·롯데·KB국민은행·국민연금공단 등이 도입했다. 표절 검사 **카피킬러**는 국내 대학 96%가 쓴다. B2B 솔루션 **프리즘(PRISM)**은 마스킹+표절+AI 탐지+면접질문 생성을 묶는다.
13
+ - 기업의 **65.4%가 AI 자소서 적발 시 불이익**을 준다고 답했다.
14
+
15
+ 그런데 **탐지 = 즉시 탈락은 아니다.** HR 담당자들의 공통 입장은 *"AI를 썼느냐보다, 그 내용을 면접에서 본인이 설명할 수 있느냐"* 다. 동시에 탐지기는 **신뢰성 한계**가 분명하다 — OpenAI는 자사 AI 분류기를 2023년 정확도 부족으로 폐기했고, Stanford 연구는 탐지기가 **비원어민 글을 거짓양성으로 과도하게 적발**한다고 보고했다. 즉 탐지기는 틀릴 수 있고, 방어선은 "탐지를 피하는 글"이 아니라 **"누가 봐도 내 경험에서 나온, 내가 설명 가능한 글"** 이다.
16
+
17
+ 따라서 이 검증기는 다음을 본다: ① 본문의 모든 구체 주장이 **지원자의 저장된 사실(이력서·경력·프로젝트)에 앵커**되는가, ② 면접에서 **꼬리질문에 답할 수 있는** 구체성(상황·행동·수치)이 있는가, ③ 일반론·차용 가능한 문장(회사명만 바꾸면 어디든 통하는 글)이 과하지 않은가.
18
+
19
+ ## 2. 검사 항목
20
+
21
+ > 적용 단위: 한 산출물(자소서 1편/문항, 경력기술서 1부). "주장"은 지원자가 자신에 대해 단언하는 문장(역량·성과·경험·동기)을 가리킨다.
22
+
23
+ | ID | 검사 | 합격 기준 | 측정 방법(셀 수 있게) |
24
+ |----|------|-----------|------------------------|
25
+ | D1 | 구체 주장의 앵커링 | 본문의 모든 성과·경험 주장이 저장된 사실(이력서 본문·경력·프로젝트)에 **추적 가능**. 미앵커 주장 0건 | 각 주장 문장에서 (회사/역할/수치/기술/사건) 토큰 추출 → 저장 코퍼스에 존재하는지 대조. 어디에도 없는 주장 수 = 0. (수치는 결정론 점검 `validate_cover_letter`의 `fabricated`/`unverified`와 교차) |
26
+ | D2 | 면접 방어가능성 | 각 핵심 일화가 **꼬리질문 1개에 답할 구체(상황·내 행동·결과)** 를 담음. "설명 못 할" 일반 문장 비율 ≤ 20% | 일화 문장에 (구체 행위 동사+목적어) 또는 (수치/기간/규모)가 있는지 확인 → 없는 문장 비율. "면접관이 '구체적으로 뭘 하셨죠?'라 물으면 막히는 문장" 카운트 |
27
+ | D3 | 차용 가능성(swappability) | 회사명·직무명을 **다른 공고로 바꿔도 그대로 통하는** 일반 문장이 과하지 않음(도입·지원동기에서 특히). 전체의 30% 미만 | 회사 고유 사실(제품·인재상·핵심가치·최근 이슈)·지원자 고유 사실 중 **어느 쪽도 참조하지 않는** 문장 비율. (공고에 `company_overview`/`talent_profile`/`core_values`가 저장돼 있으면 그 정렬 여부로 본다) |
28
+ | D4 | 일반론·교과서 정의 밀도 | "○○란 ~이다", "급변하는 시대에는~" 류 **누구나 쓸 수 있는 정의·시류 진술**이 과하지 않음. 100문장당 3개 이하 | 결정론 lint의 `cliche`·`generic_opener`·`hype` 신호 수를 참조 + 정의형 문장("~란 …입니다") 패턴 카운트 |
29
+ | D5 | 자기복제(carryover) | 다른 공고용 기존 자소서에서 **회사명만 바꾼 문단·문장**을 그대로 옮겨오지 않음(끌개 복제 방지). verbatim 재사용 문장 0건, 산문 carryover ≤ 20% | 기존 자소서(맥락에 포함)와 신규 본문을 문장 단위로 대조 → 사실 일관 영역(보이스·수치)은 허용하되, *직무 적합 앵글·도입·지원동기 산문*의 verbatim 일치 수와 carryover 비율 측정. (짝 가드: 자기복제 방지 EOP) |
30
+ | D6 | 탐지기 한계 인지(거짓확신 방지) | 결과 보고 시 "탐지 통과=합격"·"탐지=탈락"의 **양쪽 거짓확신을 두지 않음** | 점검 결론에 (a) 탐지기는 틀릴 수 있음(비원어민 거짓양성) (b) 최종 관문은 면접 설명력임을 명시했는지 확인(서술 점검) |
31
+
32
+ ## 3. 불합격 시 처리(루프 연결)
33
+
34
+ - **D1 미앵커 주장(critical):** 저장된 사실에 없는 성과·경험은 (a) 사용자에게 사실 여부를 확인해 근거를 보강하거나 (b) 문장을 제거한다. **임의로 그럴듯하게 채우지 않는다**(환각 금지). 수치는 결정론 게이트(`validate_cover_letter`)와 교차해 차단.
35
+ - **D2 방어 불가 문장(critical):** "막히는 문장"은 그 일화의 *내 행동·구체 결과*로 다시 쓴다. 채울 구체가 없으면 그 일화 자체를 더 설명 가능한 다른 경험으로 교체. 동반 면접 준비(`save_interview_prep`)로 꼬리질문 답을 미리 준비하도록 연결.
36
+ - **D3 차용 가능 문장(warn→fix):** 회사 고유 사실(저장된 `company_overview`/`talent_profile`/`core_values` 또는 사용자 리서치)이나 지원자 고유 사실로 재작성. 둘 다 없으면 사용자에게 회사 리서치·본인 일화를 청한다.
37
+ - **D4 일반론 과다(warn):** 정의·시류 진술을 지원자 경험 진술로 치환. 글자수가 빠듯하면 일반론부터 덜어낸다.
38
+ - **D5 자기복제(critical):** 사실·수치·보이스는 일관 유지하되, **직무 적합 앵글·도입·지원동기는 공고별로 새로 쓴다.** 같은 결함이 2번 고쳐도 남으면 멈추고 사용자에게 확인(무한정 변형으로 사실 왜곡 금지).
39
+ - **D6 보고 프레이밍:** 사용자에게 결과를 전할 때 탐지 점수를 단정하지 말고, "탐지기는 오탐이 있으며 핵심은 면접 설명력"이라는 맥락과 함께 전한다.
40
+ - **종료 조건:** D1·D2·D5 critical 0건 + D3·D4 사용자 확인 완료. 통과 시 `save_cover_letter_version`/`add_resume`로 저장하고 대시보드 링크 안내, 이어서 면접 준비를 다음 행동으로 제안.
41
+
42
+ > **윤리 경계:** 이 루프의 어느 단계도 "사실을 왜곡해 탐지를 피하라"고 지시하지 않는다. 탐지 리스크는 *진정성·구체성·차별화*의 부산물로만 낮춘다. 사실·수치·고유명사는 끝까지 보존한다.
43
+
44
+ ## 4. 출처 (Provenance)
45
+
46
+ - **AI 자소서 비율 64.4%(2025)·전문항 20.6%** — 무하유·프리즘 데이터(언론 종합) · https://v.daum.net/v/20251123025247720
47
+ - **무하유 GPT킬러 탐지율 최대 98%·대기업 도입·카피킬러 대학 96%·프리즘** — 무하유 공식 · https://www.copykiller.com/gptkiller , https://www.muhayu.com/
48
+ - **기업 65.4% 적발 시 불이익·"AI 여부보다 면접 설명력"** — 고용노동부·한국고용정보원 및 HR 인식 조사(언론 종합)
49
+ - **OpenAI AI 분류기 2023 폐기(정확도 부족)** — OpenAI, "AI classifier" 회수 공지(2023)
50
+ - **탐지기 비원어민 거짓양성** — Liang et al., Stanford, "GPT detectors are biased against non-native English writers" (2023) · https://arxiv.org/abs/2304.02819
51
+ - **자기복제 방지 설계** — CareerMate ADR-0005, EOP `cover-letter.md` §1·§2-3·§5
52
+
53
+ ## 5. Phase B 힌트
54
+
55
+ - **결정론 연계:** D1(수치)·D4(클리셰/제너릭/하이프)·D5(자기복제 후보)는 이미 `@careermate/core/verify`(lint 신호·provenance)로 일부 셀 수 있다 — 이 검증기는 그 결과를 **의미 판단으로 묶는** 상위 루브릭이다. `validate_cover_letter` 리포트의 `fabricated`/`signals`를 D1/D4 입력으로 재사용.
56
+ - **MCP 도구 아이디어:** `get_verifier({ id: "ai-detection-risk" })` — 이 루브릭 반환. 별도 점수 도구는 만들지 않는다(탐지 점수의 단정은 거짓확신을 낳으므로 의도적으로 회피).
57
+ - **데이터 형태 힌트:** 입력 = 신규 본문 + `get_application_context`의 저장 사실 + 기존 자소서 + (있으면) 공고의 회사 리서치 필드. 출력 = `{ unanchored_claims[], undefendable_sentences[], swappable_ratio, carryover_ratio, framing_ok }` — 모두 연결 AI가 채운다.
@@ -35,6 +35,9 @@
35
35
  | C10 | 빈말 채움(filler) 문장 | 정보 없는 채움 문장("~에 대한 저의 열정은 남다릅니다" 류)이 **전체 문장의 5% 미만** | §filler 패턴과 매칭되거나 숫자·고유명사·동사 목적어가 전혀 없는 문장 수를 센다 |
36
36
  | C11 | 구체 증거(수치·사례) 존재 | 본문에 **정량 근거(숫자/기간/규모/성과 지표)가 최소 2개** 이상 | 숫자+단위/퍼센트/"N배"/"N명"/"N개월" 패턴 매칭 수가 2 이상인지 확인 |
37
37
  | C12 | 번역투 문법 밀도 *(advisory)* | 아래 §번역투 패턴이 **100단어당 3개 이하** (권고 신호, 하드 실패 없음) | §번역투 패턴 목록과 부분 매칭 → 밀도 계산. **맥락 확인 필수**: 정상 용법에서도 등장하는 표현이 많으므로 밀도가 높더라도 연결 AI가 문맥을 보고 최종 판단. 단독으로 불합격 처리하지 않는다 |
38
+ | C13 | 캐치프레이즈·모티프 반복 | 같은 캐치프레이즈·모티프(반복되는 고유 표현·슬로건, 예: "1원도 틀리지 않는")가 **문서 전체에서 2회 이하** | 반복 등장하는 짧은 고유 구절을 식별해 등장 횟수를 센다. **3회 이상이면 인위적 장치**로 읽혀 사람 목소리를 깎는다(문항형 자소서는 문항 전체를 한 문서로 합쳐서 센다). C1의 '슬롭 사전 단어 반복'과 달리 사전에 없는 **글 고유의 반복 구절**을 잡는다 |
39
+ | C14 | 문장 리듬 변주 *(advisory)* | 비슷한 길이(±3단어 이내) 문장이 **4개 이상 연속되지 않고**, 각 단락에 짧은 문장(≤8단어) **1개 이상** | 인접 문장의 단어 수 배열에서 유사 길이 연속 구간의 최대 길이를 재고, 단락별 최단 문장 길이를 확인한다. C3(전체 표준편차·burstiness)와 달리 **국소적 연속 단조**를 잡는다. **권고 신호(게이트 아님)** — 짧은 문항·bullet 구간 false-positive 방지 |
40
+ | C15 | 기술 디테일 구체성 *(advisory)* | 기술 경험·기술 문항 서술에 추상 요약을 넘어선 **패턴 명명·구체 구현 수준 디테일이 최소 1개**(예: "Outbox 패턴", "인덱스 재설계로 풀스캔 제거") | 추상 동사구("~하는 방식"·"처리했다"·"관리했다")만으로 기술을 서술한 구간을 표시한다. 지나치게 매끈한 curated 요약은 사람확률을 깎는 AI 의심 신호(human-baseline 실측). **단 저장에 없는 구현 디테일을 지어내면 C8·C9 위반이므로, 없을 때는 발명이 아니라 사용자에게 물어 채우도록 권고**한다. **권고 신호(게이트 아님)** — 비기술 직군·짧은 문항 false-positive 방지 |
38
41
 
39
42
  ### 슬롭 사전 (C1 — 부분 일치로 카운트)
40
43
 
@@ -76,12 +79,14 @@
76
79
  연결된 AI는 위 항목을 채점해 **불합격 항목 ID + 근거(센 수치/매칭된 문자열/위치)** 를 모은다. 그다음 항목별로 아래 수정 지시를 적용해 **재작성 → 동일 루브릭 재검증**한다. 재검증 통과까지 반복하되, **C8·C9(사실·고유명사 보존)는 단 1건이라도 위반 시 즉시 하드 실패**로 처리하고 다른 어떤 개선보다 우선해 복구한다.
77
80
 
78
81
  - **C1·C2·C6 위반(슬롭/상투/과장)**: 매칭된 단어·구문을 나열하고, 각각을 그 사람의 실제 경험·맥락에서 나온 **구체 표현으로 1:1 치환**한다. 일반론을 사실로 바꾼다. 치환 후 밀도를 다시 센다.
79
- - **C3·C4·C5 위반(단조로움)**: **셋 다 권고 신호**이므로 위반이 있어도 재작성을 강제하지 않는다. 다음 조건 중 하나 이상이면(연속 3문장 이상 동일 시작어 / 단락 내 3단 병렬 2회 초과) 구체적 수정 제안을 함께 낸다(여전히 권고): 긴 문장 1~2개를 쪼개 **짧은 강조 문장(≤8단어)** 삽입, 연속 동일 시작어 문장의 도입부 변경, 3단 병렬을 1개로 축소·문장 형태 비대칭화. 표준편차·시작어 분포를 재측정한다.
82
+ - **C13 위반(모티프 반복)**: 3회 이상 등장한 캐치프레이즈·모티프를 표시하고, **첫 1~2회만 남기고 나머지는 매번 다른 말로 바꿔** 표현한다(같은 슬로건을 문항마다 되풀이하지 않는다). 권고 신호이므로 재작성을 강제하지는 않되, 반복 횟수를 다시 센다.
83
+ - **C3·C4·C5·C14 위반(단조로움·리듬)**: **모두 권고 신호**이므로 위반이 있어도 재작성을 강제하지 않는다. 다음 조건 중 하나 이상이면(연속 3문장 이상 동일 시작어 / 단락 내 3단 병렬 2회 초과 / **비슷한 길이 문장 4개 이상 연속[C14]**) 구체적 수정 제안을 함께 낸다(여전히 권고): 긴 문장 1~2개를 쪼개 **짧은 강조 문장(≤8단어)** 삽입, 연속 동일 시작어 문장의 도입부 변경, 3단 병렬을 1개로 축소·문장 형태 비대칭화. 표준편차·시작어 분포·연속 길이를 재측정한다.
80
84
  - **C7 위반(목소리 불일치)**: 다수 종결어미·인칭으로 **전체를 통일**한다. 격식이 튀는 구간을 주변 톤에 맞춰 다시 쓴다.
85
+ - **C15 위반(기술 디테일 추상)**: 추상 요약만 있는 기술 서술 구간을 표시하고, 패턴명·구체 구현으로 한 단계 내리도록 권고한다 — 단 저장에 없으면 지어내지 말고 사용자에게 묻는다(권고 신호, 게이트 아님).
81
86
  - **C10·C11 위반(빈말/근거 부족)**: 빈말 문장을 삭제하거나, 원본 데이터(`get_application_context`로 받은 경력·성과·스킬)에서 **수치·사례를 끌어와** 구체화한다. 없으면 지어내지 말고 사용자에게 해당 수치를 묻는다.
82
87
  - **C8·C9 위반(사실/고유명사 손상)**: 원본에서 누락·왜곡된 숫자·고유명사를 **원문 그대로 복원**한다. 추정·대체 금지. 복원 후 집합 비교를 재수행해 100%를 확인한다.
83
88
 
84
- 재검증 종료 조건: **C1·C2·C6·C7·C10·C11 전부 합격 + C8·C9 위반 0건**. **C3·C4·C5(문장 길이·시작어·3단 병렬 단조성 신호)는 게이트가 아니라 권고 신호**다 — 단독으로 종료를 막지 않고 개선 권고만 한다(짧은 문항·이력서 bullet 등 통계 무의미 구간 false-positive 방지; §2 advisory note·`human-writing.md` R12/line86과 동일선). 단 뚜렷한 위반(연속 3문장 이상 동일 시작어[C4] / 단락 내 3단 병렬 2회 초과[C5] — §2 표의 단락당 1회 기준을 크게 넘는 밀집)엔 구체 수정 제안을 함께 낸다(재작성 강제는 아님). 그 외 한 항목이라도 불합격이면 루프를 멈추지 않는다. (C3·C4·C5 게이트 정렬 완료 2026-06-20: 셋 다 권고 신호로 통일, human-writing.md 게이트 집합 R5/R6/R9/R11과 정합. cross-verifier 근거 구분은 §4 보존 — C5=Wikipedia rule-of-three, C3·C4=burstiness.)
89
+ 재검증 종료 조건: **C1·C2·C6·C7·C10·C11 전부 합격 + C8·C9 위반 0건**(C13 모티프 반복은 권고 신호로, 3회 이상이면 수정 권고하되 게이트는 아니다). **C3·C4·C5·C14·C15(문장 길이·시작어·3단 병렬·리듬 변주 단조성 신호 + 기술 디테일 구체성)는 게이트가 아니라 권고 신호**다 — 단독으로 종료를 막지 않고 개선 권고만 한다(짧은 문항·이력서 bullet 등 통계 무의미 구간 false-positive 방지; §2 advisory note·`human-writing.md` R12/line86과 동일선). 단 뚜렷한 위반(연속 3문장 이상 동일 시작어[C4] / 단락 내 3단 병렬 2회 초과[C5] — §2 표의 단락당 1회 기준을 크게 넘는 밀집)엔 구체 수정 제안을 함께 낸다(재작성 강제는 아님). 그 외 한 항목이라도 불합격이면 루프를 멈추지 않는다. (C3·C4·C5 게이트 정렬 완료 2026-06-20: 셋 다 권고 신호로 통일, human-writing.md 게이트 집합 R5/R6/R9/R11과 정합. cross-verifier 근거 구분은 §4 보존 — C5=Wikipedia rule-of-three, C3·C4=burstiness.)
85
90
 
86
91
  ## 4. 출처 (Provenance)
87
92
 
@@ -11,6 +11,7 @@
11
11
  - **과장(inflation):** 있는 사실을 부풀림(직함 격상, 팀 성과를 개인 성과로 귀속, "참여"를 "주도"로).
12
12
  - **미검증 정밀도(false precision):** 저장 데이터에 근거 없는 구체 수치("매출 37% 증가")를 생성.
13
13
  - **갭 은폐(gap concealment):** 모르는 것을 모른다고 하지 않고 빈칸을 그럴듯하게 메움.
14
+ - **속성 추론 비약(attribute leap):** 저장된 *기법·행위*에서 저장되지 않은 *성과·속성*을 단정하는 "그럴듯한 추론" 누수. **기법·무결성 ≠ 성과·가용성·규모.** 예: "듀얼라이트·대사(정합성 기법)" → "무중단/제로다운타임(가용성 성과)" 단정; "정합성 오류 0건" → "장애 0"; "Kafka 사용" → "대용량"; "p99 개선" → "사용자 경험 개선" 단정. 기법이 그 성과를 *가능케 한다*고 저장 성과 자체는 없으면 단정 금지 — 기법만 진술하거나 `[확인 필요]`로 둔다(가장 흔하고, 숫자·고유명사가 없어 결정론으로 안 잡히는 누수다).
14
15
 
15
16
  > 경계 원칙: **표현을 강하게 다듬는 것(action verb·두괄식·정량화)은 허용, 사실을 바꾸는 것은 금지.** 강한 동사로 쓰되 동사가 가리키는 행위·결과는 저장 데이터와 일치해야 한다. 이 검증기는 사람처럼 쓰기(`human-writing.md`)의 "Fact lock(R7)" 신호를 **전 산출물·전 사실유형으로 확장한 전용 게이트**다.
16
17