tink-harness 1.8.0 → 1.9.0

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.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "tink",
3
3
  "description": "A small harness layer for Claude Code and Codex.",
4
- "version": "1.8.0",
4
+ "version": "1.9.0",
5
5
  "author": {
6
6
  "name": "dotori"
7
7
  }
package/CHANGELOG.md CHANGED
@@ -7,6 +7,23 @@ All notable changes to Tink are tracked here.
7
7
  No unreleased changes yet.
8
8
 
9
9
 
10
+ ## [1.9.0] - 2026-06-09
11
+
12
+ ### Added
13
+
14
+ - Expanded the harness lifecycle summary generator with ordered harness parsing, repeated sequence hints, and rule/memory references from visible run records.
15
+ - Added a derived graph view to harness lifecycle summaries so future reports can read harness, rule, memory, and stage relationships without adding a watcher or hidden cache.
16
+ - Added timeline events to harness lifecycle summaries and rendered recent run history in the local harness health HTML report.
17
+ - Added explainable candidate scores to harness lifecycle summaries and the local health report so weave, frog, merge, and observe candidates are easier to sort without automatic action.
18
+ - Added lifecycle state fields, including a `dormant_candidate` state that treats old usage as an archive review signal rather than delete evidence.
19
+ - Added a static graph overview to the local harness health report, summarizing lifecycle graph nodes and relationships without starting a server or watcher.
20
+
21
+ ### Changed
22
+
23
+ - Updated README and planning docs to describe the implemented harness health summary, static report dashboard, lifecycle states, and remaining roadmap boundaries.
24
+ - Moved README release highlights into the changelog path and added top-level changelog links in the English and Korean README files.
25
+
26
+
10
27
  ## [1.8.0] - 2026-06-09
11
28
 
12
29
  ### Added
package/README.ko.md CHANGED
@@ -8,9 +8,9 @@ Claude Code와 Codex를 위한 작은 하네스 레이어입니다.
8
8
 
9
9
  Tink는 지금 작업에 맞는 하네스를 고르고, 실행 상태를 보이게 만들고, 실제 사용 중 생긴 실패와 피드백으로 하네스 세트를 개선합니다.
10
10
 
