diff --git a/AGENTS.md b/AGENTS.md index c08e2c7..13bfc7b 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -50,7 +50,7 @@ ## 2. 哪些改动需要工单 -项目治理模式记录在[项目档案](docs/00-project-profile.md)。内部、单人、低风险项目优先使用轻量模式;任务真实风险高于项目模式时,只升级该任务。 +项目治理模式记录在[项目档案](docs/00-project-profile.md)。使用 DevHarness 创建新项目时默认采用轻量模式;只有项目负责人明确选择标准或高风险模式并在项目档案记录理由时,才改变项目默认模式。未明确填写治理模式时按轻量模式执行并提示补写,不因此阻塞产品开发。DevHarness 上游模板自身继续采用标准模式。任务真实风险高于项目模式时,只升级该任务。 - 轻量模式:文案、注释、格式、局部样式或布局、预期行为明确的小 Bug,以及不改变接口、数据结构、权限和安全边界的单模块低风险调整可以直接实施。完整独立需求、新页面或跨模块功能,以及涉及 API、数据结构、权限、安全、迁移或范围不明确的变化必须建单。 - 标准模式:纯文档措辞、格式化、内部标识符改名和确定不改变行为的小整理可以直接实施;新功能、缺陷修复、重构及用户可感知的行为变化必须建单。 diff --git a/dev_scripts/harness.py b/dev_scripts/harness.py index 48692c0..08de193 100644 --- a/dev_scripts/harness.py +++ b/dev_scripts/harness.py @@ -362,6 +362,9 @@ def check_agent_efficiency_rules(errors: list[str], root: Path = ROOT) -> None: "文件解码和控制台输出分别处理", "不得默认使用 `-ExecutionPolicy Bypass`", "### 按治理模式选择最小设计证据", + "使用 DevHarness 创建新项目时默认采用轻量模式", + "未明确填写治理模式时按轻量模式执行", + "DevHarness 上游模板自身继续采用标准模式", "轻量模式的小 Bug、局部样式或布局", "明确为虚构的测试数据无需形式化脱敏", "用户可以使用中文、英文或合理的中英混合语言交流", diff --git a/docs/00-project-profile.md b/docs/00-project-profile.md index 01398ab..ff3c0ad 100644 --- a/docs/00-project-profile.md +++ b/docs/00-project-profile.md @@ -2,8 +2,8 @@ generated: true (请先修改 Gitea Wiki,禁止直接编辑本文件) wiki_page: Project-Profile wiki_url: https://git.ilapage.cn/OPC/dev_harness/wiki/Project-Profile.- -wiki_revision: 54598b0fed91a852385386bd6fd920245f5dc1dd -synchronized_at: 2026-09-02T07:17:36Z +wiki_revision: c509e5d74e0d0cb7be35698b809ecc73be3cb50c +synchronized_at: 2026-09-04T06:14:02Z # 项目档案 @@ -28,11 +28,11 @@ synchronized_at: 2026-09-02T07:17:36Z | 项目 | 当前值 | |---|---| | 当前治理模式 | 标准;DevHarness 模板自身的流程变更需要工单和验收 | -| 新项目建议 | 内部、单人、低风险项目优先选择轻量模式 | +| 新项目默认 | 使用 DevHarness 创建的新项目默认采用轻量模式;只有负责人明确选择并记录理由时才改为标准或高风险 | | 选择理由 | 模板维护会影响多个项目;使用模板的新项目应按自身风险裁剪 | | 升级规则 | 单个任务的真实风险高于项目默认模式时,仅该任务升级到更高模式 | -治理模式只裁剪工单、原型、测试和文档流程,不得取消凭据、真实个人数据、生产数据、不可逆操作和真实测试证据等安全底线。项目初始化时应把本节改成目标项目的真实选择和理由。 +DevHarness 上游模板自身继续采用标准模式。复制模板创建其他项目后,继承的“DevHarness / 标准”文字不代表目标项目已经选择标准模式;目标项目未明确填写治理模式时按轻量模式执行并提示补写,不因此阻塞产品开发。只有负责人明确选择标准或高风险并记录理由时才改变项目默认模式。治理模式只裁剪工单、原型、测试和文档流程,不得取消凭据、授权边界和真实测试证据。 ## DevHarness 来源与基线 diff --git a/docs/01-workflow.md b/docs/01-workflow.md index 618db9a..ca62c0f 100644 --- a/docs/01-workflow.md +++ b/docs/01-workflow.md @@ -2,8 +2,8 @@ generated: true (请先修改 Gitea Wiki,禁止直接编辑本文件) wiki_page: Development-Workflow wiki_url: https://git.ilapage.cn/OPC/dev_harness/wiki/Development-Workflow.- -wiki_revision: 352b54ce02e6ada143c956acee605f22d22ad517 -synchronized_at: 2026-09-04T02:57:40Z +wiki_revision: 0ed57c573d29064909095fbf8720629945c31592 +synchronized_at: 2026-09-04T06:12:17Z # 开发工作流 @@ -48,7 +48,7 @@ Gitea 暂时不可用时可以准备工单和 Wiki 草稿,但不得把本地 ## 按治理模式选择最小门禁 -项目在 Project-Profile 选择轻量、标准或高风险模式。内部、单人、低风险项目优先使用轻量模式;单个任务风险高于项目默认模式时,只升级该任务,不抬高全部日常工作。不得为了流程完整而增加没有实际作用的工单、原型、文档或测试。 +使用 DevHarness 创建新项目时默认采用轻量模式。只有项目负责人明确选择标准或高风险模式,并在 Project-Profile 记录理由时,才改变项目默认模式;未明确填写时按轻量模式执行并提示补写,不因此阻塞产品开发。DevHarness 上游模板自身继续采用标准模式。单个任务风险高于项目默认模式时,只升级该任务,不抬高全部日常工作。不得为了流程完整而增加没有实际作用的工单、原型、文档或测试。 ### 不可裁剪底线 diff --git a/docs/07-new-project-documentation-setup.md b/docs/07-new-project-documentation-setup.md index 0410487..1be4f33 100644 --- a/docs/07-new-project-documentation-setup.md +++ b/docs/07-new-project-documentation-setup.md @@ -2,8 +2,8 @@ generated: true (请先修改 Gitea Wiki,禁止直接编辑本文件) wiki_page: New-Project-Documentation-Setup wiki_url: https://git.ilapage.cn/OPC/dev_harness/wiki/New-Project-Documentation-Setup.- -wiki_revision: e35a6ef160d21ddfeb043860d85fc8074bcc26fa -synchronized_at: 2026-09-02T02:14:04Z +wiki_revision: 3d28f17a2861d3a59256d08f0efba307d441836e +synchronized_at: 2026-09-04T06:13:20Z # 新项目文档初始化 @@ -28,14 +28,17 @@ synchronized_at: 2026-09-02T02:14:04Z #### 选择治理模式 -在 Project-Profile 记录轻量、标准或高风险模式及选择理由: +使用 DevHarness 创建新项目时默认采用轻量模式,并在 Project-Profile 记录实际模式和理由: -- 内部、单人、低风险、没有真实个人/生产数据和不可逆操作的项目,优先选择轻量模式; -- 多人协作、对外交付、跨模块接口较多或需要稳定审计时选择标准模式; -- 涉及权限、安全、支付、真实个人/生产数据、迁移、并发、删除或不可逆操作时选择高风险模式; -- 不确定时先选择满足当前真实风险的最低模式;后续只在风险实际增加时升级,不为可能发生的情况预设额外门禁。 +- 目标项目尚未填写治理模式时按轻量模式执行并提示补写,不因此阻塞产品开发;从模板继承的“DevHarness / 标准”文字不代表目标项目已经选择标准模式; +- 轻量模式尤其适合内部、单人、低风险项目,但默认值不限制后续按真实风险升级; +- 只有项目负责人明确选择并记录理由时,才将项目默认值改为标准或高风险; +- 多人协作、对外交付、跨模块接口较多或需要稳定审计时,可以明确选择标准模式; +- 项目整体持续涉及权限、安全、支付、真实个人/生产数据、迁移、并发、删除或不可逆操作时,可以明确选择高风险模式; +- 单个任务风险高于项目默认模式时只升级该任务,不自动升级整个项目;不为可能发生的情况预设额外门禁; +- DevHarness 上游模板自身继续采用标准模式。 -治理模式只裁剪工单、原型、测试和文档流程,不覆盖安全底线。使用虚构手机号等测试数据时记录其为虚构数据即可,无需为了形式执行脱敏流程;来源不明或来自真实用户时必须按真实个人数据保护。 +治理模式只裁剪工单、原型、测试和文档流程,不覆盖凭据、授权边界和真实测试证据。使用虚构手机号等测试数据时记录其为虚构数据即可,无需为了形式执行脱敏流程;来源不明或来自真实用户时按已确认的数据处理规则执行。 #### 需求总览启用条件 @@ -129,7 +132,7 @@ synchronized_at: 2026-09-02T02:14:04Z 创建远端仓库并完成允许的初始引导提交,开启工单和 Wiki;必须先有远端仓库,才能填写该仓库的线上 Wiki。配置项目已有的 Gitea MCP 和安全凭据;优先使用 MCP,MCP 不可用或不支持所需写操作时才回退到 Gitea API,并在初始化工单记录原因。凭据只通过环境或 MCP 安全配置提供。 -引导提交后按已选治理模式判断是否需要工单:轻量模式的明确小 Bug、局部 UI 和单模块低风险调整可以直接实施;完整独立需求、新页面、跨模块功能和中高风险变化必须先有单元任务工单。开始产品代码前仍须通过第 8 步的线上 Wiki 初始化门禁。 +引导提交后按项目明确选择的治理模式判断是否需要工单;尚未选择时按轻量模式执行并提示补写,不因此阻塞产品开发。轻量模式的明确小 Bug、局部 UI 和单模块低风险调整可以直接实施;完整独立需求、新页面、跨模块功能和中高风险变化必须先有单元任务工单。开始产品代码前仍须通过第 8 步的线上 Wiki 初始化门禁。 ### 5. 修改镜像配置 diff --git a/tests/test_harness_docs.py b/tests/test_harness_docs.py index 494b561..b06854c 100644 --- a/tests/test_harness_docs.py +++ b/tests/test_harness_docs.py @@ -132,6 +132,8 @@ class CoreDocumentTests(unittest.TestCase): self.assertIn("## DevHarness 来源与基线", required) def test_lightweight_governance_keeps_only_real_safety_boundaries(self) -> None: + agents = (ROOT / "AGENTS.md").read_text(encoding="utf-8") + profile = (ROOT / "docs/00-project-profile.md").read_text(encoding="utf-8") workflow = (ROOT / "docs/01-workflow.md").read_text(encoding="utf-8") setup = (ROOT / "docs/07-new-project-documentation-setup.md").read_text( encoding="utf-8" @@ -147,6 +149,12 @@ class CoreDocumentTests(unittest.TestCase): self.assertIn("局部样式或布局", requirements) self.assertIn("可直接实施", requirements) self.assertIn("真实个人/生产数据", setup) + for text in (agents, profile, workflow, setup): + self.assertIn("默认采用轻量模式", text) + self.assertIn("DevHarness 上游模板自身继续采用标准模式", text) + for text in (agents, workflow, setup): + self.assertIn("不因此阻塞产品开发", text) + self.assertIn("单个任务风险高于项目默认模式时只升级该任务", setup) def test_explicit_human_authorization_does_not_repeat_confirmation(self) -> None: agents = (ROOT / "AGENTS.md").read_text(encoding="utf-8")