leerness 1.9.255 → 1.9.256

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,31 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.9.256 — 2026-05-29 — 단위 테스트 인프라 확대 (보안/정확성-핵심 순수 함수)
4
+
5
+ **🧪 1.9.255 require.main 가드 기반 확장: 소스 regex 가 아닌 실제 함수 동작을 검증하는 단위 테스트로 회귀 강화.**
6
+
7
+ ### 배경
8
+ 기존 stress 테스트는 대부분 `/regex/.test(src)` (소스 문자열 존재 확인) — 약한 회귀. 1.9.255의 `require.main` 가드로 내부 함수를 직접 import 가능해졌으므로, 보안/정확성-핵심 순수 함수의 **실 동작**을 검증.
9
+
10
+ ### 구현 (export 3종 추가 — 코드 동작 변경 없음, 테스트 표면만 확장)
11
+ 1. **`_isSecretKey`** (보안-핵심): config inject 시 시크릿 키 차단. 실 동작 검증:
12
+ - TOKEN/SECRET/PASSWORD/API_KEY/PRIVATE 차단 (대소문자 무관, 부분 매칭)
13
+ - 비시크릿 LEERNESS_* 통과
14
+ 2. **`compareVer`** (정확성-핵심): stale-check/업데이트 감지의 버전 비교. 실 동작 검증:
15
+ - major/minor/patch 대소 + 누락 파트 0 처리 + null/빈 문자열 안전
16
+ 3. **`parseHarnessVersion`**: canonical/legacy-plus/legacy/빈 입력 파싱
17
+
18
+ ### stress-v201 — **24/24 PASS · 100%**
19
+ - 1.9.256 (12): export + _isSecretKey (3) + compareVer (4) + parseHarnessVersion (4)
20
+ - 성능 (1): cold start avg 346ms
21
+ - 누적 회귀 (11): 1.9.207~255 — 특히 보안 회귀를 소스 regex → **실 함수 호출**로 전환 (강한 회귀)
22
+
23
+ ### 자동 release (118 main-push streak · 79 npm publish streak · R212)
24
+
25
+ 🧪 **회귀 신뢰도 강화** — 보안(_isSecretKey)·버전 비교(compareVer) 등 핵심 로직을 실 동작으로 검증, 소스 문자열 의존 약점 보완.
26
+
27
+ ---
28
+
3
29
  ## 1.9.255 — 2026-05-29 — UR-0019 2단계: PATH 등록 실제 테스트/디버그 + require.main 가드
4
30
 
5
31
  **🧪 사용자 명시 (UR-0019 후속 "테스트 및 디버그 다음라운드 참고"): PATH 자동 등록 실제 동작 검증 + 테스트 인프라.**
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.255-green)]() [![tests](https://img.shields.io/badge/e2e-217%2F217-success)]() [![stress](https://img.shields.io/badge/stress--v200-27%2F27-success)]() [![mcp](https://img.shields.io/badge/MCP--tools-70-brightgreen)]() [![cli](https://img.shields.io/badge/CLI_commands-57-brightgreen)]() [![json-fields](https://img.shields.io/badge/JSON_통합-11_필드-blueviolet)]() [![rounds](https://img.shields.io/badge/autonomous_R-211-blueviolet)]() [![main-push](https://img.shields.io/badge/🎉_main--push_streak-117_rounds-success)]() [![npm-streak](https://img.shields.io/badge/🎉_npm--publish-78_streak-success)]() [![encoding](https://img.shields.io/badge/🌐_인코딩보호-Windows%2BPOSIX-blueviolet)]() [![perf](https://img.shields.io/badge/cold_start-368ms-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.256-green)]() [![tests](https://img.shields.io/badge/e2e-217%2F217-success)]() [![stress](https://img.shields.io/badge/stress--v201-24%2F24-success)]() [![mcp](https://img.shields.io/badge/MCP--tools-70-brightgreen)]() [![cli](https://img.shields.io/badge/CLI_commands-57-brightgreen)]() [![json-fields](https://img.shields.io/badge/JSON_통합-11_필드-blueviolet)]() [![rounds](https://img.shields.io/badge/autonomous_R-212-blueviolet)]() [![main-push](https://img.shields.io/badge/🎉_main--push_streak-118_rounds-success)]() [![npm-streak](https://img.shields.io/badge/🎉_npm--publish-79_streak-success)]() [![encoding](https://img.shields.io/badge/🌐_인코딩보호-Windows%2BPOSIX-blueviolet)]() [![perf](https://img.shields.io/badge/cold_start-368ms-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.255 AI Agent Reliability Harness + Sandbox ║
15
+ ║ v1.9.256 AI Agent Reliability Harness + Sandbox ║
16
16
  ║ verify · remember · orchestrate · audit · sandbox · drift ║
17
- ║ 🧪 PATH 등록 실증 + require.main 가드 (UR-0019 · R211)
17
+ ║ 🧪 단위 테스트 인프라 확대 (보안/버전 동작 · R212)
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.255';
10
+ const VERSION = '1.9.256';
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 처리).
@@ -20047,8 +20047,11 @@ if (require.main === module) {
20047
20047
 
20048
20048
  // 1.9.255: 테스트/디버그용 내부 함수 export (require.main 가드 덕분에 require 시 CLI 미실행).
20049
20049
  // PATH 등록 (UR-0019) 검증 + 향후 단위 테스트 확장에 사용.
20050
+ // 1.9.256: 보안/정확성-핵심 순수 함수 추가 export — 실 동작 단위 테스트로 회귀 강화.
20051
+ // _isSecretKey (시크릿 차단, 보안), compareVer (버전 비교, stale-check 정확성), parseHarnessVersion (버전 파싱).
20050
20052
  module.exports = {
20051
20053
  VERSION,
20052
20054
  _npmGlobalBin, _dirInPath, _leernessResolvable, _pathDiagnose, _registerPath,
20053
- _winPathPsScript, _unixPathBlock, pathSetupCmd
20055
+ _winPathPsScript, _unixPathBlock, pathSetupCmd,
20056
+ _isSecretKey, compareVer, parseHarnessVersion
20054
20057
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "leerness",
3
- "version": "1.9.255",
3
+ "version": "1.9.256",
4
4
  "description": "Leerness: 비파괴 마이그레이션, 자동 버전 감지·업데이트, 계획/진행/핸드오프 자동화, 게으름·시크릿·인코딩 자동 가드, Claude Code 슬래시 통합을 갖춘 한국어 우선 AI 개발 하네스.",
5
5
  "keywords": [
6
6
  "leerness",