@house365/comate 0.9.24 → 0.9.25

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.
@@ -1,47 +1,47 @@
1
- # 知识库 (Knowledge Base)
2
-
3
- 本目录承载**需求(PRD)与第三方对接**的长期文档,与代码同仓库、同 PR 评审、同版本。
4
-
5
- ## 文档体系与交接
6
-
7
- ```
8
- docs/knowledge-base/requirements/
9
- ├─ _templates/ PRD 模板
10
- └─ <YYYYMMDD-功能名>/ 一个功能一个目录,日期=该功能起始日 ──┐
11
- ├─ PRD-001-<功能名>.md 产品需求文档 │
12
- ├─ PRD-001.gate.yaml 门禁状态(机器真相源) │
13
- ├─ PRD-001-REVIEW.md 门禁评审报告(人类可读) │
14
- └─ CHANGES-MAP.md (多 change 时)功能项→change 映射 │
15
- ├─→ /comate-gate (门禁+拆分)
16
- docs/knowledge-base/integrations/ │ ↓
17
- 第三方对接档案/索引 (跨需求长期存在) ──┘ comate changes
18
- ```
19
-
20
- ## PRD → comate 流程
21
-
22
- comate 采用**简化需求流**:只保留 **PRD**(产品需求文档),通过 `/comate-gate` 做两件事:
23
-
24
- 1. **门禁**:审阅 PRD 质量、百分制评分、建阻断台账。阻断问题未清零,禁止建任何 change。
25
- 2. **拆分**:按依赖/整体性/独立性/规模判定该 PRD 变成 1 或 N 个 comate change(粒度由用户定),逐个交给 `/comate-open`。
26
-
27
- PRD 门禁状态钉在同级 `PRD-<三位序号>.gate.yaml`(机器真相源,含 `gate_status` / `score` / `blocking_open` / `prd_hash` / `spawned_changes`)。评审报告为 `PRD-<三位序号>-REVIEW.md`(人类可读,含问题台账)。PRD 通过门禁后被改会因哈希漂移自动失效(`stale`),需重跑 gate。
28
-
1
+ # 知识库 (Knowledge Base)
2
+
3
+ 本目录承载**需求(PRD)与第三方对接**的长期文档,与代码同仓库、同 PR 评审、同版本。
4
+
5
+ ## 文档体系与交接
6
+
7
+ ```
8
+ docs/knowledge-base/requirements/
9
+ ├─ _templates/ PRD 模板
10
+ └─ <YYYYMMDD-功能名>/ 一个功能一个目录,日期=该功能起始日 ──┐
11
+ ├─ PRD-001-<功能名>.md 产品需求文档 │
12
+ ├─ PRD-001.gate.yaml 门禁状态(机器真相源) │
13
+ ├─ PRD-001-REVIEW.md 门禁评审报告(人类可读) │
14
+ └─ CHANGES-MAP.md (多 change 时)功能项→change 映射 │
15
+ ├─→ /comate-gate (门禁+拆分)
16
+ docs/knowledge-base/integrations/ │ ↓
17
+ 第三方对接档案/索引 (跨需求长期存在) ──┘ comate changes
18
+ ```
19
+
20
+ ## PRD → comate 流程
21
+
22
+ comate 采用**简化需求流**:只保留 **PRD**(产品需求文档),通过 `/comate-gate` 做两件事:
23
+
24
+ 1. **门禁**:审阅 PRD 质量、百分制评分、建阻断台账。阻断问题未清零,禁止建任何 change。
25
+ 2. **拆分**:按依赖/整体性/独立性/规模判定该 PRD 变成 1 或 N 个 comate change(粒度由用户定),逐个交给 `/comate-open`。
26
+
27
+ PRD 门禁状态钉在同级 `PRD-<三位序号>.gate.yaml`(机器真相源,含 `gate_status` / `score` / `blocking_open` / `prd_hash` / `spawned_changes`)。评审报告为 `PRD-<三位序号>-REVIEW.md`(人类可读,含问题台账)。PRD 通过门禁后被改会因哈希漂移自动失效(`stale`),需重跑 gate。
28
+
29
29
  扇出的 comate change 内部用 proposal / design / tasks 承接 PRD 的功能项内容,PRD 直接作为 change 的源文档被 `sources track` 钉住。
