workflow-loop 0.2.0__tar.gz → 0.3.1__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.
Files changed (111) hide show
  1. {workflow_loop-0.2.0/src/workflow_loop.egg-info → workflow_loop-0.3.1}/PKG-INFO +29 -7
  2. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/README.md +27 -6
  3. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/pyproject.toml +2 -2
  4. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/src/workflow_loop/__init__.py +2 -2
  5. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/src/workflow_loop/acceptance_records.py +4 -5
  6. workflow_loop-0.3.1/src/workflow_loop/artifact_validation.py +2528 -0
  7. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/src/workflow_loop/cli.py +1384 -213
  8. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/src/workflow_loop/data/Standardized_Repository/acceptance/acceptance_plan.md +13 -5
  9. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/src/workflow_loop/data/Standardized_Repository/code_design/project_design_init.md +34 -4
  10. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/src/workflow_loop/data/Standardized_Repository/global/workflow_lifecycle.md +16 -0
  11. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/src/workflow_loop/data/Standardized_Repository/impl/code_implementation.md +7 -10
  12. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/src/workflow_loop/data/Standardized_Repository/impl/impl.md +18 -16
  13. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/src/workflow_loop/data/Standardized_Repository/qa/test.md +11 -4
  14. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/src/workflow_loop/data/Standardized_Repository/qa/test_code.md +12 -4
  15. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/src/workflow_loop/data/Standardized_Repository/qa/test_code_implementation.md +3 -2
  16. workflow_loop-0.3.1/src/workflow_loop/data/Standardized_Repository/qa/test_plan.md +81 -0
  17. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/src/workflow_loop/data/Standardized_Repository/spec/spec.md +14 -2
  18. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/src/workflow_loop/data/Template_Repository/acceptance/acceptance_plan.md +18 -9
  19. workflow_loop-0.3.1/src/workflow_loop/data/Template_Repository/code_design/project_design_init_evidence.md +72 -0
  20. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/src/workflow_loop/data/Template_Repository/impl/impl.md +18 -14
  21. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/src/workflow_loop/data/Template_Repository/qa/test.md +12 -4
  22. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/src/workflow_loop/data/Template_Repository/qa/test_plan.md +16 -15
  23. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/src/workflow_loop/data/Template_Repository/spec/spec.md +9 -5
  24. workflow_loop-0.3.1/src/workflow_loop/diagnostics.py +458 -0
  25. workflow_loop-0.3.1/src/workflow_loop/markdown_links.py +595 -0
  26. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/src/workflow_loop/path_composer.py +8 -8
  27. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/src/workflow_loop/role_doc.py +4 -3
  28. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/src/workflow_loop/rollback.py +392 -26
  29. workflow_loop-0.3.1/src/workflow_loop/snapshots.py +207 -0
  30. workflow_loop-0.3.1/src/workflow_loop/stages/stages.py +1439 -0
  31. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/src/workflow_loop/state.py +87 -0
  32. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/src/workflow_loop/test_execution.py +354 -78
  33. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/src/workflow_loop/test_mapping.py +375 -42
  34. workflow_loop-0.3.1/src/workflow_loop/test_report.py +371 -0
  35. workflow_loop-0.3.1/src/workflow_loop/topic_relations.py +302 -0
  36. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/src/workflow_loop/traceability.py +53 -21
  37. workflow_loop-0.3.1/src/workflow_loop/verification.py +1796 -0
  38. {workflow_loop-0.2.0 → workflow_loop-0.3.1/src/workflow_loop.egg-info}/PKG-INFO +29 -7
  39. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/src/workflow_loop.egg-info/SOURCES.txt +13 -1
  40. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/src/workflow_loop.egg-info/requires.txt +1 -0
  41. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/tests/test_acceptance_records.py +58 -4
  42. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/tests/test_architecture_validation.py +93 -1
  43. workflow_loop-0.3.1/tests/test_commands.py +978 -0
  44. workflow_loop-0.3.1/tests/test_current_workflow_contracts.py +636 -0
  45. workflow_loop-0.3.1/tests/test_diagnostics.py +216 -0
  46. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/tests/test_light_task.py +4 -4
  47. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/tests/test_maintenance.py +19 -14
  48. workflow_loop-0.3.1/tests/test_markdown_links.py +245 -0
  49. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/tests/test_path_composer.py +5 -5
  50. workflow_loop-0.3.1/tests/test_project_design_init.py +201 -0
  51. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/tests/test_public_project.py +5 -3
  52. workflow_loop-0.3.1/tests/test_release_script.py +256 -0
  53. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/tests/test_release_workflow.py +18 -15
  54. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/tests/test_rollback.py +219 -9
  55. workflow_loop-0.3.1/tests/test_snapshots.py +108 -0
  56. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/tests/test_stages.py +217 -19
  57. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/tests/test_state.py +97 -3
  58. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/tests/test_test_execution.py +254 -38
  59. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/tests/test_test_mapping.py +157 -21
  60. workflow_loop-0.3.1/tests/test_test_report.py +255 -0
  61. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/tests/test_topic_relations.py +82 -1
  62. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/tests/test_traceability.py +137 -12
  63. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/tests/test_verification.py +420 -2
  64. workflow_loop-0.3.1/tests/test_workflow_acceptance.py +284 -0
  65. workflow_loop-0.2.0/src/workflow_loop/artifact_validation.py +0 -1738
  66. workflow_loop-0.2.0/src/workflow_loop/data/Standardized_Repository/qa/test_plan.md +0 -160
  67. workflow_loop-0.2.0/src/workflow_loop/data/Template_Repository/code_design/project_design_init_evidence.md +0 -39
  68. workflow_loop-0.2.0/src/workflow_loop/stages/stages.py +0 -1191
  69. workflow_loop-0.2.0/src/workflow_loop/topic_relations.py +0 -202
  70. workflow_loop-0.2.0/src/workflow_loop/verification.py +0 -971
  71. workflow_loop-0.2.0/tests/test_commands.py +0 -391
  72. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/LICENSE +0 -0
  73. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/setup.cfg +0 -0
  74. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/src/workflow_loop/artifact_paths.py +0 -0
  75. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/src/workflow_loop/bug_record.py +0 -0
  76. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/src/workflow_loop/data/Standardized_Repository/acceptance/acceptance.md +0 -0
  77. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/src/workflow_loop/data/Standardized_Repository/code_design/code_design.md +0 -0
  78. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/src/workflow_loop/data/Standardized_Repository/code_design/revise_code_design.md +0 -0
  79. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/src/workflow_loop/data/Standardized_Repository/code_design/update_code_design.md +0 -0
  80. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/src/workflow_loop/data/Standardized_Repository/global/document_writing.md +0 -0
  81. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/src/workflow_loop/data/Standardized_Repository/reproduce/reproduce.md +0 -0
  82. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/src/workflow_loop/data/Standardized_Repository/spike/spike.md +0 -0
  83. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/src/workflow_loop/data/Template_Repository/acceptance/acceptance_result.md +0 -0
  84. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/src/workflow_loop/data/Template_Repository/code_design/code_design.md +0 -0
  85. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/src/workflow_loop/data/Template_Repository/reproduce/reproduce.md +0 -0
  86. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/src/workflow_loop/data/Template_Repository/spike/spike.md +0 -0
  87. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/src/workflow_loop/installer.py +0 -0
  88. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/src/workflow_loop/journal.py +0 -0
  89. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/src/workflow_loop/process_runner.py +0 -0
  90. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/src/workflow_loop/project.py +0 -0
  91. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/src/workflow_loop/spike_validation.py +0 -0
  92. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/src/workflow_loop/stage_materials.py +0 -0
  93. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/src/workflow_loop/stages/__init__.py +0 -0
  94. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/src/workflow_loop/stages/base.py +0 -0
  95. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/src/workflow_loop/test_entry.py +0 -0
  96. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/src/workflow_loop/test_runner.py +0 -0
  97. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/src/workflow_loop/topic.py +0 -0
  98. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/src/workflow_loop.egg-info/dependency_links.txt +0 -0
  99. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/src/workflow_loop.egg-info/entry_points.txt +0 -0
  100. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/src/workflow_loop.egg-info/top_level.txt +0 -0
  101. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/tests/test_artifact_paths.py +0 -0
  102. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/tests/test_bug_record.py +0 -0
  103. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/tests/test_bug_validation.py +0 -0
  104. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/tests/test_installer.py +0 -0
  105. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/tests/test_maintenance_scripts.py +0 -0
  106. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/tests/test_process_runner.py +0 -0
  107. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/tests/test_project.py +0 -0
  108. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/tests/test_spike_validation.py +0 -0
  109. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/tests/test_stage_materials.py +0 -0
  110. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/tests/test_test_entry.py +0 -0
  111. {workflow_loop-0.2.0 → workflow_loop-0.3.1}/tests/test_test_runner.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: workflow-loop
