leerness 1.36.177 → 1.36.178

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,9 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.36.178 — 2026-08-29
4
+
5
+ - CI: env encoding-check --apply 전체 E2E를 Windows BOM 교체와 POSIX byte-exact no-op 계약으로 분기해 v1.36.177 Linux/Node 22의 466/467 실패를 수정.
6
+
3
7
  ## 1.36.177 — 2026-08-29
4
8
 
5
9
  - T-0022 데이터 무결성: env/drift/session BOM 수정을 공용 CAS·Windows ReplaceFile 경계로 통합하고 CP949·모호 인코딩·손상 BOM·메타데이터·동시 writer/ADS·부분진행 복구를 실패-폐쇄 처리. auto-fix 전 단계 JSON/exit 정직화, 스캔 I/O 오류 및 unborn/실행불가 Git 구분, OS 매트릭스 mutation-integrity 회귀 추가.
package/README.md CHANGED
@@ -138,7 +138,7 @@ MIT
138
138
  <!-- leerness:project-readme:start -->
139
139
  ## Leerness Project Harness
140
140
 
141
- 이 프로젝트는 Leerness v1.36.177 하네스를 사용합니다. AI 에이전트는 작업 전 `leerness handoff`로 컨텍스트를 적재하고, 작업 후 `leerness check`/`leerness audit`/`leerness session close`를 수행해야 합니다.
141
+ 이 프로젝트는 Leerness v1.36.178 하네스를 사용합니다. AI 에이전트는 작업 전 `leerness handoff`로 컨텍스트를 적재하고, 작업 후 `leerness check`/`leerness audit`/`leerness session close`를 수행해야 합니다.
142
142
 
143
143
  ### 정체성 — AI 에이전트 운영 레이어 (UR-0030)
144
144
 
@@ -192,7 +192,7 @@ leerness memory restore decision <date|title>
192
192
 
193
193
  ### MCP server (외부 AI 통합)
194
194
 
195
- Leerness v1.36.177는 stdio JSON-RPC MCP server를 내장합니다 — Claude Code · Cursor · Codex CLI 등 외부 AI에 **89개 도구**를 노출:
195
+ Leerness v1.36.178는 stdio JSON-RPC MCP server를 내장합니다 — Claude Code · Cursor · Codex CLI 등 외부 AI에 **89개 도구**를 노출:
196
196
 
