tink-harness 1.9.21 → 1.10.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.
@@ -42,7 +42,7 @@ Map prompt content to `AskUserQuestion` fields:
42
42
  - `description`: explanatory text for the option
43
43
 
44
44
  Label quality rules:
45
- - Use short, common, readable labels only. Good Korean labels are `승인`, `조정`, `취소`, `요구사항 입력`, `기본 하네스만 사용`, `새 하네스 초안 만들기`, `구조 점검`, `내용 점검`, `전체 점검`.
45
+ - Use short, common, readable labels only. Good Korean labels are `승인`, `조정`, `취소`, `요구사항 입력`, `기본 절차만 사용`, `새 하네스 초안 만들기`, `구조 점검`, `내용 점검`, `전체 점검`.
46
46
  - Do not invent compressed Korean labels, transliterated fragments, or unclear summaries such as `콘데의달 지질`.
47
47
  - 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 `전체 점검`.
48
48
  - Before calling `AskUserQuestion`, reread each Korean label. If it looks misspelled, unnatural, or semantically unclear, replace it with a plain fallback label.
@@ -282,11 +282,11 @@ Candidate limits:
282
282
  - Add more only when each extra entry changes the first action, verification, or safety boundary.
283
283
  - Do not load entire directories unless the directory itself is the artifact under review.
284
284
 
285
- Also append a compact run record to `.tink/runs/YYYY-MM-DD-HHMM-<slug>.md` when the task completes, is canceled, is blocked, or is superseded. Do not store secrets, raw logs, full diffs, or one-off private context.
285
+ Also append a compact run record to `.tink/runs/YYYY-MM-DD-HHMM-<slug>.md` when the task completes, is canceled, is blocked, or is superseded. Do not store secrets, raw logs, full diffs, or one-off private context. If a run-only draft harness was used, record its name and its 2-4 domain rules compactly in the run record - `/tink:weave` treats drafts that repeat across runs as promotion candidates.
286
286
 
287
287
  When appending a run record, also append a signal to `.tink/maintenance/weave-queue.json` if it exists:
288
288
  ```json
289
- { "id": "signal-<run_id>", "harness": "<primary_selected_harness>", "run": ".tink/runs/<slug>.md", "signal": "<outcome>", "auto": true, "timestamp": "<ISO>" }
289
+ { "id": "signal-<run_id>", "harness": "<primary_selected_harness or base-run>", "run": ".tink/runs/<slug>.md", "signal": "<outcome>", "auto": true, "timestamp": "<ISO>" }
290
290
  ```
291
291
  Use `check_failed` as the signal when any check in `checks.md` did not pass; otherwise use the run outcome (`completed`, `blocked`, `canceled`, or `superseded`). Do not create `.tink/maintenance/weave-queue.json` if it does not exist — only append when it is already present.
292
292
 
@@ -376,10 +376,10 @@ Lane 1 behavior:
376
376
  - If the work changed files, append a compact run record on completion; pure Q&A needs no record.
377
377
  - If the task turns out bigger mid-work, stop, say so in one line, and re-enter triage as Lane 2 or 3 with what was learned.
378
378
 
379
- **Lane 2 — light harness.** Small but multi-step work: one obvious harness fits, roughly 2-3 files, no architecture or contract decisions, no ambiguity worth an interview.
379
+ **Lane 2 — light run.** Small but multi-step work: roughly 2-3 files, no architecture or contract decisions, no ambiguity worth an interview. At most one obvious specialized harness fits - often none, and the base run is enough.
380
380
 
381
381
  Lane 2 behavior:
382
- - Announce the chosen harness in one line, create minimal run state (`steps.json` plus a short `plan.md`), and execute the first safe step in the same response.
382
+ - Announce the chosen harness or the base run in one line, create minimal run state (`steps.json` plus a short `plan.md`), and execute the first safe step in the same response.
383
383
  - Do not ask an approval question for soft-gate work; state the working assumption inline (`범위가 다르면 말씀 주세요` / `Tell me if the scope is different`) and keep moving.
384
384
  - Stitch runs silently and surfaces only hard gates.
385
385
 
@@ -408,6 +408,43 @@ Rule: while such a run is active, END every assistant response with a progress b
408
408
  - On run completion, show the final 100% bar once with `✅` instead of `다음`.
409
409
  - Never skip the block because a response feels small; if the response is blocked, the block shows where work stopped.
410
410
 
411
+ **Full progress view.** The compact block above is the every-response footer. At key moments, show the full map instead, so the user can plan how far to go today:
412
+
413
+ - right after the plan is first created or restructured,
414
+ - right after a goal/phase completes,
415
+ - on the first response after resuming a run, and
416
+ - whenever the user asks about progress or the plan.
417
+
418
+ ```text
419
+ 📊 전체 진행 상황
420
+ ✅ Phase 0 nav graph ▓▓▓▓▓▓▓▓▓▓ 100%
421
+ ▶ Phase 1 Section Index ░░░░░░░░░░ 0% ← 지금
422
+ Phase 2 Block Index ░░░░░░░░░░ 0%
423
+ Phase 3 query + aliases ░░░░░░░░░░ 0%
424
+ ──────────────────────────────────────
425
+ 전체 ▓▓▓░░░░░░░ 25% · 4개 중 1개 완료
426
+
427
+ ▶ Phase 1 세부
428
+ ✅ [1/4] build-block-index.mjs 작성
429
+ ▶ [2/4] sections/*.jsonl 생성 ← 지금
430
+ [3/4] validate-index.mjs 기본 구조
431
+ [4/4] line range 검증
432
+ ```
433
+
434
+ - One row per goal/phase with its own 10-cell bar; mark completed rows `✅`, the active row `▶` plus `← 지금`. Below the divider, the same overall bar as the compact block.
435
+ - The detail block lists the active phase's steps with `✅`/`▶`/blank markers - no mini bars; the markers carry the state.
436
+ - Keep alignment tolerant: pad with two or more spaces instead of strict columns, because mixed Korean/English widths break exact tables.
437
+ - The full view replaces the compact block in that response; the next response returns to the compact footer.
438
+
439
+ ## Base run (no harness)
440
+ Generic task-type harnesses (`code-change`, `bug-fix`, `research`, `review`, `docs`) are retired from the default set. Generic work runs as a **base run**: the run state contract alone - `plan.md`, `checks.md`, `steps.json`, `contract.json` - already enforces scope, verification commands, and evidence for ordinary code, bug, research, review, and docs work.
441
+
442
+ - Select a harness only when its specialized procedure changes what would actually happen: visible-thinking overlays (`requirements-interview`, `plan-consensus`, `goal-checkpoint`, `delegation-brief`), risk gates (`ship`, `pre-publish-multi-agent-verify`, `pr-merge`), meta harnesses (`harness-curation`, `harness-synthesis`), `tink-feedback-apply`, or user-created and synthesized domain harnesses.
443
+ - Never force a loose-fit harness just to show a harness name. "No harness" is a valid and common selection.
444
+ - In user-facing output call this `기본 절차` (Korean) or `base run` (English), with one short explanation line such as `기본 절차로 진행합니다 - 별도 하네스 없이 실행 상태 계약(계획·검증·증거)만 사용`.
445
+ - The base run does not weaken anything: contract checks, Stitch, overlay rules, and the progress display still apply unchanged.
446
+ - If a legacy install still has the retired generic harnesses, do not select them; treat the task as a base run and let `/tink:update` or `/tink:frog` clean them up.
447
+
411
448
  ## Procedure
