读者:游戏/UI 交付与创意运维,要把 Android .9.png 从个人导出目录搬到远程 Mac上做可复现批检。目标:用 OpenClaw 搭配文件夹监听守护,在导出「闭合」后自动跑最外圈黑线像素门禁、命名模板与体积阈值,并对失败做分类重试与日志归档。像素规则与对照表见《9-patch 远程 M4 验收清单》;队列与 JSONL 模式见《PNG 监听、队列重试与日志归档》。
守护思路:从文件事件到「一批闭合」
目录回调高频、重复;9-patch 常多次覆盖写。守护进程应把事件折叠为 job_id,在静默窗口或 exporter.done 后单飞出队,让 OpenClaw 只处理已闭合路径,避免半写入 PNG。
远程 Mac:绝对路径、launchd 常驻、共享 runbook;监听根用本地 APFS。安装见《OpenClaw 安装指南(多平台)》。
可复现步骤(目录 → 监听 → 校验 → 晋升)
- 契约:在例如
~/ninepatch_jobs/下固定inbox、work、out、failed、quarantine、logs、archive。设计工具导出目录符号链接到inbox,避免改设计师 muscle memory。 - 命名模板:团队冻结一条正则写入 README,例如
^(?<feature>[a-z0-9_]+)_(?<drawable>mdpi|hdpi|xhdpi|xxhdpi)_v(?<ver>\d+\.\d+\.\d+)\.9\.png$;CI 与监听脚本共用同一rules_version字段。 - 监听:
fswatch或launchd WatchPaths指向inbox;过滤.9.png;两次stat大小一致且静默 ≥30s 再将该job_id入队(大批量可调 60s)。 - 黑线环批检:对每张图读取像素尺寸
W×H,仅扫描四条边各 1px 宽(或高)的环带:允许像素为全透明或不透明纯黑rgba(0,0,0,255);四角必须透明;若任一环带出现灰阶或非约定 RGB,记class=data并移入quarantine。通用 PNG 质检补充见《OpenClaw PNG 批量质检》。 - 体积与磁盘:出队前读可用磁盘;通过后比较单文件字节与下表阈值;写一行
manifest.jsonl(sha256、宽高、桶、字节、rules_version)。命名与校验联动见《自动命名与批量校验》。 - 晋升:
mv到out/YYYY-MM-DD/<job_id>/同一事务内完成;失败留在work或降级目录并附原因文件,避免半状态。
验收阈值表(占位数值可按项目调)
| 验收项 | 建议阈值(占位) | 未通过时的处置 |
|---|---|---|
| 最外 1px 环「非黑非全透明」像素计数 | = 0 | class=data → quarantine/,禁止盲重试 |
| 四角 Alpha | 四角像素 Alpha = 0 | 同上 |
单文件最小字节 min_bytes(xxhdpi 示例) |
≥ 800 | 疑似空图或损坏写盘 → 数据类隔离 |
单文件最大字节 max_bytes(xxhdpi HUD 贴片示例) |
≤ 180000 | 越限 → quarantine 并可选通知渠道告警 |
| 可用磁盘(出队前) | 剩余比例 ≥ 15% 且绝对值 ≥ 20GB(择严) | class=ops,暂停全局出队直至人工 resume |
同一 feature 跨桶字节比例 |
相邻密度桶字节比处于 README 给定区间(示例 1.8–2.3) | 偏离 → 数据类,要求设计侧重导出 |
可执行占位命令
下列命令用于对齐 runbook,路径与阈值请替换为团队值;勿在生产对话里临时拼未评审 flag。
# 0) 一次 job 目录环境(示例)
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"
# 1) 防抖监听:有输出后再调用 worker(占位)
fswatch -l 2 "$NPROOT/inbox" | while read -r _; do
/usr/local/bin/ninepatch_debounce_enqueue.sh --root "$NPROOT" --log "$LOG"
done
# 2) 快速探针:尺寸与通道(ImageMagick 示例路径)
magick identify -format "%f %wx%h %[channels]\n" "$INBOX"/*.9.png >> "$NPROOT/work/$JOB_ID/probe.txt"
# 3) 黑线环校验脚本入口(占位:由仓库提供严格像素逻辑)
python3 "$HOME/src/macpng-tools/check_nine_patch_ring.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"
多步 CLI 链路与退避模板可参考《PNG CLI 链、重试模板》。
失败重试与日志归档
瞬时(锁、抖动):退避 2s/8s/32s,≤5 次,JSONL 记 trace_id、exit_code、stderr_tail、next_eligible_at。数据(黑线环、命名、魔数):禁盲重试,入 quarantine + reason.txt。运维(磁盘水位、缺二进制):暂停出队,修复后 resume。
归档:logs/*.jsonl 按日轮转并压缩入 archive/logs/YYYY-MM/,与 manifest.jsonl 同存,对照 rules_version。
上线前清单
- 同一
NPROOT仅一台 watcher/worker,启动日志含pid与配置哈希。 README与校验脚本共享同一命名正则与阈值版本。- 网关:127.0.0.1/内网、令牌 600、工具面仅评审步骤。
- staging/生产同一静默窗口与目录拓扑。
FAQ
OpenClaw 能替代像素脚本吗?
可辅助解读,门禁须固定脚本 + 阈值表,避免模型漂移。
为何用 JSONL?
便于 jq/CI 消费,按 trace_id 对齐工具调用。
监听与定时扫能并行吗?
不要对同一子树双订阅;实时用 fswatch,批量落盘用 launchd 扫 mtime。
max_bytes 是否按压缩后计量?
合同若含 oxipng 等再压,README 写明链路与版本,max_bytes 对齐压缩后字节。
小结:把 9-patch 当成带硬像素合同的二进制制品:监听折叠事件、脚本守门、OpenClaw 编排与窄权限。需要远程 Mac 专机跑长期守护可免登录查看 购买 / 租用、价格与节点、帮助中心;更多文章见 技术见解。