visual-spec 0.1.0
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/.trae/skills/starter-skill/SKILL.md +326 -0
- package/.trae/skills/starter-skill/prompts/vspec_accept/accept.md +52 -0
- package/.trae/skills/starter-skill/prompts/vspec_change/change.md +40 -0
- package/.trae/skills/starter-skill/prompts/vspec_detail/code_rules.md +32 -0
- package/.trae/skills/starter-skill/prompts/vspec_detail/cron_job.md +24 -0
- package/.trae/skills/starter-skill/prompts/vspec_detail/data_permission.md +30 -0
- package/.trae/skills/starter-skill/prompts/vspec_detail/decision_matrix.md +38 -0
- package/.trae/skills/starter-skill/prompts/vspec_detail/expression_tree.md +44 -0
- package/.trae/skills/starter-skill/prompts/vspec_detail/file_export.md +25 -0
- package/.trae/skills/starter-skill/prompts/vspec_detail/file_import.md +27 -0
- package/.trae/skills/starter-skill/prompts/vspec_detail/formula.md +27 -0
- package/.trae/skills/starter-skill/prompts/vspec_detail/interaction.md +30 -0
- package/.trae/skills/starter-skill/prompts/vspec_detail/judgemental_matrix.md +47 -0
- package/.trae/skills/starter-skill/prompts/vspec_detail/logging_matrix.md +25 -0
- package/.trae/skills/starter-skill/prompts/vspec_detail/mq.md +43 -0
- package/.trae/skills/starter-skill/prompts/vspec_detail/nfp.md +31 -0
- package/.trae/skills/starter-skill/prompts/vspec_detail/notification_matrix.md +25 -0
- package/.trae/skills/starter-skill/prompts/vspec_detail/page_load.md +54 -0
- package/.trae/skills/starter-skill/prompts/vspec_detail/post_submit_check.md +30 -0
- package/.trae/skills/starter-skill/prompts/vspec_detail/post_submit_navigation.md +21 -0
- package/.trae/skills/starter-skill/prompts/vspec_detail/post_submit_processing.md +39 -0
- package/.trae/skills/starter-skill/prompts/vspec_detail/rbac.md +30 -0
- package/.trae/skills/starter-skill/prompts/vspec_detail/state_machine.md +25 -0
- package/.trae/skills/starter-skill/prompts/vspec_detail/timeline.md +123 -0
- package/.trae/skills/starter-skill/prompts/vspec_detail/validation_matrix.md +31 -0
- package/.trae/skills/starter-skill/prompts/vspec_impl/implement.md +87 -0
- package/.trae/skills/starter-skill/prompts/vspec_new/background.md +76 -0
- package/.trae/skills/starter-skill/prompts/vspec_new/dependencies.md +41 -0
- package/.trae/skills/starter-skill/prompts/vspec_new/details.md +14 -0
- package/.trae/skills/starter-skill/prompts/vspec_new/details_boundaries.md +42 -0
- package/.trae/skills/starter-skill/prompts/vspec_new/details_constraints.md +70 -0
- package/.trae/skills/starter-skill/prompts/vspec_new/details_pre_post.md +45 -0
- package/.trae/skills/starter-skill/prompts/vspec_new/details_symmetry.md +47 -0
- package/.trae/skills/starter-skill/prompts/vspec_new/details_variations.md +52 -0
- package/.trae/skills/starter-skill/prompts/vspec_new/flows.md +38 -0
- package/.trae/skills/starter-skill/prompts/vspec_new/functions.md +82 -0
- package/.trae/skills/starter-skill/prompts/vspec_new/questions.md +38 -0
- package/.trae/skills/starter-skill/prompts/vspec_new/roles.md +35 -0
- package/.trae/skills/starter-skill/prompts/vspec_new/scenarios.md +100 -0
- package/.trae/skills/starter-skill/prompts/vspec_new/stakeholders.md +62 -0
- package/.trae/skills/starter-skill/prompts/vspec_new/terms.md +38 -0
- package/.trae/skills/starter-skill/prompts/vspec_plan/estimate.md +32 -0
- package/.trae/skills/starter-skill/prompts/vspec_plan/schedule.md +43 -0
- package/.trae/skills/starter-skill/prompts/vspec_qc/22./351/234/200/346/261/202/345/210/206/346/236/220/351/224/231/351/242/230/346/234/254.xlsx +0 -0
- package/.trae/skills/starter-skill/prompts/vspec_qc/qc.md +38 -0
- package/.trae/skills/starter-skill/prompts/vspec_qc/quality_standard.md +35 -0
- package/.trae/skills/starter-skill/prompts/vspec_refine/refine.md +78 -0
- package/.trae/skills/starter-skill/prompts/vspec_refine/refine_q.md +39 -0
- package/.trae/skills/starter-skill/prompts/vspec_test/test.md +33 -0
- package/.trae/skills/starter-skill/prompts/vspec_upgrade/upgrade.md +50 -0
- package/.trae/skills/starter-skill/prompts/vspec_verify/model.md +67 -0
- package/.trae/skills/starter-skill/prompts/vspec_verify/prototype.md +744 -0
- package/.trae/skills/starter-skill/prompts/vspec_verify/prototype_apply.md +72 -0
- package/.trae/skills/starter-skill/prompts/vspec_verify/prototype_approve.md +61 -0
- package/.trae/skills/starter-skill/prompts/vspec_verify/prototype_calendar.md +29 -0
- package/.trae/skills/starter-skill/prompts/vspec_verify/prototype_crud.md +59 -0
- package/.trae/skills/starter-skill/prompts/vspec_verify/prototype_dashboard.md +37 -0
- package/.trae/skills/starter-skill/prompts/vspec_verify/prototype_execute.md +62 -0
- package/.trae/skills/starter-skill/prompts/vspec_verify/prototype_landing.md +36 -0
- package/.trae/skills/starter-skill/prompts/vspec_verify/prototype_mobile_list.md +34 -0
- package/.trae/skills/starter-skill/prompts/vspec_verify/prototype_tool_pages.md +74 -0
- package/.trae/skills/starter-skill/prompts/vspec_verify/prototype_toolbox.md +26 -0
- package/.trae/skills/starter-skill/prompts/vspec_verify/validation.md +48 -0
- package/LICENSE +21 -0
- package/README.md +31 -0
- package/bin/vreq-skill.cjs +18 -0
- package/docs/commands.md +84 -0
- package/docs/concepts.md +36 -0
- package/docs/installation.md +32 -0
- package/docs/structure.md +69 -0
- package/docs/workflows.md +69 -0
- package/package.json +25 -0
- package/scripts/postinstall.cjs +116 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
你是一名资深系统分析师。你的任务是:当“单个功能点涉及文件导入”时,输出文件导入的详细规格;若不涉及,输出“不涉及导入”即可。结果写入指定的输出文件。
|
|
2
|
+
|
|
3
|
+
输入信息(由上游提供):
|
|
4
|
+
- 当前功能点:模块/功能/子功能/说明(来自 `/specs/functions/*`)
|
|
5
|
+
- 数据模型(`/specs/models/*.md`)
|
|
6
|
+
- 校验矩阵(如有)
|
|
7
|
+
|
|
8
|
+
产出要求(涉及导入时):
|
|
9
|
+
1. 导入场景:入口位置(页面/按钮)、导入目的(新增/更新/校正/批量审批等)
|
|
10
|
+
2. 文件格式:xlsx/csv,编码,大小限制,行数限制
|
|
11
|
+
3. 模板定义(必须用表格):
|
|
12
|
+
| 列名 | 字段映射 | 类型 | 必填 | 示例 | 校验规则 | 备注 |
|
|
13
|
+
| --- | --- | --- | --- | --- | --- | --- |
|
|
14
|
+
4. 处理流程:
|
|
15
|
+
- 预检查(权限、数据权限、模板版本)
|
|
16
|
+
- 解析与逐行校验(与校验矩阵联动)
|
|
17
|
+
- 事务策略(全量回滚/部分成功)
|
|
18
|
+
- 重复数据处理(幂等 key / 覆盖/跳过)
|
|
19
|
+
5. 导入结果反馈:
|
|
20
|
+
- 成功条数/失败条数
|
|
21
|
+
- 错误明细下载(是否需要,格式)
|
|
22
|
+
6. 失败与降级:
|
|
23
|
+
- 大文件超时、解析失败、字段缺失
|
|
24
|
+
- 重试与断点续传(如适用)
|
|
25
|
+
|
|
26
|
+
输出写入:
|
|
27
|
+
- 将结果写入上游指定的 markdown 文件路径(通常在 `/specs/details/<module_slug>/file_import/<function_slug>.md`)
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
你是一名资深业务分析师 + 数据产品经理。你的任务是:针对“单个功能点”(页面或非页面),梳理并输出本功能涉及的计算公式与口径定义,避免实现与验收出现歧义,并写入指定的输出文件。
|
|
2
|
+
|
|
3
|
+
输入信息(由上游提供):
|
|
4
|
+
- 当前功能点:模块/功能/子功能/说明(来自 `/specs/functions/*`)
|
|
5
|
+
- 术语与口径(`/specs/background/terms.md`)
|
|
6
|
+
- 数据模型(`/specs/models/*.md`)
|
|
7
|
+
- 场景与流程(`/specs/flows/*.puml`、`/specs/background/scenarios.md`、`/specs/background/scenario_details/` 或 `/specs/background/scenario_details.md`(旧版))
|
|
8
|
+
|
|
9
|
+
适用性判断:
|
|
10
|
+
- 若该功能点不涉及任何计算(金额/数量/时长/比率/积分/评分/权重/汇总/分摊/折扣/税费/绩效等),输出“本功能无计算公式:不适用”,并列出你判断为“无计算”的依据(1 句话)即可。
|
|
11
|
+
|
|
12
|
+
产出要求(涉及计算时必须全部满足):
|
|
13
|
+
1. 公式清单(必须,用表格):
|
|
14
|
+
| 编号 | 指标/字段 | 业务含义 | 公式(数学表达) | 口径与边界 | 精度与舍入 | 示例输入 | 示例输出 |
|
|
15
|
+
| --- | --- | --- | --- | --- | --- | --- | --- |
|
|
16
|
+
2. 口径与边界必须明确(不可笼统):
|
|
17
|
+
- 取数范围:按组织/租户/权限/时间范围/状态过滤的口径(可引用 terms 与 data_permission 输出)
|
|
18
|
+
- 边界处理:空值/0/负数/超上限/缺字段/跨币种/跨税率/跨单位等
|
|
19
|
+
- 统计口径:去重口径、是否含税/含运费/含手续费、是否按自然日/工作日、是否按提交/审批/生效时间等
|
|
20
|
+
3. 精度与舍入规则必须可实现:
|
|
21
|
+
- 小数位数、四舍五入/截断/银行家舍入
|
|
22
|
+
- 金额分/元换算、汇率与税率取值来源(如有)
|
|
23
|
+
4. 示例必须成对给出:
|
|
24
|
+
- 至少给出 1 组简单示例与 1 组边界示例
|
|
25
|
+
|
|
26
|
+
输出写入:
|
|
27
|
+
- 将结果写入上游指定的 markdown 文件路径(通常在 `/specs/details/<module_slug>/formula/<function_slug>.md`)
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
你是一名资深前端架构师 + 交互设计师。你的任务是:针对“单个页面型功能点”,输出页面交互逻辑(用户动作→状态变化→请求→反馈→异常),并写入指定的输出文件。
|
|
2
|
+
|
|
3
|
+
输入信息(由上游提供):
|
|
4
|
+
- 当前功能点:模块/功能/子功能/说明(来自 `/specs/functions/*`)
|
|
5
|
+
- 角色与 RBAC(`/specs/background/roles.md`、RBAC 产物如有)
|
|
6
|
+
- 场景节点(`/specs/background/scenarios.md`)
|
|
7
|
+
- 数据模型(`/specs/models/*.md`)
|
|
8
|
+
|
|
9
|
+
适用性判断:
|
|
10
|
+
- 若该功能点不是页面,输出“非页面:不适用”,并说明其输入/输出与触发方式。
|
|
11
|
+
|
|
12
|
+
产出要求(页面场景):
|
|
13
|
+
0. 原型访问地址(必须):
|
|
14
|
+
- 输出“原型访问”小节,给出可点击链接,点击后在新 tab 打开(使用 `<a target="_blank">`):
|
|
15
|
+
- 原型首页:`http://localhost:5173/`(若端口不同可自行替换)
|
|
16
|
+
- 当前页面路由:根据本页面推荐路由拼出完整 URL(例如 `http://localhost:5173/apply`),并给出 1 个“移动端路由”(若本页面或其中动作要求手机端)
|
|
17
|
+
- 场景确认页:相对路径链接到 `scenario.html`(从当前 md 文件到 `/specs/prototypes/scenario.html`)
|
|
18
|
+
1. 页面关键组件清单(区域/控件/组件)
|
|
19
|
+
2. 关键交互流程(至少覆盖:查询、分页、查看详情、编辑/提交、取消、变更、审批/驳回、执行开始/结束、紧急叫停 中与本页面相关的部分)
|
|
20
|
+
3. 以表格形式输出“交互用例”(必须):
|
|
21
|
+
| 编号 | 用户动作 | 前置条件 | 界面反馈(同步) | 请求/副作用 | 成功反馈 | 失败反馈 | 数据变化 |
|
|
22
|
+
| --- | --- | --- | --- | --- | --- | --- | --- |
|
|
23
|
+
4. 交互细则:
|
|
24
|
+
- 防重复提交(按钮禁用/节流/幂等 key)
|
|
25
|
+
- 长任务处理(进度/轮询/异步提示)
|
|
26
|
+
- 权限导致的置灰/隐藏规则(引用 permission_key)
|
|
27
|
+
- 状态机导致的可操作性变化(引用 status)
|
|
28
|
+
|
|
29
|
+
输出写入:
|
|
30
|
+
- 将结果写入上游指定的 markdown 文件路径(通常在 `/specs/details/<module_slug>/interaction/<function_slug>.md`)
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
你是一名资深业务分析师 + 系统分析师。你的任务是:针对“单个功能点”(页面或非页面),识别由两个或以上因素共同决定走向的业务判定逻辑,并用“判定矩阵”把逻辑走向表达清楚,避免口头规则遗漏组合,并写入指定的输出文件。
|
|
2
|
+
|
|
3
|
+
输入信息(由上游提供):
|
|
4
|
+
- 当前功能点:模块/功能/子功能/说明(来自 `/specs/functions/*`)
|
|
5
|
+
- 场景与流程(`/specs/flows/*.puml`、`/specs/background/scenarios.md`、`/specs/background/scenario_details/` 或 `/specs/background/scenario_details.md`(旧版))
|
|
6
|
+
- 角色与权限(`/specs/background/roles.md`、RBAC 产物如有)
|
|
7
|
+
- 数据模型(`/specs/models/*.md`)
|
|
8
|
+
- 外部依赖(`/specs/background/dependencies.md`)
|
|
9
|
+
|
|
10
|
+
适用性判断:
|
|
11
|
+
- 若本功能不存在“由 2 个或以上因素共同决定走向”的判定逻辑,输出“本功能无需判定矩阵:不适用”,并用 1 句话说明依据即可。
|
|
12
|
+
|
|
13
|
+
判定矩阵识别范围(至少覆盖,按需取用):
|
|
14
|
+
- 状态机 + 角色权限(例如:状态=待审批 且 角色=经理 → 可审批;否则不可)
|
|
15
|
+
- 渠道/来源 + 业务类型(例如:来源=API 且 类型=紧急 → 走快速通道)
|
|
16
|
+
- 时间范围 + 金额/数量阈值(例如:超期 且 金额>阈值 → 触发补充审批)
|
|
17
|
+
- 组织/数据权限范围 + 操作类型(例如:跨组织 且 操作=变更 → 需额外校验)
|
|
18
|
+
- 外部依赖可用性 + 重试次数/幂等状态(例如:依赖不可用 且 重试未达上限 → 排队重试)
|
|
19
|
+
|
|
20
|
+
适用性边界(必须):
|
|
21
|
+
- 判定矩阵仅用于“业务逻辑走向/动作/结果”的分析,不用于排序、筛选、推荐、打分、权重计算等场景;若仅涉及排序/筛选口径,输出“本功能无需判定矩阵:不适用”。
|
|
22
|
+
|
|
23
|
+
输出要求(涉及判定矩阵时必须满足):
|
|
24
|
+
1. 先给出“因素与选项定义”(必须,用表格):
|
|
25
|
+
| 因素 | 选项(枚举) | 取值来源/口径 | 备注 |
|
|
26
|
+
| --- | --- | --- | --- |
|
|
27
|
+
|
|
28
|
+
2. 判定矩阵(必须,按因素个数选择呈现方式):
|
|
29
|
+
- 若仅 2 个因素:使用正交矩阵(二维表)呈现
|
|
30
|
+
- 行 = 因素 A 选项,列 = 因素 B 选项,单元格 = 逻辑走向/动作/结果
|
|
31
|
+
- 表头示例:`| 因素A \\ 因素B | B1 | B2 | ... |`
|
|
32
|
+
- 若 >= 3 个因素:使用“组合遍历表”呈现
|
|
33
|
+
- 横向列出所有因素(每列一个因素),以及 1 列“走向/动作/结果”
|
|
34
|
+
- 表体必须遍历所有组合;若组合数过大,允许合并为规则行,但必须显式给出合并条件(如:B in {B2,B3} 且 C=Any)
|
|
35
|
+
- 表头固定为:`| A | B | C | ... | 走向/动作/结果 | 备注 |`
|
|
36
|
+
|
|
37
|
+
3. “走向/动作/结果”必须可执行、可验收:
|
|
38
|
+
- 走向:进入的流程节点/状态变化/下一页面/下一步骤
|
|
39
|
+
- 动作:触发的校验/接口调用/通知/日志/任务创建/审批流路由等
|
|
40
|
+
- 结果:成功/失败/阻断/降级处理及提示文案(如有)
|
|
41
|
+
|
|
42
|
+
4. 冲突与兜底(必须):
|
|
43
|
+
- 若存在多条规则可命中,说明优先级与冲突解决策略(例如:先按权限拦截,再按状态机判定)
|
|
44
|
+
- 给出至少 1 条兜底规则(未覆盖组合的默认处理)
|
|
45
|
+
|
|
46
|
+
输出写入:
|
|
47
|
+
- 将结果写入上游指定的 markdown 文件路径(通常在 `/specs/details/<module_slug>/judgemental_matrix/<function_slug>.md`)
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
你是一名资深系统分析师 + 可观测性负责人。你的任务是:针对“单个功能点”,输出是否需要记录日志,并以矩阵形式呈现,写入指定的输出文件。
|
|
2
|
+
|
|
3
|
+
输入信息(由上游提供):
|
|
4
|
+
- 当前功能点:模块/功能/子功能/说明(来自 `/specs/functions/*`)
|
|
5
|
+
- 交互与处理逻辑(如有)
|
|
6
|
+
- 外部依赖(`/specs/background/dependencies.md`)
|
|
7
|
+
|
|
8
|
+
适用性判断(必须):
|
|
9
|
+
- 日志矩阵仅在确实需要“留存修改记录/操作审计/合规追溯/不可抵赖”时输出。
|
|
10
|
+
- 若该功能点不存在上述需求,且数据本身已经能够表达业务轨迹(例如状态字段 + 更新时间 + 变更记录天然在业务表中体现),则输出单行:`SKIP`
|
|
11
|
+
|
|
12
|
+
产出要求:
|
|
13
|
+
1. 日志分层:
|
|
14
|
+
- 操作审计日志(谁在什么时间对什么对象做了什么)
|
|
15
|
+
- 业务流水/轨迹(状态流转、审批轨迹)
|
|
16
|
+
- 系统运行日志(异常、超时、重试)
|
|
17
|
+
- 集成日志(外部调用/回调/对账)
|
|
18
|
+
2. 输出日志矩阵(必须),表头固定:
|
|
19
|
+
| 事件/动作 | 是否记录 | 日志类型 | 记录时机 | 关键字段 | 脱敏字段 | 保留期 | 触发角色/系统 | 备注 |
|
|
20
|
+
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
|
|
21
|
+
3. “关键字段”至少包含:对象主键、业务单号、状态前后值、操作者、trace_id/request_id(如适用)。
|
|
22
|
+
4. 若不记录,也要写明原因(例如无安全/审计要求、可从其他日志追溯)。
|
|
23
|
+
|
|
24
|
+
输出写入:
|
|
25
|
+
- 将结果写入上游指定的 markdown 文件路径(通常在 `/specs/details/<module_slug>/logging_matrix/<function_slug>.md`)
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
你是一名资深分布式系统架构师。你的任务是:当“单个功能点涉及 MQ/事件总线/消息队列”时,输出可落地的消息设计与可靠性方案;若不涉及 MQ,输出“不涉及 MQ”即可。结果写入指定的输出文件。
|
|
2
|
+
|
|
3
|
+
输入信息(由上游提供):
|
|
4
|
+
- 当前功能点:模块/功能/子功能/说明(来自 `/specs/functions/*`)
|
|
5
|
+
- 场景与流程(`/specs/background/scenarios.md`、`/specs/flows/*.puml`、`/specs/background/scenario_details/` 或 `/specs/background/scenario_details.md`(旧版))
|
|
6
|
+
- 数据模型与状态机(`/specs/models/*.md`)
|
|
7
|
+
- 外部依赖(`/specs/background/dependencies.md`)
|
|
8
|
+
|
|
9
|
+
产出要求(涉及 MQ 时):
|
|
10
|
+
1. 明确消息用途:
|
|
11
|
+
- 事件通知(领域事件)
|
|
12
|
+
- 异步处理(耗时任务/批处理)
|
|
13
|
+
- 跨系统集成(对外发布/订阅)
|
|
14
|
+
2. 输出“消息清单表”(必须),表头固定:
|
|
15
|
+
| 事件/消息名 | Topic/Queue | 生产者 | 消费者 | 触发条件 | 消息体 schema(字段列表) | 幂等键 | 顺序要求 | 重试策略 | DLQ 策略 | 备注 |
|
|
16
|
+
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
|
|
17
|
+
3. schema 字段列表要求至少包含:
|
|
18
|
+
- event_id(全局唯一)
|
|
19
|
+
- event_time
|
|
20
|
+
- biz_type / biz_id(业务对象类型与主键/单号)
|
|
21
|
+
- producer(系统/模块)
|
|
22
|
+
- payload(核心业务字段,列出关键字段即可)
|
|
23
|
+
- trace_id / request_id(如适用)
|
|
24
|
+
4. 一致性与事务:
|
|
25
|
+
- 明确“数据落库”与“发消息”的一致性策略:outbox/事务消息/最终一致性
|
|
26
|
+
- 若使用 outbox:给出 outbox 表最小字段(id、event_name、payload、status、retry_count、next_retry_at、created_at)
|
|
27
|
+
5. 幂等与去重:
|
|
28
|
+
- 消费端幂等策略(幂等表/去重缓存/基于业务状态机)
|
|
29
|
+
- 重复消息处理行为(忽略/覆盖/补偿)
|
|
30
|
+
6. 顺序与并发:
|
|
31
|
+
- 是否需要按 biz_id 有序
|
|
32
|
+
- 分区键建议(partition key)
|
|
33
|
+
- 并发消费对数据一致性的影响与锁策略
|
|
34
|
+
7. 重试、DLQ 与人工介入:
|
|
35
|
+
- 重试次数与退避策略(固定/指数退避)
|
|
36
|
+
- 进入 DLQ 条件
|
|
37
|
+
- DLQ 后的处理方式(告警、工单、手工重放、自动重放)
|
|
38
|
+
8. 可观测性与告警:
|
|
39
|
+
- 指标(堆积量、消费延迟、失败率、DLQ 数)
|
|
40
|
+
- 关键日志字段(event_id、biz_id、topic、consumer、retry_count)
|
|
41
|
+
|
|
42
|
+
输出写入:
|
|
43
|
+
- 将结果写入上游指定的 markdown 文件路径(通常在 `/specs/details/<module_slug>/mq/<function_slug>.md`)
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
你是一名资深架构师 + SRE/安全负责人。你的任务是:针对“当前模块/整体方案”(跨多个功能点),汇总非功能性需求(NFR/NFP),覆盖性能、压测、安全、兼容、容错、稳定性,并输出可验收的约束与检查点,写入指定的输出文件。
|
|
2
|
+
|
|
3
|
+
输入信息(由上游提供):
|
|
4
|
+
- 当前模块:模块名 + 该模块下的功能点清单(来自 `/specs/functions/*`)
|
|
5
|
+
- 已生成的细节(如有):RBAC、数据权限、交互、校验、MQ、通知、导入导出、定时任务等(来自 `/specs/details/`)
|
|
6
|
+
- 外部依赖(`/specs/background/dependencies.md`)
|
|
7
|
+
- 角色与场景(`/specs/background/roles.md`、`/specs/background/scenarios.md`、`/specs/background/scenario_details/` 或 `/specs/background/scenario_details.md`(旧版),如存在)
|
|
8
|
+
|
|
9
|
+
产出要求(必须):
|
|
10
|
+
1. 仅针对“当前模块/整体方案”输出,不要泛泛而谈;内容必须可落地、可测试、可验收。
|
|
11
|
+
2. 以小节形式输出,标题固定如下(必须全部出现;不适用则写 Not Applicable 并说明原因):
|
|
12
|
+
- 性能(Performance)
|
|
13
|
+
- 压力/容量(Load & Stress)
|
|
14
|
+
- 安全(Security)
|
|
15
|
+
- 兼容(Compatibility)
|
|
16
|
+
- 容错/降级(Fault Tolerance)
|
|
17
|
+
- 稳定性/可用性(Stability & Availability)
|
|
18
|
+
3. 每个小节至少包含:
|
|
19
|
+
- 约束/目标:清晰指标或边界(例如延迟/吞吐/并发/峰值/数据量/可用性目标等,若无法定量则给出定性验收口径)
|
|
20
|
+
- 关键风险:为什么需要该约束(结合该功能点的流程、依赖、数据权限、外部调用、任务形态等)
|
|
21
|
+
- 验收/测试点:可执行的检查点列表(含必要的测试类型、场景覆盖、失败判定)
|
|
22
|
+
4. 与现有细节产物的联动:
|
|
23
|
+
- 若存在外部调用/MQ/导入导出/定时任务,必须补充对应的容量、重试/限流、熔断/超时、幂等、降级、错误预算等要求。
|
|
24
|
+
- 若涉及权限与敏感数据,必须补充鉴权、越权防护、脱敏、审计、数据隔离、密钥管理、依赖安全等要求。
|
|
25
|
+
- 若为页面功能,必须补充首屏/交互响应、弱网、移动端适配、浏览器兼容与可访问性(如适用)。
|
|
26
|
+
|
|
27
|
+
适用性判断(必须):
|
|
28
|
+
- 若该模块没有任何可明确的非功能性约束/指标(例如纯离线 demo、无外部依赖、无数据规模假设),输出单行:`SKIP`
|
|
29
|
+
|
|
30
|
+
输出写入:
|
|
31
|
+
- 将结果写入上游指定的 markdown 文件路径(通常在 `/specs/details/<module_slug>/nfp/overall.md`)
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
你是一名资深系统分析师 + 产品运营负责人。你的任务是:针对“单个功能点”,输出是否需要发送通知,并以矩阵形式呈现,写入指定的输出文件。
|
|
2
|
+
|
|
3
|
+
输入信息(由上游提供):
|
|
4
|
+
- 当前功能点:模块/功能/子功能/说明(来自 `/specs/functions/*`)
|
|
5
|
+
- 角色与组织(`/specs/background/roles.md`)
|
|
6
|
+
- 场景节点与状态机(`/specs/background/scenarios.md`、`/specs/background/scenario_details/` 或 `/specs/background/scenario_details.md`(旧版))
|
|
7
|
+
|
|
8
|
+
产出要求:
|
|
9
|
+
1. 通知类型:
|
|
10
|
+
- 站内通知/消息中心
|
|
11
|
+
- 邮件
|
|
12
|
+
- 短信
|
|
13
|
+
- IM(企业微信/钉钉等)
|
|
14
|
+
- Webhook(第三方回调)
|
|
15
|
+
2. 输出通知矩阵(必须),表头固定:
|
|
16
|
+
| 事件/动作 | 是否通知 | 通知渠道 | 触发时机 | 接收人规则 | 模板变量 | 去重/频控 | 失败处理 | 备注 |
|
|
17
|
+
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
|
|
18
|
+
3. 接收人规则要可实现(示例):
|
|
19
|
+
- `record.approver_ids`
|
|
20
|
+
- `record.owner_id`
|
|
21
|
+
- `org_role('财务审批人', record.org_id)`
|
|
22
|
+
4. 模板变量列出关键字段:业务单号、标题、当前状态、下一处理人、时间、跳转链接。
|
|
23
|
+
|
|
24
|
+
输出写入:
|
|
25
|
+
- 将结果写入上游指定的 markdown 文件路径(通常在 `/specs/details/<module_slug>/notification_matrix/<function_slug>.md`)
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
你是一名资深前端架构师 + 业务分析师。你的任务是:针对“单个页面型功能点”,输出页面加载逻辑(首屏、路由参数、请求顺序、并发、缓存、降级),并写入指定的输出文件。
|
|
2
|
+
|
|
3
|
+
输入信息(由上游提供):
|
|
4
|
+
- 当前功能点:模块/功能/子功能/说明(来自 `/specs/functions/*`)
|
|
5
|
+
- 数据模型(`/specs/models/*.md`)
|
|
6
|
+
- 场景与流程(`/specs/flows/*.puml`、`/specs/background/scenarios.md`)
|
|
7
|
+
- 外部依赖(`/specs/background/dependencies.md`)
|
|
8
|
+
|
|
9
|
+
适用性判断:
|
|
10
|
+
- 若该功能点不是页面(例如定时任务/批处理/接口),输出“非页面:不适用”,并简要说明触发方式与入口即可。
|
|
11
|
+
|
|
12
|
+
产出要求(页面场景):
|
|
13
|
+
0. 原型访问地址(必须):
|
|
14
|
+
- 输出“原型访问”小节,给出可点击链接,点击后在新 tab 打开:
|
|
15
|
+
- 原型首页:`http://localhost:5173/`(若端口不同可自行替换)
|
|
16
|
+
- 当前页面路由:根据本功能点推荐路由拼出完整 URL(例如 `http://localhost:5173/apply`)
|
|
17
|
+
- 场景确认页:相对路径链接到 `scenario.html`(从当前 md 文件到 `/specs/prototypes/scenario.html`),并用 `<a target="_blank">` 形式输出
|
|
18
|
+
1. 页面类型:列表/详情/表单/工作台/审批/执行/配置等
|
|
19
|
+
2. 路由与参数:
|
|
20
|
+
- 路由路径(建议)
|
|
21
|
+
- 必填参数、可选参数、默认值
|
|
22
|
+
- 参数校验与非法参数处理(跳转/提示/404)
|
|
23
|
+
3. 首屏加载步骤(按顺序列出):
|
|
24
|
+
- 初始化 UI 状态(loading、默认筛选、分页)
|
|
25
|
+
- 读取缓存/URL/本地存储
|
|
26
|
+
- 拉取字典/枚举
|
|
27
|
+
- 拉取列表/详情数据
|
|
28
|
+
- 计算派生状态(按钮是否可用、步骤条)
|
|
29
|
+
4. 接口与数据依赖清单(用表格):
|
|
30
|
+
| 请求 | 触发时机 | 入参来源 | 出参用途 | 失败处理 | 缓存策略 |
|
|
31
|
+
| --- | --- | --- | --- | --- | --- |
|
|
32
|
+
5. 数据加载条件(当涉及数据筛选/权限/状态机/时间范围等时必须输出,避免笼统描述):
|
|
33
|
+
- 用“SQL 语义”描述主要 where 条件与 join 关系(不要求完全可执行,但要精确表达过滤口径)
|
|
34
|
+
- 至少覆盖:租户/组织范围、数据权限范围、状态过滤、时间范围、关键字搜索、排序/分页
|
|
35
|
+
- 输出格式(二选一,优先 A):
|
|
36
|
+
- A. 条件清单表(推荐):
|
|
37
|
+
| 场景/查询 | 主表 | 关联表(如有) | 关键条件(SQL 语义) | 排序与分页 | 备注 |
|
|
38
|
+
| --- | --- | --- | --- | --- | --- |
|
|
39
|
+
- B. SQL 伪代码块:
|
|
40
|
+
- `SELECT ... FROM ... LEFT JOIN ... WHERE ... ORDER BY ... LIMIT ... OFFSET ...`
|
|
41
|
+
6. 并发与顺序:
|
|
42
|
+
- 哪些请求可并发,哪些必须串行(依赖关系)
|
|
43
|
+
7. 空态/异常态:
|
|
44
|
+
- 无数据、无权限、依赖系统不可用、超时、部分失败
|
|
45
|
+
8. Calendar/排程视图分析(仅当页面类型包含“日历/排班/资源占用/时间段选择/预约分布”等语义时必须输出;否则不要输出本节):
|
|
46
|
+
- 视图维度:时间粒度(日/周/月/自定义)、资源维度(车辆/人员/设备/地点等)、分组与过滤条件
|
|
47
|
+
- 时间范围口径:默认范围、可切换范围、自然日切换点与时区(引用 terms)
|
|
48
|
+
- 事件/占用数据 schema(表格):| 字段 | 含义 | 来源 | 备注 |(至少包含 id、resource_id、start_at、end_at、status、title/label)
|
|
49
|
+
- 数据拉取策略:范围查询(start/end)、增量刷新(切换范围/资源/筛选)、缓存与预取(前后周/月)
|
|
50
|
+
- 冲突/重叠检测:前端展示规则与后端校验口径(如何判定 overlap;边界开闭性)
|
|
51
|
+
- 关键联动:点击事件→打开详情/申请抽屉;空白时间格→预填新建;切换资源→刷新占用
|
|
52
|
+
|
|
53
|
+
输出写入:
|
|
54
|
+
- 将结果写入上游指定的 markdown 文件路径(通常在 `/specs/details/<module_slug>/page_load/<function_slug>.md`)
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
你是一名资深系统分析师。你的任务是:针对“单个功能点”,输出页面/任务提交后的检查项(提交已发生后的二次校验与一致性检查),并写入指定的输出文件。
|
|
2
|
+
|
|
3
|
+
输入信息(由上游提供):
|
|
4
|
+
- 当前功能点:模块/功能/子功能/说明(来自 `/specs/functions/*`)
|
|
5
|
+
- 数据模型与状态机(`/specs/models/*.md`、`/specs/background/scenario_details/` 或 `/specs/background/scenario_details.md`(旧版))
|
|
6
|
+
- 外部依赖与集成(`/specs/background/dependencies.md`)
|
|
7
|
+
|
|
8
|
+
产出要求:
|
|
9
|
+
1. 明确“提交”动作指代(表单提交/审批动作/执行开始/结束/取消/变更/导入/导出/定时任务触发)
|
|
10
|
+
2. 输出检查清单表(必须):
|
|
11
|
+
| 编号 | 检查点 | 触发时机 | 检查规则(伪代码) | 失败处理(回滚/补偿/提示/重试) | 影响范围 | 备注 |
|
|
12
|
+
| --- | --- | --- | --- | --- | --- | --- |
|
|
13
|
+
3. 检查点类型至少覆盖:
|
|
14
|
+
- 并发一致性(版本号/乐观锁/重复提交)
|
|
15
|
+
- 状态机一致性(非法状态流转)
|
|
16
|
+
- 关联数据一致性(主子表/汇总字段)
|
|
17
|
+
- 外部系统一致性(对账/幂等/回调)
|
|
18
|
+
- 安全与权限(越权写入、数据权限绕过)
|
|
19
|
+
- 级联影响一致性(删除/取消/作废/驳回/紧急叫停/变更对其他申请或资源占用的影响)
|
|
20
|
+
|
|
21
|
+
4. 删除/取消类动作的“影响范围”分析要求(若本功能点包含 delete/cancel/void 类语义则必须;否则可忽略):
|
|
22
|
+
- 识别被影响对象:同资源的其他申请/后续排程/相邻行程/汇总报表/外部同步单据
|
|
23
|
+
- 识别影响约束:
|
|
24
|
+
- 链式/相邻记录约束(示例表达方式:`prev.end_location == next.start_location`;`prev.end_time <= next.start_time`)
|
|
25
|
+
- 资源占用互斥与释放(取消后释放占用;删除后是否允许“空洞”以及如何补位)
|
|
26
|
+
- 物理规律/时间可达性(如存在地点切换/行程衔接:`travel_time <= gap_time`)
|
|
27
|
+
- 输出到检查清单:每条检查必须写明“触发时机 + 检查规则 + 失败处理 + 影响范围”
|
|
28
|
+
|
|
29
|
+
输出写入:
|
|
30
|
+
- 将结果写入上游指定的 markdown 文件路径(通常在 `/specs/details/<module_slug>/post_submit_check/<function_slug>.md`)
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
你是一名资深产品经理 + 前端架构师。你的任务是:针对“单个页面型功能点”,输出提交后的返回策略与跳转规则,并写入指定的输出文件。
|
|
2
|
+
|
|
3
|
+
输入信息(由上游提供):
|
|
4
|
+
- 当前功能点:模块/功能/子功能/说明(来自 `/specs/functions/*`)
|
|
5
|
+
- 场景与流程(`/specs/background/scenarios.md`、`/specs/flows/*.puml`)
|
|
6
|
+
- 角色与权限(`/specs/background/roles.md`、RBAC 产物如有)
|
|
7
|
+
|
|
8
|
+
适用性判断:
|
|
9
|
+
- 若该功能点不是页面,输出“非页面:不适用”,并说明其结果反馈方式(日志/通知/回调/任务状态页)。
|
|
10
|
+
|
|
11
|
+
产出要求(页面场景):
|
|
12
|
+
1. 输出跳转规则表(必须):
|
|
13
|
+
| 触发动作 | 成功后提示 | 成功后跳转 | 成功后是否刷新来源页 | 失败后提示 | 失败后停留/回退策略 | 备注 |
|
|
14
|
+
| --- | --- | --- | --- | --- | --- | --- |
|
|
15
|
+
2. 必须覆盖与本功能点相关的动作:
|
|
16
|
+
- 提交/保存草稿/撤销/取消/变更/审批通过/驳回/执行开始/执行结束/紧急叫停/导入/导出
|
|
17
|
+
3. 若需要跨页面联动(例如提交后进入详情、审批后回到待办并移除该条),在备注中写清楚“来源页行为”。
|
|
18
|
+
4. 若存在多入口访问(从工作台/列表/消息通知进入),分别给出规则或在备注中区分。
|
|
19
|
+
|
|
20
|
+
输出写入:
|
|
21
|
+
- 将结果写入上游指定的 markdown 文件路径(通常在 `/specs/details/<module_slug>/post_submit_navigation/<function_slug>.md`)
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
你是一名资深系统分析师。你的任务是:针对“单个功能点”,输出提交后的处理逻辑(后置处理、异步任务、数据变更、集成调用、补偿),并写入指定的输出文件。
|
|
2
|
+
|
|
3
|
+
输入信息(由上游提供):
|
|
4
|
+
- 当前功能点:模块/功能/子功能/说明(来自 `/specs/functions/*`)
|
|
5
|
+
- 场景与流程(`/specs/flows/*.puml`、`/specs/background/scenarios.md`)
|
|
6
|
+
- 数据模型(`/specs/models/*.md`)
|
|
7
|
+
- 外部依赖(`/specs/background/dependencies.md`)
|
|
8
|
+
|
|
9
|
+
产出要求:
|
|
10
|
+
1. 以“处理步骤清单”输出(必须):
|
|
11
|
+
| 步骤 | 处理内容 | 同步/异步 | 输入 | 输出/数据变更 | 失败处理(重试/补偿/人工介入) | 幂等策略 | 备注 |
|
|
12
|
+
| --- | --- | --- | --- | --- | --- | --- | --- |
|
|
13
|
+
2. 必须覆盖:
|
|
14
|
+
- 状态变更与历史记录(状态机流转、流水/轨迹)
|
|
15
|
+
- 关联数据更新(子表、汇总、派生字段)
|
|
16
|
+
- 通知/日志/审计(仅描述触发点与内容,不重复矩阵)
|
|
17
|
+
- 外部系统交互(调用/回调/对账/消息)
|
|
18
|
+
- 删除/取消/作废/驳回/紧急叫停/变更的级联处理(若本功能点包含上述语义则必须覆盖)
|
|
19
|
+
3. 若存在异步队列/消息总线,注明:topic/事件名、消息体字段、生产者/消费者、消费失败策略,并引用单独的 MQ 规格文件(`mq.md`)。
|
|
20
|
+
4. 若涉及“落库后发消息”的一致性问题,必须说明采用的策略(outbox/事务消息/最终一致性),以及失败补偿方式(重试、对账、人工介入)。
|
|
21
|
+
|
|
22
|
+
5. 删除/取消类动作的“级联处理”细化要求(若本功能点包含 delete/cancel/void 类语义则必须;否则可忽略):
|
|
23
|
+
- 资源占用释放:释放占用/锁定、更新忙闲、回收配额(写清释放口径与时点)
|
|
24
|
+
- 关联申请影响:识别同资源同时间段的其他申请需要重新判定/重排/补位/通知的范围
|
|
25
|
+
- 影响性检测与处理策略(abort/cancel/紧急叫停/作废 等语义出现时必须):
|
|
26
|
+
- 先做影响性检测:列出受影响的数据集合(关联单据/子表/资源占用/排程链/审批与执行任务/外部同步记录),以及影响类型(冲突/缺口/超配/重复/失效)
|
|
27
|
+
- 再做策略决策(必须二选一或分条件选择):
|
|
28
|
+
- 人工介入:通知所有受影响对象的相关人(发起人/审批人/执行人/资源管理员等),并把该对象标记为“待手工重配/待重新判定”,交给对应角色在页面上重新配置/重排
|
|
29
|
+
- 自动修复:输出自动修复规则(如何选替代资源/如何重排时间/如何回滚到安全状态),并对修复后的结果做一致性校验;修复成功/失败都必须通知相关人并记录日志
|
|
30
|
+
- 无论采用哪种策略,都必须输出通知范围与通知内容要点,并确保履历/审计可回溯
|
|
31
|
+
- 链式/相邻记录修复(如存在排程/行程链):
|
|
32
|
+
- 重新计算前后邻接关系(prev/next)
|
|
33
|
+
- 重新校验物理规律与时间可达性(例如地点衔接、前后行程连续性)
|
|
34
|
+
- 明确策略:允许形成“断点”还是必须自动补齐/阻止删除(写清选择与触发条件)
|
|
35
|
+
- 外部系统与对账:
|
|
36
|
+
- 若已对外同步(例如派车/库存占用/审批单),必须输出撤销/回滚/冲正/对账的策略与失败补偿
|
|
37
|
+
|
|
38
|
+
输出写入:
|
|
39
|
+
- 将结果写入上游指定的 markdown 文件路径(通常在 `/specs/details/<module_slug>/post_submit_processing/<function_slug>.md`)
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
你是一名资深业务分析师 + 安全架构师。你的任务是:针对“单个功能点(通常对应一个页面或一个可操作的功能)”,输出 RBAC 权限设计,精确到页面区域与控件级别,并写入指定的输出文件。
|
|
2
|
+
|
|
3
|
+
输入信息(由上游提供):
|
|
4
|
+
- 当前功能点:模块/功能/子功能/说明(来自 `/specs/functions/*`)
|
|
5
|
+
- 角色列表与任务(`/specs/background/roles.md`)
|
|
6
|
+
- 场景与流程(`/specs/background/scenarios.md`、`/specs/flows/*.puml`)
|
|
7
|
+
- 术语与数据模型(`/specs/background/terms.md`、`/specs/models/*.md`)
|
|
8
|
+
|
|
9
|
+
产出要求:
|
|
10
|
+
1. 先判断该功能点属于:
|
|
11
|
+
- 页面(含列表页/详情页/表单页/工作台/弹窗/抽屉),或
|
|
12
|
+
- 非页面功能(API/批处理/定时任务/集成作业)。若非页面,仍需输出“功能权限点”,但不做控件级拆分。
|
|
13
|
+
2. 若为页面:按照“区域 → 组件/控件 → 动作”拆分权限点。区域示例:筛选区、列表区、详情区、表单区、附件区、审批区、日志区、导入导出区。
|
|
14
|
+
3. 权限要可落地:
|
|
15
|
+
- 给出权限编码(permission_key),建议格式:`<module>:<feature>:<action>`,如 `apply:application:create`
|
|
16
|
+
- 给出权限名称、适用角色、默认策略(允许/拒绝/按数据权限约束)
|
|
17
|
+
4. 输出 2 张表:
|
|
18
|
+
|
|
19
|
+
表 1:页面区域/控件权限矩阵(必须)
|
|
20
|
+
| 区域 | 控件/组件 | 动作 | permission_key | 权限名称 | 允许角色 | 条件(可选) | 备注 |
|
|
21
|
+
| --- | --- | --- | --- | --- | --- | --- | --- |
|
|
22
|
+
|
|
23
|
+
表 2:页面级路由/菜单访问权限(如为页面则必须;非页面则输出“功能访问入口权限”)
|
|
24
|
+
| 入口 | 类型(路由/菜单/按钮/接口) | permission_key | 权限名称 | 允许角色 | 备注 |
|
|
25
|
+
| --- | --- | --- | --- | --- | --- |
|
|
26
|
+
|
|
27
|
+
5. 若存在“仅本人/本部门/本组织/审批链相关人”等限制,将限制条件写入“条件(可选)”,并说明依赖的数据权限字段(例如 owner_id、org_id)。
|
|
28
|
+
|
|
29
|
+
输出写入:
|
|
30
|
+
- 将结果写入上游指定的 markdown 文件路径(通常在 `/specs/details/<module_slug>/rbac/<function_slug>.md`)
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
你是一名资深业务分析师 + 系统分析师。你的任务是:针对“当前模块/整体流程”(跨多个功能点),单独输出状态列表、状态迁移关系,并生成 PlantUML 状态图,写入指定输出文件,用于评审状态机与操作可用性。
|
|
2
|
+
|
|
3
|
+
输入信息(由上游提供):
|
|
4
|
+
- 当前模块:模块名 + 功能点清单(来自 `/specs/functions/*` 聚合)
|
|
5
|
+
- 场景与流程(`/specs/flows/*.puml`、`/specs/background/scenarios.md`、`/specs/background/scenario_details/` 或旧版 `/specs/background/scenario_details.md`)
|
|
6
|
+
- 数据模型与状态字段(`/specs/models/*.md`,重点关注 status/state 字段与枚举)
|
|
7
|
+
- 关键交互与后置处理(如有:`/specs/details/<module_slug>/interaction/*`、`post_submit_*`)
|
|
8
|
+
|
|
9
|
+
适用性判断(必须):
|
|
10
|
+
- 若该模块不存在可明确的状态机(例如无 status/state 字段,或状态不影响流程走向/操作可用性),输出单行:`SKIP`
|
|
11
|
+
|
|
12
|
+
产出要求(必须):
|
|
13
|
+
1. 状态列表(必须用 markdown 表格):
|
|
14
|
+
| 状态 | 含义 | 进入条件/触发事件 | 允许的关键操作(概览) | 退出条件 |
|
|
15
|
+
|:--|:--|:--|:--|:--|
|
|
16
|
+
2. 状态迁移表(必须用 markdown 表格):
|
|
17
|
+
| From | Trigger(用户动作/系统事件) | Guard(条件/权限/数据权限) | To | 副作用(数据变更/通知/MQ/日志/资源占用) |
|
|
18
|
+
|:--|:--|:--|:--|:--|
|
|
19
|
+
3. 状态图(必须输出 PlantUML 代码块):
|
|
20
|
+
- 只输出一个代码块,且必须以 `@startuml` 开始、以 `@enduml` 结束
|
|
21
|
+
- 必须覆盖本模块端到端流程中涉及的状态与迁移(至少覆盖 apply/approve/change/cancel/execute 相关语义中实际存在的部分)
|
|
22
|
+
- 每条迁移箭头必须标注 Trigger;如有关键 Guard,用 `[ ... ]` 标注在箭头文案中
|
|
23
|
+
|
|
24
|
+
输出写入:
|
|
25
|
+
- 将结果写入上游指定的 markdown 文件路径(通常在 `/specs/details/<module_slug>/state_machine/overall.md`)
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
你是一名资深业务分析师 + 交互设计师。你的任务是:针对“当前模块/整体流程”(跨多个功能点),当流程存在“长时间跨度”且时间规则会影响流程走向(时间范围判定/时间窗口/生效期/截止期/宽限期/跨天口径/包含边界等)时,用固定模板输出一份时间轴(HTML),以时间轴形式呈现判定结果与行为,避免文字口径歧义,并写入指定的输出文件。
|
|
2
|
+
|
|
3
|
+
输入信息(由上游提供):
|
|
4
|
+
- 当前模块/流程范围:模块名(从 `/specs/functions/*` 聚合)+ 该模块相关的场景与流程
|
|
5
|
+
- 场景与流程(`/specs/flows/*.puml`、`/specs/background/scenarios.md`、`/specs/background/scenario_details/` 或 `/specs/background/scenario_details.md`(旧版))
|
|
6
|
+
- 术语与口径(`/specs/background/terms.md`)
|
|
7
|
+
|
|
8
|
+
适用性判断:
|
|
9
|
+
- 仅当存在“长时间跨度且影响流程走向”的时间规则时才生成时间轴:
|
|
10
|
+
- 长时间跨度示例:跨天/跨周/跨月的窗口;有效期/失效期;截止/宽限;关账日;自然日切换口径;预约与执行跨天等
|
|
11
|
+
- 影响流程走向示例:过期则自动取消/需补充审批;截止后禁止变更/只能取消;宽限期内走降级;跨天计费口径改变等
|
|
12
|
+
- 若不满足上述条件(例如仅展示时间字段,或只有短时交互且不改变流程走向),输出单行:`SKIP`
|
|
13
|
+
|
|
14
|
+
输出要求(涉及时间范围判定时必须满足):
|
|
15
|
+
1. 先抽取时间点与时间段:
|
|
16
|
+
- 时间点:开始/结束/生效/失效/截止/提交/审批通过/作废/关账/自然日切换等
|
|
17
|
+
- 时间段:在两个时间点之间发生的行为(可操作/不可操作/需补充审批/走降级/按新旧规则计算等)
|
|
18
|
+
2. 边界必须明确:
|
|
19
|
+
- 用实心/空心圆表示包含/不包含边界
|
|
20
|
+
- 必须明确每个时间段两端的开闭性([a,b]、(a,b]、[a,b)、(a,b))
|
|
21
|
+
3. 输出必须是“完整 HTML 文件”,且严格使用下方模板结构(不允许改动 class 名称与结构层级;只允许填充内容与 style 的 left/width 百分比)
|
|
22
|
+
|
|
23
|
+
HTML 模板(必须逐字遵守结构;不要输出任何 markdown 文本,只输出 HTML):
|
|
24
|
+
|
|
25
|
+
<!doctype html>
|
|
26
|
+
<html>
|
|
27
|
+
<head>
|
|
28
|
+
<meta charset="utf-8" />
|
|
29
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
30
|
+
<title>Timeline</title>
|
|
31
|
+
<style>
|
|
32
|
+
body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif; margin: 16px; color: #111827; }
|
|
33
|
+
.vreq-timeline { max-width: 1200px; margin: 0 auto; }
|
|
34
|
+
.vreq-title { font-size: 18px; font-weight: 600; margin: 0 0 12px; }
|
|
35
|
+
.vreq-meta { font-size: 12px; color: #374151; margin: 0 0 16px; }
|
|
36
|
+
.vreq-meta table { border-collapse: collapse; width: 100%; }
|
|
37
|
+
.vreq-meta th, .vreq-meta td { border: 1px solid #E5E7EB; padding: 8px; vertical-align: top; }
|
|
38
|
+
.vreq-meta th { background: #F9FAFB; text-align: left; width: 180px; }
|
|
39
|
+
.timeline { position: relative; border: 1px solid #E5E7EB; border-radius: 8px; padding: 16px 16px 8px; background: #FFFFFF; }
|
|
40
|
+
.axis { position: relative; height: 40px; }
|
|
41
|
+
.axis-line { position: absolute; left: 0; right: 0; top: 20px; height: 2px; background: #D1D5DB; }
|
|
42
|
+
.ticks { position: absolute; left: 16px; right: 16px; top: 16px; height: calc(100% - 24px); pointer-events: none; }
|
|
43
|
+
.tick { position: absolute; top: 0; bottom: 0; width: 0; }
|
|
44
|
+
.tick-line { position: absolute; top: 4px; bottom: 4px; width: 2px; left: -1px; background: #E5E7EB; }
|
|
45
|
+
.tick-label { position: absolute; top: -10px; transform: translateX(-50%); font-size: 12px; color: #111827; background: #FFFFFF; padding: 0 6px; white-space: nowrap; }
|
|
46
|
+
.lanes { position: relative; padding: 8px 0 0; }
|
|
47
|
+
.lane { position: relative; padding: 12px 0 16px; border-top: 1px dashed #E5E7EB; }
|
|
48
|
+
.lane:first-child { border-top: 0; }
|
|
49
|
+
.lane-title { font-size: 13px; font-weight: 600; margin: 0 0 8px; color: #111827; }
|
|
50
|
+
.segments { position: relative; height: 44px; }
|
|
51
|
+
.segment { position: absolute; top: 16px; height: 12px; }
|
|
52
|
+
.segment-line { position: absolute; left: 0; right: 0; top: 5px; height: 2px; background: #2563EB; }
|
|
53
|
+
.endpoint { position: absolute; top: 0; width: 12px; height: 12px; border-radius: 999px; }
|
|
54
|
+
.endpoint.start { left: -6px; }
|
|
55
|
+
.endpoint.end { right: -6px; }
|
|
56
|
+
.inclusive { background: #2563EB; border: 2px solid #2563EB; box-sizing: border-box; }
|
|
57
|
+
.exclusive { background: #FFFFFF; border: 2px solid #2563EB; box-sizing: border-box; }
|
|
58
|
+
.segment-label { position: absolute; top: -18px; left: 0; transform: translateX(0); font-size: 12px; color: #1F2937; background: #FFFFFF; padding: 0 6px; white-space: nowrap; }
|
|
59
|
+
.legend { display: flex; gap: 16px; align-items: center; margin: 12px 0 0; font-size: 12px; color: #374151; }
|
|
60
|
+
.legend-item { display: flex; gap: 6px; align-items: center; }
|
|
61
|
+
.legend-dot { width: 12px; height: 12px; border-radius: 999px; }
|
|
62
|
+
.legend-dot.inclusive { background: #2563EB; border: 2px solid #2563EB; }
|
|
63
|
+
.legend-dot.exclusive { background: #FFFFFF; border: 2px solid #2563EB; }
|
|
64
|
+
</style>
|
|
65
|
+
</head>
|
|
66
|
+
<body>
|
|
67
|
+
<div class="vreq-timeline">
|
|
68
|
+
<h1 class="vreq-title">时间轴:{功能点名称}</h1>
|
|
69
|
+
<div class="vreq-meta">
|
|
70
|
+
<table>
|
|
71
|
+
<tr><th>时间口径</th><td>{时区/自然日切换点/取值字段口径}</td></tr>
|
|
72
|
+
<tr><th>时间范围</th><td>min={最早时间点};max={最晚时间点}</td></tr>
|
|
73
|
+
<tr><th>说明</th><td>{一句话说明本时间轴用于判定什么}</td></tr>
|
|
74
|
+
</table>
|
|
75
|
+
</div>
|
|
76
|
+
|
|
77
|
+
<div class="timeline">
|
|
78
|
+
<div class="axis">
|
|
79
|
+
<div class="axis-line"></div>
|
|
80
|
+
</div>
|
|
81
|
+
|
|
82
|
+
<div class="ticks">
|
|
83
|
+
<div class="tick" style="left: {x0}%;">
|
|
84
|
+
<div class="tick-line"></div>
|
|
85
|
+
<div class="tick-label">{时间点名称0}<br />{时间值0}</div>
|
|
86
|
+
</div>
|
|
87
|
+
<div class="tick" style="left: {x1}%;">
|
|
88
|
+
<div class="tick-line"></div>
|
|
89
|
+
<div class="tick-label">{时间点名称1}<br />{时间值1}</div>
|
|
90
|
+
</div>
|
|
91
|
+
</div>
|
|
92
|
+
|
|
93
|
+
<div class="lanes">
|
|
94
|
+
<div class="lane">
|
|
95
|
+
<div class="lane-title">{判定主题/场景}</div>
|
|
96
|
+
<div class="segments">
|
|
97
|
+
<div class="segment" style="left: {s0_left}%; width: {s0_width}%; ">
|
|
98
|
+
<div class="segment-line"></div>
|
|
99
|
+
<span class="endpoint start {inclusive|exclusive}"></span>
|
|
100
|
+
<span class="endpoint end {inclusive|exclusive}"></span>
|
|
101
|
+
<div class="segment-label">{时间段行为/结果}</div>
|
|
102
|
+
</div>
|
|
103
|
+
</div>
|
|
104
|
+
</div>
|
|
105
|
+
</div>
|
|
106
|
+
</div>
|
|
107
|
+
|
|
108
|
+
<div class="legend">
|
|
109
|
+
<div class="legend-item"><span class="legend-dot inclusive"></span><span>包含边界</span></div>
|
|
110
|
+
<div class="legend-item"><span class="legend-dot exclusive"></span><span>不包含边界</span></div>
|
|
111
|
+
</div>
|
|
112
|
+
</div>
|
|
113
|
+
</body>
|
|
114
|
+
</html>
|
|
115
|
+
|
|
116
|
+
布局与填充规则(必须遵守):
|
|
117
|
+
1. 位置计算:用百分比填写每个 tick 的 left,以及每个 segment 的 left/width,确保时间从左到右递增;同一时间点在所有 lane 的 left 必须一致
|
|
118
|
+
2. ticks:必须覆盖所有用于判定的关键时间点(开始/结束/截止/生效/失效/关账等),并按时间顺序排列
|
|
119
|
+
3. lanes:每条 lane 对应一类判定主题(例如:可编辑窗口、可审批窗口、计费规则生效期、关账后限制),每条 lane 可有多个 segment,且 segment 不应相互重叠
|
|
120
|
+
4. segment-label:用“行为/结果”描述(例如:允许提交、禁止变更、需补充审批、按新税率计算、进入降级队列),必须可验收
|
|
121
|
+
|
|
122
|
+
输出写入:
|
|
123
|
+
- 将结果写入上游指定的文件路径(通常在 `/specs/details/<module_slug>/timeline/overall.html`)
|