412
449
  This is the Lane 3 full path from Quick triage. Lanes 1 and 2 intentionally skip most of it.
413
450
 
@@ -435,12 +472,19 @@ This is the Lane 3 full path from Quick triage. Lanes 1 and 2 intentionally skip
435
472
  - docs
436
473
  - ship/release
437
474
  - new pattern not covered yet
475
+
476
+ These are task types, not harness names. Generic types (code change, bug fix, research, review, docs) default to the base run; a harness is added only when a specialized one genuinely fits.
438
477
  6. Consider GJC-style visible-thinking overlays as normal Tink harnesses, not as new command surfaces:
439
478
  - If the request is an ambiguous idea, early product concept, or underspecified implementation prompt, prefer `requirements-interview` before planning or coding. This is the default harness when Stitch is expected to trigger for goal ambiguity or missing acceptance criteria.
440
479
  - If the request asks for a plan, architecture decision, large refactor, migration, or broad public contract change, consider `plan-consensus`.
441
480
  - If the work naturally splits into multiple durable milestones, add `goal-checkpoint` and create `.tink/current/goals.json` after approval.
442
481
  - If parallel review, independent verification, or handoff would reduce risk, add `delegation-brief` and create `.tink/current/delegation.md` after approval. This harness prepares briefs only; it never starts tmux, worktrees, workers, or external agents.
443
- 7. Pick the best existing harness set using the context budget policy below. Prefer 1-3 harnesses, but do not use a hard cap when several tiny harnesses add useful checks without crowding context. When the task is ambiguous (Stitch goal-ambiguity is expected to trigger), start with `requirements-interview` alone; add a second harness only after the user clarifies. Do not bundle 2+ harnesses for ambiguous tasks upfront.
482
+
483
+ **Overlay selection is rule-bound, not taste.** After drafting the Goals list for the approval payload, re-check before presenting it:
484
+ - `goal-checkpoint` is REQUIRED (not optional) when ANY of these is true: the Goals list has 2+ goals; 2+ harnesses run sequentially; the plan is expected to need 4+ steps; or the work spans multiple components/directories. Create `goals.json` after approval.
485
+ - `plan-consensus` must be explicitly considered for any from-scratch implementation, reimplementation, migration, or public contract/API design. If skipped, record a one-line reason in the 오버레이 점검 line.
486
+ - The context budget and the "prefer 1-3 harnesses" guidance never justify dropping a REQUIRED overlay: overlays are cheap state files, not extra loaded context. A large task judged "fine with default harnesses" because the synthesis probe found a fit is a selection bug - the probe only answers whether a custom procedure is needed, not whether overlays are needed.
487
+ 7. Pick the smallest effective set using the context budget policy below: the base run plus 0-3 specialized harnesses. When no specialized harness fits, select the base run alone - do not force a generic fit. Do not use a hard cap when several tiny harnesses add useful checks without crowding context. When the task is ambiguous (Stitch goal-ambiguity is expected to trigger), start with `requirements-interview` alone; add a second harness only after the user clarifies. Do not bundle 2+ harnesses for ambiguous tasks upfront.
444
488
 
445
489
  After selecting, run a quick quality check using the index metadata for each chosen harness:
446
490
  - If fewer than 2 words in `use_when` match the current task description (case-insensitive) → treat as a Stitch harness-mismatch signal
@@ -452,7 +496,7 @@ This is the Lane 3 full path from Quick triage. Lanes 1 and 2 intentionally skip
452
496
  9. Add opt-in guard candidates to `notes.md` only as suggestions. Do not register enforcement hooks unless the user separately approves.
453
497
  10. Run the synthesis probe on the initial harness choice. The probe produces one of three outcomes: strong fit (0-1 yes), generic fit (2-3 yes), or no fit (4-5 yes or no harness matches).
454
498
  11. If the probe finds no fit, load `harness-synthesis` and draft a domain-specific harness for this run instead of forcing a bad fit.
455
- 12. If the probe finds a generic fit (2-3 yes), propose a run-only draft harness or domain rules alongside the built-in harness. Do not save it by default.
499
+ 12. If the probe finds a generic fit (2-3 yes), propose a run-only draft harness or domain rules alongside the base run or selected harness. Do not save it by default.
456
500
  13. If too many tools, skills, agents, or harnesses are available, load `harness-curation` and choose the smallest effective set before loading more context.
457
501
  14. If lightweight signals show a recurring operating habit, use `harness-curation` (its habit calibration section) to make one advisory recommendation without loading a separate body.
458
502
  15. If the user points to research, notes, examples, prior failures, or "what I learned today", synthesize from those inputs. Extract behavior-shaping rules and reusable procedure, not a summary.
@@ -471,17 +515,17 @@ This is the Lane 3 full path from Quick triage. Lanes 1 and 2 intentionally skip
471
515
 
472
516
 
473
517
  ## Synthesis probe
474
- Run this short probe even when a built-in harness seems usable. It prevents broad default harnesses from hiding repeatable domain workflows.
518
+ Run this short probe even when the base run or an existing harness seems sufficient. It prevents broad defaults from hiding repeatable domain workflows.
475
519
 
