@fitlab-ai/agent-infra 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/dist/bin/cli.js +1 -1
- package/dist/lib/cp.js +1 -1
- package/dist/lib/decide.js +2 -2
- package/dist/lib/defaults.json +1 -0
- package/dist/lib/init.js +7 -7
- package/dist/lib/merge.js +1 -1
- package/dist/lib/prompt.js +1 -1
- package/dist/lib/run/index.js +7 -7
- package/dist/lib/run/prompt.js +1 -1
- package/dist/lib/sandbox/capture.js +5 -5
- package/dist/lib/sandbox/clipboard/bridge.js +48 -13
- package/dist/lib/sandbox/clipboard/index.js +5 -6
- package/dist/lib/sandbox/clipboard/linux.js +91 -0
- package/dist/lib/sandbox/clipboard/paths.js +1 -1
- package/dist/lib/sandbox/clipboard/win32.js +144 -0
- package/dist/lib/sandbox/commands/create.js +67 -65
- package/dist/lib/sandbox/commands/enter.js +9 -9
- package/dist/lib/sandbox/commands/list-running.js +2 -2
- package/dist/lib/sandbox/commands/ls.js +7 -7
- package/dist/lib/sandbox/commands/prune.js +8 -8
- package/dist/lib/sandbox/commands/rebuild.js +38 -50
- package/dist/lib/sandbox/commands/refresh.js +2 -2
- package/dist/lib/sandbox/commands/rm.js +11 -11
- package/dist/lib/sandbox/commands/show.js +4 -4
- package/dist/lib/sandbox/commands/start.js +4 -4
- package/dist/lib/sandbox/commands/vm.js +4 -4
- package/dist/lib/sandbox/config.js +10 -4
- package/dist/lib/sandbox/constants.js +4 -1
- package/dist/lib/sandbox/credentials.js +1 -1
- package/dist/lib/sandbox/dotfiles.js +1 -1
- package/dist/lib/sandbox/engine.js +3 -3
- package/dist/lib/sandbox/engines/index.js +5 -5
- package/dist/lib/sandbox/engines/wsl2-paths.js +1 -1
- package/dist/lib/sandbox/image-build.js +80 -0
- package/dist/lib/sandbox/image-prune.js +2 -2
- package/dist/lib/sandbox/index.js +10 -10
- package/dist/lib/sandbox/managed-fs.js +1 -1
- package/dist/lib/sandbox/readme-scaffold.js +1 -1
- package/dist/lib/sandbox/tools.js +2 -2
- package/dist/lib/server/adapters/feishu/index.js +10 -3
- package/dist/lib/server/adapters/feishu/renderer.js +88 -0
- package/dist/lib/server/adapters/feishu/transport.js +2 -13
- package/dist/lib/server/daemon.js +64 -43
- package/dist/lib/server/display.js +83 -0
- package/dist/lib/server/index.js +2 -2
- package/dist/lib/server/process-control.js +2 -2
- package/dist/lib/server/protocol.js +2 -2
- package/dist/lib/server/streamer.js +5 -4
- package/dist/lib/task/commands/cat.js +2 -2
- package/dist/lib/task/commands/decisions.js +4 -4
- package/dist/lib/task/commands/files.js +3 -3
- package/dist/lib/task/commands/grep.js +3 -3
- package/dist/lib/task/commands/issue-body.js +4 -4
- package/dist/lib/task/commands/log.js +5 -5
- package/dist/lib/task/commands/ls.js +3 -3
- package/dist/lib/task/commands/show.js +1 -1
- package/dist/lib/task/commands/status.js +71 -25
- package/dist/lib/task/index.js +9 -9
- package/dist/lib/task/resolve-ref.js +1 -1
- package/dist/lib/task/workflow-warnings.js +94 -0
- package/dist/lib/update.js +4 -4
- package/lib/defaults.json +1 -0
- package/lib/sandbox/clipboard/bridge.ts +50 -8
- package/lib/sandbox/clipboard/index.ts +5 -6
- package/lib/sandbox/clipboard/linux.ts +124 -0
- package/lib/sandbox/clipboard/win32.ts +173 -0
- package/lib/sandbox/commands/create.ts +84 -64
- package/lib/sandbox/commands/rebuild.ts +42 -54
- package/lib/sandbox/config.ts +13 -1
- package/lib/sandbox/constants.ts +4 -0
- package/lib/sandbox/image-build.ts +134 -0
- package/lib/server/adapters/_contract.ts +3 -0
- package/lib/server/adapters/feishu/index.ts +11 -3
- package/lib/server/adapters/feishu/renderer.ts +99 -0
- package/lib/server/adapters/feishu/transport.ts +5 -18
- package/lib/server/daemon.ts +74 -38
- package/lib/server/display.ts +136 -0
- package/lib/server/streamer.ts +5 -4
- package/lib/task/commands/log.ts +3 -3
- package/lib/task/commands/status.ts +102 -21
- package/lib/task/workflow-warnings.ts +121 -0
- package/package.json +2 -2
- package/templates/.agents/rules/create-issue.github.en.md +3 -3
- package/templates/.agents/rules/create-issue.github.zh-CN.md +3 -3
- package/templates/.agents/rules/issue-pr-commands.github.en.md +7 -2
- package/templates/.agents/rules/issue-pr-commands.github.zh-CN.md +7 -2
- package/templates/.agents/rules/issue-sync.github.en.md +13 -0
- package/templates/.agents/rules/issue-sync.github.zh-CN.md +13 -0
- package/templates/.agents/rules/next-step-output.en.md +15 -1
- package/templates/.agents/rules/next-step-output.zh-CN.md +15 -1
- package/templates/.agents/rules/pr-sync.github.en.md +17 -2
- package/templates/.agents/rules/pr-sync.github.zh-CN.md +17 -2
- package/templates/.agents/rules/task-management.en.md +1 -1
- package/templates/.agents/rules/task-management.zh-CN.md +1 -1
- package/templates/.agents/scripts/platform-adapters/platform-sync.github.js +57 -0
- package/templates/.agents/scripts/validate-artifact.js +120 -0
- package/templates/.agents/scripts/workflow-warnings.js +290 -0
- package/templates/.agents/skills/complete-manual-validation/SKILL.en.md +118 -0
- package/templates/.agents/skills/complete-manual-validation/SKILL.zh-CN.md +118 -0
- package/templates/.agents/skills/complete-manual-validation/config/verify.en.json +49 -0
- package/templates/.agents/skills/complete-manual-validation/config/verify.zh-CN.json +49 -0
- package/templates/.agents/skills/complete-manual-validation/reference/report-template.en.md +48 -0
- package/templates/.agents/skills/complete-manual-validation/reference/report-template.zh-CN.md +48 -0
- package/templates/.agents/skills/complete-manual-validation/reference/summary-update.en.md +60 -0
- package/templates/.agents/skills/complete-manual-validation/reference/summary-update.zh-CN.md +87 -0
- package/templates/.agents/skills/create-pr/SKILL.en.md +2 -0
- package/templates/.agents/skills/create-pr/SKILL.zh-CN.md +2 -0
- package/templates/.agents/skills/create-task/SKILL.en.md +4 -1
- package/templates/.agents/skills/create-task/SKILL.zh-CN.md +4 -1
- package/templates/.agents/skills/update-agent-infra/scripts/sync-templates.js +7 -0
- package/templates/.agents/templates/task.en.md +7 -0
- package/templates/.agents/templates/task.zh-CN.md +7 -0
- package/templates/.claude/commands/complete-manual-validation.en.md +9 -0
- package/templates/.claude/commands/complete-manual-validation.zh-CN.md +9 -0
- package/templates/.gemini/commands/_project_/complete-manual-validation.en.toml +8 -0
- package/templates/.gemini/commands/_project_/complete-manual-validation.zh-CN.toml +8 -0
- package/templates/.github/workflows/metadata-sync.yml +5 -0
- package/templates/.opencode/commands/complete-manual-validation.en.md +11 -0
- package/templates/.opencode/commands/complete-manual-validation.zh-CN.md +11 -0
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: complete-manual-validation
|
|
3
|
+
description: >
|
|
4
|
+
Mark PR manual validation as completed and update the manual-validation section
|
|
5
|
+
in the existing PR summary comment in place.
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Complete Manual Validation
|
|
9
|
+
|
|
10
|
+
## Boundary / Critical Rules
|
|
11
|
+
|
|
12
|
+
- This skill closes the manual-validation status in an existing PR summary comment; it does not create a parallel ordinary validation comment.
|
|
13
|
+
- It must write `manual-validation.md` or `manual-validation-r{N}.md` so later PR summary refreshes can reuse the validation result.
|
|
14
|
+
- If the `sync-pr` summary comment is missing, fail instead of creating a partial fallback summary.
|
|
15
|
+
- After this skill runs, update `task.md` immediately.
|
|
16
|
+
|
|
17
|
+
Version stamp rule: when creating or updating `task.md` frontmatter, read `.agents/rules/version-stamp.md` first and write or refresh `agent_infra_version`.
|
|
18
|
+
|
|
19
|
+
## Step 0: State Check (pre-execution hard gate)
|
|
20
|
+
|
|
21
|
+
After loading workflow / skill / rules instructions, and before any task-state judgment or user-visible conclusion, run the state check first. Reading instruction files does not count as an external-state action or conclusion.
|
|
22
|
+
|
|
23
|
+
Run these commands and paste the raw output into both the user-facing reply and this round's `## State Check` section:
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
git status -s
|
|
27
|
+
ls -la .agents/workspace/active/{task-id}/
|
|
28
|
+
tail .agents/workspace/active/{task-id}/task.md
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Task id short ref
|
|
32
|
+
|
|
33
|
+
> If `{task-id}` matches `^[#]?[0-9]+$` (bare numeric or `#`-prefixed), follow the "SKILL parameter resolver" section of `.agents/rules/task-short-id.md`; treat `{task-id}` as the resolved full `TASK-YYYYMMDD-HHMMSS` form for every downstream command.
|
|
34
|
+
|
|
35
|
+
## Step Start: Write the started Marker
|
|
36
|
+
|
|
37
|
+
After confirming prerequisites and the artifact round, and before this round's first artifact action, append a started marker to task.md `## Activity Log`:
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
- {YYYY-MM-DD HH:mm:ss±HH:MM} — **Complete Manual Validation [started]** by {agent} — started
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
See the "Activity Log started / done dual-marker convention" in `.agents/rules/task-management.md`.
|
|
44
|
+
|
|
45
|
+
## Steps
|
|
46
|
+
|
|
47
|
+
### 1. Parse Arguments
|
|
48
|
+
|
|
49
|
+
Input:
|
|
50
|
+
|
|
51
|
+
```text
|
|
52
|
+
complete-manual-validation {task-ref} [{pr-ref}] {verification-summary}
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
- `{task-ref}` is required.
|
|
56
|
+
- `{pr-ref}` is optional and accepts `#NN`, `NN`, or a full PR URL.
|
|
57
|
+
- `{verification-summary}` is required. If it is missing, stop and ask for a validation summary; do not write an artifact or update the PR.
|
|
58
|
+
|
|
59
|
+
### 2. Verify Prerequisites
|
|
60
|
+
|
|
61
|
+
Check:
|
|
62
|
+
- `.agents/workspace/active/{task-id}/task.md`
|
|
63
|
+
- a valid PR: prefer explicit `{pr-ref}`, otherwise read `pr_number` from task.md frontmatter
|
|
64
|
+
|
|
65
|
+
Stop if the task is missing, the validation summary is missing, or no valid PR can be resolved.
|
|
66
|
+
|
|
67
|
+
### 3. Determine Artifact Round
|
|
68
|
+
|
|
69
|
+
Scan the task directory:
|
|
70
|
+
- no `manual-validation.md` and no `manual-validation-r*.md` -> write `manual-validation.md`
|
|
71
|
+
- `manual-validation.md` exists and no `manual-validation-r*.md` -> write `manual-validation-r2.md`
|
|
72
|
+
- `manual-validation-r{N}.md` exists -> write `manual-validation-r{N+1}.md`
|
|
73
|
+
|
|
74
|
+
### 4. Update the PR Summary
|
|
75
|
+
|
|
76
|
+
Before this step, read:
|
|
77
|
+
- `.agents/rules/issue-sync.md`
|
|
78
|
+
- `.agents/rules/pr-sync.md`
|
|
79
|
+
- `reference/summary-update.md`
|
|
80
|
+
|
|
81
|
+
Follow `reference/summary-update.md` to resolve the PR number, find the `sync-pr` summary comment, extract the manual-validation scope, and update the section to `### ✅ Manual Validation Passed`.
|
|
82
|
+
|
|
83
|
+
### 5. Create the Manual Validation Artifact
|
|
84
|
+
|
|
85
|
+
Before this step, read `reference/report-template.md`. Create `{manual-validation-artifact}` with state check, validation verdict, validation scope, validation details, and PR summary sync result.
|
|
86
|
+
|
|
87
|
+
### 6. Update task.md
|
|
88
|
+
|
|
89
|
+
Get the current time:
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
date "+%Y-%m-%d %H:%M:%S%:z"
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
Update `.agents/workspace/active/{task-id}/task.md`:
|
|
96
|
+
- `updated_at`: current time
|
|
97
|
+
- `assigned_to`: current agent
|
|
98
|
+
- `agent_infra_version`: value from `.agents/rules/version-stamp.md`
|
|
99
|
+
- keep `current_step` unchanged
|
|
100
|
+
- append the `{manual-validation-artifact}` link and PR summary sync result to `## Implementation Notes`
|
|
101
|
+
- append Activity Log:
|
|
102
|
+
```
|
|
103
|
+
- {YYYY-MM-DD HH:mm:ss±HH:MM} — **Complete Manual Validation** by {agent} — Manual validation passed → {manual-validation-artifact}; {summary-result}
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
If the task has a valid `issue_number`, follow `.agents/rules/issue-sync.md` to update the task comment and publish the `{manual-validation-artifact}` comment.
|
|
107
|
+
|
|
108
|
+
### 7. Verification Gate
|
|
109
|
+
|
|
110
|
+
Run:
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
node .agents/scripts/validate-artifact.js gate complete-manual-validation .agents/workspace/active/{task-id} {manual-validation-artifact} --format text
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### 8. Tell the User
|
|
117
|
+
|
|
118
|
+
Report the artifact path, PR summary sync result, and verification output. Before rendering the final output, read `.agents/rules/next-step-output.md` and append `Completed at: YYYY-MM-DD HH:mm:ss` as the absolute last line.
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: complete-manual-validation
|
|
3
|
+
description: >
|
|
4
|
+
标记 PR 人工验证已完成,并原地更新 PR 摘要评论中的人工校验段落。
|
|
5
|
+
当维护者已完成真实环境或权限相关人工验证、需要统一收尾 PR 摘要时使用。
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# 完成人工验证
|
|
9
|
+
|
|
10
|
+
## 行为边界 / 关键规则
|
|
11
|
+
|
|
12
|
+
- 本技能用于收尾已有 PR 摘要评论中的人工校验状态,不创建并行的普通验证留言。
|
|
13
|
+
- 必须写入 `manual-validation.md` 或 `manual-validation-r{N}.md`,让后续 PR 摘要刷新可复用人工验证结果。
|
|
14
|
+
- 找不到 `sync-pr` 摘要评论时失败,不创建部分摘要兜底。
|
|
15
|
+
- 执行本技能后必须立即更新 `task.md`。
|
|
16
|
+
|
|
17
|
+
版本戳规则:创建或更新 `task.md` frontmatter 时,先读取 `.agents/rules/version-stamp.md`,并写入或刷新 `agent_infra_version`。
|
|
18
|
+
|
|
19
|
+
## 第 0 步:状态核对(执行前硬约束)
|
|
20
|
+
|
|
21
|
+
在加载 workflow / skill / rules 指令之后、做任何任务状态判断或用户可见结论之前,必须先执行状态核对。指令类文件读取不算对外动作或结论。
|
|
22
|
+
|
|
23
|
+
运行以下命令,并把原文粘贴到回复正文和本轮产物的 `## 状态核对` 段:
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
git status -s
|
|
27
|
+
ls -la .agents/workspace/active/{task-id}/
|
|
28
|
+
tail .agents/workspace/active/{task-id}/task.md
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## 任务入参短号别名
|
|
32
|
+
|
|
33
|
+
> 如果 `{task-id}` 入参匹配 `^[#]?[0-9]+$`(裸数字或带 `#` 前缀),先读取 `.agents/rules/task-short-id.md` 的「SKILL 入参解析」段执行解析;后续命令视 `{task-id}` 为解析后的全长 `TASK-YYYYMMDD-HHMMSS` 形式。
|
|
34
|
+
|
|
35
|
+
## 步骤开始:写入 started 标记
|
|
36
|
+
|
|
37
|
+
确认前置条件和产物轮次后、本轮第一个产出动作之前,向 task.md `## 活动日志` 追加一条 started 标记:
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
- {YYYY-MM-DD HH:mm:ss±HH:MM} — **Complete Manual Validation [started]** by {agent} — started
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
格式与配对规则见 `.agents/rules/task-management.md` 的「Activity Log started / done 双标记约定」。
|
|
44
|
+
|
|
45
|
+
## 执行步骤
|
|
46
|
+
|
|
47
|
+
### 1. 解析入参
|
|
48
|
+
|
|
49
|
+
输入格式:
|
|
50
|
+
|
|
51
|
+
```text
|
|
52
|
+
complete-manual-validation {task-ref} [{pr-ref}] {verification-summary}
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
- `{task-ref}` 必填。
|
|
56
|
+
- `{pr-ref}` 可选,支持 `#NN`、`NN` 或完整 PR URL。
|
|
57
|
+
- `{verification-summary}` 必填。若缺失,立即停止并提示补充验证说明;不写产物、不更新 PR。
|
|
58
|
+
|
|
59
|
+
### 2. 验证前置条件
|
|
60
|
+
|
|
61
|
+
检查:
|
|
62
|
+
- `.agents/workspace/active/{task-id}/task.md`
|
|
63
|
+
- 有效 PR:优先使用显式 `{pr-ref}`,否则读取 task.md frontmatter 的 `pr_number`
|
|
64
|
+
|
|
65
|
+
如果任务不存在、验证说明缺失,或无法解析有效 PR,立即停止。
|
|
66
|
+
|
|
67
|
+
### 3. 确定产物轮次
|
|
68
|
+
|
|
69
|
+
扫描任务目录:
|
|
70
|
+
- 不存在 `manual-validation.md` 且不存在 `manual-validation-r*.md` -> 本轮产物为 `manual-validation.md`
|
|
71
|
+
- 已存在 `manual-validation.md` 且不存在 `manual-validation-r*.md` -> 本轮产物为 `manual-validation-r2.md`
|
|
72
|
+
- 已存在 `manual-validation-r{N}.md` -> 本轮产物为 `manual-validation-r{N+1}.md`
|
|
73
|
+
|
|
74
|
+
### 4. 更新 PR 摘要
|
|
75
|
+
|
|
76
|
+
执行此步骤前,先读取:
|
|
77
|
+
- `.agents/rules/issue-sync.md`
|
|
78
|
+
- `.agents/rules/pr-sync.md`
|
|
79
|
+
- `reference/summary-update.md`
|
|
80
|
+
|
|
81
|
+
按 `reference/summary-update.md` 解析 PR 号、查找 `sync-pr` 摘要评论、提取待人工校验范围,并把人工校验段落更新为 `### ✅ 人工验证已通过`。
|
|
82
|
+
|
|
83
|
+
### 5. 创建人工验证产物
|
|
84
|
+
|
|
85
|
+
执行此步骤前,先读取 `reference/report-template.md`。创建 `{manual-validation-artifact}`,记录状态核对、验证结论、验证范围、验证详情和 PR 摘要同步结果。
|
|
86
|
+
|
|
87
|
+
### 6. 更新 task.md
|
|
88
|
+
|
|
89
|
+
获取当前时间:
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
date "+%Y-%m-%d %H:%M:%S%:z"
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
更新 `.agents/workspace/active/{task-id}/task.md`:
|
|
96
|
+
- `updated_at`:{当前时间}
|
|
97
|
+
- `assigned_to`:{当前代理}
|
|
98
|
+
- `agent_infra_version`:按 `.agents/rules/version-stamp.md` 取值
|
|
99
|
+
- 保持 `current_step` 不变
|
|
100
|
+
- 在 `## 实现备注` 中追加 `{manual-validation-artifact}` 链接和 PR 摘要同步结果
|
|
101
|
+
- 追加 Activity Log:
|
|
102
|
+
```
|
|
103
|
+
- {YYYY-MM-DD HH:mm:ss±HH:MM} — **Complete Manual Validation** by {agent} — Manual validation passed → {manual-validation-artifact}; {summary-result}
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
如任务存在有效 `issue_number`,按 `.agents/rules/issue-sync.md` 更新 task 评论并发布 `{manual-validation-artifact}` 评论。
|
|
107
|
+
|
|
108
|
+
### 7. 完成校验
|
|
109
|
+
|
|
110
|
+
运行完成校验:
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
node .agents/scripts/validate-artifact.js gate complete-manual-validation .agents/workspace/active/{task-id} {manual-validation-artifact} --format text
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### 8. 告知用户
|
|
117
|
+
|
|
118
|
+
输出产物路径、PR 摘要同步结果和当次完成校验输出。渲染最终输出前,先读取 `.agents/rules/next-step-output.md`,并在绝对最后一行追加 `Completed at: YYYY-MM-DD HH:mm:ss`。
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skill": "complete-manual-validation",
|
|
3
|
+
"checks": {
|
|
4
|
+
"task-meta": {
|
|
5
|
+
"required_fields": [
|
|
6
|
+
"id",
|
|
7
|
+
"type",
|
|
8
|
+
"workflow",
|
|
9
|
+
"status",
|
|
10
|
+
"created_at",
|
|
11
|
+
"updated_at",
|
|
12
|
+
"agent_infra_version",
|
|
13
|
+
"current_step",
|
|
14
|
+
"assigned_to"
|
|
15
|
+
]
|
|
16
|
+
},
|
|
17
|
+
"artifact": {
|
|
18
|
+
"file_pattern": "manual-validation.md|manual-validation-r{N}.md",
|
|
19
|
+
"required_sections": [
|
|
20
|
+
"State Check",
|
|
21
|
+
"Validation Verdict",
|
|
22
|
+
"Validation Scope",
|
|
23
|
+
"Validation Details",
|
|
24
|
+
"PR Summary Sync"
|
|
25
|
+
],
|
|
26
|
+
"freshness_minutes": 30,
|
|
27
|
+
"required_patterns": [
|
|
28
|
+
"^\\$ "
|
|
29
|
+
]
|
|
30
|
+
},
|
|
31
|
+
"activity-log": {
|
|
32
|
+
"expected_action_pattern": "Complete Manual Validation",
|
|
33
|
+
"freshness_minutes": 30
|
|
34
|
+
},
|
|
35
|
+
"review-ledger": {
|
|
36
|
+
"stage_scope": ["analysis", "plan", "code"]
|
|
37
|
+
},
|
|
38
|
+
"platform-sync": {
|
|
39
|
+
"when": "pr_number_exists",
|
|
40
|
+
"expected_pr_comment_marker_key": "prSummary",
|
|
41
|
+
"expected_pr_comment_required_patterns": [
|
|
42
|
+
"^### ✅ Manual Validation Passed$"
|
|
43
|
+
],
|
|
44
|
+
"verify_task_comment_content": true,
|
|
45
|
+
"verify_issue_type": true,
|
|
46
|
+
"verify_issue_fields": false
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skill": "complete-manual-validation",
|
|
3
|
+
"checks": {
|
|
4
|
+
"task-meta": {
|
|
5
|
+
"required_fields": [
|
|
6
|
+
"id",
|
|
7
|
+
"type",
|
|
8
|
+
"workflow",
|
|
9
|
+
"status",
|
|
10
|
+
"created_at",
|
|
11
|
+
"updated_at",
|
|
12
|
+
"agent_infra_version",
|
|
13
|
+
"current_step",
|
|
14
|
+
"assigned_to"
|
|
15
|
+
]
|
|
16
|
+
},
|
|
17
|
+
"artifact": {
|
|
18
|
+
"file_pattern": "manual-validation.md|manual-validation-r{N}.md",
|
|
19
|
+
"required_sections": [
|
|
20
|
+
"状态核对",
|
|
21
|
+
"验证结论",
|
|
22
|
+
"验证范围",
|
|
23
|
+
"验证详情",
|
|
24
|
+
"PR 摘要同步"
|
|
25
|
+
],
|
|
26
|
+
"freshness_minutes": 30,
|
|
27
|
+
"required_patterns": [
|
|
28
|
+
"^\\$ "
|
|
29
|
+
]
|
|
30
|
+
},
|
|
31
|
+
"activity-log": {
|
|
32
|
+
"expected_action_pattern": "Complete Manual Validation",
|
|
33
|
+
"freshness_minutes": 30
|
|
34
|
+
},
|
|
35
|
+
"review-ledger": {
|
|
36
|
+
"stage_scope": ["analysis", "plan", "code"]
|
|
37
|
+
},
|
|
38
|
+
"platform-sync": {
|
|
39
|
+
"when": "pr_number_exists",
|
|
40
|
+
"expected_pr_comment_marker_key": "prSummary",
|
|
41
|
+
"expected_pr_comment_required_patterns": [
|
|
42
|
+
"^### ✅ 人工验证已通过$"
|
|
43
|
+
],
|
|
44
|
+
"verify_task_comment_content": true,
|
|
45
|
+
"verify_issue_type": true,
|
|
46
|
+
"verify_issue_fields": false
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Manual Validation Completion Report Template
|
|
2
|
+
|
|
3
|
+
Read this file before creating `manual-validation.md` / `manual-validation-r{N}.md`.
|
|
4
|
+
|
|
5
|
+
````markdown
|
|
6
|
+
# Manual Validation Completion Report
|
|
7
|
+
|
|
8
|
+
- **Validation Round**: Round {N}
|
|
9
|
+
- **Artifact File**: `manual-validation.md`
|
|
10
|
+
|
|
11
|
+
## State Check
|
|
12
|
+
|
|
13
|
+
```text
|
|
14
|
+
$ git status -s
|
|
15
|
+
$ ls -la .agents/workspace/active/{task-id}/
|
|
16
|
+
$ tail .agents/workspace/active/{task-id}/task.md
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Validation Verdict
|
|
20
|
+
|
|
21
|
+
- Verdict: passed
|
|
22
|
+
- Validation time: {YYYY-MM-DD HH:mm:ss±HH:MM}
|
|
23
|
+
- Operator: {agent}
|
|
24
|
+
|
|
25
|
+
## Validation Scope
|
|
26
|
+
|
|
27
|
+
- PR: #{pr-number}
|
|
28
|
+
- Summary comment: {comment-id or URL}
|
|
29
|
+
- Manual-validation items:
|
|
30
|
+
- {item-1}
|
|
31
|
+
|
|
32
|
+
## Validation Details
|
|
33
|
+
|
|
34
|
+
{verification-summary}
|
|
35
|
+
|
|
36
|
+
## PR Summary Sync
|
|
37
|
+
|
|
38
|
+
- Result: {summary-result}
|
|
39
|
+
- Summary comment: {comment-id or URL}
|
|
40
|
+
- Updated status: `### ✅ Manual Validation Passed`
|
|
41
|
+
````
|
|
42
|
+
|
|
43
|
+
## Filling Rules
|
|
44
|
+
|
|
45
|
+
- Keep `Validation Details` grounded in the user-provided validation notes.
|
|
46
|
+
- Derive `Validation Scope` from the PR summary's manual-verification section.
|
|
47
|
+
- `PR Summary Sync` must record success, skip, or failure.
|
|
48
|
+
- Only write a passing artifact after the summary comment is updated or skipped because there is no diff.
|
package/templates/.agents/skills/complete-manual-validation/reference/report-template.zh-CN.md
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# 人工验证完成报告模板
|
|
2
|
+
|
|
3
|
+
创建 `manual-validation.md` / `manual-validation-r{N}.md` 前先读取本文件。
|
|
4
|
+
|
|
5
|
+
````markdown
|
|
6
|
+
# 人工验证完成报告
|
|
7
|
+
|
|
8
|
+
- **验证轮次**:Round {N}
|
|
9
|
+
- **产物文件**:`manual-validation.md`
|
|
10
|
+
|
|
11
|
+
## 状态核对
|
|
12
|
+
|
|
13
|
+
```text
|
|
14
|
+
$ git status -s
|
|
15
|
+
$ ls -la .agents/workspace/active/{task-id}/
|
|
16
|
+
$ tail .agents/workspace/active/{task-id}/task.md
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## 验证结论
|
|
20
|
+
|
|
21
|
+
- 结论:通过
|
|
22
|
+
- 验证时间:{YYYY-MM-DD HH:mm:ss±HH:MM}
|
|
23
|
+
- 执行者:{agent}
|
|
24
|
+
|
|
25
|
+
## 验证范围
|
|
26
|
+
|
|
27
|
+
- PR:#{pr-number}
|
|
28
|
+
- 摘要评论:{comment-id 或 URL}
|
|
29
|
+
- 待人工校验项:
|
|
30
|
+
- {item-1}
|
|
31
|
+
|
|
32
|
+
## 验证详情
|
|
33
|
+
|
|
34
|
+
{verification-summary}
|
|
35
|
+
|
|
36
|
+
## PR 摘要同步
|
|
37
|
+
|
|
38
|
+
- 结果:{summary-result}
|
|
39
|
+
- 摘要评论:{comment-id 或 URL}
|
|
40
|
+
- 更新状态:`### ✅ 人工验证已通过`
|
|
41
|
+
````
|
|
42
|
+
|
|
43
|
+
## 填写规则
|
|
44
|
+
|
|
45
|
+
- `验证详情` 保留用户提供的人工验证说明,不改写成未经确认的结论。
|
|
46
|
+
- `验证范围` 来自 PR 摘要评论中的 `### ⚠️ 需人工校验` 段。
|
|
47
|
+
- `PR 摘要同步` 必须记录成功、跳过或失败结果。
|
|
48
|
+
- 只有在摘要评论已成功更新或无 diff 跳过时,才写入通过产物。
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# PR Summary Manual Validation Update
|
|
2
|
+
|
|
3
|
+
Read this file before `complete-manual-validation` updates the PR summary comment.
|
|
4
|
+
|
|
5
|
+
## Responsibility Boundary
|
|
6
|
+
|
|
7
|
+
This file only describes PR summary comment updates. The manual-validation artifact schema lives in `reference/report-template.md`.
|
|
8
|
+
|
|
9
|
+
## PR Number Resolution
|
|
10
|
+
|
|
11
|
+
1. Resolve `{task-ref}` to the task directory and read `task.md`.
|
|
12
|
+
2. Prefer `task.md` frontmatter `pr_number`.
|
|
13
|
+
3. If `pr_number` is empty, parse `{pr-ref}` from user input: `#123`, `123`, or a full PR URL.
|
|
14
|
+
4. If `task.md` already has `pr_number` and the user also passed `{pr-ref}`, they must match.
|
|
15
|
+
5. If they differ, fail with `summary failed: pr_number mismatch`. Do not write an artifact or PATCH a comment.
|
|
16
|
+
6. If both are missing, fail with `summary failed: missing pr_number`. Do not write an artifact or PATCH a comment.
|
|
17
|
+
|
|
18
|
+
## Required Reads
|
|
19
|
+
|
|
20
|
+
Before remote operations, read:
|
|
21
|
+
- `.agents/rules/issue-sync.md` to resolve upstream repository and permissions.
|
|
22
|
+
- `.agents/rules/pr-sync.md` to reuse the PR summary hidden marker, Issues comments API, and shell safety rules.
|
|
23
|
+
|
|
24
|
+
## Comment Lookup
|
|
25
|
+
|
|
26
|
+
Fetch ordinary PR comments with the current platform's Issues comments API. Follow the concrete command pattern in `.agents/rules/pr-sync.md`.
|
|
27
|
+
|
|
28
|
+
Find the `<!-- sync-pr:{task-id}:summary -->` summary comment. If it is missing, fail with `summary failed: missing sync-pr summary`.
|
|
29
|
+
|
|
30
|
+
On failure, do not create an ordinary validation comment, do not create a partial summary comment, and do not write a `manual-validation*` artifact.
|
|
31
|
+
|
|
32
|
+
## Manual Validation Scope Extraction
|
|
33
|
+
|
|
34
|
+
- If a `### ⚠️ Manual Verification Required` section exists, take that section until the next `### ` heading.
|
|
35
|
+
- If the current summary already says `### ✅ Manual Validation Passed`, allow a new validation artifact round and update the details.
|
|
36
|
+
- If the current summary says `### ✅ No Manual Verification Needed`, stop and report that this PR does not need manual validation; do not mark it as passed.
|
|
37
|
+
|
|
38
|
+
## Three-Branch Rendering
|
|
39
|
+
|
|
40
|
+
The updated `{manual-validation-section}` is:
|
|
41
|
+
|
|
42
|
+
```markdown
|
|
43
|
+
### ✅ Manual Validation Passed
|
|
44
|
+
|
|
45
|
+
- Validation time: {time}
|
|
46
|
+
- Validation notes: {verification-summary}
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Later `pr-sync` aggregation renders in this priority order:
|
|
50
|
+
1. latest `manual-validation.md` / `manual-validation-r{N}.md` has a passed verdict -> `### ✅ Manual Validation Passed`
|
|
51
|
+
2. no passed artifact and retained manual-validation items exist -> `### ⚠️ Manual Verification Required`
|
|
52
|
+
3. no passed artifact and no retained manual-validation items -> `### ✅ No Manual Verification Needed`
|
|
53
|
+
|
|
54
|
+
## PATCH Rules
|
|
55
|
+
|
|
56
|
+
Update existing comments with Issues comments PATCH and follow the heredoc safety rules in `.agents/rules/pr-sync.md`.
|
|
57
|
+
|
|
58
|
+
## Result Reporting
|
|
59
|
+
|
|
60
|
+
Return `summary updated`, `summary skipped (no diff)`, or `summary failed: <reason>`.
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# PR 摘要人工验证更新
|
|
2
|
+
|
|
3
|
+
在 `complete-manual-validation` 更新 PR 摘要评论前先读取本文件。
|
|
4
|
+
|
|
5
|
+
## 职责边界
|
|
6
|
+
|
|
7
|
+
本文件只描述 PR 摘要评论更新流程。人工验证产物结构见 `reference/report-template.md`。
|
|
8
|
+
|
|
9
|
+
## PR 号解析
|
|
10
|
+
|
|
11
|
+
1. 从 `{task-ref}` 定位任务目录并读取 `task.md`。
|
|
12
|
+
2. 优先读取 `task.md` frontmatter 的 `pr_number`。
|
|
13
|
+
3. 如果 `pr_number` 为空,再从用户输入的 `{pr-ref}` 解析:
|
|
14
|
+
- `#123`
|
|
15
|
+
- `123`
|
|
16
|
+
- `{platform-host}/{owner}/{repo}/pull/123`
|
|
17
|
+
4. 如果 `task.md` 已有 `pr_number`,且用户也传入 `{pr-ref}`,两者必须一致。
|
|
18
|
+
5. 两者不一致时失败:`summary failed: pr_number mismatch`。不写 artifact,不 PATCH 评论。
|
|
19
|
+
6. 两者都缺失时失败:`summary failed: missing pr_number`。不写 artifact,不 PATCH 评论。
|
|
20
|
+
|
|
21
|
+
## 前置读取
|
|
22
|
+
|
|
23
|
+
执行远端操作前先读取:
|
|
24
|
+
- `.agents/rules/issue-sync.md`,完成 upstream 仓库检测和权限检测。
|
|
25
|
+
- `.agents/rules/pr-sync.md`,复用 PR 摘要隐藏标记、Issues comments API 和 Shell 安全规则。
|
|
26
|
+
|
|
27
|
+
## 评论查找
|
|
28
|
+
|
|
29
|
+
使用当前平台的 Issues comments API 查询 PR 上的普通评论,具体命令遵循 `.agents/rules/pr-sync.md`。
|
|
30
|
+
|
|
31
|
+
查找以以下标记开头或包含该标记的评论:
|
|
32
|
+
|
|
33
|
+
```html
|
|
34
|
+
<!-- sync-pr:{task-id}:summary -->
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
找不到时失败:
|
|
38
|
+
|
|
39
|
+
```text
|
|
40
|
+
summary failed: missing sync-pr summary
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
失败时不创建普通验证留言,不创建部分摘要评论,不写 `manual-validation*` artifact。
|
|
44
|
+
|
|
45
|
+
## 待人工校验范围提取
|
|
46
|
+
|
|
47
|
+
从当前摘要评论中提取人工校验范围:
|
|
48
|
+
- 如果存在 `### ⚠️ 需人工校验` 段,取该段到下一个 `### ` heading 之前的内容。
|
|
49
|
+
- 如果当前摘要已是 `### ✅ 人工验证已通过`,允许再次写入新一轮验证产物并更新详情。
|
|
50
|
+
- 如果当前摘要是 `### ✅ 无需人工校验`,停止并提示当前 PR 无需人工校验;不误标为人工验证已通过。
|
|
51
|
+
|
|
52
|
+
## 三分支渲染
|
|
53
|
+
|
|
54
|
+
更新后的 `{manual-validation-section}` 为:
|
|
55
|
+
|
|
56
|
+
```markdown
|
|
57
|
+
### ✅ 人工验证已通过
|
|
58
|
+
|
|
59
|
+
- 验证时间:{time}
|
|
60
|
+
- 验证说明:{verification-summary}
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
后续 `pr-sync` 聚合时按以下优先级渲染:
|
|
64
|
+
1. 最新 `manual-validation.md` / `manual-validation-r{N}.md` 结论为通过 -> `### ✅ 人工验证已通过`
|
|
65
|
+
2. 没有通过产物且仍有保留人工校验项 -> `### ⚠️ 需人工校验`
|
|
66
|
+
3. 没有通过产物且无保留人工校验项 -> `### ✅ 无需人工校验`
|
|
67
|
+
|
|
68
|
+
## PATCH 规则
|
|
69
|
+
|
|
70
|
+
更新已有评论时必须使用 Issues comments PATCH,具体命令遵循 `.agents/rules/pr-sync.md`。
|
|
71
|
+
|
|
72
|
+
Shell 安全规则:
|
|
73
|
+
- 先读取本地和远端正文,再构造完整正文。
|
|
74
|
+
- heredoc 使用单引号 `<<'EOF'`。
|
|
75
|
+
- 不在 heredoc 内执行变量展开或命令替换。
|
|
76
|
+
- 构造含 `<!-- -->` 的正文时不用 `echo`。
|
|
77
|
+
|
|
78
|
+
## 结果回传
|
|
79
|
+
|
|
80
|
+
返回以下结果之一:
|
|
81
|
+
- `summary updated`
|
|
82
|
+
- `summary skipped (no diff)`
|
|
83
|
+
- `summary failed: missing pr_number`
|
|
84
|
+
- `summary failed: pr_number mismatch`
|
|
85
|
+
- `summary failed: missing sync-pr summary`
|
|
86
|
+
- `summary failed: no manual validation required`
|
|
87
|
+
- `summary failed: <reason>`
|
|
@@ -165,3 +165,5 @@ Next step (alternative) - Skip monitoring and archive the task directly:
|
|
|
165
165
|
- Push rejected: suggest `git pull --rebase`
|
|
166
166
|
- Existing PR found: show the current PR URL and stop
|
|
167
167
|
- Inaccessible Issue metadata: skip inheritance and continue
|
|
168
|
+
- PR creation failed with an associated `{task-id}`: run `node .agents/scripts/workflow-warnings.js add .agents/workspace/active/{task-id} --step create-pr --severity ACTION_REQUIRED --code PR_CREATE_FAILED --target pr --message "{reason}" --action "Fix push, permission, or platform issues and rerun create-pr"` and do not write `pr_number`
|
|
169
|
+
- PR summary comment failed with an associated `{task-id}`: record a `COMMENT_SYNC_FAILED` warning per `.agents/rules/pr-sync.md`, without rolling back an already-created PR
|
|
@@ -165,3 +165,5 @@ node .agents/scripts/validate-artifact.js gate create-pr .agents/workspace/activ
|
|
|
165
165
|
- 推送被拒绝:建议执行 `git pull --rebase`
|
|
166
166
|
- 已存在 PR:直接输出当前 PR URL 并结束
|
|
167
167
|
- 无法访问 Issue 元数据:跳过继承并继续
|
|
168
|
+
- PR 创建失败且已关联 `{task-id}`:调用 `node .agents/scripts/workflow-warnings.js add .agents/workspace/active/{task-id} --step create-pr --severity ACTION_REQUIRED --code PR_CREATE_FAILED --target pr --message "{reason}" --action "修复推送、权限或平台问题后重跑 create-pr"`,不写 `pr_number`
|
|
169
|
+
- PR 摘要评论失败且已关联 `{task-id}`:按 `.agents/rules/pr-sync.md` 记录 `COMMENT_SYNC_FAILED` 告警,不回滚已创建 PR
|
|
@@ -135,7 +135,7 @@ The rule's content is determined by the configured code platform:
|
|
|
135
135
|
|
|
136
136
|
Handle the result:
|
|
137
137
|
- Rule successfully created the Issue: `issue_number` has been written back to task.md per the rule; continue by reading `.agents/rules/issue-sync.md`, completing upstream repository and permission detection, then sync the task comment and set `status: waiting-for-triage` by rule
|
|
138
|
-
- Rule failed (auth / network / template parse / etc.): do not roll back task.md; do NOT append an extra Activity Log entry;
|
|
138
|
+
- Rule failed (auth / network / template parse / etc.): do not roll back task.md; do NOT append an extra Activity Log entry; first run `node .agents/scripts/workflow-warnings.js add .agents/workspace/active/{task-id} --step create-task --severity ACTION_REQUIRED --code ISSUE_CREATE_FAILED --target issue --message "{error_code}: {error_message}" --action "Fix auth/network/template issues and manually retry Issue creation, or create/find an Issue and write issue_number"` to record a generic warning; then follow "Scenario C: Issue creation failed" output to surface `error_code` and `error_message`
|
|
139
139
|
- Rule was a no-op (custom or empty platform): do not create comments, do not block the workflow, and do not write an Activity Log entry
|
|
140
140
|
- task.md already has `issue_number`: the rule's prerequisite check skips creation; `create-task` proceeds directly to step 5
|
|
141
141
|
|
|
@@ -231,6 +231,9 @@ Next step - run requirements analysis:
|
|
|
231
231
|
- Codex CLI: $analyze-task {task-ref}
|
|
232
232
|
|
|
233
233
|
For later platform sync: after fixing auth / network / template issues, manually run the Issue creation flow in `.agents/rules/create-issue.md` for this task; or manually create/find an Issue and write `issue_number` into task.md so later skills can take over cascade sync.
|
|
234
|
+
|
|
235
|
+
[ACTION REQUIRED] Workflow warnings are open:
|
|
236
|
+
- WW-N ISSUE_CREATE_FAILED (issue): Fix auth/network/template issues and manually retry Issue creation, or create/find an Issue and write issue_number
|
|
234
237
|
```
|
|
235
238
|
|
|
236
239
|
|
|
@@ -134,7 +134,7 @@ date "+%Y-%m-%d %H:%M:%S%:z"
|
|
|
134
134
|
|
|
135
135
|
处理结果:
|
|
136
136
|
- 规则成功创建 Issue:`issue_number` 已按规则回写到 task.md;继续读取 `.agents/rules/issue-sync.md`,完成 upstream 仓库检测和权限检测,然后同步 task 评论并按规则设置 `status: waiting-for-triage`
|
|
137
|
-
- 规则失败(认证 / 网络 / 模板解析等):不回滚 task.md;不追加额外 Activity Log
|
|
137
|
+
- 规则失败(认证 / 网络 / 模板解析等):不回滚 task.md;不追加额外 Activity Log;先调用 `node .agents/scripts/workflow-warnings.js add .agents/workspace/active/{task-id} --step create-task --severity ACTION_REQUIRED --code ISSUE_CREATE_FAILED --target issue --message "{error_code}: {error_message}" --action "修复认证/网络/模板问题后手动重试 Issue 创建,或手动创建/找到 Issue 后写入 issue_number"` 记录通用告警;再按"场景 C:Issue 创建失败"输出向用户透出 `error_code` 与 `error_message`
|
|
138
138
|
- 规则为 no-op(自定义或空平台):不创建评论,不阻塞后续工作流,不写 Activity Log
|
|
139
139
|
- task.md 已存在 `issue_number`:规则中的前置检查会跳过;`create-task` 直接进入步骤 5
|
|
140
140
|
|
|
@@ -230,6 +230,9 @@ Issue 创建失败:
|
|
|
230
230
|
- Codex CLI:$analyze-task {task-ref}
|
|
231
231
|
|
|
232
232
|
后续如需平台同步:修复认证/网络/模板问题后,可按 `.agents/rules/create-issue.md` 对当前任务手动执行一次 Issue 创建;或手动创建/查找 Issue,并把 `issue_number` 写入 task.md,后续技能会接管级联同步。
|
|
233
|
+
|
|
234
|
+
[ACTION REQUIRED] Workflow warnings are open:
|
|
235
|
+
- WW-N ISSUE_CREATE_FAILED (issue): 修复认证/网络/模板问题后手动重试 Issue 创建,或手动创建/找到 Issue 后写入 issue_number
|
|
233
236
|
```
|
|
234
237
|
|
|
235
238
|
|
|
@@ -35,6 +35,7 @@ const DEFAULTS = {
|
|
|
35
35
|
"gemini-cli",
|
|
36
36
|
"opencode"
|
|
37
37
|
],
|
|
38
|
+
"refreshIntervalDays": 7,
|
|
38
39
|
"dockerfile": null,
|
|
39
40
|
"vm": {
|
|
40
41
|
"cpu": null,
|
|
@@ -260,6 +261,12 @@ function listTemplateSkillNames(templateRoot) {
|
|
|
260
261
|
return new Set(
|
|
261
262
|
fs.readdirSync(templateSkillsDir, { withFileTypes: true })
|
|
262
263
|
.filter((entry) => entry.isDirectory())
|
|
264
|
+
.filter((entry) => {
|
|
265
|
+
const skillDir = path.join(templateSkillsDir, entry.name);
|
|
266
|
+
return ['SKILL.md', 'SKILL.en.md', 'SKILL.zh-CN.md'].some((file) =>
|
|
267
|
+
fs.existsSync(path.join(skillDir, file))
|
|
268
|
+
);
|
|
269
|
+
})
|
|
263
270
|
.map((entry) => entry.name)
|
|
264
271
|
);
|
|
265
272
|
}
|
|
@@ -64,6 +64,13 @@ pr_status: pending # PR status: pending (default) | created (PR crea
|
|
|
64
64
|
|
|
65
65
|
<!-- Humans record rulings for needs-human-decision decisions here and flip matching HD- rows in the Review Disagreement Ledger to human-decided. -->
|
|
66
66
|
|
|
67
|
+
## Workflow Warnings
|
|
68
|
+
|
|
69
|
+
<!-- Workflow degradation, platform sync failures, permission gaps, and related events. Keep the header when empty. -->
|
|
70
|
+
|
|
71
|
+
| id | time | step | severity | code | status | target | message | action | resolved_at | resolution |
|
|
72
|
+
|----|------|------|----------|------|--------|--------|---------|--------|-------------|------------|
|
|
73
|
+
|
|
67
74
|
## Activity Log
|
|
68
75
|
|
|
69
76
|
<!-- Append a new entry for each workflow step. Do NOT overwrite previous entries. -->
|