IndexNow 实施记录

任务说明

已批准设计
IndexNow 部署发现
基线提交
8f888e37590fa4083e8f266c5f26e7cf2ef3a293
生产文件
scripts/docs_site/indexnow.py, .github/workflows/docs-pages.yml
测试文件
tests/unit/config/test_docs_publish_indexnow.py
要求行为
从精确匹配的 sitemap 元素生成已验证、去重的 IndexNow 批次;在站点仓库发布操作后提交全部批次,前面批次失败后仍提交后续批次;通知失败不得阻止发布。
公开入口 RED
单元测试调用 payload 构建器,工作流测试读取实际发布工作流。
安全与错误边界
仅接受精确匹配 sitemap 0.9 URL 元素且主机精确匹配的 HTTPS URL;不暴露凭证;限制端点请求并重试;尝试全部批次;通知失败不阻止发布。
兼容性
使用现有 Python 3.12 runner 和标准库;保留当前 sitemap、验证与部署输出。
排除范围
不保证排名,不使用 Google 索引 API,不轮询下游 Pages 工作流,不新增依赖。
干净工作树要求
仅从隔离且干净的 checkout 提交指定的五个任务文件。

计划

  1. 记录协议、信任边界、失败策略和排除范围。
  2. 新增公开 payload 构建器 RED 测试,覆盖协议字段、验证、去重和分批。
  3. 使用标准库实现最小构建器与部署步骤。
  4. 运行受影响的文档与工作流检查。
  5. 通过独立规格与质量审查后运行完整检查。

完整检查清单

记录

证据结果
首次 REDuv run pytest -q tests/unit/config/test_docs_publish_indexnow.py:1 项失败,原因是工作流缺少通知步骤。
首次 GREEN1 项通过;后被规格审查判定无效,因为它只断言工作流字符串。
手动端点验证向官方端点提交了 499 个已验证的线上 sitemap URL;返回 HTTP 200。
规格审查CHANGES_REQUIRED:明确发布边界,在测试中执行 payload 行为,对超过 10,000 个 URL 分批,并补充要求的证据记录。
规格修复PASS:四项发现全部修复;针对性测试 5 项通过,diff 检查通过。
质量审查CHANGES_REQUIRED:批次失败后继续,移除过期批次文件,并要求 sitemap 标签精确匹配。
质量修复PASS:三项发现全部修复;针对性测试 8 项通过,Ruff 和 diff 检查通过。
实现提交f458791e8c245e642b563a5ffc9074c9758683ab
完整检查首次运行在 8 项测试通过后停止,因为清单遗漏了发布工作流单独安装的 mdit-py-plugins。修正清单后完整重跑通过:8 项测试、500 页构建、入口页检查、零死链、Ruff、工作流 YAML 解析以及 diff 检查。