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 提交指定的五个任务文件。
计划
- 记录协议、信任边界、失败策略和排除范围。
- 新增公开 payload 构建器 RED 测试,覆盖协议字段、验证、去重和分批。
- 使用标准库实现最小构建器与部署步骤。
- 运行受影响的文档与工作流检查。
- 通过独立规格与质量审查后运行完整检查。
完整检查清单
uv sync --extra devuv pip install markdown-it-py mdit-py-plugins pygments(与发布工作流安装的文档依赖相同)uv run pytest -q tests/unit/config/test_docs_publish_indexnow.pyuv run python -m scripts.docs_site.builduv run python -m scripts.docs_site.check_landinguv run python -m scripts.docs_site.checklinksuv run ruff check scripts/docs_site/indexnow.py tests/unit/config/test_docs_publish_indexnow.py- 使用 PyYAML 解析
.github/workflows/docs-pages.yml。 git diff --check,并在完成经审查的提交后确认工作树干净。
记录
| 证据 | 结果 |
|---|---|
| 首次 RED | uv run pytest -q tests/unit/config/test_docs_publish_indexnow.py:1 项失败,原因是工作流缺少通知步骤。 |
| 首次 GREEN | 1 项通过;后被规格审查判定无效,因为它只断言工作流字符串。 |
| 手动端点验证 | 向官方端点提交了 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 检查。 |