対象:ゲーム/Android UI オペ。.9.png をリモート Macの受信箱で夜間も同じ受入にする手順。OpenClaw=監視のデバウンス・単一フライト・版固定バリデータ呼び出し。幾何は 9-patch 納品チェックリスト、キュー/JSONL は 監視・リトライ・ログ HowTo と揃える。
目次
ウォッチドッグの考え方と OpenClaw の役割
ウォッチドッグはFS 上の状態機械:ノイズイベントを無音窓+サイズ安定で畳み、ピクセル検査後のみ out へ。OpenClawは許可 CLI を trace_id で相関させる層。cron より短いバースト向き。初期は インストール手順 を完了。
再現手順(ツリー → 監視 → 検証 → 昇格)
- ツリー:
~/ninepatch_jobs/<CAMPAIGN>/にinbox〜archive。書き出しはsymlinkでinboxへ。 - 命名:README に正規表現と
rules_versionを CI と共有。自動命名・一括検証。 - 監視:
fswatchまたはlaunchd。.9.pngのみ、一時ファイルとゼロバイト除外。無音 30〜60s 後 enqueue。 - 黒線:外周 1px のみ。マーカ
#000000、他は alpha=0。逸脱はquarantine。PNG QA 併用可。 - 容量:下表+バッチ合計+
df。通過でmanifest.jsonl1 行。 - 昇格:
work→out/日付/job_id/を原子移動。失敗は理由付き隔離。
受入しきい値表(数値はプレースホルダ)
数値は差し替え、列は policy YAML と一致させる。
| ゲート | 測定 | 例:合格しきい値 | 不合格時 |
|---|---|---|---|
| 制御環の純度 | 外周 1px の RGBA | マーカは #000000 不透明、環のその他は alpha=0 |
quarantine・class=data(盲リトライ禁止) |
| アンチエイリアス塵 | 環上で 0<alpha<255 | 違反ピクセル 0 | データ欠陥・JSONL にパス記録 |
| 四隅の透明性 | 四隅ピクセル | いずれも alpha=0 | データ欠陥 |
単ファイル min_bytes(xxhdpi 例) |
ファイルサイズ | ≥ 800 | 空/壊れ疑い → 隔離 |
単ファイル max_bytes(HUD パッチ xxhdpi 例) |
ファイルサイズ | ≤ 180000 | 越限 → 隔離+通知 |
| バッチ合計 | 同一 dequeue のバイト和 | 例 ≤ 120 MiB | キュー一時停止・オペ再開 |
| 空きディスク | ジョブボリュームの df |
空き率 ≥ 15% かつ絶対 ≥ 25 GiB(厳しい方) | 全 dequeue 停止・pause_reason 記録 |
| ICC/色方針 | 埋め込みプロファイル | sRGB IEC61966-2.1(例外は README で署名) | ICC 手順へルーティングまたは隔離 |
実行可能なプレースホルダコマンド
置換は README/リポジトリ固定。未レビュー flag は禁止。
# 0) ジョブ環境(例)
export NPROOT="$HOME/ninepatch_jobs"
export JOB_ID="feat_login_bg__pr124"
export INBOX="$NPROOT/inbox/$JOB_ID"
export LOG="$NPROOT/logs/$(date +%F).jsonl"
mkdir -p "$NPROOT"/{inbox,work,out,failed,quarantine,logs,archive}
# 1) デバウンス enqueue(実装は bin にピン留め)
fswatch -l 2.0 -o "$NPROOT/inbox" | while read -r _; do
"$NPROOT/bin/debounced_enqueue.sh" --root "$NPROOT" --log "$LOG"
done
# 2) ワーカー単発(同時実行は別プロセスで上限)
"$NPROOT/bin/worker_once.sh" --max-files 32 --trace-id "$(uuidgen)"
# 3) 外周リング検証(倉庫スクリプトへ差し替え)
python3 "$HOME/src/macpng-tools/validate_patch_skirt.py" \
--glob "$INBOX/*.9.png" \
--strict-black 000000 \
--rules-version np_ring_v3 \
--jsonl-out "$LOG"
# 4) バイト確認(しきい値表と突合)
wc -c < "$INBOX/your_asset_xxhdpi_v1.0.0.9.png"
# 5) 監査 1 行(ローテは launchd/cron で)
printf '%s\n' "{\"ts\":\"$(date -u +%Y-%m-%dT%H:%M:%SZ)\",\"event\":\"promote\",\"job\":\"$JOB_ID\",\"trace_id\":\"$(uuidgen)\"}" \
>> "$NPROOT/logs/audit-$(date -u +%Y-%m-%d).jsonl"
CLI 鎖:PNG CLI チェーン。ログ形:Lottie ウォッチドッグ。
失敗分類・リトライ・ログ保管
一時=バックオフ+JSONL の next_eligible_at。データ=盲リトライ禁止・quarantine。運用=全 dequeue 停止。logs/*.jsonl 日次ローテ、古いものを gzip し archive/logs/ へ。
運用チェックリスト
- NVMe のみ。クラウド同期パスは監視に使わない。
- ウォッチャ 1 本・PID 記録。無音/
stat/.doneの閉じ方を stg/本番で同一。 - バリデータ版=CI と一致。YAML は Git。Gateway は localhost+狭い許可リスト。
FAQ
目視だけでは足りない?
1px 灰塵は dp ズレの温床。デコード走査で JSONL レシートを残す。
launchd だけ 401
HOME とトークンパスを非対話と揃える。権限 600。
ImageMagick でよいか
CI と同じデコーダ版に。Android ビルドと RGBA 解釈を一致。
Lottie キューと統合?
ログ型のみ共有。inbox は分離。
まとめ:ツリー・デバウンス・黒線ゲート・しきい値・分類リトライ・JSONL。専用機は レンタル/購入・料金・接続ガイド(ログイン不要)。技術インサイト へ。
公開ページのみ(ログイン不要)
リモート Mac で 9-patch 監視と OpenClaw 一括検証を回す
.9.png の受入をノートから切り離し、検証器の版と キュー+JSONL をチームで共有します。