---
name: ia-user-journey
description: >-
  Information architecture and user-journey contract for internal tools / B2B
  consoles. Use when defining 信息架构, IA, 用户旅程, default home, nav, wayfinding,
  settings scope, or cutting 认知负担. Filled examples: qiancheng-yusuan docs/IA.md;
  chuhai-cloud docs/prd/v3. Not the only shapes.
---

# IA · 用户旅程（pack 合同）

类型：Product IA contract（非视觉系统、非 UI 实现规程）

| | |
|---|---|
| **What** | 先写可替换的信息架构 1.0（对象 + 关系 + 状态 + 分组 + 命名 + 搜索入口），再投影成角色路径、页面职责、导航、UI。产出是项目里的 `docs/IA.md`，不是侧栏草稿。 |
| **Why** | 导航是 UI 镀铬，不是骨架（NN/g：IA ≠ navigation）。从「这一页看起来乱」补丁页面，IA 会漂。认知负担来自**同一对象多个门**、**用库表当导航**、**首页塞满数据却不回答决策**，不是来自少几个按钮。 |
| **Who** | 1–4 人内部工具 / OA / B2B 控制台；多租户 SaaS 控制台同样适用（加租户层级）。写给人填，也给 agent 扫。 |
| **How to use** | ① 读本文 → ② 按 §8 骨架填 `docs/IA.md` → ③ 冻 `docs/prd/vN-YYYY-MM-DD.md` → ④ 非正式 tree test → ⑤ 再改 `nav` / 页面。 |
| **Not this** | 不是 DESIGN.md；不是空态文案大全；不是「保持简洁」口号；不是把出海云菜单抄到别的产品；不是 sitemap 当 PRD。 |
| **When to open** | 新内部工具定 IA；默认首页吵；侧栏像模块清单；想加菜单/Tab；用户问「今天先干什么」；设置页成垃圾场；首登激活和主链对不上。 |

Filled example（填满的一份，不是唯一形状）：

- `D:\dev\chuhai-cloud\docs\prd\v3-2026-08-13.md`（冻版）
- `D:\dev\chuhai-cloud\docs\PRD.md`（当时真源）
- `D:\dev\chuhai-cloud\docs\prd\README.md`（怎么冻 / diff / rollback）
- 导航投影：`D:\dev\chuhai-cloud\web\src\app\nav.ts`

形状可变：有的产品是侧栏主链，有的是顶栏 ≤5；有的流水线是「原料→出片→铺量→收拢」，有的是「填报→缺口→定稿」。**合同是闸和顺序，不是那一组名词。**

---

## 0. 行业坐标系（机制，不抄作业）

写 IA 时心里有这四套系统（Morville / Rosenfeld 经典四分法，SaaS 同样适用）：

| 系统 | 问什么 | 本 pack 落点 |
|---|---|---|
| **Organization** | 对象怎么分组、和谁相关 | §2 对象模型 · G1–G2 |
| **Labeling** | 用户语言还是库表/微服务名 | §3 · tree test |
| **Navigation** | 主链 / 局部 / 工具 / 溢出怎么投影 | §2 G2–G8 · §5–§6 |
| **Search** | 记不住树时如何定位记录与设置 | §2 G9 · 骨架「搜索」 |

再加三条当代 B2B 共识（与本文硬闸对齐）：

1. **OOUX / 对象优先**：先对象、属性、关系、状态，再画屏（NN/g OOUX）。导航标签应对齐对象与任务，不对齐工程模块。  
2. **决策环境，不是数据墙**：调度页回答「还好吗 / 下一步干什么」——信号 → 诊断 → 行动；禁止第一屏堆 50+ 数据点（认知负荷）。  
3. **验证四问再上线导航**（比「团队 review 过」硬）：  
   - **IA**：分类是否贴合用户脑内分组（错段两次 = 失败）  
   - **Discoverability**：新能力能否在正常路径遇见，而不是只在 changelog  
   - **Task completion**：指定目的地能否无回退到达  
   - **Hesitation**：顶层是否停顿/空悬（顶层犹豫会传染全树）

主参考（读机制，不整页粘贴）：NN/g IA≠nav · progressive disclosure · tree testing · menu checklist · OOUX；SaaS 对象/租户层级与设置「我 / 团队 / 系统」分域。

---

## 1. 顺序（禁止倒着做）

```text
对象模型（对象 / 关系 / 状态 / 命名）
  → 角色 × 决策/任务（用户语言）
    → 页面职责（一页装什么、不装什么）
      → 导航投影（主链顺序 + 局部/工具 + 溢出 + 搜索）
        → 非正式 tree test（非作者找活）
          → UI / 代码
```

禁止：页面看起来乱 → 在这一页打补丁 → 导航和模型各说各话。  
可替换：1.0 允许错。可编辑、可带走、下一冻版能整份替换，优先于「钉死到永远」。

**NN/G 等转闸（可执行条件）：**

| 来源 | 闸 |
|---|---|
| IA ≠ navigation | 没写完对象清单、关系、状态、分组、命名之前，禁止画侧栏/顶栏。导航是投影。导航和 IA 打架时，改导航或出下一冻版，禁止只改 UI 冒充改了 IA。 |
| Progressive disclosure | 第一屏 = 高频 + 重要。次要按需（更多 / 抽屉 / 二级对话框 / 帮助）。线性活路用分步披露（带下一步 URL）。不要把全系统地图放进首页。 |
| Card sort / tree test | 分组必须能写成「谁 × 任务」的用户语言。库表名不能当导航标签。内部 OA ≤4 角色可跳过正式实验，但必须写任务矩阵，且找一个**非作者**按树找一件活。找不到 = 树错了，不是用户错了。 |
| Wayfinding | 每一深链着陆页必须能回答：我在哪 · 同层还有什么 · 怎么回主链（激活态 + 面包屑或页眉标题 + 局部导航，按深度选型）。 |
| Object / workflow 二选一主模型 | 主链要么按**对象生产序**，要么按**作业步骤序**；禁止顶栏同时混「Product / Features / Platform / Modules」多套心智。 |

---

## 2. 硬闸（任意内部工具 / B2B 控制台）

过不了就不要加菜单、不要加产品 Tab、不要改默认首页。

**G1. 产品一句必须是「受众 + 对象动词链 + 反例 + 禁入主链的项」。禁止功能清单当定义。**

填成：`给 {谁} 一条 {杠杆/作业} 流水线：{A} → {B} → {C} → …`。下一句写「不是 {精修/单笔/报表堆}」。再点名哪些增强项不许抢主链点击。

**G2. 导航顺序 = 对象生产/流转顺序（或明确的作业步骤序）。链头只允许一个不生产对象的调度页（工作台/今天）。主链目的地 ≤7，外加一个溢出（更多/管理）。复杂工具默认左侧主链可见（桌面不靠汉堡藏主航）。**

调度页只回答两句：今天先干什么；机器/流程跑得怎么样。全链路地图不在调度页。  
行业对齐：内部工具主项常落在 **5–8**；本 pack 取 **≤7 + 溢出**，逼你砍叶子。

**G3. 想加菜单或水平 Tab → 先改 `docs/IA.md` 对应节，再动代码。必须当场回答：**

1. 服务主链哪一段？  
2. 能否并进现有页的上下滚 / 胶囊 / 抽屉？  
3. 是不是同一份数据的切片？  

答不出 = 不加。禁止为显得功能多加叶子。

**G4. 同一对象一个门。同一份数据的切片 = 一页上下滚 + 锚点。旧 Tab 路由改成 hash 重定向。审核需要对照时，页面文件可留、侧栏不再指向。**

切片示例（不当门）：总览 vs 按人 vs 按部门；任务列表 vs 已完成；趋势 vs 账户。时间窗、状态、平台是过滤器，不是产品。

**G5. 胶囊只切换真两套对象或两套库存。**

允许：两套归属池、两套会话类型、两类文件、人 vs 审计日志。  
禁止升级成对等产品 Tab：同一批记录的切片、工具条动作（合并/导出）、归档、状态筛（草稿/已提交）。状态筛可以长得像胶囊，但文案和 IA 必须标成「筛，不是门」。

**G6. 默认首页 = 决策环境。必须同时有：今天的队列入口（可点进对应页）+ 零状态下的下一步 URL。禁止把全系统地图或 KPI 墙放在首页。**

每块队列优先对齐角色的 **信号 → 诊断 → 行动**，不是「有数就贴」。  
空态：缺什么 + 去哪补 + 一个主 CTA。帮助页才画全图。  
第一屏信息块控制在可扫数量（经验：**3 个队列级入口**优于 12 张卡）。

**G7. 情境工具挂在使用现场，不进主链。帮助是溢出里的地图，禁止做成第二套 onboarding。导览只讲解铬（侧栏/顶栏），不代替调度页派活。**

**G8. 增强项进溢出的充要条件：不生产主链对象，或与主链对象法定/结构不同（两张表、两套授权、两套作业）。对象边界写进 IA 或备忘；未写入当前冻版，禁止改导航。**

两套真对象可以拆页，但不自动获得主链点击。主链只放流水线环节。

**G9. 搜索是 IA 第四系统，不是彩蛋。** 记录、设置项、帮助条目至少一类可被全局搜索/命令面板触达（工具面推荐 Cmd/Ctrl+K 作增强，不替代可见主链）。搜得到 ≠ 树可以乱；树仍要过 tree test。

**G10. 设置按范围分域，不按功能堆长列表。**

用户心智是「我 / 我的团队·工作区 / 系统·管理员」，不是「后端域」。

| 范围 | 装什么 |
|---|---|
| **Account（我）** | 个人资料、登录、通知、语言、外观 |
| **Workspace（团队）** | 默认值、集成、共享模板、团队约定 |
| **Admin（系统）** | 权限、安全策略、计费、审计、预配 |

敏感/低频可深藏，但路径必须可预期。禁止把 API key、账单、头像、Webhook 糊成一页无分组清单。

**G11. 多租户时写清层级（若适用）：Organization → Workspace → Object。** 导航与权限投影不得把计费根和作业对象拍平同一级。

---

## 3. 反模式：导航 = 数据库对象

把模块/表/审批状态做成一级导航，用户要先懂你的 schema 才能办事。

内部工具高频翻车（名词可换，结构一样）：

```text
部门 / 预算 / 报表 / 审批
组织 / 单据 / 台账 / 流程
项目 / 资源 / 权限 / 日志
```

这些是**存储和权限切分**，不是用户今天的活。用户语言长这样：

```text
把今年的数填完 → 看缺口 → 定稿或被打回后改 → 主管看卡在谁
传原料 → 出一批 → 发出去 → 回话 → 跟线索
```

检测方法：拿 G3 三问去审每一片叶子。若答案是「对应一张表 / 一个微服务 / 一个审批状态」，删掉或并进真正的对象门。

**非正式 tree test 口令：**  
「你是 {角色}，今天要 {任务}。从打开产品开始，点哪里？」作者不许提示。三次里有一次迷路，改树，不要加说明文案硬扛。

**上线前导航四问（自检）：**

| 问 | 失败信号 |
|---|---|
| 分类像用户还是像代码仓？ | 错段 ≥2 次 |
| 新能力会出现在日常路径吗？ | 只能靠 changelog |
| 指定目的地无回退可达吗？ | 依赖搜索兜底才到 |
| 顶层是否犹豫？ | 悬停不动 / 来回扫顶栏 |

---

## 4. 版本：真源 + 冻版（1.0 可被整份替换）

项目内约定（结构抄出海云 `docs/prd/`，文件名可仍叫 `IA.md`）：

| 文件 | 角色 |
|---|---|
| `docs/IA.md` | **当前真源**。改导航 / 页面归属 / 水平菜单之前先改它。 |
| `docs/prd/vN-YYYY-MM-DD.md` | 拍板后的冻版全文。git 可 diff / rollback。 |
| `docs/prd/README.md` | 版本表：哪一版定了什么、怎么冻下一版、怎么回滚。 |

`docs/PRD.md` 若已存在且团队认它为真源，可让它与 `docs/IA.md` 同内容或让其中一个 redirect 到另一个。**一个**当前真源，禁止两份同时改。

怎么冻下一版：

```text
复制 docs/IA.md → docs/prd/vN-YYYY-MM-DD.md
在 docs/prd/README.md 加一行
再改真源
```

对比 / 回滚：

```bash
git diff HEAD -- docs/IA.md
git diff -- docs/prd/v2-YYYY-MM-DD.md docs/prd/v3-YYYY-MM-DD.md
# 回滚真源（会改工作区，先确认）
# Windows: copy docs\prd\vN-YYYY-MM-DD.md docs\IA.md
```

改动闸：

```text
想改导航归属 / 加菜单 / 加水平 Tab
  → 先改 docs/IA.md 对应节
  → 再动 nav / router / 页面

1.0 允许错。发现错了就出 vN+1 冻版替换，不要在页面上打补丁假装模型没变。
```

代码入口（有则写进 IA 文末）：`nav.ts` / 等价导航真源、router。视觉例外写 `DESIGN.md`，不要散落注释。

---

## 5. 页内怎么拆（投影规则，不是视觉）

同一份数据的三个切片 ≠ 三个产品。

| 它到底是什么 | 摆法 |
|---|---|
| 真两套对象 / 两套库存 | 胶囊（少，通常 2；文件类型等可略多，仍是一个门） |
| 同一批记录按维度切片 | 一页上下滚，或页顶总览 + 下面名单 |
| 动作（合并、导出、分配） | 工具条按钮 |
| 归档 / 作废 | 左栏或筛，不进主漏斗阶段；归档里不能新建 |
| 情境工具（话术、模板、计算器） | 用得到的那一块 UI 上，侧栏不单列 |
| 增强项 | 溢出（更多），或附属列/抽屉 |
| 记录详情内的子视图 | **局部导航**（左栏小节 / 页内锚点 / 2–6 Tab），不是新的主链叶子 |

旧链：被合并的路由改重定向，不默删文件。

**导航铬选型（复杂工具默认）：**

| 模式 | 何时 |
|---|---|
| 左侧主链 | 区块 ≥5、长会话、数据密集（Notion/Linear/内部 OA 常态） |
| 顶栏主链 | 主区要全宽、主项 ≤5 |
| 页内 Tab / 局部导航 | 同一对象门内 2–6 子视图 |
| 命令面板 | 增强层，不替代可见主链 |

---

## 6. 调度页与披露

工作台 / 默认首页：

1. **上：今天的队列**（约 3 块，可点进对应对象门）——每块最好能读成「信号 → 可点行动」。  
2. **中：零状态下一步**（3 步以内，每步一个 URL）。常驻或空态出现均可，但必须有 URL，禁止只讲道理。  
3. **下：流程/机器回看**（同一份数一页滚）。不要再占一个「数据」导航叶子。

第一屏只放高频/重要。次要进溢出或页内下半。线性作业用分步披露；不要「下一步」空门如果不增加决策（NN/g workflow expectations：步骤在用户预期的时机出现）。

帮助：图说结构，字只补动作与边界；每块可点进真页面。禁止把帮助改成第二套导览。

---

## 7. 首登激活（Onboarding → Setup）

内部工具若存在「注册/第一次进工作区」，在 `docs/IA.md` 增加一节，不要只写在增长实验文档：

```text
## 激活（若适用）

Aha 定义（一句话 + 事件名）:
Onboarding 入口输入（域名 / URL / 账户 / …）:
Onboarding 明确不要求的集成:
Setup 生产里程碑（必须产生 usage）:
付费/升级教育点:
失败降级:
```

机制与清单见 [`ui-patterns/saas-onboarding-two-phase.md`](./ui-patterns/saas-onboarding-two-phase.md)。  
硬规则：没有可测 aha 事件 → 不准开工做向导 UI；Setup 里程碑禁止用「配置勾选完成」冒充用量。  
与 G2 关系：Onboarding 可以暂在主链外；Setup 必须接回主链对象生产顺序。

---

## 8. 空白骨架（复制到 `docs/IA.md` 再填）

外层用四反引号包住，里面的 mermaid / text 三反引号可原样粘贴进项目。

````markdown
# {产品名} · IA 与用户旅程（v1 · 当前）

> 真源。改导航 / 页面归属 / 水平菜单之前先改本文，再动代码。
> 冻版目录：[docs/prd/](prd/README.md)。1.0 允许错，下一冻版整份替换。

## 1. 产品一句

给 {谁} 一条 {作业类型} 流水线：

**{A} → {B} → {C} → {D}**

不是 {反例}。{增强项 1}、{增强项 2} = 增强项，不许抢主链点击。

## 2. 对象模型（OOUX 薄表）

| 对象 | 一句话 | 关键状态 | 主要关系 | 谁最常碰 |
|---|---|---|---|---|
| {对象} | | {草稿/在跑/完成…} | {属于 X / 产出 Y} | {角色} |

```mermaid
flowchart LR
  A[{原料/输入}] --> B[{加工}]
  B --> C[{产出回库或提交}]
  C --> D[{下游动作}]
```

调度页不生产对象，只回答「今天先干什么」和「跑得怎么样」。

多租户（若有）：Organization → Workspace → Object = {怎么映射}。

## 3. 谁 × 任务 / 决策（用户语言，禁止库表名）

| 角色 | 今天的活或决策（3 步以内） | 信号 → 行动 | 从哪进 | 不进哪 |
|---|---|---|---|---|
| {角色 1} | 1. … 2. … 3. … | {看见什么} → {点哪} | {调度页} | {溢出项} |
| {角色 2} | 1. … 2. … 3. … | | {页} | {页} |

非正式 tree test：非作者按上表找活。迷路则改树。

## 4. 主链导航

顺序本身就是产品故事。代码真源：`{nav 文件}`。铬：{左侧主链 / 顶栏}。

| 序 | 导航 | 路由 | 这一页装什么 | 不装什么 |
|---|---|---|---|---|
| 1 | {调度} | / | 队列 + 零状态三步；下半回看 | 全链路地图 / KPI 墙 |
| 2 | {对象门} | / | | |
| + | 更多 | — | {增强项}、帮助、设置入口 | 主链对象 |

搜索 / Cmd+K 覆盖：{记录 · 设置 · 帮助} 中的哪些。

## 5. 每页装什么

### 5.1 一页滚，不要假产品 Tab

| 页 | 不要 | 要 |
|---|---|---|
| {调度} | 数据再占一个导航叶子；三个下划线 Tab | 待办在上，数据在下 |
| {页} | {假 Tab A} \| {假 Tab B} | {上} + {下} 或局部导航 |

### 5.2 胶囊（仅真两套对象）

现在还保留胶囊的：

- {页}：{A} \| {B} — 因为 {两套对象的理由}

不当胶囊的：{切片}、{动作}、{归档}。

### 5.3 设置分域

| 范围 | 入口 | 装什么 |
|---|---|---|
| 我 | | |
| 工作区 | | |
| 系统/管理员 | | |

## 6. 角色落地

| 角色 | 打开产品后第一屏 | 三步 URL |
|---|---|---|
| {角色 1} | {调度页队列} | {url} → {url} → {url} |

## 7. 第一期三块（调度页最上）

可点进队列，不是装饰 KPI；尽量能读成信号→行动：

1. {队列 A} → {路由}
2. {队列 B} → {路由}
3. {队列 C} → {路由}

零状态三步（还没跑通主链时）：

1. {动词 + 对象} → {路由}
2. …
3. …

## 8. 激活（若适用）

Aha：  
Setup 生产里程碑：  
详见 pack `saas-onboarding-two-phase`。

## 9. 明确不做

- 为显得功能多加侧栏叶子
- 把帮助做成第二套导览
- 用库表名当导航标签
- 在归档里新建主链对象
- 未写入本文就改导航 / 加水平 Tab
- 设置页无「我/团队/系统」糊成一锅
- 用配置完成 % 冒充激活 usage

## 10. 改动闸

```text
想改导航归属 / 加菜单 / 加水平 Tab
  → 先改本文对应节 → 再动代码
必须先答：服务主链哪一段？能否并进现有页滚/胶囊/抽屉？是不是同一份数据的切片？
上线前过导航四问（IA / discoverability / task completion / hesitation）
1.0 允许错；下一冻版替换，禁止页面补丁冒充改 IA。
```

代码入口：`{nav}`、`{router}`。视觉例外写 `DESIGN.md`。
````

同期建 `docs/prd/README.md`（可整段改产品名）：

````markdown
# IA 版本

`docs/IA.md` 永远是**当前真源**（改导航先改它）。每次拍板后把当时的全文冻进本目录。

| 版 | 日期 | 文件 | 这一版定了什么 |
|---|---|---|---|
| v1 | YYYY-MM-DD | [v1-YYYY-MM-DD.md](./v1-YYYY-MM-DD.md) · 即当前 [../IA.md](../IA.md) | 1.0：主链、调度页、明确不做 |
````

---

## 9. Agent 执行顺序

1. 读本文件，不要直接画导航。  
2. 若项目已有 `docs/IA.md` / `docs/PRD.md`，先读真源再改；不要平行再写一份。  
3. 用 §8 骨架填或改 `docs/IA.md`。缺角色就问最小问题（谁、今天三步/决策、对象链），不要用表名填空。  
4. 建或更新 `docs/prd/README.md`；首次拍板后冻 `docs/prd/v1-YYYY-MM-DD.md`。  
5. 导航投影另做，且顺序必须能从主链表一行行对上；设置按 G10 分域。  
6. 跑非正式 tree test 口令；记录失败任务。  
7. 不在本任务里实现 UI，除非用户明确说进入页面实现。  

停：骨架填完、三问能审每一片叶子、四问自检写过、非正式 tree test 口令已写进文档。不要为「完整」去发明未确认的业务规则。

---

## 10. 简短书目（机制来源）

- NN/g: IA vs Navigation；Progressive Disclosure；Tree Testing；Menu-Design Checklist；OOUX；You-Are-Here / Local Navigation  
- Morville & Rosenfeld: organization · labeling · navigation · search  
- 实践合流：B2B 调度页 decision-first；设置 me/workspace/admin；主链 5–8；导航上线四问  

本文件只保留**可执行闸**；细节案例去原出处，勿把外部长文粘进项目 IA。