3
- Version: 0.2.0
3
+ Version: 0.3.1
4
4
  Summary: 为 AI 驱动的软件开发提供有状态、可验证、可回退的工作流管理。
5
5
  Author: yuzyf
6
6
  License-Expression: MIT
@@ -9,6 +9,7 @@ Project-URL: Repository, https://github.com/yuzyf/workflow_loop
9
9
  Requires-Python: >=3.11
10
10
  Description-Content-Type: text/markdown
11
11
  License-File: LICENSE
12
+ Requires-Dist: markdown-it-py>=4.0
12
13
  Requires-Dist: packaging>=24.0
13
14
  Provides-Extra: dev
14
15
  Requires-Dist: build>=1.2; extra == "dev"
@@ -89,29 +90,29 @@ flowchart TD
89
90
  - 安装时能够访问 GitHub 和 PyPI(Python 公共软件包仓库)。
90
91
  - 执行安装命令前,先进入要由 Workflow Loop 管理的项目根目录。
91
92
 
92
- ## 安装 0.2.0
93
+ ## 安装 0.3.1
93
94
 
94
95
  安装器先进行只读检查并列出项目侧和电脑侧可能发生的全部持久修改。用户确认一次后,安装器才安装或复用全局 `workflow` 命令,并把智能体契约、产物模板和工作规范写入当前项目;用户取消或安装失败时不会留下只完成一部分的安装。
