跳到主要内容

验证

使用 LeanSpec 的内置验证系统确保Spec质量。验证检查结构问题、frontmatter正确性以及Token计数管理,以保持最佳的 AI 理解能力。

验证命令

检查Spec的质量问题:

lean-spec validate

默认验证所有Spec。检查特定Spec:

lean-spec validate <spec-1> <spec-2>

质量检查

Token计数分析

基于 上下文经济 (Context Economy) 原则 - Spec必须适合 AI 工作记忆 (Working Memory):

  • ✅ 优秀:<2,000 个Token - 100% AI 有效性
  • 👍 良好:2,000-3,500 个Token - 95% AI 有效性
  • ⚠️ 警告:3,500-5,000 个Token - 85% AI 有效性
  • 🔴 错误:>5,000 个Token - 70% AI 有效性,应该拆分

理由

  • AI 上下文窗口:有限且昂贵
  • 质量下降在 50K Token硬限制之前就开始
  • 人类 + AI 工作记忆:约 2-3K Token 以实现最佳理解
  • 物理 + 生物 + 经济 = 硬限制

行数支撑: LeanSpec 也检查行数作为安全网(400 行警告 / 500 行最大值),但 Token计数是主要指标,因为它直接测量 AI 工作记忆消耗。

子 Spec验证

检查子 Spec文件(DESIGN.md、TESTING.md、IMPLEMENTATION.md 等):

  • 每个子 Spec也遵循Token限制
  • 跟踪总Spec大小(主Spec + 子 Spec)
  • 如果任何文件超过阈值,建议拆分

frontmatter验证

确保所需字段存在且有效:

必需字段:

  • status:必须有效(planned、in-progress、complete 等)
  • priority:必须有效(high、medium、low、none)
  • created:有效日期格式

可选字段(如果存在则验证):

  • tags:正确格式
  • depends_onrelated:有效的Spec引用
  • 自定义字段:正确类型

结构验证

检查Spec组织:

  • README.md 存在(主Spec文件)
  • 子 Spec遵循命名约定
  • 没有孤立或重复的内容

验证输出

清洁验证

$ lean-spec validate

✅ 所有Spec有效!

摘要:
• 检查了 45 个Spec
• 0 个错误
• 0 个警告

有警告

$ lean-spec validate

⚠️ 发现警告:

058-docs-overview-polish/README.md
⚠️ Token计数:4,200 个Token(85% AI 有效性)
→ 考虑:简化或拆分为子 Spec

摘要:
• 检查了 45 个Spec
• 0 个错误
• 1 个警告

有错误

$ lean-spec validate

❌ 发现错误:

042-complex-spec/README.md
🔴 Token计数:5,800 个Token(70% AI 有效性)
→ 操作:拆分为子 Spec以提高 AI 理解能力

043-broken-spec/README.md
🔴 无效状态:'in_progress'(应该是 'in-progress')
🔴 缺少必需字段:'created'

摘要:
• 检查了 45 个Spec
• 3 个错误
• 0 个警告

自定义验证选项

设置自定义阈值

# 更严格的Token阈值
lean-spec validate --warning-threshold 4000

# 更宽松的阈值
lean-spec validate --warning-threshold 6000

# 自定义行数支撑
lean-spec validate --max-lines 500

验证特定方面

# 仅检查复杂性(Token)
lean-spec validate --check complexity

# 仅检查frontmatter
lean-spec validate --check frontmatter

# 仅检查结构
lean-spec validate --check structure

修复验证问题

Token计数违规

问题:Spec超过 5,000 个Token(70% AI 有效性)

解决方案:使用子 Spec拆分

# 之前:单个 5,800 TokenSpec
README.md (5,800 Token) 🔴 - 70% AI 有效性

# 之后:拆分为专注的子 Spec
README.md (2,000 Token) ✅ - 概述、决策、摘要(100% 有效性)
DESIGN.md (1,500 Token) ✅ - 详细设计(100% 有效性)
IMPLEMENTATION.md (1,500 Token) ✅ - 实现计划(100% 有效性)

为什么这样做有效

  • 每个文件保持在 2,000 个Token 以下以实现最佳 AI 理解
  • AI 可以一次专注于一个方面
  • 人类可以快速导航到相关部分

无效的frontmatter

问题:frontmatter字段无效或缺失

解决方案:使用 lean-spec update 修复:

# 修复状态
lean-spec update <spec> --status in-progress

# 修复优先级
lean-spec update <spec> --priority high

# 修复标签
lean-spec update <spec> --tags feature,api

结构问题

问题:缺少 README.md 或格式错误的子 Spec

解决方案

  • 确保 README.md 作为主Spec文件存在
  • 遵循子 Spec命名:DESIGN.md、TESTING.md 等
  • 在所有文件中使用正确的frontmatter

验证工作流程

提交前检查

提交前运行:

lean-spec validate

在提交更改之前修复任何错误。

CI/CD 集成

添加到您的 CI 管道:

# .github/workflows/validate.yml
name: Validate Specs

on: [push, pull_request]

jobs:
validate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
- run: npm install -g lean-spec
- run: lean-spec validate

定期审查

每周Spec健康检查:

# 检查整体健康状况
lean-spec validate

# 详细分析
lean-spec stats --full

# 审查大型Spec(Token焦点)
lean-spec tokens --all --include-sub-specs

何时拆分

在以下情况下拆分:

  • ✅ Spec超过约 3,500 个Token(上下文经济警告)
  • ✅ 多个不同的关注点(不同主题)
  • ✅ Spec需要超过 10 分钟阅读
  • ✅ 频繁编辑导致混乱

在以下情况下不要拆分:

  • ❌ 少于约 2,000 个Token且专注
  • ❌ 单一的连贯概念
  • ❌ 快速阅读和理解

何时简化

在以下情况下简化:

  • 简单功能的过多细节
  • 重复信息
  • 低信噪比 (Signal-to-Noise)
  • 未来推测

何时接受警告

有时警告是可以接受的:

  • 在积极开发期间暂时较高
  • 需要全面细节的复杂功能
  • 拆分会降低清晰度

始终稍后重新评估。

最佳实践

  1. 尽早验证 - 提交前
  2. 及时修复警告 - 不要让它们累积
  3. 在约 3,500 个Token时拆分 - 对复杂功能使用子 Spec
  4. 自动化 - 添加到 CI/CD 管道
  5. 定期审查 - 每周健康检查

下一步


参考:请参阅第一性原理了解上下文经济和Token管理背后的理由。