leerness 1.9.213 β†’ 1.9.215

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,69 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.9.215 β€” 2026-05-22
4
+
5
+ **🎯 handoff ν—€λ“œλΌμΈμ— constraints/intent μžλ™ 톡합 + AGENTS.md 7 λΌμš΄λ“œ λˆ„μ .**
6
+
7
+ > 백둜그 μ†Œμ§„ ν›„ 운영 κ°€μΉ˜ κ°•ν™” β€” ν˜„μž¬ μ§„ν–‰ 쀑 taskμ—μ„œ μžλ™μœΌλ‘œ ν”Œλž«νΌ μ œμ•½ + μ˜λ„ λΆ„λ₯˜ λ…ΈμΆœ
8
+
9
+ ### 1. handoff ν—€λ“œλΌμΈ 15번째 μš”μ†Œ (1.9.215)
10
+ - progress-tracker.md 의 **첫 ν™œμ„± task** request μžλ™ μΆ”μΆœ
11
+ - **1.9.208 constraints 톡합**: ν”Œλž«νΌ alias λ§€μΉ­ μ‹œ `🚦 N ν”Œλž«νΌ μ œμ•½` λ…ΈμΆœ
12
+ - 예: "Stripe API 결제 λͺ¨λ“ˆ" β†’ `🚦 1 ν”Œλž«νΌ μ œμ•½`
13
+ - **1.9.213 intent 톡합**: μ˜λ„ μžλ™ λΆ„λ₯˜ μ‹œ `🎯 intent broad/<domain>` λ˜λŠ” `🎯 intent precise` λ…ΈμΆœ
14
+ - 예: "κ²Œμž„ λ§Œλ“€μ–΄μ€˜ ... 포괄적" β†’ `🎯 intent broad/game`
15
+ - ν—€λ“œλΌμΈ 라벨: `1.9.81/93/113/152/162/192/197/204/207/209/215`
16
+ - done/dropped/blocked/completed taskλŠ” λ¬΄μ‹œ (ν™œμ„±λ§Œ 뢄석)
17
+
18
+ ### 2. AGENTS.md 7 λΌμš΄λ“œ λˆ„μ  κ°±μ‹  (CLAUDE.md λ“±κ°€)
19
+ - `## μ‚¬μš©μž λͺ…μ‹œ μ‹ κ·œ 7μ’… (1.9.207~213)` ν‘œ ν˜•μ‹ (버전 / κΈ°λŠ₯ / CLI)
20
+ - `### handoff ν—€λ“œλΌμΈ μžλ™ λ…ΈμΆœ (1.9.215+)` μ„Ήμ…˜
21
+ - `### μ˜λ„ 보호 원칙 (1.9.213)` λͺ…μ‹œ
22
+
23
+ ### 3. λˆ„μ  νšŒκ·€ (1.9.207~214) β€” λͺ¨λ‘ μœ μ§€
24
+
25
+ ### 4. stress-v160 β€” 17/17 PASS
26
+ - 1.9.215 (6): VERSION + ν—€λ“œλΌμΈ μ½”λ“œ + AGENTS.md + 격리 검증 3μ’…
27
+ - stripe task β†’ 🚦 μžλ™ / broad+game task β†’ 🎯 μžλ™ / done task λ¬΄μ‹œ
28
+ - μ„±λŠ₯ (2) + λˆ„μ  νšŒκ·€ (9)
29
+ - μ„±λŠ₯: --version cold start avg 677ms Β· MCP 54 도ꡬ 453ms
30
+
31
+ ### 5. μžλ™ release (77 λΌμš΄λ“œ main-push streak Β· 38 λΌμš΄λ“œ npm publish streak)
32
+
33
+ ---
34
+
35
+ ## 1.9.214 β€” 2026-05-22
36
+
37
+ **πŸ›  운영 μ•ˆμ •ν™” λΌμš΄λ“œ β€” drift 차단 + AGENTS/CLAUDE 7 λΌμš΄λ“œ λˆ„μ  κ°±μ‹  + μ’…ν•© νšŒκ·€.**
38
+
39
+ > **백둜그 μ†Œμ§„ ν›„ 운영 κ°•ν™”** β€” 1.9.207~213 7 λΌμš΄λ“œμ˜ μ‹ κ·œ κΈ°λŠ₯을 AI/λ¬Έμ„œ 인지도에 톡합, drift warning ν•΄μ†Œ
40
+
41
+ ### 1. CLAUDE.md 7 λΌμš΄λ“œ λˆ„μ  톡합 (drift 차단)
42
+ - `## μ‚¬μš©μž λͺ…μ‹œ μ‹ κ·œ 7μ’… (1.9.207~213)` μ„Ήμ…˜ μ‹ μ„€
43
+ - 각 버전별 CLI + 핡심 κΈ°λŠ₯ μš”μ•½ (3~5 라인)
44
+ - AI μ—μ΄μ „νŠΈκ°€ 1.9.207~213 μ‹ κ·œ κΈ°λŠ₯을 μ¦‰μ‹œ 인지
45
+
46
+ ### 2. stress-v159 β€” **15/15 PASS** (1.9.207~213 7 λΌμš΄λ“œ 톡합 νšŒκ·€)
47
+ - 1.9.214 운영 (2)
48
+ - 1.9.207 requests 라이프사이클 (1) β€” add/audit/list/complete/drop
49
+ - 1.9.208 constraints (2) β€” stripe/openai λ§€μΉ­ + review-request 톡합
50
+ - 1.9.209 pre-wake-audit (1) β€” μ‹€ν–‰ + --last μ €μž₯ 검증
51
+ - 1.9.210 wakeup-interval (1) β€” adaptive ↔ override ↔ auto ν† κΈ€
52
+ - 1.9.211 workspace-dir (1) β€” dry-run + migrate + auto-detect
53
+ - 1.9.212 idempotency (1) β€” rule/task dedup + audit clean
54
+ - 1.9.213 intent (2) β€” game ν™•μž₯ + precise μ˜λ„ 보호
55
+ - μ„±λŠ₯ (2) + handoff (1) + release (1)
56
+
57
+ ### 3. λˆ„μ  νšŒκ·€ (1.9.200~213) β€” λͺ¨λ‘ μœ μ§€
58
+
59
+ ### 4. μžλ™ release (76 λΌμš΄λ“œ main-push streak Β· 37 λΌμš΄λ“œ npm publish streak)
60
+
61
+ ### 5. ν•Έλ“œμ˜€ν”„ (백둜그 status)
62
+ - μ‚¬μš©μž λͺ…μ‹œ task 백둜그 **0건 pending** (#298, #302~307 λͺ¨λ‘ completed)
63
+ - λ‹€μŒ λΌμš΄λ“œ: μƒˆ μ‚¬μš©μž μš”μ²­ λŒ€κΈ° λ˜λŠ” λ§ˆμΌμŠ€ν†€ 1.9.220 후보 μ€€λΉ„
64
+
65
+ ---
66
+
3
67
  ## 1.9.213 β€” 2026-05-22
4
68
 
5
69
  **🎯 intent inference + scope expansion 게이트 (μ‚¬μš©μž λͺ…μ‹œ) β€” λ§ˆμ§€λ§‰ pending task μ™„μ„±.**
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.213-green)]() [![tests](https://img.shields.io/badge/e2e-217%2F217-success)]() [![stress](https://img.shields.io/badge/stress--v158-19%2F19-success)]() [![mcp](https://img.shields.io/badge/MCP--tools-54-brightgreen)]() [![rounds](https://img.shields.io/badge/autonomous--rounds-143-blueviolet)]() [![main-push](https://img.shields.io/badge/release--main--push-75_rounds-success)]() [![goal-matrix](https://img.shields.io/badge/λͺ©μ _맀트릭슀-98%2F100_(5μΆ•)-brightgreen)]() [![intent](https://img.shields.io/badge/intent-inference_5도메인-success)]() [![perf](https://img.shields.io/badge/cold_start-388ms-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.215-green)]() [![tests](https://img.shields.io/badge/e2e-217%2F217-success)]() [![stress](https://img.shields.io/badge/stress--v160-17%2F17-success)]() [![mcp](https://img.shields.io/badge/MCP--tools-54-brightgreen)]() [![rounds](https://img.shields.io/badge/autonomous--rounds-145-blueviolet)]() [![main-push](https://img.shields.io/badge/release--main--push-77_rounds-success)]() [![goal-matrix](https://img.shields.io/badge/λͺ©μ _맀트릭슀-98%2F100_(5μΆ•)-brightgreen)]() [![handoff-auto](https://img.shields.io/badge/handoff_ν—€λ“œλΌμΈ-15μš”μ†Œ-success)]() [![perf](https://img.shields.io/badge/cold_start-677ms-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.213 AI Agent Reliability Harness + Sandbox β•‘
15
+ β•‘ v1.9.215 AI Agent Reliability Harness + Sandbox β•‘
16
16
  β•‘ verify Β· remember Β· orchestrate Β· audit Β· sandbox Β· drift β•‘
17
- β•‘ 🎯 intent inference + scope expansion 5도메인 (μ‚¬μš©μž λͺ…μ‹œ) β•‘
17
+ β•‘ 🎯 handoff ν—€λ“œλΌμΈ constraints/intent μžλ™ 톡합 (15μš”μ†Œ) β•‘
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.213';
10
+ const VERSION = '1.9.215';
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 처리).
@@ -5658,10 +5658,45 @@ function handoff(root) {
5658
5658
  }
5659
5659
  }
