leerness 1.9.236 β 1.9.238
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 +72 -0
- package/README.md +3 -3
- package/bin/harness.js +54 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,77 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.9.238 β 2026-05-24
|
|
4
|
+
|
|
5
|
+
**π R100 main-push streak λ¬μ± + CLAUDE/AGENTS/session-workflow drift μ°¨λ¨ (1.9.228~237 9 λΌμ΄λ λμ ).**
|
|
6
|
+
|
|
7
|
+
### 1. CLAUDE.md drift μ°¨λ¨ κ°±μ (1.9.228~237 β 10 λ²μ ν΅ν©)
|
|
8
|
+
- μ κ· μΉμ
: "κ°μν + μλν 9 λΌμ΄λ (1.9.228~237)"
|
|
9
|
+
- 9 λΌμ΄λ κ°λ³ νλͺ© + μμ¨ λͺ¨λ λ§μΌμ€ν€ μμ½
|
|
10
|
+
|
|
11
|
+
### 2. AGENTS.md drift μ°¨λ¨ κ°±μ
|
|
12
|
+
- "λΌμ΄λ μ§νλ κ°μν (1.9.226~234)" μΉμ
νμ₯ (8 νλ / MCP 66 / 51 CLI)
|
|
13
|
+
- "release cleanup μνκ³ (1.9.235~237 β 3 λΌμ΄λ μμ±)" μ κ· μΉμ
|
|
14
|
+
|
|
15
|
+
### 3. session-workflow.md drift μ°¨λ¨ κ°±μ
|
|
16
|
+
- "λΌμ΄λ μ§νλ κ°μν + μν λͺ
λ Ή (1.9.226~234)" β 4 μ κ· λͺ
λ Ή
|
|
17
|
+
- "JSON ν΅ν© λ§€νΈλ¦μ€ 8 νλ (1.9.218~234)" β μ§ν history
|
|
18
|
+
- "release cleanup μνκ³ (1.9.235~237)" β 3 λΌμ΄λ μμ±
|
|
19
|
+
|
|
20
|
+
### 4. π R100 main-push streak λ¬μ± (1.9.140 β 1.9.238)
|
|
21
|
+
- 1.9.140 (main μλ push) μ¬μ©μ λͺ
μ λΆν° μμ
|
|
22
|
+
- 100 λΌμ΄λ μ°μ 무μμ€ μλ commit + tag + push + main sync
|
|
23
|
+
- 1.9.178 λΆν° npm publish μλ ν΅ν© (61 λΌμ΄λ μ°μ)
|
|
24
|
+
|
|
25
|
+
### 5. λμ νκ· (1.9.207~237) β λͺ¨λ μ μ§
|
|
26
|
+
|
|
27
|
+
### 6. stress-v183 β 13/13 PASS
|
|
28
|
+
- 1.9.238 (4): VERSION + CLAUDE 10 λ²μ + AGENTS κ°±μ + session-workflow κ°±μ
|
|
29
|
+
- μ±λ₯ (1): cold_start avg 312ms
|
|
30
|
+
- μ’
ν© λμ νκ· (8): 1.9.207~237 λͺ¨λ μμ€ν
|
|
31
|
+
|
|
32
|
+
### 7. μλ release (100 λΌμ΄λ main-push streak π Β· 61 λΌμ΄λ npm publish streak)
|
|
33
|
+
|
|
34
|
+
π **R100 main-push streak λ¬μ±** β leerness μμ²΄κ° μμ μ± κ²μ¦ μΈμ€ν΄μ€
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## 1.9.237 β 2026-05-24
|
|
39
|
+
|
|
40
|
+
**π session close --auto-cleanup-branches + handoff body 50+ branches κ²½κ³ .**
|
|
41
|
+
|
|
42
|
+
### 1. `session close --auto-cleanup-branches` μ΅μ
(1.9.224 ν¨ν΄ νμ₯)
|
|
43
|
+
- 50+ release/* merged branches μ μλ μ 리 (keep 10)
|
|
44
|
+
- μμ : 1.9.235 κ°λ (merged λ§, νμ¬ branch 보νΈ)
|
|
45
|
+
- `--auto-apply-delivered` (1.9.224) μ λμΌν μμ¨ λͺ¨λ ν¨ν΄
|
|
46
|
+
|
|
47
|
+
### 2. handoff body 50+ branches κ²½κ³ μλ λ
ΈμΆ
|
|
48
|
+
- `## π release/* branches λμ Nκ° (50+) (1.9.237)` λ³Έλ¬Έ μΉμ
μλ
|
|
49
|
+
- 3 κ°μ§ μ 리 μ΅μ
μλ μλ΄:
|
|
50
|
+
- μλ: `leerness release cleanup --apply --keep 10`
|
|
51
|
+
- λ§κ° μλ: `session close --auto-cleanup-branches`
|
|
52
|
+
- drift μλ: `drift check --auto-fix` (1.9.236)
|
|
53
|
+
- AI/μ¬μ©μ λμ νκΈ°λ¬Ό κ°μν
|
|
54
|
+
|
|
55
|
+
### 3. release cleanup μνκ³ μμ± (3 λΌμ΄λ λμ )
|
|
56
|
+
| λΌμ΄λ | κΈ°λ₯ |
|
|
57
|
+
|---|---|
|
|
58
|
+
| 1.9.235 | CLI μ μ€ (μλ) |
|
|
59
|
+
| 1.9.236 | MCP 66 + drift --auto-fix ν΅ν© |
|
|
60
|
+
| **1.9.237** | **session close μλ + handoff body κ²½κ³ ** β |
|
|
61
|
+
|
|
62
|
+
### 4. λμ νκ· (1.9.207~236) β λͺ¨λ μ μ§
|
|
63
|
+
|
|
64
|
+
### 5. stress-v182 β 15/15 PASS
|
|
65
|
+
- 1.9.237 (5): VERSION + flag μ½λ + session close μλ΄ + handoff body κ²½κ³ + 격리 no-warning
|
|
66
|
+
- μ±λ₯ (2): cold_start avg 387ms / handoff 4706ms
|
|
67
|
+
- λμ νκ· (8): 1.9.207~236
|
|
68
|
+
|
|
69
|
+
### 6. μλ release (99 λΌμ΄λ main-push streak Β· 60 λΌμ΄λ npm publish streak π)
|
|
70
|
+
|
|
71
|
+
π **60 λΌμ΄λ npm publish streak λ¬μ±** + 1 λΌμ΄λ ν **R100 main-push streak λλ¬**
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
3
75
|
## 1.9.236 β 2026-05-24
|
|
4
76
|
|
|
5
77
|
**π MCP 66λ²μ§Έ λꡬ (release_cleanup) + drift check --auto-fix ν΅ν© (50+ branches μλ μ 리).**
|
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) []() []() []() []() []() []() []() []() [-brightgreen)]() []() []() []()
|
|
6
6
|
|
|
7
7
|
```
|
|
8
8
|
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
@@ -12,9 +12,9 @@
|
|
|
12
12
|
β βββ ββββββ ββββββ ββββββββββββββββββββββββ ββββββββ β
|
|
13
13
|
β βββββββββββββββββββββββββββ ββββββ ββββββββββββββββββββββ β
|
|
14
14
|
β βββββββββββββββββββββββββββ ββββββ βββββββββββββββββββββ β
|
|
15
|
-
β v1.9.
|
|
15
|
+
β v1.9.238 AI Agent Reliability Harness + Sandbox β
|
|
16
16
|
β verify Β· remember Β· orchestrate Β· audit Β· sandbox Β· drift β
|
|
17
|
-
β
|
|
17
|
+
β π R100 main-push streak Β· 9 λΌμ΄λ doc drift μ°¨λ¨ β
|
|
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.
|
|
10
|
+
const VERSION = '1.9.238';
|
|
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 μ²λ¦¬).
|
|
@@ -6573,6 +6573,25 @@ function handoff(root) {
|
|
|
6573
6573
|
}
|
|
6574
6574
|
} catch {}
|
|
6575
6575
|
|
|
6576
|
+
// 1.9.237: handoff λ³Έλ¬Έ release/* λμ κ²½κ³ β 50+ branches merged μ μλ μλ΄
|
|
6577
|
+
// 1.9.220 λΉμ μμ’
λ£ release-branch-pending μ νΈμ λ³Έλ¬Έ λ³΄κ° (handoff ν€λλΌμΈμ βπ λΉμ μμ’
λ£β λ§ νμ)
|
|
6578
|
+
try {
|
|
6579
|
+
const branchR = cp.spawnSync('git', ['branch', '--merged', 'main', '--list', 'release/*'], { cwd: root, encoding: 'utf8' });
|
|
6580
|
+
if (branchR.status === 0) {
|
|
6581
|
+
const mergedCnt = (branchR.stdout || '').split('\n').filter(l => l.trim() && /release\/\d+\.\d+\.\d+/.test(l)).length;
|
|
6582
|
+
if (mergedCnt > 50) {
|
|
6583
|
+
const isTty = process.stdout && process.stdout.isTTY;
|
|
6584
|
+
const yl5 = s => isTty ? `\x1b[33m${s}\x1b[0m` : s;
|
|
6585
|
+
const dm5 = s => isTty ? `\x1b[2m${s}\x1b[0m` : s;
|
|
6586
|
+
log('');
|
|
6587
|
+
log(yl5(`## π release/* branches λμ ${mergedCnt}κ° (50+) (1.9.237)`));
|
|
6588
|
+
log(dm5(` β μλ μ 리: leerness release cleanup --apply --keep 10`));
|
|
6589
|
+
log(dm5(` β λ§κ° μ μλ: session close --auto-cleanup-branches`));
|
|
6590
|
+
log(dm5(` β drift μλ ν볡: drift check --auto-fix (1.9.236, 50+ μ)`));
|
|
6591
|
+
}
|
|
6592
|
+
}
|
|
6593
|
+
} catch {}
|
|
6594
|
+
|
|
6576
6595
|
// 1.9.224: handoff λ³Έλ¬Έ μλ λ
ΈμΆ β delivered ν¨ν΄ ν보 β₯ 1건 μ (1.9.223 νμ₯)
|
|
6577
6596
|
// "Round X.Y.Z β ꡬν μλ£" ν¨ν΄μ΄ λμ λλ©΄ λ³Έλ¬Έ μΉμ
μΌλ‘ μλ μλ΄ (ν€λλΌμΈλ§μΌλ‘λ λμΉκΈ° μ¬μ)
|
|
6578
6597
|
// 1.9.225: LEERNESS_AUTO_APPLY_DELIVERED=1 env νμ± μ handoff 첫 νΈμΆμμ μλ μ μ© (μμ¨ λͺ¨λμ© opt-in)
|
|
@@ -10507,6 +10526,40 @@ function sessionClose(root, opts = {}) {
|
|
|
10507
10526
|
log(grn(` β λ©±λ±μ± κ²μ¬ ν΅κ³Ό β verified ${idemp.summary.verifiedAreas} μμ`));
|
|
10508
10527
|
}
|
|
10509
10528
|
} catch {}
|
|
10529
|
+
// 1.9.237: session close --auto-cleanup-branches β 50+ release/* branches μ μλ μ 리
|
|
10530
|
+
// 1.9.224 ν¨ν΄ (--auto-apply-delivered) νμ₯ β λ§κ° μ μ΄μ λμ νκΈ°λ¬Ό μλ μ 리
|
|
10531
|
+
// μμ : keep 10, merged λ§, νμ¬ branch 보νΈ
|
|
10532
|
+
try {
|
|
10533
|
+
const branchR = cp.spawnSync('git', ['branch', '--merged', 'main', '--list', 'release/*'], { cwd: root, encoding: 'utf8' });
|
|
10534
|
+
if (branchR.status === 0) {
|
|
10535
|
+
const merged = (branchR.stdout || '').split('\n')
|
|
10536
|
+
.map(l => l.replace(/^\*?\s+/, '').trim())
|
|
10537
|
+
.filter(l => l && /^release\/\d+\.\d+\.\d+$/.test(l));
|
|
10538
|
+
if (merged.length > 50) {
|
|
10539
|
+
if (has('--auto-cleanup-branches')) {
|
|
10540
|
+
merged.sort((a, b) => {
|
|
10541
|
+
const va = a.replace('release/', '').split('.').map(n => parseInt(n, 10) || 0);
|
|
10542
|
+
const vb = b.replace('release/', '').split('.').map(n => parseInt(n, 10) || 0);
|
|
10543
|
+
for (let i = 0; i < 3; i++) if (va[i] !== vb[i]) return vb[i] - va[i];
|
|
10544
|
+
return 0;
|
|
10545
|
+
});
|
|
10546
|
+
const curR = cp.spawnSync('git', ['rev-parse', '--abbrev-ref', 'HEAD'], { cwd: root, encoding: 'utf8' });
|
|
10547
|
+
const cur = (curR.stdout || '').trim();
|
|
10548
|
+
const toDelete = merged.slice(10).filter(b => b !== cur);
|
|
10549
|
+
let okCnt = 0;
|
|
10550
|
+
for (const b of toDelete) {
|
|
10551
|
+
const r = cp.spawnSync('git', ['branch', '-d', b], { cwd: root, encoding: 'utf8' });
|
|
10552
|
+
if (r.status === 0) okCnt++;
|
|
10553
|
+
}
|
|
10554
|
+
log(grn(` β release μ 리 ${okCnt}/${toDelete.length}건 (--auto-cleanup-branches 1.9.237, keep 10)`));
|
|
10555
|
+
} else {
|
|
10556
|
+
log(yel(` π release/* merged ${merged.length}κ° (50+) β cleanup κ°λ₯ (1.9.235)`));
|
|
10557
|
+
log(dim(` β leerness release cleanup --apply --keep 10 (μλ)`));
|
|
10558
|
+
log(dim(` β λλ session close --auto-cleanup-branches (1.9.237 μλ)`));
|
|
10559
|
+
}
|
|
10560
|
+
}
|
|
10561
|
+
}
|
|
10562
|
+
} catch {}
|
|
10510
10563
|
// 1.9.232: λ§κ° μ pulse ν μ€ μλ λ
ΈμΆ β λ€μ λΌμ΄λ μ§μ
μ μ¦μ μν μΈμ§
|
|
10511
10564
|
try {
|
|
10512
10565
|
const rh = _computeRoundHistory(root);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "leerness",
|
|
3
|
-
"version": "1.9.
|
|
3
|
+
"version": "1.9.238",
|
|
4
4
|
"description": "Leerness: λΉνκ΄΄ λ§μ΄κ·Έλ μ΄μ
, μλ λ²μ κ°μ§Β·μ
λ°μ΄νΈ, κ³ν/μ§ν/νΈλμ€ν μλν, κ²μΌλ¦Β·μν¬λ¦ΏΒ·μΈμ½λ© μλ κ°λ, Claude Code μ¬λμ ν΅ν©μ κ°μΆ νκ΅μ΄ μ°μ AI κ°λ° νλ€μ€.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"leerness",
|