# 宠小它 — 知识本体（Ontology）

> 知识库的单一事实源（SSOT）。所有产品文档与代码改动都应向本本体对齐；冲突以本本体为准。

## 这是什么

本目录用本体论框架把宠小它的领域知识建模为 5 类原子：

| 原子类型 | 文件 | 含义 |
|---------|------|------|
| **Object（实体）** | `objects.md` | 持久名词 + 字段 + 归属系统 |
| **Action（动作）** | `actions.md` | 读写实体的命令/用例 |
| **Event（事件）** | `events.md` | 动作或状态变更后发生的事实（过去时） |
| **Rule（规则/不变量）** | `rules.md` | 业务约束、决策条件、权限边界 |
| **Relation（关系）** | `relations.md` | 实体/动作/事件/规则之间的边 |

机器可读版本在 `../graph/ontology.jsonl`，三方对齐审计在 `../coverage/ontology-coverage-audit.md`。

## 为什么要本体论

现有文档是主题/文档类型导向的，同一概念（如「报告」）的规则散落在 `产品设计文档.md §5.3`、`P0-研发落地清单.md`、`架构与产品评估报告`、代码里的 `ReportController`/`ReportService`/`Report.vue` 等多处，导致：

1. 文档与代码状态不同步（架构评估报告已直接指出）。
2. 改一处要全仓 grep 才能确认是否同步。
3. Agent 协作靠人肉读长文档找上下文，无机器可读索引。

本体论把这些概念收口为 SSOT，做**双向引用**：本体条目写「落地于 `ReportController#create` / `docs/产品设计文档.md §5.3` / 测试 `ReportControllerTest`」，反过来文档/代码改动时回溯本体 ID。

## 证据强度

每条本体条目标注证据强度，用于覆盖度审计：

| 强度 | 含义 |
|------|------|
| `anchored` | 有代码路径 + 测试 + 文档三处对齐 |
| `documented` | 只在文档里，代码未实现或未对齐 |
| `implemented` | 只在代码里，文档未更新 |
| `gap` | 明确缺失（如真实短信服务商、production profile 实测） |

## ID 规则

稳定的、可读的 ID：

```text
entity:snake_case_name        # entity:appointment
action:snake_case_name        # action:create_appointment
event:snake_case_name         # event:appointment_created
rule:BR-DOM-001               # rule:BR-RPT-001
rel:subject_predicate_object  # rel:report_belongs_to_appointment
```

每个 JSONL 条目里引用的 `subject`/`object`/`inputs`/`outputs`/`appliesTo` ID 必须在 `ontology.jsonl` 中存在。

## 与现有体系的关系

- **既有文档不删除、不重写**：只在顶部加「本文档与 `ontology/objects.md#xxx` 对齐，冲突以本体为准」。
- **`.agents/` 协作体系不动**：本体论是它的知识基座；`common-context.md` 的术语表、`rules/api-contract-boundary.md` 的规则可引用本体 ID。
- **角色写入锁**：`ontology/` 归 `Docs Agent` + `System Architect` 共建，其他角色只读引用。

## 范围

已覆盖 P0 主闭环实体与动作，并补录：`Pet`、`ServiceType`、`ScheduleBlock`、`HighlightVideo`、`SessionToken`、`ReportImage`、`ReportTestimonial`、`ServiceInterval`、`HighlightFailReason`、`CurrentUser`、`FollowUpTask`，以及成片/上传/鉴权/寄语/退订/回访状态机/真实再次预约相关规则。

**智能预约助手 M0** 已以 `documented` 证据录入 `BookingAgentSession`、5 个动作、3 个漏斗事件、`BR-BA-001..005` 和 10 条关系。它们表示 Batch 0 契约已冻结，**不表示代码已实现**；五个计划 endpoint 以 `planned METHOD /path` 录入，实现时必须与代码、测试同批转为 `anchored`。

**门店 Web 后台 Phase A**：`AdminConsole`、`Workbench`、`WorkbenchTodoItem` 仍是非 JPA 读模型；`StoreCustomer` 与 `FollowUpTask` 已落为 JPA 稳定业务对象。`BR-ADMIN-001`…`004`、`BR-FU-001/002` 与 admin actions 继续约束后台；收银/会员资产仍为 gap。

P1/P2 方向（会员/储值/套餐/历史报告/看板）以 `gap` 证据条目录入，不展开字段；受 `rule:BR-ADMIN-004` 约束不得偷渡进 Phase A 设计。

当前规模以 `python3 docs/graph/validate_ontology.py docs` 输出为准；覆盖审计见 `../coverage/ontology-coverage-audit.md`。

## 校验

```bash
python3 docs/graph/validate_ontology.py docs
python3 docs/graph/audit_drift.py
```

校验：
- JSONL 引用完整性（每个被引用的 ID 都存在）
- 证据强度分布
- 本体—代码端点/实体漂移
- 文档反向引用（本体条目里写的 doc 路径存在）
