harness-synclisted
Install: claude install-skill shimo4228/claude-harness
# /harness-sync — 公開 repo への一方向エクスポート
ローカルの生きた harness (~/.claude) と公開 artifact repo は**目的の違う別 repo** として保ち、
remote 直結ではなく **filter 付き一方向コピー**で同期する。公開境界は script の
origin filter 1 箇所で宣言的に管理される。
## なぜ remote 直結にしないか
- ~/.claude は実行時状態 (settings, metrics, session 情報) を含む生きたディレクトリで、
gitignore の永久警戒を前提にした公開はミス耐性がゼロ
- origin filter は出自の記録であって再配布権の整理ではない (外部 origin はライセンス
整備が別途必要)
- 目的の違う repo 間は丸コピが調整コスト最小 (duplicate over coordination)
## Workflow
### 1. Dry-run で差分を確認
```bash
bash <公開repo>/scripts/sync-from-local.sh --dry-run
```
差分の要約 (新規 / 変更 / 削除されるコンポーネント) をユーザーに提示する。
### 2. 公開スコープ確認
task request / approved plan に列挙された repo と component は追加確認なしで進める。
列挙外の repo・新規公開 component が見つかった場合だけ scope change として停止する。
### 3. 適用
```bash
bash <公開repo>/scripts/sync-from-local.sh
```
script は staging 収集 → runtime artifact 除去 (results.json, __pycache__ 等) →
frontmatter YAML 検証 (GitHub 等の厳密パーサ基準。invalid なら abort) →
secret scan (検出時 abort) → skills/ agents/ rules/ docs/adr/ rfcs/ hooks/ scripts/hooks/
tests/ subtree の置換、まで行う。origin filter が効くのは skills/ agents/ rules/ だけで、
残り 3 系統は別の規則で決まる (いずれも集約 repo のみ):
- `docs/adr/` — ADR はハーネス自身の設計判断の記録で定義上すべて自作のため、origin filter を
掛けずディレクトリ丸ごとが対象。以後の ADR は公開される前提で書く。
- `rfcs/` — 台帳エントリも自作の判断記録なので ADR と同じく丸ごと (ADR-0049)。起票は公開可能な書き方が既定 — 機微はリンク先へ (task-stocktake の公開規約)。
- `hooks/` `scripts/hooks/` `tests/` — script 内の `HOOK_ALLOWLIST` に列挙したファイルだけ。
公開は provenance でなく curation の判断 (ADR-0038)。公開対象の hook を追加・rename したら
allowlist を更新する — sour