30
-
30
+
31
31
  ## 命名约定
32
32
 
33
33
  - 功能目录:`<YYYYMMDD-功能名>/`
34
34
  - PRD:目录内 `PRD-<三位序号>-<功能名>.md`
35
35
  - gate 和评审报告:由脚本根据 PRD 路径自动生成,不手工命名。
36
-
37
- ## 横向 (integrations/)
38
-
39
- - `integrations/` —— 第三方业务/接口对接档案与总索引,**跨多个需求长期存在**。
40
- - 单个 PRD 生命周期随功能上线收敛;本目录的内容长期维护,故独立放置。
41
- - PRD 的「第三方依赖」表应链接到 `integrations/<平台名>/README.md`。
42
-
43
- ## 溯源与可追溯
44
-
45
- - PRD 顶部溯源块可选(若有更上游背景文档);没有上游时 PRD 是起点。
46
- - PRD 经门禁后扇出的 change 名记录在 `<PRD>.gate.yaml` 的 `spawned_changes` 字段,形成 PRD → change 的正向链。
47
- - 每个 change 的 `sources.manifest` 记录 PRD 路径与 sha256,形成 change → PRD 的反向链。
36
+
37
+ ## 横向 (integrations/)
38
+
39
+ - `integrations/` —— 第三方业务/接口对接档案与总索引,**跨多个需求长期存在**。
40
+ - 单个 PRD 生命周期随功能上线收敛;本目录的内容长期维护,故独立放置。
41
+ - PRD 的「第三方依赖」表应链接到 `integrations/<平台名>/README.md`。
42
+
43
+ ## 溯源与可追溯
44
+
45
+ - PRD 顶部溯源块可选(若有更上游背景文档);没有上游时 PRD 是起点。
46
+ - PRD 经门禁后扇出的 change 名记录在 `<PRD>.gate.yaml` 的 `spawned_changes` 字段,形成 PRD → change 的正向链。
47
+ - 每个 change 的 `sources.manifest` 记录 PRD 路径与 sha256,形成 change → PRD 的反向链。
@@ -1,49 +1,49 @@
1
- # 第三方对接档案: <平台名>
2
-
3
- | 作者 | 更新时间 | 原文档地址 |
4
- |------|---------|-----------|
5
- | <建档/最近修改人,默认 git 用户名> | <YYYY-MM-DD,改动即更新> | <官方文档主 URL> |
6
-
7
- > 复制本目录,重命名为平台名,删除本行与所有 `<...>` 占位说明。
8
- > 本文件是「对接档案」——长期维护,不是官方文档副本。
9
- > 标题正下方的「作者/更新时间/原文档地址」三项**必填**:本档案是我方二开文档,须随时可追溯回官方原文。
10
-
11
- ## 基本信息
12
-
13
- | 字段 | 内容 |
14
- |------|------|
15
- | 服务标识 | <目录名,如 oceanengine> |
16
- | 对接目的 | <为什么对接它,支撑哪个需求> |
17
- | 关联需求 | docs/knowledge-base/requirements/<YYYYMMDD-功能名>/PRD-001-<功能名>.md |
18
- | 关联变更 | openspec/changes/<变更名>/ |
19
- | 官方文档 | <URL> |
20
- | 我方负责人 | <name> |
21
- | 对方联系人 | <姓名/渠道,非必填> |
22
- | 接入状态 | 调研中 / 联调中 / 使用中 / 暂停使用 / 待下线 / 已下线 |
23
- | 最近校验 | <YYYY-MM-DD> |
24
-
25
- ## 凭证与密钥位置(只写在哪,不写值)
26
-
27
- > ⚠️ 严禁把 token / secret / 私钥 写进本文件或任何 git 文件。
28
-
29
- | 凭证 | 存放位置 | 环境 |
30
- |------|---------|------|
31
- | AppKey/AppSecret | <如:K8s Secret xxx / 密钥系统路径> | 开发/生产 |
32
-
33
- ## 接口清单(我方实际用到的)
34
-
35
- | 用途 | 方法/路径 | 限流/配额 | 备注 |
36
- |------|----------|----------|------|
37
- | <如 OAuth 换 token> | POST /xxx | <QPS/日配额> | <...> |
38
-
39
- 详细字段摘录见 `api-snapshot.md`。
40
-
41
- ## 失败与降级
42
-
43
- > PRD 门禁要求:凡有外部依赖必单列降级/失败场景。
44
-
45
- | 场景 | 表现 | 处理策略 |
46
- |------|------|----------|
47
- | 超时 | <...> | <重试/降级/告警> |
48
- | 未配置 | <...> | <...> |
49
- | 返回错误 | <...> | <...> |
1
+ # 第三方对接档案: <平台名>
2
+
3
+ | 作者 | 更新时间 | 原文档地址 |
4
+ |------|---------|-----------|
5
+ | <建档/最近修改人,默认 git 用户名> | <YYYY-MM-DD,改动即更新> | <官方文档主 URL> |
6
+
7
+ > 复制本目录,重命名为平台名,删除本行与所有 `<...>` 占位说明。
8
+ > 本文件是「对接档案」——长期维护,不是官方文档副本。
9
+ > 标题正下方的「作者/更新时间/原文档地址」三项**必填**:本档案是我方二开文档,须随时可追溯回官方原文。
10
+
11
+ ## 基本信息
12
+
13
+ | 字段 | 内容 |
14
+ |------|------|
15
+ | 服务标识 | <目录名,如 oceanengine> |
16
+ | 对接目的 | <为什么对接它,支撑哪个需求> |
17
+ | 关联需求 | docs/knowledge-base/requirements/<YYYYMMDD-功能名>/PRD-001-<功能名>.md |
18
+ | 关联变更 | openspec/changes/<变更名>/ |
19
+ | 官方文档 | <URL> |
20
+ | 我方负责人 | <name> |
21
+ | 对方联系人 | <姓名/渠道,非必填> |
22
+ | 接入状态 | 调研中 / 联调中 / 使用中 / 暂停使用 / 待下线 / 已下线 |
23
+ | 最近校验 | <YYYY-MM-DD> |
24
+
25
+ ## 凭证与密钥位置(只写在哪,不写值)
26
+
27
+ > ⚠️ 严禁把 token / secret / 私钥 写进本文件或任何 git 文件。
28
+
29
+ | 凭证 | 存放位置 | 环境 |
30
+ |------|---------|------|
31
+ | AppKey/AppSecret | <如:K8s Secret xxx / 密钥系统路径> | 开发/生产 |
32
+
33
+ ## 接口清单(我方实际用到的)
34
+
35
+ | 用途 | 方法/路径 | 限流/配额 | 备注 |
36
+ |------|----------|----------|------|
37
+ | <如 OAuth 换 token> | POST /xxx | <QPS/日配额> | <...> |
38
+
39
+ 详细字段摘录见 `api-snapshot.md`。
40
+
41
+ ## 失败与降级
42
+
43
+ > PRD 门禁要求:凡有外部依赖必单列降级/失败场景。
44
+
45
+ | 场景 | 表现 | 处理策略 |
46
+ |------|------|----------|
47
+ | 超时 | <...> | <重试/降级/告警> |
48
+ | 未配置 | <...> | <...> |
49
+ | 返回错误 | <...> | <...> |
@@ -1,47 +1,47 @@
1
- # <平台名> 接口摘录 (API Snapshot)
2
-
3
- | 作者 | 更新时间 | 原文档地址 |
4
- |------|---------|-----------|
5
- | <建档/最近修改人,默认 git 用户名> | <YYYY-MM-DD,改动即更新> | <官方文档主 URL> |
6
-
7
- > 只摘录**我方实际用到**的接口与字段,不复制官方全文。
8
- > 标题正下方的「作者/更新时间/原文档地址」三项**必填**(本档案是我方二开文档,须可追溯回官方原文)。
9
- > 官方文档: <URL>
10
- > 抓取日期: <YYYY-MM-DD> ← 每次对照官方更新时改这里
11
-
12
- ---
13
-
14
- ## <接口1: 如 获取 access_token>
15
-
16
- **请求**
17
- ```
18
- POST https://<host>/oauth/token
19
- Content-Type: application/json
20
- ```
21
-
22
- | 参数 | 类型 | 必填 | 说明 |
23
- |------|------|------|------|
24
- | app_key | string | 是 | 见 README 凭证位置 |
25
- | grant_type | string | 是 | 固定 client_credentials |
26
-
27
- **响应**
28
- ```json
29
- {
30
- "access_token": "<string>",
31
- "expires_in": 7200
32
- }
33
- ```
34
-
35
- | 字段 | 说明 | 我方注意点 |
36
- |------|------|-----------|
37
- | expires_in | 有效期(秒) | ⚠️ 实测 2h,需提前刷新 |
38
-
39
- **错误码/异常**
40
-
41
- | code/status | 含义 | 我方处理 |
42
- |-------------|------|----------|
43
- | <...> | <...> | <重试/告警/提示用户/忽略> |
44
-
45
- ---
46
-
47
- ## <接口2: ...>
1
+ # <平台名> 接口摘录 (API Snapshot)
2
+
3
+ | 作者 | 更新时间 | 原文档地址 |
4
+ |------|---------|-----------|
5
+ | <建档/最近修改人,默认 git 用户名> | <YYYY-MM-DD,改动即更新> | <官方文档主 URL> |
6
+
7
+ > 只摘录**我方实际用到**的接口与字段,不复制官方全文。
8
+ > 标题正下方的「作者/更新时间/原文档地址」三项**必填**(本档案是我方二开文档,须可追溯回官方原文)。
9
+ > 官方文档: <URL>
10
+ > 抓取日期: <YYYY-MM-DD> ← 每次对照官方更新时改这里
11
+
12
+ ---
13
+
14
+ ## <接口1: 如 获取 access_token>
15
+
16
+ **请求**
17
+ ```
18
+ POST https://<host>/oauth/token
19
+ Content-Type: application/json
20
+ ```
21
+
22
+ | 参数 | 类型 | 必填 | 说明 |
23
+ |------|------|------|------|
24
+ | app_key | string | 是 | 见 README 凭证位置 |
25
+ | grant_type | string | 是 | 固定 client_credentials |
26
+
27
+ **响应**
28
+ ```json
29
+ {
30
+ "access_token": "<string>",
31
+ "expires_in": 7200
32
+ }
33
+ ```
34
+
35
+ | 字段 | 说明 | 我方注意点 |
36
+ |------|------|-----------|
37
+ | expires_in | 有效期(秒) | ⚠️ 实测 2h,需提前刷新 |
38
+
39
+ **错误码/异常**
40
+
41
+ | code/status | 含义 | 我方处理 |
42
+ |-------------|------|----------|
43
+ | <...> | <...> | <重试/告警/提示用户/忽略> |
44
+
45
+ ---
46
+
47
+ ## <接口2: ...>
@@ -1,97 +1,97 @@
1
- # PRD-<序号>-<功能名>: <产品标题>
2
-
1
+ # PRD-<序号>-<功能名>: <产品标题>
2
+
3
3
  > 复制本文件到需求目录,按项目约定命名,删除本行与所有 `<...>` 占位说明。
