msdevflow 0.7.8 → 0.8.0
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.
- package/LICENSE +21 -0
- package/README.md +12 -5
- package/lib/bootstrap.js +4 -2
- package/package.json +2 -1
- package/skill/msd/README.md +13 -8
- package/skill/msd/SKILL.md +11 -7
- package/skill/msd/references/code-review.md +85 -30
- package/skill/msd/references/command-capabilities.md +12 -4
- package/skill/msd/references/create-issue.md +52 -10
- package/skill/msd/references/pr-and-ci.md +19 -4
- package/skill/msd/references/recovery.md +7 -7
- package/skill/msd/references/state-and-safety.md +15 -9
- package/skill/msd/scripts/gitcode_review.py +1653 -0
|
@@ -6,6 +6,12 @@
|
|
|
6
6
|
|
|
7
7
|
至少需要目标 canonical repository 和待提交问题的自然语言描述。目标仓库可由用户明确给出,或按公共启动规则从当前工作区唯一识别;无法唯一确定时返回 `blocked: canonical-not-unique`。缺少问题描述时逐次只询问一个必要输入,不查询现有 Issue 或关联 PR。
|
|
8
8
|
|
|
9
|
+
本 action 是一次性 Issue 创建事务。最终预览得到用户明确确认前,禁止任何会改变远端状态的操作,包括 Issue/PR 创建、编辑、关闭、删除、评论、标签或里程碑写入;只允许 schema/help、dry-run、本地序列化和只读查询。`POST` 到 Issue 集合永远是真实创建,不得用测试标题、最小 payload、权限探测、编码探测、字段探测或“dry-run API”名义调用。
|
|
10
|
+
|
|
11
|
+
每个 action run 最多允许一次真实 Issue 创建请求,而且只能发送已确认预览中的完整 payload。发起请求前将本次 run 标记为 `create_attempted=true`;无论返回成功、400/403、超时、连接中断、进程失败、空响应还是结果无法解析,都不得重置该标记,也不得切换 CLI/API、修改标题/正文/类型/标签/里程碑后再次创建。创建尝试后只能按“回读、恢复与完成”执行有界只读查询和同一 Issue 回读;不能证明结果时返回 `blocked: create-result-uncertain`,不得重试。
|
|
12
|
+
|
|
13
|
+
预览确认只授权一次完全匹配的最终创建,不授权测试写入、替代 payload、关闭旧 Issue 或在本 action 内创建第二个 Issue。确认前若标题、类型、正文或元数据变化,必须重新生成完整预览并重新确认;创建成功后本 action 立即结束,不在本 action 内把 Issue 改成另一类型、关闭它或创建替代 Issue。
|
|
14
|
+
|
|
9
15
|
本 action 不执行重复或相似 Issue/PR 查找。只有创建命令超时、中断或结果不确定时,才允许为恢复本次写入而有界查询:限定当前账号、action 启动时间之后、目标仓库、标题和完整正文逐字一致;这不是产品查重,未找到唯一结果时停止,不直接重试。
|
|
10
16
|
|
|
11
17
|
## 模板发现
|
|
@@ -42,6 +48,15 @@ https://gitcode.com/Ascend/community/tree/master/.gitcode/.gitcode/ISSUE_TEMPLAT
|
|
|
42
48
|
|
|
43
49
|
回退必须保持类型一致,不因某个模板无效而改用另一类型,不跨目标仓库与 community 拼接字段。fallback 文件也必须从远端 `master` 读取并按相同规则验证;无匹配或无效时返回 `blocked: fallback-template-unavailable`。
|
|
44
50
|
|
|
51
|
+
## 里程碑选择
|
|
52
|
+
|
|
53
|
+
模板确定后、生成最终预览前,分页读取 canonical repository 的里程碑 JSON,并按权威 `state` 字段只保留开放里程碑。`milestone list` 没有服务端状态筛选时,按返回的分页元数据继续读取;没有分页元数据时,固定 `per-page` 并读取到结果少于该值或出现空页,再统一过滤,不能只检查第一页。
|
|
54
|
+
|
|
55
|
+
- 用户明确指定里程碑 number 或完整标题时,验证它属于当前 canonical 且仍为 open,然后固定其 number、标题、状态和截止日期;不存在、标题不唯一或已关闭时停止并说明冲突。
|
|
56
|
+
- 用户未指定时:没有开放里程碑则使用 `none` 并在预览中披露;恰好一个则自动选择;多个则展示每个候选的 number、标题、状态和截止日期,只询问一次当前要使用的里程碑,等待用户选择。
|
|
57
|
+
- 不得用列表顺序、最大 number、创建时间或最近截止日期猜测“最新”;不得创建、重开或编辑里程碑。
|
|
58
|
+
- 写入前重新读取选中里程碑;若已关闭、删除或关键字段变化,必须更新预览并重新确认。
|
|
59
|
+
|
|
45
60
|
## 字段生成
|
|
46
61
|
|
|
47
62
|
从用户自然语言描述填充所选模板:
|
|
@@ -49,7 +64,7 @@ https://gitcode.com/Ascend/community/tree/master/.gitcode/.gitcode/ISSUE_TEMPLAT
|
|
|
49
64
|
- YAML `markdown` 项只作为填写说明,不伪造为用户答案;`input`、`textarea`、`dropdown` 和 `checkboxes` 转为保持原顺序的 Markdown 字段。
|
|
50
65
|
- Markdown 模板保留原有标题、章节、提示和顺序,只替换明确的填写占位内容;不得删除仓库要求的声明或检查项。
|
|
51
66
|
- 模板顶层 `title` 只作为前缀或建议,最终标题必须完整、具体且由预览确认。
|
|
52
|
-
- 只使用模板声明且目标仓库可接受的 labels、assignees
|
|
67
|
+
- 只使用模板声明且目标仓库可接受的 labels、assignees 和其他元数据;不创建新标签、不擅自新增负责人。里程碑只按本文件的确定性选择规则设置,不创建或修改里程碑。无法安全应用必需元数据时进入 `blocked`。
|
|
53
68
|
- 不编造环境、复现步骤、日志、链接、截图、版本、影响范围或验收结果。自然语言中无法推出的必填字段一次只询问一个;选填字段无法推出时保留明确的“未提供”或按模板允许留空。
|
|
54
69
|
- 最终 Issue 正文末尾与主体间隔一个空行并恰好附加一次 `——msdevflow`。
|
|
55
70
|
|
|
@@ -57,6 +72,8 @@ https://gitcode.com/Ascend/community/tree/master/.gitcode/.gitcode/ISSUE_TEMPLAT
|
|
|
57
72
|
|
|
58
73
|
## 预览和确认
|
|
59
74
|
|
|
75
|
+
预览是唯一的远端写入闸门。展示预览前不得创建任何 Issue;预览确认后不得再做测试、权限、编码、字段或 API 形态探测,只能按确认内容执行一次真实创建。
|
|
76
|
+
|
|
60
77
|
写入前展示:
|
|
61
78
|
|
|
62
79
|
```text
|
|
@@ -68,28 +85,52 @@ Template source: repository | Ascend/community fallback
|
|
|
68
85
|
Template ref/path: <repository>@<ref>:<path>
|
|
69
86
|
Title: <exact title>
|
|
70
87
|
Body: <complete rendered body including one signature>
|
|
71
|
-
Labels/assignees
|
|
88
|
+
Labels/assignees: <exact values or none>
|
|
89
|
+
Milestone: <number + exact title + open + due date, or none>
|
|
90
|
+
Milestone selection: explicit | user-selected | sole open milestone | no open milestone
|
|
72
91
|
Duplicate search: not performed by design
|
|
73
92
|
```
|
|
74
93
|
|
|
75
|
-
默认 `guided` 模式必须获得针对该预览的明确确认。确认后标题、正文、模板、类型、目标或元数据任一变化都要重新预览并确认。`autonomous` 只有在授权明确绑定 canonical、Issue
|
|
94
|
+
默认 `guided` 模式必须获得针对该预览的明确确认。确认后标题、正文、模板、类型、目标或元数据任一变化都要重新预览并确认。`autonomous` 只有在授权明确绑定 canonical、Issue 类型、模板来源、创建目标和上述里程碑选择规则时才可省略普通写入确认;多个开放里程碑仍必须等待用户选择。范围变化、模板冲突、必填信息缺失或安全问题仍必须停止。
|
|
76
95
|
|
|
77
96
|
## 创建和 UTF-8
|
|
78
97
|
|
|
79
|
-
|
|
98
|
+
### 唯一支持的创建路径
|
|
99
|
+
|
|
100
|
+
本 Skill 固定使用 setup 已验收的官方 npm GitCode CLI typed command,不通过 Issue collection API 创建。能力验证只能使用 `schema`、`--help` 和 typed command 自带的 `--dry-run`;`api .../issues --method POST` 没有 dry-run 语义,禁止用于创建、试错或验证。
|
|
101
|
+
|
|
102
|
+
使用前只读探测:
|
|
80
103
|
|
|
81
104
|
```bash
|
|
105
|
+
<gitcode-command> schema "milestone list"
|
|
82
106
|
<gitcode-command> schema "issue create"
|
|
83
107
|
<gitcode-command> schema "issue view"
|
|
108
|
+
<gitcode-command> schema "issue edit"
|
|
84
109
|
```
|
|
85
110
|
|
|
86
|
-
|
|
111
|
+
将最终正文写入唯一的系统临时文件,编码固定为 UTF-8 无 BOM。官方 npm GitCode CLI 的 `issue create --title` 是本 Skill 已验收的中文标题通道;Windows `.cmd` wrapper 也直接使用 typed command,不得为中文标题切换到 API POST。预览确认后可以先用最终仓库、标题和正文文件执行一次本地 dry-run:
|
|
87
112
|
|
|
88
113
|
```text
|
|
89
|
-
<gitcode-command>
|
|
114
|
+
<gitcode-command> issue create -R <canonical> --title <exact-title> --body-file <utf8-body-file> --dry-run --json
|
|
90
115
|
```
|
|
91
116
|
|
|
92
|
-
|
|
117
|
+
dry-run 的输出不得包含新 Issue number/URL;否则视为能力异常并停止。真实创建固定只携带仓库、最终标题、最终正文文件和 JSON 输出,不在创建命令中传 label、assignee、milestone 或其他可选元数据:
|
|
118
|
+
|
|
119
|
+
```text
|
|
120
|
+
<gitcode-command> issue create -R <canonical> --title <exact-title> --body-file <utf8-body-file> --json
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
执行真实命令前设置 `create_attempted=true`。该命令是本次 run 唯一允许的创建请求;禁止使用 `test-*`、`*-check`、`permission-*`、最小正文或其他替代 payload 探测权限、编码、标签、里程碑或字段组合。认证和权限只能通过 `auth status`、schema、dry-run 判断;最终创建仍失败时返回 `blocked`,不得发测试 Issue 或改用另一创建通道。
|
|
124
|
+
|
|
125
|
+
创建成功并获得 Issue number 后,才可对同一个 Issue 应用预览确认过的元数据。里程碑固定使用:
|
|
126
|
+
|
|
127
|
+
```text
|
|
128
|
+
<gitcode-command> issue edit <issue-number> -R <canonical> --milestone <milestone-number> --json --yes
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
未选择里程碑时不执行该命令。模板声明的 label/assignee 只有在创建前只读证明目标仓库接受、`issue edit` schema 明确支持且预览已列出时才可原地应用;否则预览必须明确为 `none`,不得把未经确认或不存在的元数据塞入创建请求。平台自动附加的系统类型标签在回读中单独披露,不得误报为 Agent 请求的 label。
|
|
132
|
+
|
|
133
|
+
正文文件在 dry-run、唯一一次真实创建和必要回读完成后立即删除。typed command、UTF-8 文件输入或必要的同 Issue metadata edit 能力不足时返回 `blocked: bootstrap-required` 或 `blocked: utf8-safe-create-unavailable`;不得猜测 API 字段、发起 POST 实验或创建替代 Issue。
|
|
93
134
|
|
|
94
135
|
## 回读、恢复与完成
|
|
95
136
|
|
|
@@ -99,16 +140,17 @@ JSON 至少包含 `repo`、`title`、`body`,并按已验证 API 语义加入 l
|
|
|
99
140
|
- state 为 open;
|
|
100
141
|
- 标题逐字一致;
|
|
101
142
|
- 正文统一换行为 `\n` 后逐字一致,且尾签恰好一次;
|
|
102
|
-
- 预览中要求的 labels
|
|
143
|
+
- 预览中要求的 labels 和 assignees 已实际应用;
|
|
144
|
+
- 里程碑回读结果与预览中的 number 和标题精确一致,或预览明确为 `none` 且实际未关联。
|
|
103
145
|
|
|
104
|
-
创建结果不确定时只执行本文件定义的有界恢复查询;找到多个或无法证明唯一时返回 `blocked: create-result-uncertain
|
|
146
|
+
创建结果不确定时只执行本文件定义的有界恢复查询;找到多个或无法证明唯一时返回 `blocked: create-result-uncertain`。创建成功但正文、标题或里程碑不一致时,只有已验证 UTF-8 安全且支持目标字段的 `issue edit` 能力可原地修复;设置里程碑时使用同一 canonical 和已确认的 number,清空里程碑则必须先由当前 schema/help 或只读事实验证明确语义,不得猜测 `0` 的含义。无法安全修复时停止并报告 Issue URL,不得再创建一个 Issue。
|
|
105
147
|
|
|
106
148
|
只有完整回读通过才进入 `issue-created`:
|
|
107
149
|
|
|
108
150
|
```text
|
|
109
151
|
action: create-issue
|
|
110
152
|
Current state: issue-created | blocked
|
|
111
|
-
Evidence: <canonical>#<number>, template ref/path, exact readback
|
|
153
|
+
Evidence: <canonical>#<number>, template ref/path, milestone number/title or none, exact readback
|
|
112
154
|
Current head: na
|
|
113
155
|
Blocker: none | details
|
|
114
156
|
Suggested next action: issue | none
|
|
@@ -12,7 +12,8 @@
|
|
|
12
12
|
- 当前分支不是默认分支,且基于已确认的 canonical 基线;
|
|
13
13
|
- 任务实现与已确认范围一致;
|
|
14
14
|
- 适用本地门禁有实际通过证据;
|
|
15
|
-
- canonical、source、head、base 和 operation target
|
|
15
|
+
- canonical、source、head、base 和 operation target 可唯一确定;
|
|
16
|
+
- 已核验目标 Issue 的里程碑已从 canonical 权威 JSON 回读:有里程碑时固定其 number 和标题,无里程碑时明确记录 `none`。
|
|
16
17
|
|
|
17
18
|
前置条件缺失时返回 `blocked` 和建议的上游 `action=issue` 或 `action=develop`,不得自动补跑。为防止过期证据,提交前复验受影响的最小本地门禁属于 `pr` action。
|
|
18
19
|
|
|
@@ -49,7 +50,11 @@ git push -u <source-remote> HEAD:<branch>
|
|
|
49
50
|
## 未覆盖项
|
|
50
51
|
```
|
|
51
52
|
|
|
52
|
-
正文末尾按 [state-and-safety.md](state-and-safety.md) 恰好附加一次 `——msdevflow`。多行正文使用显式 UTF-8 文件;Windows PowerShell 5.1 使用 UTF-8 无 BOM,禁止把含中文正文裸管道给原生 CLI。非 ASCII 标题不得经 `.cmd` wrapper 的 `--title` 参数直接传递,改用同一 CLI 的 UTF-8 JSON 文件 API
|
|
53
|
+
正文末尾按 [state-and-safety.md](state-and-safety.md) 恰好附加一次 `——msdevflow`。多行正文使用显式 UTF-8 文件;Windows PowerShell 5.1 使用 UTF-8 无 BOM,禁止把含中文正文裸管道给原生 CLI。非 ASCII 标题不得经 `.cmd` wrapper 的 `--title` 参数直接传递,改用同一 CLI 的 UTF-8 JSON 文件 API 安全通道。
|
|
54
|
+
|
|
55
|
+
PR 里程碑严格继承已核验目标 Issue:Issue 有里程碑时,PR 必须关联同一 canonical 里程碑 number/title;Issue 没有里程碑时,PR 保持 `none`,不得另选所谓“最新”里程碑。若多个关联 Issue 的里程碑冲突,或用户要求的 PR 里程碑与目标 Issue 不同,返回 `blocked: milestone-conflict`,不得猜测或创建、编辑、重开里程碑。guided 预览必须展示 Issue、将设置的 PR 里程碑和必要的 `pr edit --milestone`;创建 PR 的确认同时覆盖该关联动作。
|
|
56
|
+
|
|
57
|
+
支持时先 dry-run,确认后创建普通 PR,不传 `--draft`:
|
|
53
58
|
|
|
54
59
|
```bash
|
|
55
60
|
<gitcode-command> pr create -R <canonical> \
|
|
@@ -57,9 +62,18 @@ git push -u <source-remote> HEAD:<branch>
|
|
|
57
62
|
--title "<title>" --body-file <body-file> --json
|
|
58
63
|
```
|
|
59
64
|
|
|
60
|
-
参数以 schema
|
|
65
|
+
参数以 schema 为准。`pr create` 当前不提供 milestone 参数时,创建并取得 PR number 后,先回读当前 PR 里程碑;目标 Issue 有里程碑且 PR 尚未关联时,使用已验收的 typed command 设置同一 number:
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
<gitcode-command> pr edit <pr-number> -R <canonical> \
|
|
69
|
+
--milestone <issue-milestone-number> --json
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
已经关联同一 number 时跳过编辑;关联了不同里程碑时必须展示当前值和目标 Issue 值,并在 guided 模式重新确认后才可覆盖。目标 Issue 为 `none` 但已有 PR 带里程碑时,只有当前 schema/help 明确提供并验证了清空语义才可在确认后清空,否则返回 `blocked: milestone-conflict`;不得猜测 `--milestone 0`。创建或编辑结果不确定时先回读同一 PR,不重复创建或盲目重试。
|
|
73
|
+
|
|
74
|
+
随后逐字回读标题和完整正文,验证末尾恰好存在一次尾签,再验证 canonical、source、head、base、Issue 关联、PR 为 open,以及 PR 里程碑的 number/title 与目标 Issue 精确一致;目标 Issue 为 `none` 时验证 PR 也未关联里程碑。标题或正文出现乱码、`?`、截断、尾签缺失、重复或其他不一致,或者里程碑关联失败时,阻断后续动作,优先原地修复同一 PR 并再次回读。
|
|
61
75
|
|
|
62
|
-
显式 `action=pr` 达到 `pr-open` 后立即停止:不得主动触发 CI、处理 CI、请求检视、处理 feedback 或 merge。平台自动启动的 CI
|
|
76
|
+
显式 `action=pr` 达到 `pr-open` 后立即停止:不得主动触发 CI、处理 CI、请求检视、处理 feedback 或 merge。平台自动启动的 CI 只作为已观察事实报告,不继续监控。完整作者 E2E 则由核心编排器在 `pr-open` 后无需用户确认直接进入 `ci` 阶段;这不改变独立 `pr` action 的边界。
|
|
63
77
|
|
|
64
78
|
### `pr` 输出
|
|
65
79
|
|
|
@@ -67,6 +81,7 @@ git push -u <source-remote> HEAD:<branch>
|
|
|
67
81
|
action: pr
|
|
68
82
|
PR: <canonical>#<number> open
|
|
69
83
|
Source/head/base: ...
|
|
84
|
+
Milestone: <number + exact title inherited from Issue, or none>
|
|
70
85
|
Commits: sha + summary
|
|
71
86
|
Local gates: passed + unrun
|
|
72
87
|
Current head: ...
|
|
@@ -9,28 +9,28 @@
|
|
|
9
9
|
## 恢复步骤
|
|
10
10
|
|
|
11
11
|
1. 读取本地工作树、分支、HEAD、remotes 和未推送 commits。
|
|
12
|
-
2. 回读 Issue、关联 PR、PR source/head/base、open/merged、comments、reviews 和 merge 状态。
|
|
12
|
+
2. 回读 Issue、Issue milestone、关联 PR、PR milestone、PR source/head/base、open/merged、comments、reviews 和 merge 状态。
|
|
13
13
|
3. 读取当前 head 的 CI,不复用旧 head 结果。
|
|
14
14
|
4. 根据 action 完成条件识别最后一个有证据的状态;不能只信先前摘要或旧 run 产物。
|
|
15
15
|
5. 验证本地分支与远端 source head 是否一致。
|
|
16
16
|
6. 显式 action 只判断自身前置和完成条件:前置缺失时 `blocked`,不得运行上游;已完成时报告证据并立即停止。
|
|
17
17
|
7. 核心 `msd` 启动的完整作者 E2E 从 Phase 0 重建仓库画像,再路由到下一未完成作者 action;不重复已完成的写操作。
|
|
18
18
|
8. `create-issue` 不执行产品查重;仅在本次创建结果不确定时按目标仓库、当前账号、启动时间、标题和完整正文做有界恢复,无法唯一证明时停止。`openlibing-auth` 的历史 profile 或旧认证摘要不证明当前授权有效;必须用本次固定 run 做真实只读请求。
|
|
19
|
-
9. `code-review` 不参与作者 E2E,也不从作者 feedback 状态恢复。恢复时重新确认 reviewer、author、PR 状态和当前 head;旧 `review_head_sha`
|
|
20
|
-
10. 当前 head 等于旧 `review_head_sha` 时,回读结构化 comments/discussions,并按 reviewer、head、path/position 和完整正文恢复已发布 finding
|
|
21
|
-
11.
|
|
19
|
+
9. `code-review` 不参与作者 E2E,也不从作者 feedback 状态恢复。恢复时重新确认 reviewer、author、PR 状态和当前 head;旧 `review_head_sha` 的分析、finding 或 `/lgtm` 不证明当前 head 已检视。
|
|
20
|
+
10. 当前 head 等于旧 `review_head_sha` 时,回读结构化 comments/discussions,并按 reviewer、head、path/position 和完整正文恢复已发布 finding;检视通过只回读同一 reviewer 正文恰好为 `/lgtm` 且可绑定当前 head 的评论,不查找检视摘要。
|
|
21
|
+
11. 当前 head 缺少可验证的精确 `/lgtm` 时不自动补发;重新确认完整覆盖、无有效未解决意见和 head 稳定,并再次取得针对当前 PR/head 的 `/lgtm` 确认。写结果不确定时按幂等键有界查询,不直接重试。
|
|
22
22
|
|
|
23
23
|
## 幂等检查
|
|
24
24
|
|
|
25
25
|
执行前检查:
|
|
26
26
|
|
|
27
|
-
- Issue create:不预查重;只在写结果不确定时执行 `create-issue`
|
|
27
|
+
- Issue create:不预查重;只在写结果不确定时执行 `create-issue` 的有界恢复,并回读本次预览的 milestone number/title 或 `none`,禁止盲目重试;
|
|
28
28
|
- assignee/comment:Issue 是否已有等价状态或带唯一尾签的等价评论;
|
|
29
|
-
- PR create:canonical + source + head + base 是否已有 open/merged PR,Agent
|
|
29
|
+
- PR create:canonical + source + head + base 是否已有 open/merged PR,Agent 创建或编辑的正文是否带唯一尾签,PR milestone 是否已与目标 Issue 的 number/title 一致;PR 已存在但里程碑未完成时只恢复同一 PR 的关联,不重复创建;
|
|
30
30
|
- CI trigger:同 PR + head SHA 是否已有有效运行;精确命令与带唯一尾签的独立说明评论分别检查;
|
|
31
31
|
- discussion reply:是否已有逐字一致且带唯一尾签的等价回复,是否存在乱码、`?` 或待修复文本;
|
|
32
32
|
- review finding:canonical + PR + `review_head_sha` + reviewer + path/position + 完整正文是否已有等价 discussion;
|
|
33
|
-
- review passed:canonical + PR + `review_head_sha` + reviewer
|
|
33
|
+
- review passed:canonical + PR + `review_head_sha` + reviewer 下,正文恰好为 `/lgtm` 的评论是否已回读并可由平台 head 关联或权威 PR 事件时间线绑定当前 head;不查找检视摘要,无法绑定 head 时不算完成;
|
|
34
34
|
- resolve:是否已 `resolved`;
|
|
35
35
|
- merge:PR 是否已 merged/closed,当前 head 和门禁是否变化。
|
|
36
36
|
|
|
@@ -19,11 +19,14 @@ pr_number: number-or-null
|
|
|
19
19
|
work_branch: branch-or-null
|
|
20
20
|
head_sha: sha-or-na
|
|
21
21
|
review_head_sha: sha-or-null
|
|
22
|
+
review_snapshot_dir: managed-path-or-null
|
|
23
|
+
review_write_receipt: managed-key-or-null
|
|
22
24
|
requested_action: discover | create-issue | issue | develop | pr | ci | openlibing-auth | feedback | code-review | merge | e2e
|
|
25
|
+
create_attempted: false | true
|
|
23
26
|
last_completed_state: state
|
|
24
27
|
```
|
|
25
28
|
|
|
26
|
-
这些字段来自远端和本地探测,不能靠猜。`run_id` 的 `<scope>` 使用 Issue、PR、action 或 `e2e` 的稳定小写标识;无对应事实的 source、Issue、PR、branch 或 head 字段保持 `null`/`na`。不要把 Token
|
|
29
|
+
这些字段来自远端和本地探测,不能靠猜。`run_id` 的 `<scope>` 使用 Issue、PR、action 或 `e2e` 的稳定小写标识;无对应事实的 source、Issue、PR、branch 或 head 字段保持 `null`/`na`。不要把 Token 或普通本地绝对路径写入状态记录;`review_snapshot_dir` 只保存 helper 返回的受管 snapshot 路径以便本次读取和清理,`review_write_receipt` 只引用 helper 的受管事务键,不保存正文或凭证。
|
|
27
30
|
|
|
28
31
|
## GitCode 远端文本 UTF-8 传输
|
|
29
32
|
|
|
@@ -75,7 +78,7 @@ $body | & "<gitcode-command>" ... --body-file -
|
|
|
75
78
|
4. 目标可编辑时,使用 UTF-8 文件安全通道原地修复同一 PR/评论/回复,再回读;禁止直接重复发布造成双评论。
|
|
76
79
|
5. 目标不可编辑时停止并报告 comment/discussion ID 和损坏范围,等待用户决定删除、人工修改或发布更正;不得把损坏文本当作有效证据继续推进。
|
|
77
80
|
|
|
78
|
-
严格 ASCII 机器协议 payload(如裸 `compile`、`/lgtm`、`/merge
|
|
81
|
+
严格 ASCII 机器协议 payload(如裸 `compile`、`/lgtm`、`/merge`)无需改写。除 `code-review` 的 `/lgtm` 按下述例外只发送精确 payload 外,其他机器协议所需的独立人类可读说明评论仍必须遵循本节。
|
|
79
82
|
|
|
80
83
|
## GitCode 远端文本尾签
|
|
81
84
|
|
|
@@ -90,8 +93,8 @@ Agent 创建或修改的 Issue/PR 正文,以及发布的 Issue 评论、PR 普
|
|
|
90
93
|
- 用户提供核心内容也不免除尾签:只要由 Agent 执行 GitCode 正文写入,就附加尾签;不追溯修改既有人工文本,只约束本次新建或本次明确编辑的内容。
|
|
91
94
|
- 同一正文只保留一个尾签。重试或更新前先比较去除唯一尾签后的正文语义,禁止重复追加;回读时按“写后校验与修复”逐字验证完整正文和尾签。
|
|
92
95
|
- PR 标题、Issue 标题、commit message、分支名、标签、assignee、resolve 状态等非正文元数据不追加尾签。
|
|
93
|
-
- 对必须精确匹配的机器人命令或机器协议 payload(如裸 `compile`、`/lgtm`、`/merge
|
|
94
|
-
- `code-review`
|
|
96
|
+
- 对必须精确匹配的机器人命令或机器协议 payload(如裸 `compile`、`/lgtm`、`/merge`),不得修改、包裹或同行追加尾签。除下一条定义的 `code-review` `/lgtm` 例外外,先按幂等规则发布一条带尾签的独立人类可读说明评论,再单独发送原始 payload;两次写操作都要回读。若仓库禁止额外评论,则保持机器 payload 原样,并把该动作标记为 `signature-blocked-by-protocol`,向用户披露,不能谎称已添加尾签。
|
|
97
|
+
- `code-review` 完整检视通过时只发送正文恰好为 `/lgtm` 的评论,不发布检视摘要、前置说明或其他伴随评论;发送前后都回读并确认 `review_head_sha` 未变化,再逐字回读 `/lgtm`。
|
|
95
98
|
- 尾签只标识文本由 msdevflow 发布,不代表 reviewer/approver 身份,也不替代独立审批或仓库门禁。
|
|
96
99
|
|
|
97
100
|
## 授权范围
|
|
@@ -106,19 +109,21 @@ Agent 创建或修改的 Issue/PR 正文,以及发布的 Issue 评论、PR 普
|
|
|
106
109
|
|
|
107
110
|
开始以下动作前确认:
|
|
108
111
|
|
|
109
|
-
- 创建 Issue
|
|
112
|
+
- 创建 Issue 的最终目标、模板、标题、正文、开放里程碑选择和其他元数据预览;
|
|
110
113
|
- 自领/修改 Issue assignee 或发布接取评论;
|
|
111
114
|
- 需求分析和方案选择;
|
|
112
115
|
- 修改范围发生变化;
|
|
113
116
|
- 首次 push;
|
|
114
|
-
- 创建 PR
|
|
117
|
+
- 创建 PR,包括从目标 Issue 继承的里程碑及创建后必要的 `pr edit --milestone`;
|
|
115
118
|
- 每个非预先授权的 CI 修复方案;
|
|
116
119
|
- 发布 discussion 回复或其他人类可读远端评论;
|
|
117
120
|
- 发布 `code-review` finding;
|
|
118
121
|
- 发送可能触发 CI 或 merge 的机器人命令;
|
|
119
122
|
- merge。
|
|
120
123
|
|
|
121
|
-
`code-review` 完整检视未发现问题时,无论 guided 或 autonomous,都必须展示当前 PR、`review_head_sha
|
|
124
|
+
`code-review` 完整检视未发现问题时,无论 guided 或 autonomous,都必须展示当前 PR、`review_head_sha` 和精确 `/lgtm`,明确说明不会发布检视摘要或前置评论,并取得一次明确确认;普通的 `action=code-review` 调用不构成该确认。
|
|
125
|
+
|
|
126
|
+
`code-review` 对 GitCode 的所有读取、归一化、UTF-8 落盘、finding/`/lgtm` 写入和写后回读都只能通过 `scripts/gitcode_review.py`。客户端可以为这个固定脚本入口批准所需网络执行,以减少同一批只读调用的重复权限提示;这只授权执行 helper 固化的传输路径,不确认 finding 内容,也不批准 `/lgtm`、approve 或 merge。helper 报错、响应不完整或 schema 未知时不得改用 raw CLI、`curl`、现场 Python/PowerShell 解析或 endpoint 探测。
|
|
122
127
|
|
|
123
128
|
本地只读探查、读取远端公开事实、运行测试和可逆代码编辑无需逐动作确认,但编辑前应已有用户确认的方案。
|
|
124
129
|
|
|
@@ -134,12 +139,13 @@ Agent 创建或修改的 Issue/PR 正文,以及发布的 Issue 评论、PR 普
|
|
|
134
139
|
|
|
135
140
|
## 写操作幂等规则
|
|
136
141
|
|
|
142
|
+
- `create-issue` 的预览确认前远端写入次数必须为零;每个 run 最多执行一次真实 `issue create`,且只能使用最终确认的完整 payload。`create_attempted=true` 后不得以测试、权限、编码、字段、API、重试、更换类型或替代 Issue 为由再次创建;成功后只允许回读和原地补齐已确认元数据,失败或结果不确定时只允许有界只读恢复并停止;
|
|
137
143
|
- `create-issue` 不执行产品查重;创建结果不确定时只按目标仓库、当前账号、action 启动时间之后、标题和完整正文逐字一致做有界恢复,找到多个或不能证明唯一时停止;
|
|
138
144
|
- 修改 assignee 后回读 Issue;
|
|
139
145
|
- 创建 PR 前后按 canonical + source + head + base 查询;
|
|
140
146
|
- 评论前按目标 discussion、正文语义和唯一尾签检查是否已有等价回复;
|
|
141
|
-
- `code-review` finding 按 canonical + PR + `review_head_sha` + reviewer + path/position + 完整正文检查;检视通过按 canonical + PR + `review_head_sha` + reviewer +
|
|
142
|
-
-
|
|
147
|
+
- `code-review` finding 按 canonical + PR + `review_head_sha` + reviewer + path/position + 完整正文检查;检视通过按 canonical + PR + `review_head_sha` + reviewer + 精确 `/lgtm` 检查,不查找或发布检视摘要,旧 head 证据不得复用。该检查和写入只由固定 helper 完成;helper 受管 write receipt 仅持久化正文 SHA-256、固定 head、位置、写前集合和写后 ID,不保存正文或 Token。`attempting`/`write-returned` 恢复时先复核当前 head 并按 receipt 只读定位唯一评论,无法唯一证明时停止 `blocked: comment-write-uncertain`,禁止直接重试;
|
|
148
|
+
- 除 `code-review` 的精确 `/lgtm` 外,严格机器协议命令前检查同一目标和协议动作的带尾签独立说明评论与命令是否已分别存在;
|
|
143
149
|
- CI 使用 PR + head SHA 作为运行键;
|
|
144
150
|
- resolve 前检查 `resolved`;
|
|
145
151
|
- merge 前后回读 PR。
|