# Zentao Task Creator

> Create ZenTao/禅道 main tasks and role-based subtasks directly from an existing ZenTao story/需求, including product main task, backend/frontend/test/art subtasks, assignee defaults, task type/subtype mapping, parent-child relationship, story/execution linkage, deadline planning, and post-create verification. Use when the user asks to 下任务, 创建主任务/子任务, 从禅道需求创建任务, 按需求拆任务, 设置任务截止时间, or assign backend/frontend/test/art tasks from a ZenTao story.

- Skill: `ewancy/zentao-task-creator` (Agent Skill, multi-file: 3 files)
- Install (CLI): `npx skillmds@latest add ewancy/zentao-task-creator`
- Raw SKILL.md: https://api.skillmd.com/api/skills/ewancy/zentao-task-creator/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Web & Frontend
- Author: ewancy (https://skillmd.com/u/ewancy)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/ewancy/zentao-task-creator

---


# zentao-task-creator / 禅道需求任务创建

## 使用原则

中文说明：本技能用于从已有禅道需求创建主任务和子任务，默认不创建新需求。它沉淀“产品主任务 + 后端/前端/测试/美术子任务 + 截止时间规则 + 负责人默认值”的流程。

- 只处理已有禅道需求创建或调整任务；如果用户要创建/变更需求本身，使用 `zentao-requirement-submit` 或 `zentao-story-change`。
- 优先用 `zentao` CLI 读取 story、execution、已有 tasks；创建/编辑任务时优先使用禅道传统表单，因为 CLI/API 不一定支持父任务、截止时间、子类型等字段。
- 创建前必须查重：同一执行下已有同名主任务或同名子任务时，不重复创建，优先复用或询问用户是否更新。
- 不在最终回复、日志摘要中暴露账号、密码、Token、Cookie。
- 除非用户明确要求，不创建美术任务；美术是否需要必须先确认。

## 触发场景

用户出现以下表达时使用本技能：

- “帮我下任务 / 下主任务和子任务”
- “从这个禅道需求创建任务”
- “主任务默认分配给产品，子任务给后端/前端/测试”
- “设置任务截止时间 / 前后端比测试提前 / 不能周天”
- “平台部任务截止时间默认每周三”

## 输入收集

执行前收集或推断：

- **需求 ID**：从 `storyID=8947`、`story-view-8947`、用户文字或最近刚提交的需求中识别。
- **执行/版本**：优先使用 story 已关联 execution；如果多个执行，选择用户指定版本或进行中的执行。
- **主任务标题**：默认使用 story 标题。
- **任务范围**：后端、前端、测试、美术是否需要。默认建议后端/前端/测试；美术默认不创建，除非用户确认。
- **负责人**：按默认映射或用户指定账号。
- **截止时间**：用户明确给日期时按用户日期；未给时按“排期规则”。
- **项目归属/子类型**：AI 项目、平台部、帐服、客服总台、客服后台、EGC 等。

## 默认负责人和字段映射

中文说明：以下账号是当前团队常用默认值，创建前如页面选项中不存在，应通过任务创建页选项确认，不要猜测提交。

| 角色 | 禅道任务类型 | 默认负责人 | 账号 |
| --- | --- | --- | --- |
| 产品/主任务 | 产品 `design` | 当前产品负责人/当前用户，默认陈远 | `cheny` |
| 后端 | 后端 `devel` | 陈立强 | `chenlq` |
| 前端 | Web `web` | 陈杰 | `chenjie` |
| 测试 | 测试 `discuss` | 陈宇楠 | `chenyn` |
| 美术 | 美术 `study` | 张倩文 | `zhangqw` |

### 平台部负责人规则

中文说明：平台部任务负责人规则与 AI 项目不同，不能直接套用 AI 项目的陈立强/陈杰默认值。

- 平台部前端任务默认指派张校辉，账号通常为 `zhangxiaohui`。
- 平台部后端任务需要在余浩和陈益之间人工确认；创建后端任务前必须询问用户“后端指派余浩还是陈益”，不要默认指派。
- 平台部测试任务默认指派林文强；账号需从禅道任务创建页下拉选项确认后使用。
- 平台部美术如用户未另行指定，仍按通用默认值：张倩文 `zhangqw`。
- AI/其他非平台部任务测试默认仍为陈宇楠 `chenyn`。
- 如果任务创建页中账号与上述账号不一致，以禅道页面下拉选项为准，并在最终回复中说明实际账号。

## 后端子类型规则

- AI 项目后端子类型默认选择 `AI及禅道`，禅道字段值通常为 `AI`。
- 平台部项目多数后端子类型为 `账服`，禅道字段值通常为 `zf`。
- 如果需求涉及 `客服总台`、`客服后台`、`EGC`、`IGC`、`公共服` 等，创建后端任务前先向用户确认子类型。
- 如果用户已明确说“子类型用 xxx”，按用户最新口径执行。

## 排期规则

中文说明：排期默认以测试完成时间为验收节点，研发类任务提前完成，且所有任务截止日期不能落在周天。

- 用户明确给主任务/测试截止日期时：主任务和测试任务截止日期默认等于该日期。
- 用户未给截止日期且判断为平台部任务时：默认取当前日期之后最近一个周三作为主任务和测试任务截止日期。
- 用户未给截止日期且非平台部任务时：先向用户确认截止日期；不要擅自猜测。
- 后端、前端任务截止日期默认比测试任务提前 2 天。
- 如果后端/前端计算出的日期是周天，向前调整到周六；如果用户所在团队要求工作日，可再向前调整到周五并说明。
- 美术任务只有确认需要时创建；截止日期默认比前后端再提前 1-2 天，根据工作量判断，并避开周天。
- 如果任何目标日期落在周天，必须调整后再创建或编辑任务。

## 标准任务结构

- 主任务：`<需求标题>`
  - 类型：产品 `design`
  - 关联 story：需求 ID
  - 指派：产品负责人/当前用户
  - 截止：测试截止日期
- 后端子任务：`<需求标题> 后端`
  - 类型：后端 `devel`
  - 父任务：主任务 ID
  - 子类型：按“后端子类型规则”
  - 截止：测试截止日期提前 2 天并避开周天
- 前端子任务：`<需求标题> 前端`
  - 类型：Web `web`
  - 父任务：主任务 ID
  - 截止：测试截止日期提前 2 天并避开周天
- 测试子任务：`<需求标题> 测试`
  - 类型：测试 `discuss`
  - 父任务：主任务 ID
  - 截止：测试截止日期
- 美术子任务：`<需求标题> 美术`
  - 类型：美术 `study`
  - 父任务：主任务 ID
  - 截止：按工作量比前后端提前 1-2 天，并避开周天


## 快速执行优先路径

中文说明：为缩短下任务时间，常规创建优先使用脚本 `scripts/create_story_tasks_fast.mjs`，不要再手写临时脚本逐个创建、逐个回查。只有脚本报错或需要非常规字段时，才回退到后面的手工表单流程。

推荐命令：

```bash
node /Users/bsg/.codex/skills/zentao-task-creator/scripts/create_story_tasks_fast.mjs --story <storyID> --backend <account> [--with-art] [--deadline YYYY-MM-DD] [--pool-id <poolID>]
```

脚本会一次性完成：

- 登录并读取 story、执行、模块、来源、类别和标题。
- 从执行任务列表查重；同名任务存在时复用，不重复创建。
- 从创建页校验负责人账号是否存在；`zentao users list` 无权限时不再额外查询用户列表。
- 先创建/复用主任务，随后创建后端、前端、测试，以及可选美术子任务，并挂到主任务下。
- 自动避开周天：研发截止=测试截止提前 2 天，美术截止=研发截止提前 2 天。
- 可选用 `--pool-id` 将需求池记录关联到主任务，避免需求池仍显示未下单。
- 最后输出一份 JSON 回查结果，包含任务 ID、父任务、类型、负责人、截止日期和状态。

平台部常用示例：

```bash
node /Users/bsg/.codex/skills/zentao-task-creator/scripts/create_story_tasks_fast.mjs --story 8964 --backend yuh --with-art --pool-id 2659
```

快速路径注意事项：

- 平台部仍必须先确认后端是余浩 `yuh` 还是陈益，再传 `--backend`；不得默认猜。
- 默认平台部前端 `zhangxiaohui`、测试 `linwq`、美术 `zhangqw`；如果用户指定其他人，需先确认脚本是否支持，必要时回退手工流程。
- 不要提交 `keywords`、`files[]`、`labels[]`、空 `tag[]` 等任务表不稳定字段，避免 `Unknown column` 或字段类型错误。
- 脚本成功后无需再逐个运行 `zentao task get`；只在输出异常、用户要求明细复核、或字段看起来不一致时再逐个回查。

## 工作流程

### 0. 优先尝试快速脚本

- 信息齐全时直接运行“快速执行优先路径”的脚本；脚本输出即为最终回查依据。
- 脚本缺参数时只问必要问题：平台部后端负责人、美术是否需要、非平台部截止日期。
- 脚本失败时再进入下面的手工流程，并复用脚本已创建成功的任务，避免重复。

### 1. 读取需求和执行

```bash
zentao story get --id <storyID> --json
zentao tasks list --execution <executionID> --limit 500 --json
```

- 确认 story 标题、状态、产品、关联 execution。
- 如果 story 没有关联 execution，先让用户指定版本/执行，或使用需求提交流程关联执行。
- 在目标 execution 下查找同名任务，避免重复创建。

### 2. 确认任务范围

中文说明：如果用户没有明确哪些角色要下任务，先给建议并等待确认。常见默认建议是后端、前端、测试；美术通常不需要。

需要确认的问题：

- 是否创建后端、前端、测试、美术子任务？
- 后端子类型是否用默认值？AI 项目默认 `AI及禅道`；平台部默认 `账服`。
- 如果是平台部任务：前端默认张校辉；测试默认林文强；后端必须确认指派余浩还是陈益。
- 是否有明确截止日期？平台部未给日期时默认最近一个周三。

### 3. 计算截止日期

- 先确定测试/主任务截止日期。
- 计算后端/前端截止日期：测试截止日期 - 2 天。
- 如结果为周天，向前调整 1 天。
- 美术截止日期：前后端截止日期 - 1 或 2 天，并避开周天。
- 输出或记录最终日期，避免创建后再批量修改。

### 4. 创建任务

优先使用禅道任务创建表单：

- 登录页：`/index.php?m=user&f=login`。
- 创建页：`/index.php?m=task&f=create&executionID=<executionID>&storyID=<storyID>&moduleID=0&onlybody=yes`。
- 请求头带 `X-Requested-With: XMLHttpRequest`，否则可能拿到首页壳页面。
- 关键字段：
  - `execution=<executionID>`
  - `category=feature`
  - `source=customer`，除非用户指定其他来源
  - `type=design/devel/web/discuss/study`
  - `subtype=AI/zf/...`，仅后端等需要时填写
  - `assignedTo[]=<account>` 创建页使用数组字段
  - `module=0` 或页面默认模块
  - `status=wait`
  - `story=<storyID>`
  - `name=<任务标题>`
  - `desc=关联需求 #<storyID>：<story标题>。截止日期：<date>。`
  - `deadline=<YYYY-MM-DD>`
  - `parent=<主任务ID>`，创建子任务时填写
- 保存成功通常返回 `保存成功` 或 `locate`。

### 5. 编辑已有任务截止日期

中文说明：如果任务已经创建但排期规则变化，需要走任务编辑表单；REST `PUT /api.php/v1/tasks/<id>` 可能返回空响应且不生效。

- 编辑页：`/index.php?m=task&f=edit&taskID=<taskID>&onlybody=yes`。
- 读取现有表单，保留 `name`、`desc`、`story`、`parent`、`assignedTo`、`type`、`subtype`、`status`、`estimate`、`left` 等字段。
- 只更新 `deadline` 和必要的 `desc/comment`。
- 不要提交页面存在但数据库未必存在的扩展字段，例如提交后报 `Unknown column` 时，应移除该字段重试。
- 不要提交空的 `tag[]`、`labels[]` 等会触发“应当是数字”的字段。

### 6. 回查验证

创建或更新后必须回查：

```bash
zentao task get --id <taskID> --json
zentao tasks list --execution <executionID> --limit 500 --json
```

验证项：

- 主任务 `story` 等于需求 ID，`execution` 等于目标执行。
- 子任务 `parent` 等于主任务 ID。
- 类型正确：产品/后端/Web/测试/美术。
- 后端子类型正确，例如 `AI` 对应 `AI及禅道`。
- 指派账号正确。
- 截止日期符合排期规则，且没有周天。
- 状态为 `wait`，除非用户要求其他状态。

## 异常处理

- **`zentao users list` 无权限**：从任务创建/编辑页的指派人下拉选项中确认账号。
- **创建页不是表单而是首页壳页面**：补 `X-Requested-With: XMLHttpRequest`，并检查页面标题包含“建任务”。
- **CLI 创建任务缺字段**：改用传统表单创建，CLI 不一定支持父任务、截止时间、子类型。
- **REST 修改截止日期不生效**：改用任务编辑表单提交。
- **表单报 `Unknown column`**：移除非核心扩展字段，只保留任务基础字段后重试。
- **表单报 `tag 应当是数字`**：不要提交空的 `tag[]`、`labels[]`。
- **已有同名任务**：不要重复创建；回查后按用户要求调整负责人、父任务或截止日期。

## 最终回复

最终回复只输出：

- 关联需求链接。
- 主任务和子任务 ID、标题、负责人、类型/子类型、截止日期。
- 未创建的角色及原因，例如“美术未创建，用户确认不需要”。
- 回查确认结果。