95
96
 
96
97
  ### macOS
97
98
 
98
99
  ```bash
99
- curl -fsSL https://github.com/yuzyf/workflow_loop/releases/download/v0.2.0/install.sh | bash
100
+ curl -fsSL https://github.com/yuzyf/workflow_loop/releases/download/v0.3.1/install.sh | bash
100
101
  ```
101
102
 
102
103
  ### Linux
103
104
 
104
105
  ```bash
105
- curl -fsSL https://github.com/yuzyf/workflow_loop/releases/download/v0.2.0/install.sh | bash
106
+ curl -fsSL https://github.com/yuzyf/workflow_loop/releases/download/v0.3.1/install.sh | bash
106
107
  ```
107
108
 
108
109
  ### 原生 Windows
109
110
 
110
111
  ```powershell
111
- powershell -NoProfile -ExecutionPolicy Bypass -Command "irm https://github.com/yuzyf/workflow_loop/releases/download/v0.2.0/install.ps1 | iex"
112
+ powershell -NoProfile -ExecutionPolicy Bypass -Command "irm https://github.com/yuzyf/workflow_loop/releases/download/v0.3.1/install.ps1 | iex"
112
113
  ```
113
114
 
114
- 安装命令固定读取 `v0.2.0` 正式发布中的脚本;不会跟随内容可能变化的 `latest`(最新版本)地址。
115
+ 安装命令固定读取 `v0.3.1` 正式发布中的脚本;不会跟随内容可能变化的 `latest`(最新版本)地址。
115
116
 
116
117
  ## 更新与卸载
117
118
 
@@ -119,7 +120,7 @@ powershell -NoProfile -ExecutionPolicy Bypass -Command "irm https://github.com/y
119
120
 
120
121
  ```bash
121
122
  workflow update
122
- workflow update --version 0.2.0
123
+ workflow update --version 0.3.1
123
124
  ```
124
125
 
125
126
  更新按需补齐电脑全局命令和当前项目,只直接覆盖项目根 `AGENTS.md`、`.workflow_loop/Template_Repository/`、`.workflow_loop/Standardized_Repository/`,以及 `.workflow_loop/project.json` 中的安装版本字段。更新不创建备份,不回滚已经完成的步骤;当前轮次状态、历史、回退资料、业务代码和正式产物保持不变。失败后重新执行同一命令即可继续补齐。
