Ttachibanashuutachore(release): plugin tag を廃止し semver tag に一本化 (D69)
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
fix(tests,scripts): pipefail 下の `producer | grep -q` 173 箇所を herestring へ一掃 (Phase 129) (#286) * fix(tests,scripts): pipefail 下の `producer | grep -q` 173 箇所を herestring へ一掃 PR #285 で実害 2 箇所を直したが、同じ書き方が 173 箇所残っていた。 `grep -q` は最初の一致で終了してパイプを閉じるため、分割書き込み中の producer が EPIPE で失敗する。`set -o pipefail` がその失敗をパイプライン 全体の結果へ昇格させるので、探す文字列が実在するのに「無い」と判定される。 一致が入力の前方にあるほど再現するため、合否が「探す文字列が何行目にあるか」 で決まる状態だった。 - tests/test-pipefail-grep-q-safety.sh を新設 (Phase 129.1)。 静的走査で該当箇所を検出し、fixture 8 件で除外条件を固定 (pipefail 無し / `|| true` / herestring / grep -c / コメント行 / 引用符内) - tests/ 39 ファイル 131 箇所、scripts/ 19 ファイル 42 箇所を変換 (Phase 129.2 / 129.3) - tests/validate-plugin.sh に節 19 を配線し、 tests/test-validate-plugin-wiring.sh の pin にも追加 (Phase 129.4)。 検査の除去には 2 つの独立したファイルの変更が必要になる 引用符認識を実装した過程で、旧パターンが取りこぼしていた 3 段パイプライン (`echo | jq | grep -qi`) を 1 件発見し、変数経由に分解した。 実測: - 検出件数 173 → 0 - 変換部分は追加 172 / 削除 172 の 1 対 1 (アサーション削除・期待値緩和ゼロ) - bash -n 全 58 ファイル OK (行末継続 `\` を壊した 4 箇所はここで検出し修正) - shellcheck warning は変換前後とも 29 件で同数、herestring 起因の新規指摘ゼロ - validate-plugin 132 合格 0 失敗 (131 + 新設 1 節) - check-consistency 全 24 通過 (変換対象に check-consistency.sh 自身を含む) - go test ./... 0 失敗、VERSION / plugin.json / harness.toml 非接触 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * docs(plan): Phase 129 完走 — 全 4 task を cc:done に更新 129.1 検出テスト新設 / 129.2 tests/ 131 箇所 / 129.3 scripts/ 42 箇所 / 129.4 配線 + closeout。各 task の Status に実測値を記録した。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(tests): 検出器の 2 件の欠陥を修正 (CodeRabbit 指摘) いずれも実測で再現を確認してから修正した。 - 行継続を跨ぐパイプラインの検出漏れ: `perl -ne` が物理行ごとに走査するため、 行末の `\` で分割された `printf ... \ | grep -q ...` を見落としていた。 物理行を論理行へ畳んでから走査する。行番号は論理行の開始位置を報告する - 引用符内のエスケープの誤解釈: 二重引用符の中の `\"` を閉じ引用符と解釈し、 後続の `| grep -q` が引用符の外に見えて誤検出していた。二重引用符の中でのみ `\` をエスケープとして扱う (単一引用符の中では shell の仕様どおり扱わない) fixture は 8 件 → 10 件。CHANGELOG に Before/After 表を追加した。 改良後の検出器を変更前ツリーへ適用すると 168 箇所 (旧実装は 173)。差の 5 件は 行継続の畳み込みによる数え方の違いで、検出漏れではない。物理行 782・783 を 2 件と数えていたものが論理行の開始 781 の 1 件になる。該当箇所は目視で 変換の正しさを確認済み。 検証: validate-plugin 132 合格 0 失敗、check-consistency 全 24 通過。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: tachibanashuuta <tachibana@canai.jp> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> | 1 个月前 | |
feat(judgment-ledger): Phase 98.1 — append-only learning ledger v1 judgment-card.v1 を append-only JSONL ledger 化し過去判断を検索・recall 可能に。 - templates/schemas/judgment-ledger.v1.json (record schema, additionalProperties:false) - go/internal/judgmentledger/ (ledger + schema + index + recall, fail-open) - scripts/judgment-ledger.sh append/search/recall (fail-open on write) - scripts/judgment-card.sh record-answer → ledger append 配線 + recall subcommand - judgment-card.v1.similar_past_decisions を recall layer で max 3 埋める - docs/judgment-ledger.md SSOT (7 章) + CHANGELOG [Unreleased] 既定値: ledger=.claude/state/judgment-ledger.jsonl (HARNESS_JUDGMENT_LEDGER で上書き), ranking=string-match (Lead 決定、stop_point 98.1.5), search/recall max 3。 go test ./internal/judgmentledger/... 全 PASS。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> | 2 个月前 | |
feat(verification): Phase 134-137 — 検証チェーン配線修理 + writing lint + surface + ループ施策 Phase 134: 入口 (risk_flags→profile 自動昇格 + ratchet) / 中間 (PENDING_BROWSER fail-visible, pending_validations) / 出口 (accept-collect-evidence.sh による artifact 機械接続) の 3 継ぎ目を接続。scope leash 本配線 (warn 既定)、Playwright Screencast evidence、worker-report.v1 永続化、再調査ループ、検証の検証 (check-verification-chain-wiring.sh + 実効性契約テスト 3 本、RED→GREEN 実測)。 Phase 135: writinglint エンジン (辞書は個人層) + PostToolUse advisory + Stop 全体再検査 + 指摘→ルール自動ドラフト→人間承認ループ + config schema 正式化。 Phase 136: 3 surface スマホ viewport / 承認待ちキュー表示 / diagram-design 接続点。 Phase 137: 採点設計規律 (criteria 3 層翻訳) / blind 受け手検査 / 評価者 4 契約。 decisions.md D62-D68 に判断根拠を記録。worker 契約に NG-4 追加。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TFcsXBG95kTdxPfDaP7Vuu | 27 天前 | |
fix(tests,scripts): pipefail 下の `producer | grep -q` 173 箇所を herestring へ一掃 (Phase 129) (#286) * fix(tests,scripts): pipefail 下の `producer | grep -q` 173 箇所を herestring へ一掃 PR #285 で実害 2 箇所を直したが、同じ書き方が 173 箇所残っていた。 `grep -q` は最初の一致で終了してパイプを閉じるため、分割書き込み中の producer が EPIPE で失敗する。`set -o pipefail` がその失敗をパイプライン 全体の結果へ昇格させるので、探す文字列が実在するのに「無い」と判定される。 一致が入力の前方にあるほど再現するため、合否が「探す文字列が何行目にあるか」 で決まる状態だった。 - tests/test-pipefail-grep-q-safety.sh を新設 (Phase 129.1)。 静的走査で該当箇所を検出し、fixture 8 件で除外条件を固定 (pipefail 無し / `|| true` / herestring / grep -c / コメント行 / 引用符内) - tests/ 39 ファイル 131 箇所、scripts/ 19 ファイル 42 箇所を変換 (Phase 129.2 / 129.3) - tests/validate-plugin.sh に節 19 を配線し、 tests/test-validate-plugin-wiring.sh の pin にも追加 (Phase 129.4)。 検査の除去には 2 つの独立したファイルの変更が必要になる 引用符認識を実装した過程で、旧パターンが取りこぼしていた 3 段パイプライン (`echo | jq | grep -qi`) を 1 件発見し、変数経由に分解した。 実測: - 検出件数 173 → 0 - 変換部分は追加 172 / 削除 172 の 1 対 1 (アサーション削除・期待値緩和ゼロ) - bash -n 全 58 ファイル OK (行末継続 `\` を壊した 4 箇所はここで検出し修正) - shellcheck warning は変換前後とも 29 件で同数、herestring 起因の新規指摘ゼロ - validate-plugin 132 合格 0 失敗 (131 + 新設 1 節) - check-consistency 全 24 通過 (変換対象に check-consistency.sh 自身を含む) - go test ./... 0 失敗、VERSION / plugin.json / harness.toml 非接触 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * docs(plan): Phase 129 完走 — 全 4 task を cc:done に更新 129.1 検出テスト新設 / 129.2 tests/ 131 箇所 / 129.3 scripts/ 42 箇所 / 129.4 配線 + closeout。各 task の Status に実測値を記録した。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(tests): 検出器の 2 件の欠陥を修正 (CodeRabbit 指摘) いずれも実測で再現を確認してから修正した。 - 行継続を跨ぐパイプラインの検出漏れ: `perl -ne` が物理行ごとに走査するため、 行末の `\` で分割された `printf ... \ | grep -q ...` を見落としていた。 物理行を論理行へ畳んでから走査する。行番号は論理行の開始位置を報告する - 引用符内のエスケープの誤解釈: 二重引用符の中の `\"` を閉じ引用符と解釈し、 後続の `| grep -q` が引用符の外に見えて誤検出していた。二重引用符の中でのみ `\` をエスケープとして扱う (単一引用符の中では shell の仕様どおり扱わない) fixture は 8 件 → 10 件。CHANGELOG に Before/After 表を追加した。 改良後の検出器を変更前ツリーへ適用すると 168 箇所 (旧実装は 173)。差の 5 件は 行継続の畳み込みによる数え方の違いで、検出漏れではない。物理行 782・783 を 2 件と数えていたものが論理行の開始 781 の 1 件になる。該当箇所は目視で 変換の正しさを確認済み。 検証: validate-plugin 132 合格 0 失敗、check-consistency 全 24 通過。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: tachibanashuuta <tachibana@canai.jp> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> | 1 个月前 | |
feat(hosts): Phase 111.2–111.6 structural workflow smoke and Grok internal-compatible Add host smoke library and multi-host structural plan artifacts, CI structural smoke, HostGrok hookcodec floor membership, known multi-host limitations, and N+1 examplehost stub. Promote Grok to internal-compatible only; keep public supported deferred (blocked) for Codex/Cursor/Grok until live H4. | 2 个月前 | |
feat(judgment-ledger): Phase 98.1 — append-only learning ledger v1 judgment-card.v1 を append-only JSONL ledger 化し過去判断を検索・recall 可能に。 - templates/schemas/judgment-ledger.v1.json (record schema, additionalProperties:false) - go/internal/judgmentledger/ (ledger + schema + index + recall, fail-open) - scripts/judgment-ledger.sh append/search/recall (fail-open on write) - scripts/judgment-card.sh record-answer → ledger append 配線 + recall subcommand - judgment-card.v1.similar_past_decisions を recall layer で max 3 埋める - docs/judgment-ledger.md SSOT (7 章) + CHANGELOG [Unreleased] 既定値: ledger=.claude/state/judgment-ledger.jsonl (HARNESS_JUDGMENT_LEDGER で上書き), ranking=string-match (Lead 決定、stop_point 98.1.5), search/recall max 3。 go test ./internal/judgmentledger/... 全 PASS。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> | 2 个月前 | |
feat(harness-loop): finish phase 41 follow-ups | 4 个月前 | |
chore: release v3.4.2 | 6 个月前 | |
feat(phase-65.5.1): 3-surface 統合 e2e (Plan→Progress→Accept hash trace) Phase E cycle 1/5。3 surface (plan-brief / progress / accept) が 同 user_request_hash + project name で完全 trace 可能なことを e2e で検証。 Validation: - Plan Brief: personal-preference.v1 record 生成 → sha256 hash 取得 - impl simulation: Plans.md fixture (50% progress) - Progress: drift detector で scope-creep / time-overrun alert HTML 表示 - Acceptance Demo: acceptance-decision.v1 record 生成 → 同 hash で graph join - 3 種 record が project name で trace 可能、3 template 全存在 Test result: 10 PASS / 0 FAIL validate-plugin: 64 PASS / 0 FAIL (63 → 64) Refs: Plans.md §65.5.1 | 4 个月前 | |
fix(tests): floor テストの env 独立化 + macOS mktemp 一時ファイルの一意化 オーナーの floor 免除設定 (HARNESS_RUNTIME_FLOOR_EGRESS / _SECRET_ALLOW) が 検査プロセスに継承され、deny を検証する assertion の結果を書き換えていた。 落ちる側は shell 2 本 + Go 12 subtest。通る側の影響がより重く、e2e は egress で 異常終了して後続 2 検査が未実行のまま OK 扱いになり、allowlist 非宣言 path の deny 検証は免除設定が対象を覆えば floor が拒否しなくても pass していた。 floor を検証する 4 surface が自前で免除設定を無効化してから測るようにし、 validate-plugin.sh に 4/4 surface の pin を追加した。 あわせて posttool-progress-regen.sh の一時ファイル生成を修正。 BSD (macOS) の mktemp は X が末尾にある場合しか置換しないため `/tmp/progress-snap-XXXX.json` は毎回同一パスを返し、中断で残骸が残ると 以降 EEXIST で失敗し続けて hook が regenerated:true を返しながら 実際には何も更新しない状態になっていた。GNU (CI) では再現しない。 検証 (免除設定を export したまま): - tests/validate-plugin.sh 128 pass / 0 fail (修正前 126/2、その前 125/4) - go test ./... 全パス - scripts/ci/check-consistency.sh 全パス - 残骸を戻した対照実験でも progress-regen が通ることを確認 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> | 1 个月前 | |
feat(verification): Phase 134-137 — 検証チェーン配線修理 + writing lint + surface + ループ施策 Phase 134: 入口 (risk_flags→profile 自動昇格 + ratchet) / 中間 (PENDING_BROWSER fail-visible, pending_validations) / 出口 (accept-collect-evidence.sh による artifact 機械接続) の 3 継ぎ目を接続。scope leash 本配線 (warn 既定)、Playwright Screencast evidence、worker-report.v1 永続化、再調査ループ、検証の検証 (check-verification-chain-wiring.sh + 実効性契約テスト 3 本、RED→GREEN 実測)。 Phase 135: writinglint エンジン (辞書は個人層) + PostToolUse advisory + Stop 全体再検査 + 指摘→ルール自動ドラフト→人間承認ループ + config schema 正式化。 Phase 136: 3 surface スマホ viewport / 承認待ちキュー表示 / diagram-design 接続点。 Phase 137: 採点設計規律 (criteria 3 層翻訳) / blind 受け手検査 / 評価者 4 契約。 decisions.md D62-D68 に判断根拠を記録。worker 契約に NG-4 追加。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TFcsXBG95kTdxPfDaP7Vuu | 27 天前 | |
fix(tests,scripts): pipefail 下の `producer | grep -q` 173 箇所を herestring へ一掃 (Phase 129) (#286) * fix(tests,scripts): pipefail 下の `producer | grep -q` 173 箇所を herestring へ一掃 PR #285 で実害 2 箇所を直したが、同じ書き方が 173 箇所残っていた。 `grep -q` は最初の一致で終了してパイプを閉じるため、分割書き込み中の producer が EPIPE で失敗する。`set -o pipefail` がその失敗をパイプライン 全体の結果へ昇格させるので、探す文字列が実在するのに「無い」と判定される。 一致が入力の前方にあるほど再現するため、合否が「探す文字列が何行目にあるか」 で決まる状態だった。 - tests/test-pipefail-grep-q-safety.sh を新設 (Phase 129.1)。 静的走査で該当箇所を検出し、fixture 8 件で除外条件を固定 (pipefail 無し / `|| true` / herestring / grep -c / コメント行 / 引用符内) - tests/ 39 ファイル 131 箇所、scripts/ 19 ファイル 42 箇所を変換 (Phase 129.2 / 129.3) - tests/validate-plugin.sh に節 19 を配線し、 tests/test-validate-plugin-wiring.sh の pin にも追加 (Phase 129.4)。 検査の除去には 2 つの独立したファイルの変更が必要になる 引用符認識を実装した過程で、旧パターンが取りこぼしていた 3 段パイプライン (`echo | jq | grep -qi`) を 1 件発見し、変数経由に分解した。 実測: - 検出件数 173 → 0 - 変換部分は追加 172 / 削除 172 の 1 対 1 (アサーション削除・期待値緩和ゼロ) - bash -n 全 58 ファイル OK (行末継続 `\` を壊した 4 箇所はここで検出し修正) - shellcheck warning は変換前後とも 29 件で同数、herestring 起因の新規指摘ゼロ - validate-plugin 132 合格 0 失敗 (131 + 新設 1 節) - check-consistency 全 24 通過 (変換対象に check-consistency.sh 自身を含む) - go test ./... 0 失敗、VERSION / plugin.json / harness.toml 非接触 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * docs(plan): Phase 129 完走 — 全 4 task を cc:done に更新 129.1 検出テスト新設 / 129.2 tests/ 131 箇所 / 129.3 scripts/ 42 箇所 / 129.4 配線 + closeout。各 task の Status に実測値を記録した。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(tests): 検出器の 2 件の欠陥を修正 (CodeRabbit 指摘) いずれも実測で再現を確認してから修正した。 - 行継続を跨ぐパイプラインの検出漏れ: `perl -ne` が物理行ごとに走査するため、 行末の `\` で分割された `printf ... \ | grep -q ...` を見落としていた。 物理行を論理行へ畳んでから走査する。行番号は論理行の開始位置を報告する - 引用符内のエスケープの誤解釈: 二重引用符の中の `\"` を閉じ引用符と解釈し、 後続の `| grep -q` が引用符の外に見えて誤検出していた。二重引用符の中でのみ `\` をエスケープとして扱う (単一引用符の中では shell の仕様どおり扱わない) fixture は 8 件 → 10 件。CHANGELOG に Before/After 表を追加した。 改良後の検出器を変更前ツリーへ適用すると 168 箇所 (旧実装は 173)。差の 5 件は 行継続の畳み込みによる数え方の違いで、検出漏れではない。物理行 782・783 を 2 件と数えていたものが論理行の開始 781 の 1 件になる。該当箇所は目視で 変換の正しさを確認済み。 検証: validate-plugin 132 合格 0 失敗、check-consistency 全 24 通過。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: tachibanashuuta <tachibana@canai.jp> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> | 1 个月前 | |
fix(tests,scripts): pipefail 下の `producer | grep -q` 173 箇所を herestring へ一掃 (Phase 129) (#286) * fix(tests,scripts): pipefail 下の `producer | grep -q` 173 箇所を herestring へ一掃 PR #285 で実害 2 箇所を直したが、同じ書き方が 173 箇所残っていた。 `grep -q` は最初の一致で終了してパイプを閉じるため、分割書き込み中の producer が EPIPE で失敗する。`set -o pipefail` がその失敗をパイプライン 全体の結果へ昇格させるので、探す文字列が実在するのに「無い」と判定される。 一致が入力の前方にあるほど再現するため、合否が「探す文字列が何行目にあるか」 で決まる状態だった。 - tests/test-pipefail-grep-q-safety.sh を新設 (Phase 129.1)。 静的走査で該当箇所を検出し、fixture 8 件で除外条件を固定 (pipefail 無し / `|| true` / herestring / grep -c / コメント行 / 引用符内) - tests/ 39 ファイル 131 箇所、scripts/ 19 ファイル 42 箇所を変換 (Phase 129.2 / 129.3) - tests/validate-plugin.sh に節 19 を配線し、 tests/test-validate-plugin-wiring.sh の pin にも追加 (Phase 129.4)。 検査の除去には 2 つの独立したファイルの変更が必要になる 引用符認識を実装した過程で、旧パターンが取りこぼしていた 3 段パイプライン (`echo | jq | grep -qi`) を 1 件発見し、変数経由に分解した。 実測: - 検出件数 173 → 0 - 変換部分は追加 172 / 削除 172 の 1 対 1 (アサーション削除・期待値緩和ゼロ) - bash -n 全 58 ファイル OK (行末継続 `\` を壊した 4 箇所はここで検出し修正) - shellcheck warning は変換前後とも 29 件で同数、herestring 起因の新規指摘ゼロ - validate-plugin 132 合格 0 失敗 (131 + 新設 1 節) - check-consistency 全 24 通過 (変換対象に check-consistency.sh 自身を含む) - go test ./... 0 失敗、VERSION / plugin.json / harness.toml 非接触 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * docs(plan): Phase 129 完走 — 全 4 task を cc:done に更新 129.1 検出テスト新設 / 129.2 tests/ 131 箇所 / 129.3 scripts/ 42 箇所 / 129.4 配線 + closeout。各 task の Status に実測値を記録した。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(tests): 検出器の 2 件の欠陥を修正 (CodeRabbit 指摘) いずれも実測で再現を確認してから修正した。 - 行継続を跨ぐパイプラインの検出漏れ: `perl -ne` が物理行ごとに走査するため、 行末の `\` で分割された `printf ... \ | grep -q ...` を見落としていた。 物理行を論理行へ畳んでから走査する。行番号は論理行の開始位置を報告する - 引用符内のエスケープの誤解釈: 二重引用符の中の `\"` を閉じ引用符と解釈し、 後続の `| grep -q` が引用符の外に見えて誤検出していた。二重引用符の中でのみ `\` をエスケープとして扱う (単一引用符の中では shell の仕様どおり扱わない) fixture は 8 件 → 10 件。CHANGELOG に Before/After 表を追加した。 改良後の検出器を変更前ツリーへ適用すると 168 箇所 (旧実装は 173)。差の 5 件は 行継続の畳み込みによる数え方の違いで、検出漏れではない。物理行 782・783 を 2 件と数えていたものが論理行の開始 781 の 1 件になる。該当箇所は目視で 変換の正しさを確認済み。 検証: validate-plugin 132 合格 0 失敗、check-consistency 全 24 通過。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: tachibanashuuta <tachibana@canai.jp> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> | 1 个月前 | |
feat(config): add advisor config helpers | 4 个月前 | |
fix(tests,scripts): pipefail 下の `producer | grep -q` 173 箇所を herestring へ一掃 (Phase 129) (#286) * fix(tests,scripts): pipefail 下の `producer | grep -q` 173 箇所を herestring へ一掃 PR #285 で実害 2 箇所を直したが、同じ書き方が 173 箇所残っていた。 `grep -q` は最初の一致で終了してパイプを閉じるため、分割書き込み中の producer が EPIPE で失敗する。`set -o pipefail` がその失敗をパイプライン 全体の結果へ昇格させるので、探す文字列が実在するのに「無い」と判定される。 一致が入力の前方にあるほど再現するため、合否が「探す文字列が何行目にあるか」 で決まる状態だった。 - tests/test-pipefail-grep-q-safety.sh を新設 (Phase 129.1)。 静的走査で該当箇所を検出し、fixture 8 件で除外条件を固定 (pipefail 無し / `|| true` / herestring / grep -c / コメント行 / 引用符内) - tests/ 39 ファイル 131 箇所、scripts/ 19 ファイル 42 箇所を変換 (Phase 129.2 / 129.3) - tests/validate-plugin.sh に節 19 を配線し、 tests/test-validate-plugin-wiring.sh の pin にも追加 (Phase 129.4)。 検査の除去には 2 つの独立したファイルの変更が必要になる 引用符認識を実装した過程で、旧パターンが取りこぼしていた 3 段パイプライン (`echo | jq | grep -qi`) を 1 件発見し、変数経由に分解した。 実測: - 検出件数 173 → 0 - 変換部分は追加 172 / 削除 172 の 1 対 1 (アサーション削除・期待値緩和ゼロ) - bash -n 全 58 ファイル OK (行末継続 `\` を壊した 4 箇所はここで検出し修正) - shellcheck warning は変換前後とも 29 件で同数、herestring 起因の新規指摘ゼロ - validate-plugin 132 合格 0 失敗 (131 + 新設 1 節) - check-consistency 全 24 通過 (変換対象に check-consistency.sh 自身を含む) - go test ./... 0 失敗、VERSION / plugin.json / harness.toml 非接触 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * docs(plan): Phase 129 完走 — 全 4 task を cc:done に更新 129.1 検出テスト新設 / 129.2 tests/ 131 箇所 / 129.3 scripts/ 42 箇所 / 129.4 配線 + closeout。各 task の Status に実測値を記録した。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(tests): 検出器の 2 件の欠陥を修正 (CodeRabbit 指摘) いずれも実測で再現を確認してから修正した。 - 行継続を跨ぐパイプラインの検出漏れ: `perl -ne` が物理行ごとに走査するため、 行末の `\` で分割された `printf ... \ | grep -q ...` を見落としていた。 物理行を論理行へ畳んでから走査する。行番号は論理行の開始位置を報告する - 引用符内のエスケープの誤解釈: 二重引用符の中の `\"` を閉じ引用符と解釈し、 後続の `| grep -q` が引用符の外に見えて誤検出していた。二重引用符の中でのみ `\` をエスケープとして扱う (単一引用符の中では shell の仕様どおり扱わない) fixture は 8 件 → 10 件。CHANGELOG に Before/After 表を追加した。 改良後の検出器を変更前ツリーへ適用すると 168 箇所 (旧実装は 173)。差の 5 件は 行継続の畳み込みによる数え方の違いで、検出漏れではない。物理行 782・783 を 2 件と数えていたものが論理行の開始 781 の 1 件になる。該当箇所は目視で 変換の正しさを確認済み。 検証: validate-plugin 132 合格 0 失敗、check-consistency 全 24 通過。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: tachibanashuuta <tachibana@canai.jp> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> | 1 个月前 | |
feat(go): migrate sprint contract and hook hot paths | 4 个月前 | |
feat: add New Harness V2 host adapters Add tool-first onboarding, support-tier boundaries, Codex CLI plugin smoke, OpenCode bootstrap validation, migration reporting, and Phase 74 repo-health gates. | 3 个月前 | |
fix(tests): BSD 非互換 mktemp テンプレートを一掃 + 再発検出を配線 (Phase 127.1) BSD (macOS) の mktemp は X が末尾にある場合しか置換しない。 `mktemp /tmp/foo-XXXXXX.json` のように X の後ろに拡張子が続く形式は 乱数化されず、テンプレートそのままの literal path を返してそのファイルを作る。 残骸が残ると以降 EEXIST で永久に失敗する。GNU (Linux/CI) は末尾以外の X も 置換するため、この不具合は CI では一切再現せず macOS ローカル限定になる。 対象は tests/ 配下の 9 箇所。すべて `"${TMPDIR:-/tmp}/<name>.XXXXXX"` へ統一した (repo 内 59 箇所が TMPDIR 参照で主流)。拡張子は 9 箇所とも消費側が path として しか使わないことを確認したうえで落とした。 後始末が無かった 2 ファイル (test-accept-record.sh / test-harness-accept.sh) に trap を追加。中断で残骸が残ると以降永久に赤化する経路を塞ぐ (これは posttool-progress-regen.sh で実際に 3 日間起きた。c856ecec で修正済)。 再発検出は tests/test-mktemp-bsd-template-safety.sh を新設し tests/validate-plugin.sh へ配線 (.claude/rules/workflow-test-wiring.md 準拠。 .github/workflows/ は非接触)。shellcheck はこの書式を検出しないことを 実測確認済みのため専用検査が必要。検出は grep ベースの静的解析なので、 テンプレートを変数経由で間接的に渡す形は原理的に検出外 (現時点で該当箇所はゼロ)。 検証 (floor 免除 env を export したまま実行): - RED 実測: gate 追加直後に 9 件を検出して exit 1 - GREEN: 9 箇所修正後に検出 0 件 - 対照実験: 旧テンプレートの literal path を /tmp に置くと、ベース版は `mktemp: mkstemp failed on /tmp/plan-brief-test-XXXXXX.html: File exists` で停止し、修正版は同地点を通過 - tests/validate-plugin.sh 129 pass / 0 fail - scripts/ci/check-consistency.sh 全 24 通過 - 削除 9 行はすべて mktemp 行 (アサーションの削除・弱体化ゼロ) - 独立 reviewer が APPROVE (critical/major 0) Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> | 1 个月前 | |
fix(tests,scripts): pipefail 下の `producer | grep -q` 173 箇所を herestring へ一掃 (Phase 129) (#286) * fix(tests,scripts): pipefail 下の `producer | grep -q` 173 箇所を herestring へ一掃 PR #285 で実害 2 箇所を直したが、同じ書き方が 173 箇所残っていた。 `grep -q` は最初の一致で終了してパイプを閉じるため、分割書き込み中の producer が EPIPE で失敗する。`set -o pipefail` がその失敗をパイプライン 全体の結果へ昇格させるので、探す文字列が実在するのに「無い」と判定される。 一致が入力の前方にあるほど再現するため、合否が「探す文字列が何行目にあるか」 で決まる状態だった。 - tests/test-pipefail-grep-q-safety.sh を新設 (Phase 129.1)。 静的走査で該当箇所を検出し、fixture 8 件で除外条件を固定 (pipefail 無し / `|| true` / herestring / grep -c / コメント行 / 引用符内) - tests/ 39 ファイル 131 箇所、scripts/ 19 ファイル 42 箇所を変換 (Phase 129.2 / 129.3) - tests/validate-plugin.sh に節 19 を配線し、 tests/test-validate-plugin-wiring.sh の pin にも追加 (Phase 129.4)。 検査の除去には 2 つの独立したファイルの変更が必要になる 引用符認識を実装した過程で、旧パターンが取りこぼしていた 3 段パイプライン (`echo | jq | grep -qi`) を 1 件発見し、変数経由に分解した。 実測: - 検出件数 173 → 0 - 変換部分は追加 172 / 削除 172 の 1 対 1 (アサーション削除・期待値緩和ゼロ) - bash -n 全 58 ファイル OK (行末継続 `\` を壊した 4 箇所はここで検出し修正) - shellcheck warning は変換前後とも 29 件で同数、herestring 起因の新規指摘ゼロ - validate-plugin 132 合格 0 失敗 (131 + 新設 1 節) - check-consistency 全 24 通過 (変換対象に check-consistency.sh 自身を含む) - go test ./... 0 失敗、VERSION / plugin.json / harness.toml 非接触 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * docs(plan): Phase 129 完走 — 全 4 task を cc:done に更新 129.1 検出テスト新設 / 129.2 tests/ 131 箇所 / 129.3 scripts/ 42 箇所 / 129.4 配線 + closeout。各 task の Status に実測値を記録した。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(tests): 検出器の 2 件の欠陥を修正 (CodeRabbit 指摘) いずれも実測で再現を確認してから修正した。 - 行継続を跨ぐパイプラインの検出漏れ: `perl -ne` が物理行ごとに走査するため、 行末の `\` で分割された `printf ... \ | grep -q ...` を見落としていた。 物理行を論理行へ畳んでから走査する。行番号は論理行の開始位置を報告する - 引用符内のエスケープの誤解釈: 二重引用符の中の `\"` を閉じ引用符と解釈し、 後続の `| grep -q` が引用符の外に見えて誤検出していた。二重引用符の中でのみ `\` をエスケープとして扱う (単一引用符の中では shell の仕様どおり扱わない) fixture は 8 件 → 10 件。CHANGELOG に Before/After 表を追加した。 改良後の検出器を変更前ツリーへ適用すると 168 箇所 (旧実装は 173)。差の 5 件は 行継続の畳み込みによる数え方の違いで、検出漏れではない。物理行 782・783 を 2 件と数えていたものが論理行の開始 781 の 1 件になる。該当箇所は目視で 変換の正しさを確認済み。 検証: validate-plugin 132 合格 0 失敗、check-consistency 全 24 通過。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: tachibanashuuta <tachibana@canai.jp> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> | 1 个月前 | |
test(hosts): RED — re-pin claim/wording tests to supported tier (111.3.3/111.4.4/111.5.4) Failing against unchanged docs: - test-support-claim-wording: missing '| Codex CLI | `supported` |' in README.md - test-readme-product-surface: missing 'Codex CLI | `supported`' in README.md - test-public-claims-contract: codex tier must be supported (H8 pin) Co-authored-by: Cursor <cursoragent@cursor.com> | 1 个月前 | |
feat: add New Harness V2 host adapters Add tool-first onboarding, support-tier boundaries, Codex CLI plugin smoke, OpenCode bootstrap validation, migration reporting, and Phase 74 repo-health gates. | 3 个月前 | |
feat(loop): add advisor strategy execution flow | 4 个月前 | |
fix(tests): agent-eval の許容範囲を ~1.4.0 に絞る (CodeRabbit 指摘) `^0.14.1` は npm の 0.x caret 規則により実質 `>=0.14.1 <0.15.0` の マイナー固定だった。これを `^1.4.0` に置き換えると `>=1.4.0 <2.0.0` と なり、1.5 以降が再監査なしにゲートを通過する。ゲートは範囲文字列の 完全一致と最低バージョンしか見ないため、「ラインは意図的にしか動かさ ない」という契約が緩む。 `~1.4.0` に絞ることで元の厳しさを復元する。1.5 が出た場合は #272 と 同じくゲートが落ち、人間の判断を経てラインを動かすことになる。 あわせて Plans.md の言い回しを 1 箇所修正 (LanguageTool 指摘)。 検証: bash tests/test-breezing-agent-eval-deps.sh → ok (exit 0)、 lockfile の宣言範囲が ~1.4.0 / 解決が 1.4.0 であることを確認。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012ZBxNEtYJbtHkZcsAn8nsv | 1 个月前 | |
feat(routing,breezing): retire Opus 4.8 (Claude 5 lineup) + codex review findings fixes Opus 5 リリース (2026-07-24) を受けた operator 裁定 (2026-07-25): - claude catalog: brain=claude-opus-5 / review=claude-fable-5 / worker=claude-sonnet-5 - cursor brain 系 tier: claude-opus-4-8-thinking-xhigh → claude-fable-5 (~/.cursor/cli-config.json で ID 実在確認) - HARNESS_BRAIN_MODEL: opus|opus5=claude-opus-5 (既定) / fable=claude-fable-5 codex second opinion (gpt-5.6-sol xhigh, retry 完走) の指摘 4 件反映: - [P1] Integrated Review Gate を Phase C 最終化前へ移動 + 未収束時 cc:WIP 差し戻し - [P1] --no-commit run の review target を working tree (未 commit + untracked) に - [P2] breezing-brief classifier に --no-review-gate 追加 + テスト - [P2] spec / model-routing-policy の HARNESS_BRAIN_MODEL 契約を実装と同期 follow-up: 123.4 (validate.go claude-opus-5 + 4 平台 rebuild) を Plans.md に起票 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01W8XJBNKXBJmy6foSp7bGxz | 1 个月前 | |
fix(tests,scripts): pipefail 下の `producer | grep -q` 173 箇所を herestring へ一掃 (Phase 129) (#286) * fix(tests,scripts): pipefail 下の `producer | grep -q` 173 箇所を herestring へ一掃 PR #285 で実害 2 箇所を直したが、同じ書き方が 173 箇所残っていた。 `grep -q` は最初の一致で終了してパイプを閉じるため、分割書き込み中の producer が EPIPE で失敗する。`set -o pipefail` がその失敗をパイプライン 全体の結果へ昇格させるので、探す文字列が実在するのに「無い」と判定される。 一致が入力の前方にあるほど再現するため、合否が「探す文字列が何行目にあるか」 で決まる状態だった。 - tests/test-pipefail-grep-q-safety.sh を新設 (Phase 129.1)。 静的走査で該当箇所を検出し、fixture 8 件で除外条件を固定 (pipefail 無し / `|| true` / herestring / grep -c / コメント行 / 引用符内) - tests/ 39 ファイル 131 箇所、scripts/ 19 ファイル 42 箇所を変換 (Phase 129.2 / 129.3) - tests/validate-plugin.sh に節 19 を配線し、 tests/test-validate-plugin-wiring.sh の pin にも追加 (Phase 129.4)。 検査の除去には 2 つの独立したファイルの変更が必要になる 引用符認識を実装した過程で、旧パターンが取りこぼしていた 3 段パイプライン (`echo | jq | grep -qi`) を 1 件発見し、変数経由に分解した。 実測: - 検出件数 173 → 0 - 変換部分は追加 172 / 削除 172 の 1 対 1 (アサーション削除・期待値緩和ゼロ) - bash -n 全 58 ファイル OK (行末継続 `\` を壊した 4 箇所はここで検出し修正) - shellcheck warning は変換前後とも 29 件で同数、herestring 起因の新規指摘ゼロ - validate-plugin 132 合格 0 失敗 (131 + 新設 1 節) - check-consistency 全 24 通過 (変換対象に check-consistency.sh 自身を含む) - go test ./... 0 失敗、VERSION / plugin.json / harness.toml 非接触 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * docs(plan): Phase 129 完走 — 全 4 task を cc:done に更新 129.1 検出テスト新設 / 129.2 tests/ 131 箇所 / 129.3 scripts/ 42 箇所 / 129.4 配線 + closeout。各 task の Status に実測値を記録した。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(tests): 検出器の 2 件の欠陥を修正 (CodeRabbit 指摘) いずれも実測で再現を確認してから修正した。 - 行継続を跨ぐパイプラインの検出漏れ: `perl -ne` が物理行ごとに走査するため、 行末の `\` で分割された `printf ... \ | grep -q ...` を見落としていた。 物理行を論理行へ畳んでから走査する。行番号は論理行の開始位置を報告する - 引用符内のエスケープの誤解釈: 二重引用符の中の `\"` を閉じ引用符と解釈し、 後続の `| grep -q` が引用符の外に見えて誤検出していた。二重引用符の中でのみ `\` をエスケープとして扱う (単一引用符の中では shell の仕様どおり扱わない) fixture は 8 件 → 10 件。CHANGELOG に Before/After 表を追加した。 改良後の検出器を変更前ツリーへ適用すると 168 箇所 (旧実装は 173)。差の 5 件は 行継続の畳み込みによる数え方の違いで、検出漏れではない。物理行 782・783 を 2 件と数えていたものが論理行の開始 781 の 1 件になる。該当箇所は目視で 変換の正しさを確認済み。 検証: validate-plugin 132 合格 0 失敗、check-consistency 全 24 通過。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: tachibanashuuta <tachibana@canai.jp> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> | 1 个月前 | |
fix(review): REQUEST_CHANGES 対応 — major 4 件 + minor 3 件 - Stop 全体再検査の cross-session 誤 block: changed-files.jsonl に session_id を記録し、 現 session の entry のみ検査 (旧形式 entry は保守的に skip)。DroppedScope も同修正 - writing-rule 昇格の regex 未検証: harness writing-rule-vet subcommand (RE2 compile + 型/列挙検証、fail-closed) を approve 経路に追加。ScanText は不正 rule を skip して 続行し invalidRuleIDs を診断で返す (1 件の誤承認で全体無効化しない) - browser-review-runner の stale .webm 混入: run 開始 marker より新しい録画のみ収集 - scope leash enforce 時の自己 deny: .claude/ 配下を exempt + 判定を role 登録後へ移動 - posttooluse_writing_lint の config path を resolveProjectRoot 基準に統一 (CWD 非依存) - worker.md の NG 参照を NG-1〜4 に更新 / Plans.md の Phase 138 重複ヘッダー解消 - skill manifest pin に japanese-writing-drafter を追加 (意図した新 skill の反映) 各修正に回帰テスト付き。binary 4 平台再ビルド + drift gate PASS。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TFcsXBG95kTdxPfDaP7Vuu | 27 天前 | |
fix: accept app-scoped required checks | 3 个月前 | |
chore(release): plugin tag を廃止し semver tag に一本化 (D69) `claude plugin tag` が作る `{plugin-name}--v{version}` は marketplace.json の source が相対パスのため install に効かず、v5.6.0 以降 3 リリース連続で欠番の まま実害が無かった。手順書と実行の乖離を解消するため手順書側を実態に合わせる。 - harness-release SKILL.md / post-gate-detail.md / versioning.md から呼び出しを除去、 廃止理由を明記 (Post-Gate は 20 段 → 19 段) - test-claude-upstream-integration.sh の pin を「呼び出しが無いこと」へ反転 (RED 実測: 旧 SKILL.md で FAIL → 新で OK)。Phase 53 snapshot は歴史記録として不変更 - decisions.md D69 / CHANGELOG [Unreleased] に記録。mirror 同期済み Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TFcsXBG95kTdxPfDaP7Vuu | 27 天前 | |
fix(plugin): close runtime cache surfaces for 4.16.3 | 2 个月前 | |
fix(tests,scripts): pipefail 下の producer|grep -q 34 箇所を herestring 化 (Phase 130.2) Phase 129 の検出器は producer を printf/echo/cat の 3 種に限定していたため、 jq/find/git/grep/head/シェル関数呼び出しなどを producer とする同型の欠陥が 検出網から漏れていた。tests/test-i18n-locale-resolver.sh:196 で実測したところ、 `jq -r '...' <<< "$x" | grep -q '応答言語: 日本語'` は 20/20 で「無い」と 誤判定された (探す文字列は先頭 4 byte 目に実在する)。 対象 14 ファイル 34 箇所を herestring/変数捕捉へ書き換えた: - producer が変数の場合はそのまま `grep -q P <<<"$x"` へ - producer がコマンド/関数呼び出しの場合は `X="$(producer)"; grep -q P <<<"$X"` へ分解 (task-completed.sh の _signal_exists、test-tool-first-onboarding.sh の section_for 呼び出しなど) - test-codex-loop-cli.sh の `&&` 連結 3 段判定、test-hermes-agent-candidate.sh の 3 段パイプライン (最終段のみ EPIPE リスクがあるため最終段だけ分解) も対応 producer 側の exit status が元々検証されていなかった箇所には `|| true` を 付けて capture したが、これは grep 側の判定を変えない (最終アサーションは そのまま維持され、producer 失敗時も従来どおりのフェイルメッセージへ落ちる)。 RED: tests/test-i18n-locale-resolver.sh を修正前で 20 回連続実行し 19/20 失敗 GREEN: 同テストを修正後で 20 回連続実行し 20/20 成功 影響した各テストファイル (test-codex-loop-cli.sh 42/42, test-codex-package.sh 25/25, test-harness-accept.sh 66/66, test-harness-plan-brief.sh 32/32, test-plan-brief-e2e.sh 30/30 など) は全て既存合格数を維持。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012ZBxNEtYJbtHkZcsAn8nsv | 1 个月前 | |
fix(tests,scripts): pipefail 下の producer|grep -q 34 箇所を herestring 化 (Phase 130.2) Phase 129 の検出器は producer を printf/echo/cat の 3 種に限定していたため、 jq/find/git/grep/head/シェル関数呼び出しなどを producer とする同型の欠陥が 検出網から漏れていた。tests/test-i18n-locale-resolver.sh:196 で実測したところ、 `jq -r '...' <<< "$x" | grep -q '応答言語: 日本語'` は 20/20 で「無い」と 誤判定された (探す文字列は先頭 4 byte 目に実在する)。 対象 14 ファイル 34 箇所を herestring/変数捕捉へ書き換えた: - producer が変数の場合はそのまま `grep -q P <<<"$x"` へ - producer がコマンド/関数呼び出しの場合は `X="$(producer)"; grep -q P <<<"$X"` へ分解 (task-completed.sh の _signal_exists、test-tool-first-onboarding.sh の section_for 呼び出しなど) - test-codex-loop-cli.sh の `&&` 連結 3 段判定、test-hermes-agent-candidate.sh の 3 段パイプライン (最終段のみ EPIPE リスクがあるため最終段だけ分解) も対応 producer 側の exit status が元々検証されていなかった箇所には `|| true` を 付けて capture したが、これは grep 側の判定を変えない (最終アサーションは そのまま維持され、producer 失敗時も従来どおりのフェイルメッセージへ落ちる)。 RED: tests/test-i18n-locale-resolver.sh を修正前で 20 回連続実行し 19/20 失敗 GREEN: 同テストを修正後で 20 回連続実行し 20/20 成功 影響した各テストファイル (test-codex-loop-cli.sh 42/42, test-codex-package.sh 25/25, test-harness-accept.sh 66/66, test-harness-plan-brief.sh 32/32, test-plan-brief-e2e.sh 30/30 など) は全て既存合格数を維持。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012ZBxNEtYJbtHkZcsAn8nsv | 1 个月前 | |
fix(hooks): isolate Codex plugin hook config | 2 个月前 | |
fix: complete phase 56 codex follow-ups (#116) * docs: align repo structure and skill summary docs * fix: complete phase 56 codex follow-ups * fix: make statusline cache mtime portable | 4 个月前 | |
fix: protect codex setup from skill symlink hazards | 4 个月前 | |
feat(guard,hooks,runtimefloor): port main-line security hardening to redesign (109.1a) branch-alignment ledger の port 対象 4 機能を this branch の構造に合わせ再実装: 1. hooks.json (dual) の valid_root wrapper 全 64 箇所から CLAUDE_PROJECT_DIR/ $PWD fallback を除去し installed cache 限定 + plugin.json identity check 必須化 (main 3cc09d1d 相当、repo-shadow による hook 権限コード実行を封鎖) 2. pretooluse-guard.sh に bookkeeping 免除 + TOCTOU hardening 一式 (add/reset/separator 除外 / -a/pathspec/-- 除外 / token 分解で unquoted pathspec 検出 / multiline$() fail-closed / --patch/--interactive 除外 / 監査 append)。109.5 harness-release multi-commit flow の #219 同型ブロック回避 3. SubagentStop reviewer-persist backstop を Go native 再実装 (main 5249ad76 相当、transcript から review-result.v1 抽出 → state 書込、外部 script exec なしで trust boundary クリーン) 4. runtimefloor egress owner-scope 免除を additive 追加 (main d9b3fd34 相当、 secret-read allowlist と非衝突) test: test-hooks-trusted-root / test-commit-guard 11 / test-release-multi-commit / backstop unit / runtimefloor egress、全 PASS。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0184cS3XYLitPZkhHp5KgYeq | 2 个月前 | |
Map composer trigger to cursor backend (#195) Squash merge PR #195 after diff review, local validation, and green GitHub checks. | 3 个月前 | |
feat(guardrail): 配線漏れ検出ゲートと防御層の影響確認規約を追加する (132.4/132.5)、work-mode の土台を入れる (132.3 未完) 今日の一次原因は「skip 経路が実装済みなのに、それを立てる producer が repo 内に一つも無い」ことだった。個別修正だけでなく、同型欠陥を機械検知する 仕組みと、事故を繰り返さないための規約を同時に入れる。 ## 132.4 — 配線漏れ検出ゲート (新規) scripts/ci/check-config-knob-wiring.sh: go/internal/guardrail と go/internal/policy が os.Getenv で読む HARNESS_* / ULTRAWORK_* の各キーに producer があるか、templates/registry/operator-supplied-knobs.v1.yaml へ operator 供給として登録済みかを検証する。tests/validate-plugin.sh から実行。 初回実行で 13 キー中 10 件違反。判明済みの 2 件に加え、同型の未配線が 8 件 見つかった (HARNESS_BREEZING_ROLE / HARNESS_CODEX_MODE / HARNESS_ACTIVE_PHASE / HARNESS_ACTIVE_TASK / HARNESS_TDD_* 4 件)。とくに HARNESS_BREEZING_ROLE は R08 (breezing reviewer の書き込み禁止) が読むため、Reviewer 制約が発火して いない疑いがある。ゲートを green で着地させるため registry へ grandfather 登録したが、registry 本文に「追認ではなく一時退避」と明記し、triage は Plans.md 132.6 として起票した。 走査漏れの回帰網 (新規 os.Getenv を fixture に足して検出されること) を含む。 ## 132.5 — 防御層の影響確認規約 (新規) .claude/rules/defense-layer-blast-radius.md + CLAUDE.md からの参照。 2026-08-10 に同型の事故を 2 回起こした (sandbox の denyRead で gh CLI と git credential helper を破壊、sandbox 有効化で DNS と SSH 設定読取を遮断し 本番到達不能) ことを一次情報として codify。層ごとの影響範囲、強制力と 適用範囲の反比例、追加前 5 点チェック、excludedCommands がサブプロセスへ 継承されない事実、user scope 昇格前の 1 プロジェクト検証を定める。 check-consistency.sh に存在と必須フレーズ 4 件のチェックを追加し、 変異検査 (フレーズを削ると検知) で実効性を確認。 ## 132.3 — work-mode の土台 (未完、blocked) harness work-mode <on/off/status> と work_states の読み書きを実装。 session ID 未解決時は非ゼロ終了。work_states の FOREIGN KEY を満たすため 既存 sessions 行が無いときだけ最小行を作る (無条件 upsert は mode / context_json を潰す。この退行はテストで pin)。 ただし独立レビューと実測で、session ID の解決先が誤っていることが判明した。 ReadLocalSessionID が読む .claude/state/session.json はセッション監視の 状態ファイルで、内部生成の timestamp ベース ID を持つ。Claude Code が hook に 渡す実 session_id とは別物。実測: work-mode on 後も、実 ID の payload に対して R04 は ask のまま = 効いていない。 初回の DoD(a) 検証は CLI が書いた ID をそのまま hook へ渡していたため 自作自演だった。この点を含め work_mode.go 冒頭に KNOWN GAP として明記し、 Plans.md 132.3 は blocked、識別子の修正を 132.7 として起票した。 現時点で /breezing の停止を止めているのは operator が設定する HARNESS_WORK_MODE=1 (env)。 ## その他 - doctor_test.go に t.Setenv("CLAUDE_PLUGIN_DATA", "") を追加。 ResolveStatePath が同 env を最優先するため、Claude Code セッション内でのみ 失敗し CI では通る状態だった。アサーションは一切緩めていない (env 経路は TestDoctor_CheckStateDB_ViaEnv が別途カバー)。 - CHANGELOG の [Unreleased] に ### Added を二重に作っていたのを既存節へ統合。 - Plans.md の Status セルに未エスケープの | があり依存クロージャ検査が 壊れていたのを修正。 検証: go test ./... 47 パッケージ PASS (TestLeaseReclaim_ConcurrentSlowPath が 全体実行時に 1 度 FAIL したが単独では 3/3 PASS の flaky。hookhandler は未変更)、 gofmt/vet clean、check-consistency.sh 25/25、mirror in-sync、 配線漏れゲート 13 キー 0 違反、その契約テスト 4/4。binary 4 種を再ビルド。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PCi5GLAfya9aWYnDc7cmhs | 1 个月前 | |
feat(phase-65.3.6): cross-project-audit.v1 audit log + HTML 監査サマリ Phase C cycle 6/7。Cross-project search が走ったときの監査ログと、 生成 HTML 末尾への redaction サマリ表示を追加。プライバシー保護のため クエリ文字列は sha256 hash のみ記録。 Changes: - scripts/cross-project-audit-log.sh: 新規 schema_version: cross-project-audit.v1 fields: timestamp / group_name / member_projects[] / query_hash (sha256) / redaction_count.{dict, ner} / output_passed_final_scan --query-hash は 64 chars hex 強制 (生クエリ漏れ防止) default 出力先: .claude/state/audit/cross-project-search.jsonl (gitignored) append-only (>>) で 1 行ずつ追加 - scripts/render-html.sh: 拡張 --audit-group <name> / --audit-members <csv> / --audit-query-hash <hex> (3 つ揃って初めて audit log を append) Layer 2a/2b の stderr ("redacted: N tokens/entities") から件数を parse HTML 最下部に <div class="audit-summary"> で「redacted: dict X 件 + NER Y 件」を表示 (template 著者の他コードを傷つけないよう </body> 直前に挿入、無ければ末尾 append) final scan 失敗時も audit log に passed_final_scan: false で記録 してから exit 1 (Plans.md DoD e の Case 3 対応) - tests/test-cross-project-audit.sh: 21 PASS / 0 FAIL Plans.md DoD (e) の 3 ケース (redaction 0 / 複数 / final scan 失敗) + audit-log.sh 単体検証 + クエリ生記録なし検証 + append-only 検証 + --audit-group なしなら append しない検証 + schema validation - tests/validate-plugin.sh: 新テスト登録 (56 → 57 件) Validation: - bash tests/test-cross-project-audit.sh: 21 PASS / 0 FAIL - ./tests/validate-plugin.sh: 57 PASS / 0 FAIL - bash scripts/ci/check-consistency.sh: 全合格 Refs: Plans.md §65.3.6, D43 (decisions.md) | 4 个月前 | |
feat(phase-65.3.5): --cross-project-group flag opt-in (skill side, D43 Option α) Phase C cycle 5/7。harness-plan-brief / harness-accept 両 skill に 横断プロジェクト検索の opt-in flag を追加。flag 不在時は Phase 65.1.x の挙動 (project-only) を完全維持し、flag ありの時のみ N-call cross search を実行する。 Changes: - skills/harness-plan-brief/SKILL.md: Step 2 を default (project-only) と alt (cross-project opt-in) の 2 系統に分割。alt 系統は load-cross-project-groups.sh で member 解決 → 各 project で MCP search を 1 回ずつ発行 → client 側でマージ・ dedupe (id 単位)・relevance_score 降順 sort → top 5 (D43 Option α) flag ありの場合は --with-redaction 必須 (D43 判断 4 / Layer 2-3) - skills/harness-accept/SKILL.md: 同パターン cross-project の取得結果は user_request_hash でフィルタ (Plan Brief 側の hash と join、結果が他案件と混在しないよう注意) - tests/test-cross-project-flag.sh: 18 PASS / 0 FAIL Plans.md DoD (e) の 4 ケース (flag 不在 / 有効 group / 無効 group / 空 group) に加え、SKILL.md の D43 / --with-redaction 言及を機械検証 - tests/validate-plugin.sh: 新テスト登録 (55 → 56 件) Validation: - bash tests/test-cross-project-flag.sh: 18 PASS / 0 FAIL - ./tests/validate-plugin.sh: 56 PASS / 0 FAIL - bash scripts/ci/check-consistency.sh: 全合格 (i18n gate 含む) Refs: Plans.md §65.3.5, D43 (decisions.md), .claude/rules/cross-repo-handoff.md | 4 个月前 | |
feat(phase-65.3.1): cross-project-group.v1 schema + yaml loader (Phase C kickoff) Phase C: Cross-Project Group + 3-Layer Redaction の最初のタスク。 横断プロジェクト検索を opt-in で有効化するためのグループ定義 SSOT スキーマと、yaml → JSON parser/validator を追加する。 Changes: - .claude/rules/cross-project-groups.yaml: 新規 SSOT、初期 groups: [] (default 横断検索無効、明示的 opt-in 設計) - docs/cross-project-groups-schema.md: cross-project-group.v1 schema 仕様 (制約、バリデーション、CLI 利用例、D43 Option α flow) - scripts/load-cross-project-groups.sh: bash → python3 launcher (deleted-concepts.yaml と同じパターン、PyYAML 依存) --group <name> で member 配列出力、不正 schema は exit 1 - tests/test-cross-project-groups-schema.sh: 21 assertion 機械検証 Plans.md DoD (d) の 4 ケース (空 / 1 group / member 重複 / 不正 schema) に加え、name 空文字 / schema_version mismatch / file not found / group not found を網羅 - tests/validate-plugin.sh: 新テスト登録 (51 → 52 件) Validation: - bash tests/test-cross-project-groups-schema.sh: 21 PASS / 0 FAIL - ./tests/validate-plugin.sh: 52 PASS / 0 FAIL - bash scripts/ci/check-consistency.sh: 全合格 Plans.md §65.3.1 → cc:WIP (commit 完了後 cc:完了 で別 commit) Refs: Plans.md §65.3.1, D43 (decisions.md), .claude/rules/cross-repo-handoff.md | 4 个月前 | |
feat(phase-65.3.7): Phase 65.3.x e2e validation — Phase C complete Phase C 最終 cycle 7/7。Phase 65.3.x の全層 (group resolve / dict / NER / Layer 3 / audit / envelope / sentinel guard) を 1 fixture で 通し検証する e2e テスト。 Validation coverage (Plans.md §65.3.7 DoD a-h): - (a) fixture group (3 member projects) を yaml SSOT で定義し resolve - (b) merged Plan Brief data fixture に proper nouns を仕込む (NoraiCorp / YorozuPro / 田中 / 佐藤) + envelope-like signals/prose + 既存 [REDACTED_email] mark - (c) 出力 HTML に proper nouns が含まれないことを Plans.md 指定の grep -E "(NoraiCorp|YorozuPro|田中|佐藤)" で 0 件確認 - (d) audit log (cross-project-audit.v1) に dict 7 件 / NER 6 件 / passed_final_scan: true / 3 member projects / sha256 query_hash が正しく記録、生クエリ未漏洩を確認 - (e) ./tests/validate-plugin.sh: 58 PASS (53+ requirement クリア) - (f) bash scripts/ci/check-consistency.sh: 全合格 - (g) envelope (signals + prose) 構造への redaction で signals 側 label=NoraiCorp が label=[Client_E2E_A] に redact、source/label フィールドの structural 整合性が保たれることを確認 - (h) 既存 [REDACTED_email] は Layer 2/3 で再置換されず preserve (二重置換ガード) + Layer 2a の出力 [Client_E2E_A] も Layer 2b で再 redact されない (idempotency) Test result: 21 PASS / 0 FAIL Phase C cumulative validation: - Total tests: 58 PASS / 0 FAIL (Phase A: 51 → Phase B: 51 → Phase C: 58) - Phase C 内訳: 65.3.1 (21) + 65.3.2 (26) + 65.3.3 (22) + 65.3.4 (16) + 65.3.5 (18) + 65.3.6 (21) + 65.3.7 (21) = 145 assertion Phase C delivered: - Cross-Project Group SSOT (cross-project-group.v1) - 3-Layer Redaction (Layer 2a dict + Layer 2b NER + Layer 3 final scan) - D43 Option α (MCP N-call cross-project search) skill 統合 - Audit log (cross-project-audit.v1) + HTML 監査サマリ - Sentinel guard for [REDACTED_*] / [Entity] / [Client_*] / [Person_*] / [Domain_*] (二重置換防止) - Total 7 tasks done in 1 session Refs: Plans.md §65.3.1-65.3.7, D43 (decisions.md), .claude/rules/cross-repo-handoff.md | 4 个月前 | |
test(hosts): RED — re-pin claim/wording tests to supported tier (111.3.3/111.4.4/111.5.4) Failing against unchanged docs: - test-support-claim-wording: missing '| Codex CLI | `supported` |' in README.md - test-readme-product-surface: missing 'Codex CLI | `supported`' in README.md - test-public-claims-contract: codex tier must be supported (H8 pin) Co-authored-by: Cursor <cursoragent@cursor.com> | 1 个月前 | |
feat(phase-133): 外部ツール最新仕様への追随 5 件を完了する Phase 133.1 / 133.2 / 133.4 / 133.5 / 133.6 を実装し、Phase D の 独立レビュー 2 系統 (デグレ観点 / 正当性観点) の指摘 6 件を修正した。 ## 133.1 cursor CLI binary 名の追随 公式 docs が全例を `agent` 表記に統一し `cursor-agent` を legacy alias としたため、`agent` → `cursor-agent` の順に probe する。`agent` は汎用名 なので、symlink 解決後の実パス「成分」が厳密に `cursor-agent` の場合だけ 採用する identity check を併設した。判定のために未知のバイナリを実行し ない (実行こそが避けたいリスクのため)。解決サイトは 5 系統に適用。 レビュー指摘: 当初は部分文字列一致で、`/x/cursor-agent-not-really/agent` で突破できた。成分の完全一致へ修正し、衝突ケースの回帰テスト A3c を追加。 ## 133.2 grok execution backend 起票時の前提が実測で覆った。hosts.toml の根拠は grok-cli v1.1.7 (TypeScript) だったが、実機の grok は 0.2.118 "Grok Build TUI" (Rust) で 別系統。`grok inspect` は claude 互換で hooks on を報告し、 `hook pre-tool --host grok` は `--host claude` と byte 一致の判定を返す。 欠けていたのは CCH 側の配布 (`build_grok()` が hooks を同梱しない)。 裁定は (b) hook なし execution backend + CCH 側封じ込め (decisions.md D58)。 `scripts/grok-companion.sh` + テストを追加し、hosts.toml の evidence を訂正。 ## 133.4 repair loop の状態外部化 反復状態を `.claude/state/repair-loop/<task>.json` へ外部化し、 MAX_REVIEWS 上限を `check` の終了コードで機械判定する。 レビュー指摘 3 件を修正: (a) record の read-modify-write を lock で直列化 (並行 10 プロセスで 9 件消失していた)、(b) findings を schema と同じ制約で 検証 (schema ファイルが飾りになっていた)、(c) `check` の exit 1 が「上限 到達」と「判定不能」の両方を意味していたため 4 を分離 (init 忘れが 「レビュー上限到達」として誤報されるのを防ぐ)。 ## 133.5 blind judge rubric を見せない第二審を opt-in で追加。judge は plain な fresh sub-agent で spawn し `context: fork` は使わない (fork は親文脈を継承 しうるため rubric が漏れる)。乖離は advisory finding に留め、verdict を 書き換えない。 ## 133.6 CC CLI 新機能の一次ソース検証 raw CHANGELOG を直読して 4 件を確証 (2.1.217 / 2.1.219 / 2.1.224)。 credential-masking は macOS で deny にフォールバックするため、denyRead 回避策の置き換えは提案に留め未採用。 ## 検証 - tests/validate-plugin.sh 139 合格 / 0 失敗 / 0 警告 - scripts/ci/check-consistency.sh 全合格 - 新規テスト 3 本を validate-plugin.sh へ配線 - 変異検査で新規アサーション 5 件が実装の違いを検出することを確認 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PCi5GLAfya9aWYnDc7cmhs | 30 天前 | |
feat(cursor): add cursor-agent CLI fact-check evidence and static smoke Phase 82.1/82.2: record local (no-network) fact-check of cursor-agent CLI into the candidate evidence doc and add a static tri-state smoke test for the cursor-agent binary. Route B (OpenAI-compatible bridge) is documented as out of verification scope (double-agent problem). Cursor stays candidate; no support claim added. Test is static-only and not registered in validate-plugin.sh so it never gates merge on a network call. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> | 3 个月前 | |
refactor(skills): Jobs-lens cut — remove vanity/redundant entry points (21→16 commands) ユーザーが覚えるコマンドを 21→16 に削減 (北極星「人間は判断だけ」に対し入口過多を解消): - 削除: harness-orchestration (backend 利用量の自慢スコアカード、判断非寄与) - 削除: cursor-rescue (1 backend の例外復旧を top command 化は過剰、cursor-setup/docs へ集約) - 内部化: harness-plan-brief / harness-progress / harness-accept を user-invocable:false (105.1 の自動提示は維持=disable-model-invocation なし、パレットからのみ除外) - breezing / harness-work は両方維持 (user 判断: breezing はユーザー多数、work は核 4 動詞) リップル掃除: 削除 skill を叩く test-orchestration-summary.sh 削除、cursor-rescue 参照を test-cursor-backend-codex-wiring / test-codex-package / test-generate-skill-manifest / .codex-plugin から除去。 retired-alias registry 登録。residue scan 0 / validate-plugin 全 PASS / mirror in-sync。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> | 2 个月前 | |
feat(backend): Codex-host backend wiring (83.9) + cursor backend onboarding (83.10) 83.9: wire Execution Backend Selection into skills-codex/harness-work (+breezing) so driving from the Codex host honors HARNESS_IMPL_BACKEND (resolve-impl-backend.sh), role-scoped (review/advisor stay Opus), cursor via cursor-companion. Model literal defers to model-routing.sh (drift note). 83.10: harness-setup onboarding section splitting AI-runnable set-impl-backend.sh vs MANUAL protected-path steps (permissions.json/.cursorignore/*.cursor.sh allowlist), referencing cursor-cli-only.md + sandbox-allowlist-recipe.md. 2 contract tests wired into validate-plugin.sh. Mirrors synced. cursor stays candidate. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> | 3 个月前 | |
feat(phase-133): 外部ツール最新仕様への追随 5 件を完了する Phase 133.1 / 133.2 / 133.4 / 133.5 / 133.6 を実装し、Phase D の 独立レビュー 2 系統 (デグレ観点 / 正当性観点) の指摘 6 件を修正した。 ## 133.1 cursor CLI binary 名の追随 公式 docs が全例を `agent` 表記に統一し `cursor-agent` を legacy alias としたため、`agent` → `cursor-agent` の順に probe する。`agent` は汎用名 なので、symlink 解決後の実パス「成分」が厳密に `cursor-agent` の場合だけ 採用する identity check を併設した。判定のために未知のバイナリを実行し ない (実行こそが避けたいリスクのため)。解決サイトは 5 系統に適用。 レビュー指摘: 当初は部分文字列一致で、`/x/cursor-agent-not-really/agent` で突破できた。成分の完全一致へ修正し、衝突ケースの回帰テスト A3c を追加。 ## 133.2 grok execution backend 起票時の前提が実測で覆った。hosts.toml の根拠は grok-cli v1.1.7 (TypeScript) だったが、実機の grok は 0.2.118 "Grok Build TUI" (Rust) で 別系統。`grok inspect` は claude 互換で hooks on を報告し、 `hook pre-tool --host grok` は `--host claude` と byte 一致の判定を返す。 欠けていたのは CCH 側の配布 (`build_grok()` が hooks を同梱しない)。 裁定は (b) hook なし execution backend + CCH 側封じ込め (decisions.md D58)。 `scripts/grok-companion.sh` + テストを追加し、hosts.toml の evidence を訂正。 ## 133.4 repair loop の状態外部化 反復状態を `.claude/state/repair-loop/<task>.json` へ外部化し、 MAX_REVIEWS 上限を `check` の終了コードで機械判定する。 レビュー指摘 3 件を修正: (a) record の read-modify-write を lock で直列化 (並行 10 プロセスで 9 件消失していた)、(b) findings を schema と同じ制約で 検証 (schema ファイルが飾りになっていた)、(c) `check` の exit 1 が「上限 到達」と「判定不能」の両方を意味していたため 4 を分離 (init 忘れが 「レビュー上限到達」として誤報されるのを防ぐ)。 ## 133.5 blind judge rubric を見せない第二審を opt-in で追加。judge は plain な fresh sub-agent で spawn し `context: fork` は使わない (fork は親文脈を継承 しうるため rubric が漏れる)。乖離は advisory finding に留め、verdict を 書き換えない。 ## 133.6 CC CLI 新機能の一次ソース検証 raw CHANGELOG を直読して 4 件を確証 (2.1.217 / 2.1.219 / 2.1.224)。 credential-masking は macOS で deny にフォールバックするため、denyRead 回避策の置き換えは提案に留め未採用。 ## 検証 - tests/validate-plugin.sh 139 合格 / 0 失敗 / 0 警告 - scripts/ci/check-consistency.sh 全合格 - 新規テスト 3 本を validate-plugin.sh へ配線 - 変異検査で新規アサーション 5 件が実装の違いを検出することを確認 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PCi5GLAfya9aWYnDc7cmhs | 30 天前 | |
feat(selfaudit-baseline): deny entry baseline hash regression detection with subset check (Phase 96.1.4) Co-authored-by: Cursor <cursoragent@cursor.com> | 2 个月前 | |
fix(tests,scripts): pipefail 下の `producer | grep -q` 173 箇所を herestring へ一掃 (Phase 129) (#286) * fix(tests,scripts): pipefail 下の `producer | grep -q` 173 箇所を herestring へ一掃 PR #285 で実害 2 箇所を直したが、同じ書き方が 173 箇所残っていた。 `grep -q` は最初の一致で終了してパイプを閉じるため、分割書き込み中の producer が EPIPE で失敗する。`set -o pipefail` がその失敗をパイプライン 全体の結果へ昇格させるので、探す文字列が実在するのに「無い」と判定される。 一致が入力の前方にあるほど再現するため、合否が「探す文字列が何行目にあるか」 で決まる状態だった。 - tests/test-pipefail-grep-q-safety.sh を新設 (Phase 129.1)。 静的走査で該当箇所を検出し、fixture 8 件で除外条件を固定 (pipefail 無し / `|| true` / herestring / grep -c / コメント行 / 引用符内) - tests/ 39 ファイル 131 箇所、scripts/ 19 ファイル 42 箇所を変換 (Phase 129.2 / 129.3) - tests/validate-plugin.sh に節 19 を配線し、 tests/test-validate-plugin-wiring.sh の pin にも追加 (Phase 129.4)。 検査の除去には 2 つの独立したファイルの変更が必要になる 引用符認識を実装した過程で、旧パターンが取りこぼしていた 3 段パイプライン (`echo | jq | grep -qi`) を 1 件発見し、変数経由に分解した。 実測: - 検出件数 173 → 0 - 変換部分は追加 172 / 削除 172 の 1 対 1 (アサーション削除・期待値緩和ゼロ) - bash -n 全 58 ファイル OK (行末継続 `\` を壊した 4 箇所はここで検出し修正) - shellcheck warning は変換前後とも 29 件で同数、herestring 起因の新規指摘ゼロ - validate-plugin 132 合格 0 失敗 (131 + 新設 1 節) - check-consistency 全 24 通過 (変換対象に check-consistency.sh 自身を含む) - go test ./... 0 失敗、VERSION / plugin.json / harness.toml 非接触 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * docs(plan): Phase 129 完走 — 全 4 task を cc:done に更新 129.1 検出テスト新設 / 129.2 tests/ 131 箇所 / 129.3 scripts/ 42 箇所 / 129.4 配線 + closeout。各 task の Status に実測値を記録した。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(tests): 検出器の 2 件の欠陥を修正 (CodeRabbit 指摘) いずれも実測で再現を確認してから修正した。 - 行継続を跨ぐパイプラインの検出漏れ: `perl -ne` が物理行ごとに走査するため、 行末の `\` で分割された `printf ... \ | grep -q ...` を見落としていた。 物理行を論理行へ畳んでから走査する。行番号は論理行の開始位置を報告する - 引用符内のエスケープの誤解釈: 二重引用符の中の `\"` を閉じ引用符と解釈し、 後続の `| grep -q` が引用符の外に見えて誤検出していた。二重引用符の中でのみ `\` をエスケープとして扱う (単一引用符の中では shell の仕様どおり扱わない) fixture は 8 件 → 10 件。CHANGELOG に Before/After 表を追加した。 改良後の検出器を変更前ツリーへ適用すると 168 箇所 (旧実装は 173)。差の 5 件は 行継続の畳み込みによる数え方の違いで、検出漏れではない。物理行 782・783 を 2 件と数えていたものが論理行の開始 781 の 1 件になる。該当箇所は目視で 変換の正しさを確認済み。 検証: validate-plugin 132 合格 0 失敗、check-consistency 全 24 通過。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: tachibanashuuta <tachibana@canai.jp> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> | 1 个月前 | |
feat(cursor): host-specific dist cleanup and internal-compatible promotion (#174) Add host-specific plugin dist builder, Cursor real-directory install via setup-cursor.sh, and promote Cursor to internal-compatible with aligned docs, onboarding, tests, and release-preflight gates. Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com> | 3 个月前 | |
fix(guardrails): allow public env templates | 2 个月前 | |
feat: add New Harness V2 host adapters Add tool-first onboarding, support-tier boundaries, Codex CLI plugin smoke, OpenCode bootstrap validation, migration reporting, and Phase 74 repo-health gates. | 3 个月前 | |
fix(tests,scripts): pipefail 下の `producer | grep -q` 173 箇所を herestring へ一掃 (Phase 129) (#286) * fix(tests,scripts): pipefail 下の `producer | grep -q` 173 箇所を herestring へ一掃 PR #285 で実害 2 箇所を直したが、同じ書き方が 173 箇所残っていた。 `grep -q` は最初の一致で終了してパイプを閉じるため、分割書き込み中の producer が EPIPE で失敗する。`set -o pipefail` がその失敗をパイプライン 全体の結果へ昇格させるので、探す文字列が実在するのに「無い」と判定される。 一致が入力の前方にあるほど再現するため、合否が「探す文字列が何行目にあるか」 で決まる状態だった。 - tests/test-pipefail-grep-q-safety.sh を新設 (Phase 129.1)。 静的走査で該当箇所を検出し、fixture 8 件で除外条件を固定 (pipefail 無し / `|| true` / herestring / grep -c / コメント行 / 引用符内) - tests/ 39 ファイル 131 箇所、scripts/ 19 ファイル 42 箇所を変換 (Phase 129.2 / 129.3) - tests/validate-plugin.sh に節 19 を配線し、 tests/test-validate-plugin-wiring.sh の pin にも追加 (Phase 129.4)。 検査の除去には 2 つの独立したファイルの変更が必要になる 引用符認識を実装した過程で、旧パターンが取りこぼしていた 3 段パイプライン (`echo | jq | grep -qi`) を 1 件発見し、変数経由に分解した。 実測: - 検出件数 173 → 0 - 変換部分は追加 172 / 削除 172 の 1 対 1 (アサーション削除・期待値緩和ゼロ) - bash -n 全 58 ファイル OK (行末継続 `\` を壊した 4 箇所はここで検出し修正) - shellcheck warning は変換前後とも 29 件で同数、herestring 起因の新規指摘ゼロ - validate-plugin 132 合格 0 失敗 (131 + 新設 1 節) - check-consistency 全 24 通過 (変換対象に check-consistency.sh 自身を含む) - go test ./... 0 失敗、VERSION / plugin.json / harness.toml 非接触 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * docs(plan): Phase 129 完走 — 全 4 task を cc:done に更新 129.1 検出テスト新設 / 129.2 tests/ 131 箇所 / 129.3 scripts/ 42 箇所 / 129.4 配線 + closeout。各 task の Status に実測値を記録した。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(tests): 検出器の 2 件の欠陥を修正 (CodeRabbit 指摘) いずれも実測で再現を確認してから修正した。 - 行継続を跨ぐパイプラインの検出漏れ: `perl -ne` が物理行ごとに走査するため、 行末の `\` で分割された `printf ... \ | grep -q ...` を見落としていた。 物理行を論理行へ畳んでから走査する。行番号は論理行の開始位置を報告する - 引用符内のエスケープの誤解釈: 二重引用符の中の `\"` を閉じ引用符と解釈し、 後続の `| grep -q` が引用符の外に見えて誤検出していた。二重引用符の中でのみ `\` をエスケープとして扱う (単一引用符の中では shell の仕様どおり扱わない) fixture は 8 件 → 10 件。CHANGELOG に Before/After 表を追加した。 改良後の検出器を変更前ツリーへ適用すると 168 箇所 (旧実装は 173)。差の 5 件は 行継続の畳み込みによる数え方の違いで、検出漏れではない。物理行 782・783 を 2 件と数えていたものが論理行の開始 781 の 1 件になる。該当箇所は目視で 変換の正しさを確認済み。 検証: validate-plugin 132 合格 0 失敗、check-consistency 全 24 通過。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: tachibanashuuta <tachibana@canai.jp> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> | 1 个月前 | |
feat: add New Harness V2 host adapters Add tool-first onboarding, support-tier boundaries, Codex CLI plugin smoke, OpenCode bootstrap validation, migration reporting, and Phase 74 repo-health gates. | 3 个月前 | |
feat: add skill orchestration contracts | 4 个月前 | |
feat(harness-loop): finish phase 41 follow-ups | 4 个月前 | |
fix(review): REQUEST_CHANGES 対応 — major 4 件 + minor 3 件 - Stop 全体再検査の cross-session 誤 block: changed-files.jsonl に session_id を記録し、 現 session の entry のみ検査 (旧形式 entry は保守的に skip)。DroppedScope も同修正 - writing-rule 昇格の regex 未検証: harness writing-rule-vet subcommand (RE2 compile + 型/列挙検証、fail-closed) を approve 経路に追加。ScanText は不正 rule を skip して 続行し invalidRuleIDs を診断で返す (1 件の誤承認で全体無効化しない) - browser-review-runner の stale .webm 混入: run 開始 marker より新しい録画のみ収集 - scope leash enforce 時の自己 deny: .claude/ 配下を exempt + 判定を role 登録後へ移動 - posttooluse_writing_lint の config path を resolveProjectRoot 基準に統一 (CWD 非依存) - worker.md の NG 参照を NG-1〜4 に更新 / Plans.md の Phase 138 重複ヘッダー解消 - skill manifest pin に japanese-writing-drafter を追加 (意図した新 skill の反映) 各修正に回帰テスト付き。binary 4 平台再ビルド + drift gate PASS。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TFcsXBG95kTdxPfDaP7Vuu | 27 天前 | |
feat(loop): add advisor sprint contract and direct codex task runner | 4 个月前 | |
feat: add New Harness V2 host adapters Add tool-first onboarding, support-tier boundaries, Codex CLI plugin smoke, OpenCode bootstrap validation, migration reporting, and Phase 74 repo-health gates. | 3 个月前 | |
feat: helper を library 化 + 4 状態 unit test + archive pattern docs (Phase 64.1.3) ## 変更概要 - tests/lib/grep_plans_or_archive.sh (新規) — helper 関数を共有 library として切り出し - GPOA_PLANS_FILE / GPOA_ARCHIVE_DIR 環境変数で test override 可能 - tests/test-claude-upstream-integration.sh — inline helper 定義を library source に置換 (DRY) - tests/test-grep-plans-or-archive.sh (新規) — helper の 4 状態 unit test - PlansHit / ArchiveHit / BothHit / Miss を fixture + assert で固定 - docs/plans-archive-pattern.md (新規) — Plans.md archive 運用パターンの SSOT - 命名規則、操作手順、helper 仕様、retroactive validation、git track 設定をまとめる ## DoD checklist (Phase 64.1.3) - [x] (a) archive 直前 commit (20c60c0a) と archive 後 HEAD の双方で test PASS - HEAD: bash tests/test-claude-upstream-integration.sh OK - 20c60c0a: 同 test OK (当時の inline helper でも archive 不在時は Plans.md 直接 grep が PASS) - [x] (b) grep_plans_or_archive helper 4 状態 unit test (tests/test-grep-plans-or-archive.sh) - PASS=4 FAIL=0 (PlansHit / ArchiveHit / BothHit / Miss) - [x] (c) check-residue.sh 0 件 (.claude/rules/migration-policy.md ルール 5 false positive ゼロ) - [x] (d) docs/plans-archive-pattern.md 新規作成、将来の archive 操作で再発防止 - 追加: helper を library 化することで test と production code の DRY を確保 ## 検証成果 - bash tests/test-grep-plans-or-archive.sh: PASS=4 FAIL=0 - bash tests/test-claude-upstream-integration.sh: OK (helper を library source 経由) - ./tests/validate-plugin.sh: 48/48 PASS - bash scripts/ci/check-consistency.sh: ✅ 全合格 - bash scripts/check-residue.sh: 0 件 ## 既知の運用上の注意 (docs に記録) - .claude-plugin/settings.json drift bug (本 session で 3 度観測) — 別 issue 追跡 - 過去 archive 22 件は機密確認後に別 PR で個別 add (今回 commit は新規 archive のみ) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> | 4 个月前 | |
fix(routing): grok のモデル pin を実カタログへ訂正する (Phase 133.7) operator 承認 (2026-08-13)。 ## 何が壊れていたか `scripts/model-routing.sh` の grok pin 5 種は **1 つも実在しなかった**。 grok へ委譲を始めた瞬間に全 tier が失敗する状態だった。 原因は 2 世代連続で同じ取り違えをしたこと。根拠にしていた `grok-cli` (TypeScript, LocalWork/Code/grok-cli) は、実際に動く `grok 0.2.118` ("Grok Build TUI", Rust) とは**同名の別プロダクト**だった。 皮肉なことに 2 世代前の `grok-4.5` は実在した。当時のコメントは `observed 2026-07-09 on CLI 0.2.93` — 実バイナリでの観測だった。 source tree を読んで「訂正」したことで、正しい値が誤った値になっていた。 ## 実カタログ `grok 0.2.118` が cli-chat-proxy.grok.com/v1/models から取得した アカウントカタログは 2 つだけ: - grok-4.6 既定 / frontier / 500k ctx / effort xhigh|high|medium|low - grok-4.5 500k ctx / effort high|medium|low tier 割当: lite,standard=grok-4.5 / deep,advisor,review=grok-4.6 xhigh / release,long-context=grok-4.6 high ## 4 層すべてへ降下 scripts/model-routing.sh (正本) / hosts.toml / docs/model-routing-policy.md (tier 表 + role 表 + 注記) / docs/research/grok-adapter-candidate.md ## 回帰網の強化 effort 検査を平坦な許可リストから **モデル別** に変更した。grok-4.5 は xhigh を受け付けないため、平坦なリストでは不正な組み合わせを取りこぼす。 昨日追加した docs<->SSOT ゲートが 3 回ドリフトを検出し、その都度潰した。 ゲートが実働していることの確認にもなった。 Plans.md 133.7 / decisions.md D58 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PCi5GLAfya9aWYnDc7cmhs | 30 天前 | |
feat(phase-133): 外部ツール最新仕様への追随 5 件を完了する Phase 133.1 / 133.2 / 133.4 / 133.5 / 133.6 を実装し、Phase D の 独立レビュー 2 系統 (デグレ観点 / 正当性観点) の指摘 6 件を修正した。 ## 133.1 cursor CLI binary 名の追随 公式 docs が全例を `agent` 表記に統一し `cursor-agent` を legacy alias としたため、`agent` → `cursor-agent` の順に probe する。`agent` は汎用名 なので、symlink 解決後の実パス「成分」が厳密に `cursor-agent` の場合だけ 採用する identity check を併設した。判定のために未知のバイナリを実行し ない (実行こそが避けたいリスクのため)。解決サイトは 5 系統に適用。 レビュー指摘: 当初は部分文字列一致で、`/x/cursor-agent-not-really/agent` で突破できた。成分の完全一致へ修正し、衝突ケースの回帰テスト A3c を追加。 ## 133.2 grok execution backend 起票時の前提が実測で覆った。hosts.toml の根拠は grok-cli v1.1.7 (TypeScript) だったが、実機の grok は 0.2.118 "Grok Build TUI" (Rust) で 別系統。`grok inspect` は claude 互換で hooks on を報告し、 `hook pre-tool --host grok` は `--host claude` と byte 一致の判定を返す。 欠けていたのは CCH 側の配布 (`build_grok()` が hooks を同梱しない)。 裁定は (b) hook なし execution backend + CCH 側封じ込め (decisions.md D58)。 `scripts/grok-companion.sh` + テストを追加し、hosts.toml の evidence を訂正。 ## 133.4 repair loop の状態外部化 反復状態を `.claude/state/repair-loop/<task>.json` へ外部化し、 MAX_REVIEWS 上限を `check` の終了コードで機械判定する。 レビュー指摘 3 件を修正: (a) record の read-modify-write を lock で直列化 (並行 10 プロセスで 9 件消失していた)、(b) findings を schema と同じ制約で 検証 (schema ファイルが飾りになっていた)、(c) `check` の exit 1 が「上限 到達」と「判定不能」の両方を意味していたため 4 を分離 (init 忘れが 「レビュー上限到達」として誤報されるのを防ぐ)。 ## 133.5 blind judge rubric を見せない第二審を opt-in で追加。judge は plain な fresh sub-agent で spawn し `context: fork` は使わない (fork は親文脈を継承 しうるため rubric が漏れる)。乖離は advisory finding に留め、verdict を 書き換えない。 ## 133.6 CC CLI 新機能の一次ソース検証 raw CHANGELOG を直読して 4 件を確証 (2.1.217 / 2.1.219 / 2.1.224)。 credential-masking は macOS で deny にフォールバックするため、denyRead 回避策の置き換えは提案に留め未採用。 ## 検証 - tests/validate-plugin.sh 139 合格 / 0 失敗 / 0 警告 - scripts/ci/check-consistency.sh 全合格 - 新規テスト 3 本を validate-plugin.sh へ配線 - 変異検査で新規アサーション 5 件が実装の違いを検出することを確認 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PCi5GLAfya9aWYnDc7cmhs | 30 天前 | |
test(guardrails): CC 2.1.110 regression tests for R01-R13 re-conformance (Phase 44.3.1) 3 new scenario groups in cc2110_regression_test.go: (a) PermissionRequest updatedInput + setMode — deny rules (R01,R02,R06) still apply when CC re-evaluates PreToolUse with the updated input; setMode=dontAsk in updatedPermissions does not bypass the guardrail layer. (b) additionalContext persistence — PreToolOutput.AdditionalContext survives JSON round-trip (simulates CC reading hook output after tool failure); R09 warning path verified end-to-end. (c) Bash bypass vectors — compound commands (;, &&, ||), subshell expansion, backtick, heredoc, unknown env-var prefixes now all caught. Fixes hasSudo() to detect privileged commands inside subshell/backtick contexts (pattern extended to include shell metacharacters: (, |, &, `, ;). settings.json deny list (18 entries) unchanged. CLAUDE.md integrity marker last-audit=2026-04-07 verified — no reduction. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> | 4 个月前 | |
feat(verification): Phase 134-137 — 検証チェーン配線修理 + writing lint + surface + ループ施策 Phase 134: 入口 (risk_flags→profile 自動昇格 + ratchet) / 中間 (PENDING_BROWSER fail-visible, pending_validations) / 出口 (accept-collect-evidence.sh による artifact 機械接続) の 3 継ぎ目を接続。scope leash 本配線 (warn 既定)、Playwright Screencast evidence、worker-report.v1 永続化、再調査ループ、検証の検証 (check-verification-chain-wiring.sh + 実効性契約テスト 3 本、RED→GREEN 実測)。 Phase 135: writinglint エンジン (辞書は個人層) + PostToolUse advisory + Stop 全体再検査 + 指摘→ルール自動ドラフト→人間承認ループ + config schema 正式化。 Phase 136: 3 surface スマホ viewport / 承認待ちキュー表示 / diagram-design 接続点。 Phase 137: 採点設計規律 (criteria 3 層翻訳) / blind 受け手検査 / 評価者 4 契約。 decisions.md D62-D68 に判断根拠を記録。worker 契約に NG-4 追加。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TFcsXBG95kTdxPfDaP7Vuu | 27 天前 | |
fix: close skill drift and release preflight gaps | 4 个月前 | |
fix(tests,scripts): pipefail 下の `producer | grep -q` 173 箇所を herestring へ一掃 (Phase 129) (#286) * fix(tests,scripts): pipefail 下の `producer | grep -q` 173 箇所を herestring へ一掃 PR #285 で実害 2 箇所を直したが、同じ書き方が 173 箇所残っていた。 `grep -q` は最初の一致で終了してパイプを閉じるため、分割書き込み中の producer が EPIPE で失敗する。`set -o pipefail` がその失敗をパイプライン 全体の結果へ昇格させるので、探す文字列が実在するのに「無い」と判定される。 一致が入力の前方にあるほど再現するため、合否が「探す文字列が何行目にあるか」 で決まる状態だった。 - tests/test-pipefail-grep-q-safety.sh を新設 (Phase 129.1)。 静的走査で該当箇所を検出し、fixture 8 件で除外条件を固定 (pipefail 無し / `|| true` / herestring / grep -c / コメント行 / 引用符内) - tests/ 39 ファイル 131 箇所、scripts/ 19 ファイル 42 箇所を変換 (Phase 129.2 / 129.3) - tests/validate-plugin.sh に節 19 を配線し、 tests/test-validate-plugin-wiring.sh の pin にも追加 (Phase 129.4)。 検査の除去には 2 つの独立したファイルの変更が必要になる 引用符認識を実装した過程で、旧パターンが取りこぼしていた 3 段パイプライン (`echo | jq | grep -qi`) を 1 件発見し、変数経由に分解した。 実測: - 検出件数 173 → 0 - 変換部分は追加 172 / 削除 172 の 1 対 1 (アサーション削除・期待値緩和ゼロ) - bash -n 全 58 ファイル OK (行末継続 `\` を壊した 4 箇所はここで検出し修正) - shellcheck warning は変換前後とも 29 件で同数、herestring 起因の新規指摘ゼロ - validate-plugin 132 合格 0 失敗 (131 + 新設 1 節) - check-consistency 全 24 通過 (変換対象に check-consistency.sh 自身を含む) - go test ./... 0 失敗、VERSION / plugin.json / harness.toml 非接触 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * docs(plan): Phase 129 完走 — 全 4 task を cc:done に更新 129.1 検出テスト新設 / 129.2 tests/ 131 箇所 / 129.3 scripts/ 42 箇所 / 129.4 配線 + closeout。各 task の Status に実測値を記録した。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(tests): 検出器の 2 件の欠陥を修正 (CodeRabbit 指摘) いずれも実測で再現を確認してから修正した。 - 行継続を跨ぐパイプラインの検出漏れ: `perl -ne` が物理行ごとに走査するため、 行末の `\` で分割された `printf ... \ | grep -q ...` を見落としていた。 物理行を論理行へ畳んでから走査する。行番号は論理行の開始位置を報告する - 引用符内のエスケープの誤解釈: 二重引用符の中の `\"` を閉じ引用符と解釈し、 後続の `| grep -q` が引用符の外に見えて誤検出していた。二重引用符の中でのみ `\` をエスケープとして扱う (単一引用符の中では shell の仕様どおり扱わない) fixture は 8 件 → 10 件。CHANGELOG に Before/After 表を追加した。 改良後の検出器を変更前ツリーへ適用すると 168 箇所 (旧実装は 173)。差の 5 件は 行継続の畳み込みによる数え方の違いで、検出漏れではない。物理行 782・783 を 2 件と数えていたものが論理行の開始 781 の 1 件になる。該当箇所は目視で 変換の正しさを確認済み。 検証: validate-plugin 132 合格 0 失敗、check-consistency 全 24 通過。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: tachibanashuuta <tachibana@canai.jp> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> | 1 个月前 | |
refactor: stale 依存テスト 4 件に skip-pass design guard を追加 clean public checkout で false failure を出していた 4 件のテストに、 `tests/test-memory-lifecycle-integration.sh` で確立した 「skip / require / override」3 状態 design upgrade を適用する。 各 test は対象ファイル不在時に exit 0 で skip-pass し、 HARNESS_MEM_REQUIRE=1 など explicit な CI gate flag が あれば fail に転じる contract に統一した。 これにより `for t in tests/*.sh; do bash "$t"; done` 形式の sweep でも false failure が発生しなくなる。 ## 修正内容 ### 1. tests/test-memory-lifecycle-integration.sh 姉妹 repo `../harness-mem` を要求する local-only test。 - 不在時に `cd` failure で exit 1 → skip exit 0 に変更 - HARNESS_MEM_REPO=/abs/path で custom 場所指定可 - HARNESS_MEM_REQUIRE=1 で fail 強制 (CI gate) ### 2. tests/test-harness-mem-bridge.sh v2.20.10 で削除された `scripts/harness-mem-client.sh` (Phase 60 managed-companion 移行) を test する stale wrapper。 - 不在時に exit 1 → skip exit 0 - 同 3 状態 contract (REPO / REQUIRE flag) 採用 ### 3. tests/test-quality-guardrails.sh 2 件の「FAIL 出力 + exit 0」曖昧 assertion を skip-pass に整理: - AGENTS.md (Codex CLI local config; 配布対象外) - docs/update-summary-2025-12-23-24.md (品質ガード導入時の一時 doc; 統合済み) ### 4. tests/test-release-version-sync.sh local-only mirror `.agents/skills/harness-release/SKILL.md` を ループ assert していた。clean checkout で `grep: No such file` 警告 + FAIL 出力 (exit は 0) → ループ内で `[skip]` continue に統一。 ## 影響範囲 - validate-plugin.sh: 48/48 PASS (regression 無し) - check-consistency.sh: ✅ 全合格 (regression 無し) - check-residue.sh: ✅ migration residue 0 件 - 4 件のテスト個別実行: skip / pass を意図通り出力 ## test-quality.md 整合性 「skip 化禁止」条項とは異なる正当な skip: - アサーション回避目的 (= 禁止) ではなく - 配布対象外ファイル / 局所 mirror に対する前提条件不足時の guard - 既存の Phase 52 `claude-codex-upstream-update` skip pattern と 同じ設計 (`skip: ... is local-only in clean public checkouts`) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> | 4 个月前 | |
fix(tests,scripts): pipefail 下の producer|grep -q 34 箇所を herestring 化 (Phase 130.2) Phase 129 の検出器は producer を printf/echo/cat の 3 種に限定していたため、 jq/find/git/grep/head/シェル関数呼び出しなどを producer とする同型の欠陥が 検出網から漏れていた。tests/test-i18n-locale-resolver.sh:196 で実測したところ、 `jq -r '...' <<< "$x" | grep -q '応答言語: 日本語'` は 20/20 で「無い」と 誤判定された (探す文字列は先頭 4 byte 目に実在する)。 対象 14 ファイル 34 箇所を herestring/変数捕捉へ書き換えた: - producer が変数の場合はそのまま `grep -q P <<<"$x"` へ - producer がコマンド/関数呼び出しの場合は `X="$(producer)"; grep -q P <<<"$X"` へ分解 (task-completed.sh の _signal_exists、test-tool-first-onboarding.sh の section_for 呼び出しなど) - test-codex-loop-cli.sh の `&&` 連結 3 段判定、test-hermes-agent-candidate.sh の 3 段パイプライン (最終段のみ EPIPE リスクがあるため最終段だけ分解) も対応 producer 側の exit status が元々検証されていなかった箇所には `|| true` を 付けて capture したが、これは grep 側の判定を変えない (最終アサーションは そのまま維持され、producer 失敗時も従来どおりのフェイルメッセージへ落ちる)。 RED: tests/test-i18n-locale-resolver.sh を修正前で 20 回連続実行し 19/20 失敗 GREEN: 同テストを修正後で 20 回連続実行し 20/20 成功 影響した各テストファイル (test-codex-loop-cli.sh 42/42, test-codex-package.sh 25/25, test-harness-accept.sh 66/66, test-harness-plan-brief.sh 32/32, test-plan-brief-e2e.sh 30/30 など) は全て既存合格数を維持。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012ZBxNEtYJbtHkZcsAn8nsv | 1 个月前 | |
feat(phase-80): upstream refresh for Claude 2.1.143-2.1.152 and Codex 0.131-0.134 Adopt disallowed-tools, reload-skills guidance, MessageDisplay opt-in policy, Codex --profile primary routing, model-routing helper, and integration tests. Mirror opencode/codex harness-plan updates from reviewed work. Co-authored-by: Cursor <cursoragent@cursor.com> | 3 个月前 | |
feat: announce next session commands after planning | 4 个月前 | |
feat(verification): Phase 134-137 — 検証チェーン配線修理 + writing lint + surface + ループ施策 Phase 134: 入口 (risk_flags→profile 自動昇格 + ratchet) / 中間 (PENDING_BROWSER fail-visible, pending_validations) / 出口 (accept-collect-evidence.sh による artifact 機械接続) の 3 継ぎ目を接続。scope leash 本配線 (warn 既定)、Playwright Screencast evidence、worker-report.v1 永続化、再調査ループ、検証の検証 (check-verification-chain-wiring.sh + 実効性契約テスト 3 本、RED→GREEN 実測)。 Phase 135: writinglint エンジン (辞書は個人層) + PostToolUse advisory + Stop 全体再検査 + 指摘→ルール自動ドラフト→人間承認ループ + config schema 正式化。 Phase 136: 3 surface スマホ viewport / 承認待ちキュー表示 / diagram-design 接続点。 Phase 137: 採点設計規律 (criteria 3 層翻訳) / blind 受け手検査 / 評価者 4 契約。 decisions.md D62-D68 に判断根拠を記録。worker 契約に NG-4 追加。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TFcsXBG95kTdxPfDaP7Vuu | 27 天前 | |
chore(release): v4.11.3 - slash command UX 2-layer fix + P35 codify Fix the "looks stuck" UX problem in slash commands (e.g. /harness-release, /harness-review) where output is delivered via <local-command-stdout> and gets prefilled into the input box without a clear completion signal. Two-layer fix: - Layer 1 (host Claude summarization contract, applies to all slash commands automatically): CLAUDE.md (project) Notes section gets a new rule. When <local-command-stdout> is long (10+ lines), host Claude must produce a 1-3 line assistant-message summary and explicitly state the next action (wait / done / user decision). - Layer 2 (skill-side instruction line literal): harness-release and harness-review SKILL.md (SSOT + codex mirror + opencode mirror = 6 files) get an Output Contract section right after the AUTO-START Contract. The skill must include the literal: "↑この結果は Claude が要約します。Enter キーで次へ進むか、新規 prompt で別の指示を出してください。" at the end of its response. Codify P35 in .claude/memory/patterns.md (gitignored local SSOT) so the harness-work / ci skills and any other user-invocable skill can adopt the same pattern via grep. P35 records the 2-layer division of responsibility (host vs skill) and the future application table. Strengthen governance tests: - tests/test-harness-release-governance.sh: required_terms gains the instruction-line literal. - tests/test-harness-review-governance.sh: required_skill_terms gains the same literal. Release metadata: - VERSION / plugin.json / marketplace.json / harness.toml: 4.11.2 -> 4.11.3 - CHANGELOG: [Unreleased] (empty) + new [4.11.3] section above [4.11.2]. Scope: harness-release + harness-review only for Layer 2 in this patch. harness-work / ci are tracked via P35 SSOT and will be picked up in the next minor release. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> | 3 个月前 | |
chore(release): v4.11.3 - slash command UX 2-layer fix + P35 codify Fix the "looks stuck" UX problem in slash commands (e.g. /harness-release, /harness-review) where output is delivered via <local-command-stdout> and gets prefilled into the input box without a clear completion signal. Two-layer fix: - Layer 1 (host Claude summarization contract, applies to all slash commands automatically): CLAUDE.md (project) Notes section gets a new rule. When <local-command-stdout> is long (10+ lines), host Claude must produce a 1-3 line assistant-message summary and explicitly state the next action (wait / done / user decision). - Layer 2 (skill-side instruction line literal): harness-release and harness-review SKILL.md (SSOT + codex mirror + opencode mirror = 6 files) get an Output Contract section right after the AUTO-START Contract. The skill must include the literal: "↑この結果は Claude が要約します。Enter キーで次へ進むか、新規 prompt で別の指示を出してください。" at the end of its response. Codify P35 in .claude/memory/patterns.md (gitignored local SSOT) so the harness-work / ci skills and any other user-invocable skill can adopt the same pattern via grep. P35 records the 2-layer division of responsibility (host vs skill) and the future application table. Strengthen governance tests: - tests/test-harness-release-governance.sh: required_terms gains the instruction-line literal. - tests/test-harness-review-governance.sh: required_skill_terms gains the same literal. Release metadata: - VERSION / plugin.json / marketplace.json / harness.toml: 4.11.2 -> 4.11.3 - CHANGELOG: [Unreleased] (empty) + new [4.11.3] section above [4.11.2]. Scope: harness-release + harness-review only for Layer 2 in this patch. harness-work / ci are tracked via P35 SSOT and will be picked up in the next minor release. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> | 3 个月前 | |
fix(i18n): localize harness-work completion reports | 2 个月前 | |
fix(tests,scripts): pipefail 下の producer|grep -q 34 箇所を herestring 化 (Phase 130.2) Phase 129 の検出器は producer を printf/echo/cat の 3 種に限定していたため、 jq/find/git/grep/head/シェル関数呼び出しなどを producer とする同型の欠陥が 検出網から漏れていた。tests/test-i18n-locale-resolver.sh:196 で実測したところ、 `jq -r '...' <<< "$x" | grep -q '応答言語: 日本語'` は 20/20 で「無い」と 誤判定された (探す文字列は先頭 4 byte 目に実在する)。 対象 14 ファイル 34 箇所を herestring/変数捕捉へ書き換えた: - producer が変数の場合はそのまま `grep -q P <<<"$x"` へ - producer がコマンド/関数呼び出しの場合は `X="$(producer)"; grep -q P <<<"$X"` へ分解 (task-completed.sh の _signal_exists、test-tool-first-onboarding.sh の section_for 呼び出しなど) - test-codex-loop-cli.sh の `&&` 連結 3 段判定、test-hermes-agent-candidate.sh の 3 段パイプライン (最終段のみ EPIPE リスクがあるため最終段だけ分解) も対応 producer 側の exit status が元々検証されていなかった箇所には `|| true` を 付けて capture したが、これは grep 側の判定を変えない (最終アサーションは そのまま維持され、producer 失敗時も従来どおりのフェイルメッセージへ落ちる)。 RED: tests/test-i18n-locale-resolver.sh を修正前で 20 回連続実行し 19/20 失敗 GREEN: 同テストを修正後で 20 回連続実行し 20/20 成功 影響した各テストファイル (test-codex-loop-cli.sh 42/42, test-codex-package.sh 25/25, test-harness-accept.sh 66/66, test-harness-plan-brief.sh 32/32, test-plan-brief-e2e.sh 30/30 など) は全て既存合格数を維持。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012ZBxNEtYJbtHkZcsAn8nsv | 1 个月前 | |
Use grep in Hokage readiness test | 3 个月前 | |
fix(tests,scripts): pipefail 下の producer|grep -q 34 箇所を herestring 化 (Phase 130.2) Phase 129 の検出器は producer を printf/echo/cat の 3 種に限定していたため、 jq/find/git/grep/head/シェル関数呼び出しなどを producer とする同型の欠陥が 検出網から漏れていた。tests/test-i18n-locale-resolver.sh:196 で実測したところ、 `jq -r '...' <<< "$x" | grep -q '応答言語: 日本語'` は 20/20 で「無い」と 誤判定された (探す文字列は先頭 4 byte 目に実在する)。 対象 14 ファイル 34 箇所を herestring/変数捕捉へ書き換えた: - producer が変数の場合はそのまま `grep -q P <<<"$x"` へ - producer がコマンド/関数呼び出しの場合は `X="$(producer)"; grep -q P <<<"$X"` へ分解 (task-completed.sh の _signal_exists、test-tool-first-onboarding.sh の section_for 呼び出しなど) - test-codex-loop-cli.sh の `&&` 連結 3 段判定、test-hermes-agent-candidate.sh の 3 段パイプライン (最終段のみ EPIPE リスクがあるため最終段だけ分解) も対応 producer 側の exit status が元々検証されていなかった箇所には `|| true` を 付けて capture したが、これは grep 側の判定を変えない (最終アサーションは そのまま維持され、producer 失敗時も従来どおりのフェイルメッセージへ落ちる)。 RED: tests/test-i18n-locale-resolver.sh を修正前で 20 回連続実行し 19/20 失敗 GREEN: 同テストを修正後で 20 回連続実行し 20/20 成功 影響した各テストファイル (test-codex-loop-cli.sh 42/42, test-codex-package.sh 25/25, test-harness-accept.sh 66/66, test-harness-plan-brief.sh 32/32, test-plan-brief-e2e.sh 30/30 など) は全て既存合格数を維持。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012ZBxNEtYJbtHkZcsAn8nsv | 1 个月前 | |
feat: Phase 62.2.1-62.2.5 — Tier 2 governance/telemetry/policy 実装 5 つの Tier 2 タスクを実装: 62.2.1 (PostToolUse.updatedToolOutput governance): - scripts/hook-handlers/posttool-output-normalize.sh (新規) opt-in handler HARNESS_OUTPUT_GOVERNANCE_ENABLE=1 で有効化、API key redaction を allowlist 方式で - .claude/state/output-audit.jsonl に before/after を append-only 記録 - JSON 契約 tool (Read/Grep/Bash/TodoWrite) は skip - tests/test-output-governance.sh (新規) 6 ケース PASS (改ざん用途は実装に存在しないことを source 検査で固定) 62.2.2 (--agent permissionMode reaffirmation): - tests/test-agent-permission-mode.sh (新規) 5 観点 PASS - worker/reviewer/scaffolder/advisor の frontmatter に permissionMode が無いことを固定 (Phase 59.2.3 方針) - Reviewer の Read-only enforcement は tools/disallowedTools の組み合わせで担保 - CC 2.1.119+ で permissionMode が reactivate された場合の gate として機能 62.2.3 (skill_activated.invocation_trigger telemetry): - docs/skill-telemetry-policy.md (新規) privacy/retention/opt-out - scripts/skill-trigger-telemetry.sh (新規) JSON Lines append-only ledger writer session_id を 12 文字に truncate (privacy minimization) - tests/test-skill-trigger-telemetry.sh (新規) 5 観点 PASS (3 trigger 区別 / opt-out / exclude / append-only / session_id truncation) - Phase 58.2.3 の「telemetry sink 設計が先」判断を local-only sink で実装 62.2.4 (CLAUDE_CODE_SESSION_ID env policy): - docs/session-id-env-policy.md (新規) 4 経路の使い分け (1) hook handler は stdin JSON が SSOT (2) Bash 子プロセスは env var (CC 2.1.132+) (3) long-running watcher は state file (4) CLAUDE_TRANSCRIPT_PATH regex は使わない (legacy) - tests/test-hook-handler-session-id.sh (新規) 6 観点 PASS hook handlers が stdin JSON 経由で session_id を取得することを固定 62.2.5 (skillOverrides 3 mode governance): - docs/skill-overrides-policy.md (新規) off / user-invocable-only / name-only の使い分け - 推奨: 個人=未設定、enterprise=name-only、education=user-invocable-only - harness-init は default を入れない (CC default 尊重) - Phase 59.1.2 skill manifest との関係を明記 横断: - tests/test-settings-baseline.sh (新規) 62.1.4 + 62.2.5 共通の baseline 検証 template canonical (9 件) を強制、.claude-plugin/settings.json 不一致は WARN として記録 (self-protection guardrail で edit 不可のため user 手動同期が必要) User 手動操作 follow-up (cycle 1 から継続): - .claude-plugin/settings.json の deniedDomains を template に合わせて 6 件追加 (pastebin.com, transfer.sh, 0x0.st, paste.ee, termbin.com, ix.io) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> | 4 个月前 | |
feat(livemsg): wire Stop turn-boundary inbox delivery for claude host + zero-unread silence (Task 121.3) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> | 1 个月前 | |
fix(hooks): harden Windows fast path and WIP stop gate | 2 个月前 | |
fix(dist): grok 自己完結 closure と test-host-plugin-dist の期待値を整合させる 9a192025 (2026-08-14) は grok dist に .claude-plugin/plugin.json + hooks/ + bin/harness を意図的に同梱した (valid_root bootstrap が両方揃うディレクトリ しか root と認めず、無いと guardrail が exit 0 で黙って skip されるため)。 しかし tests/test-host-plugin-dist.sh の assert_absent は更新されておらず、 release-preflight.sh の host plugin dist gate が該当コミット以降ずっと FAIL していた (validate-plugin.sh 経由では検知されない経路)。 assert_absent(.claude-plugin) を、9a192025 が実装した closure 契約 (plugin.json / hooks.json / bin/harness の存在) を確認する assert_present 3 本に置き換えた。codex-plugin / cursor-plugin の absent 判定は変更なし。 | 27 天前 | |
feat(hosts): Phase 111.2–111.6 structural workflow smoke and Grok internal-compatible Add host smoke library and multi-host structural plan artifacts, CI structural smoke, HostGrok hookcodec floor membership, known multi-host limitations, and N+1 examplehost stub. Promote Grok to internal-compatible only; keep public supported deferred (blocked) for Codex/Cursor/Grok until live H4. | 2 个月前 | |
feat(hosts): Phase 111.2–111.6 structural workflow smoke and Grok internal-compatible Add host smoke library and multi-host structural plan artifacts, CI structural smoke, HostGrok hookcodec floor membership, known multi-host limitations, and N+1 examplehost stub. Promote Grok to internal-compatible only; keep public supported deferred (blocked) for Codex/Cursor/Grok until live H4. | 2 个月前 | |
feat(hosts): Phase 111.2–111.6 structural workflow smoke and Grok internal-compatible Add host smoke library and multi-host structural plan artifacts, CI structural smoke, HostGrok hookcodec floor membership, known multi-host limitations, and N+1 examplehost stub. Promote Grok to internal-compatible only; keep public supported deferred (blocked) for Codex/Cursor/Grok until live H4. | 2 个月前 | |
fix: harden runtime security and language defaults Fix Issue #155 runtime security surfaces and Issue #154 English-default language contract. Rebuild bundled harness binaries and add SECURITY.md. | 3 个月前 | |
fix(tests,scripts): pipefail 下の producer|grep -q 34 箇所を herestring 化 (Phase 130.2) Phase 129 の検出器は producer を printf/echo/cat の 3 種に限定していたため、 jq/find/git/grep/head/シェル関数呼び出しなどを producer とする同型の欠陥が 検出網から漏れていた。tests/test-i18n-locale-resolver.sh:196 で実測したところ、 `jq -r '...' <<< "$x" | grep -q '応答言語: 日本語'` は 20/20 で「無い」と 誤判定された (探す文字列は先頭 4 byte 目に実在する)。 対象 14 ファイル 34 箇所を herestring/変数捕捉へ書き換えた: - producer が変数の場合はそのまま `grep -q P <<<"$x"` へ - producer がコマンド/関数呼び出しの場合は `X="$(producer)"; grep -q P <<<"$X"` へ分解 (task-completed.sh の _signal_exists、test-tool-first-onboarding.sh の section_for 呼び出しなど) - test-codex-loop-cli.sh の `&&` 連結 3 段判定、test-hermes-agent-candidate.sh の 3 段パイプライン (最終段のみ EPIPE リスクがあるため最終段だけ分解) も対応 producer 側の exit status が元々検証されていなかった箇所には `|| true` を 付けて capture したが、これは grep 側の判定を変えない (最終アサーションは そのまま維持され、producer 失敗時も従来どおりのフェイルメッセージへ落ちる)。 RED: tests/test-i18n-locale-resolver.sh を修正前で 20 回連続実行し 19/20 失敗 GREEN: 同テストを修正後で 20 回連続実行し 20/20 成功 影響した各テストファイル (test-codex-loop-cli.sh 42/42, test-codex-package.sh 25/25, test-harness-accept.sh 66/66, test-harness-plan-brief.sh 32/32, test-plan-brief-e2e.sh 30/30 など) は全て既存合格数を維持。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012ZBxNEtYJbtHkZcsAn8nsv | 1 个月前 | |
fix(tests,scripts): pipefail 下の producer|grep -q 34 箇所を herestring 化 (Phase 130.2) Phase 129 の検出器は producer を printf/echo/cat の 3 種に限定していたため、 jq/find/git/grep/head/シェル関数呼び出しなどを producer とする同型の欠陥が 検出網から漏れていた。tests/test-i18n-locale-resolver.sh:196 で実測したところ、 `jq -r '...' <<< "$x" | grep -q '応答言語: 日本語'` は 20/20 で「無い」と 誤判定された (探す文字列は先頭 4 byte 目に実在する)。 対象 14 ファイル 34 箇所を herestring/変数捕捉へ書き換えた: - producer が変数の場合はそのまま `grep -q P <<<"$x"` へ - producer がコマンド/関数呼び出しの場合は `X="$(producer)"; grep -q P <<<"$X"` へ分解 (task-completed.sh の _signal_exists、test-tool-first-onboarding.sh の section_for 呼び出しなど) - test-codex-loop-cli.sh の `&&` 連結 3 段判定、test-hermes-agent-candidate.sh の 3 段パイプライン (最終段のみ EPIPE リスクがあるため最終段だけ分解) も対応 producer 側の exit status が元々検証されていなかった箇所には `|| true` を 付けて capture したが、これは grep 側の判定を変えない (最終アサーションは そのまま維持され、producer 失敗時も従来どおりのフェイルメッセージへ落ちる)。 RED: tests/test-i18n-locale-resolver.sh を修正前で 20 回連続実行し 19/20 失敗 GREEN: 同テストを修正後で 20 回連続実行し 20/20 成功 影響した各テストファイル (test-codex-loop-cli.sh 42/42, test-codex-package.sh 25/25, test-harness-accept.sh 66/66, test-harness-plan-brief.sh 32/32, test-plan-brief-e2e.sh 30/30 など) は全て既存合格数を維持。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012ZBxNEtYJbtHkZcsAn8nsv | 1 个月前 | |
fix(distribution): harden opencode mirror gates | 3 个月前 | |
fix(distribution): harden opencode mirror gates | 3 个月前 | |
feat(cursor): enable Codex-hosted Cursor delegation | 3 个月前 | |
fix(hooks): harden Windows fast path and WIP stop gate | 2 个月前 | |
feat: add Java and Kotlin project detection | 2 个月前 | |
refactor(engine): Phase 104.4 — remove dead bridge/mailbox subsystem, unify impact_score to Go binary 到達不能の bridge/bridgedelivery/mailbox/triaddispatcher (~2100 行) を削除、 設計知見は spec.md L3 節へ翻訳記録。impact_score は bin/harness impact-score subcommand に 統一し judgment-card.sh を薄ラッパー化。judgment card 系は wired:no 注記で S3 配線待ち。 Implemented-by: Codex (gpt-5.5) via codex-companion, Lead-reviewed. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> | 2 个月前 | |
test(judgment-card-render): red — failing tests for HTML render (Phase 95.2.1) Co-authored-by: Cursor <cursoragent@cursor.com> | 2 个月前 | |
test(impactscore+judgment-card-v1): red — failing tests for v1 schema extension + impact_score (Phase 95.2.2) Co-authored-by: Cursor <cursoragent@cursor.com> | 2 个月前 | |
fix(tests,scripts): pipefail 下の `producer | grep -q` 173 箇所を herestring へ一掃 (Phase 129) (#286) * fix(tests,scripts): pipefail 下の `producer | grep -q` 173 箇所を herestring へ一掃 PR #285 で実害 2 箇所を直したが、同じ書き方が 173 箇所残っていた。 `grep -q` は最初の一致で終了してパイプを閉じるため、分割書き込み中の producer が EPIPE で失敗する。`set -o pipefail` がその失敗をパイプライン 全体の結果へ昇格させるので、探す文字列が実在するのに「無い」と判定される。 一致が入力の前方にあるほど再現するため、合否が「探す文字列が何行目にあるか」 で決まる状態だった。 - tests/test-pipefail-grep-q-safety.sh を新設 (Phase 129.1)。 静的走査で該当箇所を検出し、fixture 8 件で除外条件を固定 (pipefail 無し / `|| true` / herestring / grep -c / コメント行 / 引用符内) - tests/ 39 ファイル 131 箇所、scripts/ 19 ファイル 42 箇所を変換 (Phase 129.2 / 129.3) - tests/validate-plugin.sh に節 19 を配線し、 tests/test-validate-plugin-wiring.sh の pin にも追加 (Phase 129.4)。 検査の除去には 2 つの独立したファイルの変更が必要になる 引用符認識を実装した過程で、旧パターンが取りこぼしていた 3 段パイプライン (`echo | jq | grep -qi`) を 1 件発見し、変数経由に分解した。 実測: - 検出件数 173 → 0 - 変換部分は追加 172 / 削除 172 の 1 対 1 (アサーション削除・期待値緩和ゼロ) - bash -n 全 58 ファイル OK (行末継続 `\` を壊した 4 箇所はここで検出し修正) - shellcheck warning は変換前後とも 29 件で同数、herestring 起因の新規指摘ゼロ - validate-plugin 132 合格 0 失敗 (131 + 新設 1 節) - check-consistency 全 24 通過 (変換対象に check-consistency.sh 自身を含む) - go test ./... 0 失敗、VERSION / plugin.json / harness.toml 非接触 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * docs(plan): Phase 129 完走 — 全 4 task を cc:done に更新 129.1 検出テスト新設 / 129.2 tests/ 131 箇所 / 129.3 scripts/ 42 箇所 / 129.4 配線 + closeout。各 task の Status に実測値を記録した。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(tests): 検出器の 2 件の欠陥を修正 (CodeRabbit 指摘) いずれも実測で再現を確認してから修正した。 - 行継続を跨ぐパイプラインの検出漏れ: `perl -ne` が物理行ごとに走査するため、 行末の `\` で分割された `printf ... \ | grep -q ...` を見落としていた。 物理行を論理行へ畳んでから走査する。行番号は論理行の開始位置を報告する - 引用符内のエスケープの誤解釈: 二重引用符の中の `\"` を閉じ引用符と解釈し、 後続の `| grep -q` が引用符の外に見えて誤検出していた。二重引用符の中でのみ `\` をエスケープとして扱う (単一引用符の中では shell の仕様どおり扱わない) fixture は 8 件 → 10 件。CHANGELOG に Before/After 表を追加した。 改良後の検出器を変更前ツリーへ適用すると 168 箇所 (旧実装は 173)。差の 5 件は 行継続の畳み込みによる数え方の違いで、検出漏れではない。物理行 782・783 を 2 件と数えていたものが論理行の開始 781 の 1 件になる。該当箇所は目視で 変換の正しさを確認済み。 検証: validate-plugin 132 合格 0 失敗、check-consistency 全 24 通過。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: tachibanashuuta <tachibana@canai.jp> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> | 1 个月前 | |
test(impactscore+judgment-card-v1): red — failing tests for v1 schema extension + impact_score (Phase 95.2.2) Co-authored-by: Cursor <cursoragent@cursor.com> | 2 个月前 | |
fix(tests,scripts): pipefail 下の `producer | grep -q` 173 箇所を herestring へ一掃 (Phase 129) (#286) * fix(tests,scripts): pipefail 下の `producer | grep -q` 173 箇所を herestring へ一掃 PR #285 で実害 2 箇所を直したが、同じ書き方が 173 箇所残っていた。 `grep -q` は最初の一致で終了してパイプを閉じるため、分割書き込み中の producer が EPIPE で失敗する。`set -o pipefail` がその失敗をパイプライン 全体の結果へ昇格させるので、探す文字列が実在するのに「無い」と判定される。 一致が入力の前方にあるほど再現するため、合否が「探す文字列が何行目にあるか」 で決まる状態だった。 - tests/test-pipefail-grep-q-safety.sh を新設 (Phase 129.1)。 静的走査で該当箇所を検出し、fixture 8 件で除外条件を固定 (pipefail 無し / `|| true` / herestring / grep -c / コメント行 / 引用符内) - tests/ 39 ファイル 131 箇所、scripts/ 19 ファイル 42 箇所を変換 (Phase 129.2 / 129.3) - tests/validate-plugin.sh に節 19 を配線し、 tests/test-validate-plugin-wiring.sh の pin にも追加 (Phase 129.4)。 検査の除去には 2 つの独立したファイルの変更が必要になる 引用符認識を実装した過程で、旧パターンが取りこぼしていた 3 段パイプライン (`echo | jq | grep -qi`) を 1 件発見し、変数経由に分解した。 実測: - 検出件数 173 → 0 - 変換部分は追加 172 / 削除 172 の 1 対 1 (アサーション削除・期待値緩和ゼロ) - bash -n 全 58 ファイル OK (行末継続 `\` を壊した 4 箇所はここで検出し修正) - shellcheck warning は変換前後とも 29 件で同数、herestring 起因の新規指摘ゼロ - validate-plugin 132 合格 0 失敗 (131 + 新設 1 節) - check-consistency 全 24 通過 (変換対象に check-consistency.sh 自身を含む) - go test ./... 0 失敗、VERSION / plugin.json / harness.toml 非接触 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * docs(plan): Phase 129 完走 — 全 4 task を cc:done に更新 129.1 検出テスト新設 / 129.2 tests/ 131 箇所 / 129.3 scripts/ 42 箇所 / 129.4 配線 + closeout。各 task の Status に実測値を記録した。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(tests): 検出器の 2 件の欠陥を修正 (CodeRabbit 指摘) いずれも実測で再現を確認してから修正した。 - 行継続を跨ぐパイプラインの検出漏れ: `perl -ne` が物理行ごとに走査するため、 行末の `\` で分割された `printf ... \ | grep -q ...` を見落としていた。 物理行を論理行へ畳んでから走査する。行番号は論理行の開始位置を報告する - 引用符内のエスケープの誤解釈: 二重引用符の中の `\"` を閉じ引用符と解釈し、 後続の `| grep -q` が引用符の外に見えて誤検出していた。二重引用符の中でのみ `\` をエスケープとして扱う (単一引用符の中では shell の仕様どおり扱わない) fixture は 8 件 → 10 件。CHANGELOG に Before/After 表を追加した。 改良後の検出器を変更前ツリーへ適用すると 168 箇所 (旧実装は 173)。差の 5 件は 行継続の畳み込みによる数え方の違いで、検出漏れではない。物理行 782・783 を 2 件と数えていたものが論理行の開始 781 の 1 件になる。該当箇所は目視で 変換の正しさを確認済み。 検証: validate-plugin 132 合格 0 失敗、check-consistency 全 24 通過。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: tachibanashuuta <tachibana@canai.jp> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> | 1 个月前 | |
feat(judgment-ledger): Phase 98.1 — append-only learning ledger v1 judgment-card.v1 を append-only JSONL ledger 化し過去判断を検索・recall 可能に。 - templates/schemas/judgment-ledger.v1.json (record schema, additionalProperties:false) - go/internal/judgmentledger/ (ledger + schema + index + recall, fail-open) - scripts/judgment-ledger.sh append/search/recall (fail-open on write) - scripts/judgment-card.sh record-answer → ledger append 配線 + recall subcommand - judgment-card.v1.similar_past_decisions を recall layer で max 3 埋める - docs/judgment-ledger.md SSOT (7 章) + CHANGELOG [Unreleased] 既定値: ledger=.claude/state/judgment-ledger.jsonl (HARNESS_JUDGMENT_LEDGER で上書き), ranking=string-match (Lead 決定、stop_point 98.1.5), search/recall max 3。 go test ./internal/judgmentledger/... 全 PASS。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> | 2 个月前 | |
feat(judgment-ledger): Phase 98.1 — append-only learning ledger v1 judgment-card.v1 を append-only JSONL ledger 化し過去判断を検索・recall 可能に。 - templates/schemas/judgment-ledger.v1.json (record schema, additionalProperties:false) - go/internal/judgmentledger/ (ledger + schema + index + recall, fail-open) - scripts/judgment-ledger.sh append/search/recall (fail-open on write) - scripts/judgment-card.sh record-answer → ledger append 配線 + recall subcommand - judgment-card.v1.similar_past_decisions を recall layer で max 3 埋める - docs/judgment-ledger.md SSOT (7 章) + CHANGELOG [Unreleased] 既定値: ledger=.claude/state/judgment-ledger.jsonl (HARNESS_JUDGMENT_LEDGER で上書き), ranking=string-match (Lead 決定、stop_point 98.1.5), search/recall max 3。 go test ./internal/judgmentledger/... 全 PASS。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> | 2 个月前 | |
fix(tests,scripts): pipefail 下の `producer | grep -q` 173 箇所を herestring へ一掃 (Phase 129) (#286) * fix(tests,scripts): pipefail 下の `producer | grep -q` 173 箇所を herestring へ一掃 PR #285 で実害 2 箇所を直したが、同じ書き方が 173 箇所残っていた。 `grep -q` は最初の一致で終了してパイプを閉じるため、分割書き込み中の producer が EPIPE で失敗する。`set -o pipefail` がその失敗をパイプライン 全体の結果へ昇格させるので、探す文字列が実在するのに「無い」と判定される。 一致が入力の前方にあるほど再現するため、合否が「探す文字列が何行目にあるか」 で決まる状態だった。 - tests/test-pipefail-grep-q-safety.sh を新設 (Phase 129.1)。 静的走査で該当箇所を検出し、fixture 8 件で除外条件を固定 (pipefail 無し / `|| true` / herestring / grep -c / コメント行 / 引用符内) - tests/ 39 ファイル 131 箇所、scripts/ 19 ファイル 42 箇所を変換 (Phase 129.2 / 129.3) - tests/validate-plugin.sh に節 19 を配線し、 tests/test-validate-plugin-wiring.sh の pin にも追加 (Phase 129.4)。 検査の除去には 2 つの独立したファイルの変更が必要になる 引用符認識を実装した過程で、旧パターンが取りこぼしていた 3 段パイプライン (`echo | jq | grep -qi`) を 1 件発見し、変数経由に分解した。 実測: - 検出件数 173 → 0 - 変換部分は追加 172 / 削除 172 の 1 対 1 (アサーション削除・期待値緩和ゼロ) - bash -n 全 58 ファイル OK (行末継続 `\` を壊した 4 箇所はここで検出し修正) - shellcheck warning は変換前後とも 29 件で同数、herestring 起因の新規指摘ゼロ - validate-plugin 132 合格 0 失敗 (131 + 新設 1 節) - check-consistency 全 24 通過 (変換対象に check-consistency.sh 自身を含む) - go test ./... 0 失敗、VERSION / plugin.json / harness.toml 非接触 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * docs(plan): Phase 129 完走 — 全 4 task を cc:done に更新 129.1 検出テスト新設 / 129.2 tests/ 131 箇所 / 129.3 scripts/ 42 箇所 / 129.4 配線 + closeout。各 task の Status に実測値を記録した。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(tests): 検出器の 2 件の欠陥を修正 (CodeRabbit 指摘) いずれも実測で再現を確認してから修正した。 - 行継続を跨ぐパイプラインの検出漏れ: `perl -ne` が物理行ごとに走査するため、 行末の `\` で分割された `printf ... \ | grep -q ...` を見落としていた。 物理行を論理行へ畳んでから走査する。行番号は論理行の開始位置を報告する - 引用符内のエスケープの誤解釈: 二重引用符の中の `\"` を閉じ引用符と解釈し、 後続の `| grep -q` が引用符の外に見えて誤検出していた。二重引用符の中でのみ `\` をエスケープとして扱う (単一引用符の中では shell の仕様どおり扱わない) fixture は 8 件 → 10 件。CHANGELOG に Before/After 表を追加した。 改良後の検出器を変更前ツリーへ適用すると 168 箇所 (旧実装は 173)。差の 5 件は 行継続の畳み込みによる数え方の違いで、検出漏れではない。物理行 782・783 を 2 件と数えていたものが論理行の開始 781 の 1 件になる。該当箇所は目視で 変換の正しさを確認済み。 検証: validate-plugin 132 合格 0 失敗、check-consistency 全 24 通過。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: tachibanashuuta <tachibana@canai.jp> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> | 1 个月前 | |
test(lsp): pin LSP/AST workflow wiring contract (RED) RED evidence (run at c811ded5 before skill edits): $ bash tests/test-lsp-workflow-wiring.sh /private/tmp/cch-worker-115-lsp/skills/harness-work/SKILL.md is missing LSP workflow literal: If you grep the same symbol twice in the same session, switch to harness_ast_search. exit 1 Pins 3 English literals (ast_search switch rule / homologous-bugfix pre-search / conditional .ts-.tsx diagnostics DoD with not-configured fail-open) across 5 skill files, following the tests/test-claude-upstream-integration.sh format. Phase 115.1. Implemented via codex delegation (SA-10); commits created by Lead because the sandbox cannot write the shared .git of the linked worktree. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KBF1xmCMXGKNVagzvUzL6A | 1 个月前 | |
fix(review): Claude reviewer CRITICAL+MAJOR findings — R15 quoted-flag bypass, floor cross-line quote, ratchet //-in-string, orphan tests CRITICAL-1 [R15]: git "-C"/"-c"/"--git-dir" 引用符付き global flag で secret staging を bypass できた。 indexOfGitSubcommand の quoted short-circuit を除去 (引用符は git 的に無意味)。4 bypass の deny test 追加。 CRITICAL-2 [runtimefloor]: 105.8 の stripLineComment が行ごと引用符リセット → 複数行文字列の閉じ引用符行の # を誤コメント化し && cat <secret> を削除 (fail-open)。引用符状態を行またぎ伝播。cross-line deny test 追加。 MAJOR-3 [i18n ratchet]: awk の // strip が文字列内 https:// を認識せず localizer 閉じ ) を削除 → paren 漏れで ゲート自己無効化。quote-aware stripComment に置換。 MAJOR-4 [migration residue]: 削除済 bridgedelivery を叩く tests/test-bridge-delivery.sh 削除、 test-mem-read-layer.sh の triaddispatcher audit 行除去。 Reviewed-by: Claude Sonnet 5 reviewer (全 empirically verified). Lead 検証+修正+回帰 test. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> | 2 个月前 | |
feat: add skill orchestration contracts | 4 个月前 | |
fix(tests,scripts): pipefail 下の `producer | grep -q` 173 箇所を herestring へ一掃 (Phase 129) (#286) * fix(tests,scripts): pipefail 下の `producer | grep -q` 173 箇所を herestring へ一掃 PR #285 で実害 2 箇所を直したが、同じ書き方が 173 箇所残っていた。 `grep -q` は最初の一致で終了してパイプを閉じるため、分割書き込み中の producer が EPIPE で失敗する。`set -o pipefail` がその失敗をパイプライン 全体の結果へ昇格させるので、探す文字列が実在するのに「無い」と判定される。 一致が入力の前方にあるほど再現するため、合否が「探す文字列が何行目にあるか」 で決まる状態だった。 - tests/test-pipefail-grep-q-safety.sh を新設 (Phase 129.1)。 静的走査で該当箇所を検出し、fixture 8 件で除外条件を固定 (pipefail 無し / `|| true` / herestring / grep -c / コメント行 / 引用符内) - tests/ 39 ファイル 131 箇所、scripts/ 19 ファイル 42 箇所を変換 (Phase 129.2 / 129.3) - tests/validate-plugin.sh に節 19 を配線し、 tests/test-validate-plugin-wiring.sh の pin にも追加 (Phase 129.4)。 検査の除去には 2 つの独立したファイルの変更が必要になる 引用符認識を実装した過程で、旧パターンが取りこぼしていた 3 段パイプライン (`echo | jq | grep -qi`) を 1 件発見し、変数経由に分解した。 実測: - 検出件数 173 → 0 - 変換部分は追加 172 / 削除 172 の 1 対 1 (アサーション削除・期待値緩和ゼロ) - bash -n 全 58 ファイル OK (行末継続 `\` を壊した 4 箇所はここで検出し修正) - shellcheck warning は変換前後とも 29 件で同数、herestring 起因の新規指摘ゼロ - validate-plugin 132 合格 0 失敗 (131 + 新設 1 節) - check-consistency 全 24 通過 (変換対象に check-consistency.sh 自身を含む) - go test ./... 0 失敗、VERSION / plugin.json / harness.toml 非接触 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * docs(plan): Phase 129 完走 — 全 4 task を cc:done に更新 129.1 検出テスト新設 / 129.2 tests/ 131 箇所 / 129.3 scripts/ 42 箇所 / 129.4 配線 + closeout。各 task の Status に実測値を記録した。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(tests): 検出器の 2 件の欠陥を修正 (CodeRabbit 指摘) いずれも実測で再現を確認してから修正した。 - 行継続を跨ぐパイプラインの検出漏れ: `perl -ne` が物理行ごとに走査するため、 行末の `\` で分割された `printf ... \ | grep -q ...` を見落としていた。 物理行を論理行へ畳んでから走査する。行番号は論理行の開始位置を報告する - 引用符内のエスケープの誤解釈: 二重引用符の中の `\"` を閉じ引用符と解釈し、 後続の `| grep -q` が引用符の外に見えて誤検出していた。二重引用符の中でのみ `\` をエスケープとして扱う (単一引用符の中では shell の仕様どおり扱わない) fixture は 8 件 → 10 件。CHANGELOG に Before/After 表を追加した。 改良後の検出器を変更前ツリーへ適用すると 168 箇所 (旧実装は 173)。差の 5 件は 行継続の畳み込みによる数え方の違いで、検出漏れではない。物理行 782・783 を 2 件と数えていたものが論理行の開始 781 の 1 件になる。該当箇所は目視で 変換の正しさを確認済み。 検証: validate-plugin 132 合格 0 失敗、check-consistency 全 24 通過。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: tachibanashuuta <tachibana@canai.jp> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> | 1 个月前 | |
fix(tests): BSD 非互換 mktemp テンプレートを一掃 + 再発検出を配線 (Phase 127.1) BSD (macOS) の mktemp は X が末尾にある場合しか置換しない。 `mktemp /tmp/foo-XXXXXX.json` のように X の後ろに拡張子が続く形式は 乱数化されず、テンプレートそのままの literal path を返してそのファイルを作る。 残骸が残ると以降 EEXIST で永久に失敗する。GNU (Linux/CI) は末尾以外の X も 置換するため、この不具合は CI では一切再現せず macOS ローカル限定になる。 対象は tests/ 配下の 9 箇所。すべて `"${TMPDIR:-/tmp}/<name>.XXXXXX"` へ統一した (repo 内 59 箇所が TMPDIR 参照で主流)。拡張子は 9 箇所とも消費側が path として しか使わないことを確認したうえで落とした。 後始末が無かった 2 ファイル (test-accept-record.sh / test-harness-accept.sh) に trap を追加。中断で残骸が残ると以降永久に赤化する経路を塞ぐ (これは posttool-progress-regen.sh で実際に 3 日間起きた。c856ecec で修正済)。 再発検出は tests/test-mktemp-bsd-template-safety.sh を新設し tests/validate-plugin.sh へ配線 (.claude/rules/workflow-test-wiring.md 準拠。 .github/workflows/ は非接触)。shellcheck はこの書式を検出しないことを 実測確認済みのため専用検査が必要。検出は grep ベースの静的解析なので、 テンプレートを変数経由で間接的に渡す形は原理的に検出外 (現時点で該当箇所はゼロ)。 検証 (floor 免除 env を export したまま実行): - RED 実測: gate 追加直後に 9 件を検出して exit 1 - GREEN: 9 箇所修正後に検出 0 件 - 対照実験: 旧テンプレートの literal path を /tmp に置くと、ベース版は `mktemp: mkstemp failed on /tmp/plan-brief-test-XXXXXX.html: File exists` で停止し、修正版は同地点を通過 - tests/validate-plugin.sh 129 pass / 0 fail - scripts/ci/check-consistency.sh 全 24 通過 - 削除 9 行はすべて mktemp 行 (アサーションの削除・弱体化ゼロ) - 独立 reviewer が APPROVE (critical/major 0) Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> | 1 个月前 | |
fix(routing): grok のモデル pin を実カタログへ訂正する (Phase 133.7) operator 承認 (2026-08-13)。 ## 何が壊れていたか `scripts/model-routing.sh` の grok pin 5 種は **1 つも実在しなかった**。 grok へ委譲を始めた瞬間に全 tier が失敗する状態だった。 原因は 2 世代連続で同じ取り違えをしたこと。根拠にしていた `grok-cli` (TypeScript, LocalWork/Code/grok-cli) は、実際に動く `grok 0.2.118` ("Grok Build TUI", Rust) とは**同名の別プロダクト**だった。 皮肉なことに 2 世代前の `grok-4.5` は実在した。当時のコメントは `observed 2026-07-09 on CLI 0.2.93` — 実バイナリでの観測だった。 source tree を読んで「訂正」したことで、正しい値が誤った値になっていた。 ## 実カタログ `grok 0.2.118` が cli-chat-proxy.grok.com/v1/models から取得した アカウントカタログは 2 つだけ: - grok-4.6 既定 / frontier / 500k ctx / effort xhigh|high|medium|low - grok-4.5 500k ctx / effort high|medium|low tier 割当: lite,standard=grok-4.5 / deep,advisor,review=grok-4.6 xhigh / release,long-context=grok-4.6 high ## 4 層すべてへ降下 scripts/model-routing.sh (正本) / hosts.toml / docs/model-routing-policy.md (tier 表 + role 表 + 注記) / docs/research/grok-adapter-candidate.md ## 回帰網の強化 effort 検査を平坦な許可リストから **モデル別** に変更した。grok-4.5 は xhigh を受け付けないため、平坦なリストでは不正な組み合わせを取りこぼす。 昨日追加した docs<->SSOT ゲートが 3 回ドリフトを検出し、その都度潰した。 ゲートが実働していることの確認にもなった。 Plans.md 133.7 / decisions.md D58 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PCi5GLAfya9aWYnDc7cmhs | 30 天前 | |
fix(tests,scripts): pipefail 下の `producer | grep -q` 173 箇所を herestring へ一掃 (Phase 129) (#286) * fix(tests,scripts): pipefail 下の `producer | grep -q` 173 箇所を herestring へ一掃 PR #285 で実害 2 箇所を直したが、同じ書き方が 173 箇所残っていた。 `grep -q` は最初の一致で終了してパイプを閉じるため、分割書き込み中の producer が EPIPE で失敗する。`set -o pipefail` がその失敗をパイプライン 全体の結果へ昇格させるので、探す文字列が実在するのに「無い」と判定される。 一致が入力の前方にあるほど再現するため、合否が「探す文字列が何行目にあるか」 で決まる状態だった。 - tests/test-pipefail-grep-q-safety.sh を新設 (Phase 129.1)。 静的走査で該当箇所を検出し、fixture 8 件で除外条件を固定 (pipefail 無し / `|| true` / herestring / grep -c / コメント行 / 引用符内) - tests/ 39 ファイル 131 箇所、scripts/ 19 ファイル 42 箇所を変換 (Phase 129.2 / 129.3) - tests/validate-plugin.sh に節 19 を配線し、 tests/test-validate-plugin-wiring.sh の pin にも追加 (Phase 129.4)。 検査の除去には 2 つの独立したファイルの変更が必要になる 引用符認識を実装した過程で、旧パターンが取りこぼしていた 3 段パイプライン (`echo | jq | grep -qi`) を 1 件発見し、変数経由に分解した。 実測: - 検出件数 173 → 0 - 変換部分は追加 172 / 削除 172 の 1 対 1 (アサーション削除・期待値緩和ゼロ) - bash -n 全 58 ファイル OK (行末継続 `\` を壊した 4 箇所はここで検出し修正) - shellcheck warning は変換前後とも 29 件で同数、herestring 起因の新規指摘ゼロ - validate-plugin 132 合格 0 失敗 (131 + 新設 1 節) - check-consistency 全 24 通過 (変換対象に check-consistency.sh 自身を含む) - go test ./... 0 失敗、VERSION / plugin.json / harness.toml 非接触 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * docs(plan): Phase 129 完走 — 全 4 task を cc:done に更新 129.1 検出テスト新設 / 129.2 tests/ 131 箇所 / 129.3 scripts/ 42 箇所 / 129.4 配線 + closeout。各 task の Status に実測値を記録した。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(tests): 検出器の 2 件の欠陥を修正 (CodeRabbit 指摘) いずれも実測で再現を確認してから修正した。 - 行継続を跨ぐパイプラインの検出漏れ: `perl -ne` が物理行ごとに走査するため、 行末の `\` で分割された `printf ... \ | grep -q ...` を見落としていた。 物理行を論理行へ畳んでから走査する。行番号は論理行の開始位置を報告する - 引用符内のエスケープの誤解釈: 二重引用符の中の `\"` を閉じ引用符と解釈し、 後続の `| grep -q` が引用符の外に見えて誤検出していた。二重引用符の中でのみ `\` をエスケープとして扱う (単一引用符の中では shell の仕様どおり扱わない) fixture は 8 件 → 10 件。CHANGELOG に Before/After 表を追加した。 改良後の検出器を変更前ツリーへ適用すると 168 箇所 (旧実装は 173)。差の 5 件は 行継続の畳み込みによる数え方の違いで、検出漏れではない。物理行 782・783 を 2 件と数えていたものが論理行の開始 781 の 1 件になる。該当箇所は目視で 変換の正しさを確認済み。 検証: validate-plugin 132 合格 0 失敗、check-consistency 全 24 通過。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: tachibanashuuta <tachibana@canai.jp> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> | 1 个月前 | |
feat(night-watch): Phase 99.1 — nightly patrol monitoring layer 未解決ループ/停滞タスク/古い open decision を夜間巡回。D40 tri-state health、 opt-in 既定 OFF。 - templates/schemas/night-watch-report.v1.json (additionalProperties:false) - go/internal/nightwatch/ (tri-state: not-configured/daemon-unreachable/corrupted) - templates/night-watch-config.yaml (stale_task_hours:72 / open_decision_hours:168) - scripts/night-watch-report.sh --dry-run + night-watch-install.sh (opt-in) - Session Monitor 統合 (not-configured で警告抑止) + cron template (default OFF) - check-consistency + validate-plugin section + CHANGELOG (Phase 99 owner) 注: go/cmd/night-watch-report (go run 方式) は Lead が trunk で bin/harness night-watch subcommand にリファクタする (単一バイナリ配布規約)。 go test nightwatch/session 全 PASS。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> | 2 个月前 | |
feat(night-watch): Phase 99.1 — nightly patrol monitoring layer 未解決ループ/停滞タスク/古い open decision を夜間巡回。D40 tri-state health、 opt-in 既定 OFF。 - templates/schemas/night-watch-report.v1.json (additionalProperties:false) - go/internal/nightwatch/ (tri-state: not-configured/daemon-unreachable/corrupted) - templates/night-watch-config.yaml (stale_task_hours:72 / open_decision_hours:168) - scripts/night-watch-report.sh --dry-run + night-watch-install.sh (opt-in) - Session Monitor 統合 (not-configured で警告抑止) + cron template (default OFF) - check-consistency + validate-plugin section + CHANGELOG (Phase 99 owner) 注: go/cmd/night-watch-report (go run 方式) は Lead が trunk で bin/harness night-watch subcommand にリファクタする (単一バイナリ配布規約)。 go test nightwatch/session 全 PASS。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> | 2 个月前 | |
feat: add New Harness V2 host adapters Add tool-first onboarding, support-tier boundaries, Codex CLI plugin smoke, OpenCode bootstrap validation, migration reporting, and Phase 74 repo-health gates. | 3 个月前 | |
feat: add New Harness V2 host adapters Add tool-first onboarding, support-tier boundaries, Codex CLI plugin smoke, OpenCode bootstrap validation, migration reporting, and Phase 74 repo-health gates. | 3 个月前 | |
docs: mark 90.1.2 done + correct DoD to live Go hook wiring Shell hook handlers are Go-ported, so wiring the rollup into scripts/hook-handlers/ would be dead. Corrected DoD(b) to reflect the live wiring via the orchestration Go package (task_completed.go + cleanup.go). Also chmod +x the ledger test. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> | 3 个月前 | |
feat: HTML orchestration scorecard surface (90.1.4) Add templates/html/orchestration.html.template (Harness brand, inline CSS, no JS, standalone/shareable) and a --format html-data projection in orchestration-scorecard.sh (render-html.sh supports only top-level scalars + array sections, not nested dot access). Lifetime totals are the hero figure; per-backend cards show session/lifetime counts + tri-state; Claude shown as host. Output redaction is N/A — scorecard data is structurally non-sensitive (the no-secret guarantee is enforced upstream by the ledger). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> | 3 个月前 | |
fix(tests,scripts): pipefail 下の `producer | grep -q` 173 箇所を herestring へ一掃 (Phase 129) (#286) * fix(tests,scripts): pipefail 下の `producer | grep -q` 173 箇所を herestring へ一掃 PR #285 で実害 2 箇所を直したが、同じ書き方が 173 箇所残っていた。 `grep -q` は最初の一致で終了してパイプを閉じるため、分割書き込み中の producer が EPIPE で失敗する。`set -o pipefail` がその失敗をパイプライン 全体の結果へ昇格させるので、探す文字列が実在するのに「無い」と判定される。 一致が入力の前方にあるほど再現するため、合否が「探す文字列が何行目にあるか」 で決まる状態だった。 - tests/test-pipefail-grep-q-safety.sh を新設 (Phase 129.1)。 静的走査で該当箇所を検出し、fixture 8 件で除外条件を固定 (pipefail 無し / `|| true` / herestring / grep -c / コメント行 / 引用符内) - tests/ 39 ファイル 131 箇所、scripts/ 19 ファイル 42 箇所を変換 (Phase 129.2 / 129.3) - tests/validate-plugin.sh に節 19 を配線し、 tests/test-validate-plugin-wiring.sh の pin にも追加 (Phase 129.4)。 検査の除去には 2 つの独立したファイルの変更が必要になる 引用符認識を実装した過程で、旧パターンが取りこぼしていた 3 段パイプライン (`echo | jq | grep -qi`) を 1 件発見し、変数経由に分解した。 実測: - 検出件数 173 → 0 - 変換部分は追加 172 / 削除 172 の 1 対 1 (アサーション削除・期待値緩和ゼロ) - bash -n 全 58 ファイル OK (行末継続 `\` を壊した 4 箇所はここで検出し修正) - shellcheck warning は変換前後とも 29 件で同数、herestring 起因の新規指摘ゼロ - validate-plugin 132 合格 0 失敗 (131 + 新設 1 節) - check-consistency 全 24 通過 (変換対象に check-consistency.sh 自身を含む) - go test ./... 0 失敗、VERSION / plugin.json / harness.toml 非接触 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * docs(plan): Phase 129 完走 — 全 4 task を cc:done に更新 129.1 検出テスト新設 / 129.2 tests/ 131 箇所 / 129.3 scripts/ 42 箇所 / 129.4 配線 + closeout。各 task の Status に実測値を記録した。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(tests): 検出器の 2 件の欠陥を修正 (CodeRabbit 指摘) いずれも実測で再現を確認してから修正した。 - 行継続を跨ぐパイプラインの検出漏れ: `perl -ne` が物理行ごとに走査するため、 行末の `\` で分割された `printf ... \ | grep -q ...` を見落としていた。 物理行を論理行へ畳んでから走査する。行番号は論理行の開始位置を報告する - 引用符内のエスケープの誤解釈: 二重引用符の中の `\"` を閉じ引用符と解釈し、 後続の `| grep -q` が引用符の外に見えて誤検出していた。二重引用符の中でのみ `\` をエスケープとして扱う (単一引用符の中では shell の仕様どおり扱わない) fixture は 8 件 → 10 件。CHANGELOG に Before/After 表を追加した。 改良後の検出器を変更前ツリーへ適用すると 168 箇所 (旧実装は 173)。差の 5 件は 行継続の畳み込みによる数え方の違いで、検出漏れではない。物理行 782・783 を 2 件と数えていたものが論理行の開始 781 の 1 件になる。該当箇所は目視で 変換の正しさを確認済み。 検証: validate-plugin 132 合格 0 失敗、check-consistency 全 24 通過。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: tachibanashuuta <tachibana@canai.jp> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> | 1 个月前 | |
fix: reconcile orchestration rollup by delta to fix mid-session undercount (#199) orchestration-rollup.sh skipped any session already in rolled_up_sessions, so a rollup that ran mid-session locked the session's lifetime contribution at its count-so-far and dropped every later same-session delegation (observed live: session cursor=144 but lifetime cursor=117 — rollup ran once at 117 and the session kept delegating). Track each session's previously-counted per-backend amounts in a new session_counts field and, on every rollup, add only the delta (current ledger count − previously counted) per backend, then overwrite the snapshot. This keeps the no-double-count guarantee (re-rollup with no new delegations is a no-op) and fixes the gap (re-rollup after more delegations adds only the tail). Migration-safe: old totals files lack session_counts; a session already in rolled_up_sessions is then treated as fully counted (delta 0) so a legacy file is never double-counted on its next rollup. session_counts is an additive v1 field; old files are read as {}. - scripts/orchestration-rollup.sh: delta reconciliation + migration fallback - orchestration-totals.v1 schema (+ codex/opencode mirrors): session_counts field - tests/test-orchestration-totals.sh: delta-reconciliation + migration-safe cases - CHANGELOG [Unreleased] Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> | 3 个月前 | |
feat: Phase 62.2.1-62.2.5 — Tier 2 governance/telemetry/policy 実装 5 つの Tier 2 タスクを実装: 62.2.1 (PostToolUse.updatedToolOutput governance): - scripts/hook-handlers/posttool-output-normalize.sh (新規) opt-in handler HARNESS_OUTPUT_GOVERNANCE_ENABLE=1 で有効化、API key redaction を allowlist 方式で - .claude/state/output-audit.jsonl に before/after を append-only 記録 - JSON 契約 tool (Read/Grep/Bash/TodoWrite) は skip - tests/test-output-governance.sh (新規) 6 ケース PASS (改ざん用途は実装に存在しないことを source 検査で固定) 62.2.2 (--agent permissionMode reaffirmation): - tests/test-agent-permission-mode.sh (新規) 5 観点 PASS - worker/reviewer/scaffolder/advisor の frontmatter に permissionMode が無いことを固定 (Phase 59.2.3 方針) - Reviewer の Read-only enforcement は tools/disallowedTools の組み合わせで担保 - CC 2.1.119+ で permissionMode が reactivate された場合の gate として機能 62.2.3 (skill_activated.invocation_trigger telemetry): - docs/skill-telemetry-policy.md (新規) privacy/retention/opt-out - scripts/skill-trigger-telemetry.sh (新規) JSON Lines append-only ledger writer session_id を 12 文字に truncate (privacy minimization) - tests/test-skill-trigger-telemetry.sh (新規) 5 観点 PASS (3 trigger 区別 / opt-out / exclude / append-only / session_id truncation) - Phase 58.2.3 の「telemetry sink 設計が先」判断を local-only sink で実装 62.2.4 (CLAUDE_CODE_SESSION_ID env policy): - docs/session-id-env-policy.md (新規) 4 経路の使い分け (1) hook handler は stdin JSON が SSOT (2) Bash 子プロセスは env var (CC 2.1.132+) (3) long-running watcher は state file (4) CLAUDE_TRANSCRIPT_PATH regex は使わない (legacy) - tests/test-hook-handler-session-id.sh (新規) 6 観点 PASS hook handlers が stdin JSON 経由で session_id を取得することを固定 62.2.5 (skillOverrides 3 mode governance): - docs/skill-overrides-policy.md (新規) off / user-invocable-only / name-only の使い分け - 推奨: 個人=未設定、enterprise=name-only、education=user-invocable-only - harness-init は default を入れない (CC default 尊重) - Phase 59.1.2 skill manifest との関係を明記 横断: - tests/test-settings-baseline.sh (新規) 62.1.4 + 62.2.5 共通の baseline 検証 template canonical (9 件) を強制、.claude-plugin/settings.json 不一致は WARN として記録 (self-protection guardrail で edit 不可のため user 手動同期が必要) User 手動操作 follow-up (cycle 1 から継続): - .claude-plugin/settings.json の deniedDomains を template に合わせて 6 件追加 (pastebin.com, transfer.sh, 0x0.st, paste.ee, termbin.com, ix.io) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> | 4 个月前 | |
i18n: エラーメッセージの日本語化(主要フロー) 対象ファイル: - scripts/install-git-hooks.sh: エラー/説明文 - scripts/template-tracker.sh: Usage/エラー/結果メッセージ - scripts/claude-mem-mcp: MCP 起動関連 - tests/test-path-compatibility.sh: サマリー - tests/test-frontmatter-integration.sh: エラー/サマリー 検証結果: - validate-plugin.sh: 42 passed - check-consistency.sh: all passed 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> | 8 个月前 | |
feat(verification): Phase 134-137 — 検証チェーン配線修理 + writing lint + surface + ループ施策 Phase 134: 入口 (risk_flags→profile 自動昇格 + ratchet) / 中間 (PENDING_BROWSER fail-visible, pending_validations) / 出口 (accept-collect-evidence.sh による artifact 機械接続) の 3 継ぎ目を接続。scope leash 本配線 (warn 既定)、Playwright Screencast evidence、worker-report.v1 永続化、再調査ループ、検証の検証 (check-verification-chain-wiring.sh + 実効性契約テスト 3 本、RED→GREEN 実測)。 Phase 135: writinglint エンジン (辞書は個人層) + PostToolUse advisory + Stop 全体再検査 + 指摘→ルール自動ドラフト→人間承認ループ + config schema 正式化。 Phase 136: 3 surface スマホ viewport / 承認待ちキュー表示 / diagram-design 接続点。 Phase 137: 採点設計規律 (criteria 3 層翻訳) / blind 受け手検査 / 評価者 4 契約。 decisions.md D62-D68 に判断根拠を記録。worker 契約に NG-4 追加。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TFcsXBG95kTdxPfDaP7Vuu | 27 天前 | |
test(closeout): Phase 72 mirror + distribution + no-regression closeout test (Phase 72.1.6) | 2 个月前 | |
fix(tests): here-document 本文の誤検出を塞ぎ、引数ファイル全体を検査する (CodeRabbit 指摘) 検出器が here-doc の本文にある `|` を実行されるパイプとして誤検出していた。 説明文やテンプレートに構文例を書いただけで検査が落ちる。物理行を読む段階で here-doc の終端子を追跡し、本文を走査対象から外す。`<<-` のタブ字下げ終端子 にも対応し、`<<<` (herestring) は here-doc と誤認しない正規表現にしてある。 読み飛ばしが後続の実コードまで隠さないことを非退行 fixture で固定した。 検出力の非退行も実測: 修正前ツリーへ適用して 29 行という検出数は不変。 test-pre-review-cursor.sh は引数ファイルの先頭 20 行しか検査しておらず (この制限は Phase 130 以前から存在)、21 行目以降の --write / --workspace / --resume を見逃していた。全体を検査する形へ変更する。 実測: fixture: PASS=14 → PASS=17 (here-doc 3 件追加) 修正前ツリーでの検出行数: 29 行 (変化なし = 検出力の非退行) bash tests/test-pre-review-cursor.sh → PASS=14 FAIL=0 bash tests/validate-plugin.sh → 合格 134 / 失敗 0 bash scripts/ci/check-consistency.sh → 全パス Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012ZBxNEtYJbtHkZcsAn8nsv | 1 个月前 | |
feat: Phase 65.2.x Plan→Accept flow e2e validation (65.2.4) — Phase B complete Add `tests/test-plan-accept-flow-e2e.sh` (29 assertions) that ties all six Phase 65.1.x + 65.2.x components together in a single fixture project run and verifies the full plan→accept trace: Stage 1 - Plan Brief plan-brief-compile.sh → plan-brief-context.v1 render-html.sh → plan-brief HTML (Claude Harness palette) plan-brief-record-decision.sh (approve) → personal-preference.v1 record tags: ["personal-preference", "plan-brief-approval"] Stage 2 - impl simulation (no-op; future Phase 65.4 hook point) Stage 3 - Acceptance Demo accept-past-issues.sh → past-issue.v1 render-html.sh → accept HTML accept-record-decision.sh (accept) → acceptance-decision.v1 record tags: ["personal-preference", "acceptance-decision"] Cross-stage consistency assertions (DoD b/c): - Both records emit the same user_request_hash, and that hash equals an independently computed sha256 of USER_REQUEST. This is the structural mem-side join key that ties personal-preference.v1 to acceptance-decision.v1 (DoD b). - Both records carry the same `data.project` (so a project-scoped search returns both ends of the trace). - Both records share the "personal-preference" tag (so a single tag search recovers the full trace; the differentiated tag — plan-brief-approval vs acceptance-decision — narrows to one side). - Both records have observation_type = "decision". - The plan-brief HTML contains the literal user_request and the fixture project name (DoD c part: same task → same HTML pair). - plan-brief-open.sh dispatches both HTMLs CI-safely with BROWSER=true (CI contract preserved end-to-end). The test is wired into tests/validate-plugin.sh section 11, bumping the suite from 50 → 51 entries (DoD d). Verified: - bash tests/test-plan-accept-flow-e2e.sh => 29/29 PASS - bash tests/validate-plugin.sh => 51/51 PASS - bash scripts/ci/check-consistency.sh => 全合格 Phase B (65.2.1 → 65.2.4) is now complete. With Phase A (65.1.x) + Phase B (65.2.x), the read/write halves of the trace are wired: - Plan Brief stores `personal-preference.v1` keyed by the sha256 of the user request - Acceptance Demo stores `acceptance-decision.v1` keyed by the same sha256, plus the recommendation/override/reject decision - A future `mcp__harness__harness_mem_graph` query for the join key returns both ends of the trace. Phase C (65.3.x — 3-Layer Redaction) is unblocked by harness-mem session reciprocal cross-check (commit 8fd8c0e8 + harness-mem Plans.md §110 closure). The current §65.3 design is confirmed correct (Layer 1=server, Layer 2/3=client) by D42. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> | 4 个月前 | |
fix(tests,scripts): pipefail 下の `producer | grep -q` 173 箇所を herestring へ一掃 (Phase 129) (#286) * fix(tests,scripts): pipefail 下の `producer | grep -q` 173 箇所を herestring へ一掃 PR #285 で実害 2 箇所を直したが、同じ書き方が 173 箇所残っていた。 `grep -q` は最初の一致で終了してパイプを閉じるため、分割書き込み中の producer が EPIPE で失敗する。`set -o pipefail` がその失敗をパイプライン 全体の結果へ昇格させるので、探す文字列が実在するのに「無い」と判定される。 一致が入力の前方にあるほど再現するため、合否が「探す文字列が何行目にあるか」 で決まる状態だった。 - tests/test-pipefail-grep-q-safety.sh を新設 (Phase 129.1)。 静的走査で該当箇所を検出し、fixture 8 件で除外条件を固定 (pipefail 無し / `|| true` / herestring / grep -c / コメント行 / 引用符内) - tests/ 39 ファイル 131 箇所、scripts/ 19 ファイル 42 箇所を変換 (Phase 129.2 / 129.3) - tests/validate-plugin.sh に節 19 を配線し、 tests/test-validate-plugin-wiring.sh の pin にも追加 (Phase 129.4)。 検査の除去には 2 つの独立したファイルの変更が必要になる 引用符認識を実装した過程で、旧パターンが取りこぼしていた 3 段パイプライン (`echo | jq | grep -qi`) を 1 件発見し、変数経由に分解した。 実測: - 検出件数 173 → 0 - 変換部分は追加 172 / 削除 172 の 1 対 1 (アサーション削除・期待値緩和ゼロ) - bash -n 全 58 ファイル OK (行末継続 `\` を壊した 4 箇所はここで検出し修正) - shellcheck warning は変換前後とも 29 件で同数、herestring 起因の新規指摘ゼロ - validate-plugin 132 合格 0 失敗 (131 + 新設 1 節) - check-consistency 全 24 通過 (変換対象に check-consistency.sh 自身を含む) - go test ./... 0 失敗、VERSION / plugin.json / harness.toml 非接触 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * docs(plan): Phase 129 完走 — 全 4 task を cc:done に更新 129.1 検出テスト新設 / 129.2 tests/ 131 箇所 / 129.3 scripts/ 42 箇所 / 129.4 配線 + closeout。各 task の Status に実測値を記録した。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(tests): 検出器の 2 件の欠陥を修正 (CodeRabbit 指摘) いずれも実測で再現を確認してから修正した。 - 行継続を跨ぐパイプラインの検出漏れ: `perl -ne` が物理行ごとに走査するため、 行末の `\` で分割された `printf ... \ | grep -q ...` を見落としていた。 物理行を論理行へ畳んでから走査する。行番号は論理行の開始位置を報告する - 引用符内のエスケープの誤解釈: 二重引用符の中の `\"` を閉じ引用符と解釈し、 後続の `| grep -q` が引用符の外に見えて誤検出していた。二重引用符の中でのみ `\` をエスケープとして扱う (単一引用符の中では shell の仕様どおり扱わない) fixture は 8 件 → 10 件。CHANGELOG に Before/After 表を追加した。 改良後の検出器を変更前ツリーへ適用すると 168 箇所 (旧実装は 173)。差の 5 件は 行継続の畳み込みによる数え方の違いで、検出漏れではない。物理行 782・783 を 2 件と数えていたものが論理行の開始 781 の 1 件になる。該当箇所は目視で 変換の正しさを確認済み。 検証: validate-plugin 132 合格 0 失敗、check-consistency 全 24 通過。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: tachibanashuuta <tachibana@canai.jp> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> | 1 个月前 | |
fix(tests,scripts): pipefail 下の producer|grep -q 34 箇所を herestring 化 (Phase 130.2) Phase 129 の検出器は producer を printf/echo/cat の 3 種に限定していたため、 jq/find/git/grep/head/シェル関数呼び出しなどを producer とする同型の欠陥が 検出網から漏れていた。tests/test-i18n-locale-resolver.sh:196 で実測したところ、 `jq -r '...' <<< "$x" | grep -q '応答言語: 日本語'` は 20/20 で「無い」と 誤判定された (探す文字列は先頭 4 byte 目に実在する)。 対象 14 ファイル 34 箇所を herestring/変数捕捉へ書き換えた: - producer が変数の場合はそのまま `grep -q P <<<"$x"` へ - producer がコマンド/関数呼び出しの場合は `X="$(producer)"; grep -q P <<<"$X"` へ分解 (task-completed.sh の _signal_exists、test-tool-first-onboarding.sh の section_for 呼び出しなど) - test-codex-loop-cli.sh の `&&` 連結 3 段判定、test-hermes-agent-candidate.sh の 3 段パイプライン (最終段のみ EPIPE リスクがあるため最終段だけ分解) も対応 producer 側の exit status が元々検証されていなかった箇所には `|| true` を 付けて capture したが、これは grep 側の判定を変えない (最終アサーションは そのまま維持され、producer 失敗時も従来どおりのフェイルメッセージへ落ちる)。 RED: tests/test-i18n-locale-resolver.sh を修正前で 20 回連続実行し 19/20 失敗 GREEN: 同テストを修正後で 20 回連続実行し 20/20 成功 影響した各テストファイル (test-codex-loop-cli.sh 42/42, test-codex-package.sh 25/25, test-harness-accept.sh 66/66, test-harness-plan-brief.sh 32/32, test-plan-brief-e2e.sh 30/30 など) は全て既存合格数を維持。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012ZBxNEtYJbtHkZcsAn8nsv | 1 个月前 | |
fix(tests,scripts): pipefail 下の `producer | grep -q` 173 箇所を herestring へ一掃 (Phase 129) (#286) * fix(tests,scripts): pipefail 下の `producer | grep -q` 173 箇所を herestring へ一掃 PR #285 で実害 2 箇所を直したが、同じ書き方が 173 箇所残っていた。 `grep -q` は最初の一致で終了してパイプを閉じるため、分割書き込み中の producer が EPIPE で失敗する。`set -o pipefail` がその失敗をパイプライン 全体の結果へ昇格させるので、探す文字列が実在するのに「無い」と判定される。 一致が入力の前方にあるほど再現するため、合否が「探す文字列が何行目にあるか」 で決まる状態だった。 - tests/test-pipefail-grep-q-safety.sh を新設 (Phase 129.1)。 静的走査で該当箇所を検出し、fixture 8 件で除外条件を固定 (pipefail 無し / `|| true` / herestring / grep -c / コメント行 / 引用符内) - tests/ 39 ファイル 131 箇所、scripts/ 19 ファイル 42 箇所を変換 (Phase 129.2 / 129.3) - tests/validate-plugin.sh に節 19 を配線し、 tests/test-validate-plugin-wiring.sh の pin にも追加 (Phase 129.4)。 検査の除去には 2 つの独立したファイルの変更が必要になる 引用符認識を実装した過程で、旧パターンが取りこぼしていた 3 段パイプライン (`echo | jq | grep -qi`) を 1 件発見し、変数経由に分解した。 実測: - 検出件数 173 → 0 - 変換部分は追加 172 / 削除 172 の 1 対 1 (アサーション削除・期待値緩和ゼロ) - bash -n 全 58 ファイル OK (行末継続 `\` を壊した 4 箇所はここで検出し修正) - shellcheck warning は変換前後とも 29 件で同数、herestring 起因の新規指摘ゼロ - validate-plugin 132 合格 0 失敗 (131 + 新設 1 節) - check-consistency 全 24 通過 (変換対象に check-consistency.sh 自身を含む) - go test ./... 0 失敗、VERSION / plugin.json / harness.toml 非接触 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * docs(plan): Phase 129 完走 — 全 4 task を cc:done に更新 129.1 検出テスト新設 / 129.2 tests/ 131 箇所 / 129.3 scripts/ 42 箇所 / 129.4 配線 + closeout。各 task の Status に実測値を記録した。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(tests): 検出器の 2 件の欠陥を修正 (CodeRabbit 指摘) いずれも実測で再現を確認してから修正した。 - 行継続を跨ぐパイプラインの検出漏れ: `perl -ne` が物理行ごとに走査するため、 行末の `\` で分割された `printf ... \ | grep -q ...` を見落としていた。 物理行を論理行へ畳んでから走査する。行番号は論理行の開始位置を報告する - 引用符内のエスケープの誤解釈: 二重引用符の中の `\"` を閉じ引用符と解釈し、 後続の `| grep -q` が引用符の外に見えて誤検出していた。二重引用符の中でのみ `\` をエスケープとして扱う (単一引用符の中では shell の仕様どおり扱わない) fixture は 8 件 → 10 件。CHANGELOG に Before/After 表を追加した。 改良後の検出器を変更前ツリーへ適用すると 168 箇所 (旧実装は 173)。差の 5 件は 行継続の畳み込みによる数え方の違いで、検出漏れではない。物理行 782・783 を 2 件と数えていたものが論理行の開始 781 の 1 件になる。該当箇所は目視で 変換の正しさを確認済み。 検証: validate-plugin 132 合格 0 失敗、check-consistency 全 24 通過。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: tachibanashuuta <tachibana@canai.jp> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> | 1 个月前 | |
feat(guardrail): 計画時の事前承認を R12 の確認抑制に接続する (126.5) 事前承認は「計画確定時に 1 回だけ確認し、実行中は同じことで再確認しない」設計だが、 実装は片肺だった。secret-read の承認だけが静的に project config へ焼き込まれ、 external-send と destructive の承認は skill の散文にしか存在せず、Go 側の判定に 一切接続されていなかった。承認済みの push でも R12 が毎回確認を出していた。 既存の焼き込み経路には、scope を検証せず無期限にマージする欠陥もあった。 ## plan-preapproval.v2 templates/schemas/plan-preapproval.v2.json を新設。各承認に expires_at (必須)、 max_uses (既定 10)、uses を持たせた。v1 は additionalProperties: false のため フィールドを後付けできず、別 schema とした。v1 は読み取り互換に限る。 「一度使ったら失効」ではなく回数上限にした。PR closeout は CI 修正後に再 push する ことがあり、単発消費だと 2 回目で確認が復活して当初の目的を壊すため。恒久緩和を 防ぐ性質は、有効期限とスコープ一致と回数上限の 3 つで担保する。 ## スコープ解決 hook 実行時に現在の phase/task を知る経路が無かったため、 .claude/state/active-task.json を新設し、harness-work / breezing がタスク開始時に 書く手順を追記した。env の HARNESS_ACTIVE_PHASE / HARNESS_ACTIVE_TASK も参照する。 どちらも解決できない場合は承認なし扱いで確認を維持する。 ## R12 への接続 保護ブランチへの直接 push で ask を返す分岐の手前に、有効な承認があれば規則を 発火させない判定を挿入した。deny 設定の分岐は抑制しない。設定で明示的に禁止された ものを承認で覆せてはならない。 コマンド照合は正規化後の完全一致で、<...> のプレースホルダのみ空白を含まない 1 トークンとして一致させる。前方一致や部分一致にすると承認範囲が意図せず広がるため。 ## runtime floor は対象外 floor の 5 カテゴリには接続していない。floor は「どの設定でも上書きできない 最終防波堤」であり、例外は operator が明示宣言する 2 つに限ると spec が 数え上げている。本変更が触るのは guardrail 規則の R12 のみで、 この境界をコードコメントと docs に明記した。 ## 実測 (12 項目すべて期待どおり) 承認済み+scope一致+期限内 -> 抑制 (approve) 期限切れ / 回数超過 / denied -> ask に復帰 scope 不一致 / 解決不能 -> ask 承認記録なし / JSON 破損 -> ask (fail-safe) v1 記録 -> ask (互換読取のみ) 承認と完全一致 -> 抑制 余分な引数 / 承認外の remote -> ask 別ブランチ (placeholder) -> 抑制 floor 対象コマンド -> deny (承認は floor を上書きしない) 抑制適用後 -> uses が 1 増えて記録される ## スクリプト scripts/plan-preapproval.sh を v2 対応にし、apply-secret-allow が scope を 検証せずマージする既知欠陥も直した。現在の phase/task と一致する承認だけを反映する。 このスクリプトは shellcheck の検査対象リストに入っていなかったため追加した。 検証: go test ./... は既存の負荷依存テスト 1 件を除き PASS (TestLeaseReclaim_ConcurrentSlowPath は単独実行で 0.4 秒で通り、変更を含まない メイン checkout でも同様。全体実行時の高負荷で 89 秒かかって落ちる既存の不安定さ)。 gofmt clean、go vet clean、shellcheck PASS、 test-plan-preapproval / test-shell-lint / test-3cli-hook-floor / test-runtimefloor-secret-allowlist-e2e すべて PASS。 126.1-126.4 の回帰確認 10 項目も不一致ゼロ。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Implemented-by: Codex (gpt-5.6-sol, xhigh) via codex-companion, Lead-verified | 1 个月前 | |
fix(ci): git 管理外の Plans.md を自リポジトリの HEAD と照合しない (CodeRabbit 指摘) git root を解決できない時に $ROOT_DIR へ fallback していた。別の場所にある Plans.md を渡すと無関係なリポジトリの HEAD と照合され、hash がたまたま一致して gate が通る誤判定が起きる。検証不能なら落とす。 あわせて CHANGELOG の Phase 128 記録に Before/After 表を追加する (github-release.md の規約)。 実測: bash scripts/ci/check-plans-hash-reachability.sh <git 管理外の Plans.md> → exit 1 "git repository 内にありません" bash tests/test-plans-hash-reachability.sh → PASS=7 FAIL=0 (assertion (f) 追加) bash tests/validate-plugin.sh → 合格 134 / 失敗 0 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012ZBxNEtYJbtHkZcsAn8nsv | 1 个月前 | |
feat: harden long-running review and release workflows | 5 个月前 | |
test: add Plans.md Status-cell marker count contract (RED) Measured failure from bash tests/test-plans-marker-count.sh: [FAIL] WIP status-cell count: got '6', want '2' Naive grep in session-monitor count_tasks counts legend rows, transition prose, and DoD mentions — not Status cells only. Co-authored-by: Cursor <cursoragent@cursor.com> | 1 个月前 | |
fix(tests,scripts): pipefail 下の `producer | grep -q` 173 箇所を herestring へ一掃 (Phase 129) (#286) * fix(tests,scripts): pipefail 下の `producer | grep -q` 173 箇所を herestring へ一掃 PR #285 で実害 2 箇所を直したが、同じ書き方が 173 箇所残っていた。 `grep -q` は最初の一致で終了してパイプを閉じるため、分割書き込み中の producer が EPIPE で失敗する。`set -o pipefail` がその失敗をパイプライン 全体の結果へ昇格させるので、探す文字列が実在するのに「無い」と判定される。 一致が入力の前方にあるほど再現するため、合否が「探す文字列が何行目にあるか」 で決まる状態だった。 - tests/test-pipefail-grep-q-safety.sh を新設 (Phase 129.1)。 静的走査で該当箇所を検出し、fixture 8 件で除外条件を固定 (pipefail 無し / `|| true` / herestring / grep -c / コメント行 / 引用符内) - tests/ 39 ファイル 131 箇所、scripts/ 19 ファイル 42 箇所を変換 (Phase 129.2 / 129.3) - tests/validate-plugin.sh に節 19 を配線し、 tests/test-validate-plugin-wiring.sh の pin にも追加 (Phase 129.4)。 検査の除去には 2 つの独立したファイルの変更が必要になる 引用符認識を実装した過程で、旧パターンが取りこぼしていた 3 段パイプライン (`echo | jq | grep -qi`) を 1 件発見し、変数経由に分解した。 実測: - 検出件数 173 → 0 - 変換部分は追加 172 / 削除 172 の 1 対 1 (アサーション削除・期待値緩和ゼロ) - bash -n 全 58 ファイル OK (行末継続 `\` を壊した 4 箇所はここで検出し修正) - shellcheck warning は変換前後とも 29 件で同数、herestring 起因の新規指摘ゼロ - validate-plugin 132 合格 0 失敗 (131 + 新設 1 節) - check-consistency 全 24 通過 (変換対象に check-consistency.sh 自身を含む) - go test ./... 0 失敗、VERSION / plugin.json / harness.toml 非接触 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * docs(plan): Phase 129 完走 — 全 4 task を cc:done に更新 129.1 検出テスト新設 / 129.2 tests/ 131 箇所 / 129.3 scripts/ 42 箇所 / 129.4 配線 + closeout。各 task の Status に実測値を記録した。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(tests): 検出器の 2 件の欠陥を修正 (CodeRabbit 指摘) いずれも実測で再現を確認してから修正した。 - 行継続を跨ぐパイプラインの検出漏れ: `perl -ne` が物理行ごとに走査するため、 行末の `\` で分割された `printf ... \ | grep -q ...` を見落としていた。 物理行を論理行へ畳んでから走査する。行番号は論理行の開始位置を報告する - 引用符内のエスケープの誤解釈: 二重引用符の中の `\"` を閉じ引用符と解釈し、 後続の `| grep -q` が引用符の外に見えて誤検出していた。二重引用符の中でのみ `\` をエスケープとして扱う (単一引用符の中では shell の仕様どおり扱わない) fixture は 8 件 → 10 件。CHANGELOG に Before/After 表を追加した。 改良後の検出器を変更前ツリーへ適用すると 168 箇所 (旧実装は 173)。差の 5 件は 行継続の畳み込みによる数え方の違いで、検出漏れではない。物理行 782・783 を 2 件と数えていたものが論理行の開始 781 の 1 件になる。該当箇所は目視で 変換の正しさを確認済み。 検証: validate-plugin 132 合格 0 失敗、check-consistency 全 24 通過。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: tachibanashuuta <tachibana@canai.jp> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> | 1 个月前 | |
fix(tests): BSD 非互換 mktemp テンプレートを一掃 + 再発検出を配線 (Phase 127.1) BSD (macOS) の mktemp は X が末尾にある場合しか置換しない。 `mktemp /tmp/foo-XXXXXX.json` のように X の後ろに拡張子が続く形式は 乱数化されず、テンプレートそのままの literal path を返してそのファイルを作る。 残骸が残ると以降 EEXIST で永久に失敗する。GNU (Linux/CI) は末尾以外の X も 置換するため、この不具合は CI では一切再現せず macOS ローカル限定になる。 対象は tests/ 配下の 9 箇所。すべて `"${TMPDIR:-/tmp}/<name>.XXXXXX"` へ統一した (repo 内 59 箇所が TMPDIR 参照で主流)。拡張子は 9 箇所とも消費側が path として しか使わないことを確認したうえで落とした。 後始末が無かった 2 ファイル (test-accept-record.sh / test-harness-accept.sh) に trap を追加。中断で残骸が残ると以降永久に赤化する経路を塞ぐ (これは posttool-progress-regen.sh で実際に 3 日間起きた。c856ecec で修正済)。 再発検出は tests/test-mktemp-bsd-template-safety.sh を新設し tests/validate-plugin.sh へ配線 (.claude/rules/workflow-test-wiring.md 準拠。 .github/workflows/ は非接触)。shellcheck はこの書式を検出しないことを 実測確認済みのため専用検査が必要。検出は grep ベースの静的解析なので、 テンプレートを変数経由で間接的に渡す形は原理的に検出外 (現時点で該当箇所はゼロ)。 検証 (floor 免除 env を export したまま実行): - RED 実測: gate 追加直後に 9 件を検出して exit 1 - GREEN: 9 箇所修正後に検出 0 件 - 対照実験: 旧テンプレートの literal path を /tmp に置くと、ベース版は `mktemp: mkstemp failed on /tmp/plan-brief-test-XXXXXX.html: File exists` で停止し、修正版は同地点を通過 - tests/validate-plugin.sh 129 pass / 0 fail - scripts/ci/check-consistency.sh 全 24 通過 - 削除 9 行はすべて mktemp 行 (アサーションの削除・弱体化ゼロ) - 独立 reviewer が APPROVE (critical/major 0) Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> | 1 个月前 | |
fix(tests,scripts): pipefail 下の `producer | grep -q` 173 箇所を herestring へ一掃 (Phase 129) (#286) * fix(tests,scripts): pipefail 下の `producer | grep -q` 173 箇所を herestring へ一掃 PR #285 で実害 2 箇所を直したが、同じ書き方が 173 箇所残っていた。 `grep -q` は最初の一致で終了してパイプを閉じるため、分割書き込み中の producer が EPIPE で失敗する。`set -o pipefail` がその失敗をパイプライン 全体の結果へ昇格させるので、探す文字列が実在するのに「無い」と判定される。 一致が入力の前方にあるほど再現するため、合否が「探す文字列が何行目にあるか」 で決まる状態だった。 - tests/test-pipefail-grep-q-safety.sh を新設 (Phase 129.1)。 静的走査で該当箇所を検出し、fixture 8 件で除外条件を固定 (pipefail 無し / `|| true` / herestring / grep -c / コメント行 / 引用符内) - tests/ 39 ファイル 131 箇所、scripts/ 19 ファイル 42 箇所を変換 (Phase 129.2 / 129.3) - tests/validate-plugin.sh に節 19 を配線し、 tests/test-validate-plugin-wiring.sh の pin にも追加 (Phase 129.4)。 検査の除去には 2 つの独立したファイルの変更が必要になる 引用符認識を実装した過程で、旧パターンが取りこぼしていた 3 段パイプライン (`echo | jq | grep -qi`) を 1 件発見し、変数経由に分解した。 実測: - 検出件数 173 → 0 - 変換部分は追加 172 / 削除 172 の 1 対 1 (アサーション削除・期待値緩和ゼロ) - bash -n 全 58 ファイル OK (行末継続 `\` を壊した 4 箇所はここで検出し修正) - shellcheck warning は変換前後とも 29 件で同数、herestring 起因の新規指摘ゼロ - validate-plugin 132 合格 0 失敗 (131 + 新設 1 節) - check-consistency 全 24 通過 (変換対象に check-consistency.sh 自身を含む) - go test ./... 0 失敗、VERSION / plugin.json / harness.toml 非接触 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * docs(plan): Phase 129 完走 — 全 4 task を cc:done に更新 129.1 検出テスト新設 / 129.2 tests/ 131 箇所 / 129.3 scripts/ 42 箇所 / 129.4 配線 + closeout。各 task の Status に実測値を記録した。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(tests): 検出器の 2 件の欠陥を修正 (CodeRabbit 指摘) いずれも実測で再現を確認してから修正した。 - 行継続を跨ぐパイプラインの検出漏れ: `perl -ne` が物理行ごとに走査するため、 行末の `\` で分割された `printf ... \ | grep -q ...` を見落としていた。 物理行を論理行へ畳んでから走査する。行番号は論理行の開始位置を報告する - 引用符内のエスケープの誤解釈: 二重引用符の中の `\"` を閉じ引用符と解釈し、 後続の `| grep -q` が引用符の外に見えて誤検出していた。二重引用符の中でのみ `\` をエスケープとして扱う (単一引用符の中では shell の仕様どおり扱わない) fixture は 8 件 → 10 件。CHANGELOG に Before/After 表を追加した。 改良後の検出器を変更前ツリーへ適用すると 168 箇所 (旧実装は 173)。差の 5 件は 行継続の畳み込みによる数え方の違いで、検出漏れではない。物理行 782・783 を 2 件と数えていたものが論理行の開始 781 の 1 件になる。該当箇所は目視で 変換の正しさを確認済み。 検証: validate-plugin 132 合格 0 失敗、check-consistency 全 24 通過。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: tachibanashuuta <tachibana@canai.jp> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> | 1 个月前 | |
feat: add precompact hook guard and monitors manifest | 4 个月前 | |
fix(tests): here-document 本文の誤検出を塞ぎ、引数ファイル全体を検査する (CodeRabbit 指摘) 検出器が here-doc の本文にある `|` を実行されるパイプとして誤検出していた。 説明文やテンプレートに構文例を書いただけで検査が落ちる。物理行を読む段階で here-doc の終端子を追跡し、本文を走査対象から外す。`<<-` のタブ字下げ終端子 にも対応し、`<<<` (herestring) は here-doc と誤認しない正規表現にしてある。 読み飛ばしが後続の実コードまで隠さないことを非退行 fixture で固定した。 検出力の非退行も実測: 修正前ツリーへ適用して 29 行という検出数は不変。 test-pre-review-cursor.sh は引数ファイルの先頭 20 行しか検査しておらず (この制限は Phase 130 以前から存在)、21 行目以降の --write / --workspace / --resume を見逃していた。全体を検査する形へ変更する。 実測: fixture: PASS=14 → PASS=17 (here-doc 3 件追加) 修正前ツリーでの検出行数: 29 行 (変化なし = 検出力の非退行) bash tests/test-pre-review-cursor.sh → PASS=14 FAIL=0 bash tests/validate-plugin.sh → 合格 134 / 失敗 0 bash scripts/ci/check-consistency.sh → 全パス Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012ZBxNEtYJbtHkZcsAn8nsv | 1 个月前 | |
feat(phase-65.4.3): progress-alert.v1 drift detection (5 kinds) + HTML 色分け Phase D cycle 3/5。Progress Tracker の drift detection を実装。 5 種類の alert kind それぞれを検出し、severity (info/warn/critical) で HTML 表示時に色分け (青/黄/赤) する。 Changes: - scripts/progress-detect-drift.sh: 新規 detection script 入力 (CLI args) → 5 alert kind 判定 → progress-alert.v1 配列で stdout 出力 - scope-creep: Plans.md にない file 編集 → warn - time-overrun: elapsed > estimate × 1.5 → warn / 2.0× → critical - repeated-failure: fail count >= 3 → critical - cost-warning: cost ratio >= 80% → warn / 100%+ → critical - high-risk-file: harness.toml deny path matching → critical 全 input 空なら空配列を返す (no-op) - templates/html/progress.html.template: alert 色分け CSS + section 追加 alert-info (青) / alert-warn (黄) / alert-critical (赤) {{#alerts}} block で kind / message / suggested_action を render - tests/test-progress-drift.sh: 17 PASS / 0 FAIL Plans.md DoD (c) の 5 alert kind 各検出 + threshold 境界 (under) + 全 5 同時発火 + (d) HTML 色分け CSS 存在 + render 統合 - tests/validate-plugin.sh: 新テスト登録 (60 → 61 件) Validation: - bash tests/test-progress-drift.sh: 17 PASS / 0 FAIL - ./tests/validate-plugin.sh: 61 PASS / 0 FAIL Refs: Plans.md §65.4.3 | 4 个月前 | |
feat(phase-65.4.5): Phase 65.4.x e2e validation - Phase D complete Phase D 最終 cycle 5/5 (test-progress-e2e.sh: 16 PASS). validate-plugin 63 PASS / check-consistency 全合格. Phase D delivered: harness-progress + 5 alert + past-judgments + hook. Refs: Plans.md §65.4.1-65.4.5 | 4 个月前 | |
feat(phase-65.4.4): progress-past-judgments.sh + cross-project default OFF Phase D cycle 4/5。Progress Tracker の「過去の判断パターン」表示 (read side)。 alert kind と project name で過去 judgment 履歴を集計し、rejection_rate_pct と top 3 を JSON 出力する。Phase 65.3.5 と同じ flag mechanism で cross-project default OFF。 Changes: - scripts/progress-past-judgments.sh: 新規 --alert-kind <kind> --project <name> --records-file <jsonl-path> + optional --cross-project-group <name> records-file は alert-judgment.v1 形式の JSONL を受け取る (本来は skill が MCP search 結果を file 経由で渡す) output: {alert_kind, project, cross_project_used, total_count, rejected_count, rejection_rate_pct, top_3_judgments} top 3 は timestamp 降順 (新しい順) - tests/test-progress-past-judgments.sh: 11 PASS / 0 FAIL Plans.md DoD (d) の 4 ケース (0 件 / 3 件 mixed / 全 reject / 全 follow) + (c) cross-project default OFF (project filter 一致のみ集計、ON で解除) + alert kind enum 検証 + records-file not found / required args - tests/validate-plugin.sh: 新テスト登録 (61 → 62 件) Validation: - bash tests/test-progress-past-judgments.sh: 11 PASS / 0 FAIL - ./tests/validate-plugin.sh: 62 PASS / 0 FAIL Refs: Plans.md §65.4.4 | 4 个月前 | |
feat(phase-65.4.2): PostToolUse auto-regen hook + 60s rate limit Phase D cycle 2/5。Edit/Write/MultiEdit/Bash の発火をトリガーに、 Progress Tracker HTML を background で自動再生成する PostToolUse hook を追加。再生成頻度は 60 秒に 1 回に制限。 Changes: - scripts/hook-handlers/posttool-progress-regen.sh: 新規 hook handler Plans.md なし → skipped:no-plans-md rate-limit (last regen 60 秒以内) → skipped:rate-limit 通常時 → background fork で snapshot + render-html → state file 更新 hook は即座に return (CC を block しない、set +e) - .claude-plugin/hooks.json + hooks/hooks.json: dual sync (P29) PostToolUse 配下に matcher "Write|Edit|MultiEdit|Bash" entry 追加 既存 valid_root pattern を踏襲し、bin/harness ではなく直接 shell handler を exec timeout: 5s (background fork なので handler 自体は即座に return) - tests/test-progress-regen.sh: 19 PASS / 0 FAIL Plans.md DoD (e) の 4 ケース (初回 / 60秒以内 / 60秒超 / hook input 不正) + dual sync diff + JSON validity + handler entry presence の機械検証 - tests/validate-plugin.sh: 新テスト登録 (59 → 60 件) Validation: - bash tests/test-progress-regen.sh: 19 PASS / 0 FAIL - ./tests/validate-plugin.sh: 60 PASS / 0 FAIL - diff .claude-plugin/hooks.json hooks/hooks.json: 完全一致 Refs: Plans.md §65.4.2, .claude/rules/hooks-editing.md (P29 dual sync) | 4 个月前 | |
feat: add Java and Kotlin project detection | 2 个月前 | |
fix(p2): export ENABLE_PROMPT_CACHING_1H so subprocess inherits (Codex review #7) Phase 44.6.1 で env.local に書く形式が `KEY=VALUE` だったため、 `source env.local` しても shell-local 変数のままで claude (subprocess) に 継承されず、1h cache opt-in が実質機能していなかった。 修正: - enable-1h-cache.sh: `export KEY=VALUE` 形式で書き出す - test-prompt-cache-1h.sh: grep pattern を `^export ` 付きに更新 - test-prompt-cache-1h.sh Test 6: subprocess 継承テストを追加 (`bash -c "source env.local; bash -c 'echo $KEY'"` で子 bash に伝播確認) 合格ライン #4 (CC 機能の主張に裏付け) 抵触の修正。 | 4 个月前 | |
test(hosts): RED — re-pin claim/wording tests to supported tier (111.3.3/111.4.4/111.5.4) Failing against unchanged docs: - test-support-claim-wording: missing '| Codex CLI | `supported` |' in README.md - test-readme-product-surface: missing 'Codex CLI | `supported`' in README.md - test-public-claims-contract: codex tier must be supported (H8 pin) Co-authored-by: Cursor <cursoragent@cursor.com> | 1 个月前 | |
fix(distribution): harden opencode mirror gates | 3 个月前 | |
refactor: stale 依存テスト 4 件に skip-pass design guard を追加 clean public checkout で false failure を出していた 4 件のテストに、 `tests/test-memory-lifecycle-integration.sh` で確立した 「skip / require / override」3 状態 design upgrade を適用する。 各 test は対象ファイル不在時に exit 0 で skip-pass し、 HARNESS_MEM_REQUIRE=1 など explicit な CI gate flag が あれば fail に転じる contract に統一した。 これにより `for t in tests/*.sh; do bash "$t"; done` 形式の sweep でも false failure が発生しなくなる。 ## 修正内容 ### 1. tests/test-memory-lifecycle-integration.sh 姉妹 repo `../harness-mem` を要求する local-only test。 - 不在時に `cd` failure で exit 1 → skip exit 0 に変更 - HARNESS_MEM_REPO=/abs/path で custom 場所指定可 - HARNESS_MEM_REQUIRE=1 で fail 強制 (CI gate) ### 2. tests/test-harness-mem-bridge.sh v2.20.10 で削除された `scripts/harness-mem-client.sh` (Phase 60 managed-companion 移行) を test する stale wrapper。 - 不在時に exit 1 → skip exit 0 - 同 3 状態 contract (REPO / REQUIRE flag) 採用 ### 3. tests/test-quality-guardrails.sh 2 件の「FAIL 出力 + exit 0」曖昧 assertion を skip-pass に整理: - AGENTS.md (Codex CLI local config; 配布対象外) - docs/update-summary-2025-12-23-24.md (品質ガード導入時の一時 doc; 統合済み) ### 4. tests/test-release-version-sync.sh local-only mirror `.agents/skills/harness-release/SKILL.md` を ループ assert していた。clean checkout で `grep: No such file` 警告 + FAIL 出力 (exit は 0) → ループ内で `[skip]` continue に統一。 ## 影響範囲 - validate-plugin.sh: 48/48 PASS (regression 無し) - check-consistency.sh: ✅ 全合格 (regression 無し) - check-residue.sh: ✅ migration residue 0 件 - 4 件のテスト個別実行: skip / pass を意図通り出力 ## test-quality.md 整合性 「skip 化禁止」条項とは異なる正当な skip: - アサーション回避目的 (= 禁止) ではなく - 配布対象外ファイル / 局所 mirror に対する前提条件不足時の guard - 既存の Phase 52 `claude-codex-upstream-update` skip pattern と 同じ設計 (`skip: ... is local-only in clean public checkouts`) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> | 4 个月前 | |
test(readme): re-pin fixture literals to the Phase 126 README rewrite test-readme-product-surface.sh and test-readme-image-assets.sh still pinned the pre-rewrite headings and the old hero-operating-loop-*.png path, so both failed when run directly after ed856054's README rewrite (caught by harness-review; not CI-wired so it did not block the merge that shipped the rewrite). Re-pin to the current 11 headings and the new loop-*.svg hero image; assertion strength and count are unchanged. | 1 个月前 | |
test(readme): re-pin fixture literals to the Phase 126 README rewrite test-readme-product-surface.sh and test-readme-image-assets.sh still pinned the pre-rewrite headings and the old hero-operating-loop-*.png path, so both failed when run directly after ed856054's README rewrite (caught by harness-review; not CI-wired so it did not block the merge that shipped the rewrite). Re-pin to the current 11 headings and the new loop-*.svg hero image; assertion strength and count are unchanged. | 1 个月前 | |
feat(breezing): reap-worktrees.sh — harness worktree 掃除 (Phase 92.1.2) - scripts/reap-worktrees.sh: .harness-worktrees/ prefix 限定で worktree 削除 + reap 成功した task/* branch のみ -D + git worktree prune (canonical_path で macOS /private 正規化、CWD 内実行は fail-fast、 dirty worktree は default skip / --force でのみ削除、0 件 no-op 安全) - tests/test-reap-worktrees.sh: mktemp fixture 自己完結 contract test (3-worktree reap / 0 件 no-op / .harness-worktrees/ 外 worktree 生存 / dirty skip + --force 削除) 既知限界 (v1): clean だが未統合 commit を持つ task/* branch も削除される (cherry-pick 統合は patch-id 等価でしか判別不能)。reap は Lead が統合完了後に 明示実行する契約で運用。必要になれば git cherry による保護を follow-up。 TDD red evidence: missing executable → green で test-reap-worktrees: ok。 Lead 独立再実行で PASS 確認済み。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> | 3 个月前 | |
feat(calibration): record-review-calibration に critical_count/major_count/score_delta を追加 - record-review-calibration.sh: --review-result <path> オプションを追加し、 write-review-result.sh の normalization ルールと整合したカウントロジックを実装: critical_count = critical_issues[] + gaps[critical] + findings[critical] + observations[critical] major_count = major_issues[] + gaps[major] + findings[high] + observations[major] (companion raw の findings[severity:high] は major に射影 — write-review-result.sh と同じ規則) 前回同一タスクとの差分を score_delta として記録 - build-review-few-shot-bank.sh: 旧レコード(フィールド欠如)は // 0 default で読み出し、 score_delta は has("score_delta") で存在チェックしてから含める - tests/test-record-review-calibration.sh: smoke テスト 11 ケースを追加 (arg parsing 5 + dual-source critical 2 + findings[high] major 2 + mixed-major 1 + no-output 1) - 既存の jsonl レコード(2件)は一切書き換えない Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> | 4 个月前 | |
feat(phase-65.3.2): client-redaction.v1 dict + redact-by-dictionary.sh (Layer 2a) Phase C cycle 2/7。Layer 2a 辞書ベース固有名詞 redaction の SSOT schema と実装。D43 判断 3 (PiiRule 互換) + 判断 4 (二重置換ガード) を 両方織り込む。 Changes: - .claude/rules/client-redaction.yaml: 新規 SSOT schema_version: client-redaction.v1 clients: [], people: [], domains: [] (default 全 redact 無効) rule_id / name / aliases / replace_with の field 名は pii-filter.ts の PiiRule[] と互換 (D43 判断 3) - scripts/redact-by-dictionary.sh: bash → python3 launcher --input <text> または --stdin で受取、ヒット時 stderr に件数記録 D43 判断 4: [REDACTED_*] / [Entity] / [Client_*] / [Person_*] / [Domain_*] sentinel mark を退避 → redact → 復元の 3 段で 二重置換を防止 alias の長さ DESC sort で「田中太郎」が「田中」より先に処理される - tests/test-redact-by-dictionary.sh: 26 assertion Plans.md DoD (d) の 5 ケース (ヒット 0 / 1 / 複数 / aliases / 重複 redact_as) + D43 判断 4 の sentinel ガード 3 ケース + stdin / default dict / file not found / schema mismatch / duplicate rule_id - tests/validate-plugin.sh: 新テスト登録 (52 → 53 件) Validation: - bash tests/test-redact-by-dictionary.sh: 26 PASS / 0 FAIL - ./tests/validate-plugin.sh: 53 PASS / 0 FAIL - bash scripts/ci/check-consistency.sh: 全合格 Refs: Plans.md §65.3.2, D43 (decisions.md), .claude/rules/cross-repo-handoff.md | 4 个月前 | |
feat(phase-65.3.3): Layer 2b NER redaction (fugashi + fail-open + sentinel guard) Phase C cycle 3/7。Japanese tokenizer (fugashi + UniDic-lite) を使った 固有名詞 (人名 / 地名 / 一般固有名詞) の自動 redact 層。Plans.md DoD (b) が「kuromoji 等の lightweight Japanese tokenizer」を要求するが、 fugashi は同等以上の品質で既に環境に存在する Python tokenizer のため これを採用 (kuromoji-js より tooling の重複が少ない)。 Changes: - scripts/redact-by-ner.sh: bash → python3 launcher fugashi で形態素解析、pos2="固有名詞" のトークンを [Entity] に置換 white_space attribute で原文の空白配置を保持 連続する固有名詞 token は 1 [Entity] にマージ (e.g., 田中太郎 → 1 件) fail-open: fugashi 不在 / import 失敗 / tokenize 失敗 → exit 0、原文 そのまま、stderr に warning (Plans.md DoD d) D43 判断 4: sentinel mark ([REDACTED_*] / [Entity] / [Client_*] / [Person_*] / [Domain_*]) は退避 → NER → 復元の 3 段で二重置換防止 --input <text> または --stdin で受取 CCH_NER_DISABLE_TOKENIZER=1 env で fail-open path を test 可能に - tests/test-redact-by-ner.sh: 22 PASS / 0 FAIL Plans.md DoD (c) の 4 ケース (人名 / 会社名 / 地名 / 0 件) に加え、 fail-open / sentinel guard 3 種 / 隣接マージ / stdin / usage error - tests/validate-plugin.sh: 新テスト登録 (53 → 54 件) Validation: - bash tests/test-redact-by-ner.sh: 22 PASS / 0 FAIL - ./tests/validate-plugin.sh: 54 PASS / 0 FAIL - bash scripts/ci/check-consistency.sh: 全合格 Refs: Plans.md §65.3.3, D43 (decisions.md), .claude/rules/cross-repo-handoff.md | 4 个月前 | |
fix(p2-p3): consumer claude-longrun + monitor worktree + reenter stdout (Codex review #8) Codex review #8 で指摘された 3 件を Codex CLI に委託実装、Lead 独立検証で APPROVE → cherry-pick (out-of-scope な hookhandler test 修正は revert)。 1. P2: skills/harness-plan/SKILL.md が `bash scripts/claude-longrun.sh` を 推奨していたが、これは plugin install 後の consumer 環境には配布されない 開発補助スクリプト。`ENABLE_PROMPT_CACHING_1H=1 claude` の 1 行コマンド に変更し、開発リポジトリ内での代替 (claude-longrun.sh) を補足セクション で残す。codex/opencode mirror も同期。 2. P2: go/internal/session/monitor.go が .git/HEAD と .git/refs を直接 読んでいたため、worktree 内 (.git は file で gitdir: ... を含む) で branch=unknown, last_commit=none になっていた。git rev-parse 経由に 切り替え、worktree でも main repo でも同じ結果が取れるよう修正。 regression test を monitor_test.go に追加。 3. P3: scripts/reenter-worktree.sh が Markdown 説明を stdout に出力していた ため "Output (JSON)" 契約に違反。print_guidance() を stderr 出力に 切り替え、JSON は stdout 単体に。canonicalize_path ヘルパーで macOS の /private prefix にも対応。tests/test-reenter-worktree-json.sh (新設) で stdout JSON-only を回帰テスト化。validate-plugin.sh から呼び出し。 Codex 委託フロー: codex-companion.sh task --write → Lead が git diff で 独立検証 → out-of-scope (hookhandler IPv6 sandbox test 暴走) は revert → in-scope のみ commit。 | 4 个月前 | |
feat(guard,hooks,runtimefloor): port main-line security hardening to redesign (109.1a) branch-alignment ledger の port 対象 4 機能を this branch の構造に合わせ再実装: 1. hooks.json (dual) の valid_root wrapper 全 64 箇所から CLAUDE_PROJECT_DIR/ $PWD fallback を除去し installed cache 限定 + plugin.json identity check 必須化 (main 3cc09d1d 相当、repo-shadow による hook 権限コード実行を封鎖) 2. pretooluse-guard.sh に bookkeeping 免除 + TOCTOU hardening 一式 (add/reset/separator 除外 / -a/pathspec/-- 除外 / token 分解で unquoted pathspec 検出 / multiline$() fail-closed / --patch/--interactive 除外 / 監査 append)。109.5 harness-release multi-commit flow の #219 同型ブロック回避 3. SubagentStop reviewer-persist backstop を Go native 再実装 (main 5249ad76 相当、transcript から review-result.v1 抽出 → state 書込、外部 script exec なしで trust boundary クリーン) 4. runtimefloor egress owner-scope 免除を additive 追加 (main d9b3fd34 相当、 secret-read allowlist と非衝突) test: test-hooks-trusted-root / test-commit-guard 11 / test-release-multi-commit / backstop unit / runtimefloor egress、全 PASS。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0184cS3XYLitPZkhHp5KgYeq | 2 个月前 | |
Fix Hokage readiness review gate | 3 个月前 | |
fix(release): runner-scope skip for preflight host smoke — keep fail-closed on operator machine RED evidence: tag-triggered auto-release workflow run 29679591686 failed at [FAIL] host workflow smoke (host-smoke codex: FAIL / grok CLI required) because GitHub runners do not provision host CLIs; the gate's fail-closed consumer is the operator-machine preflight (H7), and a hard runner fail would block every release. - release-preflight-host-smoke.sh: on GITHUB_ACTIONS=true, a host whose CLI is absent is skipped with a visible line and skip-suffixed summary; outside GITHUB_ACTIONS a missing CLI still fails (probe cannot weaken local behavior) - test fixtures: runner-skip exit 0, runner-with-CLIs normal run, local fail preserved, existing cases pinned with GITHUB_ACTIONS= for CI stability - harness-release SKILL.md documents the runner scope; mirrors resynced - Plans.md 118.2 cc:done with the full autonomous-release evidence chain Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PhAQ54UyzaYB24XfiEPvwT | 1 个月前 | |
fix(release): warn on unavailable branch protection API Co-authored-by: Cursor <cursoragent@cursor.com> | 3 个月前 | |
fix(test): guard grep zero-hit exit under set -o pipefail Phase 95.1 follow-up (Lead review fix): when the assembled pattern matches zero lines, grep returns exit 1 and pipefail propagates it, causing the script to abort before the hit_count check. Wrap the grep in a brace group with `|| true` so zero hits are treated as success. Verified: bash ./tests/test-release-skill-no-gh-release.sh -> PASS exit 0. | 2 个月前 | |
fix(release): close candidate publication gaps | 1 个月前 | |
fix(tests,scripts): pipefail 下の `producer | grep -q` 173 箇所を herestring へ一掃 (Phase 129) (#286) * fix(tests,scripts): pipefail 下の `producer | grep -q` 173 箇所を herestring へ一掃 PR #285 で実害 2 箇所を直したが、同じ書き方が 173 箇所残っていた。 `grep -q` は最初の一致で終了してパイプを閉じるため、分割書き込み中の producer が EPIPE で失敗する。`set -o pipefail` がその失敗をパイプライン 全体の結果へ昇格させるので、探す文字列が実在するのに「無い」と判定される。 一致が入力の前方にあるほど再現するため、合否が「探す文字列が何行目にあるか」 で決まる状態だった。 - tests/test-pipefail-grep-q-safety.sh を新設 (Phase 129.1)。 静的走査で該当箇所を検出し、fixture 8 件で除外条件を固定 (pipefail 無し / `|| true` / herestring / grep -c / コメント行 / 引用符内) - tests/ 39 ファイル 131 箇所、scripts/ 19 ファイル 42 箇所を変換 (Phase 129.2 / 129.3) - tests/validate-plugin.sh に節 19 を配線し、 tests/test-validate-plugin-wiring.sh の pin にも追加 (Phase 129.4)。 検査の除去には 2 つの独立したファイルの変更が必要になる 引用符認識を実装した過程で、旧パターンが取りこぼしていた 3 段パイプライン (`echo | jq | grep -qi`) を 1 件発見し、変数経由に分解した。 実測: - 検出件数 173 → 0 - 変換部分は追加 172 / 削除 172 の 1 対 1 (アサーション削除・期待値緩和ゼロ) - bash -n 全 58 ファイル OK (行末継続 `\` を壊した 4 箇所はここで検出し修正) - shellcheck warning は変換前後とも 29 件で同数、herestring 起因の新規指摘ゼロ - validate-plugin 132 合格 0 失敗 (131 + 新設 1 節) - check-consistency 全 24 通過 (変換対象に check-consistency.sh 自身を含む) - go test ./... 0 失敗、VERSION / plugin.json / harness.toml 非接触 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * docs(plan): Phase 129 完走 — 全 4 task を cc:done に更新 129.1 検出テスト新設 / 129.2 tests/ 131 箇所 / 129.3 scripts/ 42 箇所 / 129.4 配線 + closeout。各 task の Status に実測値を記録した。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(tests): 検出器の 2 件の欠陥を修正 (CodeRabbit 指摘) いずれも実測で再現を確認してから修正した。 - 行継続を跨ぐパイプラインの検出漏れ: `perl -ne` が物理行ごとに走査するため、 行末の `\` で分割された `printf ... \ | grep -q ...` を見落としていた。 物理行を論理行へ畳んでから走査する。行番号は論理行の開始位置を報告する - 引用符内のエスケープの誤解釈: 二重引用符の中の `\"` を閉じ引用符と解釈し、 後続の `| grep -q` が引用符の外に見えて誤検出していた。二重引用符の中でのみ `\` をエスケープとして扱う (単一引用符の中では shell の仕様どおり扱わない) fixture は 8 件 → 10 件。CHANGELOG に Before/After 表を追加した。 改良後の検出器を変更前ツリーへ適用すると 168 箇所 (旧実装は 173)。差の 5 件は 行継続の畳み込みによる数え方の違いで、検出漏れではない。物理行 782・783 を 2 件と数えていたものが論理行の開始 781 の 1 件になる。該当箇所は目視で 変換の正しさを確認済み。 検証: validate-plugin 132 合格 0 失敗、check-consistency 全 24 通過。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: tachibanashuuta <tachibana@canai.jp> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> | 1 个月前 | |
fix(gates): cursor 総点検の findings 反映 — version-sync checker 拡張 + coverage-shrink pin + stale 修正 Lens 3 (coherence): - scripts/check-release-version-sync.py に .grok-plugin/plugin.json と harness.toml surface を追加 (CHANGELOG の '7 strings / 6 files' 主張を 機械 gate が実際に検証するように) - 発掘: tests/test-release-version-sync.sh は cursor-plugin 追加時から 期待値 stale で恒常 FAIL、かつどこにも未配線だった (今回の『未配線 test 問題』の既存実例)。期待値 2 箇所修正 + validate-plugin へ配線 - CHANGELOG [5.1.0] 'is being ticketed' → '§158 filed' (115.4 完了済み) - validate-plugin.sh の stale '39項目' comment / workflow-test-wiring.md に HG-3 解消注記 Lens 2 (red-team) P0: - tests/test-validate-plugin-wiring.sh 新設: validate-plugin.sh の必須 test 呼び出し 12 本を pin (coverage shrink を別 CI gate で検知) - scripts/ci/check-consistency.sh §24 に配線 (validate job と独立) - Plans.md 116.1 DoD 強化 (schema 列挙値 / prompt SHA pin / rule 適用 対象追記) + 116.2 起票 (edit-time shrink warn hook) 裁定 (変更なし): matrix Grok 行の pre_use_guard 'not claimed' は structural (hookcodec) と live guard の意図された境界であり矛盾ではない。 Plans.md 114.6 row の '6 文字列/5 ファイル' は完了 task の歴史記録として 保持 (living SSOT は versioning.md が正)。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KBF1xmCMXGKNVagzvUzL6A | 1 个月前 | |
feat(phase-65.3.4): render-html.sh --with-redaction (Layer 3 final scan) Phase C cycle 4/7。HTML 生成直前に dict → NER → final-scan の 3 段防御を 実行。Layer 3 (final-scan) で残骸検出時は HTML を**生成せず exit 1**。 Changes: - scripts/render-html.sh: --with-redaction flag 追加 (default: false、後方互換) --client-dict <path> flag 追加 (test 容易性、default は SSOT) flag 有効時、template render 後・write 前に 3 段順次: Layer 2a: redact-by-dictionary.sh --stdin (literal proper noun) Layer 2b: redact-by-ner.sh --stdin (fugashi tokenizer) Layer 3 : final-scan-redaction.py (カタカナ 5+ 連続検出) Layer 3 で残骸検出時: stderr に "detected: <token>, source: <line>", HTML 未生成、exit 1 (fail-safe) - scripts/final-scan-redaction.py: 新規 HTML/CSS/JS chrome (<!-- --> / /* */ / <style>... / <script>...) を scan 対象から除外 (template 著者の意図的な branding を false positive にしないため) Sentinel mark ([Entity] / [REDACTED_*] / [Client_*] / [Person_*] / [Domain_*]) も除外 カタカナ 5+ 連続を検出 → exit 1 (residue あり) / 0 (clean) detection ロジックを別ファイル化した理由: render-html.sh の bash heredoc + pipe で stdin 衝突する (heredoc が pipe 入力を 上書きする bash 仕様) ため - tests/test-render-html-redaction.sh: 新規 16 PASS Plans.md DoD (d) の 4 ケース (全 clean / dict / NER / final scan) + --with-redaction なしの後方互換 1 ケース - tests/validate-plugin.sh: 新テスト登録 (54 → 55 件) Validation: - bash tests/test-render-html-redaction.sh: 16 PASS / 0 FAIL - ./tests/validate-plugin.sh: 55 PASS / 0 FAIL - bash scripts/ci/check-consistency.sh: 全合格 Refs: Plans.md §65.3.4, D43 (decisions.md), .claude/rules/cross-repo-handoff.md | 4 个月前 | |
fix(tests,scripts): pipefail 下の `producer | grep -q` 173 箇所を herestring へ一掃 (Phase 129) (#286) * fix(tests,scripts): pipefail 下の `producer | grep -q` 173 箇所を herestring へ一掃 PR #285 で実害 2 箇所を直したが、同じ書き方が 173 箇所残っていた。 `grep -q` は最初の一致で終了してパイプを閉じるため、分割書き込み中の producer が EPIPE で失敗する。`set -o pipefail` がその失敗をパイプライン 全体の結果へ昇格させるので、探す文字列が実在するのに「無い」と判定される。 一致が入力の前方にあるほど再現するため、合否が「探す文字列が何行目にあるか」 で決まる状態だった。 - tests/test-pipefail-grep-q-safety.sh を新設 (Phase 129.1)。 静的走査で該当箇所を検出し、fixture 8 件で除外条件を固定 (pipefail 無し / `|| true` / herestring / grep -c / コメント行 / 引用符内) - tests/ 39 ファイル 131 箇所、scripts/ 19 ファイル 42 箇所を変換 (Phase 129.2 / 129.3) - tests/validate-plugin.sh に節 19 を配線し、 tests/test-validate-plugin-wiring.sh の pin にも追加 (Phase 129.4)。 検査の除去には 2 つの独立したファイルの変更が必要になる 引用符認識を実装した過程で、旧パターンが取りこぼしていた 3 段パイプライン (`echo | jq | grep -qi`) を 1 件発見し、変数経由に分解した。 実測: - 検出件数 173 → 0 - 変換部分は追加 172 / 削除 172 の 1 対 1 (アサーション削除・期待値緩和ゼロ) - bash -n 全 58 ファイル OK (行末継続 `\` を壊した 4 箇所はここで検出し修正) - shellcheck warning は変換前後とも 29 件で同数、herestring 起因の新規指摘ゼロ - validate-plugin 132 合格 0 失敗 (131 + 新設 1 節) - check-consistency 全 24 通過 (変換対象に check-consistency.sh 自身を含む) - go test ./... 0 失敗、VERSION / plugin.json / harness.toml 非接触 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * docs(plan): Phase 129 完走 — 全 4 task を cc:done に更新 129.1 検出テスト新設 / 129.2 tests/ 131 箇所 / 129.3 scripts/ 42 箇所 / 129.4 配線 + closeout。各 task の Status に実測値を記録した。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(tests): 検出器の 2 件の欠陥を修正 (CodeRabbit 指摘) いずれも実測で再現を確認してから修正した。 - 行継続を跨ぐパイプラインの検出漏れ: `perl -ne` が物理行ごとに走査するため、 行末の `\` で分割された `printf ... \ | grep -q ...` を見落としていた。 物理行を論理行へ畳んでから走査する。行番号は論理行の開始位置を報告する - 引用符内のエスケープの誤解釈: 二重引用符の中の `\"` を閉じ引用符と解釈し、 後続の `| grep -q` が引用符の外に見えて誤検出していた。二重引用符の中でのみ `\` をエスケープとして扱う (単一引用符の中では shell の仕様どおり扱わない) fixture は 8 件 → 10 件。CHANGELOG に Before/After 表を追加した。 改良後の検出器を変更前ツリーへ適用すると 168 箇所 (旧実装は 173)。差の 5 件は 行継続の畳み込みによる数え方の違いで、検出漏れではない。物理行 782・783 を 2 件と数えていたものが論理行の開始 781 の 1 件になる。該当箇所は目視で 変換の正しさを確認済み。 検証: validate-plugin 132 合格 0 失敗、check-consistency 全 24 通過。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: tachibanashuuta <tachibana@canai.jp> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> | 1 个月前 | |
fix(guardrail): 削除確認を「何を消すか」で判断する (R05, Phase 133.10) operator 指摘: 「一律的に禁止するのではなく、何を削除しようとしているかで 判断すべき。サブエージェントの worktree での作業内での削除まで確認が入るのは 有益とは思えない」 ## 実測した非対称 R04 (プロジェクト外への書き込み) は IsAllowlistedTempPath を見て scratchpad への書き込みを無言で通すのに、R05 は同じ判定を持たなかった。つまり同じ場所へ 「書く」のは無言で、「消す」だけ確認される状態だった。 ## 設計 判断は対象のみで行う。確認せず通すのは次の 2 つだけを消す場合: 1. プロジェクトルート配下 (task worktree を含む) 2. このセッション自身の scratch (OS 一時領域の下で、パス成分にセッション ID を持つもの) サブエージェントか否か・worktree 内か否かでは変えない。身分に latitude を 与えると、身分を偽れる相手に権限が渡る。 ## 設計を一度誤り、落ちたテストが教えた 最初は「OS の一時領域なら通す」としたが、既存ガードテスト 2 件が落ちた。 原因は /tmp が共有であること — 他セッションの scratchpad も他ツールの一時 状態も同じ場所にある。「一時領域だから消してよい」は自分のものと他人のものを 区別していなかった。セッション ID をパス成分として要求する形に絞り直したら、 既存テストは 1 行も変更せず全て通った。 除外したもの: - 一時領域のルート自体 (rm -rf /tmp) — 他の全員を巻き添えにする - ~/.cache 系 — 観測された問題の解決に不要。緩和は最小集合から始める - IsAgentStatePath (~/.claude/projects/<slug>/memory) — R04 は書き込みを 通すが、再帰削除は蓄積した知識の喪失で blast radius が違う ## 併せて解除した 2 つの過剰保守 (どちらも実測つき) - パイプ: 対象がすべて絶対パスなら判定不能にしない。パイプ両側の削除対象は 元々両方抽出できており (rm A | rm B -> [A B])、真に危険な xargs 系は独立に 検出される (実験で確認)。相対パス時は基準ディレクトリが動きうるので従来どおり - 変数: 同一コマンド内で一度だけリテラル代入された変数を解決する。エージェント は F="$S/x" の形で対象を組み立てるため、解決しないと実質すべての削除が確認に なる。二重代入・コマンド置換・空白を含む値・未定義参照は解決しない ## 検証 - work-mode off の control つき 15 ケース行列で 0 不一致 (work-mode on だと R04/R05 が丸ごと skip され allow の主張が空振りになる。 一度これで自作自演の測定をしたため control を必須にした) - 既存の Go テストは 1 行も変更していない (go test ./... 全 green) - 回帰網: go/internal/policy/r05_session_scratch_test.go - 変異検査で「広すぎた初期設計」を検出することを確認 - validate-plugin 139/0、check-consistency 全合格、binary drift OK decisions.md D59 / Plans.md 133.10 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PCi5GLAfya9aWYnDc7cmhs | 30 天前 | |
feat: add sandbagging-aware weak supervision | 4 个月前 | |
feat: harden long-running review and release workflows | 5 个月前 | |
feat(verification): Phase 134-137 — 検証チェーン配線修理 + writing lint + surface + ループ施策 Phase 134: 入口 (risk_flags→profile 自動昇格 + ratchet) / 中間 (PENDING_BROWSER fail-visible, pending_validations) / 出口 (accept-collect-evidence.sh による artifact 機械接続) の 3 継ぎ目を接続。scope leash 本配線 (warn 既定)、Playwright Screencast evidence、worker-report.v1 永続化、再調査ループ、検証の検証 (check-verification-chain-wiring.sh + 実効性契約テスト 3 本、RED→GREEN 実測)。 Phase 135: writinglint エンジン (辞書は個人層) + PostToolUse advisory + Stop 全体再検査 + 指摘→ルール自動ドラフト→人間承認ループ + config schema 正式化。 Phase 136: 3 surface スマホ viewport / 承認待ちキュー表示 / diagram-design 接続点。 Phase 137: 採点設計規律 (criteria 3 層翻訳) / blind 受け手検査 / 評価者 4 契約。 decisions.md D62-D68 に判断根拠を記録。worker 契約に NG-4 追加。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TFcsXBG95kTdxPfDaP7Vuu | 27 天前 | |
feat: add sandbagging-aware weak supervision | 4 个月前 | |
fix: add browser verdict fallback handling | 4 个月前 | |
Integrate Claude 2.1.80-2.1.86 upstream improvements | 5 个月前 | |
fix(tests,scripts): pipefail 下の `producer | grep -q` 173 箇所を herestring へ一掃 (Phase 129) (#286) * fix(tests,scripts): pipefail 下の `producer | grep -q` 173 箇所を herestring へ一掃 PR #285 で実害 2 箇所を直したが、同じ書き方が 173 箇所残っていた。 `grep -q` は最初の一致で終了してパイプを閉じるため、分割書き込み中の producer が EPIPE で失敗する。`set -o pipefail` がその失敗をパイプライン 全体の結果へ昇格させるので、探す文字列が実在するのに「無い」と判定される。 一致が入力の前方にあるほど再現するため、合否が「探す文字列が何行目にあるか」 で決まる状態だった。 - tests/test-pipefail-grep-q-safety.sh を新設 (Phase 129.1)。 静的走査で該当箇所を検出し、fixture 8 件で除外条件を固定 (pipefail 無し / `|| true` / herestring / grep -c / コメント行 / 引用符内) - tests/ 39 ファイル 131 箇所、scripts/ 19 ファイル 42 箇所を変換 (Phase 129.2 / 129.3) - tests/validate-plugin.sh に節 19 を配線し、 tests/test-validate-plugin-wiring.sh の pin にも追加 (Phase 129.4)。 検査の除去には 2 つの独立したファイルの変更が必要になる 引用符認識を実装した過程で、旧パターンが取りこぼしていた 3 段パイプライン (`echo | jq | grep -qi`) を 1 件発見し、変数経由に分解した。 実測: - 検出件数 173 → 0 - 変換部分は追加 172 / 削除 172 の 1 対 1 (アサーション削除・期待値緩和ゼロ) - bash -n 全 58 ファイル OK (行末継続 `\` を壊した 4 箇所はここで検出し修正) - shellcheck warning は変換前後とも 29 件で同数、herestring 起因の新規指摘ゼロ - validate-plugin 132 合格 0 失敗 (131 + 新設 1 節) - check-consistency 全 24 通過 (変換対象に check-consistency.sh 自身を含む) - go test ./... 0 失敗、VERSION / plugin.json / harness.toml 非接触 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * docs(plan): Phase 129 完走 — 全 4 task を cc:done に更新 129.1 検出テスト新設 / 129.2 tests/ 131 箇所 / 129.3 scripts/ 42 箇所 / 129.4 配線 + closeout。各 task の Status に実測値を記録した。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(tests): 検出器の 2 件の欠陥を修正 (CodeRabbit 指摘) いずれも実測で再現を確認してから修正した。 - 行継続を跨ぐパイプラインの検出漏れ: `perl -ne` が物理行ごとに走査するため、 行末の `\` で分割された `printf ... \ | grep -q ...` を見落としていた。 物理行を論理行へ畳んでから走査する。行番号は論理行の開始位置を報告する - 引用符内のエスケープの誤解釈: 二重引用符の中の `\"` を閉じ引用符と解釈し、 後続の `| grep -q` が引用符の外に見えて誤検出していた。二重引用符の中でのみ `\` をエスケープとして扱う (単一引用符の中では shell の仕様どおり扱わない) fixture は 8 件 → 10 件。CHANGELOG に Before/After 表を追加した。 改良後の検出器を変更前ツリーへ適用すると 168 箇所 (旧実装は 173)。差の 5 件は 行継続の畳み込みによる数え方の違いで、検出漏れではない。物理行 782・783 を 2 件と数えていたものが論理行の開始 781 の 1 件になる。該当箇所は目視で 変換の正しさを確認済み。 検証: validate-plugin 132 合格 0 失敗、check-consistency 全 24 通過。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: tachibanashuuta <tachibana@canai.jp> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> | 1 个月前 | |
feat(verification): Phase 134-137 — 検証チェーン配線修理 + writing lint + surface + ループ施策 Phase 134: 入口 (risk_flags→profile 自動昇格 + ratchet) / 中間 (PENDING_BROWSER fail-visible, pending_validations) / 出口 (accept-collect-evidence.sh による artifact 機械接続) の 3 継ぎ目を接続。scope leash 本配線 (warn 既定)、Playwright Screencast evidence、worker-report.v1 永続化、再調査ループ、検証の検証 (check-verification-chain-wiring.sh + 実効性契約テスト 3 本、RED→GREEN 実測)。 Phase 135: writinglint エンジン (辞書は個人層) + PostToolUse advisory + Stop 全体再検査 + 指摘→ルール自動ドラフト→人間承認ループ + config schema 正式化。 Phase 136: 3 surface スマホ viewport / 承認待ちキュー表示 / diagram-design 接続点。 Phase 137: 採点設計規律 (criteria 3 層翻訳) / blind 受け手検査 / 評価者 4 契約。 decisions.md D62-D68 に判断根拠を記録。worker 契約に NG-4 追加。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TFcsXBG95kTdxPfDaP7Vuu | 27 天前 | |
feat: add session resume and fork controls Wire /work flags to session-control, archive sessions for resume, and add a minimal test for resume/fork behavior. | 7 个月前 | |
fix(tests,scripts): pipefail 下の `producer | grep -q` 173 箇所を herestring へ一掃 (Phase 129) (#286) * fix(tests,scripts): pipefail 下の `producer | grep -q` 173 箇所を herestring へ一掃 PR #285 で実害 2 箇所を直したが、同じ書き方が 173 箇所残っていた。 `grep -q` は最初の一致で終了してパイプを閉じるため、分割書き込み中の producer が EPIPE で失敗する。`set -o pipefail` がその失敗をパイプライン 全体の結果へ昇格させるので、探す文字列が実在するのに「無い」と判定される。 一致が入力の前方にあるほど再現するため、合否が「探す文字列が何行目にあるか」 で決まる状態だった。 - tests/test-pipefail-grep-q-safety.sh を新設 (Phase 129.1)。 静的走査で該当箇所を検出し、fixture 8 件で除外条件を固定 (pipefail 無し / `|| true` / herestring / grep -c / コメント行 / 引用符内) - tests/ 39 ファイル 131 箇所、scripts/ 19 ファイル 42 箇所を変換 (Phase 129.2 / 129.3) - tests/validate-plugin.sh に節 19 を配線し、 tests/test-validate-plugin-wiring.sh の pin にも追加 (Phase 129.4)。 検査の除去には 2 つの独立したファイルの変更が必要になる 引用符認識を実装した過程で、旧パターンが取りこぼしていた 3 段パイプライン (`echo | jq | grep -qi`) を 1 件発見し、変数経由に分解した。 実測: - 検出件数 173 → 0 - 変換部分は追加 172 / 削除 172 の 1 対 1 (アサーション削除・期待値緩和ゼロ) - bash -n 全 58 ファイル OK (行末継続 `\` を壊した 4 箇所はここで検出し修正) - shellcheck warning は変換前後とも 29 件で同数、herestring 起因の新規指摘ゼロ - validate-plugin 132 合格 0 失敗 (131 + 新設 1 節) - check-consistency 全 24 通過 (変換対象に check-consistency.sh 自身を含む) - go test ./... 0 失敗、VERSION / plugin.json / harness.toml 非接触 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * docs(plan): Phase 129 完走 — 全 4 task を cc:done に更新 129.1 検出テスト新設 / 129.2 tests/ 131 箇所 / 129.3 scripts/ 42 箇所 / 129.4 配線 + closeout。各 task の Status に実測値を記録した。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(tests): 検出器の 2 件の欠陥を修正 (CodeRabbit 指摘) いずれも実測で再現を確認してから修正した。 - 行継続を跨ぐパイプラインの検出漏れ: `perl -ne` が物理行ごとに走査するため、 行末の `\` で分割された `printf ... \ | grep -q ...` を見落としていた。 物理行を論理行へ畳んでから走査する。行番号は論理行の開始位置を報告する - 引用符内のエスケープの誤解釈: 二重引用符の中の `\"` を閉じ引用符と解釈し、 後続の `| grep -q` が引用符の外に見えて誤検出していた。二重引用符の中でのみ `\` をエスケープとして扱う (単一引用符の中では shell の仕様どおり扱わない) fixture は 8 件 → 10 件。CHANGELOG に Before/After 表を追加した。 改良後の検出器を変更前ツリーへ適用すると 168 箇所 (旧実装は 173)。差の 5 件は 行継続の畳み込みによる数え方の違いで、検出漏れではない。物理行 782・783 を 2 件と数えていたものが論理行の開始 781 の 1 件になる。該当箇所は目視で 変換の正しさを確認済み。 検証: validate-plugin 132 合格 0 失敗、check-consistency 全 24 通過。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: tachibanashuuta <tachibana@canai.jp> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> | 1 个月前 | |
fix(tests,scripts): pipefail 下の `producer | grep -q` 173 箇所を herestring へ一掃 (Phase 129) (#286) * fix(tests,scripts): pipefail 下の `producer | grep -q` 173 箇所を herestring へ一掃 PR #285 で実害 2 箇所を直したが、同じ書き方が 173 箇所残っていた。 `grep -q` は最初の一致で終了してパイプを閉じるため、分割書き込み中の producer が EPIPE で失敗する。`set -o pipefail` がその失敗をパイプライン 全体の結果へ昇格させるので、探す文字列が実在するのに「無い」と判定される。 一致が入力の前方にあるほど再現するため、合否が「探す文字列が何行目にあるか」 で決まる状態だった。 - tests/test-pipefail-grep-q-safety.sh を新設 (Phase 129.1)。 静的走査で該当箇所を検出し、fixture 8 件で除外条件を固定 (pipefail 無し / `|| true` / herestring / grep -c / コメント行 / 引用符内) - tests/ 39 ファイル 131 箇所、scripts/ 19 ファイル 42 箇所を変換 (Phase 129.2 / 129.3) - tests/validate-plugin.sh に節 19 を配線し、 tests/test-validate-plugin-wiring.sh の pin にも追加 (Phase 129.4)。 検査の除去には 2 つの独立したファイルの変更が必要になる 引用符認識を実装した過程で、旧パターンが取りこぼしていた 3 段パイプライン (`echo | jq | grep -qi`) を 1 件発見し、変数経由に分解した。 実測: - 検出件数 173 → 0 - 変換部分は追加 172 / 削除 172 の 1 対 1 (アサーション削除・期待値緩和ゼロ) - bash -n 全 58 ファイル OK (行末継続 `\` を壊した 4 箇所はここで検出し修正) - shellcheck warning は変換前後とも 29 件で同数、herestring 起因の新規指摘ゼロ - validate-plugin 132 合格 0 失敗 (131 + 新設 1 節) - check-consistency 全 24 通過 (変換対象に check-consistency.sh 自身を含む) - go test ./... 0 失敗、VERSION / plugin.json / harness.toml 非接触 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * docs(plan): Phase 129 完走 — 全 4 task を cc:done に更新 129.1 検出テスト新設 / 129.2 tests/ 131 箇所 / 129.3 scripts/ 42 箇所 / 129.4 配線 + closeout。各 task の Status に実測値を記録した。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(tests): 検出器の 2 件の欠陥を修正 (CodeRabbit 指摘) いずれも実測で再現を確認してから修正した。 - 行継続を跨ぐパイプラインの検出漏れ: `perl -ne` が物理行ごとに走査するため、 行末の `\` で分割された `printf ... \ | grep -q ...` を見落としていた。 物理行を論理行へ畳んでから走査する。行番号は論理行の開始位置を報告する - 引用符内のエスケープの誤解釈: 二重引用符の中の `\"` を閉じ引用符と解釈し、 後続の `| grep -q` が引用符の外に見えて誤検出していた。二重引用符の中でのみ `\` をエスケープとして扱う (単一引用符の中では shell の仕様どおり扱わない) fixture は 8 件 → 10 件。CHANGELOG に Before/After 表を追加した。 改良後の検出器を変更前ツリーへ適用すると 168 箇所 (旧実装は 173)。差の 5 件は 行継続の畳み込みによる数え方の違いで、検出漏れではない。物理行 782・783 を 2 件と数えていたものが論理行の開始 781 の 1 件になる。該当箇所は目視で 変換の正しさを確認済み。 検証: validate-plugin 132 合格 0 失敗、check-consistency 全 24 通過。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: tachibanashuuta <tachibana@canai.jp> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> | 1 个月前 | |
feat(cost-control): add session tool call tracking and skill governance tests Phase 3 implementation: - Add cost control to scripts/pretooluse-guard.sh - Track total_tool_calls, edit_calls, bash_calls per session - Configurable limits via cost_control section in config - Warn at threshold percentage (default 80%) - Block when limits reached - Add tests/validate-skills.sh for skill governance - Validate SKILL.md frontmatter (description, allowed-tools) - Check allowed-tools against valid Claude Code tool names - Verify references/ directory contents - Validate dependencies point to existing skills - Add tests/test-session-state.sh unit tests - Test valid state transitions - Test invalid transition rejection - Test event log creation and format Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> | 7 个月前 | |
fix: reduce sandbox permission prompts Add a low-risk local development allowlist to harness permissions and propagate it through sync generation. Keep install, arbitrary exec, destructive git, and secret access behind ask/deny gates. Rebuild platform binaries so checked-in sync preserves the allowlist. | 3 个月前 | |
feat: add English setup templates with Japanese opt-in | 4 个月前 | |
feat(guardrail): 計画時の事前承認を R12 の確認抑制に接続する (126.5) 事前承認は「計画確定時に 1 回だけ確認し、実行中は同じことで再確認しない」設計だが、 実装は片肺だった。secret-read の承認だけが静的に project config へ焼き込まれ、 external-send と destructive の承認は skill の散文にしか存在せず、Go 側の判定に 一切接続されていなかった。承認済みの push でも R12 が毎回確認を出していた。 既存の焼き込み経路には、scope を検証せず無期限にマージする欠陥もあった。 ## plan-preapproval.v2 templates/schemas/plan-preapproval.v2.json を新設。各承認に expires_at (必須)、 max_uses (既定 10)、uses を持たせた。v1 は additionalProperties: false のため フィールドを後付けできず、別 schema とした。v1 は読み取り互換に限る。 「一度使ったら失効」ではなく回数上限にした。PR closeout は CI 修正後に再 push する ことがあり、単発消費だと 2 回目で確認が復活して当初の目的を壊すため。恒久緩和を 防ぐ性質は、有効期限とスコープ一致と回数上限の 3 つで担保する。 ## スコープ解決 hook 実行時に現在の phase/task を知る経路が無かったため、 .claude/state/active-task.json を新設し、harness-work / breezing がタスク開始時に 書く手順を追記した。env の HARNESS_ACTIVE_PHASE / HARNESS_ACTIVE_TASK も参照する。 どちらも解決できない場合は承認なし扱いで確認を維持する。 ## R12 への接続 保護ブランチへの直接 push で ask を返す分岐の手前に、有効な承認があれば規則を 発火させない判定を挿入した。deny 設定の分岐は抑制しない。設定で明示的に禁止された ものを承認で覆せてはならない。 コマンド照合は正規化後の完全一致で、<...> のプレースホルダのみ空白を含まない 1 トークンとして一致させる。前方一致や部分一致にすると承認範囲が意図せず広がるため。 ## runtime floor は対象外 floor の 5 カテゴリには接続していない。floor は「どの設定でも上書きできない 最終防波堤」であり、例外は operator が明示宣言する 2 つに限ると spec が 数え上げている。本変更が触るのは guardrail 規則の R12 のみで、 この境界をコードコメントと docs に明記した。 ## 実測 (12 項目すべて期待どおり) 承認済み+scope一致+期限内 -> 抑制 (approve) 期限切れ / 回数超過 / denied -> ask に復帰 scope 不一致 / 解決不能 -> ask 承認記録なし / JSON 破損 -> ask (fail-safe) v1 記録 -> ask (互換読取のみ) 承認と完全一致 -> 抑制 余分な引数 / 承認外の remote -> ask 別ブランチ (placeholder) -> 抑制 floor 対象コマンド -> deny (承認は floor を上書きしない) 抑制適用後 -> uses が 1 増えて記録される ## スクリプト scripts/plan-preapproval.sh を v2 対応にし、apply-secret-allow が scope を 検証せずマージする既知欠陥も直した。現在の phase/task と一致する承認だけを反映する。 このスクリプトは shellcheck の検査対象リストに入っていなかったため追加した。 検証: go test ./... は既存の負荷依存テスト 1 件を除き PASS (TestLeaseReclaim_ConcurrentSlowPath は単独実行で 0.4 秒で通り、変更を含まない メイン checkout でも同様。全体実行時の高負荷で 89 秒かかって落ちる既存の不安定さ)。 gofmt clean、go vet clean、shellcheck PASS、 test-plan-preapproval / test-shell-lint / test-3cli-hook-floor / test-runtimefloor-secret-allowlist-e2e すべて PASS。 126.1-126.4 の回帰確認 10 項目も不一致ゼロ。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Implemented-by: Codex (gpt-5.6-sol, xhigh) via codex-companion, Lead-verified | 1 个月前 | |
Implement Phase 70 Hokage Core gates | 3 个月前 | |
fix(tests,scripts): pipefail 下の producer|grep -q 34 箇所を herestring 化 (Phase 130.2) Phase 129 の検出器は producer を printf/echo/cat の 3 種に限定していたため、 jq/find/git/grep/head/シェル関数呼び出しなどを producer とする同型の欠陥が 検出網から漏れていた。tests/test-i18n-locale-resolver.sh:196 で実測したところ、 `jq -r '...' <<< "$x" | grep -q '応答言語: 日本語'` は 20/20 で「無い」と 誤判定された (探す文字列は先頭 4 byte 目に実在する)。 対象 14 ファイル 34 箇所を herestring/変数捕捉へ書き換えた: - producer が変数の場合はそのまま `grep -q P <<<"$x"` へ - producer がコマンド/関数呼び出しの場合は `X="$(producer)"; grep -q P <<<"$X"` へ分解 (task-completed.sh の _signal_exists、test-tool-first-onboarding.sh の section_for 呼び出しなど) - test-codex-loop-cli.sh の `&&` 連結 3 段判定、test-hermes-agent-candidate.sh の 3 段パイプライン (最終段のみ EPIPE リスクがあるため最終段だけ分解) も対応 producer 側の exit status が元々検証されていなかった箇所には `|| true` を 付けて capture したが、これは grep 側の判定を変えない (最終アサーションは そのまま維持され、producer 失敗時も従来どおりのフェイルメッセージへ落ちる)。 RED: tests/test-i18n-locale-resolver.sh を修正前で 20 回連続実行し 19/20 失敗 GREEN: 同テストを修正後で 20 回連続実行し 20/20 成功 影響した各テストファイル (test-codex-loop-cli.sh 42/42, test-codex-package.sh 25/25, test-harness-accept.sh 66/66, test-harness-plan-brief.sh 32/32, test-plan-brief-e2e.sh 30/30 など) は全て既存合格数を維持。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012ZBxNEtYJbtHkZcsAn8nsv | 1 个月前 | |
feat: Phase 62.2.1-62.2.5 — Tier 2 governance/telemetry/policy 実装 5 つの Tier 2 タスクを実装: 62.2.1 (PostToolUse.updatedToolOutput governance): - scripts/hook-handlers/posttool-output-normalize.sh (新規) opt-in handler HARNESS_OUTPUT_GOVERNANCE_ENABLE=1 で有効化、API key redaction を allowlist 方式で - .claude/state/output-audit.jsonl に before/after を append-only 記録 - JSON 契約 tool (Read/Grep/Bash/TodoWrite) は skip - tests/test-output-governance.sh (新規) 6 ケース PASS (改ざん用途は実装に存在しないことを source 検査で固定) 62.2.2 (--agent permissionMode reaffirmation): - tests/test-agent-permission-mode.sh (新規) 5 観点 PASS - worker/reviewer/scaffolder/advisor の frontmatter に permissionMode が無いことを固定 (Phase 59.2.3 方針) - Reviewer の Read-only enforcement は tools/disallowedTools の組み合わせで担保 - CC 2.1.119+ で permissionMode が reactivate された場合の gate として機能 62.2.3 (skill_activated.invocation_trigger telemetry): - docs/skill-telemetry-policy.md (新規) privacy/retention/opt-out - scripts/skill-trigger-telemetry.sh (新規) JSON Lines append-only ledger writer session_id を 12 文字に truncate (privacy minimization) - tests/test-skill-trigger-telemetry.sh (新規) 5 観点 PASS (3 trigger 区別 / opt-out / exclude / append-only / session_id truncation) - Phase 58.2.3 の「telemetry sink 設計が先」判断を local-only sink で実装 62.2.4 (CLAUDE_CODE_SESSION_ID env policy): - docs/session-id-env-policy.md (新規) 4 経路の使い分け (1) hook handler は stdin JSON が SSOT (2) Bash 子プロセスは env var (CC 2.1.132+) (3) long-running watcher は state file (4) CLAUDE_TRANSCRIPT_PATH regex は使わない (legacy) - tests/test-hook-handler-session-id.sh (新規) 6 観点 PASS hook handlers が stdin JSON 経由で session_id を取得することを固定 62.2.5 (skillOverrides 3 mode governance): - docs/skill-overrides-policy.md (新規) off / user-invocable-only / name-only の使い分け - 推奨: 個人=未設定、enterprise=name-only、education=user-invocable-only - harness-init は default を入れない (CC default 尊重) - Phase 59.1.2 skill manifest との関係を明記 横断: - tests/test-settings-baseline.sh (新規) 62.1.4 + 62.2.5 共通の baseline 検証 template canonical (9 件) を強制、.claude-plugin/settings.json 不一致は WARN として記録 (self-protection guardrail で edit 不可のため user 手動同期が必要) User 手動操作 follow-up (cycle 1 から継続): - .claude-plugin/settings.json の deniedDomains を template に合わせて 6 件追加 (pastebin.com, transfer.sh, 0x0.st, paste.ee, termbin.com, ix.io) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> | 4 个月前 | |
feat(breezing): spawn-parallel.sh + Worktree Root Discipline (Phase 92.1.1) - scripts/spawn-parallel.sh: git fetch origin + 単一 BASE SHA から .harness-worktrees/task-<name> を idempotent に作成 (same-base no-op / diff-base fail-fast / branch 再利用 edge case 対応) + git config rerere.enabled true - tests/test-spawn-parallel.sh: mktemp temp repo + bare origin の自己完結 contract test (同一 base SHA / rerere / idempotent / fail-fast) - go/internal/breezing: HarnessWorktreesRoot 定数 + ParallelWorktreePath / ManagerWorktreePath helper、Create() を helper 経由に統一 - spec.md: Worktree Root Discipline 節 (.harness-worktrees/ = parallel task 単一 root、.claude/worktrees/ = CC live agent 専用、混同禁止 invariant) - docs/team-composition.md: parallel worktree root の spec 相互参照 TDD red evidence: worktree_test.go undefined symbols (build failed) → green で全 PASS。go test ./... -count=1 全パッケージ PASS (Lead 独立再検証)。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> | 3 个月前 | |
fix(guardrail): --no-verify bypass (#171) + remove unwired scaffolder agent (#170) (#177) * fix(guardrail): detect --no-verify/--no-gpg-sign bypass via shell metacharacters R10 only treated whitespace as a flag-token boundary, so forms like `git commit --no-verify&&echo` slipped past the guardrail and could bypass pre-commit hooks / signature verification. Broaden the boundary to include shell token separators ([\s;&|()<>]) and add regression tests for the bypass forms plus false-positive guards. Fixes #171 https://claude.ai/code/session_01MNT1hAQw9AzGapXdEA3BFp * refactor(agents): remove unwired scaffolder agent Per issue #170 evaluation: agents/scaffolder.md defined analyze/scaffold/ update-state modes but had no spawn path (no skill or hook ever called subagent_type="claude-code-harness:scaffolder"). Scaffolding is done inline by harness-setup and state sync by harness-plan; setup/plan are interactive Lead flows where worktree isolation is counterproductive, so the agent provided no benefit and only misled readers as a registered-but- dead stub. Remove the agent definition and clean up all active references: - hooks SubagentStart/Stop matchers (hooks/ + .claude-plugin/, dual-synced) - docs: team-composition, agent-frontmatter-policy, distribution-scope, go/DESIGN - skills harness-setup/harness-plan/harness-loop + codex/opencode mirrors - tests that asserted scaffolder.md (spec-ssot, upstream-integration, agent-permission-mode, validate-plugin-v3) updated for the removal - generic agent_type examples in go comments/test + detect-test-framework.sh Result: 3-agent topology (worker / reviewer / advisor). check-consistency green, scaffolder-referencing tests pass, go tests pass. History (CHANGELOG / memory archive / v3-architecture) intentionally retained. Closes #170 https://claude.ai/code/session_01MNT1hAQw9AzGapXdEA3BFp --------- Co-authored-by: Claude <noreply@anthropic.com> | 3 个月前 | |
feat(harness-loop): finish phase 41 follow-ups | 4 个月前 | |
fix(tests,scripts): pipefail 下の `producer | grep -q` 173 箇所を herestring へ一掃 (Phase 129) (#286) * fix(tests,scripts): pipefail 下の `producer | grep -q` 173 箇所を herestring へ一掃 PR #285 で実害 2 箇所を直したが、同じ書き方が 173 箇所残っていた。 `grep -q` は最初の一致で終了してパイプを閉じるため、分割書き込み中の producer が EPIPE で失敗する。`set -o pipefail` がその失敗をパイプライン 全体の結果へ昇格させるので、探す文字列が実在するのに「無い」と判定される。 一致が入力の前方にあるほど再現するため、合否が「探す文字列が何行目にあるか」 で決まる状態だった。 - tests/test-pipefail-grep-q-safety.sh を新設 (Phase 129.1)。 静的走査で該当箇所を検出し、fixture 8 件で除外条件を固定 (pipefail 無し / `|| true` / herestring / grep -c / コメント行 / 引用符内) - tests/ 39 ファイル 131 箇所、scripts/ 19 ファイル 42 箇所を変換 (Phase 129.2 / 129.3) - tests/validate-plugin.sh に節 19 を配線し、 tests/test-validate-plugin-wiring.sh の pin にも追加 (Phase 129.4)。 検査の除去には 2 つの独立したファイルの変更が必要になる 引用符認識を実装した過程で、旧パターンが取りこぼしていた 3 段パイプライン (`echo | jq | grep -qi`) を 1 件発見し、変数経由に分解した。 実測: - 検出件数 173 → 0 - 変換部分は追加 172 / 削除 172 の 1 対 1 (アサーション削除・期待値緩和ゼロ) - bash -n 全 58 ファイル OK (行末継続 `\` を壊した 4 箇所はここで検出し修正) - shellcheck warning は変換前後とも 29 件で同数、herestring 起因の新規指摘ゼロ - validate-plugin 132 合格 0 失敗 (131 + 新設 1 節) - check-consistency 全 24 通過 (変換対象に check-consistency.sh 自身を含む) - go test ./... 0 失敗、VERSION / plugin.json / harness.toml 非接触 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * docs(plan): Phase 129 完走 — 全 4 task を cc:done に更新 129.1 検出テスト新設 / 129.2 tests/ 131 箇所 / 129.3 scripts/ 42 箇所 / 129.4 配線 + closeout。各 task の Status に実測値を記録した。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(tests): 検出器の 2 件の欠陥を修正 (CodeRabbit 指摘) いずれも実測で再現を確認してから修正した。 - 行継続を跨ぐパイプラインの検出漏れ: `perl -ne` が物理行ごとに走査するため、 行末の `\` で分割された `printf ... \ | grep -q ...` を見落としていた。 物理行を論理行へ畳んでから走査する。行番号は論理行の開始位置を報告する - 引用符内のエスケープの誤解釈: 二重引用符の中の `\"` を閉じ引用符と解釈し、 後続の `| grep -q` が引用符の外に見えて誤検出していた。二重引用符の中でのみ `\` をエスケープとして扱う (単一引用符の中では shell の仕様どおり扱わない) fixture は 8 件 → 10 件。CHANGELOG に Before/After 表を追加した。 改良後の検出器を変更前ツリーへ適用すると 168 箇所 (旧実装は 173)。差の 5 件は 行継続の畳み込みによる数え方の違いで、検出漏れではない。物理行 782・783 を 2 件と数えていたものが論理行の開始 781 の 1 件になる。該当箇所は目視で 変換の正しさを確認済み。 検証: validate-plugin 132 合格 0 失敗、check-consistency 全 24 通過。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: tachibanashuuta <tachibana@canai.jp> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> | 1 个月前 | |
fix(tests,scripts): pipefail 下の `producer | grep -q` 173 箇所を herestring へ一掃 (Phase 129) (#286) * fix(tests,scripts): pipefail 下の `producer | grep -q` 173 箇所を herestring へ一掃 PR #285 で実害 2 箇所を直したが、同じ書き方が 173 箇所残っていた。 `grep -q` は最初の一致で終了してパイプを閉じるため、分割書き込み中の producer が EPIPE で失敗する。`set -o pipefail` がその失敗をパイプライン 全体の結果へ昇格させるので、探す文字列が実在するのに「無い」と判定される。 一致が入力の前方にあるほど再現するため、合否が「探す文字列が何行目にあるか」 で決まる状態だった。 - tests/test-pipefail-grep-q-safety.sh を新設 (Phase 129.1)。 静的走査で該当箇所を検出し、fixture 8 件で除外条件を固定 (pipefail 無し / `|| true` / herestring / grep -c / コメント行 / 引用符内) - tests/ 39 ファイル 131 箇所、scripts/ 19 ファイル 42 箇所を変換 (Phase 129.2 / 129.3) - tests/validate-plugin.sh に節 19 を配線し、 tests/test-validate-plugin-wiring.sh の pin にも追加 (Phase 129.4)。 検査の除去には 2 つの独立したファイルの変更が必要になる 引用符認識を実装した過程で、旧パターンが取りこぼしていた 3 段パイプライン (`echo | jq | grep -qi`) を 1 件発見し、変数経由に分解した。 実測: - 検出件数 173 → 0 - 変換部分は追加 172 / 削除 172 の 1 対 1 (アサーション削除・期待値緩和ゼロ) - bash -n 全 58 ファイル OK (行末継続 `\` を壊した 4 箇所はここで検出し修正) - shellcheck warning は変換前後とも 29 件で同数、herestring 起因の新規指摘ゼロ - validate-plugin 132 合格 0 失敗 (131 + 新設 1 節) - check-consistency 全 24 通過 (変換対象に check-consistency.sh 自身を含む) - go test ./... 0 失敗、VERSION / plugin.json / harness.toml 非接触 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * docs(plan): Phase 129 完走 — 全 4 task を cc:done に更新 129.1 検出テスト新設 / 129.2 tests/ 131 箇所 / 129.3 scripts/ 42 箇所 / 129.4 配線 + closeout。各 task の Status に実測値を記録した。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(tests): 検出器の 2 件の欠陥を修正 (CodeRabbit 指摘) いずれも実測で再現を確認してから修正した。 - 行継続を跨ぐパイプラインの検出漏れ: `perl -ne` が物理行ごとに走査するため、 行末の `\` で分割された `printf ... \ | grep -q ...` を見落としていた。 物理行を論理行へ畳んでから走査する。行番号は論理行の開始位置を報告する - 引用符内のエスケープの誤解釈: 二重引用符の中の `\"` を閉じ引用符と解釈し、 後続の `| grep -q` が引用符の外に見えて誤検出していた。二重引用符の中でのみ `\` をエスケープとして扱う (単一引用符の中では shell の仕様どおり扱わない) fixture は 8 件 → 10 件。CHANGELOG に Before/After 表を追加した。 改良後の検出器を変更前ツリーへ適用すると 168 箇所 (旧実装は 173)。差の 5 件は 行継続の畳み込みによる数え方の違いで、検出漏れではない。物理行 782・783 を 2 件と数えていたものが論理行の開始 781 の 1 件になる。該当箇所は目視で 変換の正しさを確認済み。 検証: validate-plugin 132 合格 0 失敗、check-consistency 全 24 通過。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: tachibanashuuta <tachibana@canai.jp> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> | 1 个月前 | |
test(hosts): RED — re-pin claim/wording tests to supported tier (111.3.3/111.4.4/111.5.4) Failing against unchanged docs: - test-support-claim-wording: missing '| Codex CLI | `supported` |' in README.md - test-readme-product-surface: missing 'Codex CLI | `supported`' in README.md - test-public-claims-contract: codex tier must be supported (H8 pin) Co-authored-by: Cursor <cursoragent@cursor.com> | 1 个月前 | |
fix(tests,scripts): pipefail 下の `producer | grep -q` 173 箇所を herestring へ一掃 (Phase 129) (#286) * fix(tests,scripts): pipefail 下の `producer | grep -q` 173 箇所を herestring へ一掃 PR #285 で実害 2 箇所を直したが、同じ書き方が 173 箇所残っていた。 `grep -q` は最初の一致で終了してパイプを閉じるため、分割書き込み中の producer が EPIPE で失敗する。`set -o pipefail` がその失敗をパイプライン 全体の結果へ昇格させるので、探す文字列が実在するのに「無い」と判定される。 一致が入力の前方にあるほど再現するため、合否が「探す文字列が何行目にあるか」 で決まる状態だった。 - tests/test-pipefail-grep-q-safety.sh を新設 (Phase 129.1)。 静的走査で該当箇所を検出し、fixture 8 件で除外条件を固定 (pipefail 無し / `|| true` / herestring / grep -c / コメント行 / 引用符内) - tests/ 39 ファイル 131 箇所、scripts/ 19 ファイル 42 箇所を変換 (Phase 129.2 / 129.3) - tests/validate-plugin.sh に節 19 を配線し、 tests/test-validate-plugin-wiring.sh の pin にも追加 (Phase 129.4)。 検査の除去には 2 つの独立したファイルの変更が必要になる 引用符認識を実装した過程で、旧パターンが取りこぼしていた 3 段パイプライン (`echo | jq | grep -qi`) を 1 件発見し、変数経由に分解した。 実測: - 検出件数 173 → 0 - 変換部分は追加 172 / 削除 172 の 1 対 1 (アサーション削除・期待値緩和ゼロ) - bash -n 全 58 ファイル OK (行末継続 `\` を壊した 4 箇所はここで検出し修正) - shellcheck warning は変換前後とも 29 件で同数、herestring 起因の新規指摘ゼロ - validate-plugin 132 合格 0 失敗 (131 + 新設 1 節) - check-consistency 全 24 通過 (変換対象に check-consistency.sh 自身を含む) - go test ./... 0 失敗、VERSION / plugin.json / harness.toml 非接触 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * docs(plan): Phase 129 完走 — 全 4 task を cc:done に更新 129.1 検出テスト新設 / 129.2 tests/ 131 箇所 / 129.3 scripts/ 42 箇所 / 129.4 配線 + closeout。各 task の Status に実測値を記録した。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(tests): 検出器の 2 件の欠陥を修正 (CodeRabbit 指摘) いずれも実測で再現を確認してから修正した。 - 行継続を跨ぐパイプラインの検出漏れ: `perl -ne` が物理行ごとに走査するため、 行末の `\` で分割された `printf ... \ | grep -q ...` を見落としていた。 物理行を論理行へ畳んでから走査する。行番号は論理行の開始位置を報告する - 引用符内のエスケープの誤解釈: 二重引用符の中の `\"` を閉じ引用符と解釈し、 後続の `| grep -q` が引用符の外に見えて誤検出していた。二重引用符の中でのみ `\` をエスケープとして扱う (単一引用符の中では shell の仕様どおり扱わない) fixture は 8 件 → 10 件。CHANGELOG に Before/After 表を追加した。 改良後の検出器を変更前ツリーへ適用すると 168 箇所 (旧実装は 173)。差の 5 件は 行継続の畳み込みによる数え方の違いで、検出漏れではない。物理行 782・783 を 2 件と数えていたものが論理行の開始 781 の 1 件になる。該当箇所は目視で 変換の正しさを確認済み。 検証: validate-plugin 132 合格 0 失敗、check-consistency 全 24 通過。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: tachibanashuuta <tachibana@canai.jp> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> | 1 个月前 | |
fix(tests,scripts): pipefail 下の `producer | grep -q` 173 箇所を herestring へ一掃 (Phase 129) (#286) * fix(tests,scripts): pipefail 下の `producer | grep -q` 173 箇所を herestring へ一掃 PR #285 で実害 2 箇所を直したが、同じ書き方が 173 箇所残っていた。 `grep -q` は最初の一致で終了してパイプを閉じるため、分割書き込み中の producer が EPIPE で失敗する。`set -o pipefail` がその失敗をパイプライン 全体の結果へ昇格させるので、探す文字列が実在するのに「無い」と判定される。 一致が入力の前方にあるほど再現するため、合否が「探す文字列が何行目にあるか」 で決まる状態だった。 - tests/test-pipefail-grep-q-safety.sh を新設 (Phase 129.1)。 静的走査で該当箇所を検出し、fixture 8 件で除外条件を固定 (pipefail 無し / `|| true` / herestring / grep -c / コメント行 / 引用符内) - tests/ 39 ファイル 131 箇所、scripts/ 19 ファイル 42 箇所を変換 (Phase 129.2 / 129.3) - tests/validate-plugin.sh に節 19 を配線し、 tests/test-validate-plugin-wiring.sh の pin にも追加 (Phase 129.4)。 検査の除去には 2 つの独立したファイルの変更が必要になる 引用符認識を実装した過程で、旧パターンが取りこぼしていた 3 段パイプライン (`echo | jq | grep -qi`) を 1 件発見し、変数経由に分解した。 実測: - 検出件数 173 → 0 - 変換部分は追加 172 / 削除 172 の 1 対 1 (アサーション削除・期待値緩和ゼロ) - bash -n 全 58 ファイル OK (行末継続 `\` を壊した 4 箇所はここで検出し修正) - shellcheck warning は変換前後とも 29 件で同数、herestring 起因の新規指摘ゼロ - validate-plugin 132 合格 0 失敗 (131 + 新設 1 節) - check-consistency 全 24 通過 (変換対象に check-consistency.sh 自身を含む) - go test ./... 0 失敗、VERSION / plugin.json / harness.toml 非接触 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * docs(plan): Phase 129 完走 — 全 4 task を cc:done に更新 129.1 検出テスト新設 / 129.2 tests/ 131 箇所 / 129.3 scripts/ 42 箇所 / 129.4 配線 + closeout。各 task の Status に実測値を記録した。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(tests): 検出器の 2 件の欠陥を修正 (CodeRabbit 指摘) いずれも実測で再現を確認してから修正した。 - 行継続を跨ぐパイプラインの検出漏れ: `perl -ne` が物理行ごとに走査するため、 行末の `\` で分割された `printf ... \ | grep -q ...` を見落としていた。 物理行を論理行へ畳んでから走査する。行番号は論理行の開始位置を報告する - 引用符内のエスケープの誤解釈: 二重引用符の中の `\"` を閉じ引用符と解釈し、 後続の `| grep -q` が引用符の外に見えて誤検出していた。二重引用符の中でのみ `\` をエスケープとして扱う (単一引用符の中では shell の仕様どおり扱わない) fixture は 8 件 → 10 件。CHANGELOG に Before/After 表を追加した。 改良後の検出器を変更前ツリーへ適用すると 168 箇所 (旧実装は 173)。差の 5 件は 行継続の畳み込みによる数え方の違いで、検出漏れではない。物理行 782・783 を 2 件と数えていたものが論理行の開始 781 の 1 件になる。該当箇所は目視で 変換の正しさを確認済み。 検証: validate-plugin 132 合格 0 失敗、check-consistency 全 24 通過。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: tachibanashuuta <tachibana@canai.jp> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> | 1 个月前 | |
fix(plugin): close runtime cache surfaces for 4.16.3 | 2 个月前 | |
fix(tests,scripts): pipefail 下の `producer | grep -q` 173 箇所を herestring へ一掃 (Phase 129) (#286) * fix(tests,scripts): pipefail 下の `producer | grep -q` 173 箇所を herestring へ一掃 PR #285 で実害 2 箇所を直したが、同じ書き方が 173 箇所残っていた。 `grep -q` は最初の一致で終了してパイプを閉じるため、分割書き込み中の producer が EPIPE で失敗する。`set -o pipefail` がその失敗をパイプライン 全体の結果へ昇格させるので、探す文字列が実在するのに「無い」と判定される。 一致が入力の前方にあるほど再現するため、合否が「探す文字列が何行目にあるか」 で決まる状態だった。 - tests/test-pipefail-grep-q-safety.sh を新設 (Phase 129.1)。 静的走査で該当箇所を検出し、fixture 8 件で除外条件を固定 (pipefail 無し / `|| true` / herestring / grep -c / コメント行 / 引用符内) - tests/ 39 ファイル 131 箇所、scripts/ 19 ファイル 42 箇所を変換 (Phase 129.2 / 129.3) - tests/validate-plugin.sh に節 19 を配線し、 tests/test-validate-plugin-wiring.sh の pin にも追加 (Phase 129.4)。 検査の除去には 2 つの独立したファイルの変更が必要になる 引用符認識を実装した過程で、旧パターンが取りこぼしていた 3 段パイプライン (`echo | jq | grep -qi`) を 1 件発見し、変数経由に分解した。 実測: - 検出件数 173 → 0 - 変換部分は追加 172 / 削除 172 の 1 対 1 (アサーション削除・期待値緩和ゼロ) - bash -n 全 58 ファイル OK (行末継続 `\` を壊した 4 箇所はここで検出し修正) - shellcheck warning は変換前後とも 29 件で同数、herestring 起因の新規指摘ゼロ - validate-plugin 132 合格 0 失敗 (131 + 新設 1 節) - check-consistency 全 24 通過 (変換対象に check-consistency.sh 自身を含む) - go test ./... 0 失敗、VERSION / plugin.json / harness.toml 非接触 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * docs(plan): Phase 129 完走 — 全 4 task を cc:done に更新 129.1 検出テスト新設 / 129.2 tests/ 131 箇所 / 129.3 scripts/ 42 箇所 / 129.4 配線 + closeout。各 task の Status に実測値を記録した。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(tests): 検出器の 2 件の欠陥を修正 (CodeRabbit 指摘) いずれも実測で再現を確認してから修正した。 - 行継続を跨ぐパイプラインの検出漏れ: `perl -ne` が物理行ごとに走査するため、 行末の `\` で分割された `printf ... \ | grep -q ...` を見落としていた。 物理行を論理行へ畳んでから走査する。行番号は論理行の開始位置を報告する - 引用符内のエスケープの誤解釈: 二重引用符の中の `\"` を閉じ引用符と解釈し、 後続の `| grep -q` が引用符の外に見えて誤検出していた。二重引用符の中でのみ `\` をエスケープとして扱う (単一引用符の中では shell の仕様どおり扱わない) fixture は 8 件 → 10 件。CHANGELOG に Before/After 表を追加した。 改良後の検出器を変更前ツリーへ適用すると 168 箇所 (旧実装は 173)。差の 5 件は 行継続の畳み込みによる数え方の違いで、検出漏れではない。物理行 782・783 を 2 件と数えていたものが論理行の開始 781 の 1 件になる。該当箇所は目視で 変換の正しさを確認済み。 検証: validate-plugin 132 合格 0 失敗、check-consistency 全 24 通過。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: tachibanashuuta <tachibana@canai.jp> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> | 1 个月前 | |
feat(harness): add TDD and spec SSOT workflow guards | 4 个月前 | |
chore: release v4.6.0 | 4 个月前 | |
feat: Phase 91.7 prune — delete accreted skills + superseded scaffolding Delete 15 clearly-accreted skills across all three trees (skills/, codex/.codex/skills/, opencode/skills/ — 366 files): app-scaffolding (auth/crud/ui/deploy), media-gen (generate-slide/generate-video/notebookLM), the session-* cluster (session/session-control/session-init/session-memory/ session-state), and the guide cluster (vibecoder-guide/workflow-guide/ principles). The ~7 ambiguous "coaching" skills (harness-plan-brief/accept/ progress + agent-browser/gogcli-ops/cc-*) are conservatively KEPT — better to retain than wrongly delete; a precise list can prune them later. Delete the migration/self-audit scaffolding now superseded by the policy/ deny-surface self-audit (Phase 91.6): scripts/check-residue.sh, .claude/rules/deleted-concepts.yaml (+ remove validate-plugin Section 9 and the doctor --residue flag that ran them). Delete the version-pinned rule files hooks-2.1.{139,152}-plus.md + skill-frontmatter-2.1.152-plus.md (+ pointers). Add go/internal/docsgen + `harness gen docs[ --check]`: regenerate the docs/CLAUDE-skill-catalog.md catalog from skills/*/SKILL.md frontmatter (24 surviving skills) so the catalog cannot drift. Gates: validate-plugin.sh 0 failures, check-consistency.sh PASS (mirror parity 15/15/15), go build+test PASS, gen --check + gen docs --check exit 0. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> | 3 个月前 | |
feat(116.1): independent test-wiring auditor — agent + deterministic core + SHA pin Deliverables: - agents/test-wiring-auditor.md (fixed prompt, read-only, no memory key) - scripts/test-wiring-audit-core.sh (deterministic mechanical floor) - templates/schemas/test-wiring-audit.v1.json (draft-07, verdict enum pinned) - tests/test-test-wiring-auditor.sh GREEN + real SHA pin - wiring: validate-plugin.sh invocation + REQUIRED_INVOCATIONS pin - docs: opus-4-7-prompt-audit.md scope + workflow-test-wiring.md 実装 note Verification (run by Lead in this worktree): - bash tests/test-test-wiring-auditor.sh: ok - bash tests/validate-plugin.sh: 失敗 0 - bash scripts/ci/check-consistency.sh: すべてのチェックに合格 - bash tests/test-support-claim-wording.sh: PASS Note: implementation by cursor composer-2.5-fast; commit proxied by Lead after companion stalled 46min post-completion (documented stall pattern). Co-authored-by: Cursor <cursoragent@cursor.com> | 1 个月前 | |
fix(hosts): re-pin tool-capability-matrix test to supported tiers + restore evidence phrases CI-only pin missed by the H8 sweep: test-tool-capability-matrix.sh builds its expected tier rows dynamically, so the literal grep for internal-compatible in tests/ did not surface it, and it is wired only in opencode-compat.yml (not validate-plugin.sh). Tier rows re-pinned to supported; the dropped Codex CLI evidence phrases (CI-gated install smoke, isolated CODEX_HOME) restored to the doc row since the facts still hold. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PhAQ54UyzaYB24XfiEPvwT | 1 个月前 | |
fix(tests,scripts): pipefail 下の producer|grep -q 34 箇所を herestring 化 (Phase 130.2) Phase 129 の検出器は producer を printf/echo/cat の 3 種に限定していたため、 jq/find/git/grep/head/シェル関数呼び出しなどを producer とする同型の欠陥が 検出網から漏れていた。tests/test-i18n-locale-resolver.sh:196 で実測したところ、 `jq -r '...' <<< "$x" | grep -q '応答言語: 日本語'` は 20/20 で「無い」と 誤判定された (探す文字列は先頭 4 byte 目に実在する)。 対象 14 ファイル 34 箇所を herestring/変数捕捉へ書き換えた: - producer が変数の場合はそのまま `grep -q P <<<"$x"` へ - producer がコマンド/関数呼び出しの場合は `X="$(producer)"; grep -q P <<<"$X"` へ分解 (task-completed.sh の _signal_exists、test-tool-first-onboarding.sh の section_for 呼び出しなど) - test-codex-loop-cli.sh の `&&` 連結 3 段判定、test-hermes-agent-candidate.sh の 3 段パイプライン (最終段のみ EPIPE リスクがあるため最終段だけ分解) も対応 producer 側の exit status が元々検証されていなかった箇所には `|| true` を 付けて capture したが、これは grep 側の判定を変えない (最終アサーションは そのまま維持され、producer 失敗時も従来どおりのフェイルメッセージへ落ちる)。 RED: tests/test-i18n-locale-resolver.sh を修正前で 20 回連続実行し 19/20 失敗 GREEN: 同テストを修正後で 20 回連続実行し 20/20 成功 影響した各テストファイル (test-codex-loop-cli.sh 42/42, test-codex-package.sh 25/25, test-harness-accept.sh 66/66, test-harness-plan-brief.sh 32/32, test-plan-brief-e2e.sh 30/30 など) は全て既存合格数を維持。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012ZBxNEtYJbtHkZcsAn8nsv | 1 个月前 | |
feat: add skill orchestration contracts | 4 个月前 | |
fix(tests,scripts): pipefail 下の `producer | grep -q` 173 箇所を herestring へ一掃 (Phase 129) (#286) * fix(tests,scripts): pipefail 下の `producer | grep -q` 173 箇所を herestring へ一掃 PR #285 で実害 2 箇所を直したが、同じ書き方が 173 箇所残っていた。 `grep -q` は最初の一致で終了してパイプを閉じるため、分割書き込み中の producer が EPIPE で失敗する。`set -o pipefail` がその失敗をパイプライン 全体の結果へ昇格させるので、探す文字列が実在するのに「無い」と判定される。 一致が入力の前方にあるほど再現するため、合否が「探す文字列が何行目にあるか」 で決まる状態だった。 - tests/test-pipefail-grep-q-safety.sh を新設 (Phase 129.1)。 静的走査で該当箇所を検出し、fixture 8 件で除外条件を固定 (pipefail 無し / `|| true` / herestring / grep -c / コメント行 / 引用符内) - tests/ 39 ファイル 131 箇所、scripts/ 19 ファイル 42 箇所を変換 (Phase 129.2 / 129.3) - tests/validate-plugin.sh に節 19 を配線し、 tests/test-validate-plugin-wiring.sh の pin にも追加 (Phase 129.4)。 検査の除去には 2 つの独立したファイルの変更が必要になる 引用符認識を実装した過程で、旧パターンが取りこぼしていた 3 段パイプライン (`echo | jq | grep -qi`) を 1 件発見し、変数経由に分解した。 実測: - 検出件数 173 → 0 - 変換部分は追加 172 / 削除 172 の 1 対 1 (アサーション削除・期待値緩和ゼロ) - bash -n 全 58 ファイル OK (行末継続 `\` を壊した 4 箇所はここで検出し修正) - shellcheck warning は変換前後とも 29 件で同数、herestring 起因の新規指摘ゼロ - validate-plugin 132 合格 0 失敗 (131 + 新設 1 節) - check-consistency 全 24 通過 (変換対象に check-consistency.sh 自身を含む) - go test ./... 0 失敗、VERSION / plugin.json / harness.toml 非接触 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * docs(plan): Phase 129 完走 — 全 4 task を cc:done に更新 129.1 検出テスト新設 / 129.2 tests/ 131 箇所 / 129.3 scripts/ 42 箇所 / 129.4 配線 + closeout。各 task の Status に実測値を記録した。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(tests): 検出器の 2 件の欠陥を修正 (CodeRabbit 指摘) いずれも実測で再現を確認してから修正した。 - 行継続を跨ぐパイプラインの検出漏れ: `perl -ne` が物理行ごとに走査するため、 行末の `\` で分割された `printf ... \ | grep -q ...` を見落としていた。 物理行を論理行へ畳んでから走査する。行番号は論理行の開始位置を報告する - 引用符内のエスケープの誤解釈: 二重引用符の中の `\"` を閉じ引用符と解釈し、 後続の `| grep -q` が引用符の外に見えて誤検出していた。二重引用符の中でのみ `\` をエスケープとして扱う (単一引用符の中では shell の仕様どおり扱わない) fixture は 8 件 → 10 件。CHANGELOG に Before/After 表を追加した。 改良後の検出器を変更前ツリーへ適用すると 168 箇所 (旧実装は 173)。差の 5 件は 行継続の畳み込みによる数え方の違いで、検出漏れではない。物理行 782・783 を 2 件と数えていたものが論理行の開始 781 の 1 件になる。該当箇所は目視で 変換の正しさを確認済み。 検証: validate-plugin 132 合格 0 失敗、check-consistency 全 24 通過。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: tachibanashuuta <tachibana@canai.jp> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> | 1 个月前 | |
fix(harness-loop): Lead レビュー実装の信頼性向上 5 項目(41.1.3) (a) Codex companion review を Worker の worktreePath で実行するよう修正。 Lead が main repo dir にいると diff が空になる問題を解消。 worktreePath が空または main と同一の場合は Lead dir で実行(フォールバック)。 (b) reviewer_profile 分岐を harness-loop flow.md に追加。 "runtime" の場合は run-contract-review-checks.sh を Worker の worktree 内で実行し verdict を上書き。"browser" の場合は generate-browser-review-artifact.sh で PENDING_BROWSER scaffold を生成(static verdict はそのまま)。 (c) cleanup 順序を「cherry-pick → worktree remove → branch -D」に変更。 worktree に checkout 済みの feature branch を先に worktree remove することで "branch is checked out at <path>" エラーを解消。 (d) validate-plugin.sh --quick の contract syntax check に jq フォールバックを追加。 jq → python3 → skip(fail-open)の 3-tier で macOS 素の環境でも誤 FAIL しない。 (e) plans-watcher.sh の lock 取得失敗を fail-closed に変更。 3 回 retry 後も取得できない場合は exit 11 で abort し、 plans-state.json への無保護な read-modify-write を防止する。 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> | 4 个月前 | |
feat(verification): Phase 134-137 — 検証チェーン配線修理 + writing lint + surface + ループ施策 Phase 134: 入口 (risk_flags→profile 自動昇格 + ratchet) / 中間 (PENDING_BROWSER fail-visible, pending_validations) / 出口 (accept-collect-evidence.sh による artifact 機械接続) の 3 継ぎ目を接続。scope leash 本配線 (warn 既定)、Playwright Screencast evidence、worker-report.v1 永続化、再調査ループ、検証の検証 (check-verification-chain-wiring.sh + 実効性契約テスト 3 本、RED→GREEN 実測)。 Phase 135: writinglint エンジン (辞書は個人層) + PostToolUse advisory + Stop 全体再検査 + 指摘→ルール自動ドラフト→人間承認ループ + config schema 正式化。 Phase 136: 3 surface スマホ viewport / 承認待ちキュー表示 / diagram-design 接続点。 Phase 137: 採点設計規律 (criteria 3 層翻訳) / blind 受け手検査 / 評価者 4 契約。 decisions.md D62-D68 に判断根拠を記録。worker 契約に NG-4 追加。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TFcsXBG95kTdxPfDaP7Vuu | 27 天前 | |
feat: add sandbagging-aware weak supervision | 4 个月前 | |
fix(hooks): harden Windows fast path and WIP stop gate | 2 个月前 | |
feat: implement /work --full workflow orchestration Align /work --full with the documented phases by adding flag parsing, parallel task-worker execution, review fallback inputs, and worktree merge/commit handling, with docs and reference checks updated to match. | 7 个月前 | |
fix(worktree): WorktreeCreate hook prints only the worktree path (#188, lands #168) Rewrite the WorktreeCreate Go handler and shell fallback to resolve/reuse/create the worktree, init .claude/state/, and print ONLY the worktree path on stdout (diagnostics to stderr), with a looksLikeHookDecisionJSON guard against the legacy decision-JSON-on-stdout bug that broke agent-isolation / breezing worker spawns. Also includes two CI fixes needed to land on current main: - gofmt worktree_create_test.go (format-lint gate) - track the .claude/state join refactor (worktreeStateDir helper) in tests/test-windows-worktree-support.sh, keeping the Windows-safe path-joining assertion. Original work by Ary Rabelo (#168). Closes #168. Co-authored-by: Ary Rabelo <aryrabelo@gmail.com> | 3 个月前 | |
fix: add browser verdict fallback handling | 4 个月前 | |
feat(hotl): Phase 101 U0-U7 検証 spike 完了 (verification-first) HOTL Governance 検証フェーズ U0-U7 を完走。executor/judiciary 基盤は既存で 成熟しており、欠けていた in-run leash と層間機械リンクを新規 spike で実証。 既存ルール定義 (rules.go, human-only per spec invariant 6) は無改変。 - U0 (101.1): go/internal/scopeleash — plan から scope 自動推論 (人手ゼロ) + 圏外 write 検知 + dropped scope。決定性のみ。 - U2 (101.3): go/internal/enforcelink — rule↔doc↔test の機械リンク検証 (3 脚欠落 red-team)。既存 selfaudit tamper-evidence を補完。 - U3 (101.4): go/internal/rulecoverage — rule↔check matrix scanner (14/4/9/14 lock + orphan/ineffective 検知)。OPA でなく自前 scanner 採用。 - U5 (101.6): go/internal/blastradius — 4 axis 機械検知 (delete/irreversible/ cross-repo/file-count)。意味判定なし、runtimefloor と同方式。 - U6 (101.7): scripts/check-writing-norms.sh + test — §7 禁止フレーズ JP 面 gate。rule↔check↔exec を通す最初の Authority Provenance Graph 実例。 baseline 0 hit を regression guard 化 (RED→GREEN 実証)。 - U1/U4/U7: investigation 完了 (evidence は docs/research/, gitignore)。 U1=5 サブシステム dev-only / U4=LLM verdict 非 gate / U7=register 分離推奨。 検証: go build ./... OK / go test ./... 全 PASS (新規4pkg + 回帰) / test-writing-norms-gate.sh PASS / check-consistency.sh 19/19。 Plans.md 101.1-101.8 を cc:done。VERSION 不変 (通常 planning)。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> | 2 个月前 | |
fix(review): vet gate を proposals.jsonl 永続化より前に移動 (再レビュー major 1 件) vet reject された proposal が status: approved のまま固まり、同一 id を 再承認できない詰み状態を解消。rule 導出 + schema validate + writing-rule-vet を status 更新より先に実行し、失敗時は pending のまま残す。 回帰テスト 2 本追加 (vet-reject 後に pending 維持 / pattern 修正後の再承認成功)。 RED 実測: 修正前 script で FAIL=2 → 修正後 PASS=21。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TFcsXBG95kTdxPfDaP7Vuu | 27 天前 | |
fix(tests): update guardrail->policy paths after the 91.1 kernel extraction Phase 91.1 moved rules.go/helpers.go/post_tool.go/permission.go/tampering.go (and rules_test.go) from go/internal/guardrail to go/internal/policy, but three validation scripts still grepped the old guardrail paths, regressing validate-plugin.sh to 5 failures. Point them at the new policy paths (pre_tool.go + protected_*_policy.go stay in guardrail, untouched). Every assertion (R10-R13 presence, R06/R11/R12 wrapper tests, find-delete detection) is preserved — only the path follows the move. - bash tests/validate-plugin.sh -> 0 failures - bash tests/test-claude-upstream-integration.sh PASS Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> | 3 个月前 | |
feat(verification): Phase 134-137 — 検証チェーン配線修理 + writing lint + surface + ループ施策 Phase 134: 入口 (risk_flags→profile 自動昇格 + ratchet) / 中間 (PENDING_BROWSER fail-visible, pending_validations) / 出口 (accept-collect-evidence.sh による artifact 機械接続) の 3 継ぎ目を接続。scope leash 本配線 (warn 既定)、Playwright Screencast evidence、worker-report.v1 永続化、再調査ループ、検証の検証 (check-verification-chain-wiring.sh + 実効性契約テスト 3 本、RED→GREEN 実測)。 Phase 135: writinglint エンジン (辞書は個人層) + PostToolUse advisory + Stop 全体再検査 + 指摘→ルール自動ドラフト→人間承認ループ + config schema 正式化。 Phase 136: 3 surface スマホ viewport / 承認待ちキュー表示 / diagram-design 接続点。 Phase 137: 採点設計規律 (criteria 3 層翻訳) / blind 受け手検査 / 評価者 4 契約。 decisions.md D62-D68 に判断根拠を記録。worker 契約に NG-4 追加。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TFcsXBG95kTdxPfDaP7Vuu | 27 天前 | |
feat: add R03 protected path ask gate | 3 个月前 |
テストスイート
このディレクトリには、claude-code-harnessプラグインの品質を保証するためのテストが含まれています。
VibeCoder向けテスト
エンタープライズレベルの複雑なテストではなく、1人でクライアントプロジェクトをこなすVibeCoderが、プラグインが正しく動作することを簡単に確認できるシンプルなテストです。
テストの実行方法
プラグイン構造の検証
プラグインの基本構造が正しいかを検証します:
./tests/validate-plugin.sh
./tests/validate-plugin-v3.sh
./scripts/ci/check-consistency.sh
Unified Memory 検証
共通メモリdaemonの基本動作を検証します:
./tests/test-memory-daemon.sh
ゾンビプロセスが残らないかをループ検証します:
./tests/test-memory-daemon-zombie.sh 100
検索品質(hybrid ranking / privacy filter / API経路)を検証します:
./tests/test-memory-search-quality.sh
これらの検証は以下を確認します:
- プラグイン構造: plugin.jsonの存在と妥当性
- コマンド: 登録されたコマンドファイルの存在
- スキル: スキル定義の存在と基本的な品質
- エージェント: エージェント定義の存在
- フック: hooks.jsonの妥当性
- スクリプト: 自動化スクリプトの存在と実行権限
- ドキュメント: README等の必須ドキュメント
期待される出力
==========================================
Claude harness - プラグイン検証テスト
==========================================
1. プラグイン構造の検証
----------------------------------------
✓ plugin.json が存在します
✓ plugin.json は有効なJSONです
✓ plugin.json に name フィールドがあります
✓ plugin.json に version フィールドがあります
...
==========================================
テスト結果サマリー
==========================================
合格: 25
警告: 1
失敗: 0
✓ 全てのテストに合格しました!
テストの追加
新しいコマンドやスキルを追加した場合、このテストを実行して構造が正しいことを確認してください。
CI/CDでの利用
GitHub Actions では .github/workflows/validate-plugin.yml が以下を実行します。
./tests/validate-plugin.sh./scripts/ci/check-consistency.sh./tests/test-codex-package.shcd core && npm test
/harness-work all の success / failure fixture は smoke / full を分けて管理しています。詳細は docs/evidence/work-all.md を参照してください。
トラブルシューティング
jqコマンドが見つからない
テストスクリプトはjqコマンドを使用します。インストールされていない場合:
# macOS
brew install jq
# Ubuntu/Debian
sudo apt-get install jq
# Windows (WSL)
sudo apt-get install jq
テストが失敗する場合
- エラーメッセージを確認
- 該当するファイルが存在するか確認
- JSONファイルの構文エラーがないか確認
VibeCoder向けのポイント
- シンプル: 複雑なテストフレームワークは不要
- 実用的: 実際に問題になる構造エラーを検出
- 高速: 数秒で完了
- わかりやすい: 結果が一目でわかる
このテストは、プラグインを変更した後に「壊れていないか」を素早く確認するためのものです。