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.
- package/.claude-plugin/plugin.json +1 -1
- package/CHANGELOG.md +13 -0
- package/README.ko.md +7 -1
- package/README.md +8 -1
- package/VERSIONING.md +1 -1
- package/bin/install.js +35 -2
- package/docs/pr/2026-06-09-v1.6.1.ko.md +27 -0
- package/package.json +1 -1
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
|
-
**최신
|
|
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
|
|
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
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:
|
|
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, 외부 서비스는 추가하지 않음.
|