leerness 1.9.131 → 1.9.133
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 +46 -0
- package/README.md +2 -2
- package/bin/harness.js +30 -2
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,51 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.9.133 — 2026-05-20
|
|
4
|
+
|
|
5
|
+
**brainstorm 텍스트 모드에 lessonsExplicit / planMilestones display 추가** — 1.9.116에서 데이터 수집은 했지만 display는 누락된 pre-existing gap fix.
|
|
6
|
+
|
|
7
|
+
### Fixed
|
|
8
|
+
- `brainstorm` 텍스트 모드에 두 섹션 추가:
|
|
9
|
+
```
|
|
10
|
+
💡 관련 lessons (N) — Memory Surface lessons.md 직접 매칭
|
|
11
|
+
- .harness/lessons.md:L — <title>
|
|
12
|
+
🗺 관련 plan milestones (N) — plan.md 매칭
|
|
13
|
+
- .harness/plan.md:L — M-XXXX <title>
|
|
14
|
+
```
|
|
15
|
+
- 1.9.116에서 lessons/plan 데이터는 수집했지만 출력 누락 → 1.9.133에서 fix
|
|
16
|
+
|
|
17
|
+
### brainstorm 텍스트 display 완성 매트릭스
|
|
18
|
+
| 섹션 | 라운드 |
|
|
19
|
+
|---|---|
|
|
20
|
+
| decisions / skills / tasks / rules / evidence / lessons (legacy) | (기존) |
|
|
21
|
+
| skillHistory / taskLogFails | 1.9.72 |
|
|
22
|
+
| **lessonsExplicit** | **1.9.133 ✓** |
|
|
23
|
+
| **planMilestones** | **1.9.133 ✓** |
|
|
24
|
+
| archive (D/L/P) | 1.9.131 |
|
|
25
|
+
|
|
26
|
+
## 1.9.132 — 2026-05-20
|
|
27
|
+
|
|
28
|
+
**session close 텍스트 모드에 archive 누적 라인 추가** — 마감 시점 DELETE 활동 가시화 (handoff archive 알림과 symmetric).
|
|
29
|
+
|
|
30
|
+
### Added
|
|
31
|
+
- `leerness session close` 텍스트 모드에 1줄 archive 요약 추가:
|
|
32
|
+
```
|
|
33
|
+
🗑 archive 누적: D1/L1/P0 (2건) — 복원 후보: leerness memory archive list
|
|
34
|
+
```
|
|
35
|
+
- 진행 요약 (session #N) 라인 바로 아래 출력
|
|
36
|
+
- archive 없으면 라인 비표시
|
|
37
|
+
- handoff 7번째 자동 회수 (1.9.129) 와 symmetric — 시작/마감 양쪽에서 archive 가시성
|
|
38
|
+
|
|
39
|
+
### Archive 가시성 매트릭스 (1.9.132 시점)
|
|
40
|
+
| 명령 | 텍스트 | JSON |
|
|
41
|
+
|---|---|---|
|
|
42
|
+
| `handoff` | ✓ (1.9.129) | ✓ (1.9.130) |
|
|
43
|
+
| `session close` | **✓ (1.9.132)** | ✓ (1.9.130) |
|
|
44
|
+
| `memory status` | ✓ (1.9.130) | ✓ (1.9.130) |
|
|
45
|
+
| `health` | (N/A) | ✓ (1.9.130) |
|
|
46
|
+
| `memory archive list` | ✓ (1.9.127) | ✓ (1.9.127) |
|
|
47
|
+
| `brainstorm` | ✓ (1.9.131) | ✓ (1.9.131) |
|
|
48
|
+
|
|
3
49
|
## 1.9.131 — 2026-05-20
|
|
4
50
|
|
|
5
51
|
**brainstorm 회수 범위에 3 archive 파일 통합** — 과거에 제거됐던 ideas 가 새 brainstorm 시 다시 후보로 노출.
|
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
> **AI 코딩 에이전트의 거짓 완료·중복·망각·충돌을 막아주는 검수·기억·협업 CLI 하네스.**
|
|
4
4
|
|
|
5
|
-
[](https://www.npmjs.com/package/leerness) [](https://www.npmjs.com/package/leerness) []() []() []() []() []() []() []()
|
|
6
6
|
|
|
7
7
|
```
|
|
8
8
|
╔══════════════════════════════════════════════════════════════╗
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
║ ██║ ██╔══╝ ██╔══╝ ██╔══██╗██║╚██╗██║██╔══╝ ╚════██║ ║
|
|
13
13
|
║ ███████╗███████╗███████╗██║ ██║██║ ╚████║███████╗███████║ ║
|
|
14
14
|
║ ╚══════╝╚══════╝╚══════╝╚═╝ ╚═╝╚═╝ ╚═══╝╚══════╝╚══════╝ ║
|
|
15
|
-
║ v1.9.
|
|
15
|
+
║ v1.9.133 AI Agent Reliability Harness ║
|
|
16
16
|
║ verify · remember · orchestrate · audit · prevent drift ║
|
|
17
17
|
╚══════════════════════════════════════════════════════════════╝
|
|
18
18
|
```
|
package/bin/harness.js
CHANGED
|
@@ -6,7 +6,7 @@ const path = require('path');
|
|
|
6
6
|
const cp = require('child_process');
|
|
7
7
|
const readline = require('readline');
|
|
8
8
|
|
|
9
|
-
const VERSION = '1.9.
|
|
9
|
+
const VERSION = '1.9.133';
|
|
10
10
|
const MARK = '<!-- leerness:managed -->';
|
|
11
11
|
const README_START = '<!-- leerness:project-readme:start -->';
|
|
12
12
|
const README_END = '<!-- leerness:project-readme:end -->';
|
|
@@ -332,6 +332,8 @@ leerness audit . --fix # 누락 메타 자동 보강
|
|
|
332
332
|
- 1.9.129+ handoff **7번째 자동 회수** — \`🗑 최근 24h archive\` (D/L/P 카운트 + 복원 후보 안내). DELETE 활동 자동 인지.
|
|
333
333
|
- 1.9.130+ 🎉 **60 라운드 자율 모드 마일스톤** — JSON 4종 (handoff/memory status/session close/health) \`memorySurface.archive\` 필드 통합. MCP 40 / handoff auto-recovery 7 / DELETE-RESTORE cycle 완성.
|
|
334
334
|
- 1.9.131+ \`brainstorm\` 회수 범위에 3 archive 파일 (decisions/lessons/plan archive) 통합 — 과거 제거된 ideas 가 새 brainstorm 시 다시 후보로 노출. \`hits.archive\` 필드 + 복원 안내 라인.
|
|
335
|
+
- 1.9.132+ \`session close\` 텍스트 모드에 archive 누적 라인 추가 — 마감 시점 DELETE 활동 가시화 (handoff 7번째 회수와 symmetric). archive 가시성 6 surface 완성.
|
|
336
|
+
- 1.9.133+ \`brainstorm\` 텍스트 모드 lessonsExplicit / planMilestones display 추가 — 1.9.116에서 데이터 수집은 했지만 display 누락된 pre-existing gap fix.
|
|
335
337
|
|
|
336
338
|
---
|
|
337
339
|
|
|
@@ -4269,7 +4271,7 @@ function _banner(opts = {}) {
|
|
|
4269
4271
|
lines.push('');
|
|
4270
4272
|
for (const ln of lines) log(ln);
|
|
4271
4273
|
if (opts.quickStart) {
|
|
4272
|
-
log(C.bold(C.cyan(' ✨ 빠른 시작 (1.9.
|
|
4274
|
+
log(C.bold(C.cyan(' ✨ 빠른 시작 (1.9.133+ brainstorm display 완성 — 63 라운드 자율 누적)')));
|
|
4273
4275
|
log(' ' + C.green('npx leerness@latest init .') + C.dim(' # 신규 프로젝트 + 외부 AI CLI 설정'));
|
|
4274
4276
|
log(' ' + C.green('npx leerness handoff .') + C.dim(' # 컨텍스트 + lessons + 매칭 skill + history hit + brainstorm hits + 헤드라인'));
|
|
4275
4277
|
log(' ' + C.green('npx leerness handoff . --quiet') + C.dim(' # 자동화/CI 모드 (1.9.99) — 자동 회수 라인 비활성'));
|
|
@@ -5136,6 +5138,22 @@ function sessionClose(root, opts = {}) {
|
|
|
5136
5138
|
const agg = _retroAggregate(root);
|
|
5137
5139
|
log(`\n## 📈 진행 요약 (session #${sc.count})`);
|
|
5138
5140
|
log(` ${_retroOneLine(agg)}`);
|
|
5141
|
+
// 1.9.132: archive 활동 1줄 요약 — 마감 시점에 DELETE 활동 가시화 (handoff 7번째 회수와 symmetric)
|
|
5142
|
+
try {
|
|
5143
|
+
const hdSC = path.join(root, '.harness');
|
|
5144
|
+
const arc = { d: 0, l: 0, p: 0, total: 0 };
|
|
5145
|
+
for (const [k, f] of [['d', 'decisions.archive.md'], ['l', 'lessons.archive.md'], ['p', 'plan.archive.md']]) {
|
|
5146
|
+
const fp = path.join(hdSC, f);
|
|
5147
|
+
if (exists(fp)) {
|
|
5148
|
+
const entries = _parseArchiveBlocks(read(fp));
|
|
5149
|
+
arc[k] = entries.length;
|
|
5150
|
+
arc.total += entries.length;
|
|
5151
|
+
}
|
|
5152
|
+
}
|
|
5153
|
+
if (arc.total > 0) {
|
|
5154
|
+
log(` 🗑 archive 누적: D${arc.d}/L${arc.l}/P${arc.p} (${arc.total}건) — 복원 후보: leerness memory archive list`);
|
|
5155
|
+
}
|
|
5156
|
+
} catch {}
|
|
5139
5157
|
if (sc.count % 5 === 0) {
|
|
5140
5158
|
log(`\n## 🔄 ${sc.count}세션 마일스톤 — 자동 회고 (5세션마다)`);
|
|
5141
5159
|
retroCmd(root);
|
|
@@ -6036,6 +6054,16 @@ function brainstormCmd(root, topic) {
|
|
|
6036
6054
|
log(`\n## 📜 task-log 실패 라인 (${hits.taskLogFails.length}) — 1.9.67 인덱스 + brainstorm`);
|
|
6037
6055
|
hits.taskLogFails.slice(0, 5).forEach(t => log(` - .harness/task-log.md:${t.line || '?'} — ${t.title}`));
|
|
6038
6056
|
}
|
|
6057
|
+
// 1.9.133: lessonsExplicit display (데이터는 1.9.116에서 수집, display 누락 fix)
|
|
6058
|
+
if (hits.lessonsExplicit && hits.lessonsExplicit.length) {
|
|
6059
|
+
log(`\n## 💡 관련 lessons (${hits.lessonsExplicit.length}) — Memory Surface lessons.md 직접 매칭 (1.9.116)`);
|
|
6060
|
+
hits.lessonsExplicit.slice(0, 5).forEach(l => log(` - .harness/lessons.md:${l.line || '?'} — ${l.title}`));
|
|
6061
|
+
}
|
|
6062
|
+
// 1.9.133: planMilestones display (데이터는 1.9.116에서 수집, display 누락 fix)
|
|
6063
|
+
if (hits.planMilestones && hits.planMilestones.length) {
|
|
6064
|
+
log(`\n## 🗺 관련 plan milestones (${hits.planMilestones.length}) — plan.md 매칭 (1.9.116)`);
|
|
6065
|
+
hits.planMilestones.slice(0, 5).forEach(m => log(` - .harness/plan.md:${m.line || '?'} — ${m.id} ${m.title}`));
|
|
6066
|
+
}
|
|
6039
6067
|
// 1.9.131: 3 archive 파일 hits — DELETE 5종 archive 도 brainstorm 후보
|
|
6040
6068
|
if (hits.archive) {
|
|
6041
6069
|
const archiveTotal = (hits.archive.decisions?.length || 0) + (hits.archive.lessons?.length || 0) + (hits.archive.plan?.length || 0);
|