leerness 1.9.217 β†’ 1.9.219

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,79 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.9.219 β€” 2026-05-22
4
+
5
+ **πŸŽ‰ 80 λΌμš΄λ“œ 자율 λͺ¨λ“œ λ§ˆμΌμŠ€ν†€ + session-workflow.md 톡합 κ°±μ‹ .**
6
+
7
+ ### 1. 80 λΌμš΄λ“œ λ§ˆμΌμŠ€ν†€ λ³΄κ³ μ„œ
8
+ - `_reports/milestone-1.9.219-80-rounds.md` (private, npm μ œμ™Έ)
9
+ - 1.9.140 main μžλ™ push streak μ‹œμž‘ 이후 **80 λΌμš΄λ“œ μ •ν™• 도달**
10
+ - Phase 1~5 단계별 μš”μ•½ (μžλ™ν™” 인프라 β†’ 자율 λ§ˆμΌμŠ€ν†€ β†’ 5μΆ• μ™„μ„± β†’ μ‚¬μš©μž λͺ…μ‹œ μ†Œμ§„ β†’ 운영 κ°•ν™”)
11
+ - 5μΆ• 맀트릭슀 100/100 달성 기둝 (1.9.218)
12
+ - μ‚¬μš©μž λͺ…μ‹œ 7 λΌμš΄λ“œ (1.9.207~213) μ™„μ „ μ†Œμ§„ ν‘œ
13
+
14
+ ### 2. session-workflow.md 톡합 κ°±μ‹  (drift 차단)
15
+ - `(1.9.217+) session close μžλ™ 호좜 3μ’… κ²°κ³Ό 확인` 체크리슀트 μΆ”κ°€
16
+ - `## μ‚¬μš©μž λͺ…μ‹œ μš”μ²­ 처리 (1.9.207~213)` μ‹ μ„€ μ„Ήμ…˜ β€” 5단계 μˆœμ„œ:
17
+ 1. `leerness requests add` (1.9.207)
18
+ 2. `leerness review-request` (1.9.176)
19
+ 3. `leerness intent classify` (1.9.213, opt-in)
20
+ 4. `leerness constraints check` (1.9.208)
21
+ 5. `leerness task add` (μžλ™ dedup + auto review trigger)
22
+ - `## adaptive wakeup interval (1.9.210)` μ‹ μ„€ β€” opt-out κ°€μ΄λ“œ
23
+
24
+ ### 3. λˆ„μ  νšŒκ·€ (1.9.207~218) β€” λͺ¨λ‘ μœ μ§€
25
+
26
+ ### 4. stress-v164 β€” 15/15 PASS
27
+ - 1.9.219 (3): VERSION + λ§ˆμΌμŠ€ν†€ λ³΄κ³ μ„œ + session-workflow 톡합 검증
28
+ - μ„±λŠ₯ (2): cold_start 618ms / MCP 59 도ꡬ 501ms
29
+ - λˆ„μ  νšŒκ·€ (10): 1.9.207~218 전체
30
+
31
+ ### 5. μžλ™ release (81 λΌμš΄λ“œ main-push streak Β· 42 λΌμš΄λ“œ npm publish streak)
32
+
33
+ πŸŽ‰ **80 λΌμš΄λ“œ 자율 λͺ¨λ“œ λ§ˆμΌμŠ€ν†€** + 5μΆ• 100/100 + 백둜그 0 + MCP 59 도ꡬ
34
+
35
+ ---
36
+
37
+ ## 1.9.218 β€” 2026-05-22
38
+
39
+ **πŸ” handoff --json 톡합 κ°•ν™” + 5μΆ• 맀트릭슀 보강 (98β†’100 후보).**
40
+
41
+ ### 1. handoff --json 톡합 ν•„λ“œ μΆ”κ°€ (session close 와 동일 νŒ¨ν„΄)
42
+ | ν•„λ“œ | 좜처 | λ‚΄μš© |
43
+ |---|---|---|
44
+ | `userRequestsAudit` | 1.9.207 | total/open/missing/tracked/stale |
45
+ | `preWakeAudit` | 1.9.209 | auditedAt/ageMin/critical/warning/needsAttention (λ³΄κ³ μ„œ μžˆμ„ λ•Œλ§Œ) |
46
+ | `idempotencyAudit` | 1.9.212 | violations/high/medium/low/verified/overall |
47
+
48
+ ### 2. JSON 일관성 확보 β€” handoff / session close / health / drift check 4μ’… λͺ¨λ‘ 톡합
49
+ - μ™ΈλΆ€ μžλ™ν™” 도ꡬ / CI κ°€ 4 JSON λͺ…λ ΉμœΌλ‘œ μ’…ν•© 회수 κ°€λŠ₯
50
+ - 1.9.207~213 μ‹ κ·œ κΈ°λŠ₯이 λͺ¨λ“  μ£Όμš” JSON 좜λ ₯에 λ…ΈμΆœ
51
+
52
+ ### 3. 5μΆ• 맀트릭슀 보강 (98 β†’ 100 후보)
53
+ 1.9.207~217 11 λΌμš΄λ“œ λˆ„μ  영ν–₯:
54
+ - **AμΆ• (λ²”μš© AI ν•˜λ„€μŠ€)** 9.5β†’10: 1.9.208 constraints (6 ν”Œλž«νΌ catalog) + 1.9.213 intent (5 도메인)
55
+ - **BμΆ• (λ©€ν‹° Sub-Agent)** 9.5β†’10: 1.9.209 pre-wake audit + 1.9.216 MCP 5μ’… (59 도ꡬ)
56
+ - **CμΆ• (곡식 μŠ€ν‚¬)** 10/10 μœ μ§€
57
+ - **DμΆ• (μž₯κΈ° λ§₯락)** 9.5β†’10: 1.9.211 .harnessβ†’.leerness AI μ°Έμ‘° κ°€μ΄λ“œ
58
+ - **EμΆ• (κ²ŒμœΌλ¦„ λ°©μ§€)** 9.5β†’10: 1.9.207 λ―Έλ‹΅ μš”μ²­ + 1.9.212 λ©±λ“±μ„± + 1.9.217 session close 톡합
59
+
60
+ β†’ **100/100 (5μΆ• 평균 10/10)**
61
+
62
+ ### 4. λˆ„μ  νšŒκ·€ (1.9.207~217) β€” λͺ¨λ‘ μœ μ§€
63
+
64
+ ### 5. stress-v163 β€” 16/16 PASS
65
+ - 1.9.218 (5): VERSION + JSON 톡합 3μ’… ν•„λ“œ 검증
66
+ - userRequestsAudit total=1 검증, idempotency overall=clean 검증
67
+ - pre-wake-audit μžλ™ 톡합 검증
68
+ - μ„±λŠ₯ (2): cold_start 450ms / MCP 59 도ꡬ 417ms
69
+ - λˆ„μ  νšŒκ·€ (9)
70
+
71
+ ### 6. μžλ™ release (80 λΌμš΄λ“œ main-push streak Β· 41 λΌμš΄λ“œ npm publish streak)
72
+
73
+ πŸŽ‰ **5μΆ• 맀트릭슀 100/100 도달**
74
+
75
+ ---
76
+
3
77
  ## 1.9.217 β€” 2026-05-22