@@ -220,12 +221,32 @@ uv run python -m build
220
221
 
221
222
  `dev`(开发附加依赖)包含 `pytest`(Python 测试工具)、PyYAML(YAML 配置解析库)和 `build`(Python 分发包构建工具)。
222
223
 
224
+ ## 发布正式版本
225
+
226
+ 项目维护者确认当前仓库内容可以直接发布后,在仓库根目录执行下面的命令,并把 `0.3.1` 替换成要发布的新版本号:
227
+
228
+ ```bash
229
+ uv run python scripts/release.py 0.3.1
230
+ ```
231
+
232
+ 运行这条命令本身就表示维护者接受当前仓库状态并承担跳过本地发布检查的风险。脚本不会再次确认,也不会在本地运行测试、构建或远程版本查询。它依次执行:
233
+
234
+ 1. 更新源码、README、维护脚本和自动发布配置中的当前版本身份,并运行 `uv lock` 更新依赖锁定结果。
235
+ 2. 运行 `git add -A`,把当前全部未忽略的新增、修改和删除纳入发布提交。
236
+ 3. 创建说明为 `release: prepare workflow-loop <新版本号>` 的发布提交。
237
+ 4. 把当前提交推送到远程 `main`(默认分支)。
238
+ 5. 创建带说明的 `v<新版本号>` 标签。
239
+ 6. 推送该标签,触发现有 GitHub Actions(GitHub 自动任务)完成测试、构建和公开发布。
240
+
241
+ 任一步失败时,脚本会显示失败步骤和退出码并立即停止。它不会强推、自动重试或回滚已经完成的文件修改、提交、分支推送和标签操作。标签推送成功只表示远程发布流程已经触发;是否最终发布成功,以 GitHub Actions 的运行结果为准。
242
+
223
243
  ## 仓库结构
224
244
 
225
245
  ```text
226
246
  workflow_loop/
227
247
  ├── src/workflow_loop/ Python 产品代码和随包分发的模板、规范
228
248
  ├── tests/ 自动化测试
249
+ ├── scripts/release.py 维护者直接发布当前仓库的脚本
229
250
  ├── .workflow_loop/ 本仓库自己的工作流状态、模板和规范
230
251
  ├── spec/ 产品设计和代码架构设计
231
252
  ├── acceptance/ 验收计划与验收结果
@@ -247,6 +268,7 @@ workflow_loop/
247
268
  - [安装到项目](spec/功能_安装到项目.md):支持环境、安装行为、异常处理和公开发布要求。
248
269
  - [更新已安装项目](spec/功能_更新已安装项目.md):目标版本、覆盖范围、保留范围和失败重试规则。
249
270
  - [卸载 Workflow Loop](spec/功能_卸载_Workflow_Loop.md):项目强制卸载和电脑全局卸载的独立边界。
271
+ - [发布正式版本](spec/功能_发布正式版本.md):人工发布命令、版本更新范围、执行顺序和失败边界。
250
272
  - [处理无需开发任务](spec/功能_处理无需开发任务.md):简单流程适用边界、逐项确认、完成和异常处理规则。
251
273
  - [代码架构设计](spec/代码架构设计.md):功能到代码模块、状态和外部依赖的对应关系。
252
274
  - [实现设计文档](DESIGN.md):命令、数据模型、工作意图、阶段路径和门禁的实现形态。
@@ -71,29 +71,29 @@ flowchart TD
71
71
  - 安装时能够访问 GitHub 和 PyPI(Python 公共软件包仓库)。
72
72
  - 执行安装命令前,先进入要由 Workflow Loop 管理的项目根目录。
73
73
 
74
- ## 安装 0.2.0
74
+ ## 安装 0.3.1
75
75
 
76
76
  安装器先进行只读检查并列出项目侧和电脑侧可能发生的全部持久修改。用户确认一次后,安装器才安装或复用全局 `workflow` 命令,并把智能体契约、产物模板和工作规范写入当前项目;用户取消或安装失败时不会留下只完成一部分的安装。
77
77
 
78
78
  ### macOS
79
79
 
80
80
  ```bash
