leerness 1.9.91 → 1.9.127

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,1139 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.9.127 — 2026-05-20
4
+
5
+ **`leerness memory archive list` CLI + MCP 39번째 도구 `leerness_memory_archive_list`** — DELETE 5종 archive 통합 조회 (decisions/lessons/plan).
6
+
7
+ ### Added — `leerness memory archive list` CLI
8
+ - DELETE 5종 archive 파일 (`.harness/decisions.archive.md`, `lessons.archive.md`, `plan.archive.md`) 통합 조회
9
+ - 각 archive entry 파싱: `{ date, target, originalHeader }`
10
+ - `--surface decisions|lessons|plan` 필터 지원
11
+ - `--json` 옵션 — totals + 각 surface 별 entries
12
+ - archive 파일 없으면 안내 메시지
13
+
14
+ ### Added — MCP 39번째 도구 `leerness_memory_archive_list`
15
+ - 외부 AI 가 과거에 제거된 항목 회수 — 복원 후보 참조 / 의사결정 변경 흐름 추적.
16
+ - 인자: `{ surface?, path? }` (surface optional)
17
+
18
+ ### 사용 시나리오
19
+ 1. **복원 후보 회수**: "이전에 PostgreSQL 채택 결정 취소했었지? 어떤 게 있었나"
20
+ → 외부 AI: `leerness_memory_archive_list({ surface: "decisions" })` — 모든 제거된 결정 회수
21
+ 2. **의사결정 변경 패턴 분석**: 자주 변경되는 surface 의 빈도 추적
22
+ 3. **복구**: archive entry 참조 후 다시 `decision add` 로 재등록
23
+
24
+ ### MCP 도구 누계: 39 (1.9.126: 38 + leerness_memory_archive_list)
25
+
26
+ ## 1.9.126 — 2026-05-20
27
+
28
+ **`leerness plan remove <target>` CLI + MCP 38번째 도구 `leerness_plan_remove`** — milestone 블록 영구 제거 (archive 자동 보존). **Memory Surface DELETE 5종 완전 완성** 🎉
29
+
30
+ ### Added — `leerness plan remove <target>` CLI
31
+ - target: M-XXXX 또는 title substring (예: `plan remove M-0003`, `plan remove "alpha"`)
32
+ - 매칭된 milestone 블록 (`### M-XXXX. 제목 …`) 을 plan.md 에서 영구 제거
33
+ - 제거된 블록은 `.harness/plan.archive.md` 에 자동 보존 (복구 가능)
34
+ - **template 블록 자동 보호** (`### Template`, `### 템플릿` 등은 제거 대상에서 제외)
35
+ - 매칭 없을 시 fail (`매칭 milestone 없음`)
36
+ - 기존 `plan drop` (Out of Scope 표 추가, 소프트 폐기) 와는 별개. `plan remove` 는 하드 제거.
37
+
38
+ ### Added — MCP 38번째 도구 `leerness_plan_remove`
39
+ - 외부 AI 가 잘못 저장한 milestone 제거.
40
+ - 인자: `{ target (required), path? }`
41
+
42
+ ### 사용 시나리오
43
+ 사용자: "M-0007 마일스톤 잘못 등록했으니 제거해줘"
44
+ → 외부 AI: `leerness_plan_remove({ target: "M-0007" })` — plan.md 에서 제거, archive 보존
45
+
46
+ ### Memory Surface DELETE 5종 완전 완성 🎉
47
+ | Surface | DELETE 명령 | 라운드 |
48
+ |---|---|---|
49
+ | tasks (progress-tracker.md) | `task drop` | 1.9.107 |
50
+ | decisions.md | `decision drop` | 1.9.125 |
51
+ | rules.md | `rule remove` | (기존) |
52
+ | **plan.md** | **`plan remove`** | **1.9.126 ✓** |
53
+ | lessons.md | `lesson drop` | 1.9.124 |
54
+
55
+ 전 Surface 가 CREATE/READ/DELETE 대칭 구조 완비.
56
+
57
+ ### MCP 도구 누계: 38 (1.9.125: 37 + leerness_plan_remove)
58
+
59
+ ## 1.9.125 — 2026-05-20
60
+
61
+ **`leerness decision drop <target>` CLI + MCP 37번째 도구 `leerness_decision_drop`** — 잘못 저장한 결정 제거 (archive 자동 보존).
62
+
63
+ ### Added — `leerness decision drop <target>` CLI
64
+ - target: date `YYYY-MM-DD` 또는 title substring
65
+ - 매칭된 결정 블록을 decisions.md 에서 제거
66
+ - 제거된 블록은 `.harness/decisions.archive.md` 에 자동 보존 (복구 가능)
67
+ - **template 블록 자동 보호** (`### Template` 등은 제거 대상에서 제외)
68
+ - 매칭 없을 시 fail
69
+
70
+ ### Added — MCP 37번째 도구 `leerness_decision_drop`
71
+ - 외부 AI 가 잘못 저장한 결정 제거.
72
+ - 인자: `{ target (required), path? }`
73
+
74
+ ### 사용 시나리오
75
+ 사용자: "어제 PostgreSQL 결정 취소하고 MySQL로 다시 검토하자"
76
+ → 외부 AI:
77
+ 1. `leerness_decision_drop({ target: "PostgreSQL" })` — 기존 제거 (archive 보존)
78
+ 2. `leerness_decision_add({ title: "MySQL 채택", reason: "...", ... })` — 새 결정 등록
79
+
80
+ ### Memory CRUD 진화 (decisions)
81
+ | Operation | 라운드 |
82
+ |---|---|
83
+ | CREATE (add) | 1.9.108 |
84
+ | READ (list) | 1.9.118 |
85
+ | **DELETE (drop)** | **1.9.125 ✓** |
86
+
87
+ ### Memory Surface Archive 패턴 (2종)
88
+ - `lessons.archive.md` (1.9.124)
89
+ - `decisions.archive.md` (1.9.125)
90
+
91
+ ### MCP 도구 수: 36 → 37개
92
+
93
+ ### Verified
94
+ - stress-v70 — decision drop (date/title) + archive 보존 + template 보호 + MCP + 누적 회귀.
95
+ - e2e 219/219 PASS.
96
+
97
+ ---
98
+
99
+ ## 1.9.124 — 2026-05-20
100
+
101
+ **`leerness lesson drop <target>` CLI + MCP 36번째 도구 `leerness_lesson_drop`** — 잘못 저장한 lesson 제거 (archive 자동 보존).
102
+
103
+ ### Added — `leerness lesson drop <target>` CLI
104
+ - 새 명령: `leerness lesson drop "2026-05-20"` (date 매칭) 또는 `leerness lesson drop "JWT"` (text substring 매칭)
105
+ - 매칭된 lesson 블록을 lessons.md 에서 제거
106
+ - 제거된 블록은 `.harness/lessons.archive.md` 에 자동 보존 (복구 가능)
107
+ - 매칭 없을 시 `fail` (exit 1)
108
+
109
+ ### Added — MCP 36번째 도구 `leerness_lesson_drop`
110
+ - 외부 AI 가 잘못 저장한 lesson 제거.
111
+ - 인자: `{ target (required), path? }`
112
+ - target은 date 또는 text substring 둘 다 매칭 (정확 date 우선)
113
+
114
+ ### 사용 시나리오
115
+ 사용자: "어제 잘못 저장한 lesson 지워줘. webhook 관련이었어"
116
+ → 외부 AI: `leerness_lesson_drop({ target: "webhook" })`
117
+ → "lesson dropped: 1건 (보존: .harness/lessons.archive.md)"
118
+
119
+ ### Memory CRUD 확장
120
+ | 영역 | CREATE | READ | UPDATE | DELETE |
121
+ |---|---|---|---|---|
122
+ | Tasks | task_add | task_export | task_update | task_drop |
123
+ | Decisions | decision_add | decision_list | — | — |
124
+ | Rules | rule_add | rule_list | (status pause/resume) | rule_remove |
125
+ | Plan | plan_add | plan_list | — | — |
126
+ | **Lessons** | lesson_save | lesson_list | — | **lesson_drop ✓ (1.9.124)** |
127
+
128
+ ### MCP 도구 수: 35 → 36개
129
+
130
+ ### Verified
131
+ - stress-v69 — lesson drop (date/text) + archive 보존 + MCP + 누적 회귀.
132
+ - e2e 219/219 PASS.
133
+
134
+ ---
135
+
136
+ ## 1.9.123 — 2026-05-20
137
+
138
+ **`leerness health --json` 응답에 `memorySurface` 필드 통합** — handoff (1.9.115) / session close (1.9.122) / memory status (1.9.114) 와 일관성 완성.
139
+
140
+ ### Added — `health --json` 새 필드 `memorySurface`
141
+ ```json
142
+ {
143
+ "root": "...",
144
+ "generatedAt": "...",
145
+ "checks": { "drift": ..., "security": ..., "skills": ..., "usage": ..., "tasks": ... },
146
+ "issues": [...],
147
+ "healthy": true,
148
+ "memorySurface": {
149
+ "tasks": { "inProgress": 2, "total": 12, "byStatus": {...} },
150
+ "decisions": { "count": 4 },
151
+ "rules": { "active": 2, "total": 2 },
152
+ "plan": { "milestones": 3 },
153
+ "lessons": { "count": 7 },
154
+ "summary": "T2/D4/R2/P3/L7"
155
+ }
156
+ }
157
+ ```
158
+
159
+ ### 1.9.123 — JSON 명령 4종 일관성
160
+ | 명령 | memorySurface 필드 | 라운드 |
161
+ |---|---|---|
162
+ | `handoff --json` | ✓ | 1.9.115 |
163
+ | `memory status --json` | ✓ (상세 + latest) | 1.9.114 |
164
+ | `session close --json` | ✓ | 1.9.122 |
165
+ | **`health --json`** | **✓** | **1.9.123 ✓** |
166
+
167
+ 이제 외부 AI 가 어떤 JSON 명령을 호출해도 동일한 `memorySurface` 구조로 5종 메모리 상태 회수.
168
+
169
+ ### Verified
170
+ - stress-v68 — health --json memorySurface + summary 포맷 + 카운트 + MCP + 누적 회귀.
171
+ - e2e 219/219 PASS.
172
+
173
+ ---
174
+
175
+ ## 1.9.122 — 2026-05-20
176
+
177
+ **`session close --json` 응답에 `memorySurface` 필드 통합** — handoff --json (1.9.115) 패턴을 session close 에도 적용.
178
+
179
+ ### Added — `session close --json` 새 필드 `memorySurface`
180
+ 이미 1.9.103 에서 추가된 `session close --json` 응답 구조에 `memorySurface` 통합:
181
+ ```json
182
+ {
183
+ "version": "1.9.122",
184
+ "closedAt": "...",
185
+ "sessionNumber": 62,
186
+ "taskCounts": { ... },
187
+ "rules": [...],
188
+ "skillCandidates": [...],
189
+ "drift": { ... },
190
+ "topCommands": [...],
191
+ "mcpStats": { ... },
192
+ "workspacePeers": 29,
193
+ "memorySurface": {
194
+ "tasks": { "inProgress": 2, "total": 12, "byStatus": {...} },
195
+ "decisions": { "count": 4 },
196
+ "rules": { "active": 2, "total": 2 },
197
+ "plan": { "milestones": 3 },
198
+ "lessons": { "count": 7 },
199
+ "summary": "T2/D4/R2/P3/L7"
200
+ }
201
+ }
202
+ ```
203
+
204
+ ### 1.9.122 의 가치
205
+ - 외부 AI (Claude Code / Hermes) 가 session 마감 시 단일 `session close --json` 호출로:
206
+ - 기존: 마감 통계 + drift + skill 후보
207
+ - **추가: 5종 메모리 영구화 상태 (Memory Write Surface 카운트)**
208
+ - handoff (1.9.115) 와 session close (1.9.122) 모두 동일 `memorySurface` 패턴.
209
+ - MCP `leerness_session_close` 응답도 자동 갱신.
210
+
211
+ ### Verified
212
+ - stress-v67 — session close --json memorySurface 필드 + 카운트 정확성 + summary 포맷 + MCP + 누적 회귀.
213
+ - e2e 219/219 PASS.
214
+
215
+ ---
216
+
217
+ ## 1.9.121 — 2026-05-20
218
+
219
+ **handoff 6번째 자동 회수 라인 — `🆕 최근 24h 메모리 변동`** (5종 surface 24h 내 추가 항목 알림).
220
+
221
+ ### Added — handoff 자동 회수 6단째
222
+ handoff 호출 시 다음 라인 자동 추가 (24h 내 메모리 surface 변경이 있을 때만):
223
+ ```
224
+ 🆕 최근 24h 메모리 변동 (1.9.121): decision +2 · lesson +1 · rule +1 · plan: 변경됨
225
+ → 상세: leerness memory status --json
226
+ ```
227
+
228
+ ### 조건
229
+ 다음 영역의 mtime 이 24h 내 또는 today() 날짜 항목이 있으면 표시:
230
+ - **task** — progress-tracker.md `Updated:` 컬럼 24h 내 row 카운트
231
+ - **decision** — decisions.md `### YYYY-MM-DD` 헤더 중 오늘 날짜
232
+ - **lesson** — lessons.md `### YYYY-MM-DD` 헤더 중 오늘 날짜
233
+ - **plan** — plan.md mtime 24h 내 (변경됨 표시)
234
+ - **rule** — rules.md mtime 24h 내 + `added: today()` rule 카운트
235
+
236
+ ### 끄기
237
+ - `--no-mem-delta`
238
+ - `LEERNESS_NO_MEM_DELTA=1`
239
+ - `--quiet` 또는 `--compact` 모드에서는 자동 비활성
240
+
241
+ ### 1.9.121 의 가치
242
+ - AI 에이전트가 이전 세션 종료 후 어떤 메모리가 추가됐는지 **즉시 인지**.
243
+ - 사용자 워크플로: "어제 등록한 결정과 통찰이 이번 세션 시작 시 보이게" → 자동 달성.
244
+ - 1.9.113 (헤드라인 mem 카운트) 와 보완 — 카운트가 아니라 **delta** 표시.
245
+
246
+ ### handoff 자동 회수 6단 완성
247
+ | # | 라인 | 라운드 |
248
+ |---|---|---|
249
+ | 1 | 🧠 lessons 자동 재상기 | 1.9.56/67 |
250
+ | 2 | 🎯 매칭되는 skill 자동 추천 | 1.9.67 |
251
+ | 3 | 📒 이전 skill match 이력 | 1.9.69 |
252
+ | 4 | 🧩 brainstorm 자동 hits | 1.9.88 |
253
+ | 5 | 📊 통합 헤드라인 (mem T/D/R/P/L) | 1.9.81/93/113 |
254
+ | **6** | **🆕 최근 24h 메모리 변동** | **1.9.121 ✓** |
255
+
256
+ ### Verified
257
+ - stress-v66 — handoff 6단 라인 + delta 카운트 정확성 + --no-mem-delta 비활성 + 누적 회귀.
258
+ - e2e 219/219 PASS.
259
+
260
+ ---
261
+
262
+ ## 1.9.120 — 2026-05-20 🏆 50 라운드 자율 모드 마일스톤
263
+
264
+ **50 라운드 자율 모드 누적 마일스톤 보고서** (`_reports/AUTONOMOUS_ROUNDS_1.9.70-1.9.119.md`) + stress-v65 종합.
265
+
266
+ ### Internal — 비공개 종합 보고서
267
+ - `_reports/AUTONOMOUS_ROUNDS_1.9.70-1.9.119.md` — **50 라운드** 종합 분석 (1.9.70 ~ 1.9.119)
268
+ - MCP 도구 진화 (10 → 35, 25개 추가)
269
+ - **Memory Surface 5종 R/W 완전 대칭** (WRITE 5종 + LIST READ 5종 = 10 surfaces)
270
+ - JSON 옵션 18종 누적
271
+ - 보안 4중 가드 + audit 11 kind
272
+ - 디버그 기록 8건 (1차 실패 → PASS 회복)
273
+ - 성능 측정 (11개 명령 median)
274
+ - 사용자 명시 정책 7개 모두 ✓
275
+
276
+ ### 🏆 마일스톤 진화 요약
277
+ - 1.9.89: 19 라운드 보고서
278
+ - 1.9.97: 27 라운드 보고서
279
+ - 1.9.100: 🏆 30 라운드 + 100번째 패치
280
+ - 1.9.110: 🎉 MCP 30 도구 + Memory WRITE 5종
281
+ - 1.9.111: 41 라운드 보고서
282
+ - 1.9.119: 🎯 Memory READ 5종 완성
283
+ - **1.9.120: 🏆 50 라운드 마일스톤**
284
+
285
+ ### Verified — stress-v65 종합 (1.9.70~119 핵심 기능 회귀)
286
+ - Memory Surface 5종 R/W 모두 PASS
287
+ - MCP 35 도구 노출 ✓
288
+ - handoff 5단 자동 회수 + 헤드라인 ✓
289
+ - 보안 4중 가드 ✓
290
+ - e2e 219/219 PASS
291
+
292
+ ### Badge
293
+ - README `autonomous-rounds-50` (blueviolet 강조)
294
+
295
+ ---
296
+
297
+ ## 1.9.119 — 2026-05-20 🎯 Memory Surface READ 5종 완전 완성
298
+
299
+ **`leerness plan list [--json]` + MCP 35번째 도구 `leerness_plan_list`** — plan.md milestone 전체 조회 (Status/Progress/Tasks 체크박스 포함).
300
+
301
+ ### Added — `leerness plan list [--json]`
302
+ - 새 CLI: `.harness/plan.md` 의 모든 milestone (M-XXXX) 조회.
303
+ - 출력: `{ id, title, status, progress, tasks: [{ done, text }] }`
304
+ - JSON: `{ version, root, total, milestones[] }`
305
+ - Tasks 체크박스 (`- [ ]` / `- [x]`) 자동 파싱 → 완료/미완료 카운트.
306
+
307
+ ### Added — MCP 35번째 도구 `leerness_plan_list`
308
+ - 외부 AI 가 영구화된 milestone + Tasks 진행 상태 회수.
309
+ - 인자: `{ path? }`
310
+
311
+ ### 🎯 Memory Surface READ 5종 완전 완성
312
+ | 영역 | READ 명령 | 라운드 |
313
+ |---|---|---|
314
+ | Tasks | task export | 1.9.60 |
315
+ | Rules | rule list | 1.9.109 |
316
+ | Lessons | lesson list | 1.9.117 |
317
+ | Decisions | decision list | 1.9.118 |
318
+ | **Plan** | **plan list** | **1.9.119 ✓** |
319
+
320
+ Memory Surface 5종은 이제 WRITE (1.9.105~112) + LIST READ (1.9.60~119) 패턴 완전 대칭:
321
+
322
+ | 영역 | WRITE | LIST READ |
323
+ |---|---|---|
324
+ | Tasks | task_add/update/drop (1.9.105~107) | task_export (1.9.60) |
325
+ | Decisions | decision_add (1.9.108) | decision_list (1.9.118) |
326
+ | Rules | rule_add (1.9.109) | rule_list (1.9.109) |
327
+ | Plan | plan_add (1.9.110) | **plan_list (1.9.119)** |
328
+ | Lessons | lesson_save (1.9.112) | lesson_list (1.9.117) |
329
+
330
+ ### MCP 도구 수: 34 → 35개
331
+ ### JSON 옵션 누적: 17 → 18종
332
+
333
+ ### Verified
334
+ - stress-v64 — plan list CLI + --json + status/progress/tasks 파싱 + MCP + 누적 회귀.
335
+ - e2e 219/219 PASS.
336
+
337
+ ---
338
+
339
+ ## 1.9.118 — 2026-05-20
340
+
341
+ **`leerness decision list [--json]` 새 명령 + MCP 34번째 도구 `leerness_decision_list`** — decisions.md 전체 조회 + 메타데이터.
342
+
343
+ ### Added — `leerness decision list [--json]`
344
+ - 새 CLI: `.harness/decisions.md` 의 모든 설계 결정 조회.
345
+ - 출력: `{ date, title, decision, reason, alternatives, impact }`
346
+ - JSON: `{ version, root, total, decisions[] }`
347
+ - `_extractDecisionBlocks` 사용 → template/code 블록 자동 제외.
348
+
349
+ ### Added — MCP 34번째 도구 `leerness_decision_list`
350
+ - 외부 AI 가 영구화된 설계 결정 + 메타데이터 (Reason/Alternatives/Impact) 전체 회수.
351
+ - 인자: `{ path? }`
352
+
353
+ ### 사용 시나리오
354
+ 사용자: "지금까지 등록된 결정들 알려줘"
355
+ → 외부 AI: `leerness_decision_list({ path: "." })`
356
+ → `[{ date, title, reason, alternatives, impact }, ...]` 전체 조회
357
+
358
+ ### Memory Surface READ 확장 (4종 모두 list 명령 존재)
359
+ | 영역 | READ 명령 | 라운드 |
360
+ |---|---|---|
361
+ | Tasks | task export | 1.9.60 |
362
+ | Rules | rule list | 1.9.109 |
363
+ | Lessons | lesson list | 1.9.117 |
364
+ | **Decisions** | **decision list** | **1.9.118 ✓** |
365
+
366
+ (Plan은 plan progress가 기존 존재 — milestone 진행률 보고)
367
+
368
+ ### MCP 도구 수: 33 → 34개
369
+ ### JSON 옵션 누적: 16 → 17종
370
+
371
+ ### Verified
372
+ - stress-v63 — decision list CLI + --json + 메타데이터 + MCP + 누적 회귀.
373
+ - e2e 219/219 PASS.
374
+
375
+ ---
376
+
377
+ ## 1.9.117 — 2026-05-20
378
+
379
+ **`leerness lesson list [--tag] [--json]` 새 명령 + MCP 33번째 도구 `leerness_lesson_list`** — lessons.md 전용 조회 + tag 필터.
380
+
381
+ ### Added — `leerness lesson list [--tag <tag>] [--json]`
382
+ - 새 CLI: `.harness/lessons.md` 의 모든 lesson 조회.
383
+ - 옵션:
384
+ - `--tag <tag>` — 특정 태그 필터 (lesson save 시 `--tag` 로 저장된 값)
385
+ - `--json` — 구조화 출력
386
+ - JSON 출력: `{ version, root, total, lessons: [{ date, text, tag }], tag? }`
387
+
388
+ ### Added — MCP 33번째 도구 `leerness_lesson_list`
389
+ - 외부 AI 가 영구화된 lesson 전체 회수.
390
+ - `leerness_lessons` 와 차이:
391
+ - `lessons`: review-evidence / decisions / task-log / lessons.md 다중 source fuzzy 매칭
392
+ - `lesson_list`: **lessons.md 전용** (사용자가 명시 save 한 lesson만) + tag 필터
393
+ - 인자: `{ path?, tag? }`
394
+
395
+ ### 사용 시나리오
396
+ 사용자: "지금까지 등록된 auth 관련 lesson 알려줘"
397
+ → 외부 AI: `leerness_lesson_list({ tag: "auth" })`
398
+ → `{ total: 3, lessons: [{ date, text, tag: "auth" }, ...] }`
399
+
400
+ ### Memory Surface READ 확장
401
+ | 영역 | READ | 라운드 |
402
+ |---|---|---|
403
+ | Tasks | task export | 1.9.60 |
404
+ | Decisions | (lessons fuzzy + memory status 최근) | 기존 |
405
+ | Rules | rule list | 1.9.109 |
406
+ | Plan | (handoff 컨텍스트) | 기존 |
407
+ | **Lessons** | **lesson list** | **1.9.117 ✓** |
408
+
409
+ ### MCP 도구 수: 32 → 33개
410
+ ### JSON 옵션 누적: 15 → 16종
411
+
412
+ ### Verified
413
+ - stress-v62 — lesson list CLI + --tag 필터 + --json + MCP + 누적 회귀.
414
+ - e2e 219/219 PASS.
415
+
416
+ ---
417
+
418
+ ## 1.9.116 — 2026-05-20
419
+
420
+ **`leerness brainstorm` 회수 범위에 lessons.md + plan.md milestone 통합** — Memory Write Surface 5종 ↔ brainstorm 완전 통합.
421
+
422
+ ### Added — brainstorm 회수 범위 확장
423
+ - 기존 hits 영역: decisions / skills / tasks / rules / evidence / skillHistory / taskLogFails
424
+ - **추가 hits**:
425
+ - `lessonsExplicit` — `.harness/lessons.md` (1.9.112 신규) 의 dated 블록 매칭
426
+ - `planMilestones` — `.harness/plan.md` 의 `M-XXXX` milestone 매칭
427
+
428
+ ### 변경 적용 위치
429
+ - `_brainstormFor(root, topic)` — 1.9.77 MCP `leerness_brainstorm` + 1.9.88 handoff brainstorm hits 가 사용
430
+ - `brainstormCmd(root, topic)` verbose 출력 — 사용자 직접 호출 시 발견 카운트에 포함
431
+
432
+ ### 1.9.116 의 가치
433
+ - 1.9.112 에서 lessons.md 가 메모리 surface 5번째로 추가됐지만 brainstorm 매칭에는 미반영.
434
+ - 이제 brainstorm 호출 시 lessons.md 의 통찰 + plan.md 의 milestone 도 함께 검색.
435
+ - 외부 AI 가 "JWT" 주제로 brainstorm 호출 → JWT 관련 모든 메모리 surface (decision/lesson/plan/rule/skill/task/history/failure) 자동 회수.
436
+
437
+ ### Performance
438
+ - 새 hits 영역 추가로 brainstorm 평균 5-10ms 증가 (lessons.md, plan.md 추가 read).
439
+ - 캐시 미적용 (단순 텍스트 매칭) — 향후 캐싱 가능.
440
+
441
+ ### Verified
442
+ - stress-v61 — brainstorm --json 에 lessonsExplicit/planMilestones 필드 존재 + 키워드 매칭 정확성 + 누적 회귀.
443
+ - e2e 219/219 PASS.
444
+
445
+ ---
446
+
447
+ ## 1.9.115 — 2026-05-20
448
+
449
+ **`leerness handoff --json` 응답에 `memorySurface` 필드 통합** — 단일 호출로 컨텍스트 + 5종 메모리 상태 동시 회수.
450
+
451
+ ### Added — `handoff --json` 새 필드 `memorySurface`
452
+ 출력 구조에 다음 필드 추가:
453
+ ```json
454
+ {
455
+ "date": "...",
456
+ "project": "...",
457
+ "version": "1.9.115",
458
+ "files": { ... },
459
+ "activeRules": [ ... ],
460
+ "memorySurface": {
461
+ "tasks": { "inProgress": 2, "total": 12, "byStatus": {...} },
462
+ "decisions": { "count": 4 },
463
+ "rules": { "active": 2, "total": 2 },
464
+ "plan": { "milestones": 3 },
465
+ "lessons": { "count": 7 },
466
+ "summary": "T2/D4/R2/P3/L7"
467
+ }
468
+ }
469
+ ```
470
+
471
+ ### 1.9.115 의 가치
472
+ - 외부 AI(Claude Code / Hermes)가 매 세션 시작 시 단일 `handoff --json` 호출만으로:
473
+ - 워크스페이스 컨텍스트 (plan / progress / decisions / handoff 등 파일)
474
+ - active rules
475
+ - **5종 메모리 영구화 상태 (Memory Write Surface)**
476
+ 를 모두 한 번에 회수.
477
+ - MCP `leerness_handoff` 응답도 자동 갱신 (기존 도구가 --json 사용).
478
+
479
+ ### 1.9.114 와 차이
480
+ - 1.9.114: 별도 `memory status` 명령으로 상세 조회 + 최근 항목까지.
481
+ - **1.9.115**: handoff 응답에 통합 — 별도 호출 없이 동시 수신 (latest 항목은 제외, 카운트만).
482
+
483
+ ### Verified
484
+ - stress-v60 — handoff --json memorySurface 필드 + 카운트 정확성 + summary 포맷 + 누적 회귀.
485
+ - e2e 219/219 PASS.
486
+
487
+ ---
488
+
489
+ ## 1.9.114 — 2026-05-20
490
+
491
+ **`leerness memory status` 새 명령 + MCP 32번째 도구 `leerness_memory_status`** — Memory Write Surface 5종 통합 상세 상태 조회.
492
+
493
+ ### Added — `leerness memory status [--json]`
494
+ - 새 CLI 명령: Memory Write Surface 5종 통합 상태 조회.
495
+ - Verbose 모드:
496
+ ```
497
+ # 🧠 Memory Surface Status (1.9.114)
498
+ 📋 Tasks: 2 in-progress / 12 total
499
+ - 분포: in-progress=2, done=8, ...
500
+ 🧠 Decisions: 4 entries
501
+ - 최근: 2026-05-20 — PostgreSQL 채택
502
+ ⚡ Rules: 2 active / 0 paused
503
+ 🗺 Plan: 3 milestones (1 in-progress)
504
+ 💡 Lessons: 7 entries
505
+ - 최근: webhook 재시도 시 idempotency key 필수
506
+
507
+ 📊 Summary: T2/D4/R2/P3/L7
508
+ ```
509
+ - JSON 모드: `{ version, root, tasks, decisions, rules, plan, lessons, summary }` 구조.
510
+ - summary 필드는 handoff 헤드라인 (1.9.113) 과 동일 포맷 `T/D/R/P/L`.
511
+
512
+ ### Added — MCP 32번째 도구 `leerness_memory_status`
513
+ - 외부 AI 가 한 호출로 5종 메모리 영구화 상태 + 카운트 + 최근 항목 회수.
514
+ - 인자: `{ path? }`.
515
+ - 1.9.113 헤드라인 mem 토큰의 상세 버전 — 외부 AI 가 카운트만 아닌 **최근 결정 / 최근 lesson 내용** 까지 직접 받음.
516
+
517
+ ### 사용 시나리오
518
+ 사용자: "지금까지 누적된 결정과 lesson 알려줘"
519
+ → 외부 AI: `leerness_memory_status({ path: "." })`
520
+ → 외부 AI 가 receivedJSON 으로 응답:
521
+ > "Decisions 4건, 최근: PostgreSQL 채택. Lessons 7건, 최근: webhook 재시도 시 idempotency key 필수."
522
+
523
+ ### MCP 도구 수: 31 → 32개
524
+ ### JSON 옵션 누적: 14 → 15종
525
+
526
+ ### Verified
527
+ - stress-v59 — memory status CLI + --json + MCP 응답 + 5종 카운트 정확성 + 누적 회귀.
528
+ - e2e 219/219 PASS.
529
+
530
+ ---
531
+
532
+ ## 1.9.113 — 2026-05-20
533
+
534
+ **handoff 통합 헤드라인에 Memory Write Surface 5종 카운트 추가** — 사용자가 한눈에 5종 메모리 영구화 상태 확인.
535
+
536
+ ### Added — `📊 헤드라인` 의 새 토큰 `🧠 mem T/D/R/P/L`
537
+ handoff 호출 시 통합 헤드라인 끝에 다음 토큰 추가:
538
+ - **T** — tasks in-progress 카운트
539
+ - **D** — decisions 누적 (decisions.md `### YYYY-MM-DD` 헤더 카운트)
540
+ - **R** — rules active 카운트
541
+ - **P** — plan milestones 누적 (`M-XXXX` 카운트)
542
+ - **L** — lessons 누적 (lessons.md `### YYYY-MM-DD` 헤더 카운트)
543
+
544
+ 예: `📊 헤드라인 (1.9.81/93/113): drift healthy (0) · 🔒 보안 OK · 🔌 MCP 5회 · 📒 skill query 3회 · 📚 12 skills · ⚕ health: ✓ · 🧠 mem T2/D3/R1/P5/L7`
545
+
546
+ ### 1.9.113 의 가치
547
+ - 외부 AI 가 매 handoff 호출 시 5종 메모리 surface 의 **영구화 상태**를 한 줄로 인지.
548
+ - "지금까지 등록된 decisions / lessons / plan milestones 가 얼마나 있나?" 를 한눈에.
549
+ - Memory Write Surface 5종 완성 (1.9.112) 의 자연스러운 가시화.
550
+
551
+ ### Performance
552
+ - inline 계산 (자식 spawn 없음) — 헤드라인 latency 영향 무시 가능 (~ +5ms).
553
+
554
+ ### Verified
555
+ - stress-v58 — handoff 헤드라인 mem 토큰 출현 + 5종 카운트 정확성 + 누적 회귀.
556
+ - e2e 219/219 PASS.
557
+
558
+ ---
559
+
560
+ ## 1.9.112 — 2026-05-20
561
+
562
+ **`leerness lesson save` CLI + MCP 31번째 도구 `leerness_lesson_save`** — **Memory Write Surface 5종 완성** (lessons.md 전용 직접 write).
563
+
564
+ ### Added — `leerness lesson save "<text>"` CLI
565
+ - 새 명령: `leerness lesson save "<text>" --tag "..."`
566
+ - `.harness/lessons.md` 에 표준 형식으로 append:
567
+ ```md
568
+ ### YYYY-MM-DD
569
+ - Lesson: <text>
570
+ - Tag: <tag> (선택)
571
+ ```
572
+ - lessons.md 가 없으면 자동 생성.
573
+
574
+ ### Added — MCP 31번째 도구 `leerness_lesson_save`
575
+ - 외부 AI 가 세션 중 얻은 통찰을 즉시 영구 기록.
576
+ - 인자: `{ text (required), tag?, path? }`
577
+ - handoff 자동 lessons 회수와 통합 — 추후 동일 키워드 작업 시 자동 재상기.
578
+
579
+ ### Memory Write Surface 5종 완성
580
+ | 영역 | WRITE 라운드 | MCP 도구 |
581
+ |---|---|---|
582
+ | Tasks (CRUD) | 1.9.105~107 | task_add/update/drop |
583
+ | Decisions | 1.9.108 | decision_add |
584
+ | Rules | 1.9.109 | rule_add/list |
585
+ | Plan | 1.9.110 | plan_add |
586
+ | **Lessons** | **1.9.112** | **lesson_save** |
587
+
588
+ ### Internal — `_loadLessonsIndex()` 확장
589
+ - `lessons.md` 도 캐시 인덱스에 포함 → handoff 자동 회수 가 새 lessons 도 즉시 fuzzy 매칭.
590
+ - mtime 기반 캐시 무효화 (다른 파일과 동일 패턴).
591
+
592
+ ### Fixed
593
+ - `nonFlagArgs()` withValue Set 에 `--tag` 추가 — `lesson save` CLI 인자 정확히 파싱.
594
+
595
+ ### MCP 도구 수: 30 → 31개
596
+
597
+ ### Verified
598
+ - stress-v57 — lesson save CLI + lessons.md 갱신 + MCP 31 도구 + handoff lessons 회수 통합 + Memory Write 5종 통합 + 누적 회귀.
599
+ - e2e 219/219 PASS.
600
+
601
+ ---
602
+
603
+ ## 1.9.111 — 2026-05-20
604
+
605
+ **41 라운드 자율 모드 누적 보고서 마무리** (`_reports/AUTONOMOUS_ROUNDS_1.9.70-1.9.110.md`) + stress-v56 종합 회귀.
606
+
607
+ ### Internal — 비공개 종합 보고서
608
+ - `_reports/AUTONOMOUS_ROUNDS_1.9.70-1.9.110.md` — 41 라운드 (1.9.70~1.9.110) 종합 분석
609
+ - MCP 도구 진화 표 (10 → 30, 20개 추가)
610
+ - Memory Write Surface 4종 완성 (tasks CRUD + decisions + rules + plan)
611
+ - JSON 옵션 14종 누적
612
+ - 보안 3중 가드 + audit 11 kind
613
+ - 디버그 기록 7건
614
+ - 성능 측정 (11개 명령 median)
615
+ - 사용자 명시 정책 7개 모두 ✓
616
+
617
+ ### Verified — stress-v56 종합 (1.9.70~110 핵심 기능 회귀)
618
+ - 마일스톤 (1.9.100/110) 핵심 시나리오 모두 PASS
619
+ - Memory Write Surface 4종 통합 사이클 PASS
620
+ - e2e 219/219 PASS
621
+
622
+ ### Badge
623
+ - README 에 `autonomous-rounds-41` 배지 추가
624
+
625
+ ---
626
+
627
+ ## 1.9.110 — 2026-05-20 🎉 **MCP 30 도구 마일스톤**
628
+
629
+ **MCP 30번째 도구 `leerness_plan_add`** (plan.md milestone + progress-tracker 자동 동기화).
630
+
631
+ ### Added — MCP 30번째 도구 `leerness_plan_add`
632
+ - 외부 AI 가 plan.md 에 새 milestone (`M-XXXX`) 추가.
633
+ - 자동으로 progress-tracker.md 에 동기화된 task (`T-XXXX`) 생성 + `evidence: plan:M-XXXX` 링크.
634
+ - 인자: `{ text (required), status?, progress?, nextAction?, path? }`
635
+ - 기본값: `status=planned`, `progress=0%`, `nextAction="다음 액션 작성"`
636
+
637
+ ### Memory Write Surface 확장 (4종)
638
+ | 영역 | WRITE 라운드 | MCP 도구 |
639
+ |---|---|---|
640
+ | Tasks (CRUD) | 1.9.105~107 | task_add/update/drop |
641
+ | Decisions | 1.9.108 | decision_add |
642
+ | Rules | 1.9.109 | rule_add/list |
643
+ | **Plan** | **1.9.110** | **plan_add** |
644
+
645
+ ### 🎉 MCP 30 도구 마일스톤 (1.9.43 → 1.9.110)
646
+ - **1.9.43**: 10 도구 (기본 MCP 도입)
647
+ - **1.9.94**: 21 도구 (skill_search/info, benchmark 추가)
648
+ - **1.9.107**: 26 도구 (task CRUD 완성)
649
+ - **1.9.110**: **30 도구 마일스톤** 🎉
650
+
651
+ ### Verified
652
+ - stress-v55 — MCP plan_add + plan.md+progress-tracker 자동 동기화 + 30 도구 + 누적 회귀.
653
+ - e2e 219/219 PASS.
654
+
655
+ ---
656
+
657
+ ## 1.9.109 — 2026-05-20
658
+
659
+ **MCP 28+29번째 도구 `leerness_rule_add` / `leerness_rule_list`** + `rule list --json` (자연어 영구 룰 R/W).
660
+
661
+ ### Added — `leerness rule list --json`
662
+ - 출력: `{ version, root, total, rules[] }`
663
+ - 각 rule: `{ id, trigger, rule, status, lastVerified }`
664
+ - CI/외부 AI 통합 친화.
665
+
666
+ ### Added — MCP 28번째 도구 `leerness_rule_add`
667
+ - 외부 AI 가 자연어 영구 룰 (1.9.8) 등록.
668
+ - 인자: `{ description (required), trigger?, path? }`
669
+ - trigger enum: `every-session` / `every-update` / `every-commit` / `session-start` / `session-close` / `pre-publish`
670
+ - 등록된 룰은 매 handoff 자동 출력, session close 자동 검증.
671
+
672
+ ### Added — MCP 29번째 도구 `leerness_rule_list`
673
+ - 외부 AI 가 현재 활성 룰 조회.
674
+ - 사용 시나리오: 사용자가 "현재 활성 룰 알려줘" → 외부 AI 가 자동 회수.
675
+
676
+ ### Memory Write Surface 확장 (3종)
677
+ | 영역 | WRITE 라운드 |
678
+ |---|---|
679
+ | Tasks (CRUD) | 1.9.105~107 |
680
+ | Decisions | 1.9.108 |
681
+ | **Rules** | **1.9.109** |
682
+
683
+ ### MCP 도구 수: 27 → 29개 (2개 추가)
684
+
685
+ ### Verified
686
+ - stress-v54 — rule list --json + MCP rule_add/list + 29 도구 + 누적 회귀.
687
+ - e2e 219/219 PASS.
688
+
689
+ ---
690
+
691
+ ## 1.9.108 — 2026-05-20
692
+
693
+ **`leerness decision add` 새 CLI + MCP 27번째 도구 `leerness_decision_add`** (설계 결정 영구화 — task 다음으로 메모리 write surface 확장 시작).
694
+
695
+ ### Added — `leerness decision add "<title>"` CLI
696
+ - 새 명령: `leerness decision add "<title>" --reason "..." --alternatives "..." --impact "..."`
697
+ - decisions.md 에 표준 형식으로 자동 append:
698
+ ```md
699
+ ### YYYY-MM-DD — 결정 제목
700
+ - Decision: 결정 제목
701
+ - Reason: ...
702
+ - Alternatives: ...
703
+ - Impact: ...
704
+ ```
705
+ - decisions.md 가 없으면 자동 생성.
706
+ - 1.9.43+ handoff lessons 자동 회수와 통합 — 추후 동일 키워드 작업 시 자동 재상기.
707
+
708
+ ### Added — MCP 27번째 도구 `leerness_decision_add`
709
+ - 외부 AI(Claude Code / Hermes)가 설계 결정을 즉시 기록.
710
+ - 인자: `{ title (required), reason?, alternatives?, impact?, path? }`
711
+ - 사용 시나리오: 사용자와 토론 후 결정 사항을 외부 AI 가 자율 영구화.
712
+
713
+ ### Memory Write Surface 시작
714
+ | 영역 | READ (기존) | WRITE (신규) |
715
+ |---|---|---|
716
+ | **Decisions** | lessons 자동 회수 (1.9.56+) | **`decision_add` (1.9.108)** |
717
+ | **Tasks** | task_export (1.9.60) | task_add/update/drop (1.9.105~107) |
718
+
719
+ 다음 후보: lessons 직접 write, rules add, plan add 등.
720
+
721
+ ### MCP 도구 수: 26 → 27개
722
+
723
+ ### Verified
724
+ - stress-v53 — decision add CLI + decisions.md 실제 갱신 + MCP 응답 + 27 도구 + 누적 회귀.
725
+ - e2e 219/219 PASS.
726
+
727
+ ---
728
+
729
+ ## 1.9.107 — 2026-05-20
730
+
731
+ **MCP 26번째 도구 `leerness_task_drop` — task CRUD 완성** (read/add/update/drop 4종 surface).
732
+
733
+ ### Added — MCP 26번째 도구 `leerness_task_drop`
734
+ - 외부 AI 가 task 를 `dropped` 상태로 폐기 (취소).
735
+ - 인자:
736
+ - `id` (required) — 폐기할 task ID
737
+ - `reason` — 폐기 사유 (기본 `사용자 요청으로 제외`)
738
+ - `path` — 워크스페이스 경로
739
+
740
+ ### MCP task CRUD 완성 (4종 surface)
741
+ | 라운드 | MCP 도구 | CRUD |
742
+ |---|---|---|
743
+ | 1.9.60 | `leerness_task_export` | **R**ead — task → TodoWrite JSON |
744
+ | 1.9.105 | `leerness_task_add` | **C**reate — 새 task 등록 |
745
+ | 1.9.106 | `leerness_task_update` | **U**pdate — 상태/evidence 갱신 |
746
+ | **1.9.107** | **`leerness_task_drop`** | **D**rop — 폐기 |
747
+
748
+ 이제 외부 AI 가 task 전체 라이프사이클을 자율 관리 가능.
749
+
750
+ ### MCP 도구 수: 25 → 26개
751
+
752
+ ### Verified
753
+ - stress-v52 — MCP task_drop + CRUD 사이클 + 26 도구 + 누적 회귀.
754
+ - e2e 219/219 PASS.
755
+
756
+ ---
757
+
758
+ ## 1.9.106 — 2026-05-20
759
+
760
+ **MCP 25번째 도구 `leerness_task_update`** (read+add+update 3종 task 제어 surface 완성).
761
+
762
+ ### Added — MCP 25번째 도구 `leerness_task_update`
763
+ - 외부 AI 가 기존 task 의 상태/evidence/nextAction 을 단계적으로 갱신.
764
+ - 인자:
765
+ - `id` (required) — 갱신할 task ID (`T-XXXX`)
766
+ - `status` — 9 status enum
767
+ - `evidence` — evidence 라인 갱신
768
+ - `nextAction` — 다음 액션 갱신
769
+ - `note` — task request 텍스트 자체 변경
770
+ - `path` — 워크스페이스 경로
771
+
772
+ ### read+add+update 3종 task 제어 surface 완성
773
+ | 라운드 | MCP 도구 | 작업 |
774
+ |---|---|---|
775
+ | 1.9.60 | `leerness_task_export` | READ — task → TodoWrite JSON |
776
+ | 1.9.105 | `leerness_task_add` | ADD — 새 task 등록 |
777
+ | **1.9.106** | **`leerness_task_update`** | **UPDATE — 상태/evidence 갱신** |
778
+
779
+ 외부 AI 가 작업 진행에 따라 task 를 add → update(in-progress) → update(done) 사이클로 자율 관리.
780
+
781
+ ### MCP 도구 수: 24 → 25개
782
+
783
+ ### Verified
784
+ - stress-v51 — MCP task_update + add→update 사이클 + 25 도구 + 누적 회귀.
785
+ - e2e 219/219 PASS.
786
+
787
+ ---
788
+
789
+ ## 1.9.105 — 2026-05-20
790
+
791
+ **MCP 24번째 도구 `leerness_task_add`** (외부 AI 가 task 즉시 등록 — 양방향 제어 완성).
792
+
793
+ ### Added — MCP 24번째 도구 `leerness_task_add`
794
+ - 외부 AI(Claude Code / Hermes)가 progress-tracker.md 에 새 task 즉시 등록.
795
+ - 인자:
796
+ - `text` (required) — task 설명
797
+ - `status` — 9 status enum (requested/planned/in-progress/waiting/on-hold/blocked/incomplete/done/dropped). 기본 `requested`
798
+ - `evidence` — evidence 라인 (기본 `user-request`)
799
+ - `nextAction` — 다음 액션 (기본 `다음 액션 작성`)
800
+ - `path` — 워크스페이스 경로 (기본 현재)
801
+ - 응답: 새 task ID (`T-XXXX`) + 성공 메시지
802
+ - 사용 시나리오: 사용자가 자연어로 "X 작업 추가해줘" → 외부 AI 가 즉시 `leerness_task_add` 호출.
803
+
804
+ ### 양방향 제어 완성
805
+ - 1.9.60: `leerness_task_export` — task → TodoWrite (READ)
806
+ - **1.9.105: `leerness_task_add` — TodoWrite → task (WRITE)**
807
+ - 외부 AI 가 task 목록을 read + add 양방향 sync.
808
+
809
+ ### MCP 도구 수: 23 → 24개
810
+ 1~10 (기존) + skill_suggest / lessons / task_export / env_check / brainstorm / skill_match / skill_list / health / skill_search / skill_info / benchmark / lazy_detect / retro / **task_add** (1.9.105 신규)
811
+
812
+ ### Verified
813
+ - stress-v50 — MCP task_add 응답 + progress-tracker.md 실제 갱신 + 24 도구 + 누적 회귀.
814
+ - e2e 219/219 PASS.
815
+
816
+ ---
817
+
818
+ ## 1.9.104 — 2026-05-20
819
+
820
+ **MCP 23번째 도구 `leerness_retro`** (4세션 누적 회고 외부 AI 노출).
821
+
822
+ ### Added — MCP 23번째 도구 `leerness_retro`
823
+ - 4세션 누적 회고 보고서 JSON 외부 AI 노출.
824
+ - 인자: `{ path?, days?, allApps? }`
825
+ - 출력 데이터: `statusCounts` / `focusNext` / `skillUsage` / `recentDecisions` / `durations` / `activeRules` / `verifiedRules` / `fixSignals` / `passSignals` / `totalOptimizations`
826
+ - `retro` CLI 명령은 1.9.16부터 `--json` 지원했으나, MCP 노출은 1.9.104에서 추가.
827
+ - 사용 시나리오: 외부 AI가 누적 패턴 학습 / 다음 라운드 우선순위 결정 / 디버그 비중 분석.
828
+
829
+ ### MCP 도구 수: 22 → 23개
830
+ 1~10 (기존) + skill_suggest / lessons / task_export / env_check / brainstorm / skill_match / skill_list / health / skill_search / skill_info / benchmark / lazy_detect / **retro** (1.9.104 신규)
831
+
832
+ ### Verified
833
+ - stress-v49 — MCP retro 응답 + 23 도구 노출 + 누적 회귀.
834
+ - e2e 219/219 PASS.
835
+
836
+ ---
837
+
838
+ ## 1.9.103 — 2026-05-20
839
+
840
+ **`leerness session close --json`** (세션 마감 통계 JSON + MCP `leerness_session_close` JSON 자동).
841
+
842
+ ### Added — `leerness session close [path] --json`
843
+ - 출력: `{ version, root, closedAt, sessionNumber, taskCounts, recommendedDirection, nextExactStep, rules[], skillCandidates[], drift, topCommands[], mcpStats, workspacePeers, retroSummaryError? }`
844
+ - `taskCounts`: 9개 status (requested/planned/in-progress/waiting/on-hold/blocked/incomplete/done/dropped) 카운트
845
+ - `rules`: 활성 룰 검증 결과 (id/trigger/verified/note)
846
+ - `skillCandidates`: Hermes-style 자동 학습 (top 5)
847
+ - `drift`: { level, score, fired[] }
848
+ - `topCommands`: 가장 많이 쓴 명령 top 3
849
+ - `mcpStats`: { total, top[], rare[] }
850
+ - `workspacePeers`: 다른 leerness 프로젝트 개수
851
+ - stdout 억제 후 JSON만 (CI/외부 AI 통합 친화)
852
+
853
+ ### Changed — MCP `leerness_session_close`
854
+ - 기본 응답을 **JSON** 으로 변경 (--json 자동 전달).
855
+ - 외부 AI(Claude Code / Hermes)가 마감 시 통계를 파싱 친화적으로 회수.
856
+
857
+ ### JSON 옵션 누적 13종
858
+ `skill list/info/search` · `health` · `lessons` · `handoff` · `env check` · `benchmark` · `drift check` · `lazy detect` · `usage stats` · `audit` · **`session close`** (신규)
859
+
860
+ ### Verified
861
+ - stress-v48 — session close --json 구조 + MCP + 누적 회귀.
862
+ - e2e 219/219 PASS.
863
+
864
+ ---
865
+
866
+ ## 1.9.102 — 2026-05-20
867
+
868
+ **`leerness audit --json` 구조화 출력** (findings 11종 kind + MCP `leerness_audit` JSON 응답).
869
+
870
+ ### Added — `leerness audit [path] --json`
871
+ - 출력: `{ version, root, warnings, failures, fixed, healthy, fixApplied, strict, strictThreshold, summary, findings[] }`
872
+ - 각 finding: `{ kind, severity, message, ...details }`
873
+ - **finding.kind 11종**:
874
+ - `design_dup` — design guide 중복 파일 (`docs/designguide.md` 등)
875
+ - `design_system_default` — design-system.md tokens not customized
876
+ - `reuse_map_empty` — reuse-map.md 비어있음
877
+ - `milestone_unlinked` — milestone progress-tracker 미연결
878
+ - `handoff_not_generated` — session-handoff.md never auto-generated
879
+ - `current_state_stale` — current-state.md 7일 이상 stale
880
+ - `readme_version_mismatch` — README 배지 ↔ package.json 불일치
881
+ - `npm_cve` — npm audit 발견 CVE
882
+ - `npm_cve_critical` — critical/high CVE 즉시 대응 권장
883
+ - `gitignore_missing_secrets` — .gitignore에 시크릿 패턴 누락
884
+ - `env_keys_missing` — .env 키가 .env.example에 누락
885
+ - `strict_promoted` — --strict로 warnings → failures 승격
886
+ - exit 1 if `failures > 0` (warnings 만으로는 healthy=true 유지)
887
+ - 기존 verbose 출력은 stdout 억제 후 JSON만 출력 (CI 친화)
888
+
889
+ ### Changed — MCP `leerness_audit`
890
+ - 기본 응답을 JSON 으로 변경 (--json 자동 전달).
891
+ - `args.strict: true` 옵션 추가 → `--strict` 전달.
892
+ - 외부 AI(Claude Code / Hermes)가 audit 결과를 파싱 친화적으로 받음.
893
+
894
+ ### JSON 옵션 통합 11종 (1.9.102 까지)
895
+ | 명령 | 라운드 | 핵심 |
896
+ |---|---|---|
897
+ | `skill list --json` | 1.9.84 | items[] |
898
+ | `health --json` | 1.9.85 | checks/issues/healthy |
899
+ | `skill search --json` | 1.9.90 | matches[] |
900
+ | `skill info --json` | 1.9.92 | 개별 skill |
901
+ | `lessons --json` | 1.9.95 | lessons[] |
902
+ | `handoff --json` | 1.9.96 | files{...}/activeRules |
903
+ | `env check --json` | 1.9.71 | inEnvOnly/inExampleOnly |
904
+ | `benchmark --json` | 1.9.46 | 6 차원 점수 |
905
+ | `drift check --json` | (기존) | score/level/fired[] |
906
+ | `lazy detect --json` | 1.9.101 | findings[] 7 kind |
907
+ | `audit --json` | **1.9.102** | **findings[] 11 kind** |
908
+
909
+ ### Verified
910
+ - stress-v47 — audit --json 구조 + 11 kind 검출 + MCP audit + 누적 회귀.
911
+ - e2e 219/219 PASS.
912
+
913
+ ---
914
+
915
+ ## 1.9.101 — 2026-05-20
916
+
917
+ **`leerness lazy detect --json` + MCP 22번째 도구 `leerness_lazy_detect`** (외부 AI에 거짓 완료/empty handoff/no test run/TODO 미추적 신호 노출).
918
+
919
+ ### Added — `leerness lazy detect [path] --json`
920
+ - 기존 `lazy detect` 명령에 `--json` 옵션 추가.
921
+ - 출력: `{ version, root, issues, healthy, todoCount, newTodoCount, findings[] }`
922
+ - 각 finding: `{ kind, severity, ...details }`
923
+ - `kind` 종류: `evidence_missing` / `progress_empty` / `handoff_never_generated` / `handoff_empty` / `no_test_run` / `todo_untracked` / `blocker_no_next_action`
924
+ - exit 1 if `issues > 0` (CI 통합 친화적)
925
+
926
+ ### Added — MCP 22번째 도구 `leerness_lazy_detect`
927
+ - 외부 AI가 워크스페이스의 거짓 완료/lazy 신호를 JSON으로 사전 점검.
928
+ - 사용 시나리오: 세션 마감 전 자동 검사, CI 게이트, AI 에이전트의 "정말 끝났는지" self-check.
929
+ - MCP 도구 수: **21 → 22개**.
930
+
931
+ ### Verified
932
+ - stress-v46 — lazy detect --json 구조 + 7종 kind 검출 + MCP 22 도구 + 누적 회귀.
933
+ - e2e 219/219 PASS.
934
+
935
+ ---
936
+
937
+ ## 1.9.100 — 2026-05-20 🏆 마일스톤 (30 라운드 자율 누적 + 100번째 패치)
938
+
939
+ **1.9.70 ~ 1.9.99 자율 모드 30 라운드 누적 마일스톤** (stress-v45 30/30 PASS · e2e 219/219 PASS).
940
+
941
+ ### Milestone Summary
942
+ - **버전 진화**: 1.9.70 → 1.9.100 (30 라운드, 모두 stress + e2e + GitHub release)
943
+ - **MCP 도구**: 12 → **21개** (env_check / brainstorm / skill_match / skill_list / health / skill_search / skill_info / benchmark 추가)
944
+ - **handoff 자동 회수 5단**: lessons + skill 추천 + history hit + brainstorm hits + 헤드라인
945
+ - **3중 보안 가드**: drift 5번째 신호 (1.9.78) + handoff 요약 (1.9.76) + CRITICAL 자동 회복 (1.9.80)
946
+ - **JSON 옵션 10종**: handoff, lessons, skill list/info/search, health, env check, benchmark, drift check, usage stats
947
+ - **새 명령 3종**: `env check/sync` (1.9.71) · `health` (1.9.85) · `skill search` (1.9.90)
948
+ - **handoff --quiet** (1.9.99) — 자동화/CI 비대화 모드
949
+
950
+ ### Verified — stress-v45 종합 검증 (1.9.70~99 30 라운드)
951
+ - **총 30 / PASS 30 / FAIL 0 · 34015ms** (100% 통과)
952
+ - R70~R99 핵심 기능 시나리오 28개 + MCP 21 도구 + 5종 시크릿 패턴 안전 검증
953
+ - e2e 219/219 PASS 매 라운드 유지
954
+ - 누적 회귀 0건, 신규 회귀 없음
955
+
956
+ ### Internal — 비공개 종합 보고서
957
+ - `_reports/AUTONOMOUS_ROUNDS_1.9.70-1.9.99.md` — 30 라운드 자율 모드 누적 + 마일스톤 마무리
958
+
959
+ ### Stats (30 라운드 누적)
960
+ - stress 시나리오 ~440개 모두 PASS
961
+ - 디버그 기록 6건 (1차 실패 → 진단 → 수정 → PASS)
962
+ - GitHub release/tag 30개 (v1.9.70 ~ v1.9.99 + v1.9.100)
963
+ - 사용자 명시 정책 7개 모두 ✓
964
+
965
+ ### 사용자 명시 정책 준수 (verbatim)
966
+ - ✓ 매 라운드 stress test 필수 검수
967
+ - ✓ 이전 중요 기능 정상 작동 검증 (누적 회귀)
968
+ - ✓ 성능 테스트 병행 (handoff median ~700ms 유지)
969
+ - ✓ GitHub 배포 (https://github.com/gugu9999gu/leerness)
970
+ - ✓ `_reports/` 비공개 (`.gitignore` + `.npmignore`)
971
+ - ✓ 설치 가이드 매 라운드 동기화 (`_banner` quickStart + `session-workflow.md`)
972
+ - ✓ 보안: `.env` 실제 값 절대 미노출, 시크릿 하드코딩 차단
973
+
974
+ ---
975
+
976
+ ## 1.9.99 — 2026-05-20
977
+
978
+ **`leerness handoff --quiet` 옵션** (자동화/CI 모드용 최소 출력).
979
+
980
+ ### Added
981
+ - `leerness handoff --quiet` — 자동 회수 라인 모두 비활성화:
982
+ - 헤드라인 (1.9.81/93)
983
+ - lessons 자동 재상기 (1.9.56)
984
+ - 매칭 skill 자동 추천 (1.9.67)
985
+ - skill match 이력 (1.9.69)
986
+ - brainstorm 자동 hits (1.9.88)
987
+ - 보안 요약 (1.9.76) / CRITICAL (1.9.80)
988
+ - 기본 컨텍스트 (Session Handoff, Plan, Progress Tracker, Decisions, Task Log)만 출력.
989
+ - CI 통합 / 자동 처리 / 비대화형 환경에 적합.
990
+
991
+ ### Verified
992
+ - stress-v44 — quiet 모드 출력 + 누적 회귀.
993
+ - e2e 219/219 PASS 유지.
994
+
995
+ ---
996
+
997
+ ## 1.9.98 — 2026-05-20
998
+
999
+ **`leerness skill publish` 보안 사전 점검 통합** (사용자 글로벌 룰 보안 정책 자동화).
1000
+
1001
+ ### Added — publish 보안 사전 점검
1002
+ - `leerness skill publish` 명령 실행 전 `leerness health` 자동 호출.
1003
+ - `issues.length > 0` 시 publish 중단 + exit 1:
1004
+ - 🚨 보안 사전 점검 (1.9.98): N건 issue 발견
1005
+ - 권장: `leerness audit --fix`
1006
+ - 우회: `--force` 또는 `--no-security-check`
1007
+ - 통과 시: `✓ 보안 사전 점검 (1.9.98): 통과` 후 정상 publish
1008
+
1009
+ ### Use Case
1010
+ - 사용자가 `.env` 가 `.gitignore` 에 없는 상태에서 skill publish 시도 → 자동 차단.
1011
+ - 시크릿 노출 사고 사전 방지.
1012
+ - CI 통합 시 더욱 안전.
1013
+
1014
+ ### Verified
1015
+ - stress-v43 — publish 보안 사전 점검 + --force 우회 + 누적 회귀.
1016
+ - e2e 219/219 PASS 유지.
1017
+
1018
+ ---
1019
+
1020
+ ## 1.9.97 — 2026-05-20
1021
+
1022
+ **자율 모드 27 라운드 종합 보고서 갱신 + 마무리** (1.9.70 ~ 1.9.96).
1023
+
1024
+ ### Internal — 비공개 종합 보고서
1025
+ - `_reports/AUTONOMOUS_ROUNDS_1.9.70-1.9.96.md` 갱신 (이전 1.9.89 보고서 확장)
1026
+ - 27 라운드 전체 요약 + 그룹화 (보안 / MCP 21개 / handoff 5단 / JSON 옵션 9종)
1027
+ - 성능 측정 (handoff 700ms · health 720ms · audit 350ms · drift 400ms)
1028
+ - 디버그 기록 6건
1029
+ - 사용자 명시 정책 7개 모두 ✓
1030
+
1031
+ ### Stats
1032
+ - 자율 모드 27 라운드 (1.9.70 ~ 1.9.96)
1033
+ - MCP 도구: 12 → 21개
1034
+ - 새 명령: env check/sync, health, skill search
1035
+ - JSON 옵션: 9종 (handoff, lessons, skill list/info/search, health, env check, benchmark, drift check)
1036
+
1037
+ ### Verified
1038
+ - e2e 219/219 매 라운드 PASS 유지
1039
+
1040
+ ---
1041
+
1042
+ ## 1.9.96 — 2026-05-20
1043
+
1044
+ **`leerness handoff --json` 옵션 추가** (외부 AI / MCP 통합용).
1045
+
1046
+ ### Added
1047
+ - `leerness handoff --json` — 구조화된 JSON 출력
1048
+ - `{ date, project, version, files: { sessionHandoff, currentState, plan, progressTracker, decisions, taskLog }, activeRules?: [...] }`
1049
+ - 각 file: `{ path, content }` (8000자 초과 시 truncated)
1050
+ - 자동 회수 라인 (lessons / skill 추천 / history / brainstorm / 헤드라인)은 일반 모드에서만.
1051
+ - 외부 AI(Claude Code, Cursor)가 handoff 데이터를 파싱 친화적으로 받음.
1052
+
1053
+ ### Verified
1054
+ - stress-v42 — handoff --json + 누적 회귀.
1055
+ - e2e 219/219 PASS 유지.
1056
+
1057
+ ---
1058
+
1059
+ ## 1.9.95 — 2026-05-20
1060
+
1061
+ **`leerness lessons --json` 옵션 + MCP leerness_lessons 자동 JSON 응답**.
1062
+
1063
+ ### Added
1064
+ - `leerness lessons --json` 옵션:
1065
+ - `{ query, total, lessons[]: { source, title, preview, truncated } }`
1066
+ - MCP `leerness_lessons` 도구가 자동으로 `--json` 적용 → 구조화 응답.
1067
+ - 외부 AI(Claude Code, Cursor)가 lessons 결과를 파싱 친화적으로 받음.
1068
+
1069
+ ### Verified
1070
+ - stress-v41 — lessons --json + 누적 회귀.
1071
+ - e2e 219/219 PASS 유지.
1072
+
1073
+ ---
1074
+
1075
+ ## 1.9.94 — 2026-05-20
1076
+
1077
+ **MCP server 21번째 도구 `leerness_benchmark`** (1.9.46/51 benchmark 외부 노출).
1078
+
1079
+ ### Added — MCP 21번째 도구
1080
+ - `leerness_benchmark` — 1.9.46 6 차원 점수 + 1.9.51 검수 시나리오 결과를 외부 AI에 노출.
1081
+ - inputSchema: `{ path: string, scenario: string (optional) }`
1082
+ - 응답: benchmark --json 결과
1083
+ - `scenario` 없으면: `{ project, measured, leernessScore, total, compareSimulated }`
1084
+ - `scenario: 'all'` 등: `{ scenarios: [...], detectedCount, total }`
1085
+ - benchmark --json 옵션은 이미 존재 (1.9.46/51) — MCP 노출만 추가.
1086
+ - MCP server 도구 카운트: **20 → 21**.
1087
+
1088
+ ### Verified
1089
+ - stress-v40 — MCP 21 도구 + benchmark 호출 + 누적 회귀.
1090
+ - e2e 219/219 PASS 유지.
1091
+
1092
+ ---
1093
+
1094
+ ## 1.9.93 — 2026-05-20
1095
+
1096
+ **handoff 헤드라인에 health 종합 상태 1 토큰 추가** (1.9.81 + 1.9.85 통합).
1097
+
1098
+ ### Improved — 헤드라인 health 토큰
1099
+ - 1.9.81 통합 헤드라인 끝에 `⚕ health: ✓` 또는 `⚕ health: ⚠` 1 토큰 추가.
1100
+ - inline 추론 (자식 spawn 없음, 성능 비용 최소):
1101
+ - `.env` 가 `.gitignore` 에 포함되면 ✓
1102
+ - 누락이면 ⚠
1103
+ - 헤드라인 라벨도 `(1.9.81/93)` 으로 갱신.
1104
+ - 예:
1105
+ ```
1106
+ 📊 헤드라인 (1.9.81/93): drift healthy (0) · 📚 9 skills · ⚕ health: ✓
1107
+ 📊 헤드라인 (1.9.81/93): drift attention (45) · 🚨 보안 위험 · 📚 9 skills · ⚕ health: ⚠
1108
+ ```
1109
+
1110
+ ### Use Case
1111
+ - AI 에이전트가 handoff 1줄로 워크스페이스 헬스 즉시 인지 (별도 `leerness health` 호출 불필요).
1112
+
1113
+ ### Verified
1114
+ - stress-v39 — health 토큰 노출 + 누적 회귀.
1115
+ - e2e 219/219 PASS 유지.
1116
+
1117
+ ---
1118
+
1119
+ ## 1.9.92 — 2026-05-20
1120
+
1121
+ **`skill info --json` + MCP 20번째 도구 `leerness_skill_info`**.
1122
+
1123
+ ### Added
1124
+ - `leerness skill info <id> --json` 옵션 신규 추가 (CI 친화 + MCP 통합 기반).
1125
+ - 출력 필드: id / displayNameKo / source / version / lastUpdated / verification / usage / capabilities / sources / patterns / optimizations
1126
+ - **MCP 20번째 도구** `leerness_skill_info`:
1127
+ - inputSchema: `{ id: string (required), path: string }`
1128
+ - 외부 AI가 개별 skill의 능력/사용 이력/패턴 정확 파악.
1129
+ - MCP server 도구 카운트: **19 → 20**.
1130
+
1131
+ ### Verified
1132
+ - stress-v38 — skill info --json + MCP 20 도구 + 누적 회귀.
1133
+ - e2e 219/219 PASS 유지.
1134
+
1135
+ ---
1136
+
3
1137
  ## 1.9.91 — 2026-05-20
4
1138
 
5
1139
  **MCP server 19번째 도구 `leerness_skill_search`** (1.9.90 외부 AI 노출).