reqpipe —— 研发需求流水线管理工具
把每个需求拆成 4 个固定阶段(需求 → 方案 → 评审 → 开发),每个需求一个工作目录, 阶段产物使用约定的目录命名与文档格式;通过命令行创建需求、推进/跳过阶段、列出流水线、 生成提交清单。支持跳过 方案/评审 的轻量流程(跳过时必须记录原因)。
纯标准库实现,零第三方依赖。
特性
- 4 阶段流水线:需求
requirement→ 方案design→ 评审review→ 开发development - 每个需求一个独立工作目录,固定子目录命名与文档格式(自动生成文档模板)
advance推进阶段,自动生成下一阶段文档模板;缺文档时可用--force强制推进review独立评审动作:评审人须与方案作者不同(同一 agent 不能自写自评), 结论approve通过进入开发、reject打回方案返工,每轮评审(评审人/结论/意见/时间)留档- 身份留痕:
advance/skip/review均可通过--by记录操作者(默认REQPIPE_ACTOR或anonymous) skip跳过 方案 / 评审 阶段,必须通过--reason记录原因(写入清单与历史); 方案作者不能跳过自己方案的评审--light轻量流程:创建时声明,方案/评审标记为可选阶段list/show查看流水线;checklist一键生成提交清单- 根目录解析:
--root参数 > 环境变量REQPIPE_ROOT> 默认./pipelines
安装
方式一:pip 安装(推荐,得到 reqpipe 命令)
cd reqpipe
python3 -m venv .venv && source .venv/bin/activate
pip install .
reqpipe --version
方式二:不安装,直接运行
cd reqpipe
python3 -m reqpipe --help
快速开始
# 1. 初始化流水线根目录(默认 ./pipelines)
reqpipe init
# 2. 创建需求(自动生成 ID:REQ-001、REQ-002 …)
reqpipe create "登录模块支持记住我"
# 3. 完善 01-requirement/REQUIREMENT.md 后,推进阶段(--by 记录操作者)
reqpipe advance REQ-001 --by alice
# 4. 完善 02-design/DESIGN.md 后,推进方案
reqpipe advance REQ-001 --by alice
# 5. 评审(评审人 ≠ 方案作者;approve 通过 / reject 打回返工)
reqpipe review REQ-001 --by bob --verdict approve --comment "方案可行"
# 6. 推进到 开发 并完成
reqpipe advance REQ-001 --by alice
# 7. 查看流水线 / 生成提交清单
reqpipe list
reqpipe show REQ-001
reqpipe checklist REQ-001 -o COMMIT_CHECKLIST.md
目录与文档约定
每个需求一个工作目录 <需求ID>/,固定包含 4 个阶段子目录,每个阶段一个约定文档
(创建需求时自动生成第一阶段的模板,推进/跳过时自动生成后续阶段模板):
| 阶段 | 子目录 | 文档文件 |
|---|---|---|
| 需求 | 01-requirement/ |
REQUIREMENT.md |
| 方案 | 02-design/ |
DESIGN.md |
| 评审 | 03-review/ |
REVIEW.md |
| 开发 | 04-development/ |
DEVELOPMENT.md |
流水线元数据(阶段状态、操作者、评审记录、跳过原因、操作历史)统一保存在
<需求ID>/pipeline.json,由工具自动维护,无需手工编辑。
pipelines/
└── REQ-001/
├── pipeline.json # 元数据:阶段状态、操作者、评审记录、跳过原因、历史
├── 01-requirement/
│ └── REQUIREMENT.md # 需求说明(背景 / 目标 / 验收标准)
├── 02-design/
│ └── DESIGN.md # 方案设计(概述 / 选型 / 实施步骤 / 风险)
├── 03-review/
│ └── REVIEW.md # 评审记录(每轮:评审人 / 结论 / 意见)
└── 04-development/
└── DEVELOPMENT.md # 开发说明(实现 / 变更文件 / 自测)
命令参考
reqpipe init
初始化流水线根目录,并写入一份约定说明 README.md。
reqpipe init # 默认 ./pipelines
reqpipe --root data init # 指定根目录
reqpipe create <标题> [--id ID] [--desc 描述] [--light]
创建需求。默认自动生成 ID(REQ-001 起,自动避让已有编号)。
reqpipe create "登录模块改造"
reqpipe create "修复导出乱码" --id BUG-17 --desc "CSV 导出中文乱码"
reqpipe create "小需求" --light # 轻量流程
reqpipe advance <ID> [--force] [--by 身份]
推进阶段:完成当前阶段 → 进入下一阶段,并自动生成下一阶段的文档模板。
要求当前阶段的文档已存在,否则报错;--force 可跳过该检查。
--by 记录操作者身份(默认 REQPIPE_ACTOR 环境变量或 anonymous)。
评审阶段不能用
advance推进:必须用reqpipe review完成评审(见下), 防止同一个 agent 写完方案又自己评审通过。
reqpipe advance REQ-001 --by alice
reqpipe advance REQ-001 --force --by alice
reqpipe review <ID> --by <评审人> --verdict <approve|reject> [--comment 意见]
评审方案(design 阶段)。评审人必须显式声明且与方案作者不同——可以由另一个 agent(其会话 id)或人工(姓名)完成,同一 agent 不能自写自评。
--verdict approve:评审通过,评审阶段完成并自动进入开发;--verdict reject:评审不通过,方案阶段标记为「需返工」并打回,重新完善DESIGN.md后再次评审(可多次,每轮评审都写入REVIEW.md与pipeline.json)。
reqpipe review REQ-001 --by bob --verdict approve --comment "方案可行"
reqpipe review REQ-001 --by bob --verdict reject --comment "选型有风险,需补充降级方案"
reqpipe skip <ID> <阶段> --reason <原因> [--by 身份]
跳过阶段。仅支持 方案(design/方案)与 评审(review/评审),--reason 必填,
原因会记录到清单与历史中。这正是轻量流程的入口。
方案作者不能跳过自己方案的评审——跳过评审须由其他 agent 或人工决定。
reqpipe skip REQ-001 design --reason "改动极小,无需方案文档" --by alice
reqpipe skip REQ-001 方案 --reason "改动极小,无需方案文档" --by alice # 中文名亦可
reqpipe list [--json]
列出所有流水线(ID / 标题 / 当前阶段 / 状态 / 类型)。--json 输出机器可读结构。
reqpipe show <ID> [--json]
查看需求详情:阶段状态(含可选标记与跳过原因)、操作历史。--json 输出完整清单。
reqpipe checklist <ID> [-o 文件]
生成 Markdown 提交清单:按阶段列出待提交文件、跳过原因、汇总统计。
默认输出到终端,-o 写入文件。
reqpipe checklist REQ-001
reqpipe checklist REQ-001 -o COMMIT_CHECKLIST.md
评审闸门
分阶段的意义在于评审必须由方案作者以外的身份完成:要么拉一个独立的评审 agent (它的会话 id 与方案作者不同,天然满足条件),要么由人工在对话中评审后声明评审人姓名。
- 同一 agent 写完方案后,
advance到评审阶段会被拒绝(提示使用review); reqpipe_review自评(--by与方案作者相同)会被拒绝;skip评审时,若操作者就是方案作者,也会被拒绝;- 旧数据(无
done_by)不追溯:只要方案作者未知,任何显式评审人身份都视为有效。
拒绝闭环:review --verdict reject → 方案标记「需返工」→ 重新完善 DESIGN.md
→ advance 方案 → 再次 review,直到 approve 才进入开发。
轻量流程
团队遇到简单需求时,可以跳过 方案 / 评审 阶段直接进入开发:
- 创建时加
--light(方案/评审标记为「可选」,展示时体现); - 需求阶段完成后,用
skip跳过方案与评审,每次都必须写原因; 跳过评审须由非方案作者的身份执行(--by); - 直接
advance进入开发并完成。
跳过记录(原因 + 时间 + 操作者)会写入 pipeline.json 的历史与提交清单,
保证“轻量但不留痕”不会发生。
环境变量
REQPIPE_ROOT:默认流水线根目录。优先级:--root参数 >REQPIPE_ROOT>./pipelines。REQPIPE_ACTOR:默认操作者身份。advance/skip未传--by时使用,否则为anonymous;review的--by必须显式声明(不读此默认值,防止匿名评审)。
export REQPIPE_ROOT=/data/req-pipelines
export REQPIPE_ACTOR=alice
reqpipe create "需求"
测试
cd reqpipe
python3 -m unittest discover -s tests -v
测试覆盖:创建(结构/自动编号/去重/校验)、推进(缺文档检查/完整流程/评审闸门)、
评审(自评拒绝/通过/打回返工闭环/多轮留档)、跳过(原因必填/仅方案评审/重复与已完成校验/
作者不能跳过自己的评审)、轻量流程端到端、清单内容、CLI 端到端、环境变量与 --root 位置无关性、
python -m reqpipe 冒烟测试。
项目结构
reqpipe/
├── pyproject.toml # 打包配置(console script: reqpipe)
├── README.md # 本文档
├── reqpipe/
│ ├── __init__.py # 版本号
│ ├── __main__.py # python -m reqpipe
│ ├── cli.py # 命令行入口(argparse)
│ ├── pipeline.py # 核心逻辑:阶段机、清单、读写
│ ├── templates.py # 文档模板与根目录说明
│ └── errors.py # 自定义异常
└── tests/
├── helpers.py # 测试基类与 CLI 调用封装
├── test_core.py # 核心逻辑测试
└── test_cli.py # CLI 端到端测试
退出码
| 码 | 含义 |
|---|---|
| 0 | 成功 |
| 1 | 业务错误(需求不存在、阶段不可跳过、缺原因等) |
| 2 | 用法错误(未知命令、缺参数等) |
| 130 | 用户中断(Ctrl-C) |
Metadata
Release files for reqpipe 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| reqpipe-0.2.0.tar.gz | 23.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| reqpipe-0.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 42.0 kB
Release files / reqpipe-0.2.0.tar.gz
| Download URL | reqpipe-0.2.0.tar.gz |
|---|---|
| Size | 23.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
6d33a4d5d66871f45498ab34a3b749b64223136ecb8f7c6f6076b96ac88c0c22
|
|
BLAKE2b-256 checksum How to use checksums |
6fd96a84989387cdb68176777c455634fbaf5763880bc57b1264be9f4051390d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 14, 2026.
Transparency logRelease files / reqpipe-0.2.0-py3-none-any.whl
| Download URL | reqpipe-0.2.0-py3-none-any.whl |
|---|---|
| Size | 18.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
3b00a77c88b4af364ecf85532554af20e4c0bee914c2d9849cd4be9104ad1de4
|
|
BLAKE2b-256 checksum How to use checksums |
617586cfddbed45a457cb777b8823b2c4028383f9db1c3b1e820f3d264d18378
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 14, 2026.
Transparency log