Compare commits
2
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f652cbd46c | ||
|
|
a59e3b5374 |
@@ -5,6 +5,12 @@
|
|||||||
- 所属 MVP / 版本:#
|
- 所属 MVP / 版本:#
|
||||||
- 阶段:
|
- 阶段:
|
||||||
|
|
||||||
|
## 依赖与并行
|
||||||
|
|
||||||
|
- 前置工单:无 / #编号
|
||||||
|
- 是否允许与前置工单并行:是 / 否
|
||||||
|
- 原因:
|
||||||
|
|
||||||
## 要解决什么
|
## 要解决什么
|
||||||
|
|
||||||
<!-- 描述现状和目标。缺陷需要写清复现步骤、实际结果和期望结果。 -->
|
<!-- 描述现状和目标。缺陷需要写清复现步骤、实际结果和期望结果。 -->
|
||||||
|
|||||||
@@ -33,10 +33,11 @@
|
|||||||
2. 给出目标、非目标、方案、影响范围、风险、回退方式、验证方法和文档影响。
|
2. 给出目标、非目标、方案、影响范围、风险、回退方式、验证方法和文档影响。
|
||||||
3. 方案没有得到用户明确确认前,只做只读诊断和方案整理,不实施正式代码。
|
3. 方案没有得到用户明确确认前,只做只读诊断和方案整理,不实施正式代码。
|
||||||
4. 方案确认后,先建立单元任务工单,再修改代码。
|
4. 方案确认后,先建立单元任务工单,再修改代码。
|
||||||
5. 开始实施前检查分支和工作区,明确哪些现有改动不属于本任务。
|
5. 建立新工单不要求其他工单已经完成;开始实施前检查工单声明的前置工单。真实依赖未满足时保持“待实施”,允许并行时必须写明原因。
|
||||||
6. 严格按工单范围实现;新发现的问题先记录,不顺手混入当前任务。
|
6. 开始实施前检查分支和工作区,明确哪些现有改动不属于本任务。
|
||||||
7. 执行与风险相称的测试,把关键结果和未验证部分更新到工单。
|
7. 严格按工单范围实现;新发现的问题先记录,不顺手混入当前任务。
|
||||||
8. 长期文档必须先修改 Wiki、读取确认,再运行 `python dev_scripts/sync_wiki_docs.py` 导出本地镜像;不得直接编辑 `docs/` 后反向覆盖 Wiki。
|
8. 执行与风险相称的测试,把关键结果和未验证部分更新到工单。实施过程中出现计划外、当前无法解除的问题时才标记“阻塞”。
|
||||||
|
9. 长期文档必须先修改 Wiki、读取确认,再运行 `python dev_scripts/sync_wiki_docs.py` 导出本地镜像;不得直接编辑 `docs/` 后反向覆盖 Wiki。
|
||||||
|
|
||||||
Gitea 不可用时,输出完整工单草稿并说明阻塞。未经用户明确授权,不得默认绕过建单。
|
Gitea 不可用时,输出完整工单草稿并说明阻塞。未经用户明确授权,不得默认绕过建单。
|
||||||
|
|
||||||
|
|||||||
@@ -161,6 +161,10 @@ def check_task_template(errors: list[str], root: Path = ROOT) -> None:
|
|||||||
return
|
return
|
||||||
content = path.read_text(encoding="utf-8")
|
content = path.read_text(encoding="utf-8")
|
||||||
required = (
|
required = (
|
||||||
|
"## 依赖与并行",
|
||||||
|
"- 前置工单:无 / #编号",
|
||||||
|
"- 是否允许与前置工单并行:是 / 否",
|
||||||
|
"- 原因:",
|
||||||
"## 文档影响",
|
"## 文档影响",
|
||||||
"- [ ] 不影响长期文档,原因:",
|
"- [ ] 不影响长期文档,原因:",
|
||||||
"- [ ] 更新架构与代码地图",
|
"- [ ] 更新架构与代码地图",
|
||||||
|
|||||||
+19
-2
@@ -2,8 +2,8 @@
|
|||||||
generated: true (请先修改 Gitea Wiki,禁止直接编辑本文件)
|
generated: true (请先修改 Gitea Wiki,禁止直接编辑本文件)
|
||||||
wiki_page: Development-Workflow
|
wiki_page: Development-Workflow
|
||||||
wiki_url: http://ilaer.eicp.net:8418/opc/dev_harness/wiki/Development-Workflow.-
|
wiki_url: http://ilaer.eicp.net:8418/opc/dev_harness/wiki/Development-Workflow.-
|
||||||
wiki_revision: d00ceed847becc95439296f618bd8a461c0a4c0f
|
wiki_revision: dcef8c85c6c99d4ff2ce4678736092479b505794
|
||||||
synchronized_at: 2026-08-08T01:36:38Z
|
synchronized_at: 2026-08-09T16:28:05Z
|
||||||
<!-- gitea-wiki-mirror:end -->
|
<!-- gitea-wiki-mirror:end -->
|
||||||
|
|
||||||
# 开发工作流
|
# 开发工作流
|
||||||
@@ -37,6 +37,23 @@ synchronized_at: 2026-08-08T01:36:38Z
|
|||||||
|
|
||||||
每个单元任务都应目标单一,能够独立测试、提交和回退。
|
每个单元任务都应目标单一,能够独立测试、提交和回退。
|
||||||
|
|
||||||
|
#### 依赖与并行
|
||||||
|
|
||||||
|
建立新工单不要求其他工单已经完成,也不按工单编号限制实施顺序。每个单元任务必须声明:
|
||||||
|
|
||||||
|
- 前置工单,没有时填写“无”;
|
||||||
|
- 是否允许与未完成的前置工单并行;
|
||||||
|
- 判断可以或不可以并行的原因。
|
||||||
|
|
||||||
|
开始修改前,Agent 检查工单声明的前置工单:
|
||||||
|
|
||||||
|
- 没有前置工单,或前置工单已经完成,可以进入“进行中”;
|
||||||
|
- 前置工单未完成且存在实际依赖时,不得开始实施,工单保持“待实施”;
|
||||||
|
- 与前置工单没有实施冲突、允许并行时,可以进入“进行中”,但必须在工单写明原因;
|
||||||
|
- 已经进入实施后出现计划外、当前无法解除的问题,才使用“阻塞”。
|
||||||
|
|
||||||
|
依赖不改变单元任务边界。依赖满足后,该任务仍须拥有独立的范围、提交、测试和回退方式。
|
||||||
|
|
||||||
### 3. 实施
|
### 3. 实施
|
||||||
|
|
||||||
Agent 检查分支和工作区,只修改工单范围内的文件。发现新问题时先记录到工单;如果不影响当前验收,则另建工单,不扩大当前任务。
|
Agent 检查分支和工作区,只修改工单范围内的文件。发现新问题时先记录到工单;如果不影响当前验收,则另建工单,不扩大当前任务。
|
||||||
|
|||||||
@@ -2,8 +2,8 @@
|
|||||||
generated: true (请先修改 Gitea Wiki,禁止直接编辑本文件)
|
generated: true (请先修改 Gitea Wiki,禁止直接编辑本文件)
|
||||||
wiki_page: Business-Rules-and-Glossary
|
wiki_page: Business-Rules-and-Glossary
|
||||||
wiki_url: http://ilaer.eicp.net:8418/opc/dev_harness/wiki/Business-Rules-and-Glossary.-
|
wiki_url: http://ilaer.eicp.net:8418/opc/dev_harness/wiki/Business-Rules-and-Glossary.-
|
||||||
wiki_revision: 7534fd60157096dab2c6f06214acfff84d1a5370
|
wiki_revision: 82bb04c1bf6a703568218664a652b5192055f072
|
||||||
synchronized_at: 2026-08-08T00:58:06Z
|
synchronized_at: 2026-08-09T16:28:11Z
|
||||||
<!-- gitea-wiki-mirror:end -->
|
<!-- gitea-wiki-mirror:end -->
|
||||||
|
|
||||||
# 业务规则与术语
|
# 业务规则与术语
|
||||||
@@ -30,9 +30,9 @@ synchronized_at: 2026-08-08T00:58:06Z
|
|||||||
| 状态 | 含义 | 可以进入下一状态的条件 |
|
| 状态 | 含义 | 可以进入下一状态的条件 |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
| 待确认 | 目标或方案仍需用户选择 | 用户明确确认方案 |
|
| 待确认 | 目标或方案仍需用户选择 | 用户明确确认方案 |
|
||||||
| 待实施 | 方案已确认,尚未修改 | 工作区和范围检查完成 |
|
| 待实施 | 方案已确认但尚未修改,或真实前置依赖尚未满足 | 前置依赖已满足或明确允许并行,且工作区和范围检查完成 |
|
||||||
| 进行中 | 正在实现、测试或同步文档 | 验收标准逐项检查完成 |
|
| 进行中 | 正在实现、测试或同步文档 | 验收标准逐项检查完成 |
|
||||||
| 阻塞 | 满足规则定义的持续阻塞条件 | 阻塞解除并更新工单 |
|
| 阻塞 | 实施过程中出现计划外、当前无法解除的问题 | 阻塞解除并更新工单 |
|
||||||
| 待验收 | 代码、测试、归档和证据已完成 | 用户明确验收 |
|
| 待验收 | 代码、测试、归档和证据已完成 | 用户明确验收 |
|
||||||
| 已完成 | 用户已验收并完成父任务同步 | 无 |
|
| 已完成 | 用户已验收并完成父任务同步 | 无 |
|
||||||
|
|
||||||
@@ -40,6 +40,8 @@ synchronized_at: 2026-08-08T00:58:06Z
|
|||||||
|
|
||||||
- 没有确认方案和单元任务工单,不修改产品行为。
|
- 没有确认方案和单元任务工单,不修改产品行为。
|
||||||
- 一个单元任务只解决一个可独立验证和回退的问题。
|
- 一个单元任务只解决一个可独立验证和回退的问题。
|
||||||
|
- 建立后续工单不要求已有工单全部完成;实施前必须检查工单声明的前置依赖。
|
||||||
|
- 前置工单未完成且存在实际依赖时保持“待实施”;允许并行时必须写明原因。
|
||||||
- 需求、接口、数据、安全边界或验收标准变化时先更新工单。
|
- 需求、接口、数据、安全边界或验收标准变化时先更新工单。
|
||||||
- 长期文档必须先修改 Wiki,再导出本地镜像。
|
- 长期文档必须先修改 Wiki,再导出本地镜像。
|
||||||
- 测试结果必须真实;未执行的验证必须明确记录。
|
- 测试结果必须真实;未执行的验证必须明确记录。
|
||||||
|
|||||||
@@ -0,0 +1,83 @@
|
|||||||
|
<!-- gitea-wiki-mirror:start -->
|
||||||
|
generated: true (请先修改 Gitea Wiki,禁止直接编辑本文件)
|
||||||
|
wiki_page: Task-8-最小工单依赖规则
|
||||||
|
wiki_url: http://ilaer.eicp.net:8418/opc/dev_harness/wiki/Task-8-%E6%9C%80%E5%B0%8F%E5%B7%A5%E5%8D%95%E4%BE%9D%E8%B5%96%E8%A7%84%E5%88%99.-
|
||||||
|
wiki_revision: b043f3438b0e49c6fcea18cdfe0596df73196971
|
||||||
|
synchronized_at: 2026-08-09T16:33:55Z
|
||||||
|
<!-- gitea-wiki-mirror:end -->
|
||||||
|
|
||||||
|
# 8 最小工单依赖规则
|
||||||
|
|
||||||
|
- 类型:开发流程优化
|
||||||
|
- 所属 Epic:无
|
||||||
|
- 所属 MVP / 版本:无
|
||||||
|
- 状态:待验收
|
||||||
|
- 日期:2026-08-10
|
||||||
|
- Gitea 工单:http://ilaer.eicp.net:8418/opc/dev_harness/issues/8
|
||||||
|
- Wiki 页面:Task-8-最小工单依赖规则
|
||||||
|
- Wiki revision:见本地镜像头
|
||||||
|
|
||||||
|
## 背景与目标
|
||||||
|
|
||||||
|
项目已经允许建立后续工单,并定义了“待实施”和“阻塞”,但单元任务模板没有前置依赖和并行信息,Agent 实施前也没有明确的依赖检查步骤。
|
||||||
|
|
||||||
|
本任务采用最小实现:工单显式声明依赖,Agent 实施前人工检查,Harness 只检查模板字段存在,不把 DevHarness 扩展为自动项目管理系统。
|
||||||
|
|
||||||
|
## 最终方案
|
||||||
|
|
||||||
|
- 单元任务模板增加“依赖与并行”章节,记录前置工单、是否允许并行和原因。
|
||||||
|
- 建立新工单不要求其他工单完成,也不按工单编号限制实施顺序。
|
||||||
|
- Agent 开始修改前检查已声明的前置工单。
|
||||||
|
- 没有前置工单、前置已完成或明确允许并行时,可以进入“进行中”。
|
||||||
|
- 前置未完成且存在真实依赖时不得实施,工单保持“待实施”。
|
||||||
|
- 允许并行必须说明不存在实施冲突的原因。
|
||||||
|
- 已进入实施后遇到计划外、当前无法解除的问题时才使用“阻塞”。
|
||||||
|
- 依赖满足后,任务仍须拥有独立范围、提交、测试和回退方式。
|
||||||
|
- Harness 检查模板章节及三个字段,并增加缺失字段测试。
|
||||||
|
- 没有增加自动依赖图、联网查询、自动状态门禁或新脚本。
|
||||||
|
|
||||||
|
实施结果与已确认方案一致。
|
||||||
|
|
||||||
|
## 修改文件
|
||||||
|
|
||||||
|
- `AGENTS.md`:增加实施前依赖检查及状态边界。
|
||||||
|
- `.gitea/issue_template/task.md`:增加“依赖与并行”字段。
|
||||||
|
- `dev_scripts/check_harness.py`:检查模板依赖字段。
|
||||||
|
- `tests/test_harness_docs.py`:验证缺失依赖字段会被报告。
|
||||||
|
- `docs/01-workflow.md`:Development-Workflow Wiki 的只读镜像。
|
||||||
|
- `docs/03-business-rules-and-glossary.md`:Business-Rules-and-Glossary Wiki 的只读镜像。
|
||||||
|
- `wiki-docs.json`:登记本任务 Wiki 归档镜像。
|
||||||
|
- `docs/task/8-最小工单依赖规则.md`:本页的自动导出镜像。
|
||||||
|
|
||||||
|
## 验收结果
|
||||||
|
|
||||||
|
| 验收标准 | 结果 |
|
||||||
|
|---|---|
|
||||||
|
| 模板包含依赖与并行三个字段 | 通过 |
|
||||||
|
| 建单不受其他未完成工单限制 | 通过 |
|
||||||
|
| 实施前检查声明的前置工单 | 通过 |
|
||||||
|
| 待实施和阻塞边界明确 | 通过 |
|
||||||
|
| 允许并行必须写明原因 | 通过 |
|
||||||
|
| Harness 检测字段缺失 | 通过 |
|
||||||
|
| 未增加自动门禁或新脚本 | 通过 |
|
||||||
|
| Wiki 先更新、确认再导出 | 通过 |
|
||||||
|
| 测试和严格检查 | 通过 |
|
||||||
|
|
||||||
|
## 测试
|
||||||
|
|
||||||
|
- 执行命令:`python -m unittest discover -s tests -v`
|
||||||
|
- 结果:20/20 通过。
|
||||||
|
- 执行命令:`python dev_scripts/check_harness.py --strict`
|
||||||
|
- 结果:通过。
|
||||||
|
- 执行命令:`python dev_scripts/sync_wiki_docs.py --check`
|
||||||
|
- 结果:归档前 17/17 映射一致;归档后重新检查 18/18。
|
||||||
|
- 执行命令:`python -m compileall -q dev_scripts tests`
|
||||||
|
- 结果:通过。
|
||||||
|
- 执行命令:`git diff --check`
|
||||||
|
- 结果:通过。
|
||||||
|
- **未验证部分**:没有自动查询 Gitea 前置工单状态;这是已确认的非目标,依赖由 Agent 在实施前人工检查。
|
||||||
|
|
||||||
|
## 相关提交
|
||||||
|
|
||||||
|
- `a59e3b5` `feat: 增加最小工单依赖规则 (#8)`
|
||||||
|
- 归档提交哈希在提交后回写 Gitea 工单,避免归档自引用。
|
||||||
@@ -57,6 +57,24 @@ class TaskTemplateTests(unittest.TestCase):
|
|||||||
check_task_template(errors)
|
check_task_template(errors)
|
||||||
self.assertEqual(errors, [])
|
self.assertEqual(errors, [])
|
||||||
|
|
||||||
|
def test_task_template_requires_dependency_fields(self) -> None:
|
||||||
|
with tempfile.TemporaryDirectory() as directory:
|
||||||
|
root = Path(directory)
|
||||||
|
template = root / ".gitea" / "issue_template" / "task.md"
|
||||||
|
template.parent.mkdir(parents=True)
|
||||||
|
template.write_text(
|
||||||
|
"## 文档影响\n"
|
||||||
|
"- [ ] 不影响长期文档,原因:\n"
|
||||||
|
"- [ ] 更新架构与代码地图\n"
|
||||||
|
"- [ ] 更新业务规则与术语\n"
|
||||||
|
"- [ ] 更新常见修改或故障排查\n",
|
||||||
|
encoding="utf-8",
|
||||||
|
)
|
||||||
|
errors: list[str] = []
|
||||||
|
check_task_template(errors, root)
|
||||||
|
self.assertIn("单元任务模板缺少:## 依赖与并行", errors)
|
||||||
|
self.assertIn("单元任务模板缺少:- 前置工单:无 / #编号", errors)
|
||||||
|
|
||||||
|
|
||||||
class AgentRuleTests(unittest.TestCase):
|
class AgentRuleTests(unittest.TestCase):
|
||||||
def test_agent_efficiency_sections_are_required(self) -> None:
|
def test_agent_efficiency_sections_are_required(self) -> None:
|
||||||
|
|||||||
@@ -71,6 +71,10 @@
|
|||||||
{
|
{
|
||||||
"page": "Task-7-ClaudeCode模型路由",
|
"page": "Task-7-ClaudeCode模型路由",
|
||||||
"path": "docs/task/7-ClaudeCode模型路由.md"
|
"path": "docs/task/7-ClaudeCode模型路由.md"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": "Task-8-最小工单依赖规则",
|
||||||
|
"path": "docs/task/8-最小工单依赖规则.md"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user