leerness 1.36.174 → 1.36.176
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 +10 -0
- package/README.md +4 -4
- package/bin/leerness.js +478 -152
- package/lib/agents.js +5 -1
- package/lib/clarify.js +245 -46
- package/lib/dashboard.js +25 -3
- package/lib/health.js +20 -18
- package/lib/mcp-tools.js +3 -3
- package/lib/preview-serve.js +41 -15
- package/lib/pure-utils.js +93 -13
- package/lib/session-close.js +43 -23
- package/package.json +4 -3
- package/scripts/e2e.js +69 -30
- package/scripts/false-claim-probe.js +1507 -0
- package/scripts/release-runtime-probe.js +5 -2
- package/scripts/workspace-dir-migration-probe.js +3 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.36.176 — 2026-08-29
|
|
4
|
+
|
|
5
|
+
- T-0089: agents bench가 활성화되지 않은 provider의 버전 명령까지 실행하던 환경 의존성을 제거했습니다. bench 후보를 opt-in provider로 먼저 제한하고, E2E는 레지스트리의 10개 플래그를 모두 비활성화한 뒤 PATH 선두 실행 마커가 생성되지 않는지 검증합니다. 수정 후 동일 Windows Node 26 환경 직접 프로브 3회는 394/362/342ms(최대 394ms)였으며, 기존 15초 제한은 최댓값 대비 약 38.1배 여유라 불필요한 상향을 하지 않습니다.
|
|
6
|
+
|
|
7
|
+
## 1.36.175 — 2026-08-29
|
|
8
|
+
|
|
9
|
+
- T-0095 false-claim 감사를 199개 회귀 프로브로 고정했습니다. round-history와 release cadence는 CLI·프로젝트 하네스·저장소 태그 버전 및 하네스 판독 상태의 출처를 분리하고 기존 currentVersion 별칭에 leerness_cli 범위를 명시합니다. observation-only로 명시 분류한 `about`·`identity`·`status`·`commands`·`install-safety`·`capabilities`·`round-history`·`milestones`·`pulse`·`release cadence`와 MCP 서버 시작은 레거시 `.harness/`를 마이그레이션하거나 사용량 텔레메트리를 쓰지 않습니다. 읽기 전용 MCP 도구도 서버의 우연한 cwd와 명시 대상을 보존합니다. 이 계약은 상위 프로세스의 `LEERNESS_INTERNAL`까지 명시적으로 제거한 격리 환경에서 canonical 대상의 실제 usage 파일로 검증하며, 쓰기 MCP 호출은 대상 프로젝트에만 계속 귀속됩니다. `status`는 선택된 `.harness/` 또는 `.leerness/`를 한 번만 해석해 실제 버전·누락 경로·`workspaceDir`을 보고합니다. `.harness/`·`.leerness/` 충돌이나 잘못된 workspace override는 `unreadable` 성공으로 삼키지 않고 정확한 `workspace_dir_*` 오류로 종료하며, pulse/handoff 집계는 workspace 출처 오류를 구조화해 노출하면서 독립적으로 측정한 Git 라운드 수를 보존합니다. Git 누락·spawn 예외·timeout·signal·nonzero exit이면 round-history·milestones·release cadence는 `git_history_unavailable`로 실패하고 pulse/handoff/health/session-close는 `roundCount:null`, milestone의 `totalRounds/reachedCount/reached/avgRoundsPerDay:null`, `recentChanges:null`과 `recentChangesState/recentChangesError`를 보존해 R0/빈 이력으로 위장하지 않습니다. Git 측정 성공 시에는 기존 `recentChanges` 배열 계약을 그대로 유지하고, `latestTags[].date`의 전체 타임스탬프 계약도 보존하면서 별도 `dateOnly`를 제공합니다. 예외·timeout·signal·nonzero 네 시나리오는 일곱 공개 표면 전부에서 각각 실행합니다. cadence는 `--path > positional > cwd` 단일 우선순위를 검증과 실행에 함께 쓰고, 태그 간격이 없으면 healthy가 아니라 `insufficient-data`로 판정을 보류합니다. E2E/적대 프로브의 Git 픽스처도 공용 `gitSpawn`을 사용해 상위 셸의 외부 저장소·index·일회성 config 주입을 제거하며, persistent global/system Git config도 빈 임시 파일로 격리해 외부 hooksPath가 픽스처에서 실행되지 않게 합니다.
|
|
10
|
+
- Git tag와 recentChanges 레코드는 full `refs/tags/vX.Y.Z`와 ref 이름에 금지된 NUL로 구분하고 실제 달력·시간·ISO 시간대 한계(±14:00)를 만족할 때만 반영합니다. lookalike/prerelease/짧은 ref는 최근 변경에도 들어가지 않습니다. HARNESS_VERSION도 canonical/legacy 전체 문자열만 허용하며 `leerness@X+plus@Y`는 round-history/status/handoff 모두 설치 버전 X를 보고합니다. 잘못된 버전 표식과 사람용·기계용 진단값은 CR/LF뿐 아니라 C0/C1·ESC·DEL·Unicode U+2028/U+2029를 한 줄로 안전화합니다. memory는 빠진 하위명령과 잘못된 직접·중첩 하위명령을 구분하고 실제 토큰 및 실행 가능한 선택지를 보고합니다. preview list/show/serve는 손상 JSON·무효 형상·판독 실패를 각각 store_corrupt/store_invalid/store_unreadable로 보고하고 원본을 보존합니다. preview 스키마는 중첩 `history`·`features`·`contract`, 상태 enum, reserved output key, ID 고유성까지 쓰기 전에 검증합니다. `preview add --mockup`도 읽기/승인/서빙과 동일한 realpath 검사를 사용해 바깥 junction/symlink를 저장 전에 거부하고 절대 in-root 입력은 이식 가능한 상대경로로 정규화합니다. `..mockup.html` 같은 정상 파일명과 안쪽을 가리키는 입력 링크는 허용하지만, 생성·임시·정리 출력은 경로 조상 어느 곳의 링크도 허용하지 않아 `.leerness/previews` junction을 통한 프로젝트 밖 쓰기/재귀 삭제를 막습니다. 비정규 preview ID와 저장된 절대·상위·바깥 링크·누락 `mockupPath`는 원본 바이트를 보존한 채 거부하며, 저장 직전 outgoing 형상도 다시 검증합니다. 저장된 title/design/features/history와 오류 토큰의 모든 터미널 제어문자를 중립화합니다. update/self check의 오프라인 unknown 판정과 plan init positional 경로 수정은 기존 회귀로 재확인했습니다.
|
|
11
|
+
- preview의 생략된 동작은 읽기 전용 list 별칭으로만 처리하고, 승인 저장소의 누락·알 수 없는 status는 더 이상 "대기 0건"으로 축소하지 않습니다. 단일·MCP·`--include`·`--all-apps` handoff의 JSON/compact/full 출력, session close, dashboard JSON/HTML이 모두 `known/count/code` 출처를 보존합니다. 다중 프로젝트에서는 집계와 각 프로젝트를 따로 보고하며, dashboard도 상태 확인 실패를 "미리보기 없음"으로 표시하지 않습니다. 손상·정상 빈 목록·대기 1건 계약은 실제 `_apps` 워크스페이스 양쪽 수집 모드에서 검증했고, 최종 외부 Codex 검토는 P0/P1/P2 모두 0이었습니다.
|
|
12
|
+
|
|
3
13
|
## 1.36.174 — 2026-08-28
|
|
4
14
|
|
|
5
15
|
- T-0094 dead-flag 감사를 실행 회귀로 고정했습니다. intent expand의 가짜 승인 플래그는 fail-closed하고, auto-update status·toggle get·setup-agents opt-out을 실제 배선했으며 provider/api-skill 옵션 결과를 JSON과 사람 출력에서 관측 가능하게 했습니다. provider 영어 모드에서 내장 provider 설명·요약·안내의 한국어 누수도 0으로 고정했습니다. auto-update 상태는 정확한 matcher/실행 명령과 유효한 `/update` 본문만 설치로 인정해 `echo` 문자열·빈 파일 오탐을 차단하고, parse 가능한 비객체 settings와 scalar/mistyped SessionStart hook 항목도 손상으로 거부해 원본 바이트를 보존합니다. `init --no-setup-agents`는 기존 provider 활성화 값을 보존하며, toggle ID는 프로토타입 키를 유효한 ID로 오인하지 않습니다. archive/release/reuse/parent 4개 표면은 기존 정상 동작을 보수적으로 확인했습니다.
|
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.
|
|
141
|
+
이 프로젝트는 Leerness v1.36.176 하네스를 사용합니다. 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.
|
|
195
|
+
Leerness v1.36.176는 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.174는 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.
|
|
216
|
+
현재 누적: **v1.9.x → 1.36.176 릴리스 태그 이력** (수백 라운드) · _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.
|
|
254
|
+
Last synced by Leerness v1.36.176: 2026-08-29
|
|
255
255
|
<!-- leerness:project-readme:end -->
|