From 179f5e238a0541be01e3599c3037e48ac71ff948 Mon Sep 17 00:00:00 2001 From: bestony <13283837+bestony@users.noreply.github.com> Date: Fri, 20 Feb 2026 14:27:26 +0000 Subject: [PATCH 1/6] chore(plan): update issue-1 plan --- plans/1-workflow.md | 68 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 plans/1-workflow.md diff --git a/plans/1-workflow.md b/plans/1-workflow.md new file mode 100644 index 0000000..fad6503 --- /dev/null +++ b/plans/1-workflow.md @@ -0,0 +1,68 @@ +# 需求分析:Issue #1 一个新的 Workflow:工程师 +## 1. 背景与目标 +- 通过新增 GitHub Actions Workflow,实现对 plans 目录下 Plan 任务的自动检查、执行与提交,减少手工操作。 +- 目标是在有未完成 Plan 时自动驱动 codex action 完成任务,并自动创建 PR 进行提交。 +- 约束为同一时间只允许一个工程师 Workflow 运行,避免并发冲突。 + +## 2. 需求摘要 +- 新增 Workflow 文件 `engineer.yml`。 +- 扫描 `plans` 目录,识别未完成 Plan。 +- 按 Plan FrontMatter 中的 `status` 字段判断任务状态,仅支持 `TODO`、`DOING`、`DONE`。 +- 有未完成任务时触发 codex action 完成任务并创建 PR。 +- 没有未完成任务时结束流程。 +- 需要并发控制,保证同一时间只有一个 Workflow 运行。 + +## 3. 范围定义(In Scope / Out of Scope) +- In Scope: + - Workflow 编写与触发逻辑。 + - Plan 状态解析与判断(仅基于 FrontMatter 的 `status`)。 + - codex action 的调用与完成后自动建 PR。 + - Workflow 并发控制。 +- Out of Scope: + - Plan 任务的业务内容定义与具体实现细节。 + - codex action 的内部实现或训练逻辑。 + - 额外的状态字段或非 FrontMatter 的解析。 + +## 4. 需求拆解 +- 读取 `plans` 目录内所有 Markdown 文件。 +- 解析每个 Plan 的 FrontMatter,提取 `status` 字段。 +- 判定是否存在 `status != DONE` 的 Plan。 +- 如存在: + - 调用 codex action 执行任务处理。 + - 任务完成后更新 Plan 状态并提交更改。 + - 自动创建 PR。 +- 如不存在: + - Workflow 结束,无后续操作。 +- 配置并发策略,确保同一时间只有一个执行实例。 + +## 5. 技术方案建议 +- Workflow 文件命名为 `.github/workflows/engineer.yml`。 +- 使用脚本步骤读取 `plans/*.md`,解析 YAML FrontMatter(可用 `python` 或 `node`)。 +- 在 Workflow 中设置 `concurrency`,如 `concurrency: group: engineer` 并启用 `cancel-in-progress: false`。 +- 调用 codex action:传入检测到的 Plan 文件路径与任务上下文。 +- 完成后使用 `gh` 或 `actions/create-pull-request` 创建 PR。 +- 确保权限:需要 `contents: write` 和 `pull-requests: write`。 + +## 6. 风险与依赖 +- 风险:FrontMatter 缺失或格式错误导致解析失败。 +- 风险:codex action 执行失败导致任务中断。 +- 风险:并发控制配置不当引发重复执行或冲突。 +- 依赖:仓库中存在 plans 文件并符合 FrontMatter 规范。 +- 依赖:codex action 和 PR 创建工具的可用性与权限。 + +## 7. 验收标准 +- 新增 `engineer.yml` 后,Workflow 可在触发时执行。 +- 当 `plans` 中存在 `status` 为 `TODO` 或 `DOING` 的 Plan 时: + - Workflow 触发 codex action。 + - Plan 更新并提交到新 PR。 +- 当 `plans` 中全部为 `DONE` 时:Workflow 正常结束,不创建 PR。 +- 并发控制生效,同一时间只允许一个 engineer Workflow 运行。 +- 解析逻辑只依赖 FrontMatter 的 `status` 字段。 + +## 8. 待确认问题 +- codex action 的具体调用方式与参数格式是否已有约定? +- Plan 文件 FrontMatter 是否允许其他字段,是否需要忽略? +- Workflow 触发条件是手动、定时还是基于事件(如 push/issue)? + +## 9. 更新记录 +- 2026-02-20:根据 issues.edited 事件补充需求分析文档,首次生成。 From f02125e013f2c4ee22d06eeeab938de3918650a3 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 20 Feb 2026 14:45:08 +0000 Subject: [PATCH 2/6] chore(plan): update issue-1 plan --- plans/1-workflow.md | 93 ++++++++++++++++++++++----------------------- 1 file changed, 45 insertions(+), 48 deletions(-) diff --git a/plans/1-workflow.md b/plans/1-workflow.md index fad6503..37a02c1 100644 --- a/plans/1-workflow.md +++ b/plans/1-workflow.md @@ -1,68 +1,65 @@ # 需求分析:Issue #1 一个新的 Workflow:工程师 ## 1. 背景与目标 -- 通过新增 GitHub Actions Workflow,实现对 plans 目录下 Plan 任务的自动检查、执行与提交,减少手工操作。 -- 目标是在有未完成 Plan 时自动驱动 codex action 完成任务,并自动创建 PR 进行提交。 -- 约束为同一时间只允许一个工程师 Workflow 运行,避免并发冲突。 +项目需要新增一个自动化 Workflow(`engineer.yml`),用于定时扫描 `plans/` 中未完成的计划,并在必要时触发 Codex action 完成任务并自动创建 PR。目标是形成一个单线程、安全、有序的工程师自动执行流程,避免重复执行或并发冲突。 ## 2. 需求摘要 -- 新增 Workflow 文件 `engineer.yml`。 -- 扫描 `plans` 目录,识别未完成 Plan。 -- 按 Plan FrontMatter 中的 `status` 字段判断任务状态,仅支持 `TODO`、`DOING`、`DONE`。 -- 有未完成任务时触发 codex action 完成任务并创建 PR。 -- 没有未完成任务时结束流程。 -- 需要并发控制,保证同一时间只有一个 Workflow 运行。 +- 新增 Workflow 文件:`engineer.yml`。 +- 触发方式:定时任务,每小时执行一次。 +- 处理对象:`plans/` 目录中的 Plan Markdown,依赖 FrontMatter 的 `status` 字段(只认 TODO/DOING/DONE)。 +- 多计划处理顺序:按序号顺序处理(例如 1-xxx、2-xxx)。 +- 若存在未完成计划:先判断任务是否已完成,若未完成则调用 Codex action,完成后自动创建 PR。 +- 同一时间仅允许一个 Workflow 执行,避免并发。 +- FrontMatter 允许其他字段,不做字段检查。 ## 3. 范围定义(In Scope / Out of Scope) - In Scope: - - Workflow 编写与触发逻辑。 - - Plan 状态解析与判断(仅基于 FrontMatter 的 `status`)。 - - codex action 的调用与完成后自动建 PR。 - - Workflow 并发控制。 + - 创建 `engineer.yml` Workflow。 + - 每小时调度触发。 + - 扫描 `plans/` 中的 Plan Markdown 并读取 FrontMatter `status`。 + - 按序号顺序选择 TODO/DOING 计划并处理。 + - 判断任务是否已完成;未完成时调用 Codex action。 + - 自动创建 PR 提交变更。 + - 限制并发,同一时间仅运行一个。 - Out of Scope: - - Plan 任务的业务内容定义与具体实现细节。 - - codex action 的内部实现或训练逻辑。 - - 额外的状态字段或非 FrontMatter 的解析。 + - 不制定 Plan 内容结构与字段校验(仅认 `status`)。 + - 不实现复杂优先级策略或多计划并行处理。 + - 不定义 Codex action 以外的执行引擎。 ## 4. 需求拆解 -- 读取 `plans` 目录内所有 Markdown 文件。 -- 解析每个 Plan 的 FrontMatter,提取 `status` 字段。 -- 判定是否存在 `status != DONE` 的 Plan。 -- 如存在: - - 调用 codex action 执行任务处理。 - - 任务完成后更新 Plan 状态并提交更改。 - - 自动创建 PR。 -- 如不存在: - - Workflow 结束,无后续操作。 -- 配置并发策略,确保同一时间只有一个执行实例。 +1. Workflow 基本结构:新增 `engineer.yml`,包含定时触发与基础权限。 +2. Plan 扫描:遍历 `plans/` 目录,解析 FrontMatter,筛选 `status` 为 TODO/DOING 的文件。 +3. 选择顺序:按文件名序号顺序挑选(例如 1-xxx、2-xxx)。 +4. 完成性判断:对选中 Plan 判断任务是否已完成;若已完成则结束,否则进入执行。 +5. Codex 执行:以 GitHub Actions 方式调用 `openai/codex-action@v1`,按约定传递 prompt。 +6. 产出提交:完成任务后生成变更并自动创建 PR。 +7. 并发控制:确保同一时间仅有一个 Workflow 运行。 ## 5. 技术方案建议 -- Workflow 文件命名为 `.github/workflows/engineer.yml`。 -- 使用脚本步骤读取 `plans/*.md`,解析 YAML FrontMatter(可用 `python` 或 `node`)。 -- 在 Workflow 中设置 `concurrency`,如 `concurrency: group: engineer` 并启用 `cancel-in-progress: false`。 -- 调用 codex action:传入检测到的 Plan 文件路径与任务上下文。 -- 完成后使用 `gh` 或 `actions/create-pull-request` 创建 PR。 -- 确保权限:需要 `contents: write` 和 `pull-requests: write`。 +- 使用 `schedule` 事件(cron)每小时触发。 +- 使用 `concurrency` 控制同一时间仅允许一个执行(例如固定 `group` 名称)。 +- Plan 扫描可通过脚本解析 FrontMatter(只关注 `status`,忽略其他字段)。 +- Codex action 参考 issue 中提供的 GitHub Actions 调用方式,嵌入执行步骤。 +- PR 创建可使用 `actions/github-script` 或 `gh` CLI(需匹配权限与可用性)。 ## 6. 风险与依赖 -- 风险:FrontMatter 缺失或格式错误导致解析失败。 -- 风险:codex action 执行失败导致任务中断。 -- 风险:并发控制配置不当引发重复执行或冲突。 -- 依赖:仓库中存在 plans 文件并符合 FrontMatter 规范。 -- 依赖:codex action 和 PR 创建工具的可用性与权限。 +- FrontMatter 解析准确性:需确保只读取 `status`,并容忍其他字段。 +- 任务完成性判断规则不明确:需定义“已完成”的判定依据,避免重复执行。 +- Codex action 运行依赖 `OPENAI_API_KEY` 等密钥配置。 +- 自动创建 PR 需要 `contents`/`pull-requests` 等权限配置。 +- 并发控制配置错误可能导致重复处理或遗漏。 ## 7. 验收标准 -- 新增 `engineer.yml` 后,Workflow 可在触发时执行。 -- 当 `plans` 中存在 `status` 为 `TODO` 或 `DOING` 的 Plan 时: - - Workflow 触发 codex action。 - - Plan 更新并提交到新 PR。 -- 当 `plans` 中全部为 `DONE` 时:Workflow 正常结束,不创建 PR。 -- 并发控制生效,同一时间只允许一个 engineer Workflow 运行。 -- 解析逻辑只依赖 FrontMatter 的 `status` 字段。 +- 每小时自动触发一次 Workflow。 +- 在 `plans/` 中存在 TODO/DOING 时,按序号顺序选取并处理。 +- 仅依据 FrontMatter `status` 判断,不校验其他字段。 +- 若任务未完成,成功调用 Codex action 并完成工作。 +- 执行结束后自动创建 PR。 +- 同时只允许一个 Workflow 运行。 ## 8. 待确认问题 -- codex action 的具体调用方式与参数格式是否已有约定? -- Plan 文件 FrontMatter 是否允许其他字段,是否需要忽略? -- Workflow 触发条件是手动、定时还是基于事件(如 push/issue)? +- 任务“已完成”的具体判定规则是什么(例如基于文件内容、PR 是否已存在等)? +- PR 的命名规范、分支命名规范是否有约定? +- Plan 执行完成后是否需要更新 Plan 文件的 `status`?若需要,更新为 DONE 的具体时机? ## 9. 更新记录 -- 2026-02-20:根据 issues.edited 事件补充需求分析文档,首次生成。 +- 2026-02-20 初始化需求分析并补充最新确认信息(定时触发、排序规则、FrontMatter 允许其他字段、Codex action 调用方式)。 From def4c14f7356deef58f534b7b0a184927e3eafce Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 20 Feb 2026 14:48:19 +0000 Subject: [PATCH 3/6] chore(plan): update issue-1 plan --- plans/1-workflow.md | 100 +++++++++++++++++++++++--------------------- 1 file changed, 53 insertions(+), 47 deletions(-) diff --git a/plans/1-workflow.md b/plans/1-workflow.md index 37a02c1..e50c20b 100644 --- a/plans/1-workflow.md +++ b/plans/1-workflow.md @@ -1,65 +1,71 @@ # 需求分析:Issue #1 一个新的 Workflow:工程师 ## 1. 背景与目标 -项目需要新增一个自动化 Workflow(`engineer.yml`),用于定时扫描 `plans/` 中未完成的计划,并在必要时触发 Codex action 完成任务并自动创建 PR。目标是形成一个单线程、安全、有序的工程师自动执行流程,避免重复执行或并发冲突。 +需要新增一个 GitHub Actions Workflow(`engineer.yml`),定时扫描 `plans/` 下的 Plan 文件并判断是否有未完成的计划;如有未完成计划则触发 Codex action 完成任务并自动提交 PR,同时确保同一时间只处理一个任务。 ## 2. 需求摘要 -- 新增 Workflow 文件:`engineer.yml`。 -- 触发方式:定时任务,每小时执行一次。 -- 处理对象:`plans/` 目录中的 Plan Markdown,依赖 FrontMatter 的 `status` 字段(只认 TODO/DOING/DONE)。 -- 多计划处理顺序:按序号顺序处理(例如 1-xxx、2-xxx)。 -- 若存在未完成计划:先判断任务是否已完成,若未完成则调用 Codex action,完成后自动创建 PR。 -- 同一时间仅允许一个 Workflow 执行,避免并发。 -- FrontMatter 允许其他字段,不做字段检查。 +- 新增 `engineer.yml` Workflow,按小时定时触发。 +- 仅基于 Plan 文件 FrontMatter 的 `status` 判断是否完成:`DONE` 表示已完成,`TODO/DOING` 表示未完成。 +- 允许 FrontMatter 存在其他字段,不做校验。 +- 当存在多个未完成计划时,按文件序号顺序处理。 +- 若没有未完成计划,Workflow 直接结束。 +- 处理未完成计划时,调用 Codex action 执行任务,完成后自动创建 PR。 +- 同一时间只允许一个 engineer Workflow 运行,避免并发重复处理。 ## 3. 范围定义(In Scope / Out of Scope) -- In Scope: - - 创建 `engineer.yml` Workflow。 - - 每小时调度触发。 - - 扫描 `plans/` 中的 Plan Markdown 并读取 FrontMatter `status`。 - - 按序号顺序选择 TODO/DOING 计划并处理。 - - 判断任务是否已完成;未完成时调用 Codex action。 - - 自动创建 PR 提交变更。 - - 限制并发,同一时间仅运行一个。 -- Out of Scope: - - 不制定 Plan 内容结构与字段校验(仅认 `status`)。 - - 不实现复杂优先级策略或多计划并行处理。 - - 不定义 Codex action 以外的执行引擎。 +In Scope: +- `engineer.yml` 的触发方式、并发控制、任务流程与状态判断逻辑。 +- 解析 `plans/` 中 Plan 文件 FrontMatter 的 `status` 字段。 +- 未完成计划触发 Codex action 并创建 PR。 +- 多个未完成计划的处理顺序规则。 + +Out of Scope: +- Codex action 内部实现逻辑与任务执行细节。 +- Plan 文件正文内容格式或任务清单解析规则(仅依赖 `status`)。 +- PR 模板、审查策略等协作流程细节。 ## 4. 需求拆解 -1. Workflow 基本结构:新增 `engineer.yml`,包含定时触发与基础权限。 -2. Plan 扫描:遍历 `plans/` 目录,解析 FrontMatter,筛选 `status` 为 TODO/DOING 的文件。 -3. 选择顺序:按文件名序号顺序挑选(例如 1-xxx、2-xxx)。 -4. 完成性判断:对选中 Plan 判断任务是否已完成;若已完成则结束,否则进入执行。 -5. Codex 执行:以 GitHub Actions 方式调用 `openai/codex-action@v1`,按约定传递 prompt。 -6. 产出提交:完成任务后生成变更并自动创建 PR。 -7. 并发控制:确保同一时间仅有一个 Workflow 运行。 +1. Workflow 触发与并发控制 + - 采用 `schedule` 每小时触发一次。 + - 使用 `concurrency` 确保同一时间仅有一个 `engineer.yml` 运行。 +2. Plan 文件扫描 + - 扫描 `plans/` 目录的 Markdown 文件。 + - 读取 FrontMatter,获取 `status` 值。 +3. 未完成计划判断与排序 + - `status` 为 `DONE` 视为已完成,跳过。 + - `status` 为 `TODO/DOING` 视为未完成。 + - 多个未完成计划按文件名序号顺序处理。 +4. Codex action 调用 + - 若存在未完成计划,调用 Codex action 执行任务。 + - Codex action 采用 GitHub Actions 方式调用(参考提供的示例)。 +5. PR 创建 + - 任务完成后,自动创建对应 PR 提交变更。 ## 5. 技术方案建议 -- 使用 `schedule` 事件(cron)每小时触发。 -- 使用 `concurrency` 控制同一时间仅允许一个执行(例如固定 `group` 名称)。 -- Plan 扫描可通过脚本解析 FrontMatter(只关注 `status`,忽略其他字段)。 -- Codex action 参考 issue 中提供的 GitHub Actions 调用方式,嵌入执行步骤。 -- PR 创建可使用 `actions/github-script` 或 `gh` CLI(需匹配权限与可用性)。 +- Workflow 文件:`engineer.yml`,触发使用 `on.schedule`(每小时一次)。 +- 使用 `actions/checkout` 拉取仓库。 +- 使用脚本解析 `plans/` Markdown 的 FrontMatter(YAML),提取 `status`。 +- 使用排序规则基于文件名序号(如 `1-xxx.md`)。 +- 若无未完成计划,输出日志并退出 0。 +- 若有未完成计划,调用 `openai/codex-action@v1`;Prompt 中明确目标与限制,便于完成任务。 +- 使用 `concurrency: group: engineer-workflow` 与 `cancel-in-progress: false` 保证单实例执行。 ## 6. 风险与依赖 -- FrontMatter 解析准确性:需确保只读取 `status`,并容忍其他字段。 -- 任务完成性判断规则不明确:需定义“已完成”的判定依据,避免重复执行。 -- Codex action 运行依赖 `OPENAI_API_KEY` 等密钥配置。 -- 自动创建 PR 需要 `contents`/`pull-requests` 等权限配置。 -- 并发控制配置错误可能导致重复处理或遗漏。 +- FrontMatter 解析失败或缺失 `status` 导致流程中断,需要定义默认处理策略(如视为未完成或跳过)。 +- Codex action 执行结果不确定,可能导致 PR 质量不稳定。 +- 任务完成后 PR 创建失败(权限或分支策略限制)。 +- `plans/` 文件命名不规范导致排序不准确。 ## 7. 验收标准 -- 每小时自动触发一次 Workflow。 -- 在 `plans/` 中存在 TODO/DOING 时,按序号顺序选取并处理。 -- 仅依据 FrontMatter `status` 判断,不校验其他字段。 -- 若任务未完成,成功调用 Codex action 并完成工作。 -- 执行结束后自动创建 PR。 -- 同时只允许一个 Workflow 运行。 +- `engineer.yml` 每小时触发一次且无并发重复运行。 +- 当 `plans/` 中无 `TODO/DOING` 计划时,Workflow 正常结束且不调用 Codex action。 +- 当存在 `TODO/DOING` 计划时,按序号顺序选择并处理。 +- `status` 为 `DONE` 的计划不会被处理。 +- Workflow 成功触发 Codex action,并在任务完成后创建 PR。 +- FrontMatter 中除 `status` 外字段不会导致校验失败。 ## 8. 待确认问题 -- 任务“已完成”的具体判定规则是什么(例如基于文件内容、PR 是否已存在等)? -- PR 的命名规范、分支命名规范是否有约定? -- Plan 执行完成后是否需要更新 Plan 文件的 `status`?若需要,更新为 DONE 的具体时机? +- 当 Plan 文件缺少 `status` 字段时,是否视为 `TODO` 处理,还是直接跳过? +- 若 Codex action 执行后无改动,是否仍需创建 PR? ## 9. 更新记录 -- 2026-02-20 初始化需求分析并补充最新确认信息(定时触发、排序规则、FrontMatter 允许其他字段、Codex action 调用方式)。 +- 2026-02-20:根据 Issue 与评论补充状态判定(基于 FrontMatter `status`)、多计划排序规则、定时触发与并发限制,并新增风险与验收说明。 From 9c29aa7fcb67ff5a7eb20e052d7a58181162363b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 20 Feb 2026 14:51:44 +0000 Subject: [PATCH 4/6] chore(plan): update issue-1 plan --- plans/1-workflow.md | 106 ++++++++++++++++++++++---------------------- 1 file changed, 53 insertions(+), 53 deletions(-) diff --git a/plans/1-workflow.md b/plans/1-workflow.md index e50c20b..87e2f02 100644 --- a/plans/1-workflow.md +++ b/plans/1-workflow.md @@ -1,71 +1,71 @@ # 需求分析:Issue #1 一个新的 Workflow:工程师 + ## 1. 背景与目标 -需要新增一个 GitHub Actions Workflow(`engineer.yml`),定时扫描 `plans/` 下的 Plan 文件并判断是否有未完成的计划;如有未完成计划则触发 Codex action 完成任务并自动提交 PR,同时确保同一时间只处理一个任务。 +- 需要一个自动化 Workflow(engineer.yml)定时扫描 plans 中的计划文件,判断任务状态并在必要时调用 codex action 完成任务,随后自动创建 PR 提交。 +- 目标是降低人工跟进成本,保证计划任务按状态推进,同时避免多个 engineer 工作流并发导致重复处理。 ## 2. 需求摘要 -- 新增 `engineer.yml` Workflow,按小时定时触发。 -- 仅基于 Plan 文件 FrontMatter 的 `status` 判断是否完成:`DONE` 表示已完成,`TODO/DOING` 表示未完成。 -- 允许 FrontMatter 存在其他字段,不做校验。 -- 当存在多个未完成计划时,按文件序号顺序处理。 -- 若没有未完成计划,Workflow 直接结束。 -- 处理未完成计划时,调用 Codex action 执行任务,完成后自动创建 PR。 -- 同一时间只允许一个 engineer Workflow 运行,避免并发重复处理。 +- 新增 GitHub Actions Workflow:`engineer.yml`。 +- 触发方式:定时任务,每小时执行一次。 +- 扫描 `plans/` 目录的 Plan Markdown 文件,读取 FrontMatter 中 `status` 字段。 +- 若存在未完成计划,分析是否完成;未完成则调用 codex action 完成并自动创建 PR。 +- 同一时间只允许一个 engineer 运行,避免重复工作。 ## 3. 范围定义(In Scope / Out of Scope) -In Scope: -- `engineer.yml` 的触发方式、并发控制、任务流程与状态判断逻辑。 -- 解析 `plans/` 中 Plan 文件 FrontMatter 的 `status` 字段。 -- 未完成计划触发 Codex action 并创建 PR。 -- 多个未完成计划的处理顺序规则。 - -Out of Scope: -- Codex action 内部实现逻辑与任务执行细节。 -- Plan 文件正文内容格式或任务清单解析规则(仅依赖 `status`)。 -- PR 模板、审查策略等协作流程细节。 +- In Scope: + - 识别 `plans/` 中的计划文件。 + - 仅依据 FrontMatter `status` 判定任务状态:TODO/DOING/DONE。 + - 当缺少 `status` 字段时,视为 TODO。 + - 多个 TODO/DOING 文件按序号顺序处理(按文件名序号)。 + - 调用 codex action(GitHub Actions 方式)完成任务。 + - 任务完成后自动创建 PR。 + - Workflow 单实例运行控制(避免并发)。 +- Out of Scope: + - 校验 FrontMatter 其他字段(允许其他字段,不做检查)。 + - 复杂的完成度判定逻辑(仅依赖 status)。 + - 多任务并发执行或批量处理策略优化。 ## 4. 需求拆解 -1. Workflow 触发与并发控制 - - 采用 `schedule` 每小时触发一次。 - - 使用 `concurrency` 确保同一时间仅有一个 `engineer.yml` 运行。 -2. Plan 文件扫描 - - 扫描 `plans/` 目录的 Markdown 文件。 - - 读取 FrontMatter,获取 `status` 值。 -3. 未完成计划判断与排序 - - `status` 为 `DONE` 视为已完成,跳过。 - - `status` 为 `TODO/DOING` 视为未完成。 - - 多个未完成计划按文件名序号顺序处理。 -4. Codex action 调用 - - 若存在未完成计划,调用 Codex action 执行任务。 - - Codex action 采用 GitHub Actions 方式调用(参考提供的示例)。 -5. PR 创建 - - 任务完成后,自动创建对应 PR 提交变更。 +1. Workflow 触发与并发控制 + - 设置 `on.schedule` 每小时执行。 + - 使用 `concurrency` 或其他方式确保同一时间仅一个 engineer 运行。 +2. 计划文件发现与排序 + - 扫描 `plans/` 目录的 Markdown 文件。 + - 读取 FrontMatter,缺少 status 视为 TODO。 + - 根据文件名序号排序,依次处理。 +3. 状态判定与分支逻辑 + - status=TODO/DOING:认为未完成,需要检查与执行。 + - status=DONE:认为已完成,跳过。 +4. 任务执行与 PR 创建 + - 使用 codex action 执行任务(GitHub Actions 方式调用)。 + - 任务完成后自动创建 PR。 ## 5. 技术方案建议 -- Workflow 文件:`engineer.yml`,触发使用 `on.schedule`(每小时一次)。 -- 使用 `actions/checkout` 拉取仓库。 -- 使用脚本解析 `plans/` Markdown 的 FrontMatter(YAML),提取 `status`。 -- 使用排序规则基于文件名序号(如 `1-xxx.md`)。 -- 若无未完成计划,输出日志并退出 0。 -- 若有未完成计划,调用 `openai/codex-action@v1`;Prompt 中明确目标与限制,便于完成任务。 -- 使用 `concurrency: group: engineer-workflow` 与 `cancel-in-progress: false` 保证单实例执行。 +- Workflow 文件:`.github/workflows/engineer.yml`。 +- 计划扫描:使用脚本读取 `plans/` 目录并解析 FrontMatter(可用 `yq`/`python`/`node` 解析)。 +- 状态逻辑:仅依赖 FrontMatter `status` 字段,缺失则默认 TODO。 +- 任务选择:按文件名序号排序,逐一处理。 +- codex action 调用:参考 `openai/codex-action@v1` 的 GitHub Actions 用法,透传 prompt 与上下文。 +- PR 创建:完成任务后使用 `actions/github-script` 或 CLI 创建 PR。 +- 并发控制:使用 `concurrency` 分组 + `cancel-in-progress: false`。 ## 6. 风险与依赖 -- FrontMatter 解析失败或缺失 `status` 导致流程中断,需要定义默认处理策略(如视为未完成或跳过)。 -- Codex action 执行结果不确定,可能导致 PR 质量不稳定。 -- 任务完成后 PR 创建失败(权限或分支策略限制)。 -- `plans/` 文件命名不规范导致排序不准确。 +- FrontMatter 解析失败导致状态误判(需对缺失或格式异常做默认处理)。 +- codex action 成功率与执行时间不确定,可能导致任务延迟。 +- 自动 PR 创建需要合适权限与分支策略支持。 +- 计划文件命名规范不一致会影响“序号顺序”解析。 ## 7. 验收标准 -- `engineer.yml` 每小时触发一次且无并发重复运行。 -- 当 `plans/` 中无 `TODO/DOING` 计划时,Workflow 正常结束且不调用 Codex action。 -- 当存在 `TODO/DOING` 计划时,按序号顺序选择并处理。 -- `status` 为 `DONE` 的计划不会被处理。 -- Workflow 成功触发 Codex action,并在任务完成后创建 PR。 -- FrontMatter 中除 `status` 外字段不会导致校验失败。 +- 每小时触发一次 engineer workflow。 +- Workflow 在同一时间仅有一个实例运行。 +- 能正确识别 `plans/` 中的计划文件并解析 FrontMatter。 +- 缺少 `status` 的计划被视为 TODO 处理。 +- 多个 TODO/DOING 按序号顺序处理。 +- status=DONE 的计划被跳过。 +- 对未完成计划触发 codex action,并在完成后自动创建 PR。 ## 8. 待确认问题 -- 当 Plan 文件缺少 `status` 字段时,是否视为 `TODO` 处理,还是直接跳过? -- 若 Codex action 执行后无改动,是否仍需创建 PR? +- 暂无。 ## 9. 更新记录 -- 2026-02-20:根据 Issue 与评论补充状态判定(基于 FrontMatter `status`)、多计划排序规则、定时触发与并发限制,并新增风险与验收说明。 +- 2026-02-20:根据 Issue 回复补充规则:缺少 status 视为 TODO、DONE 判定、按序号处理、定时触发与字段约束范围。 From eef22cc1dde3e0c3222ba3b2a2756a0787844ae9 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 20 Feb 2026 15:03:38 +0000 Subject: [PATCH 5/6] chore(plan): update issue-1 plan --- plans/1-workflow.md | 95 ++++++++++++++++++++++----------------------- 1 file changed, 46 insertions(+), 49 deletions(-) diff --git a/plans/1-workflow.md b/plans/1-workflow.md index 87e2f02..9373fd7 100644 --- a/plans/1-workflow.md +++ b/plans/1-workflow.md @@ -1,71 +1,68 @@ # 需求分析:Issue #1 一个新的 Workflow:工程师 - ## 1. 背景与目标 -- 需要一个自动化 Workflow(engineer.yml)定时扫描 plans 中的计划文件,判断任务状态并在必要时调用 codex action 完成任务,随后自动创建 PR 提交。 -- 目标是降低人工跟进成本,保证计划任务按状态推进,同时避免多个 engineer 工作流并发导致重复处理。 +需要新增一个自动化 Workflow(engineer.yml),定时扫描 `plans/` 中的计划文件,判断是否存在未完成任务,并在必要时调用 Codex Action 自动完成任务并创建 PR,且保证同一时间只有一个工程师 Workflow 在运行,避免重复工作。 ## 2. 需求摘要 - 新增 GitHub Actions Workflow:`engineer.yml`。 - 触发方式:定时任务,每小时执行一次。 -- 扫描 `plans/` 目录的 Plan Markdown 文件,读取 FrontMatter 中 `status` 字段。 -- 若存在未完成计划,分析是否完成;未完成则调用 codex action 完成并自动创建 PR。 -- 同一时间只允许一个 engineer 运行,避免重复工作。 +- 目标范围:`plans/` 目录下的 Plan Markdown 文件,使用 FrontMatter 的 `status` 字段驱动流程。 +- 处理逻辑:发现 TODO/DOING 任务则分析是否已完成;未完成则调用 codex action 完成任务并创建 PR;已完成则不处理。 +- 并发控制:同一时间只允许一个 engineer workflow 运行。 ## 3. 范围定义(In Scope / Out of Scope) -- In Scope: - - 识别 `plans/` 中的计划文件。 - - 仅依据 FrontMatter `status` 判定任务状态:TODO/DOING/DONE。 - - 当缺少 `status` 字段时,视为 TODO。 - - 多个 TODO/DOING 文件按序号顺序处理(按文件名序号)。 - - 调用 codex action(GitHub Actions 方式)完成任务。 - - 任务完成后自动创建 PR。 - - Workflow 单实例运行控制(避免并发)。 -- Out of Scope: - - 校验 FrontMatter 其他字段(允许其他字段,不做检查)。 - - 复杂的完成度判定逻辑(仅依赖 status)。 - - 多任务并发执行或批量处理策略优化。 +In Scope: +- `plans/` 下 Plan 文件的扫描与读取 FrontMatter。 +- 仅依据 `status` 字段判断状态(TODO/DOING/DONE),且缺失 `status` 视为 TODO。 +- 多个待处理计划按序号顺序处理。 +- 调用 `openai/codex-action@v1` 完成任务,并在完成后自动创建 PR。 +- Workflow 并发控制(避免同一时间多个 engineer 执行)。 + +Out of Scope: +- 对 FrontMatter 其他字段进行校验或强制要求。 +- 非 `plans/` 目录的任务管理。 +- 自定义非 GitHub Actions 方式的 Codex 调用。 ## 4. 需求拆解 -1. Workflow 触发与并发控制 - - 设置 `on.schedule` 每小时执行。 - - 使用 `concurrency` 或其他方式确保同一时间仅一个 engineer 运行。 -2. 计划文件发现与排序 - - 扫描 `plans/` 目录的 Markdown 文件。 - - 读取 FrontMatter,缺少 status 视为 TODO。 - - 根据文件名序号排序,依次处理。 -3. 状态判定与分支逻辑 - - status=TODO/DOING:认为未完成,需要检查与执行。 - - status=DONE:认为已完成,跳过。 -4. 任务执行与 PR 创建 - - 使用 codex action 执行任务(GitHub Actions 方式调用)。 - - 任务完成后自动创建 PR。 +1. Workflow 触发 + - 定时触发:每小时执行一次。 +2. 计划扫描与选取 + - 扫描 `plans/` 目录下的 Markdown 文件。 + - 读取 FrontMatter 的 `status` 字段;缺失视为 TODO。 + - 多个 TODO/DOING 计划按序号顺序处理(例如文件名中的序号)。 +3. 状态判断与完成判定 + - `status: DONE` 视为已完成,不触发 Codex。 + - `status: TODO/DOING` 视为未完成,进入任务分析流程。 +4. Codex 调用与任务完成 + - 采用 GitHub Actions 方式调用 `openai/codex-action@v1`。 + - Prompt 需包含计划文件内容与预期任务说明。 +5. PR 自动创建 + - Codex 完成任务后自动创建 PR(包含变更内容)。 +6. 并发控制 + - 使用 `concurrency` 或等效方式确保同一时间只有一个 engineer workflow 运行。 ## 5. 技术方案建议 - Workflow 文件:`.github/workflows/engineer.yml`。 -- 计划扫描:使用脚本读取 `plans/` 目录并解析 FrontMatter(可用 `yq`/`python`/`node` 解析)。 -- 状态逻辑:仅依赖 FrontMatter `status` 字段,缺失则默认 TODO。 -- 任务选择:按文件名序号排序,逐一处理。 -- codex action 调用:参考 `openai/codex-action@v1` 的 GitHub Actions 用法,透传 prompt 与上下文。 -- PR 创建:完成任务后使用 `actions/github-script` 或 CLI 创建 PR。 -- 并发控制:使用 `concurrency` 分组 + `cancel-in-progress: false`。 +- 触发:`schedule` + `cron` 每小时一次。 +- 并发控制:使用 `concurrency: engineer` 并启用 `cancel-in-progress: false`(避免并行)。 +- 计划扫描:使用脚本读取 `plans/` 下文件并解析 FrontMatter;以文件名序号排序。 +- Codex 调用:参考 issue 中提供的 `openai/codex-action@v1` 使用方式。 +- PR 创建:使用 `gh` CLI 或 `actions/github-script`,根据 Codex 输出生成 PR。 ## 6. 风险与依赖 -- FrontMatter 解析失败导致状态误判(需对缺失或格式异常做默认处理)。 -- codex action 成功率与执行时间不确定,可能导致任务延迟。 -- 自动 PR 创建需要合适权限与分支策略支持。 -- 计划文件命名规范不一致会影响“序号顺序”解析。 +- 依赖:`openai/codex-action@v1` 可用且 `OPENAI_API_KEY` 已配置。 +- 风险:多文件处理排序依赖命名规范,需要约定文件名序号格式。 +- 风险:任务“完成”仅依赖 `status` 字段,若未及时更新可能重复触发。 ## 7. 验收标准 -- 每小时触发一次 engineer workflow。 -- Workflow 在同一时间仅有一个实例运行。 -- 能正确识别 `plans/` 中的计划文件并解析 FrontMatter。 -- 缺少 `status` 的计划被视为 TODO 处理。 -- 多个 TODO/DOING 按序号顺序处理。 -- status=DONE 的计划被跳过。 -- 对未完成计划触发 codex action,并在完成后自动创建 PR。 +- 每小时定时触发 workflow 能执行。 +- `plans/` 中存在 TODO/DOING 计划时能按序号顺序选取并处理。 +- `status: DONE` 的计划不会触发 Codex。 +- 缺少 `status` 的计划会被视为 TODO。 +- Workflow 可调用 Codex Action 并自动创建 PR。 +- 同一时间不会出现多个 engineer workflow 并行执行。 ## 8. 待确认问题 - 暂无。 ## 9. 更新记录 -- 2026-02-20:根据 Issue 回复补充规则:缺少 status 视为 TODO、DONE 判定、按序号处理、定时触发与字段约束范围。 +- 2026-02-20:创建需求分析文档,整合 Issue 讨论的已确认规则与约束。 From e097178b80b92e92879c111eeb0f17d0952b1fcd Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 20 Feb 2026 15:09:20 +0000 Subject: [PATCH 6/6] chore(plan): update issue-1 plan --- plans/1-workflow.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/plans/1-workflow.md b/plans/1-workflow.md index 9373fd7..d4b0fd7 100644 --- a/plans/1-workflow.md +++ b/plans/1-workflow.md @@ -62,7 +62,8 @@ Out of Scope: - 同一时间不会出现多个 engineer workflow 并行执行。 ## 8. 待确认问题 -- 暂无。 +- 暂无(用户在 2026-02-20 询问是否还有待确认问题,当前未新增)。 ## 9. 更新记录 - 2026-02-20:创建需求分析文档,整合 Issue 讨论的已确认规则与约束。 +- 2026-02-20 23:09:12 +08:00:根据最新评论确认暂无新增待确认问题,补充待确认说明。