@@ -2,8 +2,8 @@
|
||||
generated: true (请先修改 Gitea Wiki,禁止直接编辑本文件)
|
||||
wiki_page: Architecture-and-Code-Map
|
||||
wiki_url: https://git.ilapage.cn/ila/yovision/wiki/Architecture-and-Code-Map.-
|
||||
wiki_revision: 41c2193b2f1edb37abe1e8994d65d02207549039
|
||||
synchronized_at: 2026-08-31T03:18:12Z
|
||||
wiki_revision: b25498f58c690f787f0b572788617ef6b0d8ea7d
|
||||
synchronized_at: 2026-08-31T07:23:02Z
|
||||
<!-- gitea-wiki-mirror:end -->
|
||||
|
||||
# 架构与代码地图
|
||||
@@ -298,51 +298,56 @@ Brain 解码层位于 `Brain/src/yovision_brain/decode/`,只依赖 #11 的内
|
||||
<!-- brain-local-events-v1:end -->
|
||||
|
||||
<!-- sense-brain-contracts-v1:start -->
|
||||
## Sense↔Brain v1 契约边界
|
||||
## Sense↔Brain v1 connector 结构
|
||||
|
||||
- Sense→Brain 配置:`contracts/source-config/v1/source-config.schema.json`;版本 `yovision.source-config/v1`。
|
||||
- Brain→Sense 状态:`contracts/runtime-status/v1/runtime-status.schema.json`;版本 `yovision.runtime-status/v1`。
|
||||
- 共同测试:`contracts/tests/source-config-v1/`、`contracts/tests/runtime-status-v1/`。
|
||||
- 生产者/消费者 mapper 责任分别记录在 `mapper-fields.md` 与 `mapping.md`;产品 adapter 后续由 #152 实现。
|
||||
共享协议仍位于 `contracts/source-config/v1/**` 与 `contracts/runtime-status/v1/**`。#152 的产品实现位于:
|
||||
|
||||
数据流固定为:
|
||||
- Sense:`Sense/server/app/sense/integration/brain_control/**`;运行投影迁移为 `2026083112000_brain_runtime.go`。
|
||||
- Brain:`Brain/src/yovision_brain/integration/sense_control/**`。
|
||||
- 双端集成测试:`Sense/tests/integration/brain_control/**`、`Brain/tests/integration/sense_control/**`。
|
||||
|
||||
数据流为:
|
||||
|
||||
```text
|
||||
Sense Device/Profile/Area 内部事实
|
||||
→ source-config/v1 mapper
|
||||
→ Brain adapter(后续 #152)
|
||||
→ Brain 内部配置与运行
|
||||
→ runtime-status/v1 mapper
|
||||
→ Sense 只读运维投影(后续 #152)
|
||||
Sense Device/Profile/Area
|
||||
→ source-config/v1 mapper + revision store
|
||||
→ machine identity transport adapter
|
||||
→ Brain strict consumer + last-known-good + persistent replay
|
||||
→ runtime-status/v1 mapper + monotonic sequence
|
||||
→ Sense read-only runtime projection + stale/offline/recovery
|
||||
```
|
||||
|
||||
共享契约统一使用 snake_case 与 `schema_version: yovision.<contract>/v1`。源配置使用 `config_id + integer revision`;运行状态以 `configurations[]` 按 `config_id` 回报实际应用 revision。未知主版本、重复配置 ID、倒序状态、摘要失败或敏感字段必须拒绝,且不得覆盖最后已知有效配置/投影。
|
||||
配置以 `config_id + integer revision` 唯一标识,状态以 Brain instance + sequence 保证时序。未知主版本、摘要失败、过期 revision、错误 Profile/几何或倒序状态拒绝且不覆盖最后有效事实。双端不共享数据库、用户会话、摄像头凭据或内部模型。
|
||||
|
||||
协议不得包含摄像头凭据、RTSP URL、query token、内部绝对路径、数据库模型、用户/JWT/Cookie 或 Bell Alert 语义。当前只冻结契约,没有新增网络端点、机器身份或跨端 connector。
|
||||
#152 提供可注入传输 adapter 和持久恢复边界;根级进程编排及部署级 HTTP hosting 由 #154 绑定,#155 验证真实跨进程故障隔离。
|
||||
<!-- sense-brain-contracts-v1:end -->
|
||||
|
||||
<!-- standard-event-evidence-v1:start -->
|
||||
## 标准事件与证据 v1 契约边界
|
||||
## 标准事件与证据 v1 connector 结构
|
||||
|
||||
- Event Schema:`contracts/events/v1/event.schema.json`,版本 `yovision.event/v1`。
|
||||
- Bell 接入描述:`contracts/events/v1/openapi.json`,返回创建、重复、幂等冲突和不支持版本等明确结果。
|
||||
- Evidence Schema/API:`contracts/evidence/v1/evidence-reference.schema.json`、`openapi.json`,版本 `yovision.evidence-reference/v1`。
|
||||
- 共同测试:`contracts/tests/events-v1/`、`contracts/tests/evidence-v1/`。
|
||||
共享协议仍位于 `contracts/events/v1/**`、`contracts/evidence/v1/**`,机器身份位于 `contracts/machine-identity/v1/**`。#153 的产品实现位于:
|
||||
|
||||
后续 #153 的映射流固定为:
|
||||
- Brain producer:`Brain/src/yovision_brain/integration/event_export/**`,由 CLI `app/__main__.py` 按配置启用。
|
||||
- Sense gateway/relay:`Sense/server/app/sense/integration/bell_connector/**`,由 API 启动链注册 `POST /v1/events`、`GET /v1/evidence/:evidence_id` 和 Bell Outbox Worker。
|
||||
- Bell consumer:`Bell/server/app/bell/integration/event_ingress/**`,由 router registry 注册 `POST /v1/events`。
|
||||
- 正式迁移:Sense/Bell 各自的 `2026083112000_*connector*.go` / `*event_ingress.go`。
|
||||
|
||||
默认数据流为:
|
||||
|
||||
```text
|
||||
Brain internal candidate / Sense local event
|
||||
→ yovision.event/v1 producer mapper
|
||||
→ Sense Outbox relay(默认拓扑,保持原 producer/source ID)
|
||||
→ Bell v1 ingress
|
||||
→ Bell private immutable Event + permanent Receipt
|
||||
Brain internal candidate
|
||||
→ canonical yovision.event/v1
|
||||
→ Sense authenticated ingress
|
||||
→ Sense InboundEvent + EvidenceRecord + Bell Outbox(同事务)
|
||||
→ HTTPS relay(原 payload/producer/source ID 不变)
|
||||
→ Bell authenticated ingress
|
||||
→ permanent Receipt + immutable Event + conflict audit
|
||||
→ Bell private Rule / Alert / ack / close
|
||||
```
|
||||
|
||||
规范载荷使用 RFC 8785 JCS 与 SHA-256 形成稳定摘要。同键同摘要返回原 Event;同键不同摘要返回冲突并审计,不覆盖原事实。Evidence 只提供逻辑引用与状态/完整性元数据,不授予访问权限,不包含本机路径、签名 URL 或凭据;取证授权由后续机器身份和 connector 工单实现。
|
||||
规范载荷使用 RFC 8785 JCS 与 SHA-256。同键同摘要返回 duplicate;同键异摘要稳定冲突并审计。机器令牌 replay 与业务幂等分别持久化,传输重试签发新 jti,但不改变业务 ID。证据解析失败或不可用只更新独立降级状态,不允许上游写 Alert 语义。
|
||||
|
||||
Brain candidate、Sense candidate/Outbox 与 Bell Event/Receipt/Alert 继续是各自内部模型。当前没有新增可运行的跨端 ingress/relay,不能把冻结 Schema 解释为端到端链路已完成。
|
||||
Sense 与 Bell 只使用各自默认数据库;连接器关闭时不注册相应入口/Worker,三端继续独立启动。根级部署、真实 PKI/网络和最终 E2E 属于 #154/#155。
|
||||
<!-- standard-event-evidence-v1:end -->
|
||||
|
||||
<!-- machine-identity-v1:start -->
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
generated: true (请先修改 Gitea Wiki,禁止直接编辑本文件)
|
||||
wiki_page: Business-Rules-and-Glossary
|
||||
wiki_url: https://git.ilapage.cn/ila/yovision/wiki/Business-Rules-and-Glossary.-
|
||||
wiki_revision: 7a91edf3ca35ade3e254937c4a68b53d816a3eea
|
||||
synchronized_at: 2026-08-31T03:18:24Z
|
||||
wiki_revision: c0903448152d7fa88715e902efa99615a6b97083
|
||||
synchronized_at: 2026-08-31T07:23:13Z
|
||||
<!-- gitea-wiki-mirror:end -->
|
||||
|
||||
# 业务规则与术语
|
||||
@@ -274,3 +274,16 @@ synchronized_at: 2026-08-31T03:18:24Z
|
||||
- 轮换先登记新 `kid`,最多并存 24 小时,切换后移除旧 key;禁用 principal 或吊销 `kid` 对每次请求即时生效。
|
||||
- 回退只能关闭 connector 并恢复三端独立运行,不得降级为明文、共享管理员身份、共享 JWT 或跳过签名/TLS 验证。
|
||||
<!-- machine-identity-v1:end -->
|
||||
|
||||
<!-- integration-connectors-v1:start -->
|
||||
## Connector 持久性与故障隔离规则
|
||||
|
||||
- **配置事实与运行投影分离**:Sense 的期望 revision 不等于 Brain 已应用 revision;只以 Brain runtime-status 的实际值更新只读投影。
|
||||
- **最后有效配置**:Brain 对过期、未知版本、摘要错误或不安全配置拒绝应用,并保留 last-known-good;不得用失败输入覆盖当前配置。
|
||||
- **机器重放与业务幂等分离**:每次网络重试必须使用新 jti;事件仍沿用原 `producer_id/source_event_id` 与规范载荷。
|
||||
- **Sense 同事务网关**:Brain 事件只有在 Sense 的 InboundEvent、EvidenceRecord 与 Bell Outbox 同一事务成功后才算被 Sense 接受。
|
||||
- **Bell 永久收据**:同键同摘要只形成一个 Receipt/Event;同键异摘要是终止冲突并追加脱敏审计,不能覆盖或删除原事实。
|
||||
- **证据降级独立**:pending、failed、timeout、expired 不改变 Event 不可变性,也不自动 ack/close Alert。
|
||||
- **停用规则**:关闭 connector 只停止新接入或投递;不得清空未投递 Outbox、持久 replay、Receipt、Event、证据元数据或审计。
|
||||
- **独立运行**:Sense、Brain、Bell 不因对端未安装、离线或 connector 关闭而停止各自核心能力;不得以共享数据库/JWT/Cookie 规避故障隔离。
|
||||
<!-- integration-connectors-v1:end -->
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
generated: true (请先修改 Gitea Wiki,禁止直接编辑本文件)
|
||||
wiki_page: Local-Development-and-Verification
|
||||
wiki_url: https://git.ilapage.cn/ila/yovision/wiki/Local-Development-and-Verification.-
|
||||
wiki_revision: 771fdd92eb03e9dff7d3ae20b7cb89f1ca288959
|
||||
synchronized_at: 2026-08-31T03:18:34Z
|
||||
wiki_revision: 59f6eb5816b5d3f78c85ef902053c5fc45b8e6e9
|
||||
synchronized_at: 2026-08-31T07:33:54Z
|
||||
<!-- gitea-wiki-mirror:end -->
|
||||
|
||||
# 本地开发与验证
|
||||
@@ -652,7 +652,7 @@ python dev_scripts/harness.py check --strict
|
||||
git diff --check
|
||||
```
|
||||
|
||||
这些命令只验证冻结契约,不验证 #152 产品 adapter、真实网络传输、机器身份、现场断网恢复或端到端链路。
|
||||
这些命令本身只验证冻结契约;#152 产品 adapter、持久 replay、停用/超时/恢复由本页后续 connector 测试覆盖,真实部署网络与端到端链路仍由 #154/#155 验证。
|
||||
<!-- sense-brain-contracts-v1:end -->
|
||||
|
||||
<!-- standard-event-evidence-v1:start -->
|
||||
@@ -677,7 +677,7 @@ python dev_scripts/harness.py check --strict
|
||||
git diff --check
|
||||
```
|
||||
|
||||
这些测试只验证冻结契约,不验证 #153 产品 mapper/relay/ingress、#151 机器身份、实际证据存储/授权、网络断线补投或跨项目 E2E。
|
||||
这些命令本身只验证冻结契约;#153 产品 mapper/relay/ingress、机器身份、持久 replay、断线补投与证据降级由本页后续 connector 测试覆盖,真实证据存储、生产网络和跨项目 E2E 仍由 #154/#155 验证。
|
||||
<!-- standard-event-evidence-v1:end -->
|
||||
|
||||
<!-- machine-identity-v1:start -->
|
||||
@@ -704,5 +704,50 @@ cd ../..
|
||||
Brain\.venv\Scripts\python.exe contracts\tests\machine-identity-v1\test_contract.py
|
||||
```
|
||||
|
||||
这些测试只证明 #151 身份和传输基础。真实客户 PKI/网络、现场时钟漂移、业务 endpoint、断网补投以及持久 replay 重启恢复由 #152/#153/#155 验证;不得用进程内 replay store替代生产结论。
|
||||
这些测试只证明 #151 身份和传输基础。#152/#153 已覆盖业务 adapter/endpoint、断网补投和持久 replay 重启恢复;真实客户 PKI/网络、现场时钟漂移与最终故障隔离仍由 #154/#155 验证,不得用进程内 replay store替代生产结论。
|
||||
<!-- machine-identity-v1:end -->
|
||||
|
||||
<!-- integration-connectors-v1:start -->
|
||||
## #152/#153 connector 验证
|
||||
|
||||
使用冻结 CPython 3.11.15 与 Go 1.26.5。从仓库根目录按受影响范围执行:
|
||||
|
||||
```powershell
|
||||
$env:PYTHONPATH = (Resolve-Path Brain/src)
|
||||
Brain\.venv\Scripts\python.exe -m pytest Brain/tests/integration/sense_control Brain/tests/integration/event_export Brain/tests/app/test_event_export_connector.py -q
|
||||
|
||||
cd Sense/server
|
||||
go test ./...
|
||||
go vet ./...
|
||||
go test -race ./app/sense/integration/brain_control ./app/sense/integration/bell_connector ./app/sense/local_event ./cmd/api ./cmd/migrate/migration/version
|
||||
|
||||
cd ../../Sense/tests/integration/brain_control
|
||||
go test -race ./...
|
||||
cd ../bell_connector
|
||||
go test -race ./...
|
||||
|
||||
cd ../../../../Bell/server
|
||||
go test ./...
|
||||
go vet ./...
|
||||
go test -race ./app/bell/integration/event_ingress ./cmd/api ./cmd/migrate/migration/version
|
||||
cd tests/integration/event_ingress
|
||||
go test -race ./...
|
||||
```
|
||||
|
||||
冻结契约与仓库检查:
|
||||
|
||||
```powershell
|
||||
pwsh -NoProfile -File contracts/tests/source-config-v1/run.ps1
|
||||
python contracts/tests/runtime-status-v1/test_contract.py
|
||||
python contracts/tests/events-v1/test_contract.py
|
||||
python contracts/tests/evidence-v1/test_contract.py
|
||||
pwsh -NoProfile -File contracts/tests/machine-identity-v1/run.ps1
|
||||
python -m unittest discover -s tests -v
|
||||
python dev_scripts/harness.py check --strict
|
||||
git diff --check
|
||||
```
|
||||
|
||||
#152 覆盖 revision 幂等、last-known-good、单调状态、陈旧/离线/恢复、持久 replay、停用、超时和退避。#153 覆盖 Brain mapper、Sense 同事务 Outbox、Bell 永久 Receipt/Event、重复/冲突、证据降级、持久 replay、重启、断线恢复和多数据库默认库选择。
|
||||
|
||||
工单验收未使用客户 PKI、生产 PostgreSQL、真实三端网络或生产流量;这些结果只能由 #154 部署和 #155 E2E 补充。Sense 本地候选原子 Outbox 当前没有生产创建 caller,也不得据此声明本地产生链已完整接通。
|
||||
<!-- integration-connectors-v1:end -->
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
generated: true (请先修改 Gitea Wiki,禁止直接编辑本文件)
|
||||
wiki_page: Troubleshooting
|
||||
wiki_url: https://git.ilapage.cn/ila/yovision/wiki/Troubleshooting
|
||||
wiki_revision: 75bf70f375f58356e968b45139b54fcae391d1e8
|
||||
synchronized_at: 2026-08-31T03:18:53Z
|
||||
wiki_revision: fdd44bfe589d65cbce6ec085878abae2702d59e7
|
||||
synchronized_at: 2026-08-31T07:23:47Z
|
||||
<!-- gitea-wiki-mirror:end -->
|
||||
|
||||
# 故障排查
|
||||
@@ -176,3 +176,22 @@ synchronized_at: 2026-08-31T03:18:53Z
|
||||
|
||||
排错日志只记录稳定错误码、已认证 principal/kid 和 correlation ID;不得记录令牌、签名、密钥、完整 Authorization header 或秘密路径。无法安全恢复时关闭 connector,三端保持独立运行。
|
||||
<!-- machine-identity-v1:end -->
|
||||
|
||||
<!-- integration-connectors-v1:start -->
|
||||
## #152/#153 connector 排错
|
||||
|
||||
| 现象/错误 | 检查 | 安全处理 |
|
||||
|---|---|---|
|
||||
| connector 启用后提示迁移缺失 | 核对 Sense/Bell `2026083112000_*` 迁移记录和默认数据库 | 停止 connector,先备份并执行正式迁移;不依赖 AutoMigrate |
|
||||
| 配置被 Brain 拒绝 | 核对 schema 主版本、JCS/SHA-256、config_id/revision、Profile/几何和 recalibration 状态 | 修复新 revision;保留 last-known-good,不回写旧 revision |
|
||||
| Sense 显示 Brain 陈旧/离线或 revision mismatch | 核对 Brain sequence、observed_at、实际 applied_revision 和传输错误码 | 修复时钟/传输/配置;不手工改只读投影 |
|
||||
| Sense Outbox 持续积压 | 核对 Bell ingress 开关、HTTPS、机器身份、available_at、lease、attempt 与脱敏错误 | 恢复 Bell 后等待幂等补投;不清空消息或改业务 ID |
|
||||
| Bell 返回 duplicate | 同一 producer/source ID 与相同规范摘要已接收 | 视为成功;不得创建新 source_event_id |
|
||||
| Bell 返回 idempotency conflict | 同一 producer/source ID 对应不同摘要 | 终止重试并调查 producer;保留原 Receipt/Event 与冲突审计 |
|
||||
| evidence unavailable/timeout/expired | 核对 Sense evidence endpoint、`evidence:read` 权限、owner_id、HTTPS 和过期时间 | 保持降级状态;不把失败伪装 success,不改 Alert 生命周期 |
|
||||
| 启动出现重复路由或错误数据库 | 检查 Sense 是否使用默认 DB、是否重复启动实例 | 每实例只注册一次;不让 connector 随机选择 secondary DB |
|
||||
| Request-ID 或机器令牌拒绝 | 检查 16–128 字符 Request-ID、方法/路径/正文绑定、audience/scope/kid 和时钟 | 新签发 token/jti;保持原业务幂等键,不记录 Authorization |
|
||||
| 对端离线导致本端无法启动 | connector 被错误配置成强依赖 | 关闭对应开关并恢复独立运行;保留持久事实后另行排查 |
|
||||
|
||||
日志只记录稳定错误码、request/correlation ID、已认证 principal/kid 和脱敏业务引用;不得记录私钥、令牌、完整 Authorization、摄像头凭据、内部证据路径或事件完整敏感载荷。
|
||||
<!-- integration-connectors-v1:end -->
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
generated: true (请先修改 Gitea Wiki,禁止直接编辑本文件)
|
||||
wiki_page: Product-Requirements
|
||||
wiki_url: https://git.ilapage.cn/ila/yovision/wiki/Product-Requirements.-
|
||||
wiki_revision: c9970b0ee8b677b6be13f31af67b3206a3faf956
|
||||
synchronized_at: 2026-08-31T02:00:00Z
|
||||
wiki_revision: 2b110cd34439aca8aef4bc509ba8b50655b18c0a
|
||||
synchronized_at: 2026-08-31T07:24:22Z
|
||||
<!-- gitea-wiki-mirror:end -->
|
||||
|
||||
# 产品需求
|
||||
@@ -274,21 +274,23 @@ BRN-002 的首个解码阶段已通过工单 #13 验收。Brain 通过可替换
|
||||
<!-- brain-local-events-delivery:end -->
|
||||
|
||||
<!-- sense-brain-contracts-v1:start -->
|
||||
## Sense↔Brain 首批冻结契约
|
||||
## Sense↔Brain 配置与状态 connector
|
||||
|
||||
工单 #148、#149 已于 2026-08-31 通过用户验收并合入 `dev`。Sense→Brain 源/规则配置的唯一共享事实源为 `contracts/source-config/v1/`,版本标识为 `yovision.source-config/v1`;Brain→Sense 运行状态的唯一共享事实源为 `contracts/runtime-status/v1/`,版本标识为 `yovision.runtime-status/v1`。
|
||||
工单 #148、#149 冻结的唯一共享事实源仍为 `contracts/source-config/v1/`(`yovision.source-config/v1`)和 `contracts/runtime-status/v1/`(`yovision.runtime-status/v1`)。工单 #152 已于 2026-08-31 通过用户验收并合入 `dev`。
|
||||
|
||||
源配置按 `config_id + integer revision` 形成不可复用的配置流,携带逻辑站点/设备/Profile、无凭据媒体引用、归一化区域/方向线、规则版本与完整性摘要。运行状态按同一 `config_id` 在 `configurations[]` 中报告实际应用 revision,并包含 Brain 实例、运行/模型版本、健康、输入和稳定错误码。
|
||||
Sense 现在可从 Device/Profile/Area 内部事实生成无凭据完整快照并持久分配 revision;Brain 严格校验版本、JCS/SHA-256、Profile/几何/状态,幂等应用并保留 last-known-good。Brain 以持久单调 sequence 发布实际应用 revision、运行/模型、健康和输入状态;Sense 保存只读投影并区分在线、陈旧、离线、恢复和 revision mismatch。双端持久 replay store 在各自数据库内防止机器令牌重放,重启不清空安全状态。
|
||||
|
||||
这两项只冻结协议和测试,不表示 #152 connector 已实现。Sense 与 Brain 仍可独立运行;Brain 不读取 Sense 数据库,Sense 不读取 Brain 内部状态。既有 `brain.internal.*`、Sense GORM 模型和运维投影继续是项目内部实现,不得直接作为共享协议。
|
||||
connector 可停用,断线或对端未安装不阻断 Sense/Brain 核心能力。#152 交付产品 adapter、持久状态和恢复原语;部署级 HTTP 托管、进程编排、真实双机 TLS 与最终 E2E 仍属于 #154/#155。
|
||||
<!-- sense-brain-contracts-v1:end -->
|
||||
|
||||
<!-- standard-event-evidence-v1:start -->
|
||||
## 标准事件与证据引用冻结契约
|
||||
## 标准事件、证据与可靠 connector
|
||||
|
||||
工单 #150 已于 2026-08-31 通过用户验收并合入 `dev`。Sense/Brain→Bell 标准匿名安全事件的唯一共享事实源为 `contracts/events/v1/`,版本标识 `yovision.event/v1`;证据逻辑引用的唯一共享事实源为 `contracts/evidence/v1/`,版本标识 `yovision.evidence-reference/v1`。
|
||||
工单 #150 冻结的唯一共享事实源仍为 `contracts/events/v1/`(`yovision.event/v1`)和 `contracts/evidence/v1/`(`yovision.evidence-reference/v1`)。工单 #153 已于 2026-08-31 通过用户验收并合入 `dev`。
|
||||
|
||||
事件以原始 `(producer_id, source_event_id)` 永久幂等,Sense relay 不改变原始身份或业务载荷。事件只携带逻辑站点/设备/Profile、事件类型、发生时间、规则/模型版本、匿名观测、区域和证据逻辑引用,不携带用户会话、摄像头凭据、内部路径、人脸特征或 Alert/ack/close 状态。
|
||||
Brain 将内部匿名候选映射为标准事件;默认拓扑由 Sense 以机器身份接收并在同一事务中写入 InboundEvent、证据元数据和 Bell Outbox,再由后台 Worker 可靠投递到 Bell。Bell 以持久机器令牌 replay、永久 `(producer_id, source_event_id)` Receipt、JCS/SHA-256 摘要和冲突审计写入不可变 Event;Alert/ack/close 仍只由 Bell 私有规则与处置流程产生。
|
||||
|
||||
证据状态为 `pending/processing/success/failed`;`success` 必须包含内容类型和 SHA-256 完整性元数据,失败或过期只降级证据,不改写不可变 Event 或 Bell Alert 生命周期。此工单只冻结契约和测试,#153 可靠 connector、机器身份、证据存储与实际授权取证尚未实现。
|
||||
证据继续使用逻辑引用,状态为 `pending/processing/success/failed`;失败、超时或过期只形成明确降级,不暴露内部路径、长期签名 URL 或凭据,也不改写 Event/Alert 生命周期。三端 connector 均可停用并保持独立运行;停用或故障时保留 Outbox、Receipt、Event、replay 与审计事实。
|
||||
|
||||
Sense 的 `local_event.CreateWithOutbox` 是本地候选与标准事件 Outbox 的正式原子写入口;当前仓库尚无生产本地候选创建调用链,不把不存在的上游路径声明为已接通。真实客户 PKI、生产 PostgreSQL、现场网络与最终故障隔离由 #154/#155 验证。
|
||||
<!-- standard-event-evidence-v1:end -->
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
generated: true (请先修改 Gitea Wiki,禁止直接编辑本文件)
|
||||
wiki_page: Deployment-and-Operations
|
||||
wiki_url: https://git.ilapage.cn/ila/yovision/wiki/Deployment-and-Operations.-
|
||||
wiki_revision: 54d720aa07d2c40684da3fc04378393c7f318a04
|
||||
synchronized_at: 2026-08-31T03:20:15Z
|
||||
wiki_revision: fa7e2031338cbca0f669f5d5a72a073670114882
|
||||
synchronized_at: 2026-08-31T07:35:46Z
|
||||
<!-- gitea-wiki-mirror:end -->
|
||||
|
||||
# YoVision 部署与运维
|
||||
@@ -146,11 +146,45 @@ Sense\start_sense.bat
|
||||
<!-- machine-identity-v1:start -->
|
||||
## 机器身份部署与轮换边界
|
||||
|
||||
#151 已冻结机器身份和传输基础,但 #152/#153 尚未注册业务 connector,因此当前不得手工拼接 endpoint 或临时共享凭据提前打通。
|
||||
#151 已冻结机器身份和传输基础,#152/#153 已验收业务 adapter/connector;运行时仍必须使用正式配置、迁移和独立机器身份,不得手工拼接临时共享凭据。
|
||||
|
||||
部署时为每个调用实例独立生成 Ed25519 私钥,保存到仓库外受 ACL/秘密存储保护的位置;产品配置只记录私钥路径、principal、kid、目标 audience 和最小 scope。消费者从仓库外公钥注册表读取受信 principal/kid。不得把私钥、完整令牌、Authorization header、管理员密码、浏览器 JWT/Cookie 或 query token写入配置样例、日志、工单和备份。
|
||||
|
||||
传输固定使用 HTTPS,TLS 最低 1.2并验证证书链与主机名。轮换按“先登记新公钥 → 调用方切换新 kid → 验证流量 → 24 小时内移除旧 key”执行;应急吊销直接禁用 principal 或 key,并同时停用相关 connector。回退保持 Sense、Brain、Bell 独立运行,保留 Outbox、Receipt、Event 和最后已知状态。
|
||||
|
||||
#152/#153 必须为各产品注入自己的持久原子 `(principal,jti)` replay store并验证重启;内存 replay store 只用于适配测试或不重启的单进程原语。
|
||||
#152/#153 已为各产品接入独立持久原子 `(principal,jti)` replay store并覆盖重启恢复;内存 replay store 仍只用于适配测试或不重启的单进程原语。
|
||||
<!-- machine-identity-v1:end -->
|
||||
|
||||
<!-- integration-connectors-v1:start -->
|
||||
## #152/#153 connector 部署与回退
|
||||
|
||||
升级前先备份 Sense、Bell 各自 PostgreSQL,并在停服窗口执行正式迁移:
|
||||
|
||||
- Sense:`2026083112000_brain_runtime.go`、`2026083112000_bell_connector.go`。
|
||||
- Bell:`2026083112000_event_ingress.go`。
|
||||
|
||||
迁移缺失时 connector 必须拒绝启动,不得依赖运行时 AutoMigrate 临时补表。Sense 只使用默认数据库注册 ingress 和 Worker,Bell 使用自己的默认数据库;不得指向共享数据库。
|
||||
|
||||
Brain 的标准事件出口在自身 JSON 配置的 `event_export` 对象中启用。必须配置 HTTPS origin、producer/site/severity、仓库外私钥路径、独立 principal/kid 和严格 transport policy;关闭时配置只保留 `{"enabled": false}`,CLI 恢复原 JSON Lines 独立输出。endpoint 只能是 HTTPS origin,固定追加 `/v1/events`。
|
||||
|
||||
Sense 运行变量:
|
||||
|
||||
- `SENSE_EVENT_INGRESS_ENABLED`:注册 Brain→Sense `POST /v1/events` 与证据读取入口。
|
||||
- `SENSE_MACHINE_PRINCIPAL_REGISTRY`:仓库外 Brain/Bell 公钥注册表。
|
||||
- `SENSE_EVIDENCE_OWNER_ID`:Sense 证据所有者逻辑标识。
|
||||
- `SENSE_BELL_CONNECTOR_ENABLED`:启动 Bell Outbox Worker。
|
||||
- `SENSE_BELL_ENDPOINT`、`SENSE_RELAY_ID`:Bell HTTPS origin 与 relay 实例标识。
|
||||
- `SENSE_BELL_PRINCIPAL_ID`、`SENSE_BELL_KEY_ID`、`SENSE_BELL_PRIVATE_KEY_PATH`:Sense→Bell 独立机器身份。
|
||||
- `SENSE_BELL_RELAY_INTERVAL_MS`:100–60000 ms;未配置时 2000 ms。
|
||||
|
||||
Bell 运行变量:
|
||||
|
||||
- `BELL_EVENT_INGRESS_ENABLED`:注册 `POST /v1/events`。
|
||||
- `BELL_MACHINE_PRINCIPAL_REGISTRY`:仓库外 producer/relay 公钥注册表。
|
||||
- `BELL_EVIDENCE_RESOLVER_ENABLED`:启用 Bell→Sense 证据解析。
|
||||
- `BELL_SENSE_EVIDENCE_ENDPOINT`、`BELL_SENSE_PRINCIPAL_ID`、`BELL_SENSE_KEY_ID`、`BELL_SENSE_PRIVATE_KEY_PATH`:Sense HTTPS origin 与 Bell 独立证据读取身份。
|
||||
|
||||
推荐启动顺序:完成两端迁移 → 启动 Bell ingress → 启动 Sense ingress/relay → 启用 Brain event_export。#152 的配置/状态 adapter 已有持久状态、重放与恢复接口,部署级 HTTP 托管和根级进程编排在 #154 统一绑定,不能用临时共享文件或数据库替代。
|
||||
|
||||
回退时关闭 Brain `event_export.enabled`、Sense 两个 connector 开关和 Bell ingress/evidence 开关;保留 last-known-good、运行投影、InboundEvent、EvidenceRecord、Outbox、ReplayToken、Receipt、Event 与审计。不得删除事实、关闭 TLS/验签或改用网页登录态。
|
||||
<!-- integration-connectors-v1:end -->
|
||||
|
||||
Reference in New Issue
Block a user