docs: 明确人工授权后的执行边界 (#32)
This commit is contained in:
@@ -30,23 +30,33 @@
|
||||
|
||||
## 1. 永久规则
|
||||
|
||||
- 不把密码、令牌、Cookie、私钥、真实个人数据或生产数据写入代码、日志、工单、Wiki 和文档。明确为虚构的测试数据无需形式化脱敏,但必须能与真实数据区分;来源不明时按真实数据处理。
|
||||
- 不执行未经用户明确授权的发布、付款、删除数据、破坏性迁移或其他不可逆操作。
|
||||
- 密码、令牌、Cookie 和私钥只从环境或安全配置读取,不得写入代码、Git、日志、工单、Wiki 和文档;人工授权不改变此边界。
|
||||
- 任务确有需要且得到人工明确授权时,可以在授权范围内处理真实个人数据或生产数据;只使用完成任务所需的最少数据,不把无关副本扩散到代码、Git、Wiki、工单、测试数据和日志,证据优先使用脱敏摘要。明确为虚构的测试数据无需形式化脱敏,但必须能与真实数据区分;来源不明时按真实数据处理。
|
||||
- 未经人工明确授权,不执行发布、付款、删除数据、破坏性迁移或其他不可逆操作;已经获得有效授权时按下节执行。
|
||||
- 保留用户已有和任务无关的工作区改动,不擅自重置、覆盖或混入提交。
|
||||
- 发现需求与安全规则、已确认方案或现有数据冲突时,先停止实施并说明影响。
|
||||
- 测试结果必须真实;未执行或无法覆盖的验证必须明确记录。
|
||||
|
||||
项目专用红线写入本文件的“项目专用规则”或对应子目录的 `AGENTS.md`,不要散落在聊天记录中。
|
||||
|
||||
### 明确授权后的执行
|
||||
|
||||
- 当前聊天中用户给出的明确指令,或 Gitea 工单中能够归属于有权人工的明确授权,可以作为执行依据;不要求把聊天授权重复复制到工单后再确认。
|
||||
- 授权必须能识别操作、对象和范围。Agent 自动生成的工单、草稿、摘要或对用户意图的转述,不能单独构成人工授权。
|
||||
- 获得有效授权后,只核对准确目标、授权范围和当前状态等最小必要前提,然后执行;不得仅因操作不可逆而重复询问或拒绝。
|
||||
- 授权只适用于明确范围,不自动覆盖相邻对象或后续任务。环境、对象、范围或影响发生实质变化时,原授权不再覆盖变化部分,应重新确认。
|
||||
- 平台自身强制的审批、安全策略或权限限制继续有效;不能把项目内授权解释为绕过平台限制。
|
||||
- 执行完成后报告实际结果、影响范围以及是否可以恢复;失败时报告已完成部分和当前状态。
|
||||
|
||||
## 2. 哪些改动需要工单
|
||||
|
||||
项目治理模式记录在[项目档案](docs/00-project-profile.md)。内部、单人、低风险项目优先使用轻量模式;任务真实风险高于项目模式时,只升级该任务。
|
||||
|
||||
- 轻量模式:文案、注释、格式、局部样式或布局、预期行为明确的小 Bug,以及不改变接口、数据结构、权限和安全边界的单模块低风险调整可以直接实施。完整独立需求、新页面或跨模块功能,以及涉及 API、数据结构、权限、安全、迁移或范围不明确的变化必须建单。
|
||||
- 标准模式:纯文档措辞、格式化、内部标识符改名和确定不改变行为的小整理可以直接实施;新功能、缺陷修复、重构及用户可感知的行为变化必须建单。
|
||||
- 高风险模式:只读诊断和不改变行为的文档整理可直接进行;正式行为变化必须建单并等待人工确认。
|
||||
- 高风险模式:只读诊断和不改变行为的文档整理可直接进行;正式行为变化必须建单,尚未取得有效人工授权时等待确认,已经取得时不重复确认。
|
||||
|
||||
直接实施项无需为了留痕补建工单;只做必要的工作区与安全检查、受影响范围的最小测试并报告结果。涉及权限、安全、支付、真实个人或生产数据、迁移、并发、删除和不可逆操作时始终按高风险处理。无法判断时先澄清或建单,不按代码行数判断风险。
|
||||
直接实施项无需为了留痕补建工单;只做必要的工作区与安全检查、受影响范围的最小测试并报告结果。涉及权限、安全、支付、真实个人或生产数据、迁移、并发、删除和不可逆操作时始终按高风险处理;已有有效人工授权时不重复索要确认。无法判断时先澄清或建单,不按代码行数判断风险。
|
||||
|
||||
## 3. 需求到实施
|
||||
|
||||
@@ -87,7 +97,7 @@
|
||||
- 轻量模式的小 Bug、局部样式或布局、复用现有规范的组件调整无需完整原型;一句话、现有界面或标注截图足以确认时停止增加设计材料。
|
||||
- 完整独立需求、新页面、重大交互或导航变化需要工单;只有存在明显交互不确定性、用户明确要求,或返工成本显著时,才制作 Quant-UX 或其他可审阅原型。
|
||||
- 标准模式的新页面、独立用户功能和重大交互使用可审阅原型;小范围 UI 使用最低成本的文字、截图或低保真证据。
|
||||
- 高风险任务按影响补充技术设计、数据和权限边界、回退方案及人工确认;非 UI 任务不制作无意义的 UI 原型。
|
||||
- 高风险任务按影响补充技术设计、数据和权限边界、回退方案;尚未取得有效人工授权时等待确认,已有授权时不得重复确认。非 UI 任务不制作无意义的 UI 原型。
|
||||
- 上述完整原型形成待审核版本后,默认直接通过 Quant-UX 或其他设计工具的线上链接审核,不要求每次导出本地 HTML。工单必须记录可访问链接、版本/revision 或确认日期、审核版本识别方式、确认人、确认时间和覆盖范围;线上链接无法访问或无法区分版本时停止审核,等待用户确认等效方案。
|
||||
- 只有用户明确要求 `导出原型 #N`、`导出全部原型`,或项目专用规则明确要求离线交付时,才导出到 `prototypes/<工单号>/<版本>/index.html`。已确认的本地快照不得原位覆盖;版本目录内资源使用相对路径,导出后检查入口、主要交互和资源完整性,但不自动提交。
|
||||
- 后端、接口、数据处理和定时任务不强制 UI 原型;仅在存在设计选择或中高风险时确认必要的架构、API、数据、状态或流程设计。恢复既有确认行为的 Bug 可以复用原设计、截图、复现步骤或已有验收证据。
|
||||
@@ -120,7 +130,7 @@
|
||||
- 创建单元任务工单时,记录原始需求的来源、提出时间,以及能表达用户目的、场景和限制的少量关键原话或脱敏摘要;不得臆造用户原话。
|
||||
- 工单中的目标、非目标、已确认方案、验收标准和文档影响构成确认后的正式任务需求。
|
||||
- 影响范围、接口、数据、风险或验收的需求变化必须记录日期、内容、原因和用户确认;会改变已确认结果时先更新工单并等待再次确认。
|
||||
- 不复制完整聊天,不保存 Agent 内部推理,不写入密码、令牌、个人数据或生产数据;包含敏感信息的原话必须删除敏感部分或改写为脱敏摘要。
|
||||
- 不复制完整聊天,不保存 Agent 内部推理,不写入密码、令牌、Cookie 或私钥;任务需要处理真实个人或生产数据时只记录必要的脱敏摘要,不复制原始数据。
|
||||
- 长期有效的产品需求、业务规则和系统边界进入对应 Wiki 主题页并导出核心 `docs/`;单次任务的完成结果和验收保留在工单正文与评论。只有用户明确要求专项快照或项目专用规则要求时才创建 Wiki 任务快照并按需导出 `docs/task/`。Gitea 工单全文不导出到仓库。
|
||||
|
||||
详细记录边界见 [开发工作流](docs/01-workflow.md) 与 [业务规则和术语](docs/03-business-rules-and-glossary.md)。
|
||||
@@ -142,7 +152,7 @@
|
||||
- 一次执行后先处理首个可定位、可行动的真实错误,不同时猜测并修改多个可能原因。
|
||||
- 采用“执行 → 查看错误 → 最小修复 → 从失败点继续或按需重跑”的闭环。
|
||||
- 不在真实证据出现前堆叠与已知风险无关的预防性检查。
|
||||
- 涉及凭据、权限、安全、数据、迁移、并发、删除、发布或不可逆操作时,必须先完成相应前置检查,不得通过试错获取风险反馈。
|
||||
- 涉及凭据、权限、安全、数据、迁移、并发、删除、发布或不可逆操作时,必须先完成相应最小前置检查;已有有效人工授权时不得增加重复确认,不得通过试错获取风险反馈。
|
||||
|
||||
#### 复用已验证事实
|
||||
|
||||
@@ -215,7 +225,7 @@ MVP 内所有单元任务通过后才能做 MVP 集成验收;MVP 通过后才
|
||||
### 修改风险
|
||||
|
||||
- 低风险修改可由初级程序员在 Agent 协助下处理;接口、配置、依赖、跨模块逻辑和数据结构由 Agent 实现并验证。
|
||||
- 权限、安全、并发、迁移、支付、删除数据和不可逆操作属于高风险;高风险修改必须停止,由 Agent 分析并等待人工确认。
|
||||
- 权限、安全、并发、迁移、支付、删除数据和不可逆操作属于高风险;未取得有效人工授权时必须停止,由 Agent 分析并等待确认,已经取得时完成最小必要核对后执行。
|
||||
- 风险按影响范围判断,不按代码行数判断;示例见 [常见修改指南](docs/05-common-changes.md)。
|
||||
|
||||
### 文档影响
|
||||
|
||||
@@ -335,7 +335,11 @@ def check_agent_efficiency_rules(errors: list[str], root: Path = ROOT) -> None:
|
||||
"#### 复用已验证事实",
|
||||
"#### 明确停止条件",
|
||||
"需要工单时,单元任务是正式实施单位",
|
||||
"高风险修改必须停止",
|
||||
"### 明确授权后的执行",
|
||||
"不能单独构成人工授权",
|
||||
"不得仅因操作不可逆而重复询问或拒绝",
|
||||
"平台自身强制的审批、安全策略或权限限制继续有效",
|
||||
"未取得有效人工授权时必须停止",
|
||||
"用户没有明确验收通过前不得关闭",
|
||||
"只有长期事实变化时才修改 Wiki",
|
||||
"需要工单的任务以 Gitea 工单作为需求、变化、实现、测试、提交和验收的事实来源",
|
||||
|
||||
+15
-5
@@ -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: 3f420edaa937aaef3dbfe31b756ab6459ca5ce81
|
||||
synchronized_at: 2026-09-02T07:09:09Z
|
||||
wiki_revision: 352b54ce02e6ada143c956acee605f22d22ad517
|
||||
synchronized_at: 2026-09-04T02:57:40Z
|
||||
<!-- gitea-wiki-mirror:end -->
|
||||
|
||||
# 开发工作流
|
||||
@@ -54,11 +54,21 @@ Gitea 暂时不可用时可以准备工单和 Wiki 草稿,但不得把本地
|
||||
|
||||
任何治理模式都必须遵守:
|
||||
|
||||
- 不把密码、令牌、Cookie、私钥、真实个人数据或生产数据写入代码、日志、工单、Wiki 和文档;
|
||||
- 密码、令牌、Cookie 和私钥只从环境或安全配置读取,不得写入代码、Git、日志、工单、Wiki 和文档;人工授权不改变此边界;
|
||||
- 任务确有需要且得到人工明确授权时,可以在授权范围内处理真实个人数据或生产数据;只使用完成任务所需的最少数据,不把无关副本扩散到代码、Git、Wiki、工单、测试数据和日志,证据优先使用脱敏摘要;
|
||||
- 手机号等明确为虚构的测试数据无需形式化脱敏,但必须能与真实用户数据区分;来源不明时按真实个人数据处理;
|
||||
- 发布、删除数据、破坏性迁移和其他不可逆操作必须得到明确授权;
|
||||
- 未经人工明确授权,不执行发布、付款、删除数据、破坏性迁移或其他不可逆操作;授权有效时按下一节执行;
|
||||
- 测试结果必须真实,未执行或无法覆盖的验证必须说明;
|
||||
- 任务涉及权限、安全、支付、真实个人/生产数据、迁移、并发、删除或不可逆操作时,按高风险处理并等待人工确认。
|
||||
- 任务涉及权限、安全、支付、真实个人/生产数据、迁移、并发、删除或不可逆操作时按高风险处理;尚未获得有效授权时等待人工确认,已经获得时不重复确认。
|
||||
|
||||
### 明确授权后的执行
|
||||
|
||||
- 当前聊天中用户给出的明确指令,或 Gitea 工单中能够归属于有权人工的明确授权,可以作为执行依据;不要求把聊天授权重复复制到工单后再确认。
|
||||
- 授权必须能识别操作、对象和范围。Agent 自动生成的工单、草稿、摘要或对用户意图的转述,不能单独构成人工授权。
|
||||
- 获得有效授权后,Agent 只核对准确目标、授权范围和当前状态等最小必要前提,然后执行;不得仅因操作不可逆而重复询问或拒绝。
|
||||
- 授权只适用于明确范围,不自动覆盖相邻对象或后续任务。环境、对象、范围或影响发生实质变化时,原授权不再覆盖变化部分,应重新确认。
|
||||
- 平台自身强制的审批、安全策略或权限限制继续有效;不能把项目内授权解释为绕过平台限制。
|
||||
- 执行完成后报告实际结果、影响范围以及是否可以恢复;失败时报告已完成部分和当前状态。
|
||||
|
||||
### 先判断是否需要工单
|
||||
|
||||
|
||||
@@ -148,6 +148,20 @@ class CoreDocumentTests(unittest.TestCase):
|
||||
self.assertIn("可直接实施", requirements)
|
||||
self.assertIn("真实个人/生产数据", setup)
|
||||
|
||||
def test_explicit_human_authorization_does_not_repeat_confirmation(self) -> None:
|
||||
agents = (ROOT / "AGENTS.md").read_text(encoding="utf-8")
|
||||
workflow = (ROOT / "docs/01-workflow.md").read_text(encoding="utf-8")
|
||||
for text in (agents, workflow):
|
||||
self.assertIn("明确授权后的执行", text)
|
||||
self.assertIn("当前聊天", text)
|
||||
self.assertIn("Gitea 工单", text)
|
||||
self.assertIn("不能单独构成人工授权", text)
|
||||
self.assertIn("不得仅因操作不可逆而重复询问或拒绝", text)
|
||||
self.assertIn("平台自身强制的审批", text)
|
||||
|
||||
self.assertIn("可以在授权范围内处理真实个人数据或生产数据", agents)
|
||||
self.assertIn("密码、令牌、Cookie 和私钥只从环境或安全配置读取", agents)
|
||||
|
||||
def test_new_project_setup_requires_baseline_selection(self) -> None:
|
||||
required = CORE_DOCUMENT_REQUIREMENTS[
|
||||
"docs/07-new-project-documentation-setup.md"
|
||||
|
||||
Reference in New Issue
Block a user