Skip to content
文档管理4 Commands零依赖Python 3v0.2.0

Doc Sentinel

文档-代码变更通知系统

通过 git tree hash 绑定文档与源码,自动检测代码变更并生成带 confidence/risk 元数据的结构化修复计划。让 Agent 准确知道「哪些文档需要更新」。

Doc Sentinel
# Phase 1: 绑定文档到源码
$sentinel.py bind docs/auth.md --source "src/auth/"
OK ✅ Bound docs/auth
Sources: src/auth/
Hash: c91bf57ebf9a
# Phase 2: 查看文档健康状态
$sentinel.py status
📊 Documentation Health Report
Documents: 2
Synced: 2/2 (100%)
OK ✅ docs/auth/overview: synced
OK ✅ docs/billing/overview: synced
# Phase 3: 代码变更后生成变更计划
$sentinel.py plan
📋 Stable actions (auto-executable):
📝 UPDATE → docs/auth/overview
Reason: Source modified (42 lines): src/auth/handler.py
🔍 Review items (need confirmation):
⚠️ CREATE → src/notifications/email.py

核心能力

Git Tree Hash 溯源

使用 git ls-tree 实现 O(1) 目录级变更检测。追踪目录时,任何深度的文件变化都会被捕获(Merkle tree 性质)。

事件驱动变更分析

解析 git diff --name-status 输出,为 M/R/A/D 四种状态映射对应的文档操作(UPDATE/RENAME/ARCHIVE/CREATE)。

结构化变更计划

每个 PlanItem 携带 action、risk(STABLE/REVIEW)、confidence、reason。Agent 可直接消费 JSON 输出决策。

纯只读状态查询

status 命令零副作用。不修改任何文件、不更新 registry。安全地了解文档健康度。

幂等执行

apply 命令执行后自动更新 sync point。再次运行 plan 返回 0 items。安全重试,无重复操作。

显著性噪声过滤

修改低于阈值(默认 5 行)的变更自动标记为 NOOP。通过 DOC_SENTINEL_THRESHOLD 环境变量可调。

命令参考

查询 (status)

只读状态查询,零副作用

命令说明示例
status全局健康报告sentinel.py status --root .
--doc查询特定文档sentinel.py status --doc docs/auth/overview
--source反查源码路径sentinel.py status --source src/auth/
--format json结构化 JSON 输出sentinel.py status --format json

绑定 (bind)

建立文档-代码溯源关系

命令说明示例
bind显式指定源码sentinel.py bind docs/auth.md --source "src/auth/"
--auto-detect自动检测目录sentinel.py bind docs/api/overview.md --auto-detect

计划 (plan)

生成变更计划,不执行

命令说明示例
plan分析 git diffsentinel.py plan
--since指定基准 commitsentinel.py plan --since abc1234
--output输出计划文件sentinel.py plan --output plan.json
--format jsonJSON 格式输出sentinel.py plan --format json

执行 (apply)

执行变更计划(幂等)

命令说明示例
apply执行 STABLE 级操作sentinel.py apply
--dry-run预览不执行sentinel.py apply --dry-run

核心概念

Doc Sentinel 采用三平面架构:

平面目标核心能力
Identity绑定真值frontmatter 绑定 source_paths + git tree hash
Reconciliation变更推理Git diff → ChangeEvent → Policy → ChangePlan
Capability可选能力索引生成(内置)

诚实价值观

  • 不承诺自动修复 — 只通知「哪些文档可能过时」
  • 不假装语义理解 — 基于 git diff 的事实推理,非 AI 猜测
  • 可解释 — 每个通知附带变更证据(文件路径、变更行数)和 confidence 分数

工作流

Phase 1: 绑定文档

为仓库文档注入溯源 frontmatter,建立与源码的绑定关系:

bash
# 显式指定源码路径
sentinel.py bind docs/auth.md --source "src/auth/" "src/middleware/auth.py"

# 自动检测(使用文档所在目录作为源码路径)
sentinel.py bind docs/api/overview.md --auto-detect

绑定后文档头部会注入 YAML frontmatter:

yaml
---
doc_id: "docs/auth"
source_paths: ["src/auth/"]
source_tree_hash: "c91bf57ebf9a"
last_sync_commit: "e7d1c4a..."
sync_timestamp: "2026-03-05T14:00:00+08:00"
doc_version: 1
status: "synced"
---

Phase 2: 检测变更

代码变更后,生成变更计划:

bash
sentinel.py plan
# 📋 Stable actions (auto-executable):
#   📝 UPDATE → docs/auth/overview
#      Reason: Source modified (42 lines): src/auth/handler.py
# 🔍 Review items (need confirmation):
#   ⚠️  CREATE → src/notifications/email.py

计划中的每个条目携带 Agent 可消费的元数据:

json
{
  "action": "update",
  "risk": "stable",
  "confidence": 0.84,
  "reason": "Source modified (42 lines): src/auth/handler.py"
}

Phase 3: 执行计划

bash
# 预览(不修改任何文件)
sentinel.py apply --dry-run

# 执行(仅执行 STABLE 级别的操作)
sentinel.py apply

变更决策树

Git 事件条件动作风险级别说明
M (修改)≥ 阈值UPDATESTABLE标记文档为 stale
M (修改)< 阈值NOOP静默忽略微小变化
R (重命名)有追踪文档RENAMESTABLE更新 source_paths
R (重命名)无追踪文档CREATEREVIEW建议创建新文档
D (删除)全部源码已删ARCHIVESTABLE标记文档为 archived
D (删除)其他源码仍在UPDATESTABLE标记文档需更新
A (新增)在已追踪目录内UPDATESTABLE通知父文档有新文件
A (新增)在未追踪区域CREATEREVIEW建议创建新文档

显著性阈值通过环境变量调整:

bash
DOC_SENTINEL_THRESHOLD=10 sentinel.py plan

数据目录

<repo_root>/.doc-sentinel/
├── registry.json          # 文档注册表(绑定关系)
├── last_sync_commit       # 上次同步的 commit SHA
└── change_log.json        # 操作历史(保留最近 50 条)

前置条件

  • Python 3.10+
  • Git 仓库(依赖 git ls-tree 和 git diff)
  • 无第三方 Python 依赖(纯 stdlib)

架构

doc-sentinel/
├── SKILL.md                 ← Agent 入口
├── references/
│   ├── decision-tree.md     ← 变更决策树详解
│   └── traceback-spec.md    ← 溯源标识详细规范
└── scripts/
    ├── sentinel.py          ← CLI 入口 (4 commands)
    └── lib/
        ├── __init__.py      ← 包初始化
        ├── identity.py      ← Identity Plane (frontmatter + hash)
        ├── registry.py      ← 文档注册表 (scan/query/persist)
        ├── reconciler.py    ← Reconciliation Plane (diff → plan)
        └── indexer.py       ← 索引文档生成器

零依赖: 纯 Python 3 stdlib

快速开始

Install
via skills.sh (推荐)
$npx skills add northseadl/norix-skills/doc-sentinel
或手动安装
$git clone https://github.com/northseadl/norix-skills.git
$ln -s norix-skills/doc-sentinel <SKILLS_DIR>/doc-sentinel
验证
$uv run sentinel.py status
OK Skill ready.

Built for AI Agents, by Norix