leerness 1.9.261 → 1.9.263
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 +43 -0
- package/README.md +3 -3
- package/bin/harness.js +33 -2
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,48 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.9.263 — 2026-06-01 — UR-0020 3단계: handoff 셸 실패 메모리 + 환경 버전 변동 자동 노출
|
|
4
|
+
|
|
5
|
+
**🐚 과거 터미널 셸 실패 기록 + 환경 버전 변동을 매 세션 handoff 본문에 자동 표면화 (사용자 명시 UR-0020 완성).**
|
|
6
|
+
|
|
7
|
+
### 배경
|
|
8
|
+
UR-0020 1·2단계에서 shell-guard 린터(6 규칙)·실패 메모리(`.harness/shell-failures.json`)·MCP 도구(72번째)를 구축했으나, 기록된 실패가 handoff 본문에 자동 노출되지 않아 새 세션 AI 가 "과거에 `&&` 가 실패했다"는 맥락을 능동적으로 못 봄. 사용자 요청 핵심("다음 터미널 실행 시 과거 실패를 고려")을 완성하려면 handoff 자동 표면화가 필요.
|
|
9
|
+
|
|
10
|
+
### 구현
|
|
11
|
+
1. **handoff 본문 셸 가드 섹션** (`## 🐚 터미널 셸 가드`): 기록된 셸 실패가 있거나 환경 버전이 변동되면 자동 노출
|
|
12
|
+
- `_loadShellFailures(root)` — 최근 3건 표시 (명령 50자 + exit code + shell + 감지 규칙)
|
|
13
|
+
- `_shellEnvDrift(root)` — `environment.json` 스냅샷 ↔ 현재 비교 (node·PowerShell 버전 변동 시 "과거 실패 재검토 권장" 경고)
|
|
14
|
+
- 실패·변동이 모두 없으면 섹션 미노출 (false-positive 차단)
|
|
15
|
+
2. **exports 확대**: `_shellFailuresPath`·`_loadShellFailures`·`_recordShellFailure`·`_shellEnvDrift` 4종 → 단위 테스트 가능 (require.main 가드로 init 미실행)
|
|
16
|
+
|
|
17
|
+
### stress-v208 — **25/25 PASS · 100%**
|
|
18
|
+
- 1.9.263 (12): exports 4종·경로·빈 워크스페이스·기록·200 cap·env drift null/변동 감지·CLI record 영속·handoff 노출/비노출/drift 경고
|
|
19
|
+
- 성능 (2): cold start avg 391ms · 200건 write 104ms
|
|
20
|
+
- 누적 회귀 (11): 1.9.207~262 (MCP 72·shell-guard·selftest 15·require.main 가드·path-setup·handoff JSON 11·posixEncoding·CJK·_isSecretKey·shell-guard summary)
|
|
21
|
+
|
|
22
|
+
## 1.9.262 — 2026-05-31 — CLAUDE/AGENTS 문서 누적 갱신 (1.9.253~261 drift 차단)
|
|
23
|
+
|
|
24
|
+
**📚 메타 지침서가 1.9.252 에 멈춰 있어 9 라운드(1.9.253~261) 미반영 → 누적 갱신.**
|
|
25
|
+
|
|
26
|
+
### 배경
|
|
27
|
+
CLAUDE.md / AGENTS.md (AI 핸드오프 핵심 지침)가 마지막으로 1.9.252까지만 반영. UR-0019(PATH 자동 등록)·UR-0020(shell-guard)·selftest·require.main 가드·테스트 인프라가 문서에 없어, 새 세션 AI 가 최신 기능을 인지 못 할 drift 위험. (기존 1.9.171/214/238/253 doc-sync 라운드 계승)
|
|
28
|
+
|
|
29
|
+
### 구현 (문서 전용 — 코드 변경 없음, VERSION bump만)
|
|
30
|
+
1. **CLAUDE.md**: "UR-0019~0020 + 테스트 인프라 (1.9.253~261)" 섹션 추가
|
|
31
|
+
- UR-0019 path-setup + require.main 가드 · 단위 테스트 인프라 · selftest(CLI/MCP/npm test) · UR-0020 shell-guard(6 규칙)
|
|
32
|
+
- 마일스톤 1.9.252 → 1.9.261 (R217 · 123 main-push · 84 npm · MCP 72 · CLI 59 · UR-0013~0020 소진)
|
|
33
|
+
2. **AGENTS.md**: UR-0019~0020 테이블 + shell-guard 6 규칙 + require.main 가드 설명 + 마일스톤 1.9.261
|
|
34
|
+
|
|
35
|
+
### stress-v207 — **20/20 PASS · 100%**
|
|
36
|
+
- 1.9.262 (9): CLAUDE/AGENTS 섹션·path-setup·shell-guard·selftest·마일스톤·UR-0013~0020 소진·stale 해소
|
|
37
|
+
- 성능 (1): cold start avg 410ms
|
|
38
|
+
- 누적 회귀 (10): 1.9.207~261
|
|
39
|
+
|
|
40
|
+
### 자동 release (124 main-push streak · 85 npm publish streak · R218)
|
|
41
|
+
|
|
42
|
+
📚 **AI 핸드오프 지침 최신화** — 새 세션 에이전트가 UR-0019~0020·selftest·shell-guard 를 즉시 인지, drift 0.
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
3
46
|
## 1.9.261 — 2026-05-31 — UR-0020 2단계: MCP leerness_shell_guard (72 도구) + selftest 케이스
|
|
4
47
|
|
|
5
48
|
**🐚🔌 1.9.260 shell-guard 를 외부 AI(MCP) + 무결성 검증(selftest)에 통합.**
|
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) []() []() []() []() []() []() []() []() []() []() []() []()
|
|
6
6
|
|
|
7
7
|
```
|
|
8
8
|
╔══════════════════════════════════════════════════════════════╗
|
|
@@ -12,9 +12,9 @@
|
|
|
12
12
|
║ ██║ ██╔══╝ ██╔══╝ ██╔══██╗██║╚██╗██║██╔══╝ ╚════██║ ║
|
|
13
13
|
║ ███████╗███████╗███████╗██║ ██║██║ ╚████║███████╗███████║ ║
|
|
14
14
|
║ ╚══════╝╚══════╝╚══════╝╚═╝ ╚═╝╚═╝ ╚═══╝╚══════╝╚══════╝ ║
|
|
15
|
-
║ v1.9.
|
|
15
|
+
║ v1.9.263 AI Agent Reliability Harness + Sandbox ║
|
|
16
16
|
║ verify · remember · orchestrate · audit · sandbox · drift ║
|
|
17
|
-
║
|
|
17
|
+
║ 🐚 handoff 셸 실패 메모리 + 환경 변동 노출 (UR-0020 · R219) ║
|
|
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.263';
|
|
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 처리).
|
|
@@ -7913,6 +7913,35 @@ function handoff(root) {
|
|
|
7913
7913
|
}
|
|
7914
7914
|
} catch {}
|
|
7915
7915
|
|
|
7916
|
+
// 1.9.263 (UR-0020 3단계): handoff body 에 터미널 셸 실패 메모리 + 환경 버전 변동 자동 노출.
|
|
7917
|
+
// 새 세션 AI 가 과거 셸 명령 실패(예: PowerShell 5.1 && 미지원)를 즉시 인지 → 같은 실패 반복 차단.
|
|
7918
|
+
try {
|
|
7919
|
+
const sf = _loadShellFailures(root);
|
|
7920
|
+
const drift = _shellEnvDrift(root);
|
|
7921
|
+
const hasFailures = sf.failures && sf.failures.length > 0;
|
|
7922
|
+
const hasDrift = drift && drift.changes && drift.changes.length > 0;
|
|
7923
|
+
if (hasFailures || hasDrift) {
|
|
7924
|
+
const isTty8 = process.stdout && process.stdout.isTTY;
|
|
7925
|
+
const yl8 = s => isTty8 ? `\x1b[33m${s}\x1b[0m` : s;
|
|
7926
|
+
const dm8 = s => isTty8 ? `\x1b[2m${s}\x1b[0m` : s;
|
|
7927
|
+
const cy8 = s => isTty8 ? `\x1b[36m${s}\x1b[0m` : s;
|
|
7928
|
+
log('');
|
|
7929
|
+
log(cy8(`## 🐚 터미널 셸 가드 (1.9.263, UR-0020)`));
|
|
7930
|
+
if (hasDrift) {
|
|
7931
|
+
log(yl8(` ⚠ 환경 버전 변동 — 과거 셸 실패 기록 재검토 권장:`));
|
|
7932
|
+
drift.changes.forEach(ch => log(dm8(` ${ch.what}: ${ch.from} → ${ch.to}`)));
|
|
7933
|
+
}
|
|
7934
|
+
if (hasFailures) {
|
|
7935
|
+
log(dm8(` 최근 셸 실패 ${sf.failures.length}건 (최대 3 표시):`));
|
|
7936
|
+
sf.failures.slice(-3).reverse().forEach(f => {
|
|
7937
|
+
const rules = (f.issues && f.issues.length) ? ` [${f.issues.join(',')}]` : '';
|
|
7938
|
+
log(dm8(` • ${(f.cmd || '').slice(0, 50)} (exit=${f.exitCode}, ${f.shell})${rules}`));
|
|
7939
|
+
});
|
|
7940
|
+
log(dm8(` → 명령 실행 전 점검: leerness shell-guard "<command>"`));
|
|
7941
|
+
}
|
|
7942
|
+
}
|
|
7943
|
+
} catch {}
|
|
7944
|
+
|
|
7916
7945
|
// 1.9.245: API skill cache 자동 참조 (사용자 명시 UR-0015)
|
|
7917
7946
|
// 현재 task 키워드 기반으로 .harness/api-skills/ 매칭 → 사용자가 정리해둔 API 문서 자동 노출
|
|
7918
7947
|
try {
|
|
@@ -20282,5 +20311,7 @@ module.exports = {
|
|
|
20282
20311
|
// 1.9.258: selftest — 코어 함수 무결성 검증
|
|
20283
20312
|
_selfTestCases, selfTestCmd,
|
|
20284
20313
|
// 1.9.260: shell-guard — 셸 호환성 린터 (UR-0020) 순수 분석 함수 — 단위 테스트
|
|
20285
|
-
_shellGuardAnalyze, _detectShellCtx, shellGuardCmd
|
|
20314
|
+
_shellGuardAnalyze, _detectShellCtx, shellGuardCmd,
|
|
20315
|
+
// 1.9.263: shell 실패 메모리 + 환경 버전 변동 (UR-0020 3단계) — handoff 통합 단위 테스트
|
|
20316
|
+
_shellFailuresPath, _loadShellFailures, _recordShellFailure, _shellEnvDrift
|
|
20286
20317
|
};
|