Files
yovision/docs/raw/09-Sense原型评审-IX草稿.md
QiuSW e0b0bfafeb
Harness governance / validate (push) Has been cancelled
Harness governance / validate (pull_request) Has been cancelled
docs(design): close Sense second-review gaps
2026-08-04 11:08:41 +08:00

149 lines
9.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Sense 原型评审 → IX 修订稿
> 评审对象:`docs/design/sense/index.html`(T-004)
> 初始输入:Claude 评审草稿,2026-08-04
> 复核:Codex 从产品、全栈架构与 UI/UX 角度对照《02》《03》《08-三系统职责划分》、US/IX 和当前原型核验
> 状态:项目负责人已确认按本修订稿继续;最终行为已同步到 `docs/08-interaction-checklist.md`
> 后续:第二轮缺口复核与最终 IA 见 `11-Sense原型-第二轮缺口.md`、`12-Sense原型-待办清单.md`;若与本文原型范围冲突,以第二轮修订为准
---
## 1. 评审结论
初始评审指出的五类缺口方向成立:设备模态、停用收敛、隐私准入、检测区域几何编辑、草稿与跨系统上下文都需要进入正式交互清单。但原稿不能直接合入,原因有三类:
1. 部分证据与当前代码不一致:Sense 页内导航不会清空几何点,Sense→Bell 已携带 `camera + zone`,单媒体分片 32 路已有架构来源。
2. 部分方案把后端字段直接等同产品能力:非视频设备仍需要连接与健康,隐私准入不能只看显示名称或单一模态。
3. 部分行为不符合审计和草稿体验:幂等不等于不记审计,避免丢草稿应优先自动保存,而不是每次导航都弹确认。
原产品边界保持不变:
- Sense 管设备接入、健康、媒体与设备空间配置。
- 视频设备的检测区域继续位于设备详情,不恢复一级“区域规则”。
- Bell 管场景、继承、时段、持续时间、试运行、发布和升级链。
- 两个系统通过稳定深链和可恢复草稿保持连续体验。
---
## 2. 最终新增 IX
| ID | 场景 | 最终约定 | 关联 US | 阶段 |
| --- | --- | --- | --- | --- |
| IX-014 | 设备模态与能力 | 一级入口为“设备”;列表可按 `modality` 筛选,添加时先选模态,详情按 `capabilities` 渐进展示;视频设备显示画面/媒体/检测区域,非视频设备保留连接与健康并显示对应遥测,不用禁用的视频页签占位 | US-008 | M2/M6 |
| IX-015 | 停用与收敛 | 明确区分暂停推理、停用设备接入和仅踢当前会话;操作前展示对观看、推理、录制与证据回捞的影响并二次确认;期望态立即改变、实际态经对账收敛,部分失败可逐项重试;重复请求不产生重复副作用,但每次请求均留审计结果 | US-001、US-002 | M2 |
| IX-016 | 隐私区域设备准入 | `capture_policy = non_imaging_only` 的 Area 不允许新增/启用具有成像能力的设备;前端就地禁用并解释,后端返回稳定错误码;策略读取失败时拒绝新变更并告警,已有设备遇到区域策略变化时进入显式处置流程,不静默留存或停用 | US-008 | M2/M6 |
| IX-017 | 检测区域几何编辑 | 多边形和方向警戒线支持绘制、显式完成、撤销、清空、顶点编辑;警戒线在草稿/已保存态均显示方向箭头并可反转;鼠标与键盘坐标操作等效;画面参数变化后标记待校准且不自动改坐标;区域版本与规则版本独立 | US-005 | M3 |
| IX-018 | 草稿与跨系统上下文 | 几何草稿自动保存并可恢复;只有持久化失败或切换空间类型等会破坏草稿的动作才拦截确认;Sense↔Bell 双向携带并消费 `camera + zone + return_to` 上下文;返回后恢复草稿,版本已被他人更新时提示冲突且不覆盖 | US-005 | M3 |
`IX-003` 已覆盖设备列表分页/筛选/批量选择和 128 路按需加载,因此分页属于原型漏画,不新增 IX。
---
## 3. 关键设计修订
### 3.1 设备使用 `modality + capabilities`
`modality` 用于稳定分类:video / radar / contact / button / wearable / other。`capabilities` 决定字段、页签和动作,例如:
- `captures_image`
- `media_stream`
- `telemetry`
- `battery`
- `spatial_config`
- `directional_line`
M2 的一级导航与台账统一使用“设备”,默认筛选视频设备;M1~M5 只完整实现 video 适配器。M6 增加非视频协议适配器,不重新设计根实体与页面层级。
非视频设备不展示画面、Profile 和媒体分片,但仍展示“连接与健康”,并根据能力显示最后上报、信号质量、电量、遥测或传感器校准。
### 3.2 隐私策略属于 Area
隐私是物理位置的准入策略,不是设备已经创建后的标签。统一模型为:
```text
Area.capture_policy = video_allowed | non_imaging_only
Device.modality
Device.capabilities.captures_image
```
Sense 在新增/启用写路径执行校验。后端返回稳定错误码,前端负责本地化说明。策略不可读取时对新成像变更 fail closed 并告警;已有链路保持当前状态并进入待处置/未收敛列表,不能因一次依赖失败被静默切断。
### 3.3 停用动作不能混为一个开关
| 用户动作 | 期望效果 |
| --- | --- |
| 暂停推理 | 卸载推理 source;接入和授权观看按策略保留 |
| 停用设备接入 | 踢当前发布会话、拒绝后续发布、卸载推理;期望态先变,实际态由对账收敛 |
| 仅踢当前会话 | 运维诊断动作;客户端可能重连,不改变持久期望态 |
每种动作展示独立影响范围。重复请求不得生成重复资源变更或状态副作用,但所有操作尝试都应进入审计并标明“已处于目标状态”或实际结果。
### 3.4 几何编辑提供显式完成与等效操作
- 多边形至少 3 点,方向警戒线恰好 2 点。
- 双击可作为快捷方式,但必须有可见的“完成绘制”按钮;双击事件不得额外追加顶点。
- 警戒线草稿和保存态都渲染方向箭头,并提供“反转方向”。
- 顶点列表支持添加、编辑、删除、撤销,键盘与鼠标结果等效。
- 画面分辨率或旋转变化后标记待校准,不自动修改坐标,也不自动发布 Bell 规则。
### 3.5 草稿优先自动保存
页内导航不应反复打断用户。几何草稿在本地/服务端自动保存并显示状态;只有自动保存失败、切换不兼容空间类型或明确放弃草稿时才确认。关闭标签页使用平台允许的离开保护作为兜底,不能把它当主保存机制。
深链统一携带并消费:
```text
camera=<stable-device-id>
zone=<zone-id>
return_to=<trusted-route-token>
```
`return_to` 只能使用受信路由 token,不能接受任意外部 URL。保存时使用区域版本做乐观并发校验;发现他人已保存新版本时提示重新加载或另存草稿,不覆盖。
---
## 4. 对初始评审事实的纠正
| 初始判断 | 核验结果 | 最终处理 |
| --- | --- | --- |
| 128 路列表缺分页需要新 IX | `IX-003` 已覆盖 | 只补原型分页 |
| 单媒体分片 32 路无出处 | 《03》§4.2 已定义 `media_shard_max_streams: 32`,128 路建议 4 个 32 路分片 | 保留 32;原型标明当前启用数与可扩展上限 |
| 侧栏/面包屑会清空草稿 | 当前 `switchView()` 不清空 `points` | 不作为现状缺陷;仍要求跨刷新/跨系统恢复 |
| Sense→Bell 缺少 camera/zone | Sense 已发送两者,但 Bell 未消费 `zone`;Bell→Sense 缺 `zone` | 修复双方生成与消费 |
| 非视频设备不展示健康页签 | 非视频设备仍有连接、上报、信号、电量与故障状态 | 使用通用“连接与健康”,能力驱动内容 |
| 幂等操作不生成重复审计 | 不符合审计目标 | 幂等只约束副作用,每次请求保留审计结果 |
---
## 5. 无障碍与安全收紧
- 正文、按钮文字和关键状态对比度不低于 4.5:1;大字号不低于 3:1;非文本控件、状态边界和焦点指示器不低于 3:1。
- 当前导航显式设置 `aria-current="page"`,不能用空值属性表示当前页。
- 响应式隐藏可见文字时,按钮仍保留 `aria-label` 等稳定可访问名。
- Tab 必须完整实现 `tablist` / `tab` / `tabpanel`、关联属性、单一 Tab 停靠点与方向键;否则不声明 tab 角色。
- 移动端主要操作目标不小于 44×44px,输入正文不小于 16px;几何绘制提供不依赖精确点击的表单等效路径。
---
## 6. 原型落地范围
Sense 原型重新生成并覆盖:
1. 一级“设备”入口、模态筛选、分页和视频/雷达示例。
2. 能力驱动详情:视频显示画面与检测区域,雷达显示遥测,二者都有连接与健康。
3. 添加设备先选模态,隐私 Area 对成像设备就地拒绝。
4. 暂停推理、停用接入、踢当前会话的独立影响确认与期望/实际收敛反馈。
5. 显式完成绘制、方向箭头/反转、顶点编辑、自动草稿与冲突状态。
6. Sense/Bell 双向 `camera + zone + return_to` 深链。
7. 对比度、可访问名、完整 Tab 模式、44px 移动触控目标。
Bell 原型只调整深链消费和返回上下文,不改变“规则业务归 Bell、空间几何归 Sense”的产品边界。
---
## 7. 后续兼容债务(不在本原型任务改契约)
事件 v0.1 的 schema 描述与契约 README 仍使用 `privacy_flag` 表示区域是否允许视频模态,而本次领域模型已收敛为 Area 的 `capture_policy`。两者当前语义可一一映射:`privacy_flag = true` 等价于 `capture_policy = non_imaging_only`,但不能长期保留两套真相源。
M2 开始 schema/API 实现前应单独建立契约任务,选择“保持 v0.1 线格式并在投影层兼容”或“按版本治理规则新增字段/版本”,同步《06》与 `docs/raw/contracts/` 后再写代码。T-004 只更新产品与架构决策,不修改已经声明为既有契约的 event v0.1。