leerness 1.9.226 β†’ 1.9.228

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,81 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.9.228 β€” 2026-05-23
4
+
5
+ **πŸ“Š health --json roundHistory 톡합 (JSON 3 λͺ…λ Ή 일관성) + session-workflow.md drift 차단 + ν—€λ“œλΌμΈ label κ°±μ‹ .**
6
+
7
+ ### 1. health --json `roundHistory` ν•„λ“œ 톡합
8
+ - handoff/session close에 이어 health도 톡합 β†’ **JSON 3 λͺ…λ Ή 일관성**
9
+ - `{ roundCount, baselineVersion, nextMilestone, roundsToNextMilestone, daysActive, avgRoundsPerDay }`
10
+ - μ™ΈλΆ€ μžλ™ν™”κ°€ health 단일 호좜둜 μ§„ν–‰λ„κΉŒμ§€ 회수
11
+
12
+ ### 2. session-workflow.md drift 차단 κ°±μ‹  (1.9.220~228)
13
+ - μ‹ κ·œ μ„Ήμ…˜ 4개:
14
+ - 비정상 μ’…λ£Œ 자율 재개 (1.9.220~222)
15
+ - μ‚¬μš©μž μš”μ²­ μžλ™ μ™„λ£Œ (1.9.223~225)
16
+ - λΌμš΄λ“œ 진행도 κ°€μ‹œν™” (1.9.226~228)
17
+ - JSON 톡합 맀트릭슀 (handoff/session close 6 ν•„λ“œ)
18
+ - λ§ˆμ§€λ§‰ μ—…λ°μ΄νŠΈ 1.9.171 β†’ 1.9.228 (57 λΌμš΄λ“œ λˆ„μ  정리)
19
+
20
+ ### 3. handoff ν—€λ“œλΌμΈ label list κ°±μ‹ 
21
+ - κΈ°μ‘΄: `(1.9.81/93/113/152/162/192/197/204/207/209/215/220)` (12 버전)
22
+ - μ‹ κ·œ: `(1.9.81/93/113/152/162/192/197/204/207/209/215/220/223/226)` (**14 버전**, +1.9.223 delivered-requests, +1.9.226 round-counter)
23
+ - AIκ°€ ν—€λ“œλΌμΈ 좜처 μΆ”μ ν•˜κΈ° 쉬움 (메타 κ°€μ‹œμ„±)
24
+
25
+ ### 4. λˆ„μ  νšŒκ·€ (1.9.207~227) β€” λͺ¨λ‘ μœ μ§€
26
+
27
+ ### 5. stress-v173 β€” 15/15 PASS
28
+ - 1.9.228 (5): VERSION + health roundHistory + 3 λͺ…λ Ή 일관성 + ν—€λ“œλΌμΈ label + session-workflow.md
29
+ - μ„±λŠ₯ (2): cold_start avg 414ms / health --json 1132ms
30
+ - λˆ„μ  νšŒκ·€ (8): 1.9.207~227
31
+
32
+ ### 6. μžλ™ release (90 λΌμš΄λ“œ main-push streak Β· 51 λΌμš΄λ“œ npm publish streak)
33
+
34
+ πŸ“Š **JSON 일관성 맀트릭슀 μ™„μ„±** (handoff/session close/health 3 λͺ…λ Ή β€” `roundHistory` ν•„λ“œ 동일 ν˜•μ‹)
35
+
36
+ ---
37
+
38
+ ## 1.9.227 β€” 2026-05-23
39
+
40
+ **πŸ“Š handoff/session close --json roundHistory 톡합 (6 ν•„λ“œ μ™„μ„±) + CLAUDE/AGENTS drift 차단.**
41
+
42
+ ### 1. handoff --json 6번째 톡합 ν•„λ“œ `roundHistory`
43
+ - `{ roundCount, baselineVersion, nextMilestone, roundsToNextMilestone, daysActive, avgRoundsPerDay }`
44
+ - μ™ΈλΆ€ CI/λͺ¨λ‹ˆν„°λ§μ΄ λΌμš΄λ“œ 진행도 + λ‹€μŒ λ§ˆμΌμŠ€ν†€ 직접 회수
45
+ - 1.9.218 (4 ν•„λ“œ) β†’ 1.9.223 (5 ν•„λ“œ) β†’ 1.9.227 (**6 ν•„λ“œ μ™„μ„±**)
46
+
47
+ ### 2. session close --json 6번째 톡합 ν•„λ“œ `roundHistory`
48
+ - 마감 μ‹œ 진행도 톡계 동기 λ…ΈμΆœ
49
+ - handoff/session close JSON 동일 νŒ¨ν„΄ μœ μ§€
50
+
51
+ ### 3. CLAUDE.md / AGENTS.md drift 차단 κ°±μ‹ 
52
+ - 1.9.222~227 6 λΌμš΄λ“œ λˆ„μ  톡합 (이전 κ°±μ‹ : 1.9.214)
53
+ - μ‹ κ·œ μ„Ήμ…˜: "μ‚¬μš©μž μš”μ²­ μžλ™ μ™„λ£Œ μ‹œμŠ€ν…œ (1.9.223~225)" + "λΌμš΄λ“œ 진행도 κ°€μ‹œν™” (1.9.226~227)"
54
+ - μƒˆ λ©”νƒ€νŒŒμΌ (last update: 1.9.214 β†’ 1.9.227, 6 λΌμš΄λ“œ λˆ„μ )
55
+
56
+ ### 4. 6 톡합 ν•„λ“œ 맀트릭슀 μ™„μ„± (handoff/session close --json 일관성)
57
+ - userRequestsAudit (1.9.207/218)
58
+ - preWakeAudit (1.9.209/218)
59
+ - idempotencyAudit (1.9.212/218)
60
+ - abnormalShutdown (1.9.220/221)
61
+ - deliveredRequests (1.9.223)
62
+ - **roundHistory** (1.9.226/227) ⭐
63
+
64
+ ### 5. λˆ„μ  νšŒκ·€ (1.9.207~226) β€” λͺ¨λ‘ μœ μ§€
65
+
66
+ ### 6. stress-v172 β€” 17/17 PASS
67
+ - 1.9.227 (7): VERSION + handoff JSON + session close JSON + 6 ν•„λ“œ 검증 (handoff) + 6 ν•„λ“œ 검증 (session close) + CLAUDE λˆ„μ  + AGENTS λˆ„μ 
68
+ - μ„±λŠ₯ (2): cold_start avg 400ms / handoff --json 641ms
69
+ - λˆ„μ  νšŒκ·€ (8): 1.9.207~226
70
+
71
+ ### 7. μžλ™ release (89 λΌμš΄λ“œ main-push streak Β· 50 λΌμš΄λ“œ npm publish streak πŸŽ‰)
72
+
73
+ πŸ“Š **JSON 톡합 맀트릭슀 μ™„μ„±** β€” μ™ΈλΆ€ μžλ™ν™”/CI κ°€ leerness μƒνƒœ 6 차원 동기 회수
74
+
75
+ πŸŽ‰ **50 λΌμš΄λ“œ npm publish streak 달성**
76
+
77
+ ---
78
+
3
79
  ## 1.9.226 β€” 2026-05-23
