Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions .claude-plugin/hooks.json
Original file line number Diff line number Diff line change
Expand Up @@ -370,6 +370,11 @@
"command": "/bin/bash -c 'valid_root(){ local r=\"${1:-}\"; [ -n \"$r\" ] && [ -x \"$r/bin/harness\" ] && [ -f \"$r/.claude-plugin/plugin.json\" ] && /usr/bin/grep -q \"\\\"name\\\"[[:space:]]*:[[:space:]]*\\\"claude-code-harness\\\"\" \"$r/.claude-plugin/plugin.json\"; }; root=\"${CLAUDE_PLUGIN_ROOT:-}\"; if ! valid_root \"$root\"; then root=\"\"; for c in \"${CLAUDE_PROJECT_DIR:-}\" \"$PWD\" \"$HOME/.claude/plugins/marketplaces/claude-code-harness-marketplace\" \"$HOME/.claude/plugins/cache/claude-code-harness-marketplace/claude-code-harness/\"*; do if valid_root \"$c\"; then root=\"$c\"; break; fi; done; fi; if ! valid_root \"$root\"; then echo \"[claude-code-harness] plugin root not found; hook skipped\" >&2; exit 0; fi; exec \"$root/bin/harness\" \"$@\"' _ hook post-tool-use-file-lease",
"timeout": 5
},
{
"type": "command",
"command": "/bin/bash -c 'valid_root(){ local r=\"${1:-}\"; [ -n \"$r\" ] && [ -x \"$r/bin/harness\" ] && [ -f \"$r/.claude-plugin/plugin.json\" ] && /usr/bin/grep -q \"\\\"name\\\"[[:space:]]*:[[:space:]]*\\\"claude-code-harness\\\"\" \"$r/.claude-plugin/plugin.json\"; }; root=\"${CLAUDE_PLUGIN_ROOT:-}\"; if ! valid_root \"$root\"; then root=\"\"; for c in \"${CLAUDE_PROJECT_DIR:-}\" \"$PWD\" \"$HOME/.claude/plugins/marketplaces/claude-code-harness-marketplace\" \"$HOME/.claude/plugins/cache/claude-code-harness-marketplace/claude-code-harness/\"*; do if valid_root \"$c\"; then root=\"$c\"; break; fi; done; fi; if ! valid_root \"$root\"; then echo \"[claude-code-harness] plugin root not found; hook skipped\" >&2; exit 0; fi; exec \"$root/bin/harness\" \"$@\"' _ hook writing-lint",
"timeout": 5
},
{
"type": "agent",
"prompt": "Perform a lightweight code review on the file that was just written/edited. Check for: (1) hardcoded secrets or API keys, (2) TODO/FIXME stubs left without implementation, (3) obvious security issues. This is a non-blocking advisory check. If issues found, include them in systemMessage. Input: $ARGUMENTS",
Expand Down Expand Up @@ -574,6 +579,15 @@
"timeout": 10
}
]
},
{
"hooks": [
{
"type": "command",
"command": "/bin/bash -c 'valid_root(){ local r=\"${1:-}\"; [ -n \"$r\" ] && [ -x \"$r/bin/harness\" ] && [ -f \"$r/.claude-plugin/plugin.json\" ] && /usr/bin/grep -q \"\\\"name\\\"[[:space:]]*:[[:space:]]*\\\"claude-code-harness\\\"\" \"$r/.claude-plugin/plugin.json\"; }; root=\"${CLAUDE_PLUGIN_ROOT:-}\"; if ! valid_root \"$root\"; then root=\"\"; for c in \"${CLAUDE_PROJECT_DIR:-}\" \"$PWD\" \"$HOME/.claude/plugins/marketplaces/claude-code-harness-marketplace\" \"$HOME/.claude/plugins/cache/claude-code-harness-marketplace/claude-code-harness/\"*; do if valid_root \"$c\"; then root=\"$c\"; break; fi; done; fi; if ! valid_root \"$root\"; then echo \"[claude-code-harness] plugin root not found; hook skipped\" >&2; exit 0; fi; exec \"$root/bin/harness\" \"$@\"' _ hook writing-lint-stop",
"timeout": 20
}
]
}
],
"PermissionDenied": [
Expand Down
4 changes: 2 additions & 2 deletions .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "claude-code-harness-marketplace",
"metadata": {
"version": "5.8.0",
"version": "5.9.0",
"description": "Marketplace entry for distributing and installing claude-code-harness as a single plugin."
},
"owner": {
Expand All @@ -10,7 +10,7 @@
"plugins": [
{
"name": "claude-code-harness",
"version": "5.8.0",
"version": "5.9.0",
"source": "./",
"description": "A harness for solo developers (Vibecoders) to handle full-cycle contract development.",
"author": {
Expand Down
2 changes: 1 addition & 1 deletion .claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "claude-code-harness",
"version": "5.8.0",
"version": "5.9.0",
"description": "Claude harness - A harness for solo developers (Vibecoders) to handle full-cycle contract development.",
"author": {
"name": "Chachamaru",
Expand Down
2 changes: 1 addition & 1 deletion .codex-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "claude-code-harness",
"version": "5.8.0",
"version": "5.9.0",
"description": "Plan, work, review, and release workflows for Codex CLI users of Claude Code Harness.",
"author": {
"name": "Chachamaru",
Expand Down
2 changes: 1 addition & 1 deletion .cursor-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "claude-code-harness",
"version": "5.8.0",
"version": "5.9.0",
"description": "Public supported Cursor adapter for Claude Code Harness Plan, Work, Review, and Release workflows.",
"author": {
"name": "Chachamaru",
Expand Down
2 changes: 1 addition & 1 deletion .grok-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "claude-code-harness",
"version": "5.8.0",
"version": "5.9.0",
"description": "Public supported Grok adapter for Claude Code Harness Plan, Work, Review, and Release workflows.",
"author": {
"name": "Chachamaru",
Expand Down
45 changes: 44 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,44 @@ Change history for claude-code-harness.

## [Unreleased]

## [5.9.0] - 2026-08-17

### Added

#### 検証チェーン配線修理 — HOTL 本実装 (Phase 134)

検証機構の継ぎ目 3 箇所を接続し、「やった体」の緑を潰しました。

| 継ぎ目 | 変更前 | 変更後 |
|---|---|---|
| 入口 | `reviewer_profile` は常に既定 `static` (LLM 読解のみ) | `risk_flags` から自動昇格 (security-sensitive→runtime / ux-regression→browser)。`--approve` 時の ratchet が無言降格を exit 5 で拒否 |
| 中間 | browser 検証が環境不足で `PENDING_BROWSER` に無言縮退し緑のまま | `pending_validations` として review-result に記録 (fail-visible) |
| 出口 | Accept の evidence は LLM の再申告 | `scripts/accept-collect-evidence.sh` が実行 artifact (worker-report / review-result / runtime-review / browser-result) を機械読みし引用。pending 該当 criteria は `passed: false` になり recommendation は ship にならない |

- scope leash (Phase 101 U0 spike) を本配線: sprint-contract に `declared_scope` を焼き込み、PreToolUse で圏外 Write を検査 (`[scope_leash] enforce_level = off|warn|enforce`、既定 warn)。DroppedScope は Stop で advisory 通知
- Playwright Screencast を browser evidence として収集し (`artifacts[].kind: video`)、Accept HTML に埋め込み。録画なしは縮退規則つき (`kind: text` + note)
- `worker-report.v1` を `.claude/state/review/<task-id>.worker-report.json` へ永続化 (従来はプロンプト内報告のみでファイル不在)
- harness-plan / harness-review に再調査ステップ 1 回 (圏外の別系統案も 1 つ検討) を追加
- 検証の検証: `scripts/ci/check-verification-chain-wiring.sh` + 実効性契約テスト 3 本を `tests/validate-plugin.sh` に配線 (配線前 RED 実測済み)

#### 日本語 writing lint (Phase 135)

- `go/internal/writinglint/`: NG パターン辞書 (JSONL、個人層 `~/.claude/writing-lint/rules.jsonl`) + 文書集計検査 (文末 3 連続 / 敬体常体混在)。エンジンは repo、辞書は個人層 (D64)
- PostToolUse `writing-lint`: `.md`/`.txt` 書き込み直後に照合し「該当文を丸ごと書き直し + グッドパターン」を advisory 返却 (既定 off、`writing_lint.enabled` で opt-in)
- Stop `writing-lint-stop`: セッション終了時に変更 `.md` を全体再検査、severity: major 残存で 1 回だけ block (再入は警告のみ)
- 指摘→ルール登録ループ: `skills/japanese-writing-drafter` が proposal を自動ドラフト、昇格は `scripts/writing-rule-approve.sh` (人間 CLI のみ、自動昇格経路なし)
- `claude-code-harness.config.schema.json` に `writing_lint` と既存非公式 `quality_pack` を正式収録

#### surface チェリーピック (Phase 136) / ループエンジニアリング施策 (Phase 137)

- accept / plan-brief / progress の 3 surface にスマホ viewport + レスポンシブ CSS
- progress surface に writing lint 承認待ちキュー表示 (コピペ用 approve コマンド)
- diagram-design plugin の接続点 1 文 (インストール済みなら図描画に使う)
- 採点設計規律 (`skills/harness-plan/references/criteria-design.md`): DoD を「機械○×の床 / LLM 観点 / 本質 doc」の 3 層に翻訳
- blind 受け手検査: Accept 直前に採点基準を渡さない fresh 評価者で乖離を測る optional step (説得系/文書系のみ)
- 評価者 4 契約を `agents/reviewer.md` に明文化 (fresh context / 基準書き換え禁止 / 絶対評価 / 実物を開く)
- Worker 契約に NG-4 (一時領域の掃除で operator を停止させない) を追加

### Fixed

#### session-log の分割警告が、移動できるエントリが 1 件も無い状態でも出続けていた問題
Expand Down Expand Up @@ -76,6 +114,10 @@ Change history for claude-code-harness.

**今後**: 宛先を最後の引数に取るコマンド (`ln` / `cp` / `mv` / `install`) をまとめて検査対象にしました。指摘は `ln -s` だけを挙げていましたが、それだけ塞いでも同じことができる経路が 3 つ残ります。取るのは最後の引数だけで、これにより `install -m 755` の `755` を誤ってパスと読む事故も同時に防げます。引数が 1 つだけの形は、生成先がシェルの作業ディレクトリになり確実に特定できないため対象外です。

#### release preflight の host plugin dist gate が grok 配布物の意図した中身を FAIL と誤判定していた問題

grok 配布物には guardrail を動かすための `.claude-plugin/plugin.json` / `hooks/hooks.json` / `bin/harness` が意図的に同梱されています (Phase 133.8)。テスト側の期待値がこの変更に追随しておらず、`release-preflight.sh` の host plugin dist gate が同梱以降ずっと FAIL していました。期待値を実装済みの契約 (3 ファイルの存在確認) に合わせました。

### Changed

依存関係を更新しました。Go 側の 2 件は、同梱バイナリがソースと依存から byte 単位で再現できることを検証する drift gate があるため、bump と同じ変更で 4 プラットフォームのバイナリを再生成しています。
Expand Down Expand Up @@ -6025,7 +6067,8 @@ Purpose: 自己修正ループ失敗時に「止まるだけ」から「次の

For v2.9.x and earlier, see [GitHub Releases](https://github.com/Chachamaru127/claude-code-harness/releases).

[Unreleased]: https://github.com/Chachamaru127/claude-code-harness/compare/v5.8.0...HEAD
[Unreleased]: https://github.com/Chachamaru127/claude-code-harness/compare/v5.9.0...HEAD
[5.9.0]: https://github.com/Chachamaru127/claude-code-harness/compare/v5.8.0...v5.9.0
[5.8.0]: https://github.com/Chachamaru127/claude-code-harness/compare/v5.7.0...v5.8.0
[5.7.0]: https://github.com/Chachamaru127/claude-code-harness/compare/v5.6.0...v5.7.0
[5.6.0]: https://github.com/Chachamaru127/claude-code-harness/compare/v5.5.0...v5.6.0
Expand Down
Loading