tink-harness 1.6.0 → 1.6.1

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.6.0",
4
+ "version": "1.6.1",
5
5
  "author": {
6
6
  "name": "dotori"
7
7
  }
package/CHANGELOG.md CHANGED
@@ -7,6 +7,19 @@ All notable changes to Tink are tracked here.
7
7
  No unreleased changes yet.
8
8
 
9
9
 
10
+ ## [1.6.1] - 2026-06-09
11
+
12
+ ### Fixed
13
+
14
+ - Existing installs from v1.5.x now refresh the generated legacy `.tink/rules/index.json` during `tink-harness update`, so users receive the v1.6.0 graph-rule seed rules through `npx tink-harness@latest update`.
15
+ - User-modified rule graphs with custom rules or rule evidence are still preserved during update.
16
+
17
+ ### Added
18
+
19
+ - Regression coverage for generated legacy rule graph refresh and custom rule graph preservation.
20
+ - Korean PR history draft for the v1.6.1 patch in `docs/pr/2026-06-09-v1.6.1.ko.md`.
21
+
22
+
10
23
  ## [1.6.0] - 2026-06-09
11
24
 
12
25
  ### Added
package/README.ko.md CHANGED
@@ -8,7 +8,7 @@ Claude Code와 Codex를 위한 작은 하네스 레이어입니다.
8
8
 
9
9
  Tink는 지금 작업에 맞는 하네스를 고르고, 실행 상태를 보이게 만들고, 실제 사용 중 생긴 실패와 피드백으로 하네스 세트를 개선합니다.
10
10
 