4
80
 
5
81
  **πŸ”„ round-history CLI + handoff ν—€λ“œλΌμΈ λΌμš΄λ“œ μΉ΄μš΄ν„° + MCP 62번째 도ꡬ.**
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  > **AI μ½”λ”© μ—μ΄μ „νŠΈμ˜ κ±°μ§“ μ™„λ£ŒΒ·μ€‘λ³΅Β·λ§κ°Β·μΆ©λŒμ„ λ§‰μ•„μ£ΌλŠ” κ²€μˆ˜Β·κΈ°μ–΅Β·ν˜‘μ—… CLI ν•˜λ„€μŠ€.**
4
4
 
5
- [![npm](https://img.shields.io/badge/npm-leerness-blue)](https://www.npmjs.com/package/leerness) [![version](https://img.shields.io/badge/version-1.9.226-green)]() [![tests](https://img.shields.io/badge/e2e-217%2F217-success)]() [![stress](https://img.shields.io/badge/stress--v171-16%2F16-success)]() [![mcp](https://img.shields.io/badge/MCP--tools-62-brightgreen)]() [![rounds](https://img.shields.io/badge/autonomous--rounds-182-blueviolet)]() [![main-push](https://img.shields.io/badge/release--main--push-88_rounds-success)]() [![goal-matrix](https://img.shields.io/badge/λͺ©μ _맀트릭슀-100%2F100_(5μΆ•)-brightgreen)]() [![round-history](https://img.shields.io/badge/πŸ”„_round--history-R182_β†’_R200-blueviolet)]() [![perf](https://img.shields.io/badge/cold_start-336ms-success)]() [![install](https://img.shields.io/badge/npm_i_leerness-μ¦‰μ‹œ_μ‚¬μš©_κ°€λŠ₯-success)]() [![sandbox](https://img.shields.io/badge/runCommandSafe-cwd_jail%2Benv_scrub-success)]() [![license](https://img.shields.io/badge/license-MIT-lightgrey)]()
5
+ [![npm](https://img.shields.io/badge/npm-leerness-blue)](https://www.npmjs.com/package/leerness) [![version](https://img.shields.io/badge/version-1.9.228-green)]() [![tests](https://img.shields.io/badge/e2e-217%2F217-success)]() [![stress](https://img.shields.io/badge/stress--v173-15%2F15-success)]() [![mcp](https://img.shields.io/badge/MCP--tools-62-brightgreen)]() [![rounds](https://img.shields.io/badge/autonomous--rounds-184-blueviolet)]() [![main-push](https://img.shields.io/badge/release--main--push-90_rounds-success)]() [![goal-matrix](https://img.shields.io/badge/λͺ©μ _맀트릭슀-100%2F100_(5μΆ•)-brightgreen)]() [![json-3cmd](https://img.shields.io/badge/πŸ“Š_JSON_3_λͺ…λ Ή_일관성-handoff%2Bclose%2Bhealth-blueviolet)]() [![perf](https://img.shields.io/badge/cold_start-414ms-success)]() [![install](https://img.shields.io/badge/npm_i_leerness-μ¦‰μ‹œ_μ‚¬μš©_κ°€λŠ₯-success)]() [![sandbox](https://img.shields.io/badge/runCommandSafe-cwd_jail%2Benv_scrub-success)]() [![license](https://img.shields.io/badge/license-MIT-lightgrey)]()
6
6
 
7
7
  ```
8
8
  ╔══════════════════════════════════════════════════════════════╗
@@ -12,9 +12,9 @@
12
12
  β•‘ β–ˆβ–ˆβ•‘ β–ˆβ–ˆβ•”β•β•β• β–ˆβ–ˆβ•”β•β•β• β–ˆβ–ˆβ•”β•β•β–ˆβ–ˆβ•—β–ˆβ–ˆβ•‘β•šβ–ˆβ–ˆβ•—β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•”β•β•β• β•šβ•β•β•β•β–ˆβ–ˆβ•‘ β•‘
13
13
  β•‘ β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ•‘ β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘ β•šβ–ˆβ–ˆβ–ˆβ–ˆβ•‘β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•‘ β•‘
14
14
  β•‘ β•šβ•β•β•β•β•β•β•β•šβ•β•β•β•β•β•β•β•šβ•β•β•β•β•β•β•β•šβ•β• β•šβ•β•β•šβ•β• β•šβ•β•β•β•β•šβ•β•β•β•β•β•β•β•šβ•β•β•β•β•β•β• β•‘
15
- β•‘ v1.9.226 AI Agent Reliability Harness + Sandbox β•‘
15
+ β•‘ v1.9.228 AI Agent Reliability Harness + Sandbox β•‘
16
16
  β•‘ verify Β· remember Β· orchestrate Β· audit Β· sandbox Β· drift β•‘
17
- β•‘ πŸ”„ round-history CLI + handoff R182 β†’ R200 λ§ˆμΌμŠ€ν†€ β•‘
17
+ β•‘ πŸ“Š health --json roundHistory + 3 λͺ…λ Ή 일관성 μ™„μ„± β•‘
18
18
  β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•
19
19
  ```
20
20
 
package/bin/harness.js CHANGED
@@ -7,7 +7,7 @@ const cp = require('child_process');
7
7
  const os = require('os'); // 1.9.178: _publishToNpm μ—μ„œ os.tmpdir() μ‚¬μš© (μ „μ—­ import)
8
8
  const readline = require('readline');
9
9
 
10
- const VERSION = '1.9.226';
10
+ const VERSION = '1.9.228';
11
11
 
12
12
  // 1.9.184: DEP0190 (child_process shell: true) deprecation warning μ–΅μ œ (μ‚¬μš©μž λͺ…μ‹œ).
13
13
  // leerness λŠ” cross-platform PATH resolution 을 μœ„ν•΄ shell: true λ₯Ό μ˜λ„μ μœΌλ‘œ μ‚¬μš© (claude.cmd / ollama.cmd λ“± Windows .cmd 처리).
@@ -5903,6 +5903,18 @@ function handoff(root) {
5903
5903
  ids: delivered.candidates.map(c => c.id)
5904
5904
  };
5905
5905
  } catch {}
5906
+ // 1.9.227: roundHistory 톡합 (handoff JSON 6번째 톡합 ν•„λ“œ) β€” 자율 진행도 μ™ΈλΆ€ 회수
5907
+ try {
5908
+ const rh = _computeRoundHistory(root);
5909
+ result.roundHistory = {
5910
+ roundCount: rh.roundCount,
5911
+ baselineVersion: rh.baselineVersion,
5912
+ nextMilestone: rh.nextMilestone,
5913
+ roundsToNextMilestone: rh.roundsToNextMilestone,
5914
+ daysActive: rh.daysActive,
5915
+ avgRoundsPerDay: rh.avgRoundsPerDay
5916
+ };
5917
+ } catch {}
5906
5918
  } catch {}
5907
5919
  try {
5908
5920
  const pwState = _loadPreWakeReport(root);
@@ -6173,7 +6185,7 @@ function handoff(root) {
6173
6185
  if (parts.length) {
6174
6186
  const isTty = process.stdout && process.stdout.isTTY;
6175
6187
  const cy = s => isTty ? `\x1b[36m${s}\x1b[0m` : s;
6176
- log(cy(`πŸ“Š ν—€λ“œλΌμΈ (1.9.81/93/113/152/162/192/197/204/207/209/215/220): ${parts.join(' Β· ')}`));
6188
+ log(cy(`πŸ“Š ν—€λ“œλΌμΈ (1.9.81/93/113/152/162/192/197/204/207/209/215/220/223/226): ${parts.join(' Β· ')}`));
6177
6189
  }
6178
6190
  } catch {}
6179
6191
  }
@@ -10028,6 +10040,18 @@ function sessionClose(root, opts = {}) {
10028
10040
  autoCompleteAvailable: delivered.candidates.length > 0
10029
10041
  };
10030
10042
  } catch {}
10043
+ // 1.9.227: roundHistory 톡합 (session close JSON 6번째 톡합 ν•„λ“œ)
10044
+ try {
10045
+ const rh = _computeRoundHistory(root);
10046
+ jsonResult.roundHistory = {
10047
+ roundCount: rh.roundCount,
10048
+ baselineVersion: rh.baselineVersion,
10049
+ nextMilestone: rh.nextMilestone,
10050
+ roundsToNextMilestone: rh.roundsToNextMilestone,
10051
+ daysActive: rh.daysActive,
10052
+ avgRoundsPerDay: rh.avgRoundsPerDay
10053
+ };
10054
+ } catch {}
10031
10055
  } catch {}