5660
5660
  } catch {}
5661
+ // 15) 1.9.215: ν˜„μž¬ ν™œμ„± taskμ—μ„œ constraints/intent μžλ™ 뢄석 (1.9.208/213 톡합)
5662
+ try {
5663
+ // progress-tracker.md 의 첫 active task request μΆ”μΆœ
5664
+ const ptPath = path.join(root, '.harness', 'progress-tracker.md');
5665
+ if (exists(ptPath)) {
5666
+ const content = read(ptPath);
5667
+ for (const line of content.split(/\r?\n/)) {
5668
+ if (!/^\|\s*T-\d{4,}\s*\|/.test(line)) continue;
5669
+ const cells = line.split('|').slice(1, -1).map(s => s.trim());
5670
+ if (cells.length < 3) continue;
5671
+ const status = (cells[1] || '').toLowerCase();
5672
+ const req = cells[2];
5673
+ if (!/^(done|dropped|blocked|completed)$/i.test(status) && req.length >= 5) {
5674
+ // 1.9.208 constraints λ§€μΉ­
5675
+ try {
5676
+ const cc = _checkRequestConstraints(root, req);
5677
+ if (cc.matched && cc.matched.length > 0) {
5678
+ parts.push(`🚦 ${cc.matched.length} ν”Œλž«νΌ μ œμ•½`);
5679
+ }
5680
+ } catch {}
5681
+ // 1.9.213 intent classify
5682
+ try {
5683
+ const cls = _classifyIntent(req);
5684
+ if (cls.intent === 'broad') {
5685
+ const det = _detectDomain(req, root);
5686
+ if (det.domain) parts.push(`🎯 intent broad/${det.domain}`);
5687
+ } else if (cls.intent === 'precise') {
5688
+ parts.push(`🎯 intent precise`);
5689
+ }
5690
+ } catch {}
5691
+ break; // 첫 active만 뢄석
5692
+ }
5693
+ }
5694
+ }
5695
+ } catch {}
5661
5696
  if (parts.length) {
5662
5697
  const isTty = process.stdout && process.stdout.isTTY;
5663
5698
  const cy = s => isTty ? `\x1b[36m${s}\x1b[0m` : s;
5664
- log(cy(`πŸ“Š ν—€λ“œλΌμΈ (1.9.81/93/113/152/162/192/197/204/207/209): ${parts.join(' Β· ')}`));
5699
+ log(cy(`πŸ“Š ν—€λ“œλΌμΈ (1.9.81/93/113/152/162/192/197/204/207/209/215): ${parts.join(' Β· ')}`));
5665
5700
  }
5666
5701
  } catch {}
5667
5702
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "leerness",
3
- "version": "1.9.213",
3
+ "version": "1.9.215",
4
4
  "description": "Leerness: λΉ„νŒŒκ΄΄ λ§ˆμ΄κ·Έλ ˆμ΄μ…˜, μžλ™ 버전 κ°μ§€Β·μ—…λ°μ΄νŠΈ, κ³„νš/μ§„ν–‰/ν•Έλ“œμ˜€ν”„ μžλ™ν™”, κ²ŒμœΌλ¦„Β·μ‹œν¬λ¦ΏΒ·μΈμ½”λ”© μžλ™ κ°€λ“œ, Claude Code μŠ¬λž˜μ‹œ 톡합을 κ°–μΆ˜ ν•œκ΅­μ–΄ μš°μ„  AI 개발 ν•˜λ„€μŠ€.",
5
5
  "keywords": [
6
6
  "leerness",