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