4
4
  > PRD = 产品需求文档,回答「做成什么样」。本 PRD 由 `/comate-gate` 直接读取:先过质量门禁(审阅、评分、阻断检查),通过后按依赖和独立性拆成 1 或 N 个 comate change。
5
-
6
- | 字段 | 内容 |
7
- |------|------|
8
- | 产品编号 | PRD-001-<功能名> |
9
- | 产品负责人 | <PM name> |
10
- | 技术负责人 | <未知则留待补,不杜撰> |
11
- | 创建日期 | <YYYY-MM-DD> |
12
- | 优先级 | 高 / 中 / 低 |
13
- | 状态 | 设计中 / 评审中 / 已定稿 |
14
- | 关联迭代 | <如 2026-08 迭代,没有可删> |
15
-
16
- ## 需求概述
17
-
18
- <一句话讲清这个产品/功能解决什么问题、给谁用。>
19
-
20
- ## 用户与场景
21
-
22
- | 角色 | 场景 | 想要达成 |
23
- |------|------|----------|
24
- | <运营> | <每天看投放数据> | <无需手工导出即可日级复盘> |
25
-
26
- ## 用户故事
27
-
28
- - 作为 <角色>,我希望 <能力>,以便 <价值>。
29
-
30
- ## 产品方案 (What — 产品视角)
31
-
32
- <整体方案描述。可配流程图/示意。说明产品形态:是页面、后台任务、API、还是看板等。>
33
-
34
- ### 核心流程
35
-
36
- 1. <用户/系统从哪开始>
37
- 2. <经过哪些关键步骤>
38
- 3. <到哪结束,产出什么>
39
-
40
- ### 功能清单
41
-
42
- > `/comate-gate` 据此清单判定拆分粒度:有依赖的功能项归同一 change,独立的可拆开。请标清优先级。
43
-
44
- | 功能 | 说明 | 优先级 (P0/P1/P2) |
45
- |------|------|------------------|
46
- | <功能A> | <做什么> | P0 |
47
-
48
- ## 范围
49
-
50
- **做什么 (In Scope)**
51
- - <...>
52
-
53
- **不做什么 (Out of Scope)**
54
- - <明确边界,避免范围蔓延>
55
-
56
- ## 交互 / 界面要点
57
-
58
- <关键页面、状态、空态/异常态。可链接设计稿。非视觉类(如纯后台任务)说明触发与产出形态。>
59
-
60
- ## 第三方依赖
61
-
62
- <是否依赖外部平台/接口。若有,链接到对接档案,并说明失败/降级处理:>
63
-
64
- | 第三方 | 用途 | 风险 | 失败/降级处理 | 负责人 |
65
- |--------|------|------|--------------|--------|
66
- | <平台名> | <本产品中用它做什么> | <限流/权限/回调/稳定性等> | <超时/未配置/返回错误如何处理> | <name> |
67
-
68
- > 对接档案: docs/knowledge-base/integrations/<平台名>/README.md
69
-
70
- ## 数据与来源
71
-
72
- > 门禁重点审查项:用到的数据必须交代来源(哪张表/哪个接口/哪方提供)、口径、单位、时间范围。
73
-
74
- - **数据来源**: <积分从哪来?余额存哪张表?哪个接口读?>
75
- - **成功指标**: <上线后用什么衡量产品是否成功,尽量可度量>
76
-
77
- ## 边界与异常
78
-
79
- > 门禁重点审查项:极值、空值、并发、权限、异常路径、第三方失败是否覆盖。
80
-
81
- - <库存不足 / 并发冲突 / 重复提交 / 无权限 等如何处理>
82
-
83
- ## 验收标准 (产品视角)
84
-
85
- > 门禁重点审查项:必须**可度量**,避免「体验流畅」这类不可验证的表述。
86
-
87
- - [ ] <可验证的产品行为,如「兑换成功率 ≥ 99.9%」「P99 响应 ≤ 500ms」>
88
-
89
- ## 决策记录
90
-
91
- <为什么这样设计、放弃了哪些方案、权衡点。哪些能力不做、为什么不做。>
92
-
93
- ## 变更历史
94
-
95
- | 日期 | 改动 | 人 |
96
- |------|------|----|
97
- | <YYYY-MM-DD> | 创建 | <name> |
5
+
6
+ | 字段 | 内容 |
7
+ |------|------|
8
+ | 产品编号 | PRD-001-<功能名> |
9
+ | 产品负责人 | <PM name> |
10
+ | 技术负责人 | <未知则留待补,不杜撰> |
11
+ | 创建日期 | <YYYY-MM-DD> |
12
+ | 优先级 | 高 / 中 / 低 |
13
+ | 状态 | 设计中 / 评审中 / 已定稿 |
14
+ | 关联迭代 | <如 2026-08 迭代,没有可删> |
15
+
16
+ ## 需求概述
17
+
18
+ <一句话讲清这个产品/功能解决什么问题、给谁用。>
19
+
20
+ ## 用户与场景
21
+
22
+ | 角色 | 场景 | 想要达成 |
23
+ |------|------|----------|
24
+ | <运营> | <每天看投放数据> | <无需手工导出即可日级复盘> |
25
+
26
+ ## 用户故事
27
+
28
+ - 作为 <角色>,我希望 <能力>,以便 <价值>。
29
+
30
+ ## 产品方案 (What — 产品视角)
31
+
32
+ <整体方案描述。可配流程图/示意。说明产品形态:是页面、后台任务、API、还是看板等。>
33
+
34
+ ### 核心流程
35
+
36
+ 1. <用户/系统从哪开始>
37
+ 2. <经过哪些关键步骤>
38
+ 3. <到哪结束,产出什么>
39
+
40
+ ### 功能清单
41
+
42
+ > `/comate-gate` 据此清单判定拆分粒度:有依赖的功能项归同一 change,独立的可拆开。请标清优先级。
43
+
44
+ | 功能 | 说明 | 优先级 (P0/P1/P2) |
45
+ |------|------|------------------|
46
+ | <功能A> | <做什么> | P0 |
47
+
48
+ ## 范围
49
+
50
+ **做什么 (In Scope)**
51
+ - <...>
52
+
53
+ **不做什么 (Out of Scope)**
54
+ - <明确边界,避免范围蔓延>
55
+
56
+ ## 交互 / 界面要点
57
+
58
+ <关键页面、状态、空态/异常态。可链接设计稿。非视觉类(如纯后台任务)说明触发与产出形态。>
59
+
60
+ ## 第三方依赖
61
+
62
+ <是否依赖外部平台/接口。若有,链接到对接档案,并说明失败/降级处理:>
63
+
64
+ | 第三方 | 用途 | 风险 | 失败/降级处理 | 负责人 |
65
+ |--------|------|------|--------------|--------|
66
+ | <平台名> | <本产品中用它做什么> | <限流/权限/回调/稳定性等> | <超时/未配置/返回错误如何处理> | <name> |
67
+
68
+ > 对接档案: docs/knowledge-base/integrations/<平台名>/README.md
69
+
70
+ ## 数据与来源
71
+
72
+ > 门禁重点审查项:用到的数据必须交代来源(哪张表/哪个接口/哪方提供)、口径、单位、时间范围。
73
+
74
+ - **数据来源**: <积分从哪来?余额存哪张表?哪个接口读?>
75
+ - **成功指标**: <上线后用什么衡量产品是否成功,尽量可度量>
76
+
77
+ ## 边界与异常
78
+
79
+ > 门禁重点审查项:极值、空值、并发、权限、异常路径、第三方失败是否覆盖。
80
+
81
+ - <库存不足 / 并发冲突 / 重复提交 / 无权限 等如何处理>
82
+
83
+ ## 验收标准 (产品视角)
84
+
85
+ > 门禁重点审查项:必须**可度量**,避免「体验流畅」这类不可验证的表述。
86
+
87
+ - [ ] <可验证的产品行为,如「兑换成功率 ≥ 99.9%」「P99 响应 ≤ 500ms」>
88
+
89
+ ## 决策记录
90
+
91
+ <为什么这样设计、放弃了哪些方案、权衡点。哪些能力不做、为什么不做。>
92
+
93
+ ## 变更历史
94
+
95
+ | 日期 | 改动 | 人 |
96
+ |------|------|----|
97
+ | <YYYY-MM-DD> | 创建 | <name> |