10032
10056
  try {
10033
10057
  // 1.9.209: pre-wake-audit μžλ™ μ‹€ν–‰ + μ €μž₯ (sleep μ „ μžλ™ 점검)
@@ -16342,6 +16366,18 @@ function healthCmd(root) {
16342
16366
  summary: `F${fNodesHe.length}/E${edgeCount}${isolated > 0 ? `/iso${isolated}` : ''}`
16343
16367
  };
16344
16368
  } catch { out.featureGraph = { error: 'featureGraph 점검 μ‹€νŒ¨' }; }
16369
+ // 1.9.228: health --json roundHistory 톡합 (handoff/session close 와 동일 β€” JSON 3 λͺ…λ Ή 일관성 + 6 톡합 ν•„λ“œ μ™„μ„±)
16370
+ try {
16371
+ const rh = _computeRoundHistory(root);
16372
+ out.roundHistory = {
16373
+ roundCount: rh.roundCount,
16374
+ baselineVersion: rh.baselineVersion,
16375
+ nextMilestone: rh.nextMilestone,
16376
+ roundsToNextMilestone: rh.roundsToNextMilestone,
16377
+ daysActive: rh.daysActive,
16378
+ avgRoundsPerDay: rh.avgRoundsPerDay
16379
+ };
16380
+ } catch { out.roundHistory = { error: 'roundHistory 점검 μ‹€νŒ¨' }; }
16345
16381
  // 1.9.163: 5λŠ₯λ ₯ 맀트릭슀 μžλ™ 평가 (1.9.155 sub-agent 점검 β†’ μ½”λ“œ 기반 μžλ™ν™”)
16346
16382
  // 각 λŠ₯λ ₯을 μ½”λ“œ grep 으둜 κ²€μΆœ β†’ 0~100 점수. μ‚¬μš©μžκ°€ λ§€ health 호좜 μ‹œ leerness 자기 평가 확인.
16347
16383
  try {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "leerness",
3
- "version": "1.9.226",
3
+ "version": "1.9.228",
4
4
  "description": "Leerness: λΉ„νŒŒκ΄΄ λ§ˆμ΄κ·Έλ ˆμ΄μ…˜, μžλ™ 버전 κ°μ§€Β·μ—…λ°μ΄νŠΈ, κ³„νš/μ§„ν–‰/ν•Έλ“œμ˜€ν”„ μžλ™ν™”, κ²ŒμœΌλ¦„Β·μ‹œν¬λ¦ΏΒ·μΈμ½”λ”© μžλ™ κ°€λ“œ, Claude Code μŠ¬λž˜μ‹œ 톡합을 κ°–μΆ˜ ν•œκ΅­μ–΄ μš°μ„  AI 개발 ν•˜λ„€μŠ€.",
5
5
  "keywords": [
6
6
  "leerness",