4
78
 
5
79
  **πŸ”š session close μžλ™ 톡합 β€” 1.9.207/209/212 μžλ™ 호좜.**
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.217-green)]() [![tests](https://img.shields.io/badge/e2e-217%2F217-success)]() [![stress](https://img.shields.io/badge/stress--v162-18%2F18-success)]() [![mcp](https://img.shields.io/badge/MCP--tools-59-brightgreen)]() [![rounds](https://img.shields.io/badge/autonomous--rounds-147-blueviolet)]() [![main-push](https://img.shields.io/badge/release--main--push-79_rounds-success)]() [![goal-matrix](https://img.shields.io/badge/λͺ©μ _맀트릭슀-98%2F100_(5μΆ•)-brightgreen)]() [![session-close](https://img.shields.io/badge/session_close-μžλ™_톡합_3μ’…-success)]() [![perf](https://img.shields.io/badge/cold_start-489ms-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.219-green)]() [![tests](https://img.shields.io/badge/e2e-217%2F217-success)]() [![stress](https://img.shields.io/badge/stress--v164-15%2F15-success)]() [![mcp](https://img.shields.io/badge/MCP--tools-59-brightgreen)]() [![rounds](https://img.shields.io/badge/autonomous--rounds-149-blueviolet)]() [![main-push](https://img.shields.io/badge/release--main--push-81_rounds-success)]() [![goal-matrix](https://img.shields.io/badge/λͺ©μ _맀트릭슀-100%2F100_(5μΆ•)-brightgreen)]() [![milestone](https://img.shields.io/badge/πŸŽ‰_milestone-80_λΌμš΄λ“œ-blueviolet)]() [![perf](https://img.shields.io/badge/cold_start-618ms-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.217 AI Agent Reliability Harness + Sandbox β•‘
15
+ β•‘ v1.9.219 AI Agent Reliability Harness + Sandbox β•‘
16
16
  β•‘ verify Β· remember Β· orchestrate Β· audit Β· sandbox Β· drift β•‘
17
- β•‘ πŸ”š session close μžλ™ 톡합 (requests/pre-wake/idempotency) β•‘
17
+ β•‘ πŸŽ‰ 80 λΌμš΄λ“œ 자율 λ§ˆμΌμŠ€ν†€ Β· 5μΆ• 100/100 Β· MCP 59 Β· 백둜그 0 β•‘
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.217';
10
+ const VERSION = '1.9.219';
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 처리).
@@ -5486,6 +5486,42 @@ function handoff(root) {
5486
5486
  };
5487
5487
  } catch {}
