leerness 1.30.0 → 1.32.0

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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,204 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.32.0 — 2026-06-16 — 🛡️ [안정화/Stable] UR-0010 영어화 3종(install-safety+constraints+capabilities/team) 안정 minor
4
+
5
+ **🛡️ 안정화(Stable) minor — 직전 minor(1.31.0) 이후 누적된 UR-0010 CLI 영어화 패치 3건(1.31.1~1.31.3)을 검증·통합해 npm 공개.** R-0011 정책의 23번째 stable minor. 잔여 영어화 표면 4종(install-safety / constraints / capabilities / team reminder)을 라벨+카탈로그 데이터까지 완전 영어화. 한국어 우선 기본은 그대로.
6
+
7
+ ### 이번 minor 통합 (1.31.1~1.31.3)
8
+ - **🌐 install-safety 영어화 (1.31.1)**: `install-safety`(설치 안전 프로필) 출력 영어 opt-in — 프로필/의존성/install-script/offline/safeInstall/hardeningNote. 셸-무관 가드(`npx --yes`/PowerShell/no `npm_config_` prefix) 양 언어 보존.
9
+ - **🌐 constraints 영어화 (1.31.2)**: `constraints list/check/add` 라벨 + `lib/catalogs.js` `_DEFAULT_PLATFORM_CONSTRAINTS` 6 플랫폼 한국어 detail 9종 `detailEn` + `_matchConstraints(…, lang)` suggestion 영어. en `list` 에서 한글-only alias(`결제`)는 표시 숨김(매처는 유지 → 매칭 무회귀).
10
+ - **🌐 capabilities + team reminder 영어화 (1.31.3)**: `capabilities`(권한·보안 표면 공개) 라벨/원칙/principles + `CAPABILITY_SURFACE` 6표면 `descEn`/`optOutEn` + `POWERFUL_COMMANDS` 7 `noteEn`(보안 disclosure 정확 번역). `_teamHandoffReminders(…, lang)` 본문(`N member(s)`/`review needed`/`preview`) + handoff `_uiLang` 전달로 전체 배선 완성.
11
+ - **공통 패턴**: 카탈로그 데이터(detailEn/descEn/noteEn)까지 영어화해 "반쪽 영어(완전성 과장)" 회피 · 순수 함수 optional `lang` 인자(기본 ko, 기존 호출 무회귀) · ko 기본 verbatim 보존.
12
+
13
+ ### 검증 (회귀 0)
14
+ - **selftest 257** (constraints/capability catalog 단일출처 + `_matchConstraints`/`_teamHandoffReminders` 행위 가드에 i18n 추가 — `*En` 존재·무한글 + ko 보존).
15
+ - **E2E 375** (B(1.31.1) install-safety en · B(1.31.2) constraints en · B(1.31.3) capabilities+team handoff 전체배선 — 한글 0 + ko 보존 행위 가드).
16
+ - **stable minor** — npm 공개 + annotated tag(Stable) + GitHub release `--latest` + npm dist-tag `stable`. 게시본 클린룸 재실증(install-safety/constraints/capabilities/team en 4표면).
17
+ - bin+package.json 동시 bump + 일치 가드 통과.
18
+
19
+ ### 잔여 (UR-0010 백로그)
20
+ - `commands` 카탈로그(~85 desc, 큰 표면·다회차) · init en seed 템플릿(큰 표면).
21
+
22
+ ## 1.31.3 — 2026-06-16 — 🌐 capabilities(권한·보안 표면) + team reminder 영어화 (UR-0010)
23
+
24
+ **🌐 `leerness capabilities`(권한·보안 표면 공개, 보안 투명성 플래그십) + handoff 팀 스케줄 reminder 본문 영어 opt-in.** UR-0010 잔여 표면 2종. 라벨뿐 아니라 카탈로그 데이터(표면 desc/opt-out, powerful 명령 note)까지 영어화. 한국어 기본 보존.
25
+
26
+ ### 변경 (UR-0010)
27
+ - **capabilities 완전 영어화**: `capabilitiesCmd` 에 `_uiLang`/`_t` 도입 — 헤더·원칙·섹션 라벨(권한 표면/주의 명령) + `--json` principles 영어화. `lib/catalogs.js` `CAPABILITY_SURFACE` 6표면에 `descEn`/`optOutEn`, `POWERFUL_COMMANDS` 7건에 `noteEn` 추가(보안 disclosure 정확 번역). en 렌더는 `descEn||desc` 폴백, catalog 구조·소비처 무변경.
28
+ - **team reminder 본문 영어화**: `_teamHandoffReminders(teams, lang)` 에 optional `lang` 추가 — `N명`→`N member(s)`(단복수) · `검수필요`→`review needed` · `미리보기`→`preview`. 기본 ko(1-arg 호출 무회귀). handoff 호출부가 `_uiLang(root)` 전달 → 헤더(1.30.5 기영어화)+본문 라인 전체 배선 완성.
29
+
30
+ ### 검증 (회귀 0)
31
+ - **selftest 257**: 기존 catalog 단일출처/`_teamHandoffReminders` 행위 가드에 i18n 추가(6표면 descEn/optOutEn·7 noteEn 영어+무한글 · team en 단복수/검수/preview + ko 보존).
32
+ - **행위**: `capabilities --language en` 한글 0 + 영어 표면 desc/note/principles · ko 보존 · `--json --language en` principles 영어 · `handoff --language en` 팀 라인 영어(2 members/review needed/preview) · ko 라인 보존(2명/검수필요/미리보기) — handoff 전체 배선 실증.
33
+ - **E2E 374→375**: 새 가드 B(1.31.3).
34
+ - patch(1.31.3) — npm 미배포(R-0011). bin+package.json 동시 bump + 일치 가드 통과.
35
+
36
+ ### 잔여 (UR-0010 백로그)
37
+ - `commands` 카탈로그(~85 desc, 큰 표면·다회차) · init en seed 템플릿(큰 표면).
38
+
39
+ ## 1.31.2 — 2026-06-16 — 🌐 constraints 출력 영어화 (UR-0010)
40
+
41
+ **🌐 `leerness constraints`(플랫폼/API 제약 사전 체크) 출력을 영어 opt-in 완전화.** UR-0010 CLI 영어화 잔여 표면. 라벨뿐 아니라 카탈로그 데이터(제약 detail)까지 영어화해 반쪽 영어(완전성 과장)를 회피. 한국어 기본 보존.
42
+
43
+ ### 변경 (UR-0010)
44
+ - **constraints list/check/add 라벨 영어화**: "매칭된 플랫폼 없음" · "제안" · "N개 플랫폼 매칭 — 제약 사전 확인 필요" · "구현 전 위 제약 반영 설계 권장" · "platform 갱신" 을 `_t(ko,en)` 으로. `constraintsCmd` 에 함수레벨 `_L`/`_t` 도입(list/check/add 공유, 기존 help 블록 중복 제거).
45
+ - **카탈로그 detail 영어화(데이터)**: `lib/catalogs.js` `_DEFAULT_PLATFORM_CONSTRAINTS` 6 플랫폼의 한국어 제약 detail 9종에 `detailEn` 추가(stripe/openai/anthropic/github/discord/twitter). en 출력 시 `detailEn`, 없으면 `detail`(영어 원문) 사용. catalog 매칭 로직·구조 무변경(추가 필드).
46
+ - **suggestion 영어화**: `lib/pure-utils.js` `_matchConstraints(catalog, text, lang)` 에 optional `lang`('en') 추가 — generic API 키워드 no-match 제안을 영어로. 기본 ko(2-arg 호출 무회귀). `_checkRequestConstraints(root, text, lang)` 가 `_L` 전달.
47
+ - **alias 표시 정합**: en `list` 에서 한글-only alias(예: stripe 의 `결제`)는 표시에서 숨김(매처로는 catalog 에 유지 → 한국어 입력 매칭 무회귀).
48
+
49
+ ### 검증 (회귀 0)
50
+ - **selftest 257**: 기존 constraints catalog/`_matchConstraints` 분리 가드에 i18n 행위 추가(stripe `detailEn` 존재+무한글 · en suggestion 무한글+비공백 · ko suggestion 한글 유지).
51
+ - **행위**: `constraints list/check --language en` 한글 0 + 영어 detail/라벨/suggestion · ko 기본 보존(필수/별도 detail) · 한국어 alias(`결제`) 매칭 무회귀(--json matched stripe).
52
+ - **E2E 373→374**: 새 가드 B(1.31.2).
53
+ - patch(1.31.2) — npm 미배포(R-0011). bin+package.json 동시 bump + 일치 가드 통과.
54
+
55
+ ### 잔여 (UR-0010 백로그)
56
+ - `commands` 카탈로그(~85 desc, 큰 표면) · 팀 reminder 본문 · init en seed 템플릿.
57
+
58
+ ## 1.31.1 — 2026-06-16 — 🌐 install-safety 출력 영어화 (UR-0010)
59
+
60
+ **🌐 `leerness install-safety`(설치 안전 프로필) 출력을 영어 opt-in.** UR-0010 CLI 영어화 잔여 표면. 한국어 기본 보존.
61
+
62
+ ### 변경 (UR-0010)
63
+ - **install-safety 출력 영어화**: 프로필 헤더 · 버전/Node · 런타임 의존성(0 공급망 노출) · install-time 스크립트 · offline-first 동작 · 안전 설치 워크플로 + safeInstall 주석 + hardeningNote(셸별 가드)를 `t(ko,en)` 으로. 블록 로컬 `t()`/`_uiLang(arg('--path'))`. ko verbatim 보존.
64
+ - **셸-무관 가드 양 언어 보존(1.9.397/UR-0098)**: en 출력에서도 `safeInstall` 의 `npx --yes`(≥2) + `hardeningNote` 의 `PowerShell` 분기 + `npm_config_` POSIX prefix 부재 유지(셸-무관 레시피 회귀 0).
65
+
66
+ ### 검증 (회귀 0)
67
+ - **selftest 257** (기존 install-safety 0-deps/0-script 사실 가드 + 셸-무관 레시피 가드 무회귀 — 기본 ko 유지).
68
+ - **행위**: `install-safety --language en` 영어(한글 0, Node 탐지) · `install-safety` ko 보존 · `--json --language en` 에서 npx --yes ×2 + PowerShell + no npm_config prefix.
69
+ - **E2E 372→373**: 새 가드 B(1.31.1).
70
+ - patch(1.31.1) — npm 미배포(R-0011). bin+package.json 동시 bump + 일치 가드 통과.
71
+
72
+ ### 잔여 (UR-0010 백로그)
73
+ - `commands` 카탈로그(~85 desc, 큰 표면) · `constraints` · 팀 reminder 본문 · init en seed 템플릿.
74
+
75
+ ## 1.31.0 — 2026-06-16 — 🛡️ [안정화/Stable] 14th리뷰 7/7 + 하위 프로젝트(detect/adopt) 안정 minor
76
+
77
+ **🛡️ 안정화(Stable) minor — 14번째 외부 리뷰 7건 전부 수정 + 사용자 명시 하위 프로젝트 기능을 npm 공개.** 직전 minor(1.30.0) 이후 누적된 패치 5건(1.30.1~1.30.5)을 검증·통합해 배포. R-0011 정책의 22번째 stable minor. 한국어 우선 기본은 그대로.
78
+
79
+ ### 이번 minor 통합 (1.30.1~1.30.5)
80
+ - **🔒 보안 정직성 (1.30.1, 14th리뷰 F1+F2)**: `audit`/`check` 가 소스에 커밋된 시크릿을 `_collectSecretFindings` 콘텐츠 스캔으로 **failure 승격**(scan secrets 와 일관, gitignored 는 FP 0). handoff `🔒 보안 요약` 섹션이 `.env` 없어도 **커밋 시크릿 노출**(파일 위치만, 값 미출력).
81
+ - **🔗 하위 프로젝트 부모 자산: 탐지 (1.30.2, 사용자 명시 #157)**: `leerness parent detect [--json]` — 상위 leerness 부모 탐지(read-only). handoff 헤드라인 `🔗 부모 프로젝트 (N 자산·미적용)`. 외부AI(codex)+Claude(Plan) 교차검토로 **방향 C "탐지+게이트"** 결정(부모 자산 재활용은 사용자 결정 게이트).
82
+ - **🔗 하위 프로젝트 부모 자산: 적용 (1.30.3, #158)**: `leerness parent adopt [--select] [--apply]` — dry-run 기본, `--apply`(사용자 명시) 시에만 자식-로컬 `inherited-from-parent.md`+`PARENT_LINK.json` 기록. **자식 design-system.md 무변경**(비파괴). handoff 헤드라인 adopt 상태 반영.
83
+ - **🧹 cli-ux 일관성 (1.30.4, 14th리뷰 F5+F6+F7)**: decision/lesson **dedup**(task/rule 일관) · rule/lesson 빈입력 **--json 구조화**(exit1) · bogus subcommand **잘못된 토큰 명시**.
84
+ - **🌐 i18n (1.30.5, 14th리뷰 F3+F4)**: `--language en` handoff 본문 4블록(워크플로 가이드/메모리 변동/ScheduleWakeup/팀 스케줄) + verify-claim/optimism-check 에러 영어화.
85
+ - **🐛 인프라**: `VERSION === package.json` selftest 가드(한쪽만 bump 실수 2초 차단) · e2e flake 하드닝(dispatch/banner timeout 10s→30s) · 윈도형 소스가드 확대.
86
+
87
+ ### 검증 (회귀 0)
88
+ - **selftest 254→257** (parent detect/adopt + 버전정합 + 보안/cli-ux/i18n 가드).
89
+ - **E2E 368→372** — 신규 행위가드: B(1.30.1) 보안정직성 · B(1.30.2) parent detect · B(1.30.3) parent adopt 비파괴 · B(1.30.4) cli-ux · i18n ⑫(handoff 본문/verify-claim).
90
+ - minor(1.31.0) — npm 배포(R-0011 stable) + annotated tag(Stable) + GitHub release(latest) + 게시본 클린룸 재실증.
91
+
92
+ ### 🎉 14번째 외부 멀티모델 리뷰 7/7 완료
93
+ bounded 3-에이전트 리뷰 → 맹신 X 7/7 재현검증 → F1~F7 전부 수정·배포. 리뷰→검증→백로그→수정의 전체 사이클 완주.
94
+
95
+ ### 잔여 (UR-0010 백로그)
96
+ - 팀 reminder 본문 · capabilities/commands/constraints/install-safety · init en seed 템플릿.
97
+
98
+ ## 1.30.5 — 2026-06-16 — 🌐 handoff 본문 i18n + verify-claim 에러 영어화 (14th 외부리뷰 F3+F4) — 14th 리뷰 7/7 완료
99
+
100
+ **🌐 14번째 외부 리뷰 마지막 2건(F3 P2 + F4 P3) 수정 → 14th 리뷰 7건 전부 소진.** `--language en` 에서 handoff 본문이 한국어 라벨을 누출하던 것 + verify-claim 미입력 에러 한국어를 영어화.
101
+
102
+ ### 변경 (14th 외부리뷰 F3+F4)
103
+ - **🌐 F3 (P2) handoff 본문 en 누출 영어화**: 매 핸드오프에 붙던 한국어 런타임 블록 4종을 영어 opt-in. (1) **세션 워크플로 6단계** 가이드(헤더+6단계+끄기 안내), (2) **🆕 최근 24h 메모리 변동**(라벨+`plan: 변경됨`+상세), (3) **⏰ ScheduleWakeup** 감지(miss 강한의심/지연/cycle 정상/fallback 4 분기 + 단위 분·시간·일), (4) **🤝 에이전트 팀 스케줄** 헤더+안내. 각 블록은 headline `t()` 스코프 밖이라 블록 로컬 `t()`/`_t()` 정의(1.29.1 교훈). 한국어 verbatim 보존.
104
+ - **🌐 F4 (P3) verify-claim/optimism-check 미입력 에러 영어화**: `verify-claim <T-ID> 필요. 예: …`(+쌍둥이 `optimism-check`) 를 `_uiLang(root)` 분기로 영어(`<T-ID> required. ex: …`). plain + `--json` 모두.
105
+
106
+ ### 검증 (회귀 0)
107
+ - **selftest 257** — 단, F4 가 `missing_args` 라인을 en/ko 로 늘려 1.9.400 소스가드의 `{0,400}` 윈도가 `not_found` 에 못 미쳐 1건 실패 → **윈도 `{0,700}` 확대로 복구**(라인 길이 늘 때 윈도형 소스가드가 깨지는 패턴, 즉시 적발·수정).
108
+ - **행위(맹신 X)**: `handoff --language en` 워크플로 가이드(4줄 영어, 한글 0) + 메모리 변동 영어 · `handoff` ko 보존 · verify-claim/optimism-check en 영어(`required. ex:`) + ko 보존(`필요. 예:`). OVERALL PASS.
109
+ - **E2E 372/372**: 기존 i18n 행위 케이스에 가드 ⑫ 확장(워크플로 가이드 + verify-claim en/ko) — 케이스 추가가 아닌 어서션 확장이라 총수 유지.
110
+ - patch(1.30.5) — npm 미배포(R-0011). bin+package.json 동시 bump + 일치 가드 통과.
111
+
112
+ ### 잔여 (UR-0010 백로그)
113
+ - 팀 스케줄 reminder 본문(pure-utils `_teamHandoffReminders`, 팀 정의 시만 노출) · capabilities/commands/constraints/install-safety · init en seed 템플릿.
114
+
115
+ ### 🎉 14th 외부리뷰 7/7 완료
116
+ F1/F2 보안정직성(1.30.1) · F3/F4 i18n(1.30.5) · F5/F6/F7 cli-ux(1.30.4) — 14번째 외부 멀티모델 리뷰의 재현·확인된 7 발견 전부 수정 완료.
117
+
118
+ ## 1.30.4 — 2026-06-16 — cli-ux 일관성: add류 dedup + 빈입력 --json + bogus subcommand (14th 외부리뷰 F5+F6+F7)
119
+
120
+ **🧹 14번째 외부 리뷰가 재현·확인한 cli-ux 일관성 3종(P2/P2/P3) 수정.** add 계열 명령들이 서로 다르게 동작하던 비일관성을 정리.
121
+
122
+ ### 변경 (14th 외부리뷰 F5+F6+F7)
123
+ - **F5 (P2) decision/lesson dedup**: `decision add` / `lesson save` 가 동일 입력을 무조건 append 해 중복 누적되던 것을 `task add`/`rule add` 와 일관되게 **dedup**(동일 title/text 존재 시 `exists (skip)`, `--force` 우회). `--json` 시 `{ok:true,skipped:true}`.
124
+ - **F6 (P2) rule/lesson 빈입력 --json 구조화**: `rule add "" --json` / `lesson save "" --json` 가 평문 `✗` 를 출력하던 것을 `decision/task add` 와 일관되게 **구조화 JSON**(`{ok:false,code:empty_title|empty_text}` + exit 1). dispatch 레이어에 failJson 가드 추가. 성공 경로 JSON 무회귀.
125
+ - **F7 (P3) bogus subcommand 토큰 명시**: `task frobnicate` / `rule frobnicate` 가 top-level `unknown_command: task/rule`(유효 부모명 오인) 를 출력하던 것을, **잘못된 토큰을 명시 + usage**(`알 수 없는 task 하위명령: frobnicate — leerness task list|add|...`) + exit 1 로 수정. decision 의 usage 출력과 일관.
126
+
127
+ ### 검증 (회귀 0)
128
+ - **selftest 257** (변동 없음 — 행위 변경이라 e2e 로 검증).
129
+ - **행위(맹신 X)**: F5 decision/lesson 1 copy + --force→2 · F6 rule/lesson 빈입력 구조화 JSON+exit1 & 성공경로 JSON 유지 · F7 task/rule 잘못된 토큰 명시+exit1 & 유효 하위명령 무회귀. 3/3 PASS.
130
+ - **E2E 371→372**: 새 가드 B(1.30.4).
131
+ - patch(1.30.4) — npm 미배포(R-0011). bin+package.json 동시 bump(1.30.2 교훈) + 일치 가드 통과.
132
+
133
+ ### 14th 외부리뷰 잔여
134
+ - **#156** F3+F4 i18n(handoff 본문 en 누출 + verify-claim 에러) — 다음 라운드. → 14th 리뷰 7건 중 F1/F2(1.30.1)+F5/F6/F7(1.30.4) 완료, F3/F4 남음.
135
+
136
+ ## 1.30.3 — 2026-06-16 — 🔗 parent adopt: 부모 자산 게이트형 적용 (dry-run 기본·비파괴) (#158 사용자명시)
137
+
138
+ **🔗 1.30.2(탐지)의 후속 — 부모 자산을 자식 프로젝트에 '적용'하는 단계.** 사용자 결정 게이트: dry-run 기본, `--apply`(사용자 명시 결정) 시에만 기록하며, **자식 원본 design-system.md 를 변형하지 않고 별도 참조 파일에만 기록(비파괴)**.
139
+
140
+ ### 변경 (#158)
141
+ - **`leerness parent adopt [--select <kinds>] [--apply] [--json]`** (신규):
142
+ - **dry-run 기본**(--apply 없음): 적용 후보(design-system/reuse-map/conventions)를 보여주고 **아무 파일도 쓰지 않음**. "실제 적용하려면 --apply" 안내.
143
+ - **`--apply`(사용자 명시 결정)**: 부모 자산을 자식-로컬 `.harness/inherited-from-parent.md`(참조) + `.harness/PARENT_LINK.json`(마커)로 기록. **자식 design-system.md/reuse-map.md 직접 변형 안 함**(additive·비파괴·되돌리기 쉬움).
144
+ - `--select design-system,reuse-map,conventions`(기본 all) — 적용 자산 선택.
145
+ - intent expand(1.9.213) 안전 모델 동일: Always-Off Opt-In + Dry-run 기본 + 명시 결정.
146
+ - **handoff 헤드라인 adopt 상태 반영**: 자식에 `PARENT_LINK.json` 있으면 `🔗 부모 프로젝트 (N 자산·adopted)`, 없으면 `·미적용`(en: adopted / not applied). 게이트 상태 가시화.
147
+ - commands 카탈로그 `parent detect|adopt` 갱신.
148
+
149
+ ### 검증 (회귀 0)
150
+ - **selftest 256→257** (adopt 게이트/비파괴 소스가드).
151
+ - **행위(맹신 X)**: dry-run→쓰기 0 · `--apply`→inherited+marker 기록 · **자식 design-system.md 무변경 확인** · linkOk · handoff 헤드라인 adopted(ko/en) · `--json applied:true`. OVERALL PASS.
152
+ - **E2E 370→371**: 새 가드 B(1.30.3) — dry-run 쓰기0 + --apply 비파괴 + handoff adopted + --json.
153
+ - patch(1.30.3) — npm 미배포(R-0011). VERSION bump bin+package.json 동시(1.30.2 교훈) + 일치 가드 통과.
154
+
155
+ ### #157~158 정리
156
+ - 하위 프로젝트 부모 자산: **탐지(1.30.2, read-only) → adopt(1.30.3, 게이트형 비파괴)** 2 슬라이스 완료. 외부 codex 리뷰는 비동기(미반영) — 도착 시 후속 보강.
157
+
158
+ ## 1.30.2 — 2026-06-16 — 🔗 하위 프로젝트: 상위 leerness 부모 탐지(read-only) — 자산 재사용은 사용자 결정 게이트 (#157 사용자명시)
159
+
160
+ **🔗 leerness 프로젝트 하위에 신규 하위프로젝트로 이어 개발할 때, 부모의 자산(design-system/reuse-map/컨벤션)을 어떻게 다룰지** 에 대한 사용자 명시 요청(#157). **외부AI(codex)+Claude(Plan) 교차검토**로 방향을 정하고 첫 슬라이스 구현.
161
+
162
+ ### 방향 결정 (교차검토 + 사용자 제약)
163
+ - 사용자 하드 제약: **부모 자산 재활용은 자동이 아니라 사용자 결정 게이트**(묻거나 지시에 따라 톤/스타일 적용).
164
+ - 검토 결과 → **방향 C "탐지 + 게이트"**: (A 자동상속)은 사용자 제약·leerness intent-expand 안전모델 위배, (B 독립 nested)는 재사용 목표 폐기. **C = 부모를 탐지해 AI 에게 '재사용 후보'로 노출만 하고, 실제 적용은 사용자 결정 게이트**(intent expand 1.9.213 / migrate-workspace-dir 1.9.211 과 동일 철학: 탐지·노출 ≠ 적용).
165
+
166
+ ### 변경 (첫 슬라이스 — read-only 탐지)
167
+ - **`_findParentWorkspace(root)` 순수 헬퍼**: root 상위로 올라가며 가장 가까운 leerness 부모(`.harness`/`.leerness`)를 탐지. FP/안전 가드: root 자신 제외 + 깊이 상한(8) + 실제 워크스페이스 디렉토리만. 부모 자산(design-system/reuse-map/AGENTS/skills) 존재 여부 + assetCount 반환.
168
+ - **`leerness parent detect [--json]`** (신규, read-only): 부모 경로 + 재사용 가능 자산 + **"⚠ 자동 적용 안 함 — 사용자 결정 게이트"** 경고 + 부모 design-system/reuse-find 포인터. 아무 파일도 쓰지 않음(`applied:false`). ko/en.
169
+ - **handoff 헤드라인 토큰 `🔗 부모 프로젝트 (N 자산·미적용)`** (en: `🔗 parent project (N assets, not applied)`): AI 가 세션 시작 즉시 부모 컨텍스트를 인지(재발명 방지)하되 '미적용' 표기로 게이트 명확. read-only.
170
+ - commands 카탈로그 등재(표면 일관성).
171
+
172
+ ### 후속 (다음 슬라이스, 별도 라운드)
173
+ - **`leerness parent adopt --select tone|tokens|conventions --apply`** (dry-run 기본, 사용자 명시 confirm 시에만 적용): 부모 톤/스타일을 자식-로컬 `inherited-from-parent.md` + `PARENT_LINK` 마커로 기록(자식 design-system.md 직접 변형 X). intent expand 게이트 패턴 재사용.
174
+
175
+ ### 검증 (회귀 0)
176
+ - **selftest 254→256** (① parent detect 행위: 부모 탐지·assetCount·독립 null·read-only 소스마커 ② **VERSION ↔ package.json 일치 가드**).
177
+ - **행위**: subproject→부모탐지(4자산)·standalone→독립·`--json applied:false`·handoff 헤드라인 🔗(ko/en 미적용)·read-only(파일쓰기 0) 확인.
178
+ - **E2E 369→370**: 새 가드 B(1.30.2) — parent detect/--json/standalone-null/handoff-headline/read-only.
179
+ - **🐛 버전 불일치 자체수정 + 영구가드**: 이 라운드에서 `bin VERSION` 만 1.30.2 로 bump 하고 `package.json` 을 1.30.1 로 둔 실수 → 배너가 v1.30.2 인데 package.json 1.30.1 라 banner e2e 가 결정적 실패. 처음엔 flake 로 오인했으나 **격리 5회 재현(맹신 X)** 으로 결정적 실 버그임을 확인·수정. 재발 방지로 `VERSION === package.json.version` selftest 가드 추가(11분 e2e 대신 2초 차단).
180
+ - **e2e flake 하드닝(1.9.375 계열)**: agents dispatch(3 spawn)·--version --banner subprocess timeout 10s→30s — 전체 e2e 부하 하 간헐 빈-stdout 오판 방지(동작 무변경). dispatch 는 실제 flake, banner 는 위장한 실버그였음(위 항목).
181
+ - patch(1.30.2) — npm 미배포(R-0011, GitHub/CHANGELOG 누적).
182
+
183
+ > 교차검토 메모: Claude Plan 에이전트는 방향 C + 첫 슬라이스(탐지+헤드라인)를 권고. 외부 codex 에이전트 리뷰는 비동기 진행(완료 시 후속 adopt 슬라이스에 반영). 방향 C 는 사용자 제약·Plan·leerness 기존 안전모델이 모두 가리켜 overdetermined.
184
+
185
+ ## 1.30.1 — 2026-06-16 — 🔒 보안 정직성: audit/handoff 보안요약이 커밋된 시크릿 노출 (14th 외부리뷰 F1+F2)
186
+
187
+ **🔒 도구가 보안 상태를 정직하게 보고하도록 수정.** 14번째 외부 리뷰가 재현·확인한 정직성 갭 2건(P2): `audit`/handoff 보안요약이 소스에 커밋된 실 시크릿을 노출하지 못해, `scan secrets`(exit 1)와 모순되게 healthy 를 반환하던 문제. 정직성 테마(1.9.415/1.9.418/1.27.1 계열) 연장.
188
+
189
+ ### 변경 (14th 외부리뷰 F1+F2)
190
+ - **🔒 F1 — audit 커밋 시크릿 failure 승격**: `audit`/`check` 가 `_collectSecretFindings` 콘텐츠 스캔을 돌려 **committed 시크릿을 failure 로 승격**(healthy:false / exit 1) — `scan secrets` 와 일관. 기존엔 `.gitignore` 패턴/`.env` 동기화만 검사해, un-gitignored `.env` + 실 AWS/GitHub 키에 healthy:true/exit 0 을 반환(audit 기반 CI 게이트가 노출 시크릿을 통과)하던 갭. **gitignored 보관 시크릿은 committed 에서 제외 → FP 0**. 끄기: `--no-secret-scan`. (lib/audit.js, DI `_collectSecretFindings` 주입.)
191
+ - **🔒 F2 — handoff 보안요약이 committed 시크릿 노출**: `## 🔒 보안 요약` 섹션이 headline 의 `🚨 시크릿 N건` 과 일관되게 **커밋된 시크릿을 노출**. 기존엔 `.env`/`.gitignore` 만 검사 + `envExists` 단독 게이팅이라 `.env` 없으면 섹션 통째 생략(헤드라인은 시크릿 N건인데 상세 섹션 부재). 이제 committed 시크릿이 있으면 `.env` 없어도 섹션 표시 + 파일 위치(`file:line`) 노출(값 snippet 은 미출력 — handoff 로그로의 시크릿 유출 방지). ko/en 양쪽.
192
+
193
+ ### 검증 (회귀 0)
194
+ - **selftest 254/254** (audit 위임/FP-FN 가드 유지).
195
+ - **행위 검증**: F1 un-gitignored .env+실키 → audit exit 1/healthy:false(=scan 일관) · **FP 0**(gitignored .env+키 → healthy:true · 클린 → healthy:true) · F2 committed 시크릿(.env 없음) → 보안요약 섹션 노출(ko) + en 영어(섹션 한글 0, Node 탐지).
196
+ - **E2E i18n+보안가드 신규 B(1.30.1)**: F1 승격/FP0 + F2 ko/en 노출을 e2e 에 못박음. **368→369**.
197
+ - patch(1.30.1) — npm 미배포(R-0011, GitHub/CHANGELOG 누적).
198
+
199
+ ### 14th 외부리뷰 잔여 백로그 (다음 라운드)
200
+ - F5+F6+F7 cli-ux 일관성(decision/lesson dedup · rule/lesson 빈입력 --json 구조화 · bogus subcommand 토큰) · F3+F4 UR-0010 잔여 i18n(handoff 본문 en 누출 · verify-claim 에러).
201
+
3
202
  ## 1.30.0 — 2026-06-16 — 🛡️ [안정화/Stable] handoff 본문 i18n 4종 안정 minor
4
203
 
5
204
  **🛡️ 안정화(Stable) minor — handoff 본문 4블록 영어화 + i18n-coupling 감사 + 블록-스코프 t 회귀수정을 npm 공개.** 직전 minor(1.29.0) 이후 누적된 패치 4건(1.29.1~1.29.4)을 검증·통합해 배포. R-0011 정책의 21번째 stable minor. 한국어 우선 기본은 그대로.
package/README.md CHANGED
@@ -104,7 +104,7 @@ MIT
104
104
  <!-- leerness:project-readme:start -->
105
105
  ## Leerness Project Harness
106
106
 
107
- 이 프로젝트는 Leerness v1.30.0 하네스를 사용합니다. AI 에이전트는 작업 전 `leerness handoff`로 컨텍스트를 적재하고, 작업 후 `leerness check`/`leerness audit`/`leerness session close`를 수행해야 합니다.
107
+ 이 프로젝트는 Leerness v1.32.0 하네스를 사용합니다. AI 에이전트는 작업 전 `leerness handoff`로 컨텍스트를 적재하고, 작업 후 `leerness check`/`leerness audit`/`leerness session close`를 수행해야 합니다.
108
108
 
109
109
  ### 정체성 — AI 에이전트 운영 레이어 (UR-0030)
110
110
 
@@ -158,7 +158,7 @@ leerness memory restore decision <date|title>
158
158
 
159
159
  ### MCP server (외부 AI 통합)
160
160
 
161
- Leerness v1.30.0는 stdio JSON-RPC MCP server를 내장합니다 — Claude Code · Cursor · Codex CLI 등 외부 AI에 **85개 도구**를 노출:
161
+ Leerness v1.32.0는 stdio JSON-RPC MCP server를 내장합니다 — Claude Code · Cursor · Codex CLI 등 외부 AI에 **85개 도구**를 노출:
162
162
 
163
163
  ```jsonc
164
164
  // 카테고리별
@@ -179,7 +179,7 @@ Leerness v1.30.0는 stdio JSON-RPC MCP server를 내장합니다 — Claude Code
179
179
  `<<autonomous-loop-dynamic>>` 신호만 보내면 AI가:
180
180
  1) 다음 라운드 후보 선정 → 2) 코드 변경 → 3) stress-v* 신규 작성 + 누적 회귀 → 4) e2e 219/219 → 5) npm pack + git tag + GitHub release → 6) main 자동 push (1.9.140+) → 7) session close → 8) 다음 라운드 예약.
181
181
 
182
- 현재 누적: **70 라운드 (1.9.40 → 1.30.0)** · 매 라운드 GitHub release/태그 생성 · _reports/는 비공개 보존.
182
+ 현재 누적: **70 라운드 (1.9.40 → 1.32.0)** · 매 라운드 GitHub release/태그 생성 · _reports/는 비공개 보존.
183
183
 
184
184
  ### 성능 가이드 (1.9.140 측정)
185
185
 
@@ -217,6 +217,6 @@ leerness release pack --close --auto-main-push
217
217
  - `.harness/session-handoff.md`: 다음 세션 인수인계 (자동 작성)
218
218
  - `.harness/lessons.md` / `decisions.md` / `rules.md`: 영구 메모리 (5 surface)
219
219
 
220
- Last synced by Leerness v1.30.0: 2026-06-16
220
+ Last synced by Leerness v1.32.0: 2026-06-16
221
221
  <!-- leerness:project-readme:end -->
222
222