197
197
  ```jsonc
198
198
  // 카테고리별
@@ -213,7 +213,7 @@ Leerness v1.36.177는 stdio JSON-RPC MCP server를 내장합니다 — Claude Co
213
213
  `<<autonomous-loop-dynamic>>` 신호만 보내면 AI가:
214
214
  1) 다음 라운드 후보 선정 → 2) 코드 변경 → 3) 회귀 테스트 갱신 → 4) 전체 e2e 스위트 통과 → 5) npm publish + git tag → 6) main push → 7) session close → 8) 다음 라운드 예약.
215
215
 
216
- 현재 누적: **v1.9.x → 1.36.177 릴리스 태그 이력** (수백 라운드) · _reports/는 비공개 보존.
216
+ 현재 누적: **v1.9.x → 1.36.178 릴리스 태그 이력** (수백 라운드) · _reports/는 비공개 보존.
217
217
 
218
218
  ### 성능 가이드
219
219
 
@@ -251,5 +251,5 @@ leerness release pack --close --auto-main-push
251
251
  - `.leerness/session-handoff.md`: 다음 세션 인수인계 (자동 작성)
252
252
  - `.leerness/lessons.md` / `decisions.md` / `rules.md`: 영구 메모리 (5 surface)
253
253
 
254
- Last synced by Leerness v1.36.177: 2026-08-29
254
+ Last synced by Leerness v1.36.178: 2026-08-29
255
255
  <!-- leerness:project-readme:end -->
package/bin/leerness.js CHANGED
@@ -49,7 +49,7 @@ const {
49
49
  migrateLegacyWorkspace,
50
50
  } = require('../lib/workspace-dir');
51
51
 
52
- const VERSION = '1.36.177';
52
+ const VERSION = '1.36.178';
53
53
 
54
54
  // MCP lifecycle 주소 표식은 현재 CLI 호출 한 번에만 유효하다. CLI bootstrap에서 즉시 env에서
55
55
  // 떼어 두어 `--no-record`/hook처럼 presence 기록 함수에 도달하지 않는 경로도 후속 child에 유출하지 않는다.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "leerness",
3
- "version": "1.36.177",
3
+ "version": "1.36.178",
4
4
  "description": "The AI-coding operations layer that makes \"done\" require evidence — persistent memory, evidence-gated completion checks, and clean handoffs for any AI agent (Claude Code, Codex, Cursor). State lives as plain files in your repo. CLI + MCP, 0 runtime dependencies.",
5
5
  "keywords": [
6
6
  "leerness",
package/scripts/e2e.js CHANGED
@@ -6222,24 +6222,30 @@ total++;
6222
6222
  if (!ok) failed++;
6223
6223
  }
6224
6224
 
6225
- // 1.9.409 회귀 (8번째 버그헌트, UR-0113): env encoding-check --apply .sh/shebang BOM 미추가(실행 깨짐 방지), .ps1 은 추가
6225
+ // 1.9.409 회귀 (8번째 버그헌트, UR-0113): env encoding-check --apply .sh/shebang byte-exact 보존한다.
6226
+ // 1.36.177 데이터 무결성 계약: .ps1 BOM 교체는 Windows 에서만 메타데이터 보존 writer 로 수행하고,
6227
+ // POSIX 에서는 inode 교체가 ACL/xattr/ownership 을 잃을 수 있어 byte-exact no-op 한다.
6226
6228
  total++;
6227
6229
  {
6228
6230
  let ok = false;
6229
6231
  try {
6230
6232
  const d = fs.mkdtempSync(path.join(os.tmpdir(), 'leerness-bomsh-'));
6231
6233
  cp.spawnSync(process.execPath, [CLI, 'init', d, '--yes', '--language', 'ko'], { encoding: 'utf8', timeout: 30000 });
6232
- fs.writeFileSync(path.join(d, 'script.sh'), '#!/bin/bash\n# 한글 주석\necho hi\n');
6233
- fs.writeFileSync(path.join(d, 'script.ps1'), '# 한글 주석\nWrite-Host hi\n');
6234
- cp.spawnSync(process.execPath, [CLI, 'env', 'encoding-check', '--path', d, '--apply'], { encoding: 'utf8', timeout: 15000 });
6234
+ const shBefore = Buffer.from('#!/bin/bash\n# 한글 주석\necho hi\n', 'utf8');
6235
+ const psBefore = Buffer.from('# UTF-8 only 😀\nWrite-Host hi\n', 'utf8');
6236
+ fs.writeFileSync(path.join(d, 'script.sh'), shBefore);
6237
+ fs.writeFileSync(path.join(d, 'script.ps1'), psBefore);
6238
+ const applied = cp.spawnSync(process.execPath, [CLI, 'env', 'encoding-check', '--path', d, '--apply'], { encoding: 'utf8', timeout: 15000 });
6235
6239
  const sh = fs.readFileSync(path.join(d, 'script.sh'));
6236
6240
  const ps = fs.readFileSync(path.join(d, 'script.ps1'));
6237
- const shOk = sh[0] === 0x23 && sh[1] === 0x21 && !(sh[0] === 0xEF); // '#!' 보존, BOM 없음
6238
- const psOk = ps[0] === 0xEF && ps[1] === 0xBB && ps[2] === 0xBF; // .ps1 BOM 추가
6241
+ const shOk = sh.equals(shBefore); // '#!' 및 전체 바이트 보존, BOM 없음
6242
+ const psOk = process.platform === 'win32'
6243
+ ? ps.subarray(0, 3).equals(Buffer.from([0xEF, 0xBB, 0xBF])) && ps.subarray(3).equals(psBefore)
6244
+ : ps.equals(psBefore);
6239
6245
  fs.rmSync(d, { recursive: true, force: true });
6240
- ok = shOk && psOk;
6246
+ ok = applied.status === 0 && shOk && psOk;
6241
6247
  } catch {}
6242
- console.log(ok ? '✓ B(1.9.409) 8th버그헌트: encoding-check --apply .sh shebang 보존(BOM 미추가) + .ps1 BOM (UR-0113)' : '✗ encoding-check BOM 스킵 실패');
6248
+ console.log(ok ? '✓ B(1.9.409/1.36.177) encoding-check --apply: .sh byte-exact + .ps1 platform-safe mutation contract (UR-0113/T-0022)' : '✗ encoding-check BOM platform contract 실패');
6243
6249
  if (!ok) failed++;
6244
6250
  }
6245
6251