msdevflow 0.8.2 → 0.8.3
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/lib/bootstrap.js +3 -2
- package/package.json +1 -1
- package/skill/msd/SKILL.md +1 -1
- package/skill/msd/references/command-capabilities.md +2 -1
- package/skill/msd/references/create-issue.md +66 -20
- package/skill/msd/references/recovery.md +1 -1
- package/skill/msd/references/state-and-safety.md +1 -1
package/lib/bootstrap.js
CHANGED
|
@@ -50,12 +50,13 @@ const SUPPORTED_CLIENTS = ["claude", "codex", "opencode"];
|
|
|
50
50
|
const REQUIRED_SCHEMAS = {
|
|
51
51
|
"auth login": ["web"],
|
|
52
52
|
"auth status": ["json"],
|
|
53
|
-
"issue create": ["body-file", "dry-run", "json", "milestone", "repo", "title"],
|
|
53
|
+
"issue create": ["body-file", "dry-run", "issue-type", "json", "milestone", "repo", "title"],
|
|
54
54
|
"issue list": ["assignee", "json", "repo", "state"],
|
|
55
55
|
"issue view": ["comments", "json", "repo"],
|
|
56
|
-
"issue edit": ["assignee", "json", "milestone", "repo", "state"],
|
|
56
|
+
"issue edit": ["assignee", "body-file", "json", "label", "milestone", "repo", "state", "title", "yes"],
|
|
57
57
|
"issue comment": ["body-file", "json", "repo"],
|
|
58
58
|
"issue prs": ["json", "repo"],
|
|
59
|
+
"label list": ["json", "limit", "page", "per-page", "repo"],
|
|
59
60
|
"milestone list": ["json", "limit", "page", "per-page", "repo"],
|
|
60
61
|
"pr create": ["base", "body-file", "fork", "head", "json", "repo", "title"],
|
|
61
62
|
"pr edit": ["json", "milestone", "repo"],
|
package/package.json
CHANGED
package/skill/msd/SKILL.md
CHANGED
|
@@ -140,7 +140,7 @@ discovered -> claimed -> verified -> analyzed -> designed
|
|
|
140
140
|
## Action 完成条件
|
|
141
141
|
|
|
142
142
|
- `discover`:查询范围、候选和排除证据已报告,无远端写入。
|
|
143
|
-
- `create-issue`:按确认的仓库或同类型 community 模板创建一个 Issue
|
|
143
|
+
- `create-issue`:按确认的仓库或同类型 community 模板创建一个 Issue;创建参数显式设置已核实的平台类型,必需标签完整分页核验后应用,标题包含仓库/模板约定或默认的类型前缀。开放里程碑唯一时自动选择、多个时由用户选择、没有时明确为 `none`;远端回读必须确认平台类型与用户意图一致、前缀标题逐字一致、必需标签齐全,以及目标、完整正文、唯一尾签和其余元数据一致。类型错误或不可验证、缺少必需标签均为 `blocked`,不报告 `issue-created`;不创建标签或里程碑,也不执行查重、接取或开发。
|
|
144
144
|
- `issue`:接取状态按授权完成或确认可继续,Issue、关联 PR 和 canonical 默认分支已核验,无重复开发。
|
|
145
145
|
- `develop`:范围和方案已确认,工作分支基于最新 canonical,任务实现且适用本地门禁有实际证据。
|
|
146
146
|
- `pr`:普通 canonical PR 回读确认 source/head/base、Issue 关联、标题和正文正确,且 PR 里程碑与目标 Issue 精确一致或两者均为 `none`。
|
|
@@ -23,6 +23,7 @@ GitCode CLI 版本和命令集合可能不同。工作流必须探测能力,
|
|
|
23
23
|
<gitcode-command> schema "issue edit"
|
|
24
24
|
<gitcode-command> schema "issue comment"
|
|
25
25
|
<gitcode-command> schema "milestone list"
|
|
26
|
+
<gitcode-command> schema "label list"
|
|
26
27
|
<gitcode-command> schema "pr create"
|
|
27
28
|
<gitcode-command> schema "pr edit"
|
|
28
29
|
<gitcode-command> schema "pr list"
|
|
@@ -34,7 +35,7 @@ GitCode CLI 版本和命令集合可能不同。工作流必须探测能力,
|
|
|
34
35
|
<gitcode-command> schema "pr merge"
|
|
35
36
|
```
|
|
36
37
|
|
|
37
|
-
若无 schema,对应使用 `<command> --help`。只探测当前 action 所需命令;`create-issue` 至少需要 `milestone list` 的显式 repo、JSON 和分页,`issue create` 的显式 repo、title、body-file、JSON 和 dry-run,`issue view` 的 JSON 回读能力,以及 `issue edit` 的显式 repo、milestone number 和 JSON
|
|
38
|
+
若无 schema,对应使用 `<command> --help`。只探测当前 action 所需命令;`create-issue` 至少需要 `milestone list` 的显式 repo、JSON 和分页,`label list` 的显式 repo、JSON 和完整分页,`issue create` 的显式 repo、title、body-file、issue-type、JSON 和 dry-run,`issue view` 的 JSON 回读能力,以及 `issue edit` 的显式 repo、label、title、body-file、milestone number、yes 和 JSON。平台 `issue_type` 不在 typed view 输出时须用已验证的同 CLI 单 Issue GET JSON 回读;类型枚举和名称/ID 映射只采用当前官方文档、CLI 实现或仓库类型配置支持的只读路径,不猜 endpoint。`--issue-type` 的 enterprise 标注不是目标仓库支持证据;类型无法明确设置或回读时在创建前阻断,不能省略参数创建默认 Bug。标签完整分页证明必需标签缺失时也必须阻断,不降级为 `none`。官方 npm GitCode CLI 的 typed `issue create --title` 是 `create-issue` 唯一支持的非 ASCII 标题创建通道;不得调用 `api .../issues --method POST` 测试或创建 Issue。`pr` 至少需要读取关联 Issue 和 PR milestone 的 JSON 能力,以及 `pr edit` 的显式 repo、milestone number 和 JSON;typed `pr create` 不支持 milestone 时,必须在同一次已确认的 PR action 中以 `pr edit --milestone` 关联并回读。`openlibing-auth` 至少需要可有界列举 canonical PR、读取 PR head/labels/comments 的 JSON 能力。完整作者 E2E 记录仓库参数(`-R`/`--repo`)、JSON、body-file/comment-file/stdin、dry-run、fork、assignee、discussion/resolve、正文 edit 和标题 edit 能力。涉及人类可读远端文本时,必须确认 [state-and-safety.md](state-and-safety.md) 要求的 UTF-8 文件、stdin 或 `api --input <utf8-json-file>` 安全通道;Windows PowerShell 5.1 下只有 `--body`/`--comment`/`--title` 等字符串参数而入口为 `.cmd` wrapper 时,不把非 ASCII 文本直接放进命令行参数。
|
|
38
39
|
|
|
39
40
|
`code-review` 是能力降级顺序的专用例外:Agent 不直接探测或组合 GitCode 命令,只调用 Skill 随附的 `scripts/gitcode_review.py`。setup 必须验收 `issue view`、`pr view`、`pr comments`、`pr comment` 和 `api`;helper 内部只使用 [code-review.md](code-review.md) 固定的数据路径,以 `pulls/<number>/files` 而不是 typed `pr diff --json` 读取完整 changed-files。helper 的 `snapshot`/`context`/`finding`/`lgtm` 返回能力不足、未知 schema 或不完整响应时,停止为 `blocked: review-capability-required` 或 `review-incomplete`;不得退回 raw CLI、网页 raw URL、`curl`、现场 `python -c`/PowerShell JSON、展示文本 grep 或其他 endpoint 试探。
|
|
40
41
|
|
|
@@ -8,9 +8,9 @@
|
|
|
8
8
|
|
|
9
9
|
本 action 是一次性 Issue 创建事务。最终预览得到用户明确确认前,禁止任何会改变远端状态的操作,包括 Issue/PR 创建、编辑、关闭、删除、评论、标签或里程碑写入;只允许 schema/help、dry-run、本地序列化和只读查询。`POST` 到 Issue 集合永远是真实创建,不得用测试标题、最小 payload、权限探测、编码探测、字段探测或“dry-run API”名义调用。
|
|
10
10
|
|
|
11
|
-
每个 action run 最多允许一次真实 Issue 创建请求,而且只能发送已确认预览中的完整 payload。发起请求前将本次 run 标记为 `create_attempted=true`;无论返回成功、400/403、超时、连接中断、进程失败、空响应还是结果无法解析,都不得重置该标记,也不得切换 CLI/API
|
|
11
|
+
每个 action run 最多允许一次真实 Issue 创建请求,而且只能发送已确认预览中的完整 payload。发起请求前将本次 run 标记为 `create_attempted=true`;无论返回成功、400/403、超时、连接中断、进程失败、空响应还是结果无法解析,都不得重置该标记,也不得切换 CLI/API、修改标题/正文/类型/标签/里程碑后再次创建。创建尝试后只允许本文件规定的有界只读恢复、同一 Issue 回读,以及确认创建结果后应用或修复该 Issue 的已确认元数据;不能证明结果时返回 `blocked: create-result-uncertain`,不得重试创建。
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
预览确认只授权一次完全匹配的最终创建,以及对同一 Issue 应用或修复已确认元数据,不授权测试写入、替代 payload、关闭旧 Issue 或在本 action 内创建第二个 Issue。确认前若标题、类型、正文或元数据变化,必须重新生成完整预览并重新确认;只有元数据应用和完整回读通过后本 action 才结束。不得改成另一未确认类型;把服务器实际值纠正为已确认类型仅按“回读、恢复与完成”的已验证编辑能力执行。
|
|
14
14
|
|
|
15
15
|
本 action 不执行重复或相似 Issue/PR 查找。只有创建命令超时、中断或结果不确定时,才允许为恢复本次写入而有界查询:限定当前账号、action 启动时间之后、目标仓库、标题和完整正文逐字一致;这不是产品查重,未找到唯一结果时停止,不直接重试。
|
|
16
16
|
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
3. 只保留可识别的 Issue 模板;排除 PR/Pull Request/Merge Request 模板、`config.yml`/`config.yaml`、模板选择配置、普通说明文档和其他非 Issue 文件。
|
|
26
26
|
4. 根据文件名、模板 `name`/`description`、YAML 顶层 `labels` 以及 Markdown frontmatter 判断类型。只有证据唯一一致时才自动归类;证据冲突时视为模板无效。
|
|
27
27
|
5. YAML Issue Form 至少应可解析为映射,包含非空 `name`、`description` 和 `body` 列表;每个需要用户填写的项必须有受支持的 `type`、可显示 label 或等价提示,并能判断是否必填。Markdown 模板必须有可识别的 Issue 模板 frontmatter 或明确的 Issue 字段结构。
|
|
28
|
-
6.
|
|
28
|
+
6. 用户明确指定的类型优先于自然语言推断,固定为 `requested_type`:`feature`/特性/需求建议 → `feature-request`,bug/缺陷 → `bug-report`,文档 → `documentation`,咨询 → `question`。只有用户未指定时才按描述唯一推断;无法唯一推断时展示类型、模板名称、说明和路径,让用户选择。不得因为描述里有“问题”就把特性改为 bug,不得默认选择第一个、按列表顺序猜测或拼接多个模板。
|
|
29
29
|
7. 若目标仓库存在匹配类型的模板但模板损坏、证据冲突、含无法表达的必填控件或格式不受支持,返回 `blocked: repository-template-invalid`,报告路径和原因;不得回退到通用模板。
|
|
30
30
|
8. 同一类型存在多个有效模板且无法按名称、说明和用户描述唯一选择时,展示候选并等待用户确认。
|
|
31
31
|
|
|
@@ -48,6 +48,37 @@ https://gitcode.com/Ascend/community/tree/master/.gitcode/.gitcode/ISSUE_TEMPLAT
|
|
|
48
48
|
|
|
49
49
|
回退必须保持类型一致,不因某个模板无效而改用另一类型,不跨目标仓库与 community 拼接字段。fallback 文件也必须从远端 `master` 读取并按相同规则验证;无匹配或无效时返回 `blocked: fallback-template-unavailable`。
|
|
50
50
|
|
|
51
|
+
## 平台类型、标签与标题前缀
|
|
52
|
+
|
|
53
|
+
`requested_type`(用户意图)、模板类别、平台 `issue_type`、labels 和标题前缀是独立字段,必须一致表达所选类型;使用 Feature 正文模板、加 `feature` 标签或 `[Feature]` 前缀都不能代替设置平台类型。
|
|
54
|
+
|
|
55
|
+
### 平台类型
|
|
56
|
+
|
|
57
|
+
1. 创建前通过当前 CLI 的 schema/help、官方接口说明和目标仓库的只读类型配置,确认平台可用类型及其精确名称/ID,并固定 `platform_issue_type` 及映射证据。类型名称只能按已验证映射关联到 `requested_type`,不得把 `feature-request` 文件名直接当成平台接受的值。
|
|
58
|
+
2. `issue create --issue-type` 可能标注为 enterprise 能力;有这个 flag 不等于目标仓库支持它。必须只读确认当前仓库适用性和参数接受名称还是 ID。没有已知类型列表命令时只使用官方文档或已验证 CLI 实现支持的只读接口,不猜 endpoint、不用 POST 探测,也不通过查找现有 Issue 猜类型。
|
|
59
|
+
3. 平台类型的创建参数和回读通道都必须在创建前确定。typed `issue view --json` 不提供类型时,使用同一 CLI 的已验证单 Issue GET JSON,例如 `<gitcode-command> api "repos/<canonical>/issues/<number>"`,读取 `issue_type`/`issue_type_detail`;不得把字段缺失当成类型正确。
|
|
60
|
+
4. 无法证明所需类型可明确设置并回读时,返回 `blocked: issue-type-unavailable`,不执行真实创建,不省略类型参数依赖默认值。dry-run 只证明请求序列化,不证明服务器会接受该类型。
|
|
61
|
+
|
|
62
|
+
### 标签解析
|
|
63
|
+
|
|
64
|
+
1. 模板声明的 labels 和用户明确要求的 labels 都是必需元数据,不得静默降级为 `none`。模板未声明类型标签时,按 `requested_type` 查找 `feature`、`bug`、`documentation` 或 `question`;只有仓库规则明确规定别名映射时才用该别名,不能靠语义相近自行替换。
|
|
65
|
+
2. 用目标仓库的 `label list` JSON 分页核验精确标签,固定 `per-page`、逐页递增 `page`,并按 schema 保证每页 `limit` 不小于 `per-page`。没有找到所有必需标签时,继续到分页元数据表明结束,或没有元数据时返回数量小于 `per-page`/空页;恰好返回 100 条不表示只有 100 条。不能只查第一页就断言标签不存在,`limit` 截断也不能作为不存在的证据;重复页或无法证明完整性时返回 `blocked: label-discovery-incomplete`。
|
|
66
|
+
3. 优先精确名称匹配;仅大小写不同的匹配须在完整分页后证明唯一,再使用仓库返回的精确名称并记录映射。完整查询后仍无匹配则返回 `blocked: required-label-unavailable`,不创建新标签,也不丢弃标签继续创建。
|
|
67
|
+
4. 固定预期标签集合 `required_labels` 和已验证 `issue edit --label` 参数;每个标签的来源、精确名称和应用方式都进入预览。用户要求、模板或仓库类型标签之间有矛盾时阻断,不得把互相矛盾的类型标签全部附上。标签应用能力不足时在创建前阻断,而不是创建后才发现无法补齐。
|
|
68
|
+
|
|
69
|
+
### 标题前缀
|
|
70
|
+
|
|
71
|
+
仓库明确规则优先,其次所选模板顶层 `title`/Markdown frontmatter 的类型前缀;二者冲突时按模板无效规则阻断。均未规定前缀时,使用本 Skill 默认值:
|
|
72
|
+
|
|
73
|
+
| requested_type | 默认标题前缀 |
|
|
74
|
+
|---|---|
|
|
75
|
+
| feature-request | `[Feature]` |
|
|
76
|
+
| bug-report | `[Bug]` |
|
|
77
|
+
| documentation | `[Docs]` |
|
|
78
|
+
| question | `[Question]` |
|
|
79
|
+
|
|
80
|
+
最终标题以正确的类型前缀开头且只出现一次;已存在同类前缀时保留一个,存在相反类型前缀时按已明确的 `requested_type` 修正后预览,不得保留 `[Bug]` 来提交 Feature。预览、dry-run、真实创建和回读使用同一完整标题,不依赖平台自动添加前缀。
|
|
81
|
+
|
|
51
82
|
## 里程碑选择
|
|
52
83
|
|
|
53
84
|
模板确定后、生成最终预览前,分页读取 canonical repository 的里程碑 JSON,并按权威 `state` 字段只保留开放里程碑。`milestone list` 没有服务端状态筛选时,按返回的分页元数据继续读取;没有分页元数据时,固定 `per-page` 并读取到结果少于该值或出现空页,再统一过滤,不能只检查第一页。
|
|
@@ -63,8 +94,8 @@ https://gitcode.com/Ascend/community/tree/master/.gitcode/.gitcode/ISSUE_TEMPLAT
|
|
|
63
94
|
|
|
64
95
|
- YAML `markdown` 项只作为填写说明,不伪造为用户答案;`input`、`textarea`、`dropdown` 和 `checkboxes` 转为保持原顺序的 Markdown 字段。
|
|
65
96
|
- Markdown 模板保留原有标题、章节、提示和顺序,只替换明确的填写占位内容;不得删除仓库要求的声明或检查项。
|
|
66
|
-
-
|
|
67
|
-
-
|
|
97
|
+
- 最终标题必须完整、具体,按“标题前缀”规则包含正确且唯一的前缀,再由预览确认;不得将模板 `title` 当成可随意丢弃的建议。
|
|
98
|
+
- 平台类型和必需标签按上节固定;assignees 和其他元数据只使用模板声明或用户明确要求、且目标仓库可接受的值,不擅自新增负责人。里程碑只按本文件的确定性选择规则设置,不创建或修改里程碑。无法安全应用必需元数据时进入 `blocked`。
|
|
68
99
|
- 不编造环境、复现步骤、日志、链接、截图、版本、影响范围或验收结果。自然语言中无法推出的必填字段一次只询问一个;选填字段无法推出时保留明确的“未提供”或按模板允许留空。
|
|
69
100
|
- 最终 Issue 正文末尾与主体间隔一个空行并恰好附加一次 `——msdevflow`。
|
|
70
101
|
|
|
@@ -80,12 +111,17 @@ https://gitcode.com/Ascend/community/tree/master/.gitcode/.gitcode/ISSUE_TEMPLAT
|
|
|
80
111
|
Account: <username>
|
|
81
112
|
Operation target: <canonical>
|
|
82
113
|
Default branch: <branch>
|
|
83
|
-
|
|
114
|
+
Requested type: <requested_type>
|
|
115
|
+
Platform issue type: <exact name/ID + mapping evidence + create argument>
|
|
84
116
|
Template source: repository | Ascend/community fallback
|
|
85
117
|
Template ref/path: <repository>@<ref>:<path>
|
|
86
|
-
Title: <exact
|
|
118
|
+
Title prefix: <exact prefix + repository/template/default source>
|
|
119
|
+
Title: <exact title including prefix>
|
|
87
120
|
Body: <complete rendered body including one signature>
|
|
88
|
-
Labels
|
|
121
|
+
Labels: <required_labels with exact repository names + template/user/type source>
|
|
122
|
+
Assignees: <exact values or none>
|
|
123
|
+
Metadata plan: <same-Issue label/assignee/milestone edit arguments>
|
|
124
|
+
Dry-run: <creation payload matched; platform acceptance not yet tested>
|
|
89
125
|
Milestone: <number + exact title + open + due date, or none>
|
|
90
126
|
Milestone selection: explicit | user-selected | sole open milestone | no open milestone
|
|
91
127
|
Duplicate search: not performed by design
|
|
@@ -102,55 +138,65 @@ Duplicate search: not performed by design
|
|
|
102
138
|
使用前只读探测:
|
|
103
139
|
|
|
104
140
|
```bash
|
|
141
|
+
<gitcode-command> schema "label list"
|
|
105
142
|
<gitcode-command> schema "milestone list"
|
|
106
143
|
<gitcode-command> schema "issue create"
|
|
107
144
|
<gitcode-command> schema "issue view"
|
|
108
145
|
<gitcode-command> schema "issue edit"
|
|
109
146
|
```
|
|
110
147
|
|
|
111
|
-
|
|
148
|
+
必须具备 `issue create --issue-type`、完整的标签分页、同 Issue 标签/里程碑编辑和平台类型 JSON 回读能力;具体类型的适用性仍按“平台类型”核验,不能只看 flag 是否存在。
|
|
149
|
+
|
|
150
|
+
将最终正文写入唯一的系统临时文件,编码固定为 UTF-8 无 BOM。官方 npm GitCode CLI 的 `issue create --title` 是本 Skill 已验收的中文标题通道;Windows `.cmd` wrapper 也直接使用 typed command,不得为中文标题切换到 API POST。最终预览前必须用固定仓库、带前缀标题、正文文件和已验证的平台类型执行本地 dry-run:
|
|
112
151
|
|
|
113
152
|
```text
|
|
114
|
-
<gitcode-command> issue create -R <canonical> --title <exact-title> --body-file <utf8-body-file> --dry-run --json
|
|
153
|
+
<gitcode-command> issue create -R <canonical> --title <exact-title> --body-file <utf8-body-file> --issue-type <platform-issue-type> --dry-run --json
|
|
115
154
|
```
|
|
116
155
|
|
|
117
|
-
dry-run
|
|
156
|
+
dry-run 不得产生新 Issue number/URL;否则视为能力异常并停止。按 JSON 逐项比较 repository、完整 title、完整 body 和非空 `issue_type` 与预期创建参数一致;类型为空、缺失或不一致时返回 `blocked: create-payload-mismatch`,不得继续真实创建。labels/assignees/milestone 按预先验证的同 Issue 编辑计划应用,dry-run 中这些字段暂为空不代表允许丢弃最终必需元数据。预览同时覆盖创建参数和该编辑计划,不得只展示模板类型冒充平台类型。
|
|
157
|
+
|
|
158
|
+
真实创建使用与 dry-run 完全相同的参数,仅去掉 `--dry-run`;平台类型是必需创建参数,不得省略并依赖默认值:
|
|
118
159
|
|
|
119
160
|
```text
|
|
120
|
-
<gitcode-command> issue create -R <canonical> --title <exact-title> --body-file <utf8-body-file> --json
|
|
161
|
+
<gitcode-command> issue create -R <canonical> --title <exact-title> --body-file <utf8-body-file> --issue-type <platform-issue-type> --json
|
|
121
162
|
```
|
|
122
163
|
|
|
123
|
-
执行真实命令前设置 `create_attempted=true`。该命令是本次 run 唯一允许的创建请求;禁止使用 `test-*`、`*-check`、`permission-*`、最小正文或其他替代 payload
|
|
164
|
+
执行真实命令前设置 `create_attempted=true`。该命令是本次 run 唯一允许的创建请求;禁止使用 `test-*`、`*-check`、`permission-*`、最小正文或其他替代 payload 探测权限、编码、标签、里程碑或字段组合。预览确认后若任何参数或正文文件变化,停止并重新执行本地校验和预览确认,不按变更内容直接创建。`auth status`、schema、dry-run 不证明服务器写权限;最终创建仍失败时返回 `blocked`,不得发测试 Issue 或改用另一创建通道。
|
|
124
165
|
|
|
125
|
-
|
|
166
|
+
创建返回 Issue number 后,先回读确认平台类型,再按预览计划对同一个 Issue 应用标签、assignees 和里程碑;这仍是同一次创建事务,不得提前报告 `issue-created`。标签使用已验证的 typed `issue edit --label` 语义,不假设多值参数格式;编辑前读取现有标签,若参数替换集合则发送现有集合与 `required_labels` 的并集,避免删掉机器人或人工标签。里程碑固定使用:
|
|
126
167
|
|
|
127
168
|
```text
|
|
128
169
|
<gitcode-command> issue edit <issue-number> -R <canonical> --milestone <milestone-number> --json --yes
|
|
129
170
|
```
|
|
130
171
|
|
|
131
|
-
|
|
172
|
+
未选择里程碑时不执行该命令。label/assignee 仅按创建前已验证并经预览确认的精确值应用;不支持必需字段时应在创建前阻断,不得把必需 label 改成 `none`。平台自动附加的其他标签单独披露;平台 `issue_type` 不是 label,两者必须独立验证。
|
|
132
173
|
|
|
133
174
|
正文文件在 dry-run、唯一一次真实创建和必要回读完成后立即删除。typed command、UTF-8 文件输入或必要的同 Issue metadata edit 能力不足时返回 `blocked: bootstrap-required` 或 `blocked: utf8-safe-create-unavailable`;不得猜测 API 字段、发起 POST 实验或创建替代 Issue。
|
|
134
175
|
|
|
135
176
|
## 回读、恢复与完成
|
|
136
177
|
|
|
137
|
-
创建返回 Issue number/URL
|
|
178
|
+
创建返回 Issue number/URL 后立即回读目标与类型;仅在该门禁通过后应用已确认元数据,随后再次用权威 JSON 完整验证:
|
|
138
179
|
|
|
139
180
|
- repository 和 Issue number/URL;
|
|
140
181
|
- state 为 open;
|
|
141
|
-
-
|
|
182
|
+
- 平台 `issue_type`/`issue_type_detail` 与固定的 `platform_issue_type` 名称/ID 按已验证映射一致,并与 `requested_type` 同类;不能只核对正文模板;
|
|
183
|
+
- 标题逐字一致,包含正确且唯一的类型前缀;
|
|
142
184
|
- 正文统一换行为 `\n` 后逐字一致,且尾签恰好一次;
|
|
143
|
-
-
|
|
185
|
+
- 预览中全部 `required_labels` 都出现在实际 labels 中,assignees 也与预览一致;额外系统标签单独披露;
|
|
144
186
|
- 里程碑回读结果与预览中的 number 和标题精确一致,或预览明确为 `none` 且实际未关联。
|
|
145
187
|
|
|
146
|
-
创建结果不确定时只执行本文件定义的有界恢复查询;找到多个或无法证明唯一时返回 `blocked: create-result-uncertain
|
|
188
|
+
创建结果不确定时只执行本文件定义的有界恢复查询;找到多个或无法证明唯一时返回 `blocked: create-result-uncertain`。创建已存在但平台类型错误(例如预期 Feature、实际 `Bug-Report`)或类型字段不可验证时,分别返回 `blocked: issue-type-mismatch` / `blocked: issue-type-unverified`,暂停标签/assignee/里程碑等后续写入,只允许下一段规定的已确认类型修复;不得解释成“只是系统标签”而宣称完成。
|
|
189
|
+
|
|
190
|
+
类型、标签、标题、正文或里程碑与预览不一致时,只能用已验证 UTF-8 安全且支持目标字段的 typed `issue edit` 原地应用已确认值,然后重新完整回读。当前 edit 无类型参数时不得尝试猜测 API PATCH 字段;保留类型 blocker 和已创建 Issue URL,交由人工纠正,不创建替代 Issue。其他必需元数据无法应用或回读不一致时返回 `blocked: issue-metadata-mismatch`。设置里程碑时使用同一 canonical 和已确认的 number,清空里程碑则必须先由当前 schema/help 或只读事实验证明确语义,不得猜测 `0` 的含义。
|
|
191
|
+
|
|
192
|
+
同 Issue 编辑响应不确定时也先回读;不能核实当前值或发现外部改动时停止,不盲目重试或覆盖。恢复到同一 Issue 后仍必须核验预览绑定的平台类型、完整前缀标题、必需标签和其余字段,不能以 Issue 已存在作为完成证据。
|
|
147
193
|
|
|
148
194
|
只有完整回读通过才进入 `issue-created`:
|
|
149
195
|
|
|
150
196
|
```text
|
|
151
197
|
action: create-issue
|
|
152
198
|
Current state: issue-created | blocked
|
|
153
|
-
Evidence: <canonical>#<number>, template ref/path, milestone number/title or none, exact readback
|
|
199
|
+
Evidence: <canonical>#<number>, requested/platform type, exact prefixed title, required labels, template ref/path, milestone number/title or none, exact readback
|
|
154
200
|
Current head: na
|
|
155
201
|
Blocker: none | details
|
|
156
202
|
Suggested next action: issue | none
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
|
|
25
25
|
执行前检查:
|
|
26
26
|
|
|
27
|
-
- Issue create:不预查重;只在写结果不确定时执行 `create-issue`
|
|
27
|
+
- Issue create:不预查重;只在写结果不确定时执行 `create-issue` 的有界恢复;定位到同一 Issue 后逐项回读本次预览的平台类型、含类型前缀的完整标题、必需标签、正文及 milestone number/title 或 `none`。平台类型不一致或不可验证、必需标签缺失时不得报告 `issue-created`;仅按 create-issue 的已验证同 Issue 编辑规则修复,不盲目重试、不创建替代 Issue;
|
|
28
28
|
- assignee/comment:Issue 是否已有等价状态或带唯一尾签的等价评论;
|
|
29
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 是否已有有效运行;精确命令与带唯一尾签的独立说明评论分别检查;
|
|
@@ -111,7 +111,7 @@ Agent 创建或修改的 Issue/PR 正文,以及发布的 Issue 评论、PR 普
|
|
|
111
111
|
|
|
112
112
|
开始以下动作前确认:
|
|
113
113
|
|
|
114
|
-
- 创建 Issue
|
|
114
|
+
- 创建 Issue 的最终目标、用户类型与平台类型映射、模板、含类型前缀的标题、正文、必需标签、开放里程碑选择及同 Issue 元数据编辑计划预览;
|
|
115
115
|
- 自领/修改 Issue assignee 或发布接取评论;
|
|
116
116
|
- 权威证据和用户原始请求无法唯一确定、且会实质改变范围、公共行为、兼容性、性能目标或风险的需求结论和方案选择;
|
|
117
117
|
- 修改范围发生变化;
|