81
- curl -fsSL https://github.com/yuzyf/workflow_loop/releases/download/v0.2.0/install.sh | bash
81
+ curl -fsSL https://github.com/yuzyf/workflow_loop/releases/download/v0.3.1/install.sh | bash
82
82
  ```
83
83
 
84
84
  ### Linux
85
85
 
86
86
  ```bash
87
- curl -fsSL https://github.com/yuzyf/workflow_loop/releases/download/v0.2.0/install.sh | bash
87
+ curl -fsSL https://github.com/yuzyf/workflow_loop/releases/download/v0.3.1/install.sh | bash
88
88
  ```
89
89
 
90
90
  ### 原生 Windows
91
91
 
92
92
  ```powershell
93
- powershell -NoProfile -ExecutionPolicy Bypass -Command "irm https://github.com/yuzyf/workflow_loop/releases/download/v0.2.0/install.ps1 | iex"
93
+ powershell -NoProfile -ExecutionPolicy Bypass -Command "irm https://github.com/yuzyf/workflow_loop/releases/download/v0.3.1/install.ps1 | iex"
94
94
  ```
95
95
 
96
- 安装命令固定读取 `v0.2.0` 正式发布中的脚本;不会跟随内容可能变化的 `latest`(最新版本)地址。
96
+ 安装命令固定读取 `v0.3.1` 正式发布中的脚本;不会跟随内容可能变化的 `latest`(最新版本)地址。
97
97
 
98
98
  ## 更新与卸载
99
99
 
@@ -101,7 +101,7 @@ powershell -NoProfile -ExecutionPolicy Bypass -Command "irm https://github.com/y
101
101
 
102
102
  ```bash
103
103
  workflow update
104
- workflow update --version 0.2.0
104
+ workflow update --version 0.3.1
105
105
  ```
106
106
 
107
107
  更新按需补齐电脑全局命令和当前项目,只直接覆盖项目根 `AGENTS.md`、`.workflow_loop/Template_Repository/`、`.workflow_loop/Standardized_Repository/`,以及 `.workflow_loop/project.json` 中的安装版本字段。更新不创建备份,不回滚已经完成的步骤;当前轮次状态、历史、回退资料、业务代码和正式产物保持不变。失败后重新执行同一命令即可继续补齐。
@@ -202,12 +202,32 @@ uv run python -m build
202
202
 
203
203
  `dev`(开发附加依赖)包含 `pytest`(Python 测试工具)、PyYAML(YAML 配置解析库)和 `build`(Python 分发包构建工具)。
204
204
 
205
+ ## 发布正式版本
206
+
207
+ 项目维护者确认当前仓库内容可以直接发布后,在仓库根目录执行下面的命令,并把 `0.3.1` 替换成要发布的新版本号:
208
+
209
+ ```bash
210
+ uv run python scripts/release.py 0.3.1
211
+ ```
212
+
213
+ 运行这条命令本身就表示维护者接受当前仓库状态并承担跳过本地发布检查的风险。脚本不会再次确认,也不会在本地运行测试、构建或远程版本查询。它依次执行:
214
+
215
+ 1. 更新源码、README、维护脚本和自动发布配置中的当前版本身份,并运行 `uv lock` 更新依赖锁定结果。
216
+ 2. 运行 `git add -A`,把当前全部未忽略的新增、修改和删除纳入发布提交。
217
+ 3. 创建说明为 `release: prepare workflow-loop <新版本号>` 的发布提交。
218
+ 4. 把当前提交推送到远程 `main`(默认分支)。
219
+ 5. 创建带说明的 `v<新版本号>` 标签。
220
+ 6. 推送该标签,触发现有 GitHub Actions(GitHub 自动任务)完成测试、构建和公开发布。
221
+
222
+ 任一步失败时,脚本会显示失败步骤和退出码并立即停止。它不会强推、自动重试或回滚已经完成的文件修改、提交、分支推送和标签操作。标签推送成功只表示远程发布流程已经触发;是否最终发布成功,以 GitHub Actions 的运行结果为准。
223
+
205
224
  ## 仓库结构
206
225
 
207
226
  ```text
