This commit is contained in:
2026-09-09 10:29:02 +08:00
parent 2aa49b5263
commit ccb12dad7c
102 changed files with 7879 additions and 559 deletions

View File

@@ -1,332 +1,227 @@
# REQUIREMENTS
## 0. 技能标识(复制 REQUIREMENTS 时必填)
## 0. 技能标识
- 拟定 slug(英文,符合 `development/NAMING.md`):add-todo-all
- 中文 name:待办事项
- 中文 description(一句话):提供待办事项的创建、查看、修改、标记完成、删除、批量操作能力;支持设置截止时间、优先级、分类标签;可生成待办清单文本输出;不持久化跨会话存储,会话结束数据丢失。
- account-manager platform_key(如有):
- 命名形态:标准型 / scope 型
- **网页 RPA(如有)— 登录策略(三选一,须写明):**
- `required`:目标站必须登录才能闭环(用户须完成/保持站点登录;技能每轮主路径须有登录门禁 + 验证码/人工等待)
- `optional`:登录可提升能力,但不登录也能完成主路径(**仅当**公开页确可闭环时选用;会话依赖型采集/评论/私信**禁止**默认抄成 optional)
- `not_needed`:公开页即可,不要求站点登录
- 无论上列哪一种:**都必须**经 account-manager **`ensure-web`**(或等价)取得 `profile_dir`(见 `development/RPA.md` §0.2);不得使用系统默认浏览器用户目录
- **登记 ≠ 登录**:ensure/add-web 只建账号与 Profile;站点登录由本技能在有头浏览器中完成
- **反模式**:把「需要登录态才能采到数据」的需求写成 `optional`,再省略 `ensure_logged_in`
- 中文 description(一句话):提供待办事项的创建、查看、标记完成、删除、批量操作能力;支持设置截止时间与优先级;数据持久化在本地 SQLite。
- account-manager platform_key(如有):无(纯本地数据技能,不涉及外部账号登录)
- 命名形态:标准型
- **网页 RPA(如有)— 登录策略:** `not_needed`
- 本技能不涉及任何网页自动化、浏览器操作或外部系统登录,所有数据存储与操作均在本地 SQLite 中完成。
- 不调用 account-manager,不使用 profile_dir。
## 0.1 宿主入口定位(必填)
先读 [`PRODUCT_SURFACES.md`](PRODUCT_SURFACES.md)。对话任务 / 数据管理 / 定时任务在宿主上**平级**;挂哪些由本技能业务与 UX 定,模板不规定「必须三入口都挂满」。
对每个主能力填一行(可增行;「不挂」必须写理由):
## 0.1 宿主入口定位
| 主能力(Action id / CLI) | 对话 | 数据管理 | 定时 | 不挂理由(若不挂) |
|---------------------------|------|----------|------|--------------------|
| (例)`<action-or-cli>` | 挂 / 不挂 | 不挂 / toolbar / row / batch / replaces / 仅展示表 | 挂 / 不挂 | |
| `todo add` | 挂 | toolbar(新增按钮) | 不挂 | 定时无意义 |
| `todo list` | 挂 | 仅展示表 | 不挂 | 定时无意义 |
| `todo done` | 挂 | row + batch(标记完成) | 不挂 | 定时无意义 |
| `todo delete` | 挂 | row + batch(删除) | 不挂 | 定时无意义 |
| `todo stats` | 挂 | toolbar(统计) | 不挂 | 定时无意义 |
| `remind` | 挂 | toolbar | 挂 | 定时扫描到期/待办项并提醒 |
| `init-db` | 不挂 | 不挂 | 不挂 | 宿主安装/更新时静默调用,不对用户暴露 |
| `health` | 不挂 | 不挂 | 不挂 | 内部诊断命令 |
| `version` | 不挂 | 不挂 | 不挂 | 内部诊断命令 |
| `config-path` | 不挂 | 不挂 | 不挂 | 内部诊断命令 |
说明:
- 数据管理列可写组合(如 `toolbar + row`)
- 「仅展示表」= 用户要看过程/结果,但不在表上触发该能力
- 定位为「挂」的入口须在 `assets/actions.json`(及必要表元数据)中落实,并与对话路径共用同一 domain service
- `todos` 表在数据管理中为**整表只读**(`readonly=1`),所有增删改必须通过技能 Action(`todo add/done/delete`)走,宿主不直写业务表。
- 数据管理页面默认展示列:`title`、`status`、`priority`、`due_at`、`created_at`;默认按 `created_at` 倒序。
- `status` 与 `priority` 字段在数据管理中以下拉枚举展示(pending=待办/done=完成;high=高/normal=中/low=低)。
## 0.2 AI + RPA 协作与授权边界(涉及外部系统时必填)
## 0.2 AI + RPA 协作与授权边界
### Agent 设计
- 用户会怎样描述本任务:
- “帮我加一条待办:周五前提交周报,优先级高。”
- “帮我看看有哪些待办。”
- “把第 1、3 条标记为完成。”
- “把第 2 条删掉。”
- “统计一下待办情况。”
- 支持哪些用户意图;分别映射到哪个 Action:
- 新增待办 → `todo add`
- 查看列表 → `todo list`
- 标记完成 → `todo done`
- 删除待办 → `todo delete`
- 统计概览 → `todo stats`
- 到期提醒 → `remind`(async)
- 每种意图必须提取哪些参数:
- 新增:`title`(必填)、`priority`(可选,默认 normal)、`due_at`(可选,Unix 秒)
- 查看列表:`status`(可选,pending/done)、`limit`(可选,默认 100)
- 标记完成:`ids`(必填,单个或逗号分隔多个)
- 删除:`ids`(必填,单个或逗号分隔多个)
- 提醒:`seconds`(可选,模拟运行秒数,默认 3)
- 缺少哪些参数时必须追问:
- 新增时缺少 `title` 必须追问
- 标记完成/删除时缺少 `ids` 必须追问
- 哪些动作必须先展示对象、数量和影响,再取得明确确认:
- 批量删除(影响多条数据,删除不可恢复)
- 批量标记完成(可提示将标记的数量)
- Agent 最终如何解释成功、部分成功、失败、等待人工和停止:
- 成功:返回操作后的待办数据或统计结果
- 部分成功:批量操作中逐条返回 `ok/id/error`,告知哪些成功哪些失败及原因
- 失败:返回 `ERROR:` 前缀 + 中文原因(如标题为空、编号不存在、已完成不可重复标记)
- 等待人工:本技能无外部依赖,无需人工介入
- 停止:async 任务支持 `JobStopped` 取消
### 授权与平台边界
- 目标浏览器 / 桌面软件 / 手机 App:
- 账号、设备、数据和业务权限由谁授权:
- 是否有获得授权的官方 API;若不用,原因是什么:
- 目标平台规则、合同或客户约定中的自动化边界:
- 明确禁止的实现路线:破解 / 反编译 / 逆向 / 私有协议 / 抓包拼隐藏接口 / Hook 或注入 / 验证码破解 / 设备指纹伪造 / 自动换号:
- 正常界面无法闭环时的上报与停止条件:
- 目标浏览器 / 桌面软件 / 手机 App:无
- 账号、设备、数据和业务权限由谁授权:无需外部授权,数据存于本地 SQLite
- 是否有获得授权的官方 API;若不用,原因是什么:不涉及外部系统
- 目标平台规则、合同或客户约定中的自动化边界:不适用
- 明确禁止的实现路线:不适用(无外部交互)
- 正常界面无法闭环时的上报与停止条件:不适用
### RPA 风控设计
- 执行端:浏览器 / 桌面 / Android / iOS:
- 真实界面版本、拾取工具和拾取日期:
- element map 文件路径;关键元素是否全部登记:
- 每个关键元素的作用域、主定位器、匹配数量和已验证 fallback:
- 页面 / iframe / 窗口 / 弹窗 / Native / WebView 如何选择:
- 会话、Profile、窗口或设备如何准备与互斥:
- 单批上限、单位时间操作量和最长运行时间:
- 普通动作节奏(真实环境默认 `1~3` 秒):
- 页面 / 控件真实状态如何判断;禁止用固定睡眠代替的节点:
- 哪些错误允许有限重试;退避策略:
- 哪些信号必须立即停止(频控、封禁、权限不足、结构变化等):
- 哪些步骤进入人工处理(验证码、人脸、指纹、短信、U盾等):
- 如何防止重复提交并支持必要的断点续跑:
- 需要保存哪些日志、截图、视频和业务结果:
- 定位失败时如何保存 DOM/UIA/XML、候选数量和环境版本:
不适用。本技能为纯本地数据操作,不涉及任何 RPA、浏览器、桌面或移动端自动化。
## 0.3 业务行生命周期(有「处理某一行」类能力时必填)
## 0.3 业务行生命周期
若本技能存在对业务表某一行做生成、触达、私信、发布等**有副作用**的处理,须遵守 [`../references/WORK_ITEM_STATUS.md`](../references/WORK_ITEM_STATUS.md),并在此声明**本技能状态 → 角色**映射(状态名自定,角色固定):
不适用。
| 角色 | 本技能状态值(可多个) | 说明 |
|------|------------------------|------|
| 可操作(operable) | (例)新建 / 待生成 / … | 默认唯一可被处理 Action 捞起 |
| 进行中(in_progress) | (例)生成中 / 触达中 / … | 抢占后、结束前 |
| 成功类终态 | (例)已生成 / 已私信 / … | 默认不可再处理 |
| 失败类终态 | (例)失败 / 触达失败 / … | 默认不可再处理;失败原因字段: |
| 跳过类终态 | (例)已跳过 / … | 默认不可再处理 |
无此类处理队列时整节写「不适用」即可。
本技能的 `todos` 表为用户直接管理的 CRUD 数据,不存在自动处理队列:
- `pending` → `done` 的状态变更由用户主动触发(`todo done`),非技能自动捞起处理。
- 无「进行中」抢占、无失败重试、无跳过逻辑。
- 因此不适用 `WORK_ITEM_STATUS.md` 的处理队列生命周期。
## 1. 文档目标
说明这份需求文档的作用,以及它解决什么问题。
模板写法:
- 本文档用于明确 `add-todo-all` 的研发范围、交付标准、依赖关系和验收要求。
- 技术人员应以本文件作为开发范围依据,以避免实现偏差、范围蔓延或理解不一致。
## 2. 业务背景
说明为什么要做这个 skill,它服务什么业务场景,解决什么实际问题。
模板写法:
- 当前用户在 `<业务场景>` 中需要反复处理 `<输入数据>`,人工操作耗时且易错。
- 现有流程主要依赖人工处理,存在 `<效率低 / 容易出错 / 不可批量 / 不可追踪>` 等问题。
- 因此需要开发 `add-todo-all`,用于自动完成 `<核心动作>`,输出 `<输出结果>`。
填写提示:
- `<业务场景>`:例如“每日批量导入外部系统结果”“Agent 触发的单次查询”
- `<输入数据>`:例如“关键词列表”“批次 ID”“账号标识”
- `<核心动作>`:例如“调用 adapter 提交”“采集并入库”“对账摘要生成”
- `<输出结果>`:例如“结构化 JSON”“任务摘要”“本地 SQLite 记录”
- 当前用户在日常工作中需要管理个人或团队的待办事项,人工记录容易遗漏且难以批量管理。
- 现有流程主要依赖手动记录,存在「不易追踪进度、无法批量操作、缺少到期提醒」等问题。
- 因此需要开发 `add-todo-all`,用于在本地自动完成待办的创建、查询、状态变更、批量删除与到期提醒,输出结构化 JSON 结果并持久化到本地 SQLite。
## 3. 开发目标
说明本次开发希望最终交付什么结果。
模板写法(按 skill 类型勾选/改写):
- 解析并校验 `<输入数据>` 的关键字段
- 通过 adapter 完成 mock / simulator / real 档位下的 `<核心动作>`
- 输出结构化结果(stdout JSON 或固定文本 + 机读字段)
- 写入必要的业务表(见 `references/SCHEMA.md`;无业务表也可)
- 支持失败可诊断(稳定错误码、`ERROR:` 前缀、必要截图/日志)
- 解析并校验待办输入的关键字段(标题非空、优先级合法、状态合法)
- 通过本地 SQLite 完成待办的增删改查
- 输出结构化结果(stdout JSON)
- 写入业务表 `todos`(含 `created_at` / `updated_at` Unix 秒级时间戳)
- 支持失败可诊断(稳定错误信息、`ERROR:` 前缀)
- 完成 CLI 入口与 `health` / `version` / `init-db` 最小可运行验证
- 完成正式环境发布与安装验证(如适用)
- 实现 async 提醒任务范式(`job_context` + `emit` + `finish`)
## 4. 功能范围
说明这次开发明确要实现哪些功能。
模板写法:
- 支持 `<命令1>`(如 `run`)
- 支持 `<命令2>`(如 `health` / 业务只读查询)
- 支持读取 `<数据来源>`(兄弟 skill / 本地 DB / 外部 API)
- 支持执行 `<核心业务动作>`
- 支持记录 `<日志 / 状态 / 结果>`
建议将功能拆成“必须实现”和“可后续扩展”。
### 必须实现
- 支持 `python scripts/main.py health`
- 支持 `python scripts/main.py version`
- 支持 `python scripts/main.py init-db`(幂等建库;宿主安装/更新后可静默调用)
- 支持 `python scripts/main.py <your-main-command>`
- 支持核心业务编排(HTTP / 批处理 / 可选 RPA,按四档 adapter 选型)
- 支持失败可诊断(统一文件日志 + 任务中心 `finish`)
- 完成 [`PRODUCT_SURFACES.md`](PRODUCT_SURFACES.md) 入口定位表,并按表落实已挂入口(对话 / 数据管理 / 定时按本技能 UX)
- 支持 `python scripts/main.py health`(运行时健康检查)
- 支持 `python scripts/main.py version`(版本信息 JSON)
- 支持 `python scripts/main.py init-db`(幂等建库与数据管理元数据)
- 支持 `python scripts/main.py todo add <title> [-p high|normal|low] [-d <unix秒>]`(新增待办)
- 支持 `python scripts/main.py todo list [-s pending|done] [-n <limit>]`(列出待办,默认 100 条,按创建时间倒序)
- 支持 `python scripts/main.py todo done <id>`(标记完成,支持逗号分隔批量)
- 支持 `python scripts/main.py todo delete <id>`(删除,支持逗号分隔批量)
- 支持 `python scripts/main.py todo stats`(统计总数/待办数/完成数)
- 支持 `python scripts/main.py remind [-s <秒>]`(async 提醒任务,演示进度推送与终态上报)
- 支持 `python scripts/main.py config-path`(输出 .env 与模板路径)
- 业务内核统一在 `service/todo_service.py`,CLI / Action / 数据管理按钮共用同一内核
- 数据管理元数据:`todos` 表及字段具备中文 `display_name`,状态/优先级为枚举下拉,整表只读
### 可后续扩展
- 支持失败自动重试
- 支持多 `<目标系统>` 轮询
- 入口定位表中已标明「本期不挂」且写了理由的能力(例如暂不挂定时)
- 支持多用户/多工作空间隔离
- 支持分类标签
- 支持截止时间到期的真实推送通知(当前 demo 仅统计,不做真实推送)
## 5. 非功能要求
说明除功能外,对稳定性、可维护性、目录规范、日志、编码等方面的要求。
- 目录结构必须符合当前 `skill-template` 规范
- 入口必须统一为 `scripts/main.py`
- 用户市场四 Tab 写在根 `README.md` / `TUTORIAL.md` / `DEMO.md` / `CHANGELOG.md`;LLM/运行契约写在 `SKILL.md`;开发规范在 `development/`
- 输出格式应尽量机读友好;错误前缀统一为 `ERROR:`
- Windows 环境下需保证 UTF-8 输出兼容
- 必须具备基本日志能力;敏感字段脱敏
- 只做授权范围内的正常界面自动化;禁止破解、逆向、未授权私有协议、安全验证绕过、进程注入、凭据窃取、自动换号和无限重试
- RPA 的页面加载与成功判断必须由真实状态驱动;正常业务动作之间默认随机等待 `1~3` 秒
- RPA 类 skill:Playwright 由宿主共享 runtime 提供;技能侧不要 `playwright install`;URL 不要放进 `launch_persistent_context` 的 `args`
- 网页 RPA:启动前必须经 ensure-web 拿到 `profile_dir`;生产有头;站点登录策略见 §0(required / optional / not_needed);`required` 时每轮须登录门禁
- 业务表时间字段统一使用 Unix 秒级整数(`created_at` / `updated_at`)
- 数据管理展示顺序由 `PRAGMA table_info` 的 cid 决定,不依赖 `display_order`
## 6. 输入输出要求
### 输入
填写本 skill 实际接受的参数与数据来源:
- `<参数名>`:含义、是否必填、默认值
- `<依赖系统>` 返回的结构化数据(如有)
- 环境变量 / `.env` 中的关键配置(引用 `CONFIG.md`)
- `title`:待办标题,必填,非空字符串
- `priority`:优先级,可选,枚举 `high` / `normal` / `low`,默认 `normal`
- `due_at`:截止时间,可选,Unix 秒整数,默认 null
- `status`:列表过滤状态,可选,枚举 `pending` / `done`
- `limit`:列表返回上限,可选,整数,默认 100
- `ids`:标记完成/删除的待办编号,必填,单个数字或逗号分隔的数字列表
- `seconds`:提醒任务模拟运行秒数,可选,整数,默认 3
- 环境变量 / `.env`:本技能无强制环境变量依赖(`.env.example` 为模板通用项,本技能不使用 RPA 相关配置)
### 输出
- 成功结果(stdout / JSON 字段说明)
- 错误输出(`ERROR:` 稳定码 + 中文 message)
- 数据库记录(表名、关键字段,见 `references/SCHEMA.md`)
- 可选:RPA 截图/视频路径(artifacts)
- 成功结果(stdout JSON):
- 新增:单条待办对象 `{id, title, status, priority, due_at, created_at, updated_at}`
- 列表:`{count, items: [Todo...]}`
- 标记完成/删除:`{count, items: [{ok, id, ...}]}`
- 统计:`{total, pending, done}`
- 错误输出:
- `ERROR:TODO_INVALID: <原因>`(标题为空、优先级非法等)
- 批量操作中失败项返回 `{ok: false, id, error}`
- 数据库记录:表 `todos`,字段 `id, title, status, priority, due_at, created_at, updated_at`
- async 提醒任务:通过 `emit` 推送进度,通过 `finish` 上报终态
## 7. 依赖的兄弟技能或外部系统
### 兄弟技能依赖
- `<sibling-skill-slug>`:`<用途>`(例如 account-manager 提供 profile_dir / 租约)
- 无(不依赖 account-manager 或其他兄弟技能)
### 外部系统依赖
- `<目标系统>`:`<用途>`(HTTP API / 仿真 sandbox / 真实网页)
- 浏览器(如适用):系统 Chrome/Edge,非 Playwright 内置 Chromium
- 无(纯本地 SQLite 存储,不访问任何外部 API 或网页)
- Gitea / 匠厂客户端:发布与正式环境验证
### Python 包依赖(requirements.txt)
- 本技能若需**特有** Python 三方包,写入根目录 `requirements.txt`。
- `jiangchang-platform-kit`、`playwright` 等公共能力由宿主共享 runtime 提供,**不要**写入技能 requirements。
- `SKILL.md` 的 `platform_kit_min_version` 是运行契约/兼容性声明,**不是** pip 依赖声明。
- 版本须尽量收窄(如 `requests>=2.31.0,<3`),避免共享 venv 冲突。
- **不要**把系统运行时组件写进 requirements.txt;在 `health` / preflight 中检测并提示。
- 本技能无特有 Python 三方包依赖(仅使用 Python 标准库 `sqlite3`、`argparse`、`asyncio`、`json` 等)
- `jiangchang-platform-kit` 由宿主共享 runtime 提供,不写入 requirements
## 8. 不在本次范围内的内容
明确本次“不做什么”,避免范围蔓延:
- 本次不实现 `<功能A>`
- 本次不处理 `<平台B>` / `<档位>`
- 本次不做 `<高级能力>`
- 本次不实现分类标签功能
- 本次不实现多用户/多工作空间隔离
- 本次不实现截止时间到期的真实推送通知(remind 仅为 async 范式演示,统计后不做真实推送)
- 本次不实现失败自动重试
- 本次不兼容旧模板历史结构(`docs/`、`optional/`、`skill_main.py` 等)
## 9. 验收标准
什么情况下才算开发完成:
- 代码结构符合模板规范;`SKILL.md` slug 与 `constants.SKILL_SLUG` 一致
- `health`、`version`、`init-db` 命令执行正常
- `python tests/run_tests.py -v` 必跑测试全部通过(mock / 离线门禁;**mock 通 ≠ 完成**)
- 主命令在业务默认档(模板为 `real_rpa`)真实跑通;不得只 mock 通就交活
- 业务表(若有)写入和查询符合 `references/SCHEMA.md`(含 `created_at` / `updated_at` Unix 秒级规范)
- `init_db()` 已写入 `_jiangchang_tables` / `_jiangchang_columns`;用户可见表/字段具备中文 `display_name`
- 字段展示顺序与 `PRAGMA table_info(<业务表>)` 的 cid 一致;不依赖 `display_order`
- `python tests/run_tests.py -v` 必跑测试全部通过
- `todo add` / `todo list` / `todo done` / `todo delete` / `todo stats` 命令在本地真实跑通
- 业务表 `todos` 写入和查询符合 `references/SCHEMA.md`(含 `created_at` / `updated_at` Unix 秒级规范)
- `init_db()` 已写入 `_jiangchang_tables` / `_jiangchang_columns`;`todos` 表及字段具备中文 `display_name`
- `todos` 表 `readonly=1`,字段 `editable=0`,宿主不直写业务表
- `status` / `priority` 字段具备 `options_json` 枚举下拉
- 字段展示顺序与 `PRAGMA table_info(todos)` 的 cid 一致;不依赖 `display_order`
- `tests/test_display_metadata.py` 通过
- 真实联调样例仍放 `tests/integration/`,默认套件不包含真实外联(与业务 `.env` 默认 `real_rpa` 不冲突)
- `SKILL.md` 的 `developer_ids` 已配置为开发者本人匠厂用户 ID(开发期不公开时,否则本人无法在市场安装自测;取 ID 步骤见 `development/DEVELOPMENT.md` §6)
- `SKILL.md` 的 `developer_ids` 已配置为开发者本人匠厂用户 ID
- 发布后 Gitea 工作流成功;匠厂技能市场对开发者账号可见最新版本并可安装
- 安装后按本技能入口定位表与 `actions.json` 声明完成宿主多入口验收(见 `development/DEVELOPMENT.md` §15、`PRODUCT_SURFACES.md`);**须看用户体验**(进度可见、失败可读、RPA 有头、文案与真实行为一致等),后台通了不算完
- 已人工核验授权与技术路线:无破解、逆向、私有协议、验证码绕过、Hook / 注入、自动换号或其他规避平台限制的实现
- RPA 真实主路径已验证状态等待、`1~3` 秒正常操作节奏、有限重试、账号 / 设备串行、人工介入、结果核验和结束存证
- RPA 关键元素已在真实界面拾取并登记 element map;关键动作唯一定位,重启会话后复测通过
- 页面/窗口/设备结构变化时停止并保存截图与 DOM/UIA/XML,不运行时猜 selector
- 安装后按本技能入口定位表与 `actions.json` 声明完成宿主多入口验收
## 10. 开发注意事项
- 只修改当前 skill 仓库,不要改动无关兄弟项目
- 正常界面或获得授权的官方 API 无法完成闭环时,停止并上报;不得擅自改走破解、逆向或绕过安全机制的路线
- 先判断四象限类型(`real_browser_rpa` / `real_api` / `simulator_browser_rpa` / `simulator_api`),再读对应 `examples/*/README.md`
- 涉及界面时再按端阅读 `RPA_ELEMENT_LOCATING.md` 和 `RPA_BROWSER.md` / `RPA_DESKTOP.md` / `RPA_MOBILE.md`
- `cli` 只做参数解析;核心逻辑在 `service`;兄弟 skill 调用集中封装(见 `ADAPTER.md`)
- `cli` 只做参数解析;核心业务逻辑在 `service/todo_service.py`
- 单业务内核、多入口:CLI / Action / 数据管理按钮都调用 `todo_service` 的同一函数,禁止按入口分叉业务行为
- 数据表为只读,所有增删改通过技能 Action 走,宿主不直写
- 发布前完成本地验证、工作流验证和正式环境安装验证(含 `developer_ids` 与宿主多入口)
## 11. 变更记录
| 日期 | 版本 | 变更人 | 变更内容 |
|------|------|--------|----------|
| YYYY-MM-DD | v1.0 | `<姓名>` | 初版需求文档 |
---
## 建议使用方式
1. 拿到业务技能仓库(Gitea clone,或本地从 `skill-template` scaffold / 复制;见 `DEVELOPMENT.md` §4)
2. 先写 / 填全本文件 `REQUIREMENTS.md`
3. 再按 `DEVELOPMENT.md` 进入开发(含尽早配置 `developer_ids`)
4. 开发过程中补充 `references/CLI.md`、`references/SCHEMA.md` 及 `development/` 技术规范
5. 发布前对照第 9 节验收标准逐项检查;release 后按 `DEVELOPMENT.md` §15 做宿主多入口验收
## 最小模板示例
下面给出一个可直接参考的简化版(复制后替换占位符):
```md
# REQUIREMENTS
## 1. 文档目标
本文档用于明确 `add-todo-all` 的研发需求、范围和验收标准,作为开发与测试的统一依据。
## 2. 业务背景
当前用户在 `<业务场景>` 中需要反复处理 `<输入数据>`,人工操作耗时且易错。
因此需要开发 `add-todo-all`,自动完成 `<核心动作>`,输出 `<输出结果>`。
## 3. 开发目标
- 解析并校验输入
- 通过 adapter 完成 mock / simulator / real 档位动作
- 输出结构化结果;业务结果写入业务表(有才建)
- 支持失败可诊断
## 4. 功能范围
- 支持 health / version / init-db / run
## 5. 非功能要求
- 入口统一为 scripts/main.py
- 保持 UTF-8 输出;结构符合 skill-template
## 6. 输入输出要求
### 输入
- target_id、input_id(按业务定义)
### 输出
- 成功 JSON / 摘要
- ERROR: 稳定错误码
- 任务中心终态(`finish`)
## 7. 依赖的兄弟技能或外部系统
- `<sibling-skill>`(按需)
- `<目标系统>` API 或 sandbox
## 8. 不在本次范围内的内容
- 不实现自动重试
- 不实现 `<本次不做>`
## 9. 验收标准
- 命令可运行;tests/run_tests.py -v 通过
- 业务表(若有)符合 SCHEMA;过程看运行日志,进度看任务中心
- `developer_ids` 已配置为「你的用户ID」(匠厂设置中复制的正整数)
- 正式环境安装验证通过;已声明的宿主入口(新建任务 / 数据管理 / 定时任务 / 任务中心 / 技能详情等)按 DEVELOPMENT §15 与入口定位表自测
## 10. 开发注意事项
- 不修改无关项目;不引入旧模板结构
## 11. 变更记录
| 日期 | 版本 | 变更人 | 变更内容 |
|------|------|--------|----------|
| YYYY-MM-DD | v1.0 | 张三 | 初版 |
```
| 2026-09-07 | v0.1.0 | - | 初版需求文档 |

View File

@@ -2,7 +2,7 @@
## 共享 Python Runtime
**skill-template** 及复制出的新技能,公共能力均来自宿主匠厂安装的共享 Python Runtime(`jiangchang-platform-kit>=1.2.11` 及其传递依赖,含 `playwright`)。`jiangchang_skill_core` **不得**在技能仓库内 vendored,应由共享 venv 的 site-packages 提供。
**skill-template** 及复制出的新技能,公共能力均来自宿主匠厂安装的共享 Python Runtime(`jiangchang-platform-kit>=1.2.11` 及其传递依赖,含 `playwright`)。 在技能仓库内,不得 vendored `jiangchang_skill_core`,应由共享 venv 的 site-packages 提供。
技能根目录 `requirements.txt` **只声明技能特有依赖**;**不要**重复声明 `jiangchang-platform-kit` 或 `playwright`。`SKILL.md` 的 `platform_kit_min_version` 是运行契约,**不是** pip 依赖声明。