leerness 1.36.66 → 1.36.68
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 +15 -0
- package/README.md +4 -4
- package/bin/leerness.js +3 -2
- package/lib/session-close.js +660 -647
- package/lib/tech-profile.js +3 -0
- package/package.json +1 -1
- package/scripts/e2e.js +32 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.36.68 — 2026-07-22 — F14 재구현: 마감 보고의 미승인 미리보기 (8차 헌트 이연분 종결) — R-0001 검수 11회전
|
|
4
|
+
|
|
5
|
+
1.36.67 에서 이연했던 F14 를 원인 규명 후 재구현.
|
|
6
|
+
|
|
7
|
+
- **이연 원인(규명)**: 이전 삽입 지점이 `try/finally` 밖 **jsonMode 전용 후처리 구간**이라 텍스트 경로가 도달조차 못 했다(추정 아님 — 코드 구조 확인). 텍스트 렌더 구간으로 이동해 양 모드 동일 데이터 출력.
|
|
8
|
+
- **`session close` 가 승인 대기 미리보기를 보고**: 텍스트 블록(최대 5줄) + `pendingPreviews {count, items[≤10]}` JSON 필드. proposed/revision-requested 는 대기, approved 는 제외. 손상 previews.json 은 count 0 으로 안전 강등(마감 중단 없음 — 검수 확인).
|
|
9
|
+
- (검수 Medium) **`--no-suggest`/`LEERNESS_NO_SUGGEST=1` 에서도 노출**: suggest 블록 안에 있어 승인 대기 상태가 사라지던 것 — 공용 구간으로 이동 + e2e 회귀 가드.
|
|
10
|
+
- 검증: 텍스트/JSON 일치·JSON 순수성·12건 캡(텍스트 5·items 10)·en 렌더·승인 시 소거(검수 프로브), selftest 334, e2e +1.
|
|
11
|
+
|
|
12
|
+
## 1.36.67 — 2026-07-22 — tech 갱신 시 그래프 동반 정합 (8차 헌트 F15)
|
|
13
|
+
|
|
14
|
+
- **F15**: `leerness tech` 가 프로필 변경을 감지하면 이미 존재하는 `leerness.html` 의 🛠 탭도 함께 갱신 — 종전엔 프로필만 최신이고 그래프는 옛 서비스를 계속 보여줬다(다음 handoff 전까지 불일치). 그래프 산출물이 없는 프로젝트는 무동작(생성 강제 안 함).
|
|
15
|
+
- **정직 이연 — F14(마감 보고의 미승인 미리보기)**: JSON 필드는 정상 동작했으나 텍스트 경로에서 출력 위치/스트림 상태가 맞지 않아 **반쪽 상태로 출하하지 않고 되돌림**. handoff 헤드라인 노출은 기존대로 유지되므로 기능 손실 없음. 다음 라운드에서 close 렌더 파이프라인 정비와 함께 재구현.
|
|
16
|
+
- 검증: 변경→그래프 동기화/무-그래프 프로젝트 무동작 실측, selftest 334.
|
|
17
|
+
|
|
3
18
|
## 1.36.66 — 2026-07-22 — codex 8차 홀리스틱 헌트: 기능 간 상호작용 11건 수정 (High 1·Med 8·Low 2)
|
|
4
19
|
|
|
5
20
|
라운드별 diff 검수가 못 본 "기능 조합" 결함을 교차 헌트(16 발견) — High/데이터손실/거짓판정 우선 11건 수정, 정보노출성 2건(F14/F15) 정직 이연.
|
package/README.md
CHANGED
|
@@ -122,7 +122,7 @@ MIT
|
|
|
122
122
|
<!-- leerness:project-readme:start -->
|
|
123
123
|
## Leerness Project Harness
|
|
124
124
|
|
|
125
|
-
이 프로젝트는 Leerness v1.36.
|
|
125
|
+
이 프로젝트는 Leerness v1.36.68 하네스를 사용합니다. AI 에이전트는 작업 전 `leerness handoff`로 컨텍스트를 적재하고, 작업 후 `leerness check`/`leerness audit`/`leerness session close`를 수행해야 합니다.
|
|
126
126
|
|
|
127
127
|
### 정체성 — AI 에이전트 운영 레이어 (UR-0030)
|
|
128
128
|
|
|
@@ -176,7 +176,7 @@ leerness memory restore decision <date|title>
|
|
|
176
176
|
|
|
177
177
|
### MCP server (외부 AI 통합)
|
|
178
178
|
|
|
179
|
-
Leerness v1.36.
|
|
179
|
+
Leerness v1.36.68는 stdio JSON-RPC MCP server를 내장합니다 — Claude Code · Cursor · Codex CLI 등 외부 AI에 **86개 도구**를 노출:
|
|
180
180
|
|
|
181
181
|
```jsonc
|
|
182
182
|
// 카테고리별
|
|
@@ -197,7 +197,7 @@ Leerness v1.36.66는 stdio JSON-RPC MCP server를 내장합니다 — Claude Cod
|
|
|
197
197
|
`<<autonomous-loop-dynamic>>` 신호만 보내면 AI가:
|
|
198
198
|
1) 다음 라운드 후보 선정 → 2) 코드 변경 → 3) 회귀 테스트 갱신 → 4) 전체 e2e 스위트 통과 → 5) npm publish + git tag → 6) main push → 7) session close → 8) 다음 라운드 예약.
|
|
199
199
|
|
|
200
|
-
현재 누적: **v1.9.x → 1.36.
|
|
200
|
+
현재 누적: **v1.9.x → 1.36.68 릴리스 태그 이력** (수백 라운드) · _reports/는 비공개 보존.
|
|
201
201
|
|
|
202
202
|
### 성능 가이드
|
|
203
203
|
|
|
@@ -235,5 +235,5 @@ leerness release pack --close --auto-main-push
|
|
|
235
235
|
- `.harness/session-handoff.md`: 다음 세션 인수인계 (자동 작성)
|
|
236
236
|
- `.harness/lessons.md` / `decisions.md` / `rules.md`: 영구 메모리 (5 surface)
|
|
237
237
|
|
|
238
|
-
Last synced by Leerness v1.36.
|
|
238
|
+
Last synced by Leerness v1.36.68: 2026-07-22
|
|
239
239
|
<!-- leerness:project-readme:end -->
|
package/bin/leerness.js
CHANGED
|
@@ -34,7 +34,7 @@ const { CAPABILITY_SURFACE, POWERFUL_COMMANDS, ADAPTERS, REUSE_CATEGORIES, REUSE
|
|
|
34
34
|
const { tokenizeForRank: _tokenizeForRank, expandQuery: _expandQuery, scoreHits: _scoreHits, suggestTerms: _suggestTerms } = require('../lib/search-core'); // 1.36.23: memory search 랭킹 코어(순수·0-deps)
|
|
35
35
|
const { findCorruptedStateJson: _findCorruptedStateJson } = require('../lib/state-integrity'); // 1.36.1 (클린룸 리뷰 FN): .harness/*.json 상태 무결성 (audit/health/check 공유)
|
|
36
36
|
|
|
37
|
-
const VERSION = '1.36.
|
|
37
|
+
const VERSION = '1.36.68';
|
|
38
38
|
|
|
39
39
|
// 1.9.290 (UR-0037, Codex gpt-5.5 #4 수렴): CLI 전용 부작용은 require 시 실행하지 않는다.
|
|
40
40
|
// 이전: warning listener 제거 / NODE_OPTIONS 변경 / chcp IIFE 가 top-level 즉시 실행 → require('harness') 시 호스트 프로세스 오염.
|
|
@@ -23125,7 +23125,8 @@ async function main() {
|
|
|
23125
23125
|
if (cmd === 'enforce') return enforceCmd(arg('--path', null) || _taskPositionalPath(args, 2) || process.cwd(), args[1]); // 1.36.43: 사용 강제 (git pre-commit)
|
|
23126
23126
|
if (cmd === 'anchors') return anchorsCmd(arg('--path', null) || _taskPositionalPath(args, 1) || process.cwd(), args[1] && !args[1].startsWith('-') ? args[1] : null); // 1.36.36: 정체성앵커 초안
|
|
23127
23127
|
if (cmd === 'toggle') return _tgl.toggleCmd(arg('--path', process.cwd()), args[1], args[2], args[3], { has, VERSION }); // 1.36.30: 기능 토글 (그래프 ⚙ 탭 연동)
|
|
23128
|
-
|
|
23128
|
+
// 1.36.53 (UR-0062): 기술 프로필 · 1.36.67 (F15): 변경 시 기존 leerness.html 동반 갱신(있을 때만)
|
|
23129
|
+
if (cmd === 'tech') return _tech.techCmd(arg('--path', null) || _taskPositionalPath(args, 2) || process.cwd(), args[1], { has, regenGraph: (r) => { if (exists(path.join(r, 'leerness.html'))) _graph.graphHtmlCmd(r, { _roadmapData, _loadDecisions, _loadLessons, _parseFeatureGraph, _loadToggles: _tgl.loadToggles, _toggleRegistry: _tgl.TOGGLE_REGISTRY, _loadTechProfile: _tech.loadTechProfile, quiet: true }); } });
|
|
23129
23130
|
if (cmd === 'integrity') { // 1.36.57 (감사 F-04): managed 문서 무결성 점검/복구
|
|
23130
23131
|
if (args[1] && args[1] !== 'check') { failJson(has('--json'), 'unknown_subcommand', `알 수 없는 integrity 하위명령: ${args[1]} (가능: check [--repair] [--force])`); return process.exit(process.exitCode || 1); }
|
|
23131
23132
|
return integrityCmd(arg('--path', null) || _taskPositionalPath(args, 2) || process.cwd());
|