208
227
  workflow_loop/
209
228
  ├── src/workflow_loop/ Python 产品代码和随包分发的模板、规范
210
229
  ├── tests/ 自动化测试
230
+ ├── scripts/release.py 维护者直接发布当前仓库的脚本
211
231
  ├── .workflow_loop/ 本仓库自己的工作流状态、模板和规范
212
232
  ├── spec/ 产品设计和代码架构设计
213
233
  ├── acceptance/ 验收计划与验收结果
@@ -229,6 +249,7 @@ workflow_loop/
229
249
  - [安装到项目](spec/功能_安装到项目.md):支持环境、安装行为、异常处理和公开发布要求。
230
250
  - [更新已安装项目](spec/功能_更新已安装项目.md):目标版本、覆盖范围、保留范围和失败重试规则。
231
251
  - [卸载 Workflow Loop](spec/功能_卸载_Workflow_Loop.md):项目强制卸载和电脑全局卸载的独立边界。
252
+ - [发布正式版本](spec/功能_发布正式版本.md):人工发布命令、版本更新范围、执行顺序和失败边界。
232
253
  - [处理无需开发任务](spec/功能_处理无需开发任务.md):简单流程适用边界、逐项确认、完成和异常处理规则。
233
254
  - [代码架构设计](spec/代码架构设计.md):功能到代码模块、状态和外部依赖的对应关系。
234
255
  - [实现设计文档](DESIGN.md):命令、数据模型、工作意图、阶段路径和门禁的实现形态。
@@ -1,13 +1,13 @@
1
1
  [project]
2
2
  name = "workflow-loop"
3
- version = "0.2.0"
3
+ version = "0.3.1"
4
4
  description = "为 AI 驱动的软件开发提供有状态、可验证、可回退的工作流管理。"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.11"
7
7
  license = "MIT"
8
8
  license-files = ["LICENSE"]
9
9
  authors = [{ name = "yuzyf" }]
10
- dependencies = ["packaging>=24.0"]
10
+ dependencies = ["markdown-it-py>=4.0", "packaging>=24.0"]
11
11
 
12
12
  [project.scripts]
13
13
  workflow = "workflow_loop.cli:main"
@@ -1,6 +1,6 @@
1
1
  # 包版本号,用于 pip/uv 安装时版本匹配
2
- __version__ = "0.2.0"
2
+ __version__ = "0.3.1"
3
3
  # 产品身份标识:workflow --version 输出、安装脚本身份核对和安装事务校验共用同一组常量
4
- # 本次发布版本为 0.2.0;后续发布使用尚未被 PyPI 占用的新版本号
4
+ # 本次发布版本为 0.3.1;后续发布使用尚未被 PyPI 占用的新版本号
5
5
  PRODUCT_NAME = "workflow-loop"
6
6
  PRODUCT_IDENTITY = f"{PRODUCT_NAME} {__version__}"
@@ -87,8 +87,8 @@ def record_is_current(
87
87
  task = tasks.get(test_id)
88
88
  if (
89
89
  task is None
90
- or task.current_record is None
91
- or task.current_record.status != "passed"
90
+ or not state_mod.execution_task_has_current_success(task)
91
+ or not task.current_record
92
92
  or not task.current_record.record_id
93
93
  ):
94
94
  return False
@@ -113,11 +113,10 @@ def _automated_items_are_current(
113
113
  record_ids: list[str] = []
114
114
  for test_id in test_ids:
115
115
  task = tasks.get(test_id)
116
- if task is None or task.status != "passed" or task.current_record is None:
116
+ if task is None or not state_mod.execution_task_has_current_success(task):
117
117
  return False, f"{topic} / {test_id} 没有当前有效的通过记录", []
118
118
  record = task.current_record
119
- if record.status != "passed" or record.exit_code != 0:
120
- return False, f"{topic} / {test_id} 当前测试记录不是通过状态", []
119
+ assert record is not None
121
120
  if not record.record_id:
122
121
  return False, f"{topic} / {test_id} 的执行记录缺少机器记录编号,必须重新执行", []
123
122
  record_ids.append(record.record_id)