workflow-loop 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- workflow_loop-0.1.0/LICENSE +21 -0
- workflow_loop-0.1.0/PKG-INFO +187 -0
- workflow_loop-0.1.0/README.md +170 -0
- workflow_loop-0.1.0/pyproject.toml +42 -0
- workflow_loop-0.1.0/setup.cfg +4 -0
- workflow_loop-0.1.0/src/workflow_loop/__init__.py +6 -0
- workflow_loop-0.1.0/src/workflow_loop/acceptance_records.py +338 -0
- workflow_loop-0.1.0/src/workflow_loop/artifact_paths.py +278 -0
- workflow_loop-0.1.0/src/workflow_loop/artifact_validation.py +1738 -0
- workflow_loop-0.1.0/src/workflow_loop/bug_record.py +203 -0
- workflow_loop-0.1.0/src/workflow_loop/cli.py +3257 -0
- workflow_loop-0.1.0/src/workflow_loop/data/Standardized_Repository/acceptance/acceptance.md +119 -0
- workflow_loop-0.1.0/src/workflow_loop/data/Standardized_Repository/acceptance/acceptance_plan.md +105 -0
- workflow_loop-0.1.0/src/workflow_loop/data/Standardized_Repository/code_design/code_design.md +204 -0
- workflow_loop-0.1.0/src/workflow_loop/data/Standardized_Repository/code_design/project_design_init.md +152 -0
- workflow_loop-0.1.0/src/workflow_loop/data/Standardized_Repository/code_design/revise_code_design.md +32 -0
- workflow_loop-0.1.0/src/workflow_loop/data/Standardized_Repository/code_design/update_code_design.md +94 -0
- workflow_loop-0.1.0/src/workflow_loop/data/Standardized_Repository/global/document_writing.md +77 -0
- workflow_loop-0.1.0/src/workflow_loop/data/Standardized_Repository/global/workflow_lifecycle.md +91 -0
- workflow_loop-0.1.0/src/workflow_loop/data/Standardized_Repository/impl/code_implementation.md +85 -0
- workflow_loop-0.1.0/src/workflow_loop/data/Standardized_Repository/impl/impl.md +164 -0
- workflow_loop-0.1.0/src/workflow_loop/data/Standardized_Repository/qa/test.md +167 -0
- workflow_loop-0.1.0/src/workflow_loop/data/Standardized_Repository/qa/test_code.md +121 -0
- workflow_loop-0.1.0/src/workflow_loop/data/Standardized_Repository/qa/test_code_implementation.md +67 -0
- workflow_loop-0.1.0/src/workflow_loop/data/Standardized_Repository/qa/test_plan.md +160 -0
- workflow_loop-0.1.0/src/workflow_loop/data/Standardized_Repository/reproduce/reproduce.md +60 -0
- workflow_loop-0.1.0/src/workflow_loop/data/Standardized_Repository/spec/spec.md +138 -0
- workflow_loop-0.1.0/src/workflow_loop/data/Standardized_Repository/spike/spike.md +236 -0
- workflow_loop-0.1.0/src/workflow_loop/data/Template_Repository/acceptance/acceptance_plan.md +142 -0
- workflow_loop-0.1.0/src/workflow_loop/data/Template_Repository/acceptance/acceptance_result.md +108 -0
- workflow_loop-0.1.0/src/workflow_loop/data/Template_Repository/code_design/code_design.md +260 -0
- workflow_loop-0.1.0/src/workflow_loop/data/Template_Repository/code_design/project_design_init_evidence.md +39 -0
- workflow_loop-0.1.0/src/workflow_loop/data/Template_Repository/impl/impl.md +112 -0
- workflow_loop-0.1.0/src/workflow_loop/data/Template_Repository/qa/test.md +102 -0
- workflow_loop-0.1.0/src/workflow_loop/data/Template_Repository/qa/test_plan.md +100 -0
- workflow_loop-0.1.0/src/workflow_loop/data/Template_Repository/reproduce/reproduce.md +82 -0
- workflow_loop-0.1.0/src/workflow_loop/data/Template_Repository/spec/spec.md +222 -0
- workflow_loop-0.1.0/src/workflow_loop/data/Template_Repository/spike/spike.md +135 -0
- workflow_loop-0.1.0/src/workflow_loop/installer.py +632 -0
- workflow_loop-0.1.0/src/workflow_loop/journal.py +78 -0
- workflow_loop-0.1.0/src/workflow_loop/path_composer.py +152 -0
- workflow_loop-0.1.0/src/workflow_loop/process_runner.py +176 -0
- workflow_loop-0.1.0/src/workflow_loop/project.py +397 -0
- workflow_loop-0.1.0/src/workflow_loop/role_doc.py +133 -0
- workflow_loop-0.1.0/src/workflow_loop/rollback.py +1738 -0
- workflow_loop-0.1.0/src/workflow_loop/spike_validation.py +379 -0
- workflow_loop-0.1.0/src/workflow_loop/stage_materials.py +169 -0
- workflow_loop-0.1.0/src/workflow_loop/stages/__init__.py +45 -0
- workflow_loop-0.1.0/src/workflow_loop/stages/base.py +164 -0
- workflow_loop-0.1.0/src/workflow_loop/stages/stages.py +1191 -0
- workflow_loop-0.1.0/src/workflow_loop/state.py +582 -0
- workflow_loop-0.1.0/src/workflow_loop/test_entry.py +123 -0
- workflow_loop-0.1.0/src/workflow_loop/test_execution.py +619 -0
- workflow_loop-0.1.0/src/workflow_loop/test_mapping.py +568 -0
- workflow_loop-0.1.0/src/workflow_loop/test_runner.py +134 -0
- workflow_loop-0.1.0/src/workflow_loop/topic.py +114 -0
- workflow_loop-0.1.0/src/workflow_loop/topic_relations.py +202 -0
- workflow_loop-0.1.0/src/workflow_loop/traceability.py +533 -0
- workflow_loop-0.1.0/src/workflow_loop/verification.py +971 -0
- workflow_loop-0.1.0/src/workflow_loop.egg-info/PKG-INFO +187 -0
- workflow_loop-0.1.0/src/workflow_loop.egg-info/SOURCES.txt +87 -0
- workflow_loop-0.1.0/src/workflow_loop.egg-info/dependency_links.txt +1 -0
- workflow_loop-0.1.0/src/workflow_loop.egg-info/entry_points.txt +2 -0
- workflow_loop-0.1.0/src/workflow_loop.egg-info/requires.txt +5 -0
- workflow_loop-0.1.0/src/workflow_loop.egg-info/top_level.txt +1 -0
- workflow_loop-0.1.0/tests/test_acceptance_records.py +213 -0
- workflow_loop-0.1.0/tests/test_architecture_validation.py +195 -0
- workflow_loop-0.1.0/tests/test_artifact_paths.py +78 -0
- workflow_loop-0.1.0/tests/test_bug_record.py +147 -0
- workflow_loop-0.1.0/tests/test_bug_validation.py +98 -0
- workflow_loop-0.1.0/tests/test_commands.py +391 -0
- workflow_loop-0.1.0/tests/test_installer.py +203 -0
- workflow_loop-0.1.0/tests/test_path_composer.py +122 -0
- workflow_loop-0.1.0/tests/test_process_runner.py +83 -0
- workflow_loop-0.1.0/tests/test_project.py +102 -0
- workflow_loop-0.1.0/tests/test_public_project.py +518 -0
- workflow_loop-0.1.0/tests/test_release_workflow.py +345 -0
- workflow_loop-0.1.0/tests/test_rollback.py +321 -0
- workflow_loop-0.1.0/tests/test_spike_validation.py +301 -0
- workflow_loop-0.1.0/tests/test_stage_materials.py +92 -0
- workflow_loop-0.1.0/tests/test_stages.py +314 -0
- workflow_loop-0.1.0/tests/test_state.py +312 -0
- workflow_loop-0.1.0/tests/test_test_entry.py +80 -0
- workflow_loop-0.1.0/tests/test_test_execution.py +521 -0
- workflow_loop-0.1.0/tests/test_test_mapping.py +259 -0
- workflow_loop-0.1.0/tests/test_test_runner.py +174 -0
- workflow_loop-0.1.0/tests/test_topic_relations.py +109 -0
- workflow_loop-0.1.0/tests/test_traceability.py +343 -0
- workflow_loop-0.1.0/tests/test_verification.py +586 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 yuzyf
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: workflow-loop
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: 为 AI 驱动的软件开发提供有状态、可验证、可回退的工作流管理。
|
|
5
|
+
Author: yuzyf
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/yuzyf/workflow_loop
|
|
8
|
+
Project-URL: Repository, https://github.com/yuzyf/workflow_loop
|
|
9
|
+
Requires-Python: >=3.11
|
|
10
|
+
Description-Content-Type: text/markdown
|
|
11
|
+
License-File: LICENSE
|
|
12
|
+
Provides-Extra: dev
|
|
13
|
+
Requires-Dist: build>=1.2; extra == "dev"
|
|
14
|
+
Requires-Dist: pytest>=7.0; extra == "dev"
|
|
15
|
+
Requires-Dist: PyYAML>=6.0; extra == "dev"
|
|
16
|
+
Dynamic: license-file
|
|
17
|
+
|
|
18
|
+
# Workflow Loop
|
|
19
|
+
|
|
20
|
+
[](https://github.com/yuzyf/workflow_loop/releases)
|
|
21
|
+
[](https://pypi.org/project/workflow-loop/)
|
|
22
|
+
[](https://www.python.org/downloads/)
|
|
23
|
+
[](LICENSE)
|
|
24
|
+
|
|
25
|
+
为 AI 驱动的软件开发提供有状态、可验证、可回退的工作流管理。
|
|
26
|
+
|
|
27
|
+
Workflow Loop 把一次软件修改拆成有顺序的工作环节,并用程序保存当前状态、检查阶段产物和控制推进。用户负责提出需求和确认关键决定;AI(人工智能)编码助手负责执行日常 `workflow` 命令,按照命令输出的下一步完成讨论、实施、测试和验收。
|
|
28
|
+
|
|
29
|
+
## 能力与边界
|
|
30
|
+
|
|
31
|
+
### 能做什么
|
|
32
|
+
|
|
33
|
+
- **保存进度**:在项目的 `.workflow_loop/` 目录保存当前工作环节、确认状态和机器执行记录,下一次对话可以从真实状态继续。
|
|
34
|
+
- **控制推进**:每个环节依次经过讨论完成、程序检查和用户确认三道门,前一步不满足时不能进入下一步。
|
|
35
|
+
- **连接交付证据**:把产品设计、验收条件、测试项、实施记录和最终结果放进同一条可追踪链路。
|
|
36
|
+
- **保护项目修改**:实施前保存计划修改文件的原内容;需要退回上游或作废整轮时,按工作流规则使旧结果失效或恢复受管内容。
|
|
37
|
+
- **管理三种工作**:分别处理从零创建、修改现有产品和修复缺陷,按工作类型生成对应的环节路径。
|
|
38
|
+
|
|
39
|
+
### 不做什么
|
|
40
|
+
|
|
41
|
+
- 不替代 AI 编码助手、版本控制系统或持续集成服务,也不替用户决定产品需求是否正确。
|
|
42
|
+
- 不允许跳过必要讨论、程序检查或用户确认,把未经验证的内容当成交付结果。
|
|
43
|
+
- 不自动安装 Python,不自动升级或修复已有的异常安装,也不同时维护多个产品版本。
|
|
44
|
+
- 当前只支持 `from_scratch`(从零创建)、`product_change`(修改现有产品)和 `bugfix`(修复缺陷)三种正式工作意图。
|
|
45
|
+
|
|
46
|
+
## 工作流程
|
|
47
|
+
|
|
48
|
+
`intent`(工作意图)决定一轮工作需要经过哪些环节。各意图的具体环节不同,但每个需要正式确认的环节都遵守同一组三道门。
|
|
49
|
+
|
|
50
|
+
```mermaid
|
|
51
|
+
flowchart TD
|
|
52
|
+
A["用户提出需求"] --> B{"选择工作意图"}
|
|
53
|
+
B -->|"from_scratch:从零创建"| C1["生成从零开发路径"]
|
|
54
|
+
B -->|"product_change:修改产品"| C2["生成产品修改路径"]
|
|
55
|
+
B -->|"bugfix:修复缺陷"| C3["生成缺陷修复路径"]
|
|
56
|
+
C1 --> D["进入当前工作环节"]
|
|
57
|
+
C2 --> D
|
|
58
|
+
C3 --> D
|
|
59
|
+
D --> E["讨论问题并确认计划"]
|
|
60
|
+
E --> F["第一道门:讨论完成"]
|
|
61
|
+
F --> G["生成文档、代码或测试"]
|
|
62
|
+
G --> H["第二道门:程序检查"]
|
|
63
|
+
H --> I["第三道门:用户确认"]
|
|
64
|
+
I --> J{"还有下一环节?"}
|
|
65
|
+
J -->|"有"| D
|
|
66
|
+
J -->|"没有"| K["记录完成并正式收工"]
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
三道门分别解决不同问题:
|
|
70
|
+
|
|
71
|
+
1. **讨论完成**:需求、限制和实施计划已经与用户逐项达成共识,允许开始写正式产物。
|
|
72
|
+
2. **程序检查**:程序核对必需文件、结构、关联、代码变化或测试记录等可机械判断的事实。
|
|
73
|
+
3. **用户确认**:用户确认实际内容符合意图,程序记录确认后才进入下一环节。
|
|
74
|
+
|
|
75
|
+
## 环境要求
|
|
76
|
+
|
|
77
|
+
- Python 3.11 或更高版本;安装脚本只检查版本,不会代替用户安装 Python。
|
|
78
|
+
- macOS 或 Linux:Bash、`curl`(网络下载命令)、`tar`(归档解压命令),以及 `sha256sum` 或 `shasum`(文件摘要校验命令)。
|
|
79
|
+
- 原生 Windows:Windows PowerShell 5.1 或 PowerShell 7,以及可用的网络下载能力。
|
|
80
|
+
- 安装时能够访问 GitHub 和 PyPI(Python 公共软件包仓库)。
|
|
81
|
+
- 执行安装命令前,先进入要由 Workflow Loop 管理的项目根目录。
|
|
82
|
+
|
|
83
|
+
## 安装 0.1.0
|
|
84
|
+
|
|
85
|
+
安装器先进行只读检查并列出项目侧和电脑侧可能发生的全部持久修改。用户确认一次后,安装器才安装或复用全局 `workflow` 命令,并把智能体契约、产物模板和工作规范写入当前项目;用户取消或安装失败时不会留下只完成一部分的安装。
|
|
86
|
+
|
|
87
|
+
### macOS
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
curl -fsSL https://github.com/yuzyf/workflow_loop/releases/download/v0.1.0/install.sh | bash
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### Linux
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
curl -fsSL https://github.com/yuzyf/workflow_loop/releases/download/v0.1.0/install.sh | bash
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### 原生 Windows
|
|
100
|
+
|
|
101
|
+
```powershell
|
|
102
|
+
powershell -NoProfile -ExecutionPolicy Bypass -Command "irm https://github.com/yuzyf/workflow_loop/releases/download/v0.1.0/install.ps1 | iex"
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
安装命令固定读取 `v0.1.0` 正式发布中的脚本;不会跟随内容可能变化的 `latest`(最新版本)地址。
|
|
106
|
+
|
|
107
|
+
## 最小使用示例
|
|
108
|
+
|
|
109
|
+
安装完成后,在当前项目中启动支持读取 `AGENTS.md`(智能体契约文件)的 AI 编码助手,直接用自然语言提出需求:
|
|
110
|
+
|
|
111
|
+
```text
|
|
112
|
+
用户:给当前项目增加 CSV 导出功能,并保证原有导出格式不受影响。
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
之后由 AI 编码助手执行日常流程:
|
|
116
|
+
|
|
117
|
+
1. 自动运行 `workflow start` 检查当前状态,并根据事实与用户确认本轮工作意图。
|
|
118
|
+
2. 严格执行每条命令输出的“下一步”,每次只向用户确认一个问题。
|
|
119
|
+
3. 在写代码前完成需求、验收、测试和实施计划,在受保护的回退基线上实施修改。
|
|
120
|
+
4. 使用机器记录完成测试,经过主题验收和最终全量回归后正式收工。
|
|
121
|
+
|
|
122
|
+
用户不需要手工执行日常 `workflow` 命令;用户只负责描述需求、回答讨论问题、确认安装范围和确认各环节结果。
|
|
123
|
+
|
|
124
|
+
## 命令概览
|
|
125
|
+
|
|
126
|
+
下表供理解流程和排查当前状态使用,日常命令由 AI 编码助手执行。
|
|
127
|
+
|
|
128
|
+
| 命令 | 中文含义 |
|
|
129
|
+
|---|---|
|
|
130
|
+
| `workflow start` | 检查当前轮次;没有进行中的工作时列出三种工作意图 |
|
|
131
|
+
| `workflow start --intent <intent>` | 用指定工作意图开始一轮;`<intent>` 表示 `from_scratch`、`product_change` 或 `bugfix` |
|
|
132
|
+
| `workflow discuss` | 加载当前环节必须遵守的模板、规范和项目材料 |
|
|
133
|
+
| `workflow gate <stage> --discuss-done` | 通过当前环节的讨论完成门;`<stage>` 表示当前环节标识 |
|
|
134
|
+
| `workflow gate <stage>` | 让程序检查当前环节的文件、结构和可验证事实 |
|
|
135
|
+
| `workflow gate <stage> --confirmed` | 记录用户对当前环节的最终确认并进入下一环节 |
|
|
136
|
+
| `workflow status` | 显示当前轮次、环节、门禁状态和下一步 |
|
|
137
|
+
| `workflow test ...` | 登记统一测试入口、准备测试项或执行受控测试 |
|
|
138
|
+
| `workflow acceptance ...` | 记录需要用户判断的主题验收回答 |
|
|
139
|
+
| `workflow return --to <stage> --reason <reason>` | 带具体原因退回上游环节,并使受影响的下游结果失效;`<reason>` 表示退回原因 |
|
|
140
|
+
| `workflow abort` | 作废当前整轮,并按回退清单恢复受管内容 |
|
|
141
|
+
| `workflow done` | 在最后一个环节确认后记录整轮完成并清理临时回退副本 |
|
|
142
|
+
|
|
143
|
+
可运行 `workflow --help` 查看当前版本提供的完整参数。
|
|
144
|
+
|
|
145
|
+
## 源码开发
|
|
146
|
+
|
|
147
|
+
`uv` 是本项目使用的 Python 项目与环境管理工具。下面的命令会克隆源码、建立隔离环境、安装开发附加依赖,然后运行测试和真实分发包构建:
|
|
148
|
+
|
|
149
|
+
```bash
|
|
150
|
+
git clone https://github.com/yuzyf/workflow_loop.git
|
|
151
|
+
cd workflow_loop
|
|
152
|
+
uv sync --extra dev
|
|
153
|
+
uv run pytest
|
|
154
|
+
uv run python -m build
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
`dev`(开发附加依赖)包含 `pytest`(Python 测试工具)、PyYAML(YAML 配置解析库)和 `build`(Python 分发包构建工具)。
|
|
158
|
+
|
|
159
|
+
## 仓库结构
|
|
160
|
+
|
|
161
|
+
```text
|
|
162
|
+
workflow_loop/
|
|
163
|
+
├── src/workflow_loop/ Python 产品代码和随包分发的模板、规范
|
|
164
|
+
├── tests/ 自动化测试
|
|
165
|
+
├── .workflow_loop/ 本仓库自己的工作流状态、模板和规范
|
|
166
|
+
├── spec/ 产品设计和代码架构设计
|
|
167
|
+
├── acceptance/ 验收计划与验收结果
|
|
168
|
+
├── qa/ 测试计划与测试结果
|
|
169
|
+
├── impl/ 实施计划与实施记录
|
|
170
|
+
├── install.sh macOS 和 Linux 安装脚本
|
|
171
|
+
├── install.ps1 Windows 安装脚本
|
|
172
|
+
├── CONTEXT.md 产品术语、规则和限制
|
|
173
|
+
└── DESIGN.md 实现设计文档
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
## 详细文档
|
|
177
|
+
|
|
178
|
+
- [产品总说明](spec/产品总说明.md):产品目的、范围、使用者和通用规则。
|
|
179
|
+
- [安装到项目](spec/功能_安装到项目.md):支持环境、安装行为、异常处理和公开发布要求。
|
|
180
|
+
- [代码架构设计](spec/代码架构设计.md):功能到代码模块、状态和外部依赖的对应关系。
|
|
181
|
+
- [实现设计文档](DESIGN.md):命令、数据模型、工作意图、阶段路径和门禁的实现形态。
|
|
182
|
+
- [产品事实与约束](CONTEXT.md):当前有效的术语、约束和设计决策。
|
|
183
|
+
- [需求交付追踪表](需求交付追踪表.md):每轮需求从设计到验收的完整追踪入口。
|
|
184
|
+
|
|
185
|
+
## 许可证
|
|
186
|
+
|
|
187
|
+
本项目使用 [MIT 许可证](LICENSE)。
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
# Workflow Loop
|
|
2
|
+
|
|
3
|
+
[](https://github.com/yuzyf/workflow_loop/releases)
|
|
4
|
+
[](https://pypi.org/project/workflow-loop/)
|
|
5
|
+
[](https://www.python.org/downloads/)
|
|
6
|
+
[](LICENSE)
|
|
7
|
+
|
|
8
|
+
为 AI 驱动的软件开发提供有状态、可验证、可回退的工作流管理。
|
|
9
|
+
|
|
10
|
+
Workflow Loop 把一次软件修改拆成有顺序的工作环节,并用程序保存当前状态、检查阶段产物和控制推进。用户负责提出需求和确认关键决定;AI(人工智能)编码助手负责执行日常 `workflow` 命令,按照命令输出的下一步完成讨论、实施、测试和验收。
|
|
11
|
+
|
|
12
|
+
## 能力与边界
|
|
13
|
+
|
|
14
|
+
### 能做什么
|
|
15
|
+
|
|
16
|
+
- **保存进度**:在项目的 `.workflow_loop/` 目录保存当前工作环节、确认状态和机器执行记录,下一次对话可以从真实状态继续。
|
|
17
|
+
- **控制推进**:每个环节依次经过讨论完成、程序检查和用户确认三道门,前一步不满足时不能进入下一步。
|
|
18
|
+
- **连接交付证据**:把产品设计、验收条件、测试项、实施记录和最终结果放进同一条可追踪链路。
|
|
19
|
+
- **保护项目修改**:实施前保存计划修改文件的原内容;需要退回上游或作废整轮时,按工作流规则使旧结果失效或恢复受管内容。
|
|
20
|
+
- **管理三种工作**:分别处理从零创建、修改现有产品和修复缺陷,按工作类型生成对应的环节路径。
|
|
21
|
+
|
|
22
|
+
### 不做什么
|
|
23
|
+
|
|
24
|
+
- 不替代 AI 编码助手、版本控制系统或持续集成服务,也不替用户决定产品需求是否正确。
|
|
25
|
+
- 不允许跳过必要讨论、程序检查或用户确认,把未经验证的内容当成交付结果。
|
|
26
|
+
- 不自动安装 Python,不自动升级或修复已有的异常安装,也不同时维护多个产品版本。
|
|
27
|
+
- 当前只支持 `from_scratch`(从零创建)、`product_change`(修改现有产品)和 `bugfix`(修复缺陷)三种正式工作意图。
|
|
28
|
+
|
|
29
|
+
## 工作流程
|
|
30
|
+
|
|
31
|
+
`intent`(工作意图)决定一轮工作需要经过哪些环节。各意图的具体环节不同,但每个需要正式确认的环节都遵守同一组三道门。
|
|
32
|
+
|
|
33
|
+
```mermaid
|
|
34
|
+
flowchart TD
|
|
35
|
+
A["用户提出需求"] --> B{"选择工作意图"}
|
|
36
|
+
B -->|"from_scratch:从零创建"| C1["生成从零开发路径"]
|
|
37
|
+
B -->|"product_change:修改产品"| C2["生成产品修改路径"]
|
|
38
|
+
B -->|"bugfix:修复缺陷"| C3["生成缺陷修复路径"]
|
|
39
|
+
C1 --> D["进入当前工作环节"]
|
|
40
|
+
C2 --> D
|
|
41
|
+
C3 --> D
|
|
42
|
+
D --> E["讨论问题并确认计划"]
|
|
43
|
+
E --> F["第一道门:讨论完成"]
|
|
44
|
+
F --> G["生成文档、代码或测试"]
|
|
45
|
+
G --> H["第二道门:程序检查"]
|
|
46
|
+
H --> I["第三道门:用户确认"]
|
|
47
|
+
I --> J{"还有下一环节?"}
|
|
48
|
+
J -->|"有"| D
|
|
49
|
+
J -->|"没有"| K["记录完成并正式收工"]
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
三道门分别解决不同问题:
|
|
53
|
+
|
|
54
|
+
1. **讨论完成**:需求、限制和实施计划已经与用户逐项达成共识,允许开始写正式产物。
|
|
55
|
+
2. **程序检查**:程序核对必需文件、结构、关联、代码变化或测试记录等可机械判断的事实。
|
|
56
|
+
3. **用户确认**:用户确认实际内容符合意图,程序记录确认后才进入下一环节。
|
|
57
|
+
|
|
58
|
+
## 环境要求
|
|
59
|
+
|
|
60
|
+
- Python 3.11 或更高版本;安装脚本只检查版本,不会代替用户安装 Python。
|
|
61
|
+
- macOS 或 Linux:Bash、`curl`(网络下载命令)、`tar`(归档解压命令),以及 `sha256sum` 或 `shasum`(文件摘要校验命令)。
|
|
62
|
+
- 原生 Windows:Windows PowerShell 5.1 或 PowerShell 7,以及可用的网络下载能力。
|
|
63
|
+
- 安装时能够访问 GitHub 和 PyPI(Python 公共软件包仓库)。
|
|
64
|
+
- 执行安装命令前,先进入要由 Workflow Loop 管理的项目根目录。
|
|
65
|
+
|
|
66
|
+
## 安装 0.1.0
|
|
67
|
+
|
|
68
|
+
安装器先进行只读检查并列出项目侧和电脑侧可能发生的全部持久修改。用户确认一次后,安装器才安装或复用全局 `workflow` 命令,并把智能体契约、产物模板和工作规范写入当前项目;用户取消或安装失败时不会留下只完成一部分的安装。
|
|
69
|
+
|
|
70
|
+
### macOS
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
curl -fsSL https://github.com/yuzyf/workflow_loop/releases/download/v0.1.0/install.sh | bash
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### Linux
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
curl -fsSL https://github.com/yuzyf/workflow_loop/releases/download/v0.1.0/install.sh | bash
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### 原生 Windows
|
|
83
|
+
|
|
84
|
+
```powershell
|
|
85
|
+
powershell -NoProfile -ExecutionPolicy Bypass -Command "irm https://github.com/yuzyf/workflow_loop/releases/download/v0.1.0/install.ps1 | iex"
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
安装命令固定读取 `v0.1.0` 正式发布中的脚本;不会跟随内容可能变化的 `latest`(最新版本)地址。
|
|
89
|
+
|
|
90
|
+
## 最小使用示例
|
|
91
|
+
|
|
92
|
+
安装完成后,在当前项目中启动支持读取 `AGENTS.md`(智能体契约文件)的 AI 编码助手,直接用自然语言提出需求:
|
|
93
|
+
|
|
94
|
+
```text
|
|
95
|
+
用户:给当前项目增加 CSV 导出功能,并保证原有导出格式不受影响。
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
之后由 AI 编码助手执行日常流程:
|
|
99
|
+
|
|
100
|
+
1. 自动运行 `workflow start` 检查当前状态,并根据事实与用户确认本轮工作意图。
|
|
101
|
+
2. 严格执行每条命令输出的“下一步”,每次只向用户确认一个问题。
|
|
102
|
+
3. 在写代码前完成需求、验收、测试和实施计划,在受保护的回退基线上实施修改。
|
|
103
|
+
4. 使用机器记录完成测试,经过主题验收和最终全量回归后正式收工。
|
|
104
|
+
|
|
105
|
+
用户不需要手工执行日常 `workflow` 命令;用户只负责描述需求、回答讨论问题、确认安装范围和确认各环节结果。
|
|
106
|
+
|
|
107
|
+
## 命令概览
|
|
108
|
+
|
|
109
|
+
下表供理解流程和排查当前状态使用,日常命令由 AI 编码助手执行。
|
|
110
|
+
|
|
111
|
+
| 命令 | 中文含义 |
|
|
112
|
+
|---|---|
|
|
113
|
+
| `workflow start` | 检查当前轮次;没有进行中的工作时列出三种工作意图 |
|
|
114
|
+
| `workflow start --intent <intent>` | 用指定工作意图开始一轮;`<intent>` 表示 `from_scratch`、`product_change` 或 `bugfix` |
|
|
115
|
+
| `workflow discuss` | 加载当前环节必须遵守的模板、规范和项目材料 |
|
|
116
|
+
| `workflow gate <stage> --discuss-done` | 通过当前环节的讨论完成门;`<stage>` 表示当前环节标识 |
|
|
117
|
+
| `workflow gate <stage>` | 让程序检查当前环节的文件、结构和可验证事实 |
|
|
118
|
+
| `workflow gate <stage> --confirmed` | 记录用户对当前环节的最终确认并进入下一环节 |
|
|
119
|
+
| `workflow status` | 显示当前轮次、环节、门禁状态和下一步 |
|
|
120
|
+
| `workflow test ...` | 登记统一测试入口、准备测试项或执行受控测试 |
|
|
121
|
+
| `workflow acceptance ...` | 记录需要用户判断的主题验收回答 |
|
|
122
|
+
| `workflow return --to <stage> --reason <reason>` | 带具体原因退回上游环节,并使受影响的下游结果失效;`<reason>` 表示退回原因 |
|
|
123
|
+
| `workflow abort` | 作废当前整轮,并按回退清单恢复受管内容 |
|
|
124
|
+
| `workflow done` | 在最后一个环节确认后记录整轮完成并清理临时回退副本 |
|
|
125
|
+
|
|
126
|
+
可运行 `workflow --help` 查看当前版本提供的完整参数。
|
|
127
|
+
|
|
128
|
+
## 源码开发
|
|
129
|
+
|
|
130
|
+
`uv` 是本项目使用的 Python 项目与环境管理工具。下面的命令会克隆源码、建立隔离环境、安装开发附加依赖,然后运行测试和真实分发包构建:
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
git clone https://github.com/yuzyf/workflow_loop.git
|
|
134
|
+
cd workflow_loop
|
|
135
|
+
uv sync --extra dev
|
|
136
|
+
uv run pytest
|
|
137
|
+
uv run python -m build
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
`dev`(开发附加依赖)包含 `pytest`(Python 测试工具)、PyYAML(YAML 配置解析库)和 `build`(Python 分发包构建工具)。
|
|
141
|
+
|
|
142
|
+
## 仓库结构
|
|
143
|
+
|
|
144
|
+
```text
|
|
145
|
+
workflow_loop/
|
|
146
|
+
├── src/workflow_loop/ Python 产品代码和随包分发的模板、规范
|
|
147
|
+
├── tests/ 自动化测试
|
|
148
|
+
├── .workflow_loop/ 本仓库自己的工作流状态、模板和规范
|
|
149
|
+
├── spec/ 产品设计和代码架构设计
|
|
150
|
+
├── acceptance/ 验收计划与验收结果
|
|
151
|
+
├── qa/ 测试计划与测试结果
|
|
152
|
+
├── impl/ 实施计划与实施记录
|
|
153
|
+
├── install.sh macOS 和 Linux 安装脚本
|
|
154
|
+
├── install.ps1 Windows 安装脚本
|
|
155
|
+
├── CONTEXT.md 产品术语、规则和限制
|
|
156
|
+
└── DESIGN.md 实现设计文档
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
## 详细文档
|
|
160
|
+
|
|
161
|
+
- [产品总说明](spec/产品总说明.md):产品目的、范围、使用者和通用规则。
|
|
162
|
+
- [安装到项目](spec/功能_安装到项目.md):支持环境、安装行为、异常处理和公开发布要求。
|
|
163
|
+
- [代码架构设计](spec/代码架构设计.md):功能到代码模块、状态和外部依赖的对应关系。
|
|
164
|
+
- [实现设计文档](DESIGN.md):命令、数据模型、工作意图、阶段路径和门禁的实现形态。
|
|
165
|
+
- [产品事实与约束](CONTEXT.md):当前有效的术语、约束和设计决策。
|
|
166
|
+
- [需求交付追踪表](需求交付追踪表.md):每轮需求从设计到验收的完整追踪入口。
|
|
167
|
+
|
|
168
|
+
## 许可证
|
|
169
|
+
|
|
170
|
+
本项目使用 [MIT 许可证](LICENSE)。
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
[project]
|
|
2
|
+
name = "workflow-loop"
|
|
3
|
+
version = "0.1.0"
|
|
4
|
+
description = "为 AI 驱动的软件开发提供有状态、可验证、可回退的工作流管理。"
|
|
5
|
+
readme = "README.md"
|
|
6
|
+
requires-python = ">=3.11"
|
|
7
|
+
license = "MIT"
|
|
8
|
+
license-files = ["LICENSE"]
|
|
9
|
+
authors = [{ name = "yuzyf" }]
|
|
10
|
+
dependencies = []
|
|
11
|
+
|
|
12
|
+
[project.scripts]
|
|
13
|
+
workflow = "workflow_loop.cli:main"
|
|
14
|
+
|
|
15
|
+
[project.optional-dependencies]
|
|
16
|
+
dev = ["build>=1.2", "pytest>=7.0", "PyYAML>=6.0"]
|
|
17
|
+
|
|
18
|
+
[project.urls]
|
|
19
|
+
Homepage = "https://github.com/yuzyf/workflow_loop"
|
|
20
|
+
Repository = "https://github.com/yuzyf/workflow_loop"
|
|
21
|
+
|
|
22
|
+
[build-system]
|
|
23
|
+
requires = ["setuptools>=77.0.0", "wheel"]
|
|
24
|
+
build-backend = "setuptools.build_meta"
|
|
25
|
+
|
|
26
|
+
[tool.setuptools]
|
|
27
|
+
package-dir = {"" = "src"}
|
|
28
|
+
|
|
29
|
+
[tool.setuptools.packages.find]
|
|
30
|
+
where = ["src"]
|
|
31
|
+
|
|
32
|
+
[tool.setuptools.package-data]
|
|
33
|
+
workflow_loop = ["data/**/*"]
|
|
34
|
+
|
|
35
|
+
[tool.pytest.ini_options]
|
|
36
|
+
testpaths = ["tests"]
|
|
37
|
+
python_files = ["test_*.py"]
|
|
38
|
+
|
|
39
|
+
[dependency-groups]
|
|
40
|
+
dev = [
|
|
41
|
+
"pyyaml>=6.0",
|
|
42
|
+
]
|