# Work Schedule

> 需求排期录入工具——将工作事项同步到企业微信智能表格。 当用户提到"加入排期"、"录入排期"、"更新排期表"、"需求排期"、"把 xxx 加到排期"等意图时触发。 也适用于用户提供新周期 schema/key 要求配置新文档的场景。

- Skill: `zhuozhuocrayon/work-schedule` (Agent Skill, multi-file: 4 files)
- Install (CLI): `npx skillmds@latest add zhuozhuocrayon/work-schedule`
- Raw SKILL.md: https://api.skillmd.com/api/skills/zhuozhuocrayon/work-schedule/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: zhuozhuocrayon (https://skillmd.com/u/zhuozhuocrayon)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/zhuozhuocrayon/work-schedule

---


# 需求排期录入 Skill

## 0x01 背景与目标

通过企业微信智能表格 Webhook 将工作事项录入排期表。核心目标：

- 对话里出现“加入排期”时可快速落表
- 一个 `key` 对应一个文档，一个文档覆盖半年
- 固定脚本执行，减少人工拼装请求体错误

## 0x02 路径解析（CRITICAL）

本技能依赖的脚本和配置位于 `scripts/`、`config/` 子目录中。

**【CRITICAL（必须执行不可协商）】** 本 Skill 目录可能是 symlink，必须通过以下方式解析真实路径：

```bash
# 解析本 Skill 的真实路径（处理 symlink）
SKILL_DIR=$(python3 -c 'import os,sys; print(os.path.realpath(sys.argv[1]))' "<SKILL.md 所在目录的绝对路径>")
```

* 阅读本 SKILL.md 时已知其绝对路径（如 `.../work-schedule/SKILL.md`），取其父目录作为 `SKILL_DIR`。
* 通过 `os.path.realpath` 解析 symlink 得到真实目录。
* 后续所有脚本和配置文件均使用 `${SKILL_DIR}/...` 引用，**禁止硬编码路径**。

## 0x03 配置规范

配置文件路径：`${SKILL_DIR}/config/schedules.yaml`

```yaml
active: "2026H1"
schedules:
  "2026H1":
    key: "webhook-key"
    months_start: 1
    schema:
      frvG4J: "项目"
      fzSueb: "需求"
      # ... field_id -> 列名
```

字段含义：

- `active`：当前默认周期
- `key`：Webhook key（仅保存在 `schedules.yaml`）
- `months_start`：`1` 或 `7`，用于 H1/H2 月份映射
- `schema`：`field_id -> 列名`，不同文档 field_id 不同

新增周期时必须执行：

1. 解析用户提供的 `schema + key`
2. 打印拟新增配置摘要（`period/key/months_start/schema`）并确认
3. 用户确认后再写入 `${SKILL_DIR}/config/schedules.yaml`
4. 按用户要求决定是否切换 `active`

## 0x04 字段 Schema（扩展版）

> 以下为 2026H1 示例，实际以 `${SKILL_DIR}/config/schedules.yaml` 为准。

| field_id | 列名 | 类型 | 默认值 | 字段说明 |
|----------|------|------|--------|---------|
| frvG4J | 项目 | multi_select | 必填（模型推测） | 观测平台 / 业务支持 / APM / APM / 日常支持 |
| fzSueb | 需求 | text | 必填 | 不含细节的短语标题（例如：`LOL 社区版支持`） |
| fc5FyT | 需求类型 | multi_select | 研发 | 研发 / 纯跟进 / 设计 / 原型 / 修复 |
| f53B4X | 优先级 | multi_select | P0 | `P0 / P1 / P2 / done` |
| fiWfNd | 进度 | multi_select | 未启动 | 未启动 / 评审中 / 暂时挂起 / 待产品确认方案 / 方案就绪 / 开发中 / 灰度中 / 已上线发布 / 跟进中 |
| fl1uff | 文档/链接 | link | [] | 文档链接，支持空 |
| f0B8fw | 事项类型 | multi_select | 规划 | 规划 / 新增 |
| ffio2F | 备注 | text | "" | 需求详情、背景、范围、约束等完整说明 |
| fYhKHf | 1 月 | month_tags | 自动计算 | 例如 `["P2-排期"]` |
| f6MQpU | 2 月 | month_tags | 自动计算 | 例如 `["P2-排期"]` |
| fYDW9O | 3 月 | month_tags | 自动计算 | 例如 `["P2-排期"]` |
| fNocoV | 4 月 | month_tags | 自动计算 | 例如 `["P2-排期"]` |
| fB1bqi | 5 月 | month_tags | 自动计算 | 例如 `["P2-排期"]` |
| fxHuQY | 6 月 | month_tags | 自动计算 | 例如 `["P2-排期"]` |
| fjgnwh | 图片 | image | [] | 图片附件，默认空 |