11
- **최신 패키지:** v1.8.0 — 요구사항 인터뷰, 합의형 계획, 목표 체크포인트, 위임 브리프를 위한 visible-thinking 하네스를 추가합니다. 최신 마이너 릴리스 노트: [v1.8.0](https://github.com/dotoricode/tink-harness/releases/tag/v1.8.0).
11
+ **최신 패키지:** v1.9.0 — 하네스 건강 요약, graph, timeline, 후보 점수, 생애주기 상태, 정적 로컬 리포트를 추가합니다. 전체 변경 이력은 [CHANGELOG](CHANGELOG.md)를 확인하세요.
12
12
 
13
- [English](README.md) · **한국어**
13
+ [English](README.md) · **한국어** · [변경 이력](CHANGELOG.md)
14
14
 
15
15
  ---
16
16
 
@@ -59,69 +59,6 @@ npx tink-harness@latest update
59
59
 
60
60
  업데이트 후 Codex skill, schema, Windows 경고가 이상해 보이면 `docs/update-troubleshooting.ko.md` 또는 `docs/update-troubleshooting.md`를 확인하세요.
61
61
 
62
- ## 1.8.0에서 달라진 점
63
-
64
- 이번 마이너 릴리스는 GJC식 사고 단계 노출 방식을 Tink의 작은 하네스 모델 안으로 가져옵니다.
65
-
66
- - `/tink:cast`와 `$tink:cast`가 `requirements-interview`, `plan-consensus`, `goal-checkpoint`, `delegation-brief`를 선택할 수 있습니다.
67
- - 긴 실행은 `.tink/current/goals.json`, 인수인계나 병렬 검토 계획은 `.tink/current/delegation.md`에 보이는 상태로 남길 수 있습니다.
68
- - 이 하네스들은 worker, tmux pane, worktree를 자동 시작하지 않습니다. 위임은 별도 승인된 워크플로가 실행하기 전까지 브리프 상태로만 둡니다.
69
-
70
- ## 1.7.1에서 달라진 점
71
-
72
- 이번 패치는 "둘 다" surface와 "Clean Codex picker"를 함께 선택했을 때 Claude Code 명령과 skill이 삭제되는 문제를 수정합니다.
73
-
74
- - "둘 다 (Claude Code + Codex)"와 "Clean Codex picker"를 동시에 선택해도 Claude Code 명령과 skill이 삭제되지 않습니다. 이 옵션은 이제 Codex만 선택했을 때만 표시됩니다.
75
-
76
- ## 1.7.0에서 달라진 점
77
-
78
- 이번 마이너 릴리스는 installer UX의 두 가지 불편함을 해결합니다.
79
-
80
- - surface 선택 단계가 단일 선택 프롬프트(Claude Code / Codex / 둘 다(Claude Code + Codex))로 바뀌어, 커서가 이미 선택된 항목 위에 있어도 선택 상태를 바로 알 수 있습니다.
81
- - 컴포넌트 선택 프롬프트가 설정 중인 surface를 명시합니다. "Claude Code 설치 항목" 또는 "Codex 설치 항목"처럼 선택한 surface에 맞는 메시지가 표시됩니다.
82
-
83
- ## 1.6.3에서 달라진 점
84
-
85
- 이번 패치는 CLI 옵션을 interactive installer 안에서 직접 고를 수 있게 만듭니다.
86
-
87
- - wizard에 `Advanced options` 단계가 추가되어 `Preview only (--dry-run)`, `Overwrite user-modified files (--force)`, `Clean Codex picker (--clean-codex-picker)`를 선택할 수 있습니다.
88
- - install/update 출력에 선택된 옵션 상태를 표시해서 preview, force overwrite, Codex picker cleanup이 켜졌는지 바로 볼 수 있습니다.
89
- - 기존 CLI flag는 그대로 동작하며, interactive wizard에서는 같은 옵션의 초기 선택값으로 반영됩니다.
90
- ## 1.6.2에서 달라진 점
91
-
92
- 이번 패치는 Claude Code와 Codex를 함께 쓰는 설치 흐름을 더 명확하게 만듭니다.
93
-
94
- - Codex action skill이 이제 `Cast`/`Verify` 같은 일반 이름 대신 `Tink: Cast`, `Tink: Verify`, `Tink: Update`처럼 설치됩니다.
95
- - Claude Code와 Codex를 함께 선택했을 때 컴포넌트 선택지에서 `Claude Code Tink skill`과 `Codex Tink skills`가 분리되어 보입니다.
96
- - install/update 출력에 repo, shared `.tink`, Claude Code, Codex target 경로를 표시해서 선택한 항목이 어디에 설치되는지 바로 볼 수 있습니다.
97
- - `--clean-codex-picker` 또는 `TINK_CLEAN_CODEX_PICKER=1`로 Codex에 `Source Command Tink ...` 항목을 만들던 repo-local Claude Tink command/skill surface를 정리할 수 있습니다.
98
-
99
- ## 1.6.1에서 달라진 점
100
-
101
- 이번 패치는 기존 설치의 update 경로를 고칩니다.
102
-
103
- - `tink-harness update`가 v1.5.x에서 생성된 기본 `.tink/rules/index.json`을 새 v1.6.x rule graph seed로 갱신합니다.
104
- - custom rule이나 rule evidence가 들어간 사용자 수정 rule graph는 계속 보존합니다.
105
-
106
- ## 1.6.0에서 달라진 점
107
-
108
- 이번 릴리스는 Tink의 작은 rule graph를 실제 작업에서 더 쓸모 있게 만듭니다.
109
-
110
- - README 한/영 동기화, 버전 메타데이터 동기화, Claude Code 명령 3-copy 동기화, installer/update smoke check처럼 반복되는 작업에 필요한 관련 파일과 검증 체크를 seed rule로 연결합니다.
111
- - `/tink:cast`와 `$tink:cast`는 rule의 `reason`, `risk`, `include_paths`, `checks`를 context 증거로 남기도록 안내합니다.
112
- - `/tink:weave`와 `/tink:frog`는 rule quality를 함께 점검해서 keep, rewrite, split, merge, needs evidence로 정리할 수 있게 합니다.
113
- - 그래프는 계속 작고 파일 기반으로 유지합니다. 이번 릴리스도 public `tink index` 명령, watcher, generated cache, database, 외부 서비스를 추가하지 않습니다.
114
- ## 1.2.0 이후 기반 개선
115
-
116
- 이번 릴리스는 Tink를 Claude Code와 Codex에서 같은 하네스 레이어로 쓰기 쉽게 정리합니다.
117
-
118
- - Codex에는 하나의 넓은 `tink` 스킬 대신 `$tink:cast`, `$tink:verify` 같은 action skill만 보이도록 설치됩니다.
119
- - 비단순 작업은 `context-pack.md`, `context-map.json`, `excluded-context.md`로 어떤 context를 썼고 뺐는지 남깁니다.
120
- - Repo Signal과 Context Graph Lite는 새 `tink index` 명령을 만들지 않고도 관련 테스트, 스키마, 동기화 파일, 검증 힌트를 고르는 데 쓰입니다.
121
- - context 효율 점수화, fixture 비율 계산, run-history rollup, 90% threshold status, 실제 run 기록 경계 기준은 `docs/context-budget-ledger.ko.md`, `docs/context-budget-ledger.md`, `docs/context-metrics-evaluator.ko.md`, `docs/context-metrics-evaluator.md`, `docs/context-run-history-rollup.ko.md`, `docs/context-run-history-rollup.md`, `docs/context-threshold-status.ko.md`, `docs/context-threshold-status.md`, `docs/context-run-record-policy.ko.md`, `docs/context-run-record-policy.md`에서 확인할 수 있습니다.
122
- - `/tink:verify`와 `$tink:verify`는 같은 Verify Runner 모델을 쓰며 `.tink/current/verification.json`에 검증 증거를 남깁니다.
123
- - 외부 context는 MCP Safe Profile을 따릅니다. 가장 작은 source handle만 남기고, 신뢰도와 민감도를 표시하며, 위험하거나 너무 넓은 context는 `excluded-context.md`에 따로 기록합니다.
124
-
125
62
  ## 명령
126
63
 
127
64
  Claude Code에서는 `/tink:*`, Codex에서는 `$tink:*`을 씁니다. 예전 `$tink cast` 형식도 호환되지만, 기본 안내와 자동완성 표면은 `$tink:*`입니다.
@@ -166,17 +103,28 @@ Tink는 직접 볼 수 있는 파일을 씁니다.
166
103
  - `.tink/maintenance/`: 검증, friction, weave 신호 기록
167
104
  - `.tink/memory/`: 승인된 실수, 선호, 교훈
168
105
 
106
+ Tink는 이 기록을 읽어 하네스 건강 요약도 만들 수 있습니다. 요약은 어떤 하네스가 쓰였는지, 어디서 check가 실패하거나 막혔는지, 어떤 하네스가 자주 함께 쓰였는지, 어떤 하네스가 weave 개선 후보인지, frog 정리 검토 후보인지, 병합 검토 후보인지, 오래 쉬어서 보관 검토 후보인지, 더 지켜봐야 하는지를 보여줍니다. 후보 점수, 생애주기 상태, graph 관계, 최근 run timeline도 함께 제공합니다. 이것은 여전히 제안일 뿐입니다. 하네스 수정, 병합, 보관, 삭제, memory 저장, rule 업데이트는 Tink의 기존 명시적 승인 절차를 거쳐야 합니다.
107
+
108
+ 설치된 읽기 전용 helper로 JSON 요약과 로컬 HTML 리포트를 만들 수 있습니다.
109
+
110
+ ```bash
111
+ node .tink/tools/generate-harness-lifecycle-summary.mjs
112
+ node .tink/tools/render-harness-health-report.mjs
113
+ ```
114
+
115
+ 리포트는 정적 대시보드 형태입니다. graph overview, 최근 run timeline, 하네스별 카드를 보여주지만 서버를 시작하거나, 파일을 감시하거나, hidden cache를 만들거나, 새 public `tink index` 명령을 추가하지 않습니다.
116
+
169
117
  선택된 하네스에 따라 `.tink/current/goals.json`에는 현재 실행의 목표 체크포인트가, `.tink/current/delegation.md`에는 인수인계 패킷이 추가될 수 있습니다. Tink는 이런 브리프를 보이는 상태로 준비하지만, 별도 승인된 워크플로가 아니면 worker, tmux pane, worktree를 시작하지 않습니다.
170
118
 
171
119
  Rule graph는 작게 유지합니다. Tink는 먼저 필수 규칙을 고르고, 작업 사실이나 keyword에 맞는 선택 규칙만 가져오며, phase별로 이미 읽은 rule id를 기록해 같은 안내를 반복하지 않습니다.
172
120
 
173
- 설계 메모는 `docs/`에 둡니다. 기본 호환성 기준은 `docs/compatibility-policy.md`에 있으며, 새 작업은 Claude Code와 Codex, macOS와 Windows를 함께 고려해야 합니다. Repo Signal 동작은 `docs/repo-signals.ko.md` 또는 `docs/repo-signals.md`에 정리되어 있고, 가벼운 graph 규칙 적용 계획은 `docs/graph-rule-adoption-plan.ko.md`에 정리되어 있습니다. 외부 context 안전 기준은 `docs/mcp-safe-profile.md`에 정리되어 있습니다. `.tink/current/` 상태를 읽거나 검토할 때는 `docs/work-state.ko.md` 또는 `docs/work-state.md`부터 보면 됩니다. 다음 업데이트 안정화 계획은 `docs/phase-5-update-confidence.ko.md`와 `docs/phase-5-update-confidence.md`에 정리되어 있습니다. 더 큰 아이디어 구현 점검과 로드맵은 `docs/tink-idea-implementation-plan.ko.md`에 정리되어 있습니다.
121
+ 설계 메모는 `docs/`에 둡니다. 기본 호환성 기준은 `docs/compatibility-policy.md`에 있으며, 새 작업은 Claude Code와 Codex, macOS와 Windows를 함께 고려해야 합니다. Repo Signal 동작은 `docs/repo-signals.ko.md` 또는 `docs/repo-signals.md`에 정리되어 있고, 가벼운 graph 규칙 적용 계획은 `docs/graph-rule-adoption-plan.ko.md`에 정리되어 있습니다. 하네스 건강 요약은 `docs/harness-lifecycle-signals.ko.md` 또는 `docs/harness-lifecycle-signals.md`에 정리되어 있습니다. 외부 context 안전 기준은 `docs/mcp-safe-profile.md`와 `docs/external-context-policy.md`에 정리되어 있습니다. `.tink/current/` 상태를 읽거나 검토할 때는 `docs/work-state.ko.md` 또는 `docs/work-state.md`부터 보면 됩니다. 다음 업데이트 안정화 계획은 `docs/phase-5-update-confidence.ko.md`와 `docs/phase-5-update-confidence.md`에 정리되어 있습니다. Context 효율 관련 문서는 `docs/context-budget-ledger.ko.md`, `docs/context-budget-ledger.md`, `docs/context-metrics-evaluator.ko.md`, `docs/context-metrics-evaluator.md`, `docs/context-run-history-rollup.ko.md`, `docs/context-run-history-rollup.md`, `docs/context-threshold-status.ko.md`, `docs/context-threshold-status.md`, `docs/context-run-record-policy.ko.md`, `docs/context-run-record-policy.md`에서 확인할 수 있습니다. 남은 작업 단위는 `docs/planned-work-units.ko.md` 또는 `docs/planned-work-units.md`에 정리되어 있습니다. 더 큰 아이디어 구현 점검과 로드맵은 `docs/tink-idea-implementation-plan.ko.md`에 정리되어 있습니다.
174
122
 
175
123
  중요한 원칙은 승인입니다. 현재 작업을 진행하는 승인과, 미래에도 재사용될 상태를 저장하는 승인은 별개입니다. 새 하네스, 메모리, rule graph, hook guard 저장은 항상 별도 승인이 필요합니다.
176
124
 
177
125
  ## 계획된 작업 단위
178
126
 
179
- 남은 계획은 번호가 붙은 단계보다 작업 단위 이름으로 관리합니다. 전체 목록은 `docs/planned-work-units.ko.md` 또는 `docs/planned-work-units.md`에 있으며, 세부 문서는 검증 증거 세분화, 외부 컨텍스트 정책, 하네스 생애주기 신호, 메모리 결정 계층, 컨텍스트 변화 리뷰, 업데이트 진단으로 나누어 둡니다.
127
+ 남은 계획은 번호가 붙은 단계보다 작업 단위 이름으로 관리합니다. 전체 목록은 `docs/planned-work-units.ko.md` 또는 `docs/planned-work-units.md`에 있으며, 세부 문서는 검증 증거 세분화, 외부 컨텍스트 정책, 메모리 결정 계층, 컨텍스트 변화 리뷰, 업데이트 진단으로 나누어 둡니다. 하네스 생애주기 신호는 이제 기본 JSON 요약과 정적 HTML 리포트까지 구현되어 별도 문서에서 관리합니다.
180
128
 
181
129
  ## Tink가 아닌 것
182
130
 
package/README.md CHANGED
@@ -17,16 +17,16 @@
17
17
  </p>
18
18
 
19
19
  <p>
20
- <a href="https://github.com/dotoricode/tink-harness/releases/tag/v1.6.0"><img src="https://img.shields.io/github/v/release/dotoricode/tink-harness?label=release&color=2ea44f" alt="GitHub release"></a>
20
+ <a href="https://github.com/dotoricode/tink-harness/releases/tag/v1.9.0"><img src="https://img.shields.io/github/v/release/dotoricode/tink-harness?label=release&color=2ea44f" alt="GitHub release"></a>
21
21
  <a href="https://www.npmjs.com/package/tink-harness"><img src="https://img.shields.io/npm/v/tink-harness?label=npm&color=cb3837" alt="npm version"></a>
22
22
  <a href="https://github.com/dotoricode/tink-harness/actions/workflows/ci.yml"><img src="https://img.shields.io/github/actions/workflow/status/dotoricode/tink-harness/ci.yml?branch=main&label=ci" alt="CI"></a>
23
23
  <a href="https://github.com/dotoricode/tink-harness/blob/main/LICENSE"><img src="https://img.shields.io/github/license/dotoricode/tink-harness" alt="License"></a>
24
24
  <a href="https://github.com/dotoricode/tink-harness/stargazers"><img src="https://img.shields.io/github/stars/dotoricode/tink-harness?style=social" alt="GitHub stars"></a>
25
25
  </p>
26
26
 
27
- <p><strong>Latest package:</strong> v1.8.0 - Adds visible-thinking harnesses for requirements interviews, consensus planning, goal checkpoints, and delegation briefs. Latest minor release notes: <a href="https://github.com/dotoricode/tink-harness/releases/tag/v1.8.0">v1.8.0</a>.</p>
27
+ <p><strong>Latest package:</strong> v1.9.0 - Adds harness health summaries with graph, timeline, scoring, lifecycle states, and a static local report. See <a href="CHANGELOG.md">CHANGELOG</a> for release history.</p>
28
28
 
29
- **English** · [한국어](README.ko.md)
29
+ **English** · [한국어](README.ko.md) · [Changelog](CHANGELOG.md)
30
30
 
31
31
  ---
32
32
 
@@ -124,71 +124,6 @@ To quickly verify the updated install, see `docs/update-verification-recipe.md`
124
124
 
125
125
  If an update looks stale or incomplete, see `docs/update-troubleshooting.md` or `docs/update-troubleshooting.ko.md`.
126
126
 
127
- ## What's new in 1.8.0
128
-
129
- This minor release brings GJC-style visible thinking into Tink without adding new commands.
130
-
131
- - `/tink:cast` and `$tink:cast` can now select `requirements-interview`, `plan-consensus`, `goal-checkpoint`, and `delegation-brief`.
132
- - Long runs can record `.tink/current/goals.json`; handoff or parallel-review plans can record `.tink/current/delegation.md`.
133
- - Tink still does not start workers, tmux panes, or worktrees from these harnesses. Delegation remains a visible brief unless another approved workflow runs it.
134
-
135
- ## What's new in 1.7.1
136
-
137
- This patch fixes a destructive interaction between the "Both" surface selection and "Clean Codex picker."
138
-
139
- - Selecting "Both (Claude Code + Codex)" and "Clean Codex picker" in the same install/update run no longer deletes the Claude Code commands and skills. The option is now hidden when both surfaces are selected — it only appears when Codex is the sole surface.
140
-
141
- ## What's new in 1.7.0
142
-
143
- This minor release removes two installer UX rough edges.
144
-
145
- - The surface selection step now uses a single-choice prompt — Claude Code, Codex, or Both — instead of a multi-checkbox toggle, so the selected state is immediately visible on any terminal.
146
- - The component selection prompt now names the surface being configured, so you see a surface-specific prompt rather than the same generic message regardless of what you selected.
147
-
148
- ## What's new in 1.6.3
149
-
150
- This patch makes CLI options visible in the interactive installer.
151
-
152
- - The wizard now has an `Advanced options` step with `Preview only (--dry-run)`, `Overwrite user-modified files (--force)`, and `Clean Codex picker (--clean-codex-picker)` when Codex is selected.
153
- - Install/update output now prints the selected option state, so you can see whether preview, force overwrite, or Codex picker cleanup is active.
154
- - CLI flags still work for non-interactive runs and seed the same visible choices when the wizard is used.
155
-
156
- ## What's new in 1.6.2
157
-
158
- This patch makes the installer clearer for mixed Claude Code + Codex setups.
159
-
160
- - Codex action skills now install with names like `Tink: Cast`, `Tink: Verify`, and `Tink: Update` instead of generic `Cast`/`Verify` labels.
161
- - The component picker now separates `Claude Code Tink skill` from `Codex Tink skills` when both surfaces are selected.
162
- - Install/update output now prints the repo, shared `.tink`, Claude Code, and Codex target paths so you can see where the selected choices will land.
163
- - `--clean-codex-picker` and `TINK_CLEAN_CODEX_PICKER=1` can remove repo-local Claude Tink command/skill surfaces that make Codex show noisy `Source Command Tink ...` entries.
164
-
165
- ## What's new in 1.6.1
166
-
167
- This patch fixes the update path for existing installs.
168
-
169
- - `tink-harness update` now refreshes the generated legacy `.tink/rules/index.json` from v1.5.x so existing users receive the v1.6.0 graph-rule seed rules.
170
- - User-modified rule graphs are still preserved when they contain custom rules or rule evidence.
171
-
172
- ## What's new in 1.6.0
173
-
174
- This release makes Tink's small rule graph more useful during real work.
175
-
176
- - Seed rules now connect common maintenance work to related files, harnesses, and checks, such as README bilingual sync, version metadata sync, Claude Code command 3-copy sync, and installer/update smoke checks.
177
- - `/tink:cast` and `$tink:cast` guidance now records rule `reason`, `risk`, `include_paths`, and `checks` as reviewable context evidence instead of silently loading extra files.
178
- - `/tink:weave` and `/tink:frog` now include rule-quality review so reusable rules can be kept, rewritten, split, merged, or marked as needing more evidence.
179
- - The graph remains file-based and small. This release still does not add a public `tink index` command, watcher, generated cache, database, or external service.
180
-
181
- ## Recent foundation from 1.2.0+
182
-
183
- This release makes Tink work as one harness layer across Claude Code and Codex.
184
-
185
- - Codex now installs focused `$tink:*` action skills instead of one broad visible `tink` skill, so the picker shows commands like `$tink:cast` and `$tink:verify` cleanly.
186
- - Non-trivial runs now create context artifacts: `context-pack.md`, `context-map.json`, and `excluded-context.md`.
187
- - Repo Signals and Context Graph Lite help `/tink:cast` and `$tink:cast` choose relevant tests, schemas, sync partners, and verification hints without adding a new `tink index` command.
188
- - Context Budget Ledger fields, fixture-ratio evaluation, run-history rollup, the 90 percent threshold status, and future real-run record boundaries are documented in `docs/context-budget-ledger.md`, `docs/context-budget-ledger.ko.md`, `docs/context-metrics-evaluator.md`, `docs/context-metrics-evaluator.ko.md`, `docs/context-run-history-rollup.md`, `docs/context-run-history-rollup.ko.md`, `docs/context-threshold-status.md`, `docs/context-threshold-status.ko.md`, `docs/context-run-record-policy.md`, and `docs/context-run-record-policy.ko.md` without adding a new command.
189
- - `/tink:verify` and `$tink:verify` share one portable Verify Runner model and write compact evidence to `.tink/current/verification.json`.
190
- - External context now follows the MCP Safe Profile: include only the smallest useful source handle, mark confidence and sensitivity, exclude unsafe context visibly, and connect important claims to verification.
191
-
192
127
  ## Commands
193
128
 
194
129
  Tink keeps the command surface small.
@@ -247,11 +182,22 @@ Tink uses files you can inspect:
247
182
  - `.tink/maintenance/`: verification, friction, and weave signals that help repeated failures become approved improvements
248
183
  - `.tink/memory/`: approved mistakes, preferences, and lessons
249
184
 
185
+ Tink can also read those records into a harness health summary. The summary shows which harnesses were used, where checks failed or got blocked, which harnesses often appear together, and which ones may deserve a weave improvement, frog cleanup review, merge review, dormant archive review, or more observation. It also includes an explainable candidate score, lifecycle state, graph relationships, and recent run timeline. It only prepares suggestions. Tink does not edit, merge, archive, delete, save memory, or update rules without the same explicit approval gates as the rest of Tink.
186
+
187
+ The installed read-only helpers can generate that JSON summary and turn it into a local HTML report:
188
+
189
+ ```bash
190
+ node .tink/tools/generate-harness-lifecycle-summary.mjs
191
+ node .tink/tools/render-harness-health-report.mjs
192
+ ```
193
+
194
+ The report is a static dashboard-style page with a graph overview, recent run timeline, and one card per harness. It does not start a server, watch files, create a hidden cache, or add a public `tink index` command.
195
+
250
196
  When selected, current-run artifacts may also include `.tink/current/goals.json` for goal checkpoints or `.tink/current/delegation.md` for handoff packets. Tink prepares those briefs as visible state; it does not start workers, tmux panes, or worktrees unless a separate approved workflow does so.
251
197
 
252
198
  The rule graph stays small on purpose. Tink loads matching mandatory rules first, retrieves only relevant optional rules by task facts or keywords, and records loaded rule ids by phase so the same guidance is not repeated in one run.
253
199
 
254
- Design notes live in `docs/`. The compatibility baseline is `docs/compatibility-policy.md`: every new slice should consider Claude Code and Codex, plus macOS and Windows. Repo signal behavior is described in `docs/repo-signals.md` or `docs/repo-signals.ko.md`. The lightweight graph-rule adoption plan is `docs/graph-rule-adoption-plan.ko.md`. External context safety is described in `docs/mcp-safe-profile.md` and `docs/external-context-policy.md`. To read or review `.tink/current/` state, start with `docs/work-state.md` or `docs/work-state.ko.md`. Update confidence is still documented in `docs/phase-5-update-confidence.md` or `docs/phase-5-update-confidence.ko.md`. The planned work-unit list is `docs/planned-work-units.md` or `docs/planned-work-units.ko.md`, with details in the verification evidence, harness lifecycle, memory decision, context change, and update diagnosis docs. The broader Korean idea audit and roadmap is `docs/tink-idea-implementation-plan.ko.md`.
200
+ Design notes live in `docs/`. The compatibility baseline is `docs/compatibility-policy.md`: every new slice should consider Claude Code and Codex, plus macOS and Windows. Repo signal behavior is described in `docs/repo-signals.md` or `docs/repo-signals.ko.md`. The lightweight graph-rule adoption plan is `docs/graph-rule-adoption-plan.ko.md`. Harness health summaries are described in `docs/harness-lifecycle-signals.md` or `docs/harness-lifecycle-signals.ko.md`. External context safety is described in `docs/mcp-safe-profile.md` and `docs/external-context-policy.md`. To read or review `.tink/current/` state, start with `docs/work-state.md` or `docs/work-state.ko.md`. Update confidence is still documented in `docs/phase-5-update-confidence.md` or `docs/phase-5-update-confidence.ko.md`. Context efficiency docs live in `docs/context-budget-ledger.md`, `docs/context-budget-ledger.ko.md`, `docs/context-metrics-evaluator.md`, `docs/context-metrics-evaluator.ko.md`, `docs/context-run-history-rollup.md`, `docs/context-run-history-rollup.ko.md`, `docs/context-threshold-status.md`, `docs/context-threshold-status.ko.md`, `docs/context-run-record-policy.md`, and `docs/context-run-record-policy.ko.md`. The planned work-unit list is `docs/planned-work-units.md` or `docs/planned-work-units.ko.md`, with details in the verification evidence, memory decision, context change, and update diagnosis docs. The broader Korean idea audit and roadmap is `docs/tink-idea-implementation-plan.ko.md`.
255
201
 
256
202
  The important rule is approval.
257
203
 
package/VERSIONING.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Versioning
2
2
 
3
- Current version: `1.8.0`
3
+ Current version: `1.9.0`
4
4
 
5
5
  Tink follows semver from `1.0.0` onward.
6
6
 
@@ -25,12 +25,14 @@ Use semver.
25
25
 
26
26
  ## Release checklist
27
27
 
28
- Before pushing a versioned release:
28
+ Before publishing a versioned release, always work from a release branch and merge by squash. Do not commit release work directly to `main`; a direct `main` commit makes it impossible to attach the release to a normal PR without rewriting published history.
29
29
 
30
- 1. Update `package.json`, `package-lock.json`, and `.claude-plugin/plugin.json` to the same version.
31
- 2. Add a `CHANGELOG.md` entry for the version.
32
- 3. Confirm README update instructions still match the actual Claude Code plugin path.
33
- 4. Run:
30
+ 1. Create a release branch.
31
+ 2. Update `package.json`, `package-lock.json`, and `.claude-plugin/plugin.json` to the same version.
32
+ 3. Add a `CHANGELOG.md` entry for the version.
33
+ 4. Confirm README update instructions still match the actual Claude Code plugin path.
34
+ 5. Write the PR title with `fix`, `feat`, `chore`, or `docs`, and write the PR body in Korean using the relevant subtitles from `Problem`, `Fix`, `Summary`, `Changes`, `Behavior`, and `Testing`.
35
+ 6. Run:
34
36
 
35
37
  ```bash
36
38
  npm test
@@ -52,7 +54,20 @@ claude plugin validate .claude-plugin/marketplace.json
52
54
  npm pack --dry-run --json
53
55
  ```
54
56
 
55
- 5. Push and verify GitHub Actions CI.
57
+ 7. Push the branch, open a PR, and verify GitHub Actions CI.
58
+ 8. Squash merge the PR into `main`. Do not use merge commits or rebase merge for release PRs.
59
+ 9. Create the version tag from the squash commit on `main`.
60
+ 10. Create the GitHub release. The body should list merged PRs as linked entries and use a linked compare range, for example:
61
+
62
+ ```md
63
+ ## What's Changed
64
+
65
+ - feat(scope): concise change summary by @author in #123
66
+
67
+ **Full Changelog**: [v1.7.1...v1.8.0](https://github.com/dotoricode/tink-harness/compare/v1.7.1...v1.8.0)
68
+ ```
69
+
70
+ 11. Publish to npm only after the GitHub release and package verification are complete.
56
71
 
57
72
  ## Existing-user update path
58
73
 
package/bin/install.js CHANGED
@@ -664,6 +664,7 @@ function copySelected(scope, components, agent) {
664
664
  copyDir(path.join(templateRoot, 'tink/rules'), path.join(target, '.tink/rules'), target);
665
665
  copyDir(path.join(templateRoot, 'tink/schemas'), path.join(target, '.tink/schemas'), target);
666
666
  copyDir(path.join(templateRoot, 'tink/maintenance'), path.join(target, '.tink/maintenance'), target);
667
+ copyDir(path.join(templateRoot, 'tink/tools'), path.join(target, '.tink/tools'), target);
667
668
  writeFileFromTemplate(path.join(templateRoot, 'tink/config.json'), path.join(target, '.tink/config.json'), target);
668
669
  }
669
670
  if (components.includes('memory')) {
package/commands/cast.md CHANGED
@@ -40,6 +40,12 @@ Map prompt content to `AskUserQuestion` fields:
40
40
  - `label`: 1–5 word option name (e.g. "승인", "조정", "취소"). Add "(권장)" to the first option label if it is recommended.
41
41
  - `description`: explanatory text for the option
42
42
 
43
+ Label quality rules:
44
+ - Use short, common, readable labels only. Good Korean labels are `승인`, `조정`, `취소`, `요구사항 입력`, `기본 하네스만 사용`, `새 하네스 초안 만들기`, `구조 점검`, `내용 점검`, `전체 점검`.
45
+ - Do not invent compressed Korean labels, transliterated fragments, or unclear summaries such as `콘데의달 지질`.
46
+ - If the idea is too specific for a clean 1-5 word label, put the detail in `description` and use a generic label such as `내용 점검` or `전체 점검`.
47
+ - Before calling `AskUserQuestion`, reread each Korean label. If it looks misspelled, unnatural, or semantically unclear, replace it with a plain fallback label.
48
+
43
49
  Use Korean field values when `.tink/config.json` language is `ko` or `auto` with Korean input; use English otherwise.
44
50
 
45
51
  ## Readiness check
@@ -485,6 +491,15 @@ Do not save if the user approved only the current run. Saving reusable state nee
485
491
  ## Approval format
486
492
  Use concise, selection-oriented wording. The recommendation must include the first action Tink will perform, not only the harness name.
487
493
 
494
+ User-facing approval wording:
495
+ - Do not show internal terms such as `Probe`, `probe`, `합성 프로브`, `generic fit`, `제너릭 fit`, or `Stitch`.
496
+ - Translate the synthesis probe result as `맞춤 절차 판단`.
497
+ - Translate `generic fit` as `기본 하네스는 큰 틀만 맞음` or `기본 하네스만으로는 부족함`.
498
+ - Translate visible Stitch output as `확인할 점`, not `Stitch 점검`.
499
+ - Explain what each selected harness does in one short phrase before asking for approval.
500
+ - Show a short `하네스 선택 과정` when more than one harness or a run-only draft is selected: candidate considered, selected harnesses, and why each was chosen.
501
+ - Prefer natural scope wording such as `완료 기준을 먼저 나누겠습니다` or `이번 점검은 두 범위로 보겠습니다` instead of awkward wording like `"더 잘 동작하기"의 기준이 두 갈래입니다`.
502
+
488
503
  Approval option counts (always exactly one applies):
489
504
  - Default (no Stitch, no run-only draft): 4 options — 승인 / 조정 / 새 하네스 초안 만들기 / 취소
490
505
  - Run-only draft offered: 4 options — 승인 / 조정 / 기본 하네스만 사용 / 취소
@@ -497,9 +512,16 @@ Approval option counts (always exactly one applies):
497
512
  **🎯 Goals**
498
513
  - <goal>
499
514
 
500
- **🛠️ Harness**: `code-change + review`
501
- - **Probe:** 1 yes built-in 하네스로 충분
502
- - **이유:** 변경 범위가 좁고, 회귀 확인이 필요합니다.
515
+ **🛠️ 선택한 하네스**: `code-change + review`
516
+ - `code-change`: 범위가 정해진 코드 변경을 작게 수행하는 하네스
517
+ - `review`: 변경 위험과 누락을 확인하는 점검 하네스
518
+
519
+ **하네스 선택 과정**
520
+ - 후보: `code-change`, `review`, `harness-synthesis`
521
+ - 선택: `code-change + review`
522
+ - 이유: 변경 범위가 좁고, 회귀 확인이 필요합니다. 별도 맞춤 초안은 필요하지 않습니다.
523
+
524
+ - **맞춤 절차 판단:** 기본 하네스로 충분
503
525
  - **첫 실행:** 관련 파일을 먼저 읽고 검증 명령 후보를 확정합니다.
504
526
 
505
527
  ? 진행할까요?
@@ -517,7 +539,16 @@ If a run-only draft or new harness is useful:
517
539
  **🎯 Goals**
518
540
  - <goal>
519
541
 
520
- **🛠️ Harness**: `<built-in>` (probe: 3 yes — generic fit)
542
+ **🛠️ 선택한 하네스**: `<built-in> + 임시 초안`
543
+ - `<built-in>`: 기본 작업 흐름을 잡는 하네스
544
+ - `customer-interview-synthesis`: 이번 작업의 인터뷰 분석 순서를 보강하는 임시 초안
545
+
546
+ **하네스 선택 과정**
547
+ - 후보: `<built-in>`, `harness-synthesis`, `customer-interview-synthesis`
548
+ - 선택: `<built-in> + customer-interview-synthesis`
549
+ - 이유: 기본 하네스는 큰 틀만 맞고, 인터뷰 원문 근거와 pain point 구분은 별도 절차가 필요합니다.
550
+
551
+ **맞춤 절차 판단:** 기본 하네스만으로는 부족함
521
552
 
522
553
  **임시 하네스 초안** (이번 작업 전용):
523
554
  - **name:** `customer-interview-synthesis`
@@ -536,7 +567,7 @@ If a run-only draft or new harness is useful:
536
567
  4. 취소
537
568
  ```
538
569
 
539
- If Stitch triggers as a soft gate, merge it into the approval format. The user-facing block uses plain language — never the word `Stitch`. The Korean default uses `점검 사항`; English uses `Review note`:
570
+ If Stitch triggers as a soft gate, merge it into the approval format. The user-facing block uses plain language — never the word `Stitch`. The Korean default uses `확인할 점`; English uses `Review note`:
540
571
 
541
572
  ```text
542
573
  ### 🧶 Run: <task name>
@@ -544,13 +575,20 @@ If Stitch triggers as a soft gate, merge it into the approval format. The user-f
544
575
  **🎯 Goals**
545
576
  - <goal>
546
577
 
547
- **🔍 점검 사항**
578
+ **🔍 확인할 점**
548
579
  - 제안: <one proposal>
549
580
  - 이유: <reason>
550
581
  - 이대로 진행 시 가정: <explicit assumption>
551
582
 
552
- **🛠️ Harness**: `<harness>`
553
- - **Probe:** ...
583
+ **🛠️ 선택한 하네스**: `<harness>`
584
+ - `<harness>`: <what this harness does in one short phrase>
585
+
586
+ **하네스 선택 과정**
587
+ - 후보: <candidate harnesses>
588
+ - 선택: `<harness>`
589
+ - 이유: <why selected>
590
+
591
+ - **맞춤 절차 판단:** <기본 하네스로 충분 | 기본 하네스만으로는 부족함 | 새 맞춤 절차 필요>
554
592
  - **이유:** ...
555
593
  - **첫 실행:** ...
556
594
 
@@ -712,4 +750,4 @@ If a check fails:
712
750
  - Do not store raw logs, full diffs, secrets, or one-off task progress as reusable memory.
713
751
  - Do not ask "do you want to save?" before showing the Reusable State Save Gate payload. Show the payload directly.
714
752
  - Do not narrate .tink/ file writes (current/, runs/, memory/, config.json) in the response body. Do not show diff summaries, file lists, or "I created X / I updated Y" breakdowns. The tool-use header is sufficient on its own. At the end of the response, add at most one short sentence summarizing what changed across all .tink/ writes.
715
- - Do not use Tink-internal jargon (Stitch, hard gate, Save Gate, Reusable State, or temporary labels like G1/G2/G3) when writing user-facing responses. Translate to plain language matching `config.json` language. Internal documentation and code keep original terms for consistency.
753
+ - Do not use Tink-internal jargon (Stitch, Probe, synthesis probe, generic fit, hard gate, Save Gate, Reusable State, or temporary labels like G1/G2/G3) when writing user-facing responses. Translate to plain language matching `config.json` language. Internal documentation and code keep original terms for consistency.
package/commands/frog.md CHANGED
@@ -22,10 +22,15 @@ Use Korean field values when `.tink/config.json` language is `ko` or `auto` with
22
22
 
23
23
  ## Procedure
24
24
  1. Read `.tink/harnesses/index.json`.
25
+ 1b. Prepare the harness health summary:
26
+ - If `.tink/tools/generate-harness-lifecycle-summary.mjs` exists, run `node .tink/tools/generate-harness-lifecycle-summary.mjs` from the repo root before ranking candidates.
27
+ - If the generator is missing, continue with the compact evidence below and say the health summary is unavailable.
28
+ - Treat the generated `.tink/maintenance/harness-lifecycle.json` as a report, not as approval or reusable memory.
25
29
  2. Check compact evidence if available:
26
30
  - `.tink/runs/` summaries
27
31
  - `.tink/maintenance/ledger.jsonl`
28
32
  - `.tink/maintenance/weave-queue.json`
33
+ - `.tink/maintenance/harness-lifecycle.json` or another lifecycle summary that follows `.tink/schemas/harness-lifecycle.schema.json`
29
34
  - `.tink/rules/index.json`
30
35
  - references in memory files
31
36
  - recent git history touching harness files as weak context only
@@ -43,6 +48,8 @@ Use Korean field values when `.tink/config.json` language is `ko` or `auto` with
43
48
  - strong: multiple run or ledger records show non-use, repeated rejection, replacement, or accepted alternative
44
49
  - medium: one run or ledger record plus clear overlap or memory evidence
45
50
  - weak: static index, git-only evidence, stale current notes, or model judgment
51
+ If a lifecycle summary is present, treat it as a health summary, not as authority. Use its `confidence`, `evidence_grade`, `evidence_handles`, and `safe_next_action` to explain the recommendation. A low-confidence or weak lifecycle entry must default to `keep`, `observe`, or `needs evidence`.
52
+ Sort lifecycle-backed candidates first by evidence strength, then by recommendation: `frog_candidate`, `merge_candidate`, `weave`, `observe`, `keep`.
46
53
  5. Identify candidates:
47
54
  - never used with strong evidence
48
55
  - not used recently with strong evidence
@@ -63,6 +70,7 @@ Use Korean field values when `.tink/config.json` language is `ko` or `auto` with
63
70
  Prefer keep, rewrite, split, merge, or needs evidence before any removal proposal.
64
71
  Report rule recommendations separately from harness recommendations.
65
72
  7. Only strong evidence may recommend `delete`. Medium evidence may recommend `merge` or `hone`. Weak evidence must default to `keep` or `needs evidence`.
73
+ Lifecycle recommendations follow the same rule: `frog_candidate` means "prepare a cleanup review," not "delete." Deletion, archive, merge, harness edit, rule update, and memory save still need the normal approval payload.
66
74
  8. For each non-keep action, prepare an operation-specific approval payload with exact files, op ID, evidence handles, and rollback.
67
75
  9. If the recommendation is `weave`, write or present a weave handoff packet and, after approval, add it to `.tink/maintenance/weave-queue.json`:
68
76
  - id
package/commands/weave.md CHANGED
@@ -26,6 +26,8 @@ Use Korean field values when `.tink/config.json` language is `ko` or `auto` with
26
26
  - Auto signals from completed runs (entries where `auto: true`)
27
27
  Count auto signals per harness: `check_failed` signals count as 2, all other outcomes count as 1. Use this frequency to rank improvement candidates — harnesses with the highest signal count should be improved first. If invoked from `/tink:frog`, also read the purge output and `.tink/current/notes.md` for the weave handoff packet.
28
28
  If `.tink/maintenance/friction.jsonl` exists, read only compact recent entries and count repeated `check_failed`, `check_skipped`, `blocked`, gate denial, or rollback events. Repeated friction can justify a harness edit, rule graph update, or opt-in guard candidate.
29
+ If `.tink/tools/generate-harness-lifecycle-summary.mjs` exists, run `node .tink/tools/generate-harness-lifecycle-summary.mjs` from the repo root before ranking candidates. The generated `.tink/maintenance/harness-lifecycle.json` is a report, not approval or reusable memory.
30
+ If `.tink/maintenance/harness-lifecycle.json` or another summary following `.tink/schemas/harness-lifecycle.schema.json` exists, read it as a harness health summary. Prefer entries with recommendation `weave`, high or medium confidence, and concrete `evidence_handles`. Low-confidence entries should stay as observation unless the user explicitly asks to act on them.
29
31
  2. Identify one or a few active harnesses to improve using real failures and evidence:
30
32
  - repeated mistakes
31
33
  - user corrections
@@ -34,6 +36,7 @@ Use Korean field values when `.tink/config.json` language is `ko` or `auto` with
34
36
  - confusing approval prompts
35
37
  - too much context footprint
36
38
  - missing done criteria
39
+ Rank lifecycle-backed `weave` candidates ahead of raw queue counts when they cite concrete evidence handles and medium or high confidence. Use raw queue and friction counts to break ties.
37
40
  3. Require concrete evidence handles before proposing a save:
38
41
  - run record path or run ID
39
42
  - current notes path when same-conversation certainty exists
@@ -41,6 +44,7 @@ Use Korean field values when `.tink/config.json` language is `ko` or `auto` with
41
44
  - friction entry timestamp/type
42
45
  - compact user correction snippet
43
46
  - purge handoff ID from `.tink/maintenance/weave-queue.json`
47
+ - lifecycle summary evidence handle plus the source run, ledger, queue, or friction entry it points to
44
48
  4. Classify the evidence as repeated or single-run. Single-run evidence may suggest a trial edit, but should not become broad policy unless the user explicitly approves.
45
49
  5. Explain why the change belongs in the harness rather than `.tink/memory/` or `.tink/current/notes.md`.
46
50
  6. Decide the right destination:
@@ -1,6 +1,12 @@
1
1
  # 하네스 생애주기 신호
2
2
 
3
- 하네스 생애주기 신호는 Tink가 하네스를 계속 관찰할지, 개선할지, 정리 후보로 둘지, 겹치는 하네스와 병합 후보로 둘지 판단하는 데 도움을 준다.
3
+ 하네스 생애주기 신호는 재사용 하네스의 건강 요약이다.
4
+ Tink가 지난 실행 기록을 읽고 다음 질문에 답할 수 있게 돕는다.
5
+
6
+ - 어떤 하네스가 실제로 쓰였는가?
7
+ - 어디서 check가 실패하거나 막혔는가?
8
+ - 어떤 하네스는 `/tink:weave`로 조금 고치면 좋은가?
9
+ - 어떤 하네스는 정리하거나 병합 후보로 볼 수 있는가?
4
10
 
5
11
  스키마는 `templates/tink/schemas/harness-lifecycle.schema.json`에 둔다.
6
12
 
@@ -10,8 +16,24 @@
10
16
  - `successes`: 필수 검증까지 완료한 실행.
11
17
  - `failures`: 필수 check 실패.
12
18
  - `blocked`: check를 실행할 수 없었던 경우.
19
+ - `last_used`: 마지막으로 확인된 사용 시각. 기록이 없으면 `null`.
20
+ - `success_rate`: 사용 횟수 대비 검증 완료 비율. 근거가 부족하면 `null`.
21
+ - `failure_rate`: 사용 횟수 대비 필수 check 실패 비율. 근거가 부족하면 `null`.
22
+ - `co_used_with`: 같은 run에서 자주 함께 나온 하네스.
23
+ - `sequence_hints`: 한 하네스 뒤에 다른 단계가 반복해서 따라온 순서 힌트.
24
+ - `rule_refs`: 같은 run 기록에 나온 rule id.
25
+ - `memory_refs`: 같은 run 기록에 나온 memory 파일.
13
26
  - `context_cost`: low, medium, high, unknown.
14
27
 
28
+ 요약에는 이후 리포트와 대시보드가 읽기 쉬운 작은 `graph` 블록도 들어간다.
29
+
30
+ - `graph.nodes`: harness, rule, memory, stage 노드.
31
+ - `graph.edges`: `co_used`, `sequence`, `uses_rule`, `uses_memory` 같은 관계.
32
+
33
+ 이 graph는 같은 보이는 기록에서 만든 보기용 모델이다. hidden cache나 background index가 아니다.
34
+
35
+ `timeline` 블록은 최근 run event를 최신순으로 담는다. 각 event에는 날짜, source, status, outcome, 선택된 하네스가 들어간다. HTML 리포트는 이 값을 사용해 브라우저에서 파일을 다시 replay하지 않고도 실패, blocked, 성공 검증 흐름을 보여준다.
36
+
15
37
  허용되는 추천은 다음과 같다.
16
38
 
17
39
  - `keep`
@@ -20,4 +42,53 @@
20
42
  - `merge_candidate`
21
43
  - `observe`
22
44
 
23
- 추천은 제안일 뿐이다. reusable harness를 삭제, 병합, 재작성하려면 여전히 명시적인 승인이 필요하다.
45
+ 하네스에는 `candidate_score`가 들어갈 있다. 값은 0부터 100까지의 `total`과 evidence, trouble, context cost, overlap, recommendation priority 같은 factor로 구성된 정렬 보조 신호다. 승인으로 해석하면 안 되며 자동 수정으로 이어져도 안 된다.
46
+
47
+ 각 하네스에는 `lifecycle_state`도 있다.
48
+
49
+ - `active`: 최근에도 쓰여서 일반 관찰을 유지한다.
50
+ - `no_evidence`: run 기록에 나오지 않았다.
51
+ - `dormant_candidate`: 최근에 쓰이지 않았지만, 오래됐다는 이유만으로는 보관 검토 신호일 뿐이다.
52
+ - `cleanup_review`: 정리 검토 근거가 강하지만 여전히 승인이 필요하다.
53
+ - `needs_weave`: 반복 문제로 weave 검토가 필요하다.
54
+ - `merge_review`: 반복 overlap으로 merge 검토가 필요하다.
55
+
56
+ 근거 판단은 보수적으로 한다.
57
+
58
+ - 기록이 없거나 근거가 약함 → `observe`
59
+ - 실패나 blocked가 반복됨 → `weave`
60
+ - 함께 쓰이는 패턴이 반복됨 → `merge_candidate`
61
+ - 미사용, 반복 거절, 대체, 높은 context 비용 같은 강한 근거가 있음 → `frog_candidate`
62
+
63
+ 추천은 제안일 뿐이다. reusable harness 삭제, 병합, 재작성, memory 저장, rule 업데이트는 여전히 명시적인 승인이 필요하다. 생애주기 요약은 다음 행동을 준비할 수 있지만 자동으로 적용하면 안 된다.
64
+
65
+ ## 로컬 HTML 리포트
66
+
67
+ 설치된 repo에는 작은 읽기 전용 helper 두 개가 함께 들어간다. 먼저 보이는 `.tink/` 기록에서 JSON 요약을 만든다.
68
+
69
+ ```bash
70
+ node .tink/tools/generate-harness-lifecycle-summary.mjs
71
+ ```
72
+
73
+ 기본값으로 `.tink/harnesses/index.json`, `.tink/rules/index.json`, `.tink/memory/*.md`, `.tink/runs/*.md`, `.tink/maintenance/weave-queue.json`, `.tink/maintenance/friction.jsonl`을 읽고 `.tink/maintenance/harness-lifecycle.json`을 쓴다.
74
+
75
+ 그 다음 이 요약을 로컬 HTML 리포트로 바꿀 수 있다.
76
+
77
+ ```bash
78
+ node .tink/tools/render-harness-health-report.mjs
79
+ ```
80
+
81
+ 리포트 helper는 `.tink/maintenance/harness-lifecycle.json`을 읽고 `.tink/maintenance/harness-health-report.html`을 쓴다. 테스트할 때는 경로를 직접 줄 수 있다.
82
+
83
+ 리포트에는 정적 graph overview, 최근 run timeline, 하네스별 카드가 들어간다. graph overview는 JSON `graph` 블록의 node/edge 종류를 요약한다. 서버를 시작하거나 파일을 감시하지 않는다.
84
+
85
+ ```bash
86
+ node .tink/tools/generate-harness-lifecycle-summary.mjs repo-root output.json
87
+ node .tink/tools/render-harness-health-report.mjs input.json output.html
88
+ ```
89
+
90
+ 두 helper는 재사용 Tink 상태를 고치지 않는다. 요청한 요약 파일이나 리포트 파일만 쓴다. 하네스 수정, 병합, 보관, 삭제, memory 저장, rule 업데이트는 하지 않는다.
91
+
92
+ `/tink:weave`와 `/tink:frog`는 생성기가 설치되어 있으면 후보를 정렬하기 전에 이 요약을 먼저 준비해야 한다. 요약은 근거 강도에 따라 후보를 보기 좋게 정렬하는 데 쓰지만, 재사용 상태를 바꾸기 전에는 여전히 기존 승인 payload를 보여줘야 한다.
93
+
94
+ 이 기능은 watcher, hidden cache, 새 public `tink index` 명령이 아니다. 기준이 되는 원본은 계속 `.tink/runs/`, `.tink/maintenance/`, `.tink/harnesses/`, `.tink/rules/` 아래의 보이는 파일이다.