非授权人员进入
危险区域 × 全天 × 持续 3 秒
- 覆盖范围
- 4 个点位
- 检测区域
- 北围墙危险区域 v7
- 继承来源
- 站点模板
- 今日命中
- 8
diff --git a/docs/02-requirements.md b/docs/02-requirements.md
index 8f035ed..c08246c 100644
--- a/docs/02-requirements.md
+++ b/docs/02-requirements.md
@@ -28,10 +28,12 @@
### 3.1 接入与设备
- 支持标准 ONVIF/RTSP,不绑定摄像头品牌。
+- 台账与管理端以“设备”为根实体,使用 `modality` 表达 video / radar / contact / button / wearable / other,并使用 `capabilities` 决定是否展示画面、媒体、空间配置、遥测等能力;M1~M5 只完整实现 video 适配器,M6 再接入非视频设备,但不得因此把数据模型和一级信息架构写死为摄像头。
- 支持 NAT 后的边缘主动推流;设备身份使用稳定序列号而非 IP。
- 批量开通不依赖逐路手工操作,支持待激活中间态。
- 探活、离线告警、开通校时、断线自动恢复。
- 容量写入时校验站点配额;配额服务不可用时拒绝新增/启用,但不影响已有流。
+- 隐私准入策略属于 Area,使用 `capture_policy = video_allowed | non_imaging_only`;Sense 在设备新增/启用时依据设备成像能力校验。策略读取失败时拒绝新的成像设备变更并告警,已有链路不静默停用或伪装为已收敛。
### 3.2 分析与规则
diff --git a/docs/04-architecture.md b/docs/04-architecture.md
index 7bb57ef..cb5b9aa 100644
--- a/docs/04-architecture.md
+++ b/docs/04-architecture.md
@@ -16,7 +16,7 @@ YoVision 使用“通用底座 + 场景包”,按变化频率分为:
| 系统 | 语言/状态 | 职责 | 不负责 |
| --- | --- | --- | --- |
-| Sense | Go,有状态 | 设备台账、ONVIF、MediaMTX 控制、对账、探活、隧道、设备型触发、流分片 | AI 判定、事件业务、预警 |
+| Sense | Go,有状态 | 设备台账(`modality + capabilities`)、ONVIF、MediaMTX 控制、对账、探活、隧道、设备型触发、流分片、隐私区域设备准入 | AI 判定、事件业务、预警 |
| Brain | Python/CUDA,业务无状态 | 解码/推理、检测/姿态/跟踪/ReID、时间窗判定、事件 mapper、像素级触发 | 设备真相源、告警升级、租户权限 |
| Bell | Go + Web,有状态 | 事件校验/存储、规则、预警状态机、投递、反馈、租户/RBAC、审计、配额真相源和管理端 | 媒体转发、模型执行 |
@@ -55,7 +55,7 @@ Sense ── 视频流/触发信号 ──> Brain
首个 M3 数据流部署在 S2 民办寄宿学校的 16 路高风险点位,只运行越线、危险区域和聚集等匿名规则,不加载人脸底库。
-## 5. 九条不可越界的决定
+## 5. 十条不可越界的决定
1. MediaMTX 独立运行,Sense 管配置与生命周期。
2. 设备型触发源归 Sense;需要解码的像素级触发归 Brain。
@@ -66,6 +66,7 @@ Sense ── 视频流/触发信号 ──> Brain
7. Bell 拥有 `site.max_video_channels`,Sense 在设备写路径执行;不跨 schema 直接写。
8. 事件片段写入客户侧 MinIO/S3,常态录像留在客户 NVR;元数据/审计、人脸和训练样本使用独立生命周期。
9. 投递状态机只依赖 Bell provider 接口,不直接依赖某家短信或语音 SDK;生产前至少两条独立路径并能故障切换。
+10. 设备领域模型使用 `modality + capabilities`,页面不以摄像头作为唯一根实体;隐私策略属于 Area,Sense 在新增/启用写路径按成像能力执行,策略不可用时只阻断新变更,不静默切断已有链路。
## 6. 容量架构
@@ -88,7 +89,7 @@ Sense ── 视频流/触发信号 ──> Brain
## 8. 数据与契约
-- 核心实体:Tenant → Site → Area/Device → StreamBinding/Zone;Rule → Event → Alert → DeliveryAttempt/Ack。
+- 核心实体:Tenant → Site → Area(含 `capture_policy`)/Device(含 `modality + capabilities`)→ StreamBinding/Zone;Rule → Event → Alert → DeliveryAttempt/Ack。
- Event 与 Alert 不合并:一个事件可触发多次预警与投递,一次预警也可聚合多个事件。
- 事件 v0.1 以 `raw/contracts/event-v0.1.schema.json` 与 `raw/contracts/README.md` 为准;未知顶层字段拒绝,只允许通过 `ext` 扩展。
- v0.1 还需代码校验时间自洽、`confidence` 当前为 null、证据文件名隐私、唯一 primary sensor 等跨字段约束。
@@ -108,10 +109,10 @@ Bell/{web,packs,contracts}
## 10. 开发顺序
- M0 不写生产代码。
-- M1 只动 Sense,5 路接入骨架与 MediaMTX。
+- M1 只动 Sense,5 路视频接入骨架与 MediaMTX;设备模型从此时起保持模态/能力可扩展,但不提前实现非视频适配器。
- M2 仍以 Sense 为主,完成 16 路开通/停用、对账、多租户投影与隧道。
- M3 Brain 与 Bell 同时起步,事件契约首次被真实使用。
-- M4/M5 再做 64/128 路分片、完整管理端和多个场景包。
+- M4/M5 再做 64/128 路分片、完整管理端和多个场景包;M6 接入雷达、门磁、按钮和可穿戴等非视频适配器。
M3 先执行不少于 2 周的 dry-run,冻结现场标注集,按规则报告召回率和每路每天误报数;现场基线评审后才把数值阈值写入站点验收附件。算法效果指标与系统 SLA 分开验收。
diff --git a/docs/07-user-stories.md b/docs/07-user-stories.md
index 7454206..02945d2 100644
--- a/docs/07-user-stories.md
+++ b/docs/07-user-stories.md
@@ -2,10 +2,10 @@
> 用户故事用于连接需求、页面交互和任务验收。当前 M0/M1 以设备与实施流程为主,最终用户界面在 M3/M4 才实现。
-## US-001 批量开通摄像头
+## US-001 批量开通视频设备
- 角色:实施工程师。
-- 目标:一次导入并验证一个默认 16 路站点,不逐路手工配置。
+- 目标:一次导入并验证一个默认 16 路视频站点,不逐路手工配置;操作入口位于通用设备台账的视频模态筛选下。
- 价值:降低交付时间并为 128 路扩展保留操作效率。
- 验收:支持待激活、逐设备结果、失败可重试、超配额明确拒绝;128 路规模下仍使用分页/批量流程。
- 关联:RQ-C-01~RQ-C-08,IX-001~IX-003。
@@ -58,6 +58,14 @@
- 验收:3–5 款设备的型号、固件、认证方式、Profiles/StreamUri/校时、主子码流、掉线恢复都有证据;不记录密码和真实客户信息。
- 关联:M0,T-001;无产品 UI,使用版本化测试文档。
+## US-008 管理异构设备与隐私准入
+
+- 角色:实施工程师/站点管理员。
+- 目标:在统一设备台账中按模态和能力添加、筛选与查看视频、雷达、门磁、按钮、可穿戴等设备;隐私区域只允许非成像设备。
+- 价值:M2 固化不会因 M6 异构设备接入而推倒重来的信息架构,同时把隐私要求落实为系统准入约束。
+- 验收:一级入口使用“设备”;添加时先选模态,详情按能力显示页面;`non_imaging_only` Area 不允许新增或启用成像设备,策略读取失败时拒绝新变更并给出恢复路径;M2 完成信息架构与视频准入,M6 完成非视频适配器。
+- 关联:RQ-S1-05、NFR-CMP-05,IX-014、IX-016。
+
## 追溯规则
新增 P0 UI 任务必须引用至少一个 US 和一个 IX;若没有 UI,任务文件明确写“不适用”。需求变化先更新用户故事和交互清单,再改页面。
diff --git a/docs/08-interaction-checklist.md b/docs/08-interaction-checklist.md
index b02ced9..658d552 100644
--- a/docs/08-interaction-checklist.md
+++ b/docs/08-interaction-checklist.md
@@ -17,6 +17,11 @@
| IX-011 | 规则试运行 | 明确“未正式生效”,展示命中样本与影响范围,支持取消/回滚 | US-005 | M4 |
| IX-012 | 升级链/静默 | 联系人顺序、超时、双通道;静默最长 4h、显示自动恢复时间、无永久选项 | US-005 | M3/M4 |
| IX-013 | 权限与隐私 | 越权统一处理;无授权租户不展示人脸入口;不泄露流 URL/凭据 | US-006 | M3/M4 |
+| 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 |
## 全局状态
@@ -44,7 +49,10 @@
## 无障碍与安全
- 键盘可完成主要 Web 流程,焦点清晰,表单错误关联到字段。
-- 文本和关键状态满足可读对比度;严重度同时用文字/图标表达。
+- 正文、按钮文字和关键状态对比度不低于 4.5:1;大字号(不低于 24px,或不低于 18.66px 且粗体)不低于 3:1;非文本控件、状态边界与焦点指示器不低于 3:1。严重度同时用文字/图标表达。
+- 当前导航项显式使用 `aria-current="page"`;响应式隐藏可见文字时,图标按钮仍保留稳定的可访问名。
+- 使用 tab 模式时完整实现 `tablist` / `tab` / `tabpanel`、`aria-controls` / `aria-labelledby`、单一 Tab 停靠点和方向键导航;不能完整实现时不声明 tab 角色。
+- 移动端主要操作目标不小于 44×44px,输入控件正文不小于 16px;绘制画布必须提供无需精确点击的键盘/表单等效路径。
- 删除、停用、踢流、批量覆盖和规则正式发布需要明确影响范围与二次确认。
- UI 不展示摄像头密码、完整连接串、token 或可复用的内部流地址。
diff --git a/docs/design/bell/index.html b/docs/design/bell/index.html
index 377d517..cff18b3 100644
--- a/docs/design/bell/index.html
+++ b/docs/design/bell/index.html
@@ -369,12 +369,12 @@
已带入摄像头上下文:北围墙 01 · 检测区域 ZONE-007,可继续完成规则草稿。 已带入摄像头与区域上下文:北围墙 01 · ZONE-007,可继续完成规则草稿。 Bell 管理场景、范围、时段、持续时间、试运行与发布;检测区域来自对应摄像头的版本化空间配置。 危险区域 × 全天 × 持续 3 秒 危险区域 × 全天 × 持续 3 秒 人数 ≥ 6 × 持续 20 秒 × 夜间 警戒线 A → B × 上学时段 警戒线 A → B × 上学时段规则策略
非授权人员进入
非授权人员进入
区域内聚集
方向越线
方向越线