agentleFS
hellyguohellyguo/self-ai-spec/skills/requirement-collect/SKILL.md

requirement-collect

Skill8 starsChanged 18 days agoApache-2.0View on GitHub

读取全部源代码并反向解构为需求文档,包括模块清单、业务规则与需求维度。适用于遗留系统需求还原、需求文档缺失、系统交接。

The file

Files
SKILL.md

源代码解构(需求)

本文件中的 templates/... 均指本技能目录下的 templates/ 子目录。

<HARD-GATE> **强制约束:必须对所有模块进行梳理,不得偷工减料**
  1. 所有源代码包/模块必须逐一分析,不得跳过任何模块
  2. 每个模块的需求文档必须完整包含所有章节
  3. 业务规则必须从代码中深度挖掘,不得遗漏
  4. 执行进度必须记录,确保可追溯:优先使用 todowrite;宿主未提供时写入 docs/todo/ 下的 TODO 文件
  5. 需求必须提炼技术实现背后的根本原因,不得把技术实现形态当成需求
  6. 最终输出必须通过完整性检查清单验证

违反以上约束视为执行失败,必须重新执行。 </HARD-GATE>

核心原则

从代码逆向提炼需求,完整收集业务意图。解答为什么建立项目的问题。

根本需求优先(强制)

代码里的类、方法、消息、缓存、表结构、锁、批处理,都是技术实现形态,不是需求本身。需求文档必须回答「为什么必须这样实现」,再说明「当前如何实现」。

参考技术实现(❌ 不是需求,非唯一实现)根本需求(✅ 需求)
配置写入主库 → 刷新缓存 → 通知各节点重载(当前的一种实现,也可用消息总线/配置中心等)配置数据必须安全持久、不丢失、可审计、可回滚;集群内所有节点在任一时刻看到同一版本的配置(最终一致);变更生效过程原子、可感知
关键操作需第二人复核职责分离,防止单人舞弊;关键操作可追溯、不可抵赖
依赖关系成环则跳过计算依赖必须无环,否则结果不确定/死循环;系统须保证依赖完整性
按部署范围开关加载系统须按部署边界裁剪能力,避免加载无关数据、缩小故障面与启动时间
用分布式锁选主集群中同一任务只能有一个执行者,避免重复执行导致数据不一致
金额/数值使用精确数值类型数值计算必须精确、可对账,满足合规与审计

写作要求:

  1. 每条需求/规则先写「根本需求」,再写「参考技术实现」,最后写「代码证据」。
  2. 根本需求必须落在业务价值/风险/合规层面(如数据安全、强一致、零差错、实时性、可用性、可审计、防舞弊、合规),而不是「调用某方法」「写某表」「发某消息」。
  3. 禁止用「系统做了 X」代替「系统必须保证 Y」。若无法判断根本原因,标注「待业务确认」,不得臆造。
  4. 跨模块重复的技术手段(锁、广播、缓存、分表)应归纳为同一条根本需求,避免把实现细节误当业务规则。
  5. 代码中的技术实现是「参考实现」,不是唯一实现,也不是需求本身。同一根本需求可以有多种满足方式(换一种锁、换一种消息、换一种存储同样成立);文档只把当前代码作为证据/参考,不得据此推断「需求就是这样做」,也不得把实现细节写成排他性约束。

执行步骤

  1. 扫描项目结构:列出所有包/模块,形成完整模块清单
  2. 逐一分析模块:按模块清单顺序,逐个深入分析
  3. 挖掘业务规则:从每个模块代码中深度挖掘业务规则
  4. 编写需求文档:为每个模块生成完整需求文档
  5. 汇总全局需求:整合所有模块需求,生成全局需求文档

进度记录

使用 todowrite 记录执行进度;宿主未提供该工具时,按 rules/interaction.rules.md 写入 docs/todo/ 下的 TODO 文件:

- [ ] 扫描项目结构,列出模块清单
- [ ] 分析模块: {module1}
- [ ] 分析模块: {module2}
- [ ] ...
- [ ] 汇总全局需求文档
- [ ] 完整性检查

模块梳理要求

模块清单

生成 docs/requirements/module_inventory.md,模板见 templates/module_inventory.md

分析顺序

  1. 核心业务模块优先
  2. 辅助功能模块次之
  3. 工具/配置模块最后

模块分析完整性

分析内容必须产出不得省略
根本需求价值目标 + 技术实现→根本原因映射否
业务场景场景列表 + 场景详情否
功能需求核心功能 + 辅助功能否
业务规则规则列表 + 规则详情(独立章节)否
数据需求数据实体 + 数据流转否
非功能需求性能 + 安全 + 可用性否
约束条件业务约束 + 技术约束否

业务规则挖掘

<HARD-GATE> **业务规则必须独立成章节写入分模块文档,不得遗漏或简化** </HARD-GATE>

挖掘方法

代码特征挖掘方式示例
条件判断提取 if/switch 中的业务约束if (age >= 18 && status == ACTIVE) → 用户操作权限规则
计算逻辑提取计算公式和边界条件total = unitPrice * quantity → 金额计算规则
状态转换提取状态流转路径PENDING → APPROVED → DONE → 审批状态转换规则
数据验证提取输入校验规则email.matches(regex) → 邮箱格式验证规则
异常处理提取业务异常场景QuotaExceededException → 配额校验规则
常量/配置提取业务阈值MAX_RETRY = 3 → 重试次数上限规则
数据库约束提取 CHECK/DEFAULT 约束age CHECK (0-150) → 年龄范围规则
注释/文档提取业务规则线索会员等级 20% 折扣 → 会员折扣规则

AST 辅助挖掘(ast-grep-mcp 联动)

当 ast-grep-mcp 可用时,使用 find_code_by_rule 自动扫描业务规则候选点。

条件判断挖掘:

find_code_by_rule(
  project_folder: "<project_root>",
  yaml: '''
    id: business-condition
    language: java
    rule:
      pattern: 'if ($VAR.equals("$VAL"))'
    constraints:
      VAL:
        regex: '(?i)(ACTIVE|PENDING|APPROVED|REJECTED|ENABLED|DISABLED|SUCCESS|FAILED|PAID|SHIPPED|CANCELLED)'
  '''
)

状态赋值挖掘:

find_code_by_rule(
  project_folder: "<project_root>",
  yaml: '''
    id: state-assignment
    language: java
    rule:
      pattern: '$OBJ.setStatus("$VAL")'
    constraints:
      VAL:
        regex: '(?i)(ACTIVE|INACTIVE|PENDING|APPROVED|REJECTED|ENABLED|DISABLED|SUCCESS|FAILED|PAID|SHIPPED|CANCELLED)'
  '''
)

异常类挖掘:

find_code(pattern: 'throw new $EXCEPTION($$$ARGS)', language: java, project_folder: "<dir>")

SQL 来源提取:复用 sql-extract 技能的 rule,参见 sql-extract/SKILL.md。

注意:AST 命中结果为候选点,需人工确认业务语义后写入规则文档。

规则输出格式

每条规则需记录:规则ID、规则名称、根本需求、参考技术实现(当前代码中的一种实现,非唯一、仅供参考)、触发条件/适用场景、代码位置、异常处理

  • 「根本需求」列写该规则要保障的业务价值/风险/合规目标,禁止复述技术手段。
  • 「参考技术实现」列记录代码中的当前做法,仅作参考与证据;它不是唯一实现,不得据此推断需求,也不得排除其他合理实现方式。

模板见 templates/business_rules.md

需求分析维度

维度分析内容
业务需求业务场景、业务流程、业务规则、业务约束
功能需求核心功能、辅助功能、边界条件、异常处理
非功能需求性能要求、安全要求、可用性要求、兼容性要求
数据需求数据实体、数据关系、数据约束、数据流转

需求识别技巧

代码特征需求类型
Controller 层API 接口需求
Service 层业务逻辑需求
DAO 层数据访问需求
配置文件配置需求
异常处理异常场景需求
日志记录可观测性需求
锁/广播/缓存/分表先提炼根本需求(一致性/可靠性/性能);实现仅作参考,非唯一
注释/文档业务规则线索
表结构/字段约束数据实体/业务规则需求
索引/外键/触发器性能/数据关系/自动化需求
测试场景/边界测试业务场景/边界条件需求

源代码类型

直接源码

Java(*.java)、Python(*.py)、C++(*.cpp/*.hpp)、ANSI C(*.c/*.h)、 JavaScript(*.js/*.mjs)、TypeScript(*.ts/*.tsx)、Rust(*.rs)、 Go(*.go)、Kotlin(*.kt)、Scala(*.scala)、Shell(*.sh)、Batch(*.bat/*.ps1)

SQL 来源

来源提取方法
*.sql直接读取
MyBatis Mapper XML从 SQL 标签提取,合并 include 引用
Hibernate/JPA 注解从 @Query/@NamedQuery 提取
Java/Python 字符串正则匹配 SQL 关键字模式

SQL 提取正则

(?i)(SELECT|INSERT|UPDATE|DELETE|CREATE|ALTER|DROP|TRUNCATE)\s+
(?i)(SELECT|INSERT|UPDATE|DELETE|CREATE|ALTER|DROP)\s+[\w\s\*,\.\(\)]+(FROM|INTO|TABLE|SET|VALUES|WHERE|JOIN|ORDER|GROUP|HAVING)

输出目录结构

docs/requirements/
├── module_inventory.md           # 模块清单(必须)
├── global_requirements.md        # 全局需求文档
├── {package}/                    # 分模块需求文档
│   └── requirements.md

输出模板

模板文件用途
templates/module_inventory.md模块清单
templates/module_requirements.md分模块需求文档
templates/business_rules.md业务规则章节
templates/global_requirements.md全局需求文档

完整性检查清单

<HARD-GATE> **执行完成后必须通过以下检查,否则视为执行失败** </HARD-GATE>

模块覆盖

  • 所有模块已列入 module_inventory.md
  • 所有模块均有对应的需求文档
  • 需求文档数量与模块数量一致

文档完整性

  • 模块概述章节
  • 根本需求章节(含价值目标+技术实现→根本原因映射)
  • 业务场景章节(含场景列表+场景详情)
  • 功能需求章节(含核心功能+辅助功能)
  • 业务规则章节(独立章节,含规则分类+规则详情)
  • 数据需求章节(含数据实体+数据流转)
  • 非功能需求章节
  • 约束条件章节

业务规则检查

  • 业务规则已从代码中深度挖掘
  • 业务规则已分类整理
  • 每条规则有代码位置引用
  • 规则详情包含触发条件、适用场景
  • 每条规则已提炼根本需求,未把技术实现形态当成需求
  • 根本需求落在业务价值/风险/合规层面,而非类/方法/表/消息

全局文档检查

  • 模块清单已生成
  • 全局需求文档已生成
  • 全局文档包含「根本需求」汇总,能回答系统为什么这样设计
  • 业务规则汇总章节存在
  • 功能全景章节存在
  • 数据全景章节存在

关联技能

设计解构请使用技能:code-deconstruct

SQL 提取请使用技能:sql-extract(ast-grep-mcp 联动,精准提取内嵌 SQL)

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.