值格式规则：

| 类型 | 格式 | 示例 |
|------|------|------|
| multi_select | `[{"text": "值"}]` | `[{"text": "APM"}]` |
| text | 原始字符串 | `"需求描述"` |
| link | `[{"link":"url","text":"显示文本"}]` 或 `[]` | `[{"link":"https://...","text":"设计文档"}]` |
| month_tags | `[{"text":"Px-排期"}]` | `[{"text":"P2-排期"}]` |
| image | `[]` | `[]` |

## 0x05 月份自动计算规则

这里的 `P1/P2/P3` 是“旬别标签”，不是“优先级”。

- Day 1-10 -> `P1-*`
- Day 11-20 -> `P2-*`
- Day 21-31 -> `P3-*`

月份标签支持：

- `P1-排期 / P2-排期 / P3-排期`
- `P1-完成 / P2-完成 / P3-完成`
- `P1-延后 / P2-延后 / P3-延后`

若未提供 `月份`，脚本按当前日期自动填充一个月份标签，并按以下规则选择后缀：

- 事项完成（如 `优先级=done` 或 `进度=已上线发布`）-> `Px-完成`
- 事项延后（如 `进度=暂时挂起`）-> `Px-延后`
- 其他情况 -> `Px-排期`

## 0x06 项目归属规则

项目归属由模型在对话阶段推测，脚本不再内置项目推测逻辑。建议按以下口径：

- `观测平台 / 业务支持`：具体的业务支持事项
- `APM`：涉及 APM 的较大、长期跟进事项
- `APM / 日常支持`：区别于 APM 主线的一些小优化、小修复

## 0x07 执行流程

**CRITICAL（必须执行不可协商）**：未收到用户明确确认前，禁止实际写入排期表。

可视为“明确确认”的典型表达：

- `确认新增`
- `可以新增`
- `就按这个加`
- `🉑`

若用户仅描述事项（未确认），只能输出“待写入预览 JSON”，不能执行写入命令。

1. 用户提出“加入排期”
2. 构造记录 JSON（`项目` 必填，`月份` 可省略由脚本自动补）
3. 严格区分 `需求` 和 `备注`：
   - `需求`：不包含细节的概括短语（例如：`LOL 社区版支持`）
   - `备注`：具体详情（背景、版本范围、约束、进展）
4. 基于 TAPD 单据的事项必须把 TAPD 详情链接写入 `文档/链接`，便于从排期表回到来源单据
5. 优先级默认 `P0`，除非用户明确指定其他值
6. 先在对话中打印记录，用户确认
7. 执行脚本写入
8. 返回接口结果

执行命令：

```bash
python3 "${SKILL_DIR}/scripts/add_record.py" \
  --config "${SKILL_DIR}/config/schedules.yaml" \
  --record /tmp/schedule_record.json
```

说明：

- 需要 `full_network` 权限
- 脚本默认会二次确认请求体
- 只有在用户已明确确认新增后，才允许使用 `--yes` 跳过脚本二次确认

## 0x08 输入与命令示例

记录 JSON（列名语义）：

```json
{
  "项目": "观测平台 / 业务支持",
  "需求": "LOL 社区版支持",
  "需求类型": "研发",
  "优先级": "P0",
  "进度": "跟进中",
  "事项类型": "规划",
  "备注": "正在进行升级验证：3.9 -> 3.10，3.10 -> 3.11",
  "文档/链接": [],
  "月份": {
    "3": ["P2-排期"]
  }
}
```

预览模式（仅打印请求体）：

```bash
python3 "${SKILL_DIR}/scripts/add_record.py" \
  --config "${SKILL_DIR}/config/schedules.yaml" \
  --record /tmp/schedule_record.json \
  --dry-run
```