11
- **최신 릴리스:** v1.6.0graph-rule seed routing으로 반복 작업에서 필요한 관련 파일, 하네스, 검증 체크를 고릅니다.
11
+ **최신 패키지:** v1.6.1기존 설치에서 `tink-harness update`를 실행할 generated legacy rule graph도 seed rules로 갱신합니다. 최신 마이너 릴리스 노트: [v1.6.0](https://github.com/dotoricode/tink-harness/releases/tag/v1.6.0).
12
12
 
13
13
  [English](README.md) · **한국어**
14
14
 
@@ -59,6 +59,12 @@ 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.6.1에서 달라진 점
63
+
64
+ 이번 패치는 기존 설치의 update 경로를 고칩니다.
65
+
66
+ - `tink-harness update`가 v1.5.x에서 생성된 기본 `.tink/rules/index.json`을 새 v1.6.x rule graph seed로 갱신합니다.
67
+ - custom rule이나 rule evidence가 들어간 사용자 수정 rule graph는 계속 보존합니다.
62
68
  ## 1.6.0에서 달라진 점
63
69
 
64
70
  이번 릴리스는 Tink의 작은 rule graph를 실제 작업에서 더 쓸모 있게 만듭니다.
package/README.md CHANGED
@@ -24,7 +24,7 @@
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 release:</strong> v1.6.0 - Graph-rule seed routing now helps Tink pick supporting files, harnesses, and verification checks for repeated work.</p>
27
+ <p><strong>Latest package:</strong> v1.6.1 - Existing installs now refresh generated legacy rule graphs during <code>tink-harness update</code>. Latest minor release notes: <a href="https://github.com/dotoricode/tink-harness/releases/tag/v1.6.0">v1.6.0</a>.</p>
28
28
 
29
29
  **English** · [한국어](README.ko.md)
30
30
 
@@ -124,6 +124,13 @@ 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.6.1
128
+
129
+ This patch fixes the update path for existing installs.
130
+
131
+ - `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.
132
+ - User-modified rule graphs are still preserved when they contain custom rules or rule evidence.
133
+
127
134
  ## What's new in 1.6.0
128
135
 
129
136
  This release makes Tink's small rule graph more useful during real work.
package/VERSIONING.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Versioning
2
2
 
3
- Current version: `1.6.0`
3
+ Current version: `1.6.1`
4
4
 
5
5
  Tink follows semver from `1.0.0` onward.
6
6
 
package/bin/install.js CHANGED
@@ -261,6 +261,39 @@ function isAlwaysUpdatePath(src) {
261
261
  rel.startsWith('templates/tink/maintenance/');
262
262
  }
263
263
 
264
+ function isGeneratedLegacyRuleGraph(src, dest) {
265
+ const rel = path.relative(root, src).replace(/\\/g, '/');
266
+ if (rel !== 'templates/tink/rules/index.json') return false;
267
+ try {
268
+ const rules = JSON.parse(fs.readFileSync(dest, 'utf8'));
269
+ if (rules.node_shape) return false;
270
+ const legacyIds = [
271
+ 'harness:code-change',
272
+ 'harness:bug-fix',
273
+ 'harness:ship',
274
+ 'harness:pre-publish-multi-agent-verify',
275
+ 'check:package-dry-run',
276
+ 'check:readme-cli-match',
277
+ 'guard:release-verification-stop',
278
+ 'guard:forbidden-path-write'
279
+ ];
280
+ const nodes = Array.isArray(rules.nodes) ? rules.nodes : [];
281
+ if (nodes.length !== legacyIds.length) return false;
282
+ const ids = nodes.map((node) => node && node.id);
283
+ if (!legacyIds.every((id) => ids.includes(id))) return false;
284
+ return nodes.every((node) =>
285
+ node &&
286
+ !Object.prototype.hasOwnProperty.call(node, 'reason') &&
287
+ !Object.prototype.hasOwnProperty.call(node, 'risk') &&
288
+ !Object.prototype.hasOwnProperty.call(node, 'checks') &&
289
+ !Object.prototype.hasOwnProperty.call(node, 'include_paths') &&
290
+ !Object.prototype.hasOwnProperty.call(node, 'select_harnesses')
291
+ );
292
+ } catch {
293
+ return false;
294
+ }
295
+ }
296
+
264
297
  function writeFileFromTemplate(src, dest, base) {
265
298
  const exists = fs.existsSync(dest);
266
299
  if (exists && !force) {
@@ -270,12 +303,12 @@ function writeFileFromTemplate(src, dest, base) {
270
303
  if (Buffer.compare(srcContent, destContent) === 0) {
271
304
  return;
272
305
  }
273
- if (!isAlwaysUpdatePath(src)) {
306
+ if (!isAlwaysUpdatePath(src) && !isGeneratedLegacyRuleGraph(src, dest)) {
274
307
  log.message(`keep user-modified ${displayPath(base, dest)}`);
275
308
  recordOperation('preserved', base, dest);
276
309
  return;
277
310
  }
278
- // commands/skills/maintenance: always update to new version
311
+ // commands/skills/maintenance and generated legacy rule graph: update to new version
279
312
  } else {
280
313
  log.message(`skip existing ${displayPath(base, dest)}`);
281
314
  return;
@@ -0,0 +1,27 @@
1
+ # v1.6.1 패치 이력 초안
2
+
3
+ ## 문제
4
+
5
+ - v1.6.0 publish 후 published `@latest` smoke에서 `1.5.0 -> latest update` 경로를 확인했음.
6
+ - Claude Code command와 Codex skill은 새 안내로 갱신됐지만, `.tink/rules/index.json`은 기존 파일이 user-modified로 판단되어 보존됐음.
7
+ - 그 결과 기존 사용자는 `npx tink-harness@latest update`를 실행해도 v1.6.0의 graph-rule seed rules를 받지 못할 수 있었음.
8
+
9
+ ## 해결
10
+
11
+ - installer가 v1.5.x 기본 생성 rule graph를 안전하게 식별하도록 했음.
12
+ - 기본 생성본으로 보이는 `.tink/rules/index.json`은 update 때 새 템플릿으로 갱신함.
13
+ - custom rule이나 rule evidence가 들어간 파일은 계속 사용자 수정본으로 보고 보존함.
14
+ - README, README.ko.md, CHANGELOG, VERSIONING, 테스트 버전을 `1.6.1`로 맞췄음.
15
+
16
+ ## 검증
17
+
18
+ - update 회귀 테스트에 generated legacy rule graph refresh 케이스를 추가했음.
19
+ - custom rule graph preservation 테스트를 추가했음.
20
+ - `npm test`, `git diff --check`, `npm pack --dry-run --json`으로 확인할 예정임.
21
+ - publish 후 `1.5.0 install -> latest update` smoke를 다시 실행해 `.tink/rules/index.json` 갱신 여부를 확인할 예정임.
22
+
23
+ ## 참고
24
+
25
+ - patch 릴리스이므로 GitHub Release는 새로 만들지 않음.
26
+ - 최신 마이너 릴리스 노트는 v1.6.0에 유지함.
27
+ - public `tink index`, watcher, generated cache, database, 외부 서비스는 추가하지 않음.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tink-harness",
3
- "version": "1.6.0",
3
+ "version": "1.6.1",
4
4
  "description": "Self-growing harnesses for Claude Code and Codex.",
5
5
  "license": "MIT",
6
6
  "type": "module",