leerness 1.9.216 β†’ 1.9.217

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,46 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.9.217 β€” 2026-05-22
4
+
5
+ **πŸ”š session close μžλ™ 톡합 β€” 1.9.207/209/212 μžλ™ 호좜.**
6
+
7
+ ### 1. session close μžλ™ 호좜 3μ’… (마감 μ‹œ)
8
+ | μ˜μ—­ | 좜처 | λ™μž‘ |
9
+ |---|---|---|
10
+ | `userRequestsAudit` | 1.9.207 | open/in-progress μš”μ²­ β†’ missing/tracked/stale λΆ„λ₯˜ |
11
+ | `preWakeAudit` | 1.9.209 | sleep μ „ 6 μ˜μ—­ audit + .harness/pre-wake-report.json μžλ™ μ €μž₯ |
12
+ | `idempotencyAudit` | 1.9.212 | 4μ˜μ—­ λ©±λ“±μ„± 검사 (rule/task/user-requests/wakeups) |
13
+
14
+ ### 2. JSON λͺ¨λ“œ (`--json`) 톡합 ν•„λ“œ μΆ”κ°€
15
+ - `userRequestsAudit: { total, open, missing, tracked, stale }`
16
+ - `preWakeAudit: { auditedAt, critical, warning, info, needsAttention }`
17
+ - `idempotencyAudit: { violations, high, medium, low, verified, overall }`
18
+
19
+ ### 3. human 좜λ ₯ μžλ™ μ„Ήμ…˜
20
+ ```
21
+ ## πŸ”š session close μžλ™ 톡합 보고 (1.9.217)
22
+ ⚠ λ―Έλ‹΅ μ‚¬μš©μž μš”μ²­ N건 (task-log/plan/decisions λ§€μΉ­ μ•ˆ 됨)
23
+ 🚨 pre-wake-audit: critical N (λ‹€μŒ 깨어남 μ‹œ 점검 ν•„μš”)
24
+ βœ“ λ©±λ“±μ„± 검사 톡과 β€” verified 4 μ˜μ—­
25
+ ```
26
+
27
+ ### 4. opt-out μ˜΅μ…˜
28
+ - `--no-pre-wake` β€” pre-wake audit μŠ€ν‚΅
29
+ - μ˜΅μ…˜ μ™Έ λ‹€λ₯Έ 톡합은 항상 μ‹€ν–‰ (가벼움)
30
+
31
+ ### 5. λˆ„μ  νšŒκ·€ (1.9.207~216) β€” λͺ¨λ‘ μœ μ§€
32
+
33
+ ### 6. stress-v162 β€” 18/18 PASS
34
+ - 1.9.217 (7): VERSION + JSON ν•„λ“œ + human μ„Ήμ…˜ + μžλ™ μ €μž₯ + opt-out + ν•„λ“œ ꡬ쑰 + clean
35
+ - μ„±λŠ₯ (2): cold_start 489ms / MCP 59 도ꡬ 785ms
36
+ - λˆ„μ  νšŒκ·€ (9)
37
+
38
+ ### 7. μžλ™ release (79 λΌμš΄λ“œ main-push streak Β· 40 λΌμš΄λ“œ npm publish streak)
39
+
40
+ πŸŽ‰ **session close κ°•ν™”** β€” λ§€ 마감 μ‹œ 운영 μ•ˆμ „ μžλ™ 점검
41
+
42
+ ---
43
+
3
44
  ## 1.9.216 β€” 2026-05-22
4
45
 