476
520
  Answer yes/no:
477
521
  1. Is this likely to recur in this repo, product, customer segment, release process, or personal workflow?
478
522
  2. Would a domain-specific rule change the first action, the order of steps, the stop condition, or the verification evidence?
479
- 3. Is the selected built-in harness only a loose or generic fit?
523
+ 3. Is the base run or selected harness only a loose or generic fit for this domain?
480
524
  4. Did the user correction, prior run note, failed check, research source, or named project context expose a reusable rule?
481
525
  5. Would a one-screen draft reduce future context or repeated explanation?
482
526
 
483
527
  Decision:
484
- - 0-1 yes: use the selected built-in harness only. Record why no draft is needed if relevant.
528
+ - 0-1 yes: proceed with the base run or selected harness set as-is. Record why no draft is needed if relevant.
485
529
  - 2-3 yes: propose a run-only draft harness. It applies to this run, is written into `.tink/current/plan.md` or `notes.md`, and is not saved by default.
486
530
  - 4-5 yes: propose a run-only draft now and ask whether it should become a save candidate after the run. Saving still needs the approval payload.
487
531
 
@@ -490,7 +534,7 @@ Run-only draft format:
490
534
  ```text
491
535
  임시 하네스 초안 (이번 작업 전용):
492
536
  - name: <specific-lowercase-name>
493
- - why not just built-in: <one sentence>
537
+ - why base run is not enough: <one sentence>
494
538
  - domain rules: <2-4 bullets that change execution>
495
539
  - checks: <2-4 evidence checks>
496
540
  - save policy: 이번 run에는 적용, 저장은 반복 근거와 별도 승인 후만
@@ -528,8 +572,10 @@ Use concise, selection-oriented wording. The recommendation must include the fir
528
572
 
529
573
  User-facing approval wording:
530
574
  - Do not show internal terms such as `Probe`, `probe`, `합성 프로브`, `generic fit`, `제너릭 fit`, or `Stitch`.
531
- - Translate the synthesis probe result as `맞춤 절차 판단`.
532
- - Translate `generic fit` as `기본 하네스는 큰 틀만 맞음` or `기본 하네스만으로는 부족함`.
575
+ - Translate the synthesis probe result as `맞춤 절차 판단`. Its "sufficient" verdict must read `별도 맞춤 절차는 불필요` - never `기본 하네스로 충분`, which wrongly implies the whole harness SET was judged sufficient. The probe only decides whether a custom synthesized procedure is needed.
576
+ - Translate `generic fit` as `기본 절차는 큰 틀만 맞음` or `기본 절차만으로는 부족함`.
577
+ - When no harness is selected, show `**🛠️ 선택한 하네스**: 기본 절차(하네스 없음)` with one short phrase about what the base run provides. Do not invent a harness name to fill the line.
578
+ - Always include an `**오버레이 점검:**` line in the approval payload: one verdict per overlay harness that the rule-bound check makes relevant, e.g. `goal-checkpoint 선택(목표 3개·순차 2단계) · plan-consensus 제외(문서 보완은 기존 계약 범위)`. An omitted overlay without a reason is a selection bug.
533
579
  - Translate visible Stitch output as `확인할 점`, not `Stitch 점검`.
534
580
  - Explain what each selected harness does in one short phrase before asking for approval.
535
581
  - Show a short `하네스 선택 과정` when more than one harness or a run-only draft is selected: candidate considered, selected harnesses, and why each was chosen.
@@ -537,7 +583,7 @@ User-facing approval wording:
537
583
 
538
584
  Approval option counts (always exactly one applies):
539
585
  - Default (no Stitch, no run-only draft): 4 options — 승인 / 조정 / 새 하네스 초안 만들기 / 취소
540
- - Run-only draft offered: 4 options — 승인 / 조정 / 기본 하네스만 사용 / 취소
586
+ - Run-only draft offered: 4 options — 승인 / 조정 / 기본 절차만 사용 / 취소
541
587
  - Stitch soft gate: 4 options — 승인 / 요구사항 입력 / 이대로 진행 / 취소
542
588
  - Stitch hard gate (or Save Gate): 3 options — 승인 / 요구사항 입력 / 취소. Never offer `이대로 진행` / `Continue as-is`.
543
589
 
@@ -547,16 +593,17 @@ Approval option counts (always exactly one applies):
547
593
  **🎯 Goals**
548
594
  - <goal>
549
595
 
550
- **🛠️ 선택한 하네스**: `code-change + review`
551
- - `code-change`: 범위가 정해진 코드 변경을 작게 수행하는 하네스
552
- - `review`: 변경 위험과 누락을 확인하는 점검 하네스
596
+ **🛠️ 선택한 하네스**: 기본 절차 + `goal-checkpoint`
597
+ - 기본 절차: 별도 하네스 없이 실행 상태 계약(계획·검증·증거)으로 진행
598
+ - `goal-checkpoint`: 작업을 목표 단위로 나눠 완료 증거를 남기는 하네스
553
599
 
554
600
  **하네스 선택 과정**
555
- - 후보: `code-change`, `review`, `harness-synthesis`
556
- - 선택: `code-change + review`
557
- - 이유: 변경 범위가 좁고, 회귀 확인이 필요합니다. 별도 맞춤 초안은 필요하지 않습니다.
601
+ - 후보: 기본 절차, `goal-checkpoint`, `harness-synthesis`
602
+ - 선택: 기본 절차 + `goal-checkpoint`
603
+ - 이유: 일반 코드 변경이라 특화 하네스는 불필요하고, 목표가 2개 이상이라 goal-checkpoint가 필수입니다.
558
604
 
559
- - **맞춤 절차 판단:** 기본 하네스로 충분
605
+ - **오버레이 점검:** <예: goal-checkpoint 선택(목표 2개) · plan-consensus 제외(범위 좁음)>
606
+ - **맞춤 절차 판단:** 별도 맞춤 절차는 불필요
560
607
  - **첫 실행:** 관련 파일을 먼저 읽고 검증 명령 후보를 확정합니다.
561
608
 
562
609
  ? 진행할까요?
@@ -574,20 +621,22 @@ If a run-only draft or new harness is useful:
574
621
  **🎯 Goals**
575
622
  - <goal>
576
623
 
577
- **🛠️ 선택한 하네스**: `<built-in> + 임시 초안`
578
- - `<built-in>`: 기본 작업 흐름을 잡는 하네스
624
+ **🛠️ 선택한 하네스**: 기본 절차 + 임시 초안
625
+ - 기본 절차: 실행 상태 계약으로 작업 틀을 잡음
579
626
  - `customer-interview-synthesis`: 이번 작업의 인터뷰 분석 순서를 보강하는 임시 초안
580
627
 
581
628
  **하네스 선택 과정**
582
- - 후보: `<built-in>`, `harness-synthesis`, `customer-interview-synthesis`
583
- - 선택: `<built-in> + customer-interview-synthesis`
584
- - 이유: 기본 하네스는 큰 틀만 맞고, 인터뷰 원문 근거와 pain point 구분은 별도 절차가 필요합니다.
629
+ - 후보: 기본 절차, `harness-synthesis`, `customer-interview-synthesis`
630
+ - 선택: 기본 절차 + `customer-interview-synthesis`
631
+ - 이유: 기본 절차는 큰 틀만 맞고, 인터뷰 원문 근거와 pain point 구분은 별도 절차가 필요합니다.
632
+
633
+ **오버레이 점검:** <상동 형식>
585
634
 
586
- **맞춤 절차 판단:** 기본 하네스만으로는 부족함
635
+ **맞춤 절차 판단:** 기본 절차만으로는 부족함
587
636
 
588
637
  **임시 하네스 초안** (이번 작업 전용):
589
638
  - **name:** `customer-interview-synthesis`
590
- - **why not just built-in:** 일반 research보다 인터뷰 단위, 원문 근거, pain point 반복성이 중요합니다.
639
+ - **why base run is not enough:** 기본 절차보다 인터뷰 단위, 원문 근거, pain point 반복성이 중요합니다.
591
640
  - **domain rules:**
592
641
  - 인터뷰별 원문 근거를 먼저 분리
593
642
  - 반복 pain point와 단발 의견을 구분
@@ -596,9 +645,9 @@ If a run-only draft or new harness is useful:
596
645
  - **save policy:** 이번 run에는 적용, 저장은 반복 근거와 별도 승인 후만
597
646
 
598
647
  ? 진행할까요?
599
- ❯ 1. 승인 (권장) — 기본 하네스 + 임시 초안으로 `.tink/current/` 생성
648
+ ❯ 1. 승인 (권장) — 기본 절차 + 임시 초안으로 `.tink/current/` 생성
600
649
  2. 조정
601
- 3. 기본 하네스만 사용
650
+ 3. 기본 절차만 사용
602
651
  4. 취소
603
652
  ```
