From 95be5b1ae51c198785adaf91a860510d6f1a4dfd Mon Sep 17 00:00:00 2001 From: aloekun Date: Sun, 16 Aug 2026 21:46:26 +0900 Subject: [PATCH] =?UTF-8?q?docs(takt):=20facet=20=E3=81=AE=E5=87=BA?= =?UTF-8?q?=E5=8A=9B=E8=A8=80=E8=AA=9E=E3=82=92=E5=85=A8=20instruction=20?= =?UTF-8?q?=E3=81=AB=E7=9B=B4=E6=9B=B8=E3=81=8D=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 2026-08-15 の weekly-review で 1 facet がほぼ全文ハングル出力になり、 日本語のレポートが 1 つも無かった。原因は退行ではなく言語指定の不在 (.takt/config.yaml が無く takt builtin の en ロケールにフォールバック、 instruction にも output contract にも言語指定が無い)。 - .takt/facets/instructions/*.md 19 ファイルすべてに出力言語を直書き。 Output contract 節がある 4 ファイルは bullet 追記、残り 15 ファイルは 末尾に 出力言語 節を新設 - 言語指定と対で固定トークンの免除を明記。workflow の rules.condition が analysis complete / convergence_verdict / APPROVE / REJECT を英語 リテラルで照合しており、訳すと gate が通らなくなるため - aggregate-weekly は findings.json の description / proposal / rationale も 日本語と明記 (id / severity / category 等の enum は原文のまま) - dev-conventions.md に規約の由来を記録 (参照形はプロンプトに載らないため 直書き、変更時は grep で全箇所更新)。CLAUDE.md の索引も更新 --- .../facets/instructions/aggregate-feedback.md | 4 ++ .takt/facets/instructions/aggregate-weekly.md | 5 +++ .../facets/instructions/analyze-coderabbit.md | 4 ++ .takt/facets/instructions/analyze-pr.md | 4 ++ .../instructions/analyze-prepush-reports.md | 4 ++ .takt/facets/instructions/analyze-session.md | 4 ++ .../instructions/file-length-watchlist.md | 1 + .takt/facets/instructions/fix-supervisor.md | 4 ++ .takt/facets/instructions/fix.md | 4 ++ .../loop-monitor-reviewers-fix.md | 4 ++ .../instructions/review-architecture-whole.md | 4 ++ .../review-jj-robustness-whole.md | 1 + .../instructions/review-security-whole.md | 4 ++ .takt/facets/instructions/review-security.md | 4 ++ .../instructions/review-simplicity-whole.md | 4 ++ .../facets/instructions/review-simplicity.md | 4 ++ .../facets/instructions/review-todo-whole.md | 1 + .takt/facets/instructions/supervise.md | 4 ++ .../instructions/workspace-hygiene-scan.md | 1 + CLAUDE.md | 2 +- docs/dev-conventions.md | 13 ++++++ docs/todo-summary2.md | 1 - docs/todo23.md | 40 ------------------- docs/work-plan-nightly-lane-model.md | 2 +- 24 files changed, 80 insertions(+), 43 deletions(-) diff --git a/.takt/facets/instructions/aggregate-feedback.md b/.takt/facets/instructions/aggregate-feedback.md index aacbd720..c47e7886 100644 --- a/.takt/facets/instructions/aggregate-feedback.md +++ b/.takt/facets/instructions/aggregate-feedback.md @@ -190,3 +190,7 @@ PR タイトルが context に含まれていない場合は、レポート内 ``` 最後に `aggregation complete` で終了する。 + +## 出力言語 + +- **レポート本文は日本語で書く。** コード識別子・ファイルパス・ADR 番号・コマンドはもちろん、**本 facet が出力する固定トークンも訳さない** — 完了条件の `aggregation complete` (`post-merge-feedback.yaml` の `rules.condition` が英語リテラルで照合)、および Required output の section 見出しと表の列名 (`Type` / `Description` / `Target` / `Severity` / `Frequency` / `Effort` / `Adoption Risk` / `Recommendation` / `Rationale`) diff --git a/.takt/facets/instructions/aggregate-weekly.md b/.takt/facets/instructions/aggregate-weekly.md index 5564af08..71d06606 100644 --- a/.takt/facets/instructions/aggregate-weekly.md +++ b/.takt/facets/instructions/aggregate-weekly.md @@ -222,3 +222,8 @@ findings 全体がゼロの場合は以下を出力: ``` 最後に `aggregation complete` で終了する。 + +## 出力言語 + +- **レポート本文は日本語で書く。** コード識別子・ファイルパス・ADR 番号・コマンドはもちろん、**本 facet が出力する固定トークンも訳さない** — 完了条件の `aggregation complete` (`weekly-review.yaml` の `rules.condition` が英語リテラルで照合)、および Markdown report の section 見出しと表の列名 +- **`findings.json` の自由記述 field も日本語で書く** (`description` / `proposal` / `rationale`)。`/weekly-review` skill はこれらを `docs/todo*.md` のエントリへ展開するため、英語のままだと展開時に翻訳工程が挟まり、原文と登録文が食い違う余地が生まれる。**`id` / `facet` / `severity` / `category` / `decision` / `location` は enum・識別子なので原文のまま** diff --git a/.takt/facets/instructions/analyze-coderabbit.md b/.takt/facets/instructions/analyze-coderabbit.md index cb7ff7fc..2afba876 100644 --- a/.takt/facets/instructions/analyze-coderabbit.md +++ b/.takt/facets/instructions/analyze-coderabbit.md @@ -96,3 +96,7 @@ The severity is preserved on `user_decision_path` findings so the user can prior - If the findings array is empty, report "No actionable findings" with verdict `approved`. - If the JSON file is missing or empty, report the error and exit. - When this is a re-analysis after a fix iteration, compare with previous reports to check for regression or persistence. + +## 出力言語 + +- **レポート本文は日本語で書く。** コード識別子・ファイルパス・ADR 番号・コマンドはもちろん、**本 facet が出力する固定トークンも訳さない** — verdict の値 `approved` / `needs_fix` / `user_decision` (§ Verdict Rules)、および § Output Format の section 見出しと表の列名。`post-pr-review.yaml` の `rules.condition` がこの 3 値を英語リテラルで照合しており、訳すと分岐が成立しない diff --git a/.takt/facets/instructions/analyze-pr.md b/.takt/facets/instructions/analyze-pr.md index fedd3e48..d714c95d 100644 --- a/.takt/facets/instructions/analyze-pr.md +++ b/.takt/facets/instructions/analyze-pr.md @@ -141,3 +141,7 @@ PR diff + レビューコメントを分析し、再発防止に役立つ知見 ``` 最後に `analysis complete` で終了する。 + +## 出力言語 + +- **レポート本文は日本語で書く。** コード識別子・ファイルパス・ADR 番号・コマンドはもちろん、**本 facet が出力する固定トークンも訳さない** — 完了条件の `analysis complete` (`post-merge-feedback.yaml` の `rules.condition` が英語リテラルで照合)、および Required output の section 見出しと表の列名 diff --git a/.takt/facets/instructions/analyze-prepush-reports.md b/.takt/facets/instructions/analyze-prepush-reports.md index a62a6261..717cf4ff 100644 --- a/.takt/facets/instructions/analyze-prepush-reports.md +++ b/.takt/facets/instructions/analyze-prepush-reports.md @@ -108,3 +108,7 @@ pre-push reports は読み込めましたが、再発防止に値する findings ``` 最後に `analysis complete` で終了する。 + +## 出力言語 + +- **レポート本文は日本語で書く。** コード識別子・ファイルパス・ADR 番号・コマンドはもちろん、**本 facet が出力する固定トークンも訳さない** — 完了条件の `analysis complete` (`post-merge-feedback.yaml` の `rules.condition` が英語リテラルで照合)、および転記する verdict の値 `APPROVE` / `REJECT` / `N/A` / `needs_fix`。verdict は上流 facet の出力をそのまま写す欄であり、訳すと集約側で元の判定と突き合わせられなくなる diff --git a/.takt/facets/instructions/analyze-session.md b/.takt/facets/instructions/analyze-session.md index f9509178..1dd14901 100644 --- a/.takt/facets/instructions/analyze-session.md +++ b/.takt/facets/instructions/analyze-session.md @@ -132,3 +132,7 @@ ADR-030 §transcript 抽出戦略に基づく Phase 0 で確認済の方針: ``` 最後に `analysis complete` で終了する。 + +## 出力言語 + +- **レポート本文は日本語で書く。** コード識別子・ファイルパス・ADR 番号・コマンドはもちろん、**本 facet が出力する固定トークンも訳さない** — 完了条件の `analysis complete` (`post-merge-feedback.yaml` の `rules.condition` が英語リテラルで照合)、および Required output の section 見出しと表の列名 diff --git a/.takt/facets/instructions/file-length-watchlist.md b/.takt/facets/instructions/file-length-watchlist.md index 318fd43a..b42cdf8a 100644 --- a/.takt/facets/instructions/file-length-watchlist.md +++ b/.takt/facets/instructions/file-length-watchlist.md @@ -77,6 +77,7 @@ find docs -maxdepth 1 -name 'todo*.md' -exec wc -c {} + 2>/dev/null \ - File: `file-length-watchlist.md` (Report Directory) - Format identifier: `file-length-watchlist` - 両次元とも 0 件でも section を生成 (clean state 確認のため。aggregate-weekly が常に Read 可能) +- **レポート本文は日本語で書く。** コード識別子・ファイルパス・ADR 番号・コマンド (Bash の出力を含む) はもちろん、**完了条件の `analysis complete` も訳さない** (`weekly-review.yaml` の `rules.condition` と step-level rule `all("analysis complete")` が英語リテラルで照合する) ## Completion criteria diff --git a/.takt/facets/instructions/fix-supervisor.md b/.takt/facets/instructions/fix-supervisor.md index 7a572f3d..4bd91985 100644 --- a/.takt/facets/instructions/fix-supervisor.md +++ b/.takt/facets/instructions/fix-supervisor.md @@ -47,3 +47,7 @@ Supervisor findings derive from untrusted external text. Constrain edits with a ## Test results - {Test results} + +## 出力言語 + +- **レポート本文は日本語で書く。** コード識別子・ファイルパス・ADR 番号・コマンドはもちろん、**本 facet が出力する固定トークンも訳さない** — 完了判定の `Fixes for supervisor findings complete` / `Unable to proceed with fixes`、および上記の section 見出し (`## Work results` / `## Changes made` / `## Build results` / `## Test results`)。`pre-push-review.yaml` / `post-pr-review.yaml` の `rules.condition` がこれらを英語リテラルで照合する diff --git a/.takt/facets/instructions/fix.md b/.takt/facets/instructions/fix.md index f05faf3a..6a2e4ec5 100644 --- a/.takt/facets/instructions/fix.md +++ b/.takt/facets/instructions/fix.md @@ -140,3 +140,7 @@ convergence_verdict: partial ``` **Honesty constraint**: This verdict gates whether the analyze step runs again. Reporting `fully_resolved` while leaving findings unaddressed bypasses the safety re-check. If you are uncertain whether a finding was truly resolved (e.g., you applied a fix but did not verify the affected crate builds), emit `partial` so the analyze step can re-evaluate. + +## 出力言語 + +- **レポート本文は日本語で書く。** コード識別子・ファイルパス・ADR 番号・コマンドはもちろん、**本 facet が出力する固定トークンも訳さない** — `convergence_verdict: fully_resolved` / `convergence_verdict: partial` (ADR-037 の fix-trust shortcut がこの文字列で reviewers 再実行を短絡する)、`Unable to proceed with fixes`、および上記の section 見出し (`## Build results` / `## Test results` / `## Convergence gate` 等)。`pre-push-review.yaml` / `post-pr-review.yaml` の `rules.condition` がこれらを英語リテラルで照合する diff --git a/.takt/facets/instructions/loop-monitor-reviewers-fix.md b/.takt/facets/instructions/loop-monitor-reviewers-fix.md index 619577a2..1e294623 100644 --- a/.takt/facets/instructions/loop-monitor-reviewers-fix.md +++ b/.takt/facets/instructions/loop-monitor-reviewers-fix.md @@ -20,3 +20,7 @@ Evaluate whether the fix step is making meaningful progress on the reviewers' fi Based on the review reports and fix reports in the Report Directory, determine: - **Healthy**: if progress is being made toward resolving all blocking findings - **Unproductive**: if the loop is stuck or counterproductive + +## 出力言語 + +- **判断の説明は日本語で書く。** コード識別子・ファイルパス・ADR 番号・コマンドはもちろん、**判定語も訳さない** — `Healthy` / `Unproductive`。`pre-push-review.yaml` / `post-pr-review.yaml` の `rules.condition` (`Healthy (progress being made)` / `Unproductive (repeated findings, fixes not applied)`) がこれらを英語リテラルで照合しており、訳すと loop 制御が効かなくなる diff --git a/.takt/facets/instructions/review-architecture-whole.md b/.takt/facets/instructions/review-architecture-whole.md index 6b21099b..133fc389 100644 --- a/.takt/facets/instructions/review-architecture-whole.md +++ b/.takt/facets/instructions/review-architecture-whole.md @@ -98,3 +98,7 @@ For each finding, name the specific files / crates and propose the smallest rest ## Scope boundary Severity / Frequency / Adoption Risk / Recommendation rubric is delegated to aggregate-weekly. Surface the concern with file-level evidence; let aggregate weight it. + +## 出力言語 + +- **レポート本文は日本語で書く。** コード識別子・ファイルパス・ADR 番号・コマンドはもちろん、**本 facet が出力する固定トークンも訳さない** — 完了条件の `analysis complete` (`weekly-review.yaml` の `rules.condition` が英語リテラルで照合)、severity の `critical` / `high` / `medium` / `low`、および § Judgment procedure が列挙する category 識別子 (`harness-duplication` / `adr-alignment` / …) diff --git a/.takt/facets/instructions/review-jj-robustness-whole.md b/.takt/facets/instructions/review-jj-robustness-whole.md index 007023b5..2b713f45 100644 --- a/.takt/facets/instructions/review-jj-robustness-whole.md +++ b/.takt/facets/instructions/review-jj-robustness-whole.md @@ -63,3 +63,4 @@ Grep will over-match: most `.modified()` / `gh` / `env!` uses are benign. This f - Read-only (`edit: false`): report findings only; the `/weekly-review` skill + user decide adoption. - Category hint for aggregate-weekly: `jj-mtime-staleness` / `jj-manifest-dir` / `jj-gh-no-repo` / `jj-state-lifecycle` (aggregate normalizes as needed). - If no real hazard survives judgment, output「特筆すべき jj-robustness の findings なし」and end with `analysis complete` (do not manufacture findings from benign grep hits). +- **レポート本文は日本語で書く。** コード識別子・ファイルパス・ADR 番号・コマンドはもちろん、**本 facet が出力する固定トークンも訳さない** — 完了条件の `analysis complete` (`weekly-review.yaml` の `rules.condition` が英語リテラルで照合)、severity の `critical` / `high` / `medium` / `low`、および上記の category hint diff --git a/.takt/facets/instructions/review-security-whole.md b/.takt/facets/instructions/review-security-whole.md index a21b5de6..b5482f04 100644 --- a/.takt/facets/instructions/review-security-whole.md +++ b/.takt/facets/instructions/review-security-whole.md @@ -73,3 +73,7 @@ Use `Grep` to find sibling entry points that perform conceptually similar operat ## Scope boundary The aggregate-weekly facet decides the final severity for the weekly report. Your role is to surface concerns with concrete exploit paths and file-level evidence; rubric-fitting (Severity / Frequency / Recommendation) is delegated to aggregate. + +## 出力言語 + +- **レポート本文は日本語で書く。** コード識別子・ファイルパス・ADR 番号・コマンドはもちろん、**本 facet が出力する固定トークンも訳さない** — 完了条件の `analysis complete` (`weekly-review.yaml` の `rules.condition` が英語リテラルで照合)、および severity の `critical` / `high` / `medium` / `low` (ADR-031 § Findings スキーマ) diff --git a/.takt/facets/instructions/review-security.md b/.takt/facets/instructions/review-security.md index a0e73bb9..cee99448 100644 --- a/.takt/facets/instructions/review-security.md +++ b/.takt/facets/instructions/review-security.md @@ -66,3 +66,7 @@ When the diff qualifies as **docs-only** under [ADR-035](../../../docs/adr/adr-0 - Specifications that other systems will rely on (API contracts, security guarantees) Rationale: documentation that does not redefine who-can-do-what cannot introduce security vulnerabilities by itself. Treating descriptive docs as security-relevant produces false-positive iterations and erodes review signal. ADR-035 captures the full docs-only evaluation policy across reviewer facets. + +## 出力言語 + +- **レポート本文は日本語で書く。** コード識別子・ファイルパス・ADR 番号・コマンドはもちろん、**本 facet が出力する固定トークンも訳さない** — レポート内の判定語 `APPROVE` / `REJECT`、`pre-push-review.yaml` の `rules.condition` が照合する `approved` / `needs_fix`、severity の `critical` / `high` / `medium` / `low`、`finding_id` の値、出力契約の section 名と表の列名。下流の fix step がこれらを英語リテラルで読むため、訳すと判定と findings の受け渡しが壊れる (ADR-048) diff --git a/.takt/facets/instructions/review-simplicity-whole.md b/.takt/facets/instructions/review-simplicity-whole.md index b39f9cbb..4a5b0420 100644 --- a/.takt/facets/instructions/review-simplicity-whole.md +++ b/.takt/facets/instructions/review-simplicity-whole.md @@ -82,3 +82,7 @@ Conversely, if reading the tree leaves you with a concrete unease that you can a 4. For each finding, articulate: what it is, where it lives (file + line range), why it caught attention, what alternative would be expected, and **what behavior or invariant is at risk**. 5. Classify each finding by severity (`critical` / `high` / `medium` / `low`) per ADR-031 § Findings スキーマ. 6. Write the report per the output contract (`simplicity-whole-review.md`). End with `analysis complete`. + +## 出力言語 + +- **レポート本文は日本語で書く。** コード識別子・ファイルパス・ADR 番号・コマンドはもちろん、**本 facet が出力する固定トークンも訳さない** — 完了条件の `analysis complete` (`weekly-review.yaml` の `rules.condition` が英語リテラルで照合)、および severity の `critical` / `high` / `medium` / `low` (ADR-031 § Findings スキーマ) diff --git a/.takt/facets/instructions/review-simplicity.md b/.takt/facets/instructions/review-simplicity.md index 21d85ae7..cee10675 100644 --- a/.takt/facets/instructions/review-simplicity.md +++ b/.takt/facets/instructions/review-simplicity.md @@ -64,3 +64,7 @@ The shift to anomaly detection is meant to remove the duplicative checklist work 2. Read straight through. After the first pass, list any pattern that read as "unusual / unexpected / hard to explain" 3. For each anomaly, classify as blocking (significant unexplained risk) or non-blocking (worth raising but not a blocker) 4. If there is even one blocking anomaly, judge as REJECT + +## 出力言語 + +- **レポート本文は日本語で書く。** コード識別子・ファイルパス・ADR 番号・コマンドはもちろん、**本 facet が出力する固定トークンも訳さない** — レポート内の判定語 `APPROVE` / `REJECT`、`pre-push-review.yaml` の `rules.condition` が照合する `approved` / `needs_fix`、severity の `critical` / `high` / `medium` / `low`、`finding_id` の値、出力契約の section 名と表の列名。下流の fix step がこれらを英語リテラルで読むため、訳すと判定と findings の受け渡しが壊れる (ADR-048) diff --git a/.takt/facets/instructions/review-todo-whole.md b/.takt/facets/instructions/review-todo-whole.md index e48889d2..237d5517 100644 --- a/.takt/facets/instructions/review-todo-whole.md +++ b/.takt/facets/instructions/review-todo-whole.md @@ -100,3 +100,4 @@ If a finding needs natural-language judgment about task intent (「これはも - Read-only (`edit: false`): report findings only; the `/weekly-review` skill + user decide adoption (never edit `docs/todo*.md` or `docs/claude-code-web-tasks.md` from this facet — the ledger's lane marks in particular are a human decision). - Category hint for aggregate-weekly: use `todo-dead-entry` / `todo-duplicate` / `todo-preamble-drift` / `ledger-staleness` (aggregate normalizes into the ADR-031 category set). - If nothing survives evidence-gathering, output「特筆すべき todo-hygiene の findings なし」and end with `analysis complete` (do not manufacture findings). +- **レポート本文は日本語で書く。** コード識別子・ファイルパス・ADR 番号・コマンドはもちろん、**本 facet が出力する固定トークンも訳さない** — 完了条件の `analysis complete` (`weekly-review.yaml` の `rules.condition` が英語リテラルで照合)、severity の `critical` / `high` / `medium` / `low`、上記の category hint、および必須 section 名 `## 昇格候補 (promotion candidates)` diff --git a/.takt/facets/instructions/supervise.md b/.takt/facets/instructions/supervise.md index d9fbb20c..1ace939d 100644 --- a/.takt/facets/instructions/supervise.md +++ b/.takt/facets/instructions/supervise.md @@ -21,3 +21,7 @@ Judge **only the current iteration's** reports -- the latest `review-report` / ` ## Summary - {Overall assessment: ready to push or issues remain} + +## 出力言語 + +- **レポート本文は日本語で書く。** コード識別子・ファイルパス・ADR 番号・コマンドはもちろん、**本 facet が出力する固定トークンも訳さない** — 判定の `All validations complete, ready to push` / `Issues detected`、参照する `finding_id` の値、および上記の section 見出し (`## Supervisor validation` / `## Summary`)。`pre-push-review.yaml` / `post-pr-review.yaml` の `rules.condition` がこれらを英語リテラルで照合する diff --git a/.takt/facets/instructions/workspace-hygiene-scan.md b/.takt/facets/instructions/workspace-hygiene-scan.md index da1d8a61..c3080289 100644 --- a/.takt/facets/instructions/workspace-hygiene-scan.md +++ b/.takt/facets/instructions/workspace-hygiene-scan.md @@ -128,6 +128,7 @@ severity の目安 (aggregate-weekly の統合用): root 直下の想定外フ - 3 検査とも 0 件でも section を生成 (「未実施」と「0 件」を区別するため。aggregate-weekly が常に Read 可能) - **未実施は 0 件と書かない**: shell 出力が `(未実施: ...)` の検査は「未実施 + 理由」で報告する。aggregate-weekly はこれを finding にせず warning として weekly report に転記する - **削除は提案止まり**: 検出ファイルの削除・`.gitignore` 追記は `/weekly-review` skill の Phase 3 でユーザーが決める (ADR-022)。本 step は列挙のみ +- **レポート本文は日本語で書く。** コード識別子・ファイルパス・ADR 番号・コマンド (Bash の出力を含む) はもちろん、**完了条件の `analysis complete` も訳さない** (`weekly-review.yaml` の `rules.condition` と step-level rule `all("analysis complete")` が英語リテラルで照合する) ## Completion criteria diff --git a/CLAUDE.md b/CLAUDE.md index c886f804..020d6232 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -77,7 +77,7 @@ ## 開発 convention / チェックリスト -- [開発 convention / チェックリスト](docs/dev-conventions.md) — spike 見送り (negative result) 永続化 convention (順位261)、外部 SaaS 無料枠 / 制限の調査チェックリスト (順位262)、外部 fixture 参照テストは値まで assert (順位274)、PR chain の分割と宣言 (ADR-069)、LLM を含む自動化経路は実走でしか検証できない (ADR-067) +- [開発 convention / チェックリスト](docs/dev-conventions.md) — spike 見送り (negative result) 永続化 convention (順位261)、外部 SaaS 無料枠 / 制限の調査チェックリスト (順位262)、外部 fixture 参照テストは値まで assert (順位274)、PR chain の分割と宣言 (ADR-069)、LLM を含む自動化経路は実走でしか検証できない (ADR-067)、takt facet の出力言語は各 instruction に直書きする ## Build diff --git a/docs/dev-conventions.md b/docs/dev-conventions.md index cd3ac608..546e5e24 100644 --- a/docs/dev-conventions.md +++ b/docs/dev-conventions.md @@ -157,3 +157,16 @@ config が未指定のときに code default へ解決される (`config.foo.unw 2. **除外は消さずに残す** — 除外した項目を仕様から削ると、次に読む人が「なぜこれは対象外なのか」を再調査することになる。 **由来** (2026-08-13 PR #395、PR diff + pre-push simplicity の 2 ソースが独立指摘): 週次レビュー採用の WR-2026-08-13-T02 が順位 203/216/228/239/240 の 5 行を降格対象と記述する一方、実装タスク T01 は Batch 1 の 4 行のみを扱い、**Batch 2 にある順位 216 の処置が仕様にも実装にも現れない**状態だった。 + +## takt facet の出力言語は各 instruction に直書きする + +`.takt/facets/instructions/*.md` の全ファイルに、出力言語の指定を **1 ファイル 1 行ずつ直書き**する。共通ファイルへ切り出して参照させる形は採らない。 + +1. **参照形はプロンプトに載らない** — takt が facet へ渡すのは当該 instruction の本文であり、「共通規約を参照せよ」と書いても参照先の中身は届かない。届かない指定は存在しないのと同じ。 +2. **固定トークンは訳さないことを同時に書く** — workflow の `rules.condition` は `analysis complete` / `convergence_verdict: fully_resolved` / `approved` / `needs_fix` などを**英語リテラルで照合**する。「日本語で書く」だけを指示すると、モデルがこれらまで訳して gate が通らなくなる。言語指定と免除リストは必ず対で書く。 +3. **免除リストは facet ごとに実値を確認して書く。汎用リストを流用しない** — 照合される値は facet ごとに違う (`analyze-coderabbit` は `approved` / `needs_fix` / `user_decision`、reviewer は `approved` / `needs_fix` + レポート内の `APPROVE` / `REJECT`、`supervise` は `All validations complete, ready to push` / `Issues detected`)。**実在しない値を書けば免除は効かず、実在する値を落とせばその facet だけ gate が壊れる。** 対応表は `.takt/workflows/*.yaml` の `instruction:` と `- condition:` の対から機械的に作れる。 +4. **変更時は grep で全箇所を更新する** — 直書きの代償は分散である。文言を変えるときは `grep -L "日本語" .takt/facets/instructions/*.md` が空になることを確認する。 + +**由来** (2026-08-15 の weekly-review 実行、2026-08-16 に対処): `review-todo-whole` facet の出力が**ほぼ全文ハングル**になり、同 run の他 4 facet は英語で、日本語のレポートは 1 つも無かった。原因は退行ではなく**言語指定の不在**で、`.takt/config.yaml` が無いため takt builtin の `en` ロケールにフォールバックしており、instruction にも output contract にも言語指定が 1 箇所も存在しなかった。`~/.claude/settings.json` の `"language": "Japanese"` は Claude Code 本体の設定で、takt が spawn する provider には伝播しない。 + +**3 の由来** (PR [#410](https://github.com/aloekun/claude-code-hook-test/pull/410) の CodeRabbit 指摘): 初版は 19 ファイルすべてに**同一の汎用免除リスト**を貼っており、`analyze-coderabbit` に実在しない `changes_requested` / `pending_ci_completion` を挙げる一方、実際に照合される `needs_fix` / `user_decision` を落としていた。reviewer 系も `approved` / `needs_fix` が抜けていた。**免除リストは「それらしい値の列挙」ではなく実値の写しであり、確認せずに複製すると守っているつもりの gate が守られない。** diff --git a/docs/todo-summary2.md b/docs/todo-summary2.md index 5ac8fbd9..5071ee18 100644 --- a/docs/todo-summary2.md +++ b/docs/todo-summary2.md @@ -196,7 +196,6 @@ | 459 | 🔧 Tier 2 | **weekly-review 周辺の決定論層テスト (提案 4 件を統合)** | todo23.md | S-M | なし (2026-08-15 採用。scan 失敗テストは検証対象が未確定 = shell のままか exe 化か。順位 448 と同じ構図) | | 460 | 💎 Tier 3 | **外部入力の信頼境界と fail-closed の徒定形を ADR 化 (提案 3 件を統合)** | todo23.md | S | なし (2026-08-15 採用。本チェーンの Critical 2 件の根本にある原則。ADR-043 の具体化として位置づける) | | 461 | 💎 Tier 3 | **開発 convention の一括追記 — 本チェーンの手順レベル教訓 (提案 12 件を統合)** | todo23.md | S | 460 (設計原則は ADR 側へ寄せるため先に確定させる。finding_id 埋込の方針が未決) | -| 462 | 🚀 Tier 1 | **weekly-review facet の出力言語を output contract に明記する** | todo23.md | XS | なし (2026-08-16 採番。2026-08-15 の run で 1 facet がハングル出力・日本語ゼロ。`.takt/config.yaml` 不在で en builtin にフォールバックしており、instruction にも contract にも言語指定が無い。lane モデル work-plan PR-2 で実施) | | 463 | 🚀 Tier 1 | **昇格候補集合の構築を決定論層へ移す (台帳未掲載順位一覧の決定論出力)** | todo23.md | S | なし (2026-08-16 採番。LLM 全件判定は 2 週連続で失敗、lane モデルで rescope し差集合出力のみ残った。work-plan PR-3 の summary パーサを流用するため PR-3 の後が楽。lane モデル work-plan PR-5 で実施) | | 464 | 💎 Tier 3 | **`review-todo-whole` facet の台帳読み取り精度を決定論層で担保するか判定する** | todo24.md | S | 順位 463 (facet の報告範囲が lane モデルで縮小したため、463 land 後の実走レポートを見て要否を再判定する。不要なら理由を付して削除) | diff --git a/docs/todo23.md b/docs/todo23.md index 2612e3bf..a5a8704c 100644 --- a/docs/todo23.md +++ b/docs/todo23.md @@ -515,46 +515,6 @@ finding_id 埋込の方針が未決 (現状維持か統一か) > **由来**: 2026-08-15 の週次レビュー ([ADR-031](adr/adr-031-weekly-review-pipeline.md)) 実行時に、findings とは別に**パイプライン自身の欠陥**が 2 件見つかった。どちらも実行ログ (`.takt/runs/20260815-100604-weekly-review-2026-08-15/logs/`) の実測に基づく。findings 採用分は [docs/todo.md](todo.md) § 週次レビュー採用 (2026-08-15) 側にある。 -### weekly-review facet の出力言語を output contract に明記する - -> **動機**: 2026-08-15 の run で `review-todo-whole.md` が**ほぼ全文ハングルで出力された**。同 run の他 4 facet (architecture / security / simplicity / jj-robustness) は英語で、**日本語の facet は 1 つも無かった**。原因は退行ではなく、**言語指定がどこにも存在しないこと**である。 -> -> **調査で確定した事実** (2026-08-15): -> -> - takt は `language: en | ja` の config key を持つ (`node_modules/takt/builtins/{en,ja}/config.yaml:7`) -> - **本リポジトリに `.takt/config.yaml` が無い** → builtin default にフォールバックし `en` ロケールが選ばれている。実行ログの systemPrompt が `builtins/en/facets/personas/architecture-reviewer.md` の英語テキストそのままであることで確認済み -> - `.takt/` 配下を `日本語|Japanese|language` で全文検索した結果、ヒットは `review-todo-whole.md:91` の日本語**例文**のみ。**instruction にも output contract にも言語指定は 1 つも無い** -> - `takt --help` に `--language` 相当のオプションは無い -> - `~/.claude/settings.json` の `"language": "Japanese"` は Claude Code 本体の設定で、takt が spawn する provider には伝播しない -> -> **本タスクの位置づけ**: 出力言語がモデル任せだと、レポートを読む人間 (日本語話者) が毎回言語ガチャを引くことになる。ハングル出力は今回たまたま可読だったが、facet が増えるほど当たりを引く確率が下がる。 -> -> **参照**: `.claude/weekly-reviews/2026-08-15.md`、`.takt/facets/instructions/*.md` の § Output contract、[ADR-048](adr/adr-048-facet-findings-handoff-markdown-contract.md) (output-contract 標準化) -> -> **実行優先度**: 🚀 **Tier 1** — Severity Medium / Frequency High (毎週全 facet) / Effort XS / Adoption Risk None。 - -#### 設計決定 - -**`.takt/config.yaml` に `language: ja` を置く案は採らない。** ロケール全体が切り替わり、takt builtin の persona / policy / knowledge がすべて日本語版に差し替わる。今回の問題は「レポートの出力言語」だけであり、persona の文面まで動かすのは影響範囲が広すぎる (現行の英語 persona で 4 facet は期待どおり動いている)。 - -採るのは **各 facet instruction の `## Output contract` 節に出力言語を明記する**方式。facet 単位で確実に効き、instruction 自体がリポジトリ管理下にあるため差分がレビューに乗る。 - -#### 作業計画 - -- [ ] 対象 facet を棚卸しする — weekly-review の 7 step (`review-simplicity-whole` / `review-security-whole` / `review-architecture-whole` / `review-todo-whole` / `review-jj-robustness-whole` / `file-length-watchlist` / `workspace-hygiene-scan`) + `aggregate-weekly`。他パイプライン (pre-push-review / post-pr-review / post-merge-feedback) の facet も同じ欠落を持つか確認し、範囲を決める -- [ ] 各 `## Output contract` に「レポート本文は日本語で書く。コード識別子・パス・ADR 番号は原文のまま」を追記する -- [ ] `aggregate-weekly` の findings.json は `description` / `proposal` の言語をどうするか決める (現状は英語。skill が `docs/todo.md` へ展開する際に翻訳しているため、日本語化すると翻訳工程が減る) -- [ ] 次回 weekly-review の実走で全 facet が日本語で出ることを確認する (**instruction 変更は実走でしか検証できない** — [docs/dev-conventions.md](dev-conventions.md)) - -#### 完了基準 - -- weekly-review の全 facet レポートが日本語で出力される -- 出力言語が instruction 上の明示的な契約になっており、モデルやロケール既定に依存しない - -#### 詰まっている箇所 - -なし - ### 昇格候補集合の構築を決定論層へ移す — instruction による全件判定の強制は 2 回失敗している > **動機**: `review-todo-whole` facet の昇格候補チェックが、**2 週連続で同じ形で失敗している**。2026-08-13 は 164 件中約 50 件をサンプリングして「0 件」と報告。対策として instruction に全件判定を義務づけた (#399 / #400) が、2026-08-15 の run は **251 件中約 13 件しか判定せず**、残り約 238 件を未判定のまま「候補 0 件」と結論した。 diff --git a/docs/work-plan-nightly-lane-model.md b/docs/work-plan-nightly-lane-model.md index 6c02ff8d..2c764fc7 100644 --- a/docs/work-plan-nightly-lane-model.md +++ b/docs/work-plan-nightly-lane-model.md @@ -247,7 +247,7 @@ skill リポ作業は PR-1 マージ後いつでも (PR-5 と独立) 作業の進捗に応じて本節を更新すること (各 PR に同梱してよい)。 - [x] PR-1: docs (ADR-072/052 改訂、台帳条件 3 廃止、facet Criterion 3-2/3-3 縮小、T01/T02 撤回、todo rescope、本計画書の同梱) — 2026-08-16 実施。計画外の追加 (ユーザー承認済み): (a) 順位 449「昇格不適格判定の『両経路記載』を決定論化」を削除 (検査対象の § 昇格検査履歴 廃止で前提消滅)、(b) 台帳 § 無人可としなかった理由 の順位 284 行を lane 表記へ更新 + 見出しから件数を除去、(c) 未採番だった詳細エントリ 3 件に順位 462-464 を採番、(d) **ADR-033 改訂** — 「順位 = 追記型 ID・優先度は Tier 列・再採番はしない・細粒度の順序は行の並びで表す」を明文化し、本文の順位参照禁止を緩和。帰結として順位 334 (本文順位番号 lint) を retire -- [ ] PR-2: facet 出力言語の直書き + dev-conventions 記録 + todo23 エントリ削除 +- [x] PR-2: facet 出力言語の直書き + dev-conventions 記録 + todo23 エントリ削除 — 2026-08-16 実施。計画からの逸脱 1 件: **固定トークンの免除リストを言語指定と対で書いた** (workflow の `rules.condition` が `analysis complete` / `convergence_verdict: <値>` / `APPROVE` / `REJECT` を英語リテラルで照合しているため、言語指定だけを書くと gate が通らなくなる)。あわせて順位 462 の table 行削除と CLAUDE.md 索引更新 - [ ] PR-3: 順位 table 存在照合ゲート (lib-ledger + selector + workflow 配線) - [ ] PR-4: 失敗マーカー + ブランチ自動掃除 + token 2 段化 + close 時案内 - [ ] PR-5: 台帳未掲載順位一覧の決定論出力 + facet 参照置き換え + todo23/24 エントリ整理