5
46
  **πŸ”Œ MCP 5μ’… μΆ”κ°€ β€” 1.9.207~213 μ™ΈλΆ€ AI λ…ΈμΆœ (54 β†’ 59 도ꡬ).**
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.216-green)]() [![tests](https://img.shields.io/badge/e2e-217%2F217-success)]() [![stress](https://img.shields.io/badge/stress--v161-19%2F19-success)]() [![mcp](https://img.shields.io/badge/MCP--tools-59-brightgreen)]() [![rounds](https://img.shields.io/badge/autonomous--rounds-146-blueviolet)]() [![main-push](https://img.shields.io/badge/release--main--push-78_rounds-success)]() [![goal-matrix](https://img.shields.io/badge/λͺ©μ _맀트릭슀-98%2F100_(5μΆ•)-brightgreen)]() [![mcp-7r](https://img.shields.io/badge/MCP_7λΌμš΄λ“œ-5μ’…_μΆ”κ°€-success)]() [![perf](https://img.shields.io/badge/cold_start-544ms-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.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)]()
6
6
 
7
7
  ```
8
8
  ╔══════════════════════════════════════════════════════════════╗
@@ -12,9 +12,9 @@
12
12
  β•‘ β–ˆβ–ˆβ•‘ β–ˆβ–ˆβ•”β•β•β• β–ˆβ–ˆβ•”β•β•β• β–ˆβ–ˆβ•”β•β•β–ˆβ–ˆβ•—β–ˆβ–ˆβ•‘β•šβ–ˆβ–ˆβ•—β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•”β•β•β• β•šβ•β•β•β•β–ˆβ–ˆβ•‘ β•‘
13
13
  β•‘ β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ•‘ β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘ β•šβ–ˆβ–ˆβ–ˆβ–ˆβ•‘β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•‘ β•‘
14
14
  β•‘ β•šβ•β•β•β•β•β•β•β•šβ•β•β•β•β•β•β•β•šβ•β•β•β•β•β•β•β•šβ•β• β•šβ•β•β•šβ•β• β•šβ•β•β•β•β•šβ•β•β•β•β•β•β•β•šβ•β•β•β•β•β•β• β•‘
15
- β•‘ v1.9.216 AI Agent Reliability Harness + Sandbox β•‘
15
+ β•‘ v1.9.217 AI Agent Reliability Harness + Sandbox β•‘
16
16
  β•‘ verify Β· remember Β· orchestrate Β· audit Β· sandbox Β· drift β•‘
17
- β•‘ πŸ”Œ MCP 59 도ꡬ (1.9.207~213 μ™ΈλΆ€ AI λ…ΈμΆœ +5μ’…) β•‘
17
+ β•‘ πŸ”š session close μžλ™ 톡합 (requests/pre-wake/idempotency) β•‘
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.216';
10
+ const VERSION = '1.9.217';
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 처리).
@@ -9465,7 +9465,98 @@ function sessionClose(root, opts = {}) {
9465
9465
  };
9466
9466
  } catch {}
9467
9467
  } catch {}
9468
+
9469
+ // 1.9.217: session close μžλ™ 톡합 β€” 1.9.207 + 1.9.209 + 1.9.212
9470
+ // 마감 μ‹œ λ―Έλ‹΅ μš”μ²­ / pre-wake audit / λ©±λ“±μ„± 검사 μžλ™ μ‹€ν–‰ + JSON 톡합
9471
+ try {
9472
+ // 1.9.207: λ―Έλ‹΅ μ‚¬μš©μž μš”μ²­ audit
9473
+ const reqAudit = _auditUserRequests(root);
9474
+ jsonResult.userRequestsAudit = {
9475
+ total: reqAudit.total,
9476
+ open: reqAudit.open,
9477
+ missing: reqAudit.missing ? reqAudit.missing.length : 0,
9478
+ tracked: reqAudit.tracked ? reqAudit.tracked.length : 0,
9479
+ stale: reqAudit.stale ? reqAudit.stale.length : 0
9480
+ };
9481
+ } catch {}
9482
+ try {
9483
+ // 1.9.209: pre-wake-audit μžλ™ μ‹€ν–‰ + μ €μž₯ (sleep μ „ μžλ™ 점검)
9484
+ if (!opts.noPreWake && !has('--no-pre-wake')) {
9485
+ const audit = _runPreWakeAudit(root);
9486
+ _saveAndAppendPreWakeReport(root, audit);
9487
+ jsonResult.preWakeAudit = {
9488
+ auditedAt: audit.auditedAt,
9489
+ critical: audit.summary.criticalCount,
9490
+ warning: audit.summary.warningCount,
9491
+ info: audit.summary.infoCount,
9492
+ needsAttention: audit.summary.needsAttention
9493
+ };
9494
+ }
9495
+ } catch {}
9496
+ try {
9497
+ // 1.9.212: λ©±λ“±μ„± 검사 μžλ™ μ‹€ν–‰ (rule/task/user-requests/wakeups 4μ˜μ—­)
9498
+ const idemp = _runIdempotencyAudit(root);
9499
+ jsonResult.idempotencyAudit = {
9500
+ violations: idemp.summary.totalViolations,
9501
+ high: idemp.summary.highSeverity,
9502
+ medium: idemp.summary.mediumSeverity,
9503
+ low: idemp.summary.lowSeverity,
9504
+ verified: idemp.summary.verifiedAreas,
9505
+ overall: idemp.summary.overall
9506
+ };
9507
+ } catch {}
9508
+
9468
9509
  process.stdout.write(JSON.stringify(jsonResult, null, 2) + '\n');
9510
+ } else {
9511
+ // 1.9.217: human 좜λ ₯ λͺ¨λ“œμ—μ„œλ„ 톡합 보고 λ…ΈμΆœ (마감 직전)
9512
+ try {
9513
+ const isTty = process.stdout.isTTY;
9514
+ const grn = s => isTty ? `\x1b[32m${s}\x1b[0m` : s;
9515
+ const yel = s => isTty ? `\x1b[33m${s}\x1b[0m` : s;
9516
+ const red = s => isTty ? `\x1b[31m${s}\x1b[0m` : s;
9517
+ const dim = s => isTty ? `\x1b[2m${s}\x1b[0m` : s;
9518
+
9519
+ log('');
9520
+ log(`## πŸ”š session close μžλ™ 톡합 보고 (1.9.217)`);
9521
+ // 1.9.207
9522
+ try {
9523
+ const reqAudit = _auditUserRequests(root);
9524
+ const missCnt = reqAudit.missing ? reqAudit.missing.length : 0;
9525
+ if (missCnt > 0) {
9526
+ log(red(` ⚠ λ―Έλ‹΅ μ‚¬μš©μž μš”μ²­ ${missCnt}건 (task-log/plan/decisions λ§€μΉ­ μ•ˆ 됨)`));
9527
+ } else if (reqAudit.open > 0) {
9528
+ log(grn(` βœ“ μ‚¬μš©μž μš”μ²­ ${reqAudit.open}건 λͺ¨λ‘ tracked`));
9529
+ } else {
9530
+ log(dim(` β„Ή μ‚¬μš©μž μš”μ²­ μ—†μŒ (UR 백둜그 λΉ„μ–΄μžˆμŒ)`));
9531
+ }
9532
+ } catch {}
9533
+ // 1.9.209
9534
+ try {
9535
+ if (!opts.noPreWake && !has('--no-pre-wake')) {
9536
+ const audit = _runPreWakeAudit(root);
9537
+ _saveAndAppendPreWakeReport(root, audit);
9538
+ const sum = audit.summary;
9539
+ if (sum.criticalCount > 0) {
9540
+ log(red(` 🚨 pre-wake-audit: critical ${sum.criticalCount} (λ‹€μŒ 깨어남 μ‹œ 점검 ν•„μš”)`));
9541
+ } else if (sum.warningCount > 0) {
9542
+ log(yel(` ⚠ pre-wake-audit: warning ${sum.warningCount}`));
9543
+ } else {
9544
+ log(grn(` βœ“ pre-wake-audit: clean (sleep μ•ˆμ „)`));
9545
+ }
9546
+ }
9547
+ } catch {}
9548
+ // 1.9.212
9549
+ try {
9550
+ const idemp = _runIdempotencyAudit(root);
9551
+ const v = idemp.summary.totalViolations;
9552
+ if (v > 0) {
9553
+ log(red(` ⚠ λ©±λ“±μ„± μœ„λ°˜ ${v}건 (high: ${idemp.summary.highSeverity})`));
9554
+ log(dim(` β†’ leerness idempotency audit 으둜 상세 확인`));
9555
+ } else {
9556
+ log(grn(` βœ“ λ©±λ“±μ„± 검사 톡과 β€” verified ${idemp.summary.verifiedAreas} μ˜μ—­`));
9557
+ }
9558
+ } catch {}
9559
+ } catch {}
9469
9560
  }
9470
9561
  }
9471
9562
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "leerness",
3
- "version": "1.9.216",
3
+ "version": "1.9.217",
4
4
  "description": "Leerness: λΉ„νŒŒκ΄΄ λ§ˆμ΄κ·Έλ ˆμ΄μ…˜, μžλ™ 버전 κ°μ§€Β·μ—…λ°μ΄νŠΈ, κ³„νš/μ§„ν–‰/ν•Έλ“œμ˜€ν”„ μžλ™ν™”, κ²ŒμœΌλ¦„Β·μ‹œν¬λ¦ΏΒ·μΈμ½”λ”© μžλ™ κ°€λ“œ, Claude Code μŠ¬λž˜μ‹œ 톡합을 κ°–μΆ˜ ν•œκ΅­μ–΄ μš°μ„  AI 개발 ν•˜λ„€μŠ€.",
5
5
  "keywords": [
6
6
  "leerness",