604
653
 
@@ -623,7 +672,8 @@ If Stitch triggers as a soft gate, merge it into the approval format. The user-f
623
672
  - 선택: `<harness>`
624
673
  - 이유: <why selected>
625
674
 
626
- - **맞춤 절차 판단:** <기본 하네스로 충분 | 기본 하네스만으로는 부족함 | 새 맞춤 절차 필요>
675
+ - **오버레이 점검:** <overlay별 선택/제외와 이유>
676
+ - **맞춤 절차 판단:** <별도 맞춤 절차는 불필요 | 기본 절차만으로는 부족함 | 새 맞춤 절차 필요>
627
677
  - **이유:** ...
628
678
  - **첫 실행:** ...
629
679
 
@@ -50,17 +50,25 @@ Use Korean field values when `.tink/config.json` language is `ko` or `auto` with
50
50
  - weak: static index, git-only evidence, stale current notes, or model judgment
51
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
52
  Sort lifecycle-backed candidates first by evidence strength, then by recommendation: `frog_candidate`, `merge_candidate`, `weave`, `observe`, `keep`.
53
+ 4b. When invoked without a specific target, the health summary's judgment IS the default agenda - do not wait for the user to name harnesses:
54
+ - every harness whose lifecycle recommendation is `frog_candidate`, `merge_candidate`, or `weave` appears in the proposal with its evidence grade and reason;
55
+ - harnesses judged `keep` or `observe` are compressed into one line (`그 외 N개: 유지/관찰`);
56
+ - the same applies to overlap findings (겹침 점검): harnesses flagged as overlapping each other are proposed as one merge/retire group, not listed separately.
57
+ 4c. Check for retired generic built-ins. `code-change`, `bug-fix`, `research`, `review`, and `docs` were retired from the default set - generic work now runs on the base run without a harness. If any of them remain in `.tink/harnesses/`:
58
+ - unmodified leftovers: recommend `npx tink-harness@latest update`, which removes them automatically; offer direct removal only as the fallback when update is not possible;
59
+ - user-modified leftovers (preserved by update): propose either narrowing them into a clearly-named user harness (specific `use_when`, `kind: "synthesized"`) or deleting them, with the user's modifications quoted as evidence.
53
60
  5. Identify candidates:
54
61
  - never used with strong evidence
55
62
  - not used recently with strong evidence
56
63
  - overlaps strongly with another harness
57
- - too broad to guide behavior
64
+ - too broad to guide behavior (a generic-purpose harness is a retirement candidate by default policy: the default set is specialized-only)
58
65
  - repeatedly ignored during `/tink:cast`
59
66
  6. For each candidate, show evidence grade and recommendation:
60
67
  - keep
61
68
  - merge into another harness
62
69
  - delete
63
70
  - rewrite via `/tink:weave`
71
+ 6a. If `.tink/memory/candidate/` exists, also review stale draft entries: a candidate with no supporting run, ledger, or friction evidence after 30+ days, or one superseded by an approved memory or harness change, should be proposed for a move to `.tink/memory/rejected/` with a one-line reason. Promotion of live candidates belongs to `/tink:weave`; frog only clears the stale ones. Apply the same approval rules as other operations.
64
72
  6b. If `.tink/rules/index.json` exists, also inspect rule quality:
65
73
  - keep: concrete `when`, `reason`, and useful `checks` or `include_paths`
66
74
  - rewrite: too broad, unclear reason, or missing verification
@@ -1,104 +1,104 @@
1
- ---
2
- description: Inspect available Tink harnesses and recent usage signals.
3
- ---
4
-
5
- # /tink:list
6
-
7
- List available Tink harnesses without loading every harness body.
8
-
9
- ## Procedure
10
- 1. Read `.tink/harnesses/index.json`.
11
- 2. Read only compact usage metadata from `.tink/runs/` (frontmatter `selected_harnesses` / `actually_loaded_harnesses` + dates), `.tink/maintenance/ledger.jsonl`, and `.tink/maintenance/weave-queue.json`. Do not load raw logs.
12
- 3. Treat `.tink/current/` as weak evidence unless it is clearly from the same active conversation. If context is uncertain, label it `stale current candidate`, not proof of usage.
13
- 4. Classify every harness into exactly one of three categories:
14
- - **working** — directly performs tasks (e.g. `code-change`, `bug-fix`, `research`, `review`, `docs`, `ship`).
15
- - **meta** — manages other harnesses or Tink itself. Treat these names as meta regardless of `kind`: `harness-synthesis`, `harness-curation`, `tink-feedback-apply`.
16
- - **custom (this repo)** — `kind: synthesized` in `index.json` (created in this repo, not part of the default set). If a synthesized harness also matches a meta name, prefer meta.
17
- 5. Compute the signal per harness:
18
- - 🟢 **active** — appears in any `.tink/runs/*.md` frontmatter or `.tink/maintenance/ledger.jsonl` entry.
19
- - ⚪ **unknown** — no run/ledger/memory evidence. Do not call it `quiet` or `candidate for purge` from the static index alone. Do not infer non-use from missing evidence.
20
- 6. Show all three categories every time, even when one is empty. For an empty category, render `_(아직 없음)_` (or the English equivalent if the project language is `en`) instead of an item list.
21
- 7. Do not output the `evidence` field. Usage is now compressed into `signal`.
22
-
23
- ## Output format
24
-
25
- Always start with a header block that defines the fields and categories. Render each harness as a multi-line block — one field per line, never collapsed onto one line. Close with an assessment and command suggestions.
26
-
27
- Use this exact skeleton (translate field labels and descriptions to the language in `.tink/config.json`):
28
-
29
- ````markdown
30
- ### 🧶 Tink 하네스 목록
31
-
32
- > **필드 설명**
33
- > - **purpose** — 이 하네스가 다루는 작업
34
- > - **context** — Claude 컨텍스트 점유량
35
- > · `tiny` 아주 짧음 · `small` 보통 체크리스트 · `large` 별도 승인 후 읽는 큰 하네스
36
- > - **last used** — 가장 최근 실행 날짜 (없으면 `미사용`)
37
- > - **signal** — 🟢 `active` 사용 기록 있음 · ⚪ `unknown` 아직 사용 기록 없음
38
- >
39
- > **카테고리 설명**
40
- > - **작업 하네스** — 실제 작업을 수행 (코드 변경·리뷰·문서 등)
41
- > - **메타 하네스** — 다른 하네스나 Tink 자체를 관리 (선택·합성·피드백 반영)
42
- > - **이 저장소 전용** — 이 프로젝트에서 직접 만들어 저장된 하네스
43
-
44
- ---
45
-
46
- #### 🛠️ 작업 하네스
47
-
48
- ##### `<name>`
49
- - **purpose**: <one short sentence>
50
- - **context**: <tiny | small | large>
51
- - **last used**: <YYYY-MM-DD | 미사용>
52
- - **signal**: 🟢 active | ⚪ unknown
53
-
54
- #### 🧭 메타 하네스
55
-
56
- ##### `<name>`
57
- - **purpose**: …
58
- - **context**: …
59
- - **last used**: …
60
- - **signal**: …
61
-
62
- (또는 비어 있으면)
63
- _(아직 없음)_
64
-
65
- #### 🔧 이 저장소 전용
66
-
67
- ##### `<name>`
68
- - **purpose**: …
69
- - **context**: …
70
- - **last used**: …
71
- - **signal**: …
72
-
73
- (또는 비어 있으면)
74
- _(아직 없음)_
75
-
76
- ---
77
-
78
- ### 📊 평가
79
- - **가장 활발**: …
80
- - **한 번도 안 쓴 하네스**: …
81
- - **균형/주의점**: 한두 문장 평가.
82
-
83
- ### 💡 다음에 쓸 수 있는 명령
84
- - `/tink:cast <작업 설명>` — 적절한 하네스를 골라 작업 시작
85
- - `/tink:weave` — 자주 쓰는 하네스에 누적된 개선 사항 반영 (해당될 때만)
86
- - `/tink:frog` — 오래 사용 안 된 하네스 정리 후보 검토 (실제 삭제는 별도 승인)
87
- - `/tink:setup` — 언어·범위·훅 정책 등 Tink 설정 점검
88
- ````
89
-
90
- ## Assessment & command-suggestion rules
91
- - The 평가 section must mention at least: the most-used harness, every harness with an `unknown` signal, and any obvious imbalance (e.g. meta harnesses all untouched).
92
- - Always include `/tink:cast` and `/tink:setup` as default next steps.
93
- - Only suggest `/tink:weave` when at least one active harness has user-correction evidence, repeated runs of the same category, or items queued in `.tink/maintenance/weave-queue.json`.
94
- - Only suggest `/tink:frog` when at least one harness has been `unknown` for the entire visible history AND there is no plausible upcoming use. Frame it as "정리 후보 검토", not "삭제".
95
-
96
- ## Output style
97
- Use bullets, not tables. One field per line per harness. Never collapse a harness into a single line.
98
-
99
- ## Do not
100
- - Do not read every harness body by default.
101
- - Do not infer non-use from missing evidence.
102
- - Do not remove anything. Use `/tink:frog` for removal candidates.
103
- - Do not output the `evidence` field.
104
- - Do not hide a category because it has zero items — render `_(아직 없음)_` instead.
1
+ ---
2
+ description: Inspect available Tink harnesses and recent usage signals.
3
+ ---
4
+
5
+ # /tink:list
6
+
7
+ List available Tink harnesses without loading every harness body.
8
+
9
+ ## Procedure
10
+ 1. Read `.tink/harnesses/index.json`.
11
+ 2. Read only compact usage metadata from `.tink/runs/` (frontmatter `selected_harnesses` / `actually_loaded_harnesses` + dates), `.tink/maintenance/ledger.jsonl`, and `.tink/maintenance/weave-queue.json`. Do not load raw logs.
12
+ 3. Treat `.tink/current/` as weak evidence unless it is clearly from the same active conversation. If context is uncertain, label it `stale current candidate`, not proof of usage.
13
+ 4. Classify every harness into exactly one of three categories:
14
+ - **working** — directly performs or gates tasks (e.g. `ship`, `pr-merge`, `requirements-interview`, `plan-consensus`, `goal-checkpoint`, `delegation-brief`). Generic work (code change, research, review, docs) runs on the base run without a harness, so it does not appear here.
15
+ - **meta** — manages other harnesses or Tink itself. Treat these names as meta regardless of `kind`: `harness-synthesis`, `harness-curation`, `tink-feedback-apply`.
16
+ - **custom (this repo)** — `kind: synthesized` in `index.json` (created in this repo, not part of the default set). If a synthesized harness also matches a meta name, prefer meta.
17
+ 5. Compute the signal per harness:
18
+ - 🟢 **active** — appears in any `.tink/runs/*.md` frontmatter or `.tink/maintenance/ledger.jsonl` entry.
19
+ - ⚪ **unknown** — no run/ledger/memory evidence. Do not call it `quiet` or `candidate for purge` from the static index alone. Do not infer non-use from missing evidence.
20
+ 6. Show all three categories every time, even when one is empty. For an empty category, render `_(아직 없음)_` (or the English equivalent if the project language is `en`) instead of an item list.
21
+ 7. Do not output the `evidence` field. Usage is now compressed into `signal`.
22
+
23
+ ## Output format
24
+
25
+ Always start with a header block that defines the fields and categories. Render each harness as a multi-line block — one field per line, never collapsed onto one line. Close with an assessment and command suggestions.
26
+
27
+ Use this exact skeleton (translate field labels and descriptions to the language in `.tink/config.json`):
28
+
29
+ ````markdown
30
+ ### 🧶 Tink 하네스 목록
31
+
32
+ > **필드 설명**
33
+ > - **purpose** — 이 하네스가 다루는 작업
34
+ > - **context** — Claude 컨텍스트 점유량
35
+ > · `tiny` 아주 짧음 · `small` 보통 체크리스트 · `large` 별도 승인 후 읽는 큰 하네스
36
+ > - **last used** — 가장 최근 실행 날짜 (없으면 `미사용`)
37
+ > - **signal** — 🟢 `active` 사용 기록 있음 · ⚪ `unknown` 아직 사용 기록 없음
38
+ >
39
+ > **카테고리 설명**
40
+ > - **작업 하네스** — 실제 작업을 수행하거나 안전판 역할 (출시·인터뷰·목표 관리 등). 일반 코드 변경·리뷰·문서는 하네스 없이 기본 절차로 진행됩니다.
41
+ > - **메타 하네스** — 다른 하네스나 Tink 자체를 관리 (선택·합성·피드백 반영)
42
+ > - **이 저장소 전용** — 이 프로젝트에서 직접 만들어 저장된 하네스
43
+
44
+ ---
45
+
46
+ #### 🛠️ 작업 하네스
47
+
48
+ ##### `<name>`
49
+ - **purpose**: <one short sentence>
50
+ - **context**: <tiny | small | large>
51
+ - **last used**: <YYYY-MM-DD | 미사용>
52
+ - **signal**: 🟢 active | ⚪ unknown
53
+
54
+ #### 🧭 메타 하네스
55
+
56
+ ##### `<name>`
57
+ - **purpose**: …
58
+ - **context**: …
59
+ - **last used**: …
60
+ - **signal**: …
61
+
62
+ (또는 비어 있으면)
63
+ _(아직 없음)_
64
+
65
+ #### 🔧 이 저장소 전용
66
+
67
+ ##### `<name>`
68
+ - **purpose**: …
69
+ - **context**: …
70
+ - **last used**: …
71
+ - **signal**: …
72
+
73
+ (또는 비어 있으면)
74
+ _(아직 없음)_
75
+
76
+ ---
77
+
78
+ ### 📊 평가
79
+ - **가장 활발**: …
80
+ - **한 번도 안 쓴 하네스**: …
81
+ - **균형/주의점**: 한두 문장 평가.
82
+
83
+ ### 💡 다음에 쓸 수 있는 명령
84
+ - `/tink:cast <작업 설명>` — 적절한 하네스를 골라 작업 시작
85
+ - `/tink:weave` — 자주 쓰는 하네스에 누적된 개선 사항 반영 (해당될 때만)
86
+ - `/tink:frog` — 오래 사용 안 된 하네스 정리 후보 검토 (실제 삭제는 별도 승인)
87
+ - `/tink:setup` — 언어·범위·훅 정책 등 Tink 설정 점검
88
+ ````
89
+
90
+ ## Assessment & command-suggestion rules
91
+ - The 평가 section must mention at least: the most-used harness, every harness with an `unknown` signal, and any obvious imbalance (e.g. meta harnesses all untouched).
92
+ - Always include `/tink:cast` and `/tink:setup` as default next steps.
93
+ - Only suggest `/tink:weave` when at least one active harness has user-correction evidence, repeated runs of the same category, or items queued in `.tink/maintenance/weave-queue.json`.
94
+ - Only suggest `/tink:frog` when at least one harness has been `unknown` for the entire visible history AND there is no plausible upcoming use. Frame it as "정리 후보 검토", not "삭제".
95
+
96
+ ## Output style
97
+ Use bullets, not tables. One field per line per harness. Never collapse a harness into a single line.
98
+
99
+ ## Do not
100
+ - Do not read every harness body by default.
101
+ - Do not infer non-use from missing evidence.
102
+ - Do not remove anything. Use `/tink:frog` for removal candidates.
103
+ - Do not output the `evidence` field.
104
+ - Do not hide a category because it has zero items — render `_(아직 없음)_` instead.
@@ -86,7 +86,7 @@ Use this wording in Korean:
86
86
  Tink는 두 종류의 파일을 씁니다.
87
87
 
88
88
  1. 재사용 하네스 (Reusable Harnesses): `.tink/harnesses/`
89
- 작업 방식 템플릿입니다. 예: bug-fix, research, review.
89
+ 기능 특화 작업 방식 템플릿입니다. 예: ship, goal-checkpoint, plan-consensus.
90
90
  팀이 같이 쓰면 유용하므로 보통 git에 커밋합니다.
91
91
 
92
92
  2. 실행 상태 (Run State): `.tink/current/`, `.tink/runs/`, `.tink/cache/`
@@ -40,6 +40,7 @@ npx tink-harness@latest update
40
40
  The `update` subcommand asks only one question - which agent surface to refresh (Claude Code, Codex, or both). Everything else updates automatically:
41
41
  - **Always overwrites**: commands, skills, maintenance, and runtime tools (`.claude/commands/tink/`, `.claude/skills/tink/`, `.tink/maintenance/`, `.tink/tools/`) — so you get the latest harness runner, report tools, and command behavior automatically.
42
42
  - **Preserves if modified**: harnesses, hooks, memory, and config (`.tink/harnesses/`, `.tink/hooks/`, `.tink/memory/`, `.tink/config.json`) — respects your `weave` customizations and local settings.
43
+ - **Reuses stored choices**: language, install scope, and git policy come from `.tink/config.json`. With `git_policy: "none"` (커밋 안 함) the updater never creates or edits `.gitignore`, and an existing whole-directory `.tink/` ignore line is left as-is.
43
44
 
44
45
  ## Output format (source repo)
45
46
 
@@ -28,7 +28,11 @@ Use Korean field values when `.tink/config.json` language is `ko` or `auto` with
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
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
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.
31
- 2. Identify one or a few active harnesses to improve using real failures and evidence:
31
+ 1b. Scan promotion candidates (임시초안 승격) - weave promotes as well as improves:
32
+ - **Run-only draft harnesses**: read recent `.tink/runs/*.md` for recorded draft names and domain rules. If the same draft (same name, or clearly the same domain rules) appears in 2+ run records, propose promoting it into `.tink/harnesses/<name>.md` plus an `index.json` entry with `kind: "synthesized"`. Score it with the harness synthesis contract (specificity, actionability, verifiability, reuse likelihood, context cost) before proposing.
33
+ - **Candidate memory**: read `.tink/memory/candidate/` when it exists. If 2+ runs, ledger, or friction entries support one candidate, propose moving it to `.tink/memory/approved/` as one compact file, with evidence handles recorded under `.tink/memory/evidence/`. If the user declines, move it to `.tink/memory/rejected/` with a one-line reason so it is not proposed again.
34
+ - Every promotion is a reusable-state write: it always goes through the Save Gate approval payload and is appended to `.tink/maintenance/ledger.jsonl`. Without 2+ independent evidence handles, present the candidate as an observation, not a proposal.
35
+ 2. Identify one or a few active harnesses to improve using real failures and evidence. When invoked without a specific target, the health summary's `weave` recommendations plus the promotion scan above form the default agenda:
32
36
  - repeated mistakes
33
37
  - user corrections
34
38
  - failed checks
@@ -76,16 +80,16 @@ Use Korean field values when `.tink/config.json` language is `ko` or `auto` with
76
80
  ## Approval format
77
81
  ```text
78
82
  Hone target:
79
- - code-change
83
+ - ship
80
84
 
81
85
  Evidence:
82
- - source: `.tink/runs/2026-05-22-code-change.md`
86
+ - source: `.tink/runs/2026-05-22-release-pipeline.md`
83
87
  - classification: repeated
84
88
  - observed failure: verification command was unclear in two runs
85
89
 
86
90
  Approval payload:
87
91
  - operation: weave
88
- - destination files: `.tink/harnesses/code-change.md`, `.tink/harnesses/index.json` if metadata changes, `.tink/rules/index.json` if routing changes
92
+ - destination files: `.tink/harnesses/ship.md`, `.tink/harnesses/index.json` if metadata changes, `.tink/rules/index.json` if routing changes
89
93
  - context-cost delta: neutral or smaller
90
94
  - ledger: append op ID to `.tink/maintenance/ledger.jsonl`
91
95
  - rollback: revert this patch or rerun `/tink:weave` with the previous trigger
@@ -99,6 +103,30 @@ Proposed improvement:
99
103
  3. 취소
100
104
  ```
101
105
 
106
+ Promotion proposal format (run-only draft → saved harness):
107
+
108
+ ```text
109
+ 승격 후보:
110
+ - `customer-interview-synthesis` (임시 초안, 2개 run에서 반복 사용)
111
+
112
+ Evidence:
113
+ - `.tink/runs/2026-06-01-1010-interview-analysis.md`
114
+ - `.tink/runs/2026-06-09-1430-interview-round2.md`
115
+ - classification: repeated
116
+
117
+ Approval payload:
118
+ - operation: harness-create (promotion)
119
+ - destination files: `.tink/harnesses/customer-interview-synthesis.md`, `.tink/harnesses/index.json`
120
+ - synthesis score: specificity 4 · actionability 4 · verifiability 3 · reuse 4 · context cost tiny
121
+ - ledger: append op ID to `.tink/maintenance/ledger.jsonl`
122
+ - rollback: delete the file and index entry, or rerun `/tink:frog`
123
+
124
+ ? 진행할까요?
125
+ ❯ 1. 승인 — 하네스로 승격 저장
126
+ 2. 조정
127
+ 3. 거절 — 다시 제안하지 않도록 기록
128
+ ```
129
+
102
130
  ## Do not
103
131
  - Do not rewrite a harness from scratch unless the user asks.
104
132
  - Do not add broad principles that do not change behavior.
@@ -56,20 +56,20 @@ Codex `$tink:cast` must show a visible approval step for every non-trivial run.
56
56
 
57
57
  When multiple harnesses or a run-only draft are selected, briefly explain each harness and include a short section labeled `하네스 선택 과정`: candidates considered, selected harnesses, and the reason each earns its place. Use natural Korean scope wording such as `완료 기준을 먼저 나누겠습니다` or `이번 점검은 두 범위로 보겠습니다`; avoid awkward phrasing like `"더 잘 동작하기"의 기준이 두 갈래입니다`.
58
58
 
59
- Default Korean options are `승인`, `조정`, `취소`. If a run-only draft is proposed, use `승인`, `조정`, `기본 하네스만 사용`, `취소`. If a high-impact safety or quality branch is visible, use `승인`, `요구사항 입력`, `이대로 진행`, `취소`. For hard gates or reusable-state saves, use only `승인`, `요구사항 입력`, `취소`.
59
+ Default Korean options are `승인`, `조정`, `취소`. If a run-only draft is proposed, use `승인`, `조정`, `기본 절차만 사용`, `취소`. If a high-impact safety or quality branch is visible, use `승인`, `요구사항 입력`, `이대로 진행`, `취소`. For hard gates or reusable-state saves, use only `승인`, `요구사항 입력`, `취소`.
60
60
 
61
- Option label quality rules: use short, common, readable labels only. Good Korean labels include `승인`, `조정`, `취소`, `요구사항 입력`, `기본 하네스만 사용`, `새 하네스 초안 만들기`, `구조 점검`, `내용 점검`, and `전체 점검`. Do not invent compressed Korean labels, transliterated fragments, or unclear summaries such as `콘데의달 지질`. 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 `전체 점검`. Before calling `request_user_input`, reread each Korean label; if it looks misspelled, unnatural, or semantically unclear, replace it with a plain fallback label.
61
+ Option label quality rules: use short, common, readable labels only. Good Korean labels include `승인`, `조정`, `취소`, `요구사항 입력`, `기본 절차만 사용`, `새 하네스 초안 만들기`, `구조 점검`, `내용 점검`, and `전체 점검`. Do not invent compressed Korean labels, transliterated fragments, or unclear summaries such as `콘데의달 지질`. 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 `전체 점검`. Before calling `request_user_input`, reread each Korean label; if it looks misspelled, unnatural, or semantically unclear, replace it with a plain fallback label.
62
62
 
63
- When `request_user_input` is unavailable, write the same approval request as a normal assistant message and wait for the user's answer. Do not create run state, load harness bodies, edit files, run commands, or continue the task before the answer. A user's `$tink:cast` invocation means "prepare and ask for approval", not "start immediately". Exception - quick triage Lane 1: when the request is clearly simple and safe (a question, a read-only check, or one obvious localized edit with no hard-gate signals), start immediately with a one-line marker instead of asking; full preparation applies to non-trivial tasks. When an active plan has 3 or more steps, end every response with the Tink progress block (10-cell bar, current step, remaining steps).
63
+ When `request_user_input` is unavailable, write the same approval request as a normal assistant message and wait for the user's answer. Do not create run state, load harness bodies, edit files, run commands, or continue the task before the answer. A user's `$tink:cast` invocation means "prepare and ask for approval", not "start immediately". Exception - quick triage Lane 1: when the request is clearly simple and safe (a question, a read-only check, or one obvious localized edit with no hard-gate signals), start immediately with a one-line marker instead of asking; full preparation applies to non-trivial tasks. Overlay selection is rule-bound: goal-checkpoint is REQUIRED when the run has 2+ goals, 2+ sequential harnesses, 4+ expected steps, or spans multiple components; plan-consensus must be explicitly considered (with a recorded reason if skipped) for from-scratch implementations, reimplementations, migrations, or public contract design. The synthesis-probe verdict only covers custom procedures and must never be presented as the whole harness set being sufficient. When an active plan has 3 or more steps, end every response with the Tink progress block (10-cell bar, current step, remaining steps); right after creating or restructuring a plan, completing a goal/phase, or resuming a run, show the full progress map instead (one bar per phase with the active row marked, an overall bar, and the active phase's steps).
64
64
 
65
- Use this compact approval request shape. Keep it short; do not expose internal terms such as Stitch, Probe, synthesis probe, generic fit, or hard gate in user-facing text. Translate them into plain wording such as `확인할 점`, `맞춤 절차 판단`, `기본 하네스로 충분`, or `기본 하네스만으로는 부족함`.
65
+ Use this compact approval request shape. Keep it short; do not expose internal terms such as Stitch, Probe, synthesis probe, generic fit, or hard gate in user-facing text. Translate them into plain wording such as `확인할 점`, `맞춤 절차 판단`, `별도 맞춤 절차는 불필요`, or `기본 절차만으로는 부족함`. Never use `기본 하네스로 충분` - the probe verdict covers custom procedures only, not the whole harness set.
66
66
 
67
67
  Korean:
68
68
 
69
69
  ```md
70
70
  이 작업은 Tink run으로 잡고 진행하겠습니다.
71
71
 
72
- - 선택 하네스: `code-change`
72
+ - 선택 하네스: 기본 절차(하네스 없음)
73
73
  - 범위: Codex 승인 UX 문구와 테스트만 수정
74
74
  - 제외: release, publish, unrelated refactor
75
75
  - 승인 후 첫 단계: Codex core rules에 승인 요청 형식 추가
@@ -84,7 +84,7 @@ English:
84
84
  ```md
85
85
  I will handle this as a Tink run.
86
86
 
87
- - selected harnesses: `code-change`
87
+ - selected harnesses: base run (no harness)
88
88
  - scope: update Codex approval UX text and tests only
89
89
  - out of scope: release, publish, unrelated refactors
90
90
  - first step after approval: add the approval request format to Codex core rules
@@ -98,7 +98,7 @@ If `request_user_input` is available, map this content into the prompt and use o
98
98
 
99
99
  ## Harness Procedure
100
100
 
101
- For `$tink:cast`, classify the task as code change, bug fix, research, review, docs, ship/release, or new pattern. Ask for current-run approval using the Codex Approval Protocol, then load only selected harness bodies after approval. If no built-in harness fits, use `harness-synthesis` to draft a narrow run-only harness instead of forcing a generic fit.
101
+ For `$tink:cast`, classify the task as code change, bug fix, research, review, docs, ship/release, or new pattern. These are task types, not harness names: generic types run as a base run (no harness - the run state contract alone provides scope, verification, and evidence), and a harness is selected only when a specialized one genuinely fits (overlays, ship/release gates, meta harnesses, or user/synthesized domain harnesses). Never force a loose-fit harness just to name one. Ask for current-run approval using the Codex Approval Protocol, then load only selected harness bodies after approval. If a repeatable domain procedure is missing, use `harness-synthesis` to draft a narrow run-only harness instead of forcing a generic fit.
102
102
 
103
103
  Create run state before deeper work:
104
104