5488
5488
  } catch {}
5489
+ // 1.9.218: handoff JSON 톡합 κ°•ν™” β€” 1.9.207/209/212 μžλ™ 톡합 (session close 와 동일 νŒ¨ν„΄)
5490
+ try {
5491
+ const reqAudit = _auditUserRequests(root);
5492
+ result.userRequestsAudit = {
5493
+ total: reqAudit.total,
5494
+ open: reqAudit.open,
5495
+ missing: reqAudit.missing ? reqAudit.missing.length : 0,
5496
+ tracked: reqAudit.tracked ? reqAudit.tracked.length : 0,
5497
+ stale: reqAudit.stale ? reqAudit.stale.length : 0
5498
+ };
5499
+ } catch {}
5500
+ try {
5501
+ const pwState = _loadPreWakeReport(root);
5502
+ if (pwState.reports.length > 0) {
5503
+ const latest = pwState.reports[pwState.reports.length - 1];
5504
+ const ageMin = Math.floor((Date.now() - new Date(latest.auditedAt).getTime()) / 60000);
5505
+ result.preWakeAudit = {
5506
+ auditedAt: latest.auditedAt,
5507
+ ageMin,
5508
+ critical: latest.summary?.criticalCount || 0,
5509
+ warning: latest.summary?.warningCount || 0,
5510
+ needsAttention: !!latest.summary?.needsAttention
5511
+ };
5512
+ }
5513
+ } catch {}
5514
+ try {
5515
+ const idemp = _runIdempotencyAudit(root);
5516
+ result.idempotencyAudit = {
5517
+ violations: idemp.summary.totalViolations,
5518
+ high: idemp.summary.highSeverity,
5519
+ medium: idemp.summary.mediumSeverity,
5520
+ low: idemp.summary.lowSeverity,
5521
+ verified: idemp.summary.verifiedAreas,
5522
+ overall: idemp.summary.overall
5523
+ };
5524
+ } catch {}
5489
5525
  log(JSON.stringify(result, null, 2));
5490
5526
  return;
5491
5527
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "leerness",
3
- "version": "1.9.217",
3
+ "version": "1.9.219",
4
4
  "description": "Leerness: λΉ„νŒŒκ΄΄ λ§ˆμ΄κ·Έλ ˆμ΄μ…˜, μžλ™ 버전 κ°μ§€Β·μ—…λ°μ΄νŠΈ, κ³„νš/μ§„ν–‰/ν•Έλ“œμ˜€ν”„ μžλ™ν™”, κ²ŒμœΌλ¦„Β·μ‹œν¬λ¦ΏΒ·μΈμ½”λ”© μžλ™ κ°€λ“œ, Claude Code μŠ¬λž˜μ‹œ 톡합을 κ°–μΆ˜ ν•œκ΅­μ–΄ μš°μ„  AI 개발 ν•˜λ„€μŠ€.",
5
5
  "keywords": [
6
6
  "leerness",