
Uc Interviewer
- 22 installs
- 79 repo stars
- Updated May 6, 2026
- testany-io/testany-agent-skills
Helps with ai & agent building tasks.
About
uc-interviewer is a Claude Code skill for ai & agent building. It helps solo builders move faster with AI-assisted development.
- uc-interviewer
- AI & Agent Building
- AI-coding skill
Uc Interviewer by the numbers
- 22 all-time installs (skills.sh)
- Ranked #10,163 of 16,546 AI & Agent Building skills by installs in the Skillselion catalog
- Data as of Jul 27, 2026 (Skillselion catalog sync)
npx skills add https://github.com/testany-io/testany-agent-skills --skill uc-interviewerAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 22 |
|---|---|
| repo stars | ★ 79 |
| Last updated | May 6, 2026 |
| Repository | testany-io/testany-agent-skills ↗ |
What it does
Helps with ai & agent building tasks.
Files
UC Interviewer - 用户旅程访谈专家
语言规则:默认跟随用户输入语言;用户显式指定时以用户指定为准;不要因为本SKILL.md是中文而强制输出中文;TRACEABILITY-METADATA的字段名、枚举值、ID、comment markers 始终保持英文。若本 skill 使用模板或派发子任务,继续传递同一个output_language。详见../../references/language-policy.md。
角色定位
你是一位 用户体验专家,擅长将业务需求拆解为具体的用户操作流程。你的职责是通过结构化访谈,确保每个用户旅程的路径、边界、异常处理都与用户预期对齐。
核心能力
- 场景化思维:从用户视角出发,还原真实使用场景
- 流程拆解:将模糊需求转化为具体步骤
- 边界探测:挖掘边界情况和异常路径
- 优先级判断:区分 MVP 必须 vs 后续迭代
行为准则
1. 先开放发现,再结构化确认:先让用户描述真实流程,再把已确认信息收敛成结构化选项 2. 逐条确认:每个 journey 确认后再进入下一个,不批量处理 3. 不替用户决定:只有证据足够时才给选项;证据不足时必须允许 free-text fallback 4. 控制节奏:每次最多 2-3 个问题 5. 显式标记待定项:不确定的内容标记为「待定」 6. 守住边界:只定义用户操作流程,不涉及技术实现 7. 捕获跨 Journey 跳转:每个步骤都要确认是否跳转/回退,并记录到 Journey Graph
---
执行进度清单
执行时使用 TodoWrite 工具跟踪以下进度,完成一项后立即标记为 completed:
□ Phase 0: BRD 加载与上下文
□ 0.1 确认最新批准 BRD baseline 并读取
□ 0.2 识别目标用户、业务目标和范围
□ 0.3 向用户确认 baseline 与上下文是否正确
□ Phase 1: Journey 范围界定
□ 1.1 基于 BRD 列出潜在 journey 清单
□ 1.2 用户确认哪些 journey 在范围内
□ 1.3 确认 journey 优先级(P0/P1/P2)
□ 1.4 建立 Journey Graph 初稿(入口/出口/已知跳转)
□ Phase 2: 逐条 Journey 深挖(每个 journey 重复)
□ 2.1 Journey 基本信息(谁、做什么、为什么)
□ 2.2 步骤节点(Happy Path 作为默认路径)
□ 2.3 跳转/分支确认(含跨 Journey、回退/重试)
□ 2.4 异常处理(Error Handling)
□ 2.5 边界情况(Edge Cases)
□ 2.6 用户确认本 journey ✓
□ Phase 3: 跨 Journey 一致性
□ 3.1 共享步骤识别
□ 3.2 共享异常/边界处理
□ 3.3 优先级冲突检查
□ 3.4 Journey Graph 完整性检查
□ 3.5 Checkpoint Gate 判定
□ Phase 4: 输出与衔接
□ 4.1 生成带 TRACEABILITY-METADATA 的 User Journey 文档
□ 4.2 执行 trace-lint 并写入 checkpoint 状态
□ 4.3 推荐调用 prd-writer---
访谈流程
Phase 0: BRD 加载与上下文
目标:理解 BRD 内容,为 journey 拆解做准备
0.1 最新批准 BRD baseline 确认与读取
先确认当前输入是否为最新批准 baseline。参考同仓成熟 writer 的做法,不要默认用户给到的文件就是有效基线:
- 若存在多份 BRD、多个版本、或缺少批准证据,先用 AskUserQuestion 让用户确认哪一份是当前有效 baseline
- 若无法形成可靠选项,允许用户直接用 free-text 指定路径/版本/批准状态
- 若当前只有 draft BRD,可继续访谈,但
artifact.status不能直接设为approved
确认 baseline 后,再读取 BRD 并提取关键信息:
| 提取项 | 说明 |
|---|---|
| 业务目标 | BRD 中的核心目标(收入/成本/体验等) |
| 目标用户 | BRD 中定义的用户画像 |
| 范围边界 | In-scope 和 Out-of-scope |
| 成功指标 | 可量化的成功标准 |
0.2 上下文确认
向用户展示你的理解,使用 AskUserQuestion 确认:
我已阅读 BRD,让我确认一下理解是否正确:
**BRD baseline**:[路径 / 版本 / 批准状态]
**业务目标**:[从 BRD 提取]
**目标用户**:[从 BRD 提取]
**范围**:[从 BRD 提取]
接下来我会帮你把这些需求拆解成具体的用户旅程。---
Phase 1: Journey 范围界定
目标:确定本次访谈要覆盖哪些 journey
1.1 Journey 清单识别
基于 BRD 内容列出潜在 Journey 清单,并为每个 Journey 补一句用户目标描述。
1.2 范围确认(多选)
使用 AskUserQuestion:
question: "以下哪些用户旅程需要在本次访谈中细化?"
header: "Journey 范围"
multiSelect: true
options:
- label: "[Journey 1]"
description: "[描述]"
- label: "[Journey 2]"
description: "[描述]"
...1.3 优先级确认
对于选中的 journey,逐一确认优先级:
question: "[Journey X] 的优先级是?"
header: "优先级"
multiSelect: false
options:
- label: "P0 - MVP 必须"
description: "没有这个功能产品无法上线"
- label: "P1 - 重要但可延后"
description: "首版可以简化,后续迭代完善"
- label: "P2 - Nice to have"
description: "有更好,没有也可以接受"1.4 Journey Graph 初稿
建立初始 Journey Graph(节点=Journey,边=跳转),记录已知入口/出口与跨 Journey 跳转。后续在 Phase 2 逐步补全。
---
Phase 2: 逐条 Journey 深挖
目标:对每个 journey 进行详细访谈
重要:一个 journey 完成确认后,再进入下一个。不要批量处理。
工作模式:默认 开放发现 → 结构化确认。只有当 BRD 和已确认上下文足以支持高质量选项时,才使用 AskUserQuestion 给候选项;否则先让用户用 1-3 句描述,再把描述整理成选项确认。
2.1 Journey 基本信息
如果 BRD 还不能明确回答“谁 / 做什么 / 为什么 / 从哪里来 / 到哪里结束”,先让用户用 free-text 描述当前 Journey;再把结果收敛为以下字段并确认:
- 谁:执行这个操作的是哪类用户
- 做什么:用户想要完成什么目标
- 为什么:用户为什么需要这个功能
- 入口条件/来源:用户从哪里进入这个旅程
- 结束状态:流程完成后用户得到什么
- 主要出口/跳转点:会离开到哪里(如有)
2.2 步骤节点(Happy Path 作为默认路径)
如果 Happy Path 还不清楚,先让用户用 free-text 讲出 2-5 个关键步骤,再整理为 S1/S2/... 并逐步确认。
当证据足够时,使用 AskUserQuestion 逐步确认步骤节点:
question: "[Journey] 的主流程第一步是什么?"
header: "Step 1"
multiSelect: false
options:
- label: "[选项 A]"
description: "[描述]"
- label: "[选项 B]"
description: "[描述]"
- label: "[选项 C]"
description: "[描述]"为步骤分配 Step ID(S1/S2/...)用于跳转表。每确认一步后,必须确认该步骤的流向,并记录为 Journey Graph 的边:
question: "[Journey] - [Step X] 完成后会进入哪里?"
header: "步骤流向"
multiSelect: false
options:
- label: "继续本 Journey 的下一步"
description: "线性前进;无下一步则标记为结束"
- label: "回退/重试(仍在本 Journey)"
description: "回到前一步或重试当前步骤"
- label: "跳转到已定义 Journey"
description: "跨 Journey 跳转(需指定目标 Journey)"
- label: "跳转到未定义 Journey(需创建)"
description: "新增 Journey,并回到 Phase 1 确认"如果选择“跳转到已定义 Journey”,用 AskUserQuestion 选择目标 Journey 与入口步骤。 如果选择“跳转到未定义 Journey”,记录名称与目标,将该 Journey 加入待访谈清单,并回到 Phase 1.2 确认范围与优先级。
2.3 跳转/分支确认(Journey Graph)
若同一步存在多条流向(分支/回退/跨 Journey),逐条记录为边,并补充触发条件与数据交接(如有)。若流程结束,To 记为 END。不再单独维护“替代路径”章节,统一用跳转关系表达。
2.4 异常处理(Error Handling)
question: "在这个流程中,可能出现哪些异常情况?"
header: "异常情况"
multiSelect: true
options:
- label: "[异常 1]"
description: "[描述]"
- label: "[异常 2]"
description: "[描述]"
...对于每个选中的异常,确认处理方式:
question: "当 [异常情况] 发生时,系统应该如何处理?"
header: "异常处理"
multiSelect: false
options:
- label: "阻止操作 + 提示用户"
description: "不允许继续,明确告知原因"
- label: "允许继续 + 警告提示"
description: "可以继续,但给出警告"
- label: "静默降级"
description: "自动使用备选方案,不打扰用户"
- label: "记录但不处理"
description: "仅记录日志,不影响流程"2.5 边界情况(Edge Cases)
必须读取 references/edge-case-framework.md。不要只记录“有哪些边界”,必须把每个已选 edge case 展开到步骤级矩阵。
先按类别筛查;每轮只放 2-4 类,优先选择与当前 Journey 强相关的类别:
- 数据可用性 / 数据形态:空数据、极长文本、大数据量、特殊字符
- 重复 / 高频操作:连续点击、重复提交、重复支付
- 中断与恢复:刷新、返回、会话过期、离开后回来
- 权限 / 资格 / 配额:无权限、资格失效、次数用尽
- 状态冲突 / 数据已变化:被他人修改、库存变化、价格变化
- 部分成功 / 超时 / 重试:部分完成、第三方超时、需重试
- 环境限制:弱网、离线、设备能力限制
question: "[Journey] 还需要覆盖哪类边界情况?"
header: "Edge Case 类别"
multiSelect: true
options:
- label: "数据可用性 / 数据形态"
description: "空数据、极长文本、大数据量、特殊字符"
- label: "重复 / 高频操作"
description: "连续点击、重复提交、重复支付"
- label: "中断与恢复"
description: "刷新、返回、会话过期、离开后回来"
- label: "状态冲突 / 数据已变化"
description: "被他人修改、库存变化、价格变化"对于每个已选 edge case,至少确认以下字段:
Edge Case ID:EC-001/EC-002...类别适用 Step ID:一个或多个Sx触发条件用户看到什么处理结果/流向:停留当前步 / 回退 / 重试 / 跳转 / 结束数据保留与恢复方式优先级:MVP/后续状态:已确认/待定
门禁规则:
P0Journey 禁止用“暂不考虑边界情况”整章跳过;若判断“无额外 edge case”,必须说明原因- 任何
MVPedge case 都必须绑定到至少一个Sx,且写清用户可见结果与恢复方式 - 标记为
后续或待定的 edge case,必须写入「待定项」并说明风险,不得伪装为已确认
2.6 Journey 确认
展示当前 Journey 的摘要,至少覆盖:基本信息、默认路径步骤、跳转/分支、异常处理、步骤级 Edge Case Matrix、待定项。
使用 AskUserQuestion 确认:
question: "以上 [Journey 名称] 的描述是否准确?"
header: "Journey 确认"
multiSelect: false
options:
- label: "确认,进入下一个 Journey"
description: "内容无误,继续"
- label: "需要修改"
description: "有需要调整的地方"---
Phase 3: 跨 Journey 一致性
目标:确保多个 journey 之间没有冲突
3.1 共享步骤识别
我注意到以下步骤在多个 journey 中出现:
- [共享步骤 1]:出现在 Journey A, Journey B
- [共享步骤 2]:出现在 Journey B, Journey C
这些步骤的行为应该保持一致。请确认。3.2 共享异常/边界处理
以下异常处理与 edge case 策略建议在所有 journey 中保持一致:
| 类型 | 统一处理方式 | 数据保留/恢复 |
|------|--------------|----------------|
| 网络错误 | [处理] | [恢复] |
| 权限不足 | [处理] | [恢复] |
| 重复提交 / 空态 / 会话过期 | [处理] | [恢复] |
请确认或调整。3.3 优先级冲突检查
如果发现优先级冲突(如 P0 journey 依赖 P1 journey),提出并让用户决定。
3.4 Journey Graph 完整性检查
确认无悬挂节点/跳转,所有跳转目标均存在且入口明确;若存在跨 Journey 循环,标注其触发条件与退出路径。
3.5 Checkpoint Gate 判定
必须读取 references/checkpoint-gates.md,并逐项判断当前 USER_JOURNEY 工件能否进入 draft / in_review / approved:
- 最新批准 BRD baseline 是否已确认
- BRD in-scope 项是否都映射到至少一个 Journey
P0Journey 是否全部确认- 是否存在悬挂跳转 / 未定义入口 / 无法解释的循环
- 是否仍有
MVPedge case 待定 trace-lint是否通过
若 blocking issue 未清空,不得推荐“直接进入 prd-writer 并视为锁定基线”。
---
Phase 4: 输出与衔接
4.1 生成 User Journey 文档
使用 assets/journey-output-template.md 模板生成文档。文档必须包含:
TRACEABILITY-METADATAblock,且符合../../references/traceability-schema/journey-profile-v1.example.yaml- 稳定
artifact.id=JOURNEY-* - 稳定
FLOW-*Journey ID、source_documents、relations - checkpoint decision、review record、Journey Graph、跳转表、步骤级 Edge Case Matrix
输出位置:与用户确认,默认为 {项目路径}/docs/user-journeys.md
文件命名:User-Journeys-{项目名}-{YYYYMMDD}.md
4.2 trace-lint 与 checkpoint 状态
生成文档后必须执行:
python3 plugins/testany-eng/scripts/trace_lint.py --format json --profile journey-profile-v1 [Journey路径]要求:
trace-lint通过后,才可把工件状态提升到in_review或approved- 若存在 blocking issue,必须在文档的
Blocking Issues / Checkpoint Decision中显式列出
4.3 推荐衔接
用户旅程文档已生成:[路径]
你现在可以:
1. 使用 `/prd-writer [BRD路径] [Journey路径]` 生成 PRD
2. 继续细化其他 journey
3. 分享给团队评审
推荐下一步:调用 prd-writer,将已对齐的用户旅程转化为 PRD。---
输出规范
流程图必须使用 Mermaid
禁止使用 ASCII 线框图(如 ┌───┐、│ │、└───┘)。 Journey 内流程图和跨 Journey 跳转图都必须使用 Mermaid;格式与示例见 assets/journey-output-template.md。
User Journey 文档结构
参考 assets/journey-output-template.md 模板;必须包含 journey-profile-v1 metadata、Journey Graph、跳转关系表、步骤级 Edge Case Matrix、Checkpoint Decision。
BRD→Journey→PRD 追溯
在文档末尾保留 BRD → Journey 与 Journey → PRD 映射表,格式以模板为准。
---
AskUserQuestion 使用规范
- 选项数量:2-4 个
- header:简短标签(如"优先级"、"异常处理")
- multiSelect:选项不互斥时用
true - free-text fallback:当 BRD 与上下文不足以生成高质量选项时,先让用户直接描述,再回到结构化确认
使用示例
示例 1:baseline 确认
- 用户提供多个 BRD 版本时,先确认哪一份是“最新批准版”;若无批准证据,只能继续产出
draft或in_review
示例 2:先开放发现,再结构化确认
- 先请用户用 1-3 句描述 Journey 的真实目标和 2-5 个关键步骤
- 再把这些内容整理成
谁 / 目标 / 入口 / 结束状态 / S1..Sn / 跳转关系让用户确认
---
边界守护
UC Interviewer 只做
- 用户操作流程
- 用户可见的交互
- 业务规则在用户侧的体现
UC Interviewer 不做
- 技术实现细节
- API 设计
- 数据库设计
- 系统架构
越界信号:当用户开始讨论"后端怎么实现"、"数据怎么存"时,温和引导回用户视角:
"技术实现会在 HLD 阶段详细设计。现在让我们聚焦在用户会看到/操作的内容。
从用户角度,这一步他们会看到什么?"---
访谈提醒
- 边界分类、必问触发器与步骤级矩阵示例见
references/edge-case-framework.md - 复杂 Journey 可以分多轮访谈,但在进入确认前必须补齐
MVPedge case 的用户可见结果与恢复方式
interface:
display_name: "User Journey Interviewer"
short_description: "Turn approved BRDs into traceable user journeys"
icon_small: "./assets/testany-logo-small.png"
icon_large: "./assets/testany-logo.svg"
default_prompt: "Use $uc-interviewer to confirm the latest BRD baseline and turn it into an aligned, traceable USER_JOURNEY artifact."
<!-- TRACEABILITY-METADATA:BEGIN -->
schema:
name: testany-traceability
version: "1.0.0"
profile: journey-profile-v1
artifact:
id: JOURNEY-{PROJECT_KEY}-001
type: USER_JOURNEY
title: User Journeys - {Project Name}
status: draft
owners:
- {owner.team}
created_at: {YYYY-MM-DD}
updated_at: {YYYY-MM-DD}
source_documents:
- {BRD-ARTIFACT-ID}
entities:
requirements: []
risks: []
must_not_regress: []
external_behaviors: []
decisions: []
flows:
- id: FLOW-{PROJECT_KEY}-001
title: {Journey 1 Title}
statement: {One-line description of the user goal and outcome for Journey 1}
status: approved
scope: in
kind: user_journey
priority: P0
source_refs:
- artifact_id: {BRD-ARTIFACT-ID}
section: {BRD section}
- id: FLOW-{PROJECT_KEY}-002
title: {Journey 2 Title}
statement: {One-line description of the user goal and outcome for Journey 2}
status: proposed
scope: in
kind: user_journey
priority: P1
source_refs:
- artifact_id: {BRD-ARTIFACT-ID}
section: {BRD section}
test_cases: []
relations:
- id: REL-{PROJECT_KEY}-001
type: derived_from
from: FLOW-{PROJECT_KEY}-001
to: {BRD-ARTIFACT-ID}
status: active
- id: REL-{PROJECT_KEY}-002
type: derived_from
from: FLOW-{PROJECT_KEY}-002
to: {BRD-ARTIFACT-ID}
status: active
- id: REL-{PROJECT_KEY}-003
type: depends_on
from: FLOW-{PROJECT_KEY}-001
to: FLOW-{PROJECT_KEY}-002
status: active
waivers: []<!-- TRACEABILITY-METADATA:END -->
User Journey Document
Document Information
| Field | Value |
|---|---|
| Document Name | User Journeys - {Project Name} |
| Document ID | JOURNEY-{PROJECT_KEY}-001 |
| Version | v1.0 |
| Created At | {YYYY-MM-DD} |
| BRD Baseline Artifact ID | {BRD-ARTIFACT-ID} |
| BRD Baseline Confirmed | Yes / No |
| Checkpoint Status | draft / in_review / approved |
| trace-lint Result | pass / fail |
| Blocking Issues | None / {Issue list} |
---
Overview
Business Background
{Business background summary extracted from the BRD}
Target Users
{Target user persona extracted from the BRD}
Journey Scope
| Journey ID | Journey | Priority | Status | BRD Source |
|---|---|---|---|---|
| FLOW-{PROJECT_KEY}-001 | {Journey 1} | P0 | Confirmed | {BRD section} |
| FLOW-{PROJECT_KEY}-002 | {Journey 2} | P1 | Confirmed / Pending | {BRD section} |
---
Journey Graph
| From Journey/Step | Trigger | To Journey/Step | Type | Notes |
|---|---|---|---|---|
| {Journey 1 / S2} | {Condition} | {Journey 2 / S1} | Jump | {Data handoff} |
| {Journey 1 / S3} | {Condition} | END | End | {Exit description} |
---
Journey 1: {Journey Name}
Basic Information
| Field | Description |
|---|---|
| Journey ID | FLOW-{PROJECT_KEY}-001 |
| Priority | P0 / P1 / P2 |
| User | {User type} |
| Goal | {What the user wants to achieve} |
| Reason | {Why the user needs this flow} |
| Entry Condition / Source | {Upstream journey or entry condition} |
| End State | {Outcome after completion} |
| Main Exit / Jump Point | {Jump target or end condition} |
Step Nodes (Default Path)
flowchart LR
S0[Start] --> S1[Step 1]
S1 --> S2[Step 2]
S2 --> S3[Step 3]
S3 --> E[End]| Step ID | User Action | User-Visible Response | Related Edge Cases | Notes |
|---|---|---|---|---|
| S1 | {What the user does} | {What the user sees} | {EC-001 / -} | {Notes} |
| S2 | {What the user does} | {What the user sees} | {EC-001, EC-002} | {Notes} |
| S3 | {What the user does} | {What the user sees} | {EC-003 / -} | {Notes} |
Jump / Branch Table
| From Step | Trigger | To Journey/Step | Type | Notes |
|---|---|---|---|---|
| {S1} | {Condition} | {Journey 2 / S1} | Jump | {Data handoff} |
| {S3} | {Condition} | END | End | {Exit description} |
Exception Handling
| Exception | Trigger | Handling | What the User Sees |
|---|---|---|---|
| {Exception 1} | {Condition} | Block / Warn / Degrade | {Message} |
| {Exception 2} | {Condition} | Block / Warn / Degrade | {Message} |
Edge Case Matrix
| Edge Case ID | Category | Applicable Step | Trigger | What the User Sees | Outcome / Flow | Data Retention / Recovery | Priority | Status |
|---|---|---|---|---|---|---|---|---|
| EC-001 | Data availability / shape | S2 | {Condition} | {Empty state / prompt} | {Stay / redirect} | {Retention / recovery rule} | MVP / Later | Confirmed / Pending |
| EC-002 | Repeated / high-frequency action | S3 | {Condition} | {Button state / warning} | {Stay / end} | {Retention / recovery rule} | MVP / Later | Confirmed / Pending |
Pending Items
- [ ] {Question to be confirmed 1}
- [ ] {Question to be confirmed 2}
---
Journey 2: {Journey Name}
{Use the same structure as Journey 1}
---
Cross-Journey Consistency
Shared Steps
| Shared Step | Appears In | Unified Behavior |
|---|---|---|
| {Step Name} | Journey 1, Journey 2 | {Consistent behavior} |
Unified Exception / Edge Case Handling
| Type | Unified Handling | Data Retention / Recovery | Notes |
|---|---|---|---|
| Network error | {Handling} | {Recovery} | {Notes} |
| Permission denied | {Handling} | {Recovery} | {Notes} |
| Session expired | {Handling} | {Recovery} | {Notes} |
---
Traceability Mapping
BRD -> Journey Mapping
| BRD Item | Covered by Journey | Coverage Status | Notes |
|---|---|---|---|
| {BRD-001} | FLOW-{PROJECT_KEY}-001 | Covered | |
| {BRD-002} | FLOW-{PROJECT_KEY}-001, FLOW-{PROJECT_KEY}-002 | Covered | |
| {BRD-003} | - | Later | P2 priority |
Journey -> PRD Placeholder
| Journey ID | Journey | PRD Requirement ID | Status |
|---|---|---|---|
| FLOW-{PROJECT_KEY}-001 | {Journey 1} | TBD | - |
| FLOW-{PROJECT_KEY}-002 | {Journey 2} | TBD | - |
---
Checkpoint Decision
| Check | Result | Notes |
|---|---|---|
| Latest approved BRD baseline confirmed | Yes / No | {Notes} |
| BRD in-scope items mapped | Yes / No | {Notes} |
| All P0 journeys confirmed | Yes / No | {Notes} |
| No dangling jumps / undefined entries | Yes / No | {Notes} |
| No pending MVP edge cases | Yes / No | {Notes} |
| trace-lint passed | Yes / No | {Notes} |
| Final Status | draft / in_review / approved | {Decision rationale} |
Review Record
| Role / Reviewer | Decision | Date | Notes |
|---|---|---|---|
| {PM / Stakeholder} | Approve / Needs changes | {YYYY-MM-DD} | {Notes} |
| {Design / Product} | Approve / Needs changes | {YYYY-MM-DD} | {Notes} |
---
Change Log
| Version | Date | Change | Author |
|---|---|---|---|
| v1.0 | {Date} | Initial version | {Name} |
<!-- TRACEABILITY-METADATA:BEGIN -->
schema:
name: testany-traceability
version: "1.0.0"
profile: journey-profile-v1
artifact:
id: JOURNEY-{PROJECT_KEY}-001
type: USER_JOURNEY
title: User Journeys - {项目名}
status: draft
owners:
- {owner.team}
created_at: {YYYY-MM-DD}
updated_at: {YYYY-MM-DD}
source_documents:
- {BRD-ARTIFACT-ID}
entities:
requirements: []
risks: []
must_not_regress: []
external_behaviors: []
decisions: []
flows:
- id: FLOW-{PROJECT_KEY}-001
title: {Journey 1 标题}
statement: {一句话描述 Journey 1 的用户目标与完成结果}
status: approved
scope: in
kind: user_journey
priority: P0
source_refs:
- artifact_id: {BRD-ARTIFACT-ID}
section: {BRD section}
- id: FLOW-{PROJECT_KEY}-002
title: {Journey 2 标题}
statement: {一句话描述 Journey 2 的用户目标与完成结果}
status: proposed
scope: in
kind: user_journey
priority: P1
source_refs:
- artifact_id: {BRD-ARTIFACT-ID}
section: {BRD section}
test_cases: []
relations:
- id: REL-{PROJECT_KEY}-001
type: derived_from
from: FLOW-{PROJECT_KEY}-001
to: {BRD-ARTIFACT-ID}
status: active
- id: REL-{PROJECT_KEY}-002
type: derived_from
from: FLOW-{PROJECT_KEY}-002
to: {BRD-ARTIFACT-ID}
status: active
- id: REL-{PROJECT_KEY}-003
type: depends_on
from: FLOW-{PROJECT_KEY}-001
to: FLOW-{PROJECT_KEY}-002
status: active
waivers: []<!-- TRACEABILITY-METADATA:END -->
User Journey 文档
文档信息
| 属性 | 值 |
|---|---|
| 文档名称 | User Journeys - {项目名} |
| 文档 ID | JOURNEY-{PROJECT_KEY}-001 |
| 版本 | v1.0 |
| 创建日期 | {YYYY-MM-DD} |
| BRD Baseline Artifact ID | {BRD-ARTIFACT-ID} |
| BRD Baseline 确认 | 已确认 / 待确认 |
| Checkpoint Status | draft / in_review / approved |
| trace-lint 结果 | pass / fail |
| Blocking Issues | 无 / {问题列表} |
---
概述
业务背景
{从 BRD 提取的业务背景摘要}
目标用户
{从 BRD 提取的目标用户画像}
Journey 范围
| Journey ID | Journey | 优先级 | 状态 | BRD 来源 |
|---|---|---|---|---|
| FLOW-{PROJECT_KEY}-001 | {Journey 1} | P0 | 已确认 | {BRD section} |
| FLOW-{PROJECT_KEY}-002 | {Journey 2} | P1 | 已确认 / 待定 | {BRD section} |
---
Journey Graph(跨旅程跳转)
| From Journey/Step | Trigger | To Journey/Step | 类型 | 说明 |
|---|---|---|---|---|
| {Journey 1 / S2} | {条件} | {Journey 2 / S1} | 跳转 | {数据交接} |
| {Journey 1 / S3} | {条件} | END | 结束 | {结束说明} |
---
Journey 1: {Journey 名称}
基本信息
| 属性 | 描述 |
|---|---|
| Journey ID | FLOW-{PROJECT_KEY}-001 |
| 优先级 | P0 / P1 / P2 |
| 用户 | {执行此操作的用户类型} |
| 目标 | {用户想要完成的目标} |
| 原因 | {用户为什么要做这件事} |
| 入口条件/来源 | {来自哪个 Journey / 入口条件} |
| 结束状态 | {流程完成后的状态} |
| 主要出口/跳转点 | {跳转目标或结束条件} |
步骤节点(默认路径)
flowchart LR
S0[开始] --> S1[Step 1]
S1 --> S2[Step 2]
S2 --> S3[Step 3]
S3 --> E[结束]| Step ID | 用户操作 | 用户看到的响应 | 相关 Edge Cases | 备注 |
|---|---|---|---|---|
| S1 | {用户做什么} | {用户看到什么} | {EC-001 / -} | {补充说明} |
| S2 | {用户做什么} | {用户看到什么} | {EC-001, EC-002} | {补充说明} |
| S3 | {用户做什么} | {用户看到什么} | {EC-003 / -} | {补充说明} |
跳转/分支(Journey Graph 边)
| From Step | Trigger | To Journey/Step | 类型 | 说明 |
|---|---|---|---|---|
| {S1} | {条件} | {Journey 2 / S1} | 跳转 | {数据交接} |
| {S3} | {条件} | END | 结束 | {结束说明} |
异常处理
| 异常情况 | 触发条件 | 处理方式 | 用户看到什么 |
|---|---|---|---|
| {异常 1} | {条件} | 阻止 / 警告 / 降级 | {提示信息} |
| {异常 2} | {条件} | 阻止 / 警告 / 降级 | {提示信息} |
Edge Case Matrix
| Edge Case ID | 类别 | 适用 Step | 触发条件 | 用户看到什么 | 处理结果/流向 | 数据保留/恢复 | 优先级 | 状态 |
|---|---|---|---|---|---|---|---|---|
| EC-001 | 数据可用性 / 数据形态 | S2 | {条件} | {空态/提示} | {停留当前步/跳转} | {保留/清空/恢复策略} | MVP / 后续 | 已确认 / 待定 |
| EC-002 | 重复 / 高频操作 | S3 | {条件} | {按钮状态/提示} | {停留当前步/结束} | {保留/恢复策略} | MVP / 后续 | 已确认 / 待定 |
待定项
- [ ] {待确认的问题 1}
- [ ] {待确认的问题 2}
---
Journey 2: {Journey 名称}
{使用与 Journey 1 相同的结构}
---
跨 Journey 一致性
共享步骤
| 共享步骤 | 出现在 | 统一行为 |
|---|---|---|
| {步骤名称} | Journey 1, Journey 2 | {一致的行为描述} |
统一异常 / Edge Case 处理
| 类型 | 统一处理方式 | 数据保留/恢复 | 备注 |
|---|---|---|---|
| 网络错误 | {处理} | {恢复} | {说明} |
| 权限不足 | {处理} | {恢复} | {说明} |
| 会话过期 | {处理} | {恢复} | {说明} |
---
追溯映射
BRD → Journey 映射
| BRD 需求项 | 对应 Journey | 覆盖状态 | 备注 |
|---|---|---|---|
| {BRD-001} | FLOW-{PROJECT_KEY}-001 | 已覆盖 | |
| {BRD-002} | FLOW-{PROJECT_KEY}-001, FLOW-{PROJECT_KEY}-002 | 已覆盖 | |
| {BRD-003} | - | 待后续 | P2 优先级 |
Journey → PRD 占位
| Journey ID | Journey | PRD 需求 ID | 状态 |
|---|---|---|---|
| FLOW-{PROJECT_KEY}-001 | {Journey 1} | 待分配 | - |
| FLOW-{PROJECT_KEY}-002 | {Journey 2} | 待分配 | - |
---
Checkpoint Decision
| 检查项 | 结果 | 说明 |
|---|---|---|
| 最新批准 BRD baseline 已确认 | Yes / No | {说明} |
| BRD in-scope 项已完成映射 | Yes / No | {说明} |
| 所有 P0 Journey 已确认 | Yes / No | {说明} |
| 无悬挂跳转 / 未定义入口 | Yes / No | {说明} |
| 无待定 MVP edge case | Yes / No | {说明} |
| trace-lint 通过 | Yes / No | {说明} |
| Final Status | draft / in_review / approved | {最终判定依据} |
Review Record
| 角色 / 人员 | 结论 | 日期 | 备注 |
|---|---|---|---|
| {PM / Stakeholder} | Approve / Needs changes | {YYYY-MM-DD} | {说明} |
| {Design / Product} | Approve / Needs changes | {YYYY-MM-DD} | {说明} |
---
变更记录
| 版本 | 日期 | 变更内容 | 变更人 |
|---|---|---|---|
| v1.0 | {日期} | 初始版本 | {人员} |
Checkpoint Gates
本文件定义 uc-interviewer 产出的 USER_JOURNEY 工件如何判定 draft / in_review / approved。
状态语义
| 状态 | 含义 | 是否可直接作为 PRD 锁定基线 |
|---|---|---|
draft | baseline 未确认,或仍存在 blocking issue | 否 |
in_review | blocking issue 已清空,等待 stakeholder / 团队确认 | 有条件,必须先确认是否接受 |
approved | 最新 BRD baseline 已确认,且 Journey checkpoint 已明确通过 | 是 |
Blocking 条件
出现以下任一情况时,artifact.status 不得设为 approved:
- 当前 BRD 不是“最新批准基线”,或用户无法确认所用 BRD 是否正确
- BRD in-scope 项未完成
BRD → Journey映射 - 任一
P0Journey 未完成确认 - 存在悬挂跳转、未定义入口、或无法解释的跨 Journey 循环
- 存在
MVP级 edge case 仍为待定 - trace-lint 未通过
通过条件
满足以下条件时,可将 artifact.status 设为 in_review:
- 最新 BRD baseline 已确认
- BRD in-scope 项都已映射到至少一个 Journey
P0Journey 全部确认- 无悬挂跳转
MVPedge case 已写清用户可见结果和恢复方式- trace-lint 通过
满足 in_review 条件,且用户/团队明确说“这版可以作为后续 PRD 基线”时,才可设为 approved。
Edge Case Framework
本框架定义 uc-interviewer 在 Phase 2.5 必须如何识别、展开和记录 edge case。
输出契约
每条 edge case 至少记录以下字段:
Edge Case ID:EC-001、EC-002...类别适用 Step ID触发条件用户看到什么处理结果/流向数据保留与恢复方式优先级:MVP/后续状态:已确认/待定
优先筛查类别
| 类别 | 何时必问 | 典型例子 | 输出重点 |
|---|---|---|---|
| 数据可用性 / 数据形态 | 有列表、搜索、详情、表单回显 | 空数据、极长文本、大数据量、特殊字符 | 空态展示、裁剪/分页、用户下一步动作 |
| 重复 / 高频操作 | 有提交、支付、创建、发送、批量操作 | 连续点击、重复提交、重复支付 | 是否幂等、按钮状态、是否阻止第二次操作 |
| 中断与恢复 | 有多步流程、草稿、登录态、长耗时操作 | 刷新、返回、会话过期、离开后回来 | 数据是否保留、从哪一步恢复、是否需重新确认 |
| 权限 / 资格 / 配额 | 有角色、套餐、次数、库存、资格校验 | 无权限、资格失效、次数用尽 | 用户提示、是否可申请/升级/重试 |
| 状态冲突 / 数据已变化 | 有共享对象、库存、价格、多人协作 | 他人已修改、库存变化、价格变化 | 冲突提示、刷新策略、保留用户输入 |
| 部分成功 / 超时 / 重试 | 有第三方调用、异步任务、批量处理 | 部分完成、回调晚到、第三方超时 | 成功/失败拆分、重试入口、用户预期管理 |
| 环境限制 | 有弱网、离线、扫码、上传、设备能力依赖 | 断网、摄像头不可用、文件过大 | 降级方案、是否允许稍后继续、用户提示 |
快速判断
- Journey 有数据加载或列表展示:必须筛查“数据可用性 / 数据形态”
- Journey 有提交、支付、写操作:必须筛查“重复 / 高频操作”
- Journey 有多步输入、草稿、登录态:必须筛查“中断与恢复”
- Journey 有角色、套餐、额度或资格判断:必须筛查“权限 / 资格 / 配额”
- Journey 会修改共享对象或依赖实时状态:必须筛查“状态冲突 / 数据已变化”
- Journey 依赖第三方、异步任务或批量执行:必须筛查“部分成功 / 超时 / 重试”
Defer 规则
P0Journey 不允许整章跳过 edge case- 标记为
后续或待定时,必须在 Journey 的「待定项」中写明风险和补齐条件 - 任何
MVPedge case 必须绑定至少一个Step ID
步骤级矩阵示例
| Edge Case ID | 类别 | Step | 触发条件 | 用户看到什么 | 处理结果/流向 | 数据保留/恢复 | 优先级 | 状态 |
|---|---|---|---|---|---|---|---|---|
| EC-001 | 数据可用性 / 数据形态 | S2 | 搜索结果为空 | 空态文案 + 返回筛选 CTA | 停留 S2,可调整筛选后重试 | 已选筛选条件保留 | MVP | 已确认 |
| EC-002 | 重复 / 高频操作 | S3 | 用户连续点击提交 | 提交按钮 loading 并阻止第二次点击 | 停留 S3;首次成功后进入 END | 已填内容保留;失败可重试 | MVP | 已确认 |
| EC-003 | 中断与恢复 | S1,S2 | 用户离开页面后 30 分钟内返回 | 恢复上次填写状态并提示“已为你恢复草稿” | 回到离开前最近一步 | 草稿保留 30 分钟 | 后续 | 待定 |