用途
seo-fix-apply 是一份「写入者协议」(writer protocol),预加载在 seo-fixer-writer 智能体中。它规定了已确认的 SEO / AI 搜索修复应如何被实际应用。该文件是权威协议,agents/seo-fixer-writer.md 只携带上下文摘要,两者需保持同步。
其核心定位是:只应用已经确认的修改。它不决定要修什么,不改进给定的 diff,也从不扩大改动范围。Edit、Write 和 Bash 在此处并未被预先批准,Claude Code 原生的 diff 与命令提示必须对每次写入都呈现给用户,guard-write / guard-bash 钩子在其之上运行。
主要能力
- 通过修复命令以 JSON 信封被派发,读取关键输入字段:RUN_DIR、SCRIPTS_DIR、DATA、PROJECT_ROOT、confirmed_change_ids、tickets、publish、force、return。
- 从 plan.json 读取 Change 记录,只处理被给出 id 的变更。
- 按已确认变更逐条执行协议:git 预检、首次写入前备份、本地 diff、远程目标、幂等处理、重新验证、发布、日志。
- 返回符合 schema/finding.schema.json 的 findings JSON 数组。
使用方式
每个已确认变更按顺序执行以下协议:
- Git 预检:在 PROJECT_ROOT 执行 git status --porcelain。工作树脏且未设 force: true 时不得写入,返回该 finding 的修复前状态与 skipped_dirty_tree 证据;绝不 stash、checkout 或 reset。
- 首次写入前备份:本地文件复制到
<DATA>/backups/<run-id>/<relative path>;用 Edit/Write 写入时需自行在首次编辑前执行 mkdir -p + cp。远程资源由适配器写入 before/<change_id>.json。不在项目中记录任何内容。 - 本地 diff:对 strategy 为 AUTO(html-head、front-matter、config-file、liquid)的 file 类变更,用 Edit(新文件用 Write)应用预览 diff。严格按预览应用:相同插入点、相同文本,不重排格式、不加内容,TODO:<field> 占位符原样保留。
- 远程目标:target.kind 非 file 的变更走如下命令:
node "<SCRIPTS_DIR>/adapters/<adapter>.mjs" apply --run "<RUN_DIR>" --change <id> --ticket <ticket> --data "<DATA>" --json。ticket 为一次性且必需。 - 幂等:若变更已存在,不做编辑,报告 status: pass 与 skipped_idempotent。
- 重新验证:运行
verify --run "<RUN_DIR>" --change <id>,并逐字执行 finding 的 verification.reproduce。缓存过期记为 pending_cache 与 status: warn。 - 发布:仅在 publish: true 且持有独立 ticket 时执行:
node "<SCRIPTS_DIR>/adapters/<adapter>.mjs" publish --run "<RUN_DIR>" --ticket <publish ticket> --data "<DATA>"。 - 日志:每个变更在
<RUN_DIR>/log.ndjson写一行 NDJSON(change id、文件或资源、结果),并对凭据形状的内容做脱敏。
失败时按 fail 上报错误文本,不得换方法、换文件或扩大编辑重试。回滚为 rollback --run "<RUN_DIR>" --change <id>,需自己的 ticket。
适用场景
适用于使用 seo-fixer-writer 智能体执行 SEO / AI 搜索修复落地的流程,覆盖本地文件类修复与远程平台(如 Shopify、Webflow、HubSpot 等适配器目标)的暂存与应用。
限制
- 只应用 confirmed_change_ids;只在 PROJECT_ROOT 或
<DATA>内写入。 - 绝不触碰 .env*、.git/、锁文件、密钥材料、wp-config.php、CI 配置,或 Shopify config/settings_data.json。
- 凭据来自环境变量;绝不将凭据放入命令行、文件或输出。
- 绝不伪造值(price、date、rating、sameAs、author),绝不回溯 dateModified。
- 每次写入前备份、每次写入后重验;无 force 时拒绝脏工作树;仅在 publish: true 且有发布 ticket 时发布。
- 输出为 findings JSON 数组,不渲染报告(由 fix flow 渲染)。
其余细节(如具体平台适配器清单、发行版本信息)暂未提供。