requirement-collect
Skill8 starsChanged 18 days agoApache-2.0View on GitHub
读取全部源代码并反向解构为需求文档,包括模块清单、业务规则与需求维度。适用于遗留系统需求还原、需求文档缺失、系统交接。
In this repository32 other files it gives its agents.
- AGENTS.mdAGENTS.md
- ast-grep-blockSkill
- code-deconstructSkill
- code-detect-dupSkill
- code-detect-problemSkill
- code-part-modificationSkill
- code-refactorSkill
- code-reviewSkill
- cpp-checkSkill
- cpp-clang-tidySkill
- cpp-tscancodeSkill
- full-analysisSkill
- gdb-heap-analysisSkill
- java-asprofSkill
- java-check-pmdSkill
- java-check-spotbugsSkill
- java-coverageSkill
- java-envSkill
- java-g2mSkill
- jmh-benchSkill
- lets-loopSkill
- long-term-taskSkill
- md2pdfSkill
- merge-agents-mdSkill
- qualitative-assessmentSkill
- rust-clippySkill
- rust-flamegraphSkill
- shell-checkSkill
- sql-extractSkill
- sync-dev-specSkill
- sync-repo-docsSkill
- vbox-test-envSkill
The file
Files
源代码解构(需求)
本文件中的
templates/...均指本技能目录下的templates/子目录。
<HARD-GATE>
**强制约束:必须对所有模块进行梳理,不得偷工减料**- 所有源代码包/模块必须逐一分析,不得跳过任何模块
- 每个模块的需求文档必须完整包含所有章节
- 业务规则必须从代码中深度挖掘,不得遗漏
- 执行进度必须记录,确保可追溯:优先使用 todowrite;宿主未提供时写入
docs/todo/下的 TODO 文件 - 需求必须提炼技术实现背后的根本原因,不得把技术实现形态当成需求
- 最终输出必须通过完整性检查清单验证
违反以上约束视为执行失败,必须重新执行。
</HARD-GATE>
核心原则
从代码逆向提炼需求,完整收集业务意图。解答为什么建立项目的问题。
根本需求优先(强制)
代码里的类、方法、消息、缓存、表结构、锁、批处理,都是技术实现形态,不是需求本身。需求文档必须回答「为什么必须这样实现」,再说明「当前如何实现」。
| 参考技术实现(❌ 不是需求,非唯一实现) | 根本需求(✅ 需求) |
| 配置写入主库 → 刷新缓存 → 通知各节点重载(当前的一种实现,也可用消息总线/配置中心等) | 配置数据必须安全持久、不丢失、可审计、可回滚;集群内所有节点在任一时刻看到同一版本的配置(最终一致);变更生效过程原子、可感知 |
| 关键操作需第二人复核 | 职责分离,防止单人舞弊;关键操作可追溯、不可抵赖 |
| 依赖关系成环则跳过 | 计算依赖必须无环,否则结果不确定/死循环;系统须保证依赖完整性 |
| 按部署范围开关加载 | 系统须按部署边界裁剪能力,避免加载无关数据、缩小故障面与启动时间 |
| 用分布式锁选主 | 集群中同一任务只能有一个执行者,避免重复执行导致数据不一致 |
| 金额/数值使用精确数值类型 | 数值计算必须精确、可对账,满足合规与审计 |
写作要求:
- 每条需求/规则先写「根本需求」,再写「参考技术实现」,最后写「代码证据」。
- 根本需求必须落在业务价值/风险/合规层面(如数据安全、强一致、零差错、实时性、可用性、可审计、防舞弊、合规),而不是「调用某方法」「写某表」「发某消息」。
- 禁止用「系统做了 X」代替「系统必须保证 Y」。若无法判断根本原因,标注「待业务确认」,不得臆造。
- 跨模块重复的技术手段(锁、广播、缓存、分表)应归纳为同一条根本需求,避免把实现细节误当业务规则。
- 代码中的技术实现是「参考实现」,不是唯一实现,也不是需求本身。同一根本需求可以有多种满足方式(换一种锁、换一种消息、换一种存储同样成立);文档只把当前代码作为证据/参考,不得据此推断「需求就是这样做」,也不得把实现细节写成排他性约束。
执行步骤
- 扫描项目结构:列出所有包/模块,形成完整模块清单
- 逐一分析模块:按模块清单顺序,逐个深入分析
- 挖掘业务规则:从每个模块代码中深度挖掘业务规则
- 编写需求文档:为每个模块生成完整需求文档
- 汇总全局需求:整合所有模块需求,生成全局需求文档
进度记录
使用 todowrite 记录执行进度;宿主未提供该工具时,按 rules/interaction.rules.md 写入 docs/todo/ 下的 TODO 文件:
- [ ] 扫描项目结构,列出模块清单
- [ ] 分析模块: {module1}
- [ ] 分析模块: {module2}
- [ ] ...
- [ ] 汇总全局需求文档
- [ ] 完整性检查模块梳理要求
模块清单
生成 docs/requirements/module_inventory.md,模板见 templates/module_inventory.md
分析顺序
- 核心业务模块优先
- 辅助功能模块次之
- 工具/配置模块最后
模块分析完整性
| 分析内容 | 必须产出 | 不得省略 |
| 根本需求 | 价值目标 + 技术实现→根本原因映射 | 否 |
| 业务场景 | 场景列表 + 场景详情 | 否 |
| 功能需求 | 核心功能 + 辅助功能 | 否 |
| 业务规则 | 规则列表 + 规则详情(独立章节) | 否 |
| 数据需求 | 数据实体 + 数据流转 | 否 |
| 非功能需求 | 性能 + 安全 + 可用性 | 否 |
| 约束条件 | 业务约束 + 技术约束 | 否 |
业务规则挖掘
<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)
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
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.

