30 KiB
数据采集终端—云端系统
这是依据《数据采集终端—云端系统研发需求规格说明书》建立的正式产品工程。当前已完成工程框架、公共能力、本地模拟语音闭环、家庭用户SaaS核心业务、字幕到人工确认记忆闭环,以及隐私、可靠设备命令、签名固件灰度、双轨录音、认证SSE状态事件流、具体资源分享、运营配置灰度发布、用量费用额度、告警处置、集成诊断和敏感数据临时提权闭环。
当前已实现
- Go模块化单体的
api、callbacks和worker三个进程入口。 - 统一环境配置、JSON结构化日志、请求关联编号、请求体限制、安全响应头和优雅停机。
- PostgreSQL、pgvector和Redis连接及存活/就绪健康检查。
- OpenAPI 3.1基线与React类型生成。
- 设备API兼容门禁:拉取请求自动检查OpenAPI破坏性变化,v2新增行为使用显式可选能力位,不依赖固件
User-Agent;终端不根据云端engine_mode改变采集或播放。 - React/TypeScript/Vite研发工作台,覆盖加载、失败、重试和状态展示。
- Web接口统一具备15秒超时、页面切换取消和明确的超时重试提示,避免操作长期悬挂。
- Web入口HTML禁止陈旧缓存,哈希静态资源长期缓存,并返回CSP、防嵌套、MIME嗅探和浏览器权限安全头。
- PostgreSQL首批迁移:扩展、租户、用户、审计、幂等记录和outbox可靠待办。
- Keycloak OIDC授权码+PKCE登录、
issuer + subject账号映射和家庭角色权限。 - Web登录会话在访问令牌到期前自动续期;续期失败或令牌过期时立即退出业务视图并提示重新登录。
- 幂等并发串行化、事务审计、outbox领取/重试/死信和进程崩溃锁恢复。
- OpenTelemetry分布式追踪、Prometheus HTTP/依赖/outbox指标与结构化日志关联。
- Redis令牌桶限流、HMAC签名游标分页和ETag/If-Match乐观并发组件。
- 每设备独立请求签名、防重放、启动握手、版本化配置读取和可运行模拟设备。
- 逐设备生产密钥:设备表只保存
device-secret://<name>引用,API从受控Secrets/KMS CSI目录按请求读取对应密钥;引用禁止路径穿越,密钥轮换原子替换文件后无需重启服务,本地模拟仍使用静态开发密钥。 - 两阶段通话主链:事务冻结授权/背景、房间分配、确定性短期Token、入房确认和可靠启动。
- 智能体启动结果闭环:设备入房后读取
wait/continue/leave_room权威动作;供应商永久拒绝启动时通话、RTC任务、状态历史和审计原子收敛,模拟终端按稳定失败码及时退房。 - 背景资料准备失败闭环:白名单字段类型异常时保存
FAILED/context_preparation_failed权威通话,不创建RTC房间;设备422、幂等重放、家庭详情和运营诊断展示同一结果。 - 活动通话授权撤回闭环:撤回通话正在使用的字幕、原录音、故事整理或个性化记忆授权时,同一事务保存停止状态和可靠Agent停止任务;设备心跳/遥测取得停止动作。
- 可运行模拟语音供应商:固定任务幂等受理、签名异步回调、重复事件去重和
ACTIVE状态闭环。 - 序列化通话心跳:PostgreSQL权威租约、Redis热租约和设备在线状态,重复/乱序请求不续租。
- 可靠停止与终态收敛:固定任务Stop、结束/失败回调、幂等重放和租约释放。
- 后台异常回收:预留过期、心跳超时、启动/停止卡住任务扫描,对账动作和系统审计。
- 家庭、长者、稳定事实和五类分项授权首批网页API:服务端租户隔离、家庭角色能力、强ETag、事务审计、授权追加历史、撤回幂等和不可变授权快照。
- 设备列表、详情、在线状态、设备影子配置和一次性绑定码:非敏感配置白名单、敏感字段拒绝、Redis实时状态降级和安全重复绑定。
- 家庭业务React工作台:家庭切换、长者档案、稳定事实登记/确认、分项授权/撤回、设备绑定与配置、通话列表/详情及角色只读控制。
- 角色化业务导航:家庭用户只加载家庭业务,运营角色可按需切换运行配置、费用额度、告警处置和联调诊断,避免无权限页面与全部工作台同时加载。
- 家庭成员协作:成员列表、一次性邀请/撤销/接受、跨客户组织受邀账号映射、角色变更、成员移除和家庭所有权转移。
- 通话查询API:长者维度游标分页、状态过滤、脱敏详情、冻结快照摘要和完整状态历史。
- 长者扩展档案、稳定事实、授权记录、设备绑定、最终话轮、摘要、故事版本和已确认记忆数据库模型;V8迁移已完成空库升降级验证。
- 模型内容候选化:只使用可追溯长者话轮生成候选;人工确认和当前有效记忆授权共同控制长期记忆写入。
- 可切换内容生成器:本地使用确定性适配器,生产可通过火山方舟OpenAI兼容接口生成结构化摘要、开放话题、故事和事实候选;模型网络调用不占用数据库事务,写入前重新核对通话状态、授权和话轮指纹,敏感内容在本地拦截后不发送外部模型。
- 新通话在数据库层按租户、长者、当前授权、状态、敏感级别、有效期和索引状态检索已确认记忆,并把实际版本冻结到背景快照。
- 可切换记忆向量:本地使用1536维确定性向量,生产可通过火山方舟OpenAI兼容
/embeddings接口完成索引和查询;两端共用同一模型及维度,外部调用均位于数据库事务外,查询服务临时不可用时通话可无记忆降级启动。 - 隐私数据访问请求:所有者幂等提交、Outbox/Worker子任务、八类数据范围盘点、无正文结果和审计。
- 私有数据导出:按长者和分类生成JSON,MinIO私有存储、SHA-256校验、短期签名下载和过期对象清理。
- 主体级隐私删除:精确称呼确认、活动通话保护、立即冻结读取/上传/召回,以及PostgreSQL、Redis、对象存储、pgvector、外部索引和私有导出六子系统的可重试对账与最小删除证明。
- 设备命令可靠链路:家庭端幂等排队、设备HMAC主动拉取、重复投递计数、确认/成功/失败回执和过期终态;Web设备卡片可下发诊断命令。
- 固件安全发布与管理页:Ed25519受信公钥、浏览器私有直传、大小与SHA-256校验、签名清单验证、确定性灰度、可靠命令、短期下载、暂停、已验证版本回滚,以及逐设备下载/安装/确认进度。
- 双轨录音媒体链路:near/far分片清单幂等、15分钟单对象直传、Outbox可靠校验、WAV PCM16容器/时长/大小/SHA-256核验、延迟删除本地密文及设备回执,以及PLAY/DOWNLOAD独立授权、授权列表/撤销、React双轨播放下载、5分钟私有访问和成功/拒绝审计。
- 联调问题闭环:按客户组织记录问题现象、严重级别、设备/通话/请求编号、责任方、根因、修复版本和脱敏回归证据;未关闭HIGH/CRITICAL形成发布阻断汇总,创建幂等、更新强ETag并全程审计。
- 认证SSE状态事件流:业务事务内生成最小事件,15分钟
Last-Event-ID续传、活动家庭成员过滤、跨租户游标拒绝、重复事件抑制、设备上线去重/超时离线、React自动重连和2秒合并刷新,避免连续事件放大为整页请求风暴。 - 具体资源分享闭环:故事、通话文字和录音分片的登录定向或匿名口令授权、幂等创建、授权历史、撤销/过期、跨租户拒绝、故事共享编辑与强并发控制、5分钟录音短期地址、逐次访问审计及React管理页。
- 内部运营配置:独立平台运营角色、五类不可变版本、结构与敏感键校验、离线评测证据、受控凭据/音色/模型引用、双人审批、租户/试验对象/设备组灰度、稳定分桶、并发影响上限、投放台账、资源撤销和不可变回滚;新通话按范围优先级命中并冻结实际路由配置编号。
- 用量费用与额度:供应商七类最终用量签名回调、事件和计量双层幂等、不可变价格版本与双人发布、费用行版本/单价冻结、运营周期汇总、家庭通话用量展示,以及客户组织/设备日月费用、并发通话和最长时长硬额度。
- 真实RTC/语音供应商适配:本地使用确定性开发Token与Mock任务协议;生产可切换为火山RTC正式Token格式和经官方Go SDK签名的
StartVoiceChat/StopVoiceChat,稳定任务编号、超时重试和停止幂等语义保持不变;冻结的s2s_pure、s2s_hybrid或cascade模式会选择各自独立的供应商模板。 - 生产启动安全门禁:生产环境强制OIDC HTTPS、数据库传输安全、Redis认证、对象存储TLS、火山RTC正式Token、签名VoiceChat OpenAPI、非占位且相互独立的签名密钥,并拒绝本地模拟供应商配置。
- k6研发压测入口和Prometheus基础告警:覆盖服务可用性、5xx、p95、Outbox积压/死信、隐私部分失败及固件失败/停滞。
- 分层限流和供应商容量保护:分别按网络、用户、客户组织和设备限流,并对供应商启动RPS与跨Worker活动任务数执行保护。
- 后台任务仅重试显式临时错误:网络、超时、供应商临时错误、对象暂不可见和可恢复数据库错误采用带随机变化的指数退避;永久错误立即进入死信。
- 集成诊断工作台:按设备、通话、房间、供应商任务和请求编号精确检索脱敏状态,并提供配置刷新、安全停止、状态对账、设备吊销、已注册死信受控重试和脱敏JSON诊断包。
- 敏感数据临时提权:按单次通话申请字幕读取/录音播放,最长4小时、申请人禁止自批、另一人审批、到期自动失效、5分钟录音短链及逐次成功/拒绝审计。
- Grafana业务、技术、安全三类仪表盘,以及供应商通知积压和证书30天/7天到期监测。
- 告警Webhook通知与联通测试:未静默的新告警和超时升级与事件记录同事务进入Outbox,Worker按临时/永久错误分类重试,并使用稳定事件编号和HMAC-SHA256签名投递;运营人员可针对活动路由发起不生成正式告警的联通测试,查询投递状态并受控重试失败任务。
- 告警接收器一致性报告:离线核对全部活动路由、云端
DELIVERED任务、真实网关唯一验签回执、主/升级值班组映射和一次正式演练;本地模拟报告固定不能放行阶段8真实接收器门禁。 - KMS/HSM轮换一致性报告:绑定候选构建、工作负载身份、提供器版本、云审计、新旧凭据认证和业务连续性,同时覆盖动态读取与滚动重启;本地环境密钥演练固定不能放行真实云密钥门禁。
- 生产恢复一致性报告:同一候选必须覆盖PostgreSQL恢复、Redis重建、三个服务滚动重启和供应商停机恢复,并证明数据一致、业务连续和无重复效果;本地恢复子集不能放行生产门禁。
- 外部基础设施探针:API周期校验OIDC JWKS可读取且至少包含一把公钥;生产API/Worker对方舟和火山RTC执行无业务副作用的DNS、TCP和证书校验TLS握手,结果进入Prometheus且不因供应商短时故障驱逐健康Pod。
- 生产基础设施一致性报告:按同一候选核对域名TLS、OIDC、PostgreSQL、Redis、对象存储、网络隔离和监控的真实控制项及证据引用;本地Compose可达性不会放行生产门禁。
- Safari兼容性一致性报告:以两个真实Safari版本、两种视口和六条关键流程组成24项精简矩阵;Chrome/Edge或Playwright WebKit不能冒充真实Safari验收。
- 真实终端RTC一致性报告:至少3台候选终端以6通精简矩阵覆盖三种语音方式正常闭环、凭证续签、网络切换恢复和受控停止;模拟供应商不能放行。
- 真实Agent模型一致性报告:重新计算已有10类Agent固定评测,并绑定Embedding六类召回/隔离、内容安全六类策略、数据条款和额度;本地模型不能放行。
- 远程CI供应链一致性报告:绑定完整源提交、托管CI运行、14项构建与安全检查、后端/Web镜像摘要和源码/双镜像三份CycloneDX SBOM;本地工具链不能放行。
- 发布候选证据包:技术验收快照通过后,把十类外部证据索引、OpenAPI、迁移、Kubernetes清单、关键交付文档和可用SBOM封装为逐文件SHA-256清单ZIP;真机固件门禁要求至少3台设备各完成4个硬件场景,
PILOT类型还强制携带同租户、同候选版本/构建摘要、同自然周的7份日报和1份完整周报,任何缺口保持待验,不会把本地模拟冒充生产验收。 - 试点运行日报:绑定候选版本与不可变构建摘要后,按IANA业务时区自然日下载设备、通话、供应商、上传、告警和分币种费用的脱敏快照;日报有租户隔离、幂等和审计,但不保存服务端正文,也不代替真机体验、供应商账单或发布审批。
- 试点运行周报:绑定同一候选构建后,按周一开始的业务自然周下载内容审核、记忆、隐私请求、固件和配置差异;比例同时展示样本,无样本不伪造0%,投诉因无平台权威表固定要求附客服或CRM证据。
- Docker Compose本地环境:PostgreSQL、Redis、MinIO、Keycloak、迁移、三个后端进程、模拟供应商和Web。
- Kubernetes/Kustomize预生产与生产基线:API、Callbacks、Worker、Web、独立迁移Job、Secret只读卷、探针、资源限额、滚动发布、PDB/HPA、Ingress和入口网络隔离;清单不包含真实密钥。
- Secrets Store CSI生产覆盖层:应用和迁移Job可直接挂载外部KMS/Secret Manager内容,不经过普通ConfigMap或明文环境变量;逐设备密钥支持挂载后即时轮换,其他进程级密钥通过受控滚动重启生效。
- 本地检查脚本与持续集成基础流水线。
快速启动
前置条件:Go 1.26、Node.js 24、Docker Desktop与Docker Compose。
完整容器环境:
Set-Location E:\Codex\story\platform
.\scripts\dev.ps1
默认本地镜像使用dev/unknown/unknown构建标识。需要冻结可追溯候选时,应在构建前设置PLATFORM_BUILD_VERSION、40位PLATFORM_BUILD_COMMIT和UTC RFC3339格式的PLATFORM_BUILD_TIME;Compose会把同一标识写入后端二进制和后端/Web镜像OCI标签,远程CI会根据OpenAPI版本、完整提交和运行时间自动设置并复核这些值。
启动成功后访问:
- Web:http://localhost:3100
- API存活检查:http://localhost:58080/health/live
- API就绪检查:http://localhost:58080/health/ready
- MinIO控制台:http://localhost:59001
- Keycloak:http://localhost:58180
- Prometheus:http://localhost:59190
- Grafana:http://localhost:59300
- 模拟语音供应商存活检查:http://localhost:59200/health/live
- 模拟告警接收器存活检查:http://localhost:59210/health/live
本地Web点击“登录研发环境”后可使用owner、editor或outsider三个合成账号,密码均为LocalOnly123!。账号只用于本机联调,权限说明见家庭角色权限矩阵。
Web镜像在容器启动时根据WEB_OIDC_AUTHORITY和WEB_OIDC_CLIENT_ID生成不缓存的runtime-config.js。dev、preprod和prod可复用同一镜像,只需为各环境设置对应OIDC地址和客户端编号;这些值是浏览器可见的公开配置,不能用于保存客户端密钥。
真实火山RTC模式由两组独立开关启用:API设置RTC_TOKEN_ISSUER=volcengine、RTC_APP_ID和RTC_APP_KEY,Worker设置VOICE_PROVIDER=volcengine、VOLC_ACCESS_KEY_ID、VOLC_SECRET_ACCESS_KEY、区域、接口版本以及VOLC_VOICE_CHAT_TEMPLATE_FILE。生产模板采用voice-chat-template-bundle-v1,分别提供s2s_pure、s2s_hybrid和cascade三个完整VoiceChat Config/AgentConfig;平台按通话冻结模式选择模板,再覆盖AppId、RoomId、TaskId、目标设备用户、智能体用户,并追加本次已授权且脱敏的背景摘要。可从模板示例复制结构并按照已开通的官方能力替换每个完整Config对象;不要把AppKey、AK/SK、ASR/TTS Token提交到仓库。
生产API必须设置DEVICE_SECRET_DIRECTORY为容器内绝对路径,并把Docker/Kubernetes Secret或云KMS CSI卷只读挂载到该目录。每台设备的credential_ref写为device-secret://terminal-001,对应文件名为terminal-001,文件内容为至少32字节的独立随机密钥。解析器拒绝相对路径、子目录、越界符号、缺失文件和短密钥;每次验签重新读取文件,因此密钥文件原子轮换后立即生效。DEVICE_LOCAL_SECRET只允许本地模拟使用。
数据库连接串、Redis、RTC AppKey、火山AK/SK、方舟API Key、对象存储凭据、回调/告警签名等敏感配置同时支持NAME_FILE=/run/secrets/name。文件路径必须是容器内绝对路径、目标必须是普通文件且不超过64KiB;读取时只去掉末尾换行,不在错误中打印内容。NAME与NAME_FILE同时存在会拒绝启动,防止轮换时仍意外使用旧的明文环境变量。
独立启动后端时,告警外部通知在未配置地址时安全关闭;本地Compose默认连接仓库内的验签模拟接收器,便于验证真实Worker投递而不访问外部网络。接入企业协作平台或通知网关时,为Worker设置ALERT_WEBHOOK_URL、至少32字符的ALERT_WEBHOOK_SECRET和可选的ALERT_WEBHOOK_TIMEOUT;生产地址必须使用HTTPS。接收端应使用X-Voice-Event-ID去重,并按v1=HMAC-SHA256(secret, timestamp + "." + body)校验X-Voice-Signature。运营工作台可针对活动路由发起联通测试;测试原因只写审计,不发送给接收端。
外部依赖探针默认每30秒执行一次,可通过EXTERNAL_PROBE_INTERVAL调整。OIDC探针验证JWKS HTTP状态、JSON格式和非空密钥集;方舟、火山RTC及托管内容安全探针只验证DNS、TCP、TLS 1.2以上协议和受信证书,不调用推理、创建房间、启动语音任务或发送待分类正文。探针失败只产生指标与告警,不进入Kubernetes readiness,避免供应商故障引发Pod重启风暴。
内容生成默认使用CONTENT_GENERATOR=local。接入火山方舟时设置CONTENT_GENERATOR=ark、ARK_BASE_URL、ARK_API_KEY、ARK_CONTENT_MODEL和ARK_REQUEST_TIMEOUT;Worker调用${ARK_BASE_URL}/chat/completions。生产环境拒绝本地生成器、HTTP地址、占位API Key或本地模型编号。
内容安全默认使用CONTENT_SAFETY_PROVIDER=local作为开发基线。生产Worker必须配置managed_http、HTTPS端点、独立API Key、经批准的策略版本和超时;高风险输入先在本地拦截,其余输入及模型输出通过托管策略复核,策略服务异常时停止生成和落库。协议、错误语义与接入步骤见《生产内容安全服务适配》。
进入目标环境联调前,可运行scripts/stage8-preflight.ps1检查候选提交、远程仓库、Compose本地基线和十类外部证据索引状态。预检不会读取密钥值或把本地模拟结果视为外部验收通过,详细说明见《真机、真实供应商、试点与生产发布外部验收清单》。
记忆向量默认使用EMBEDDING_PROVIDER=local。接入方舟时,API和Worker必须同时设置EMBEDDING_PROVIDER=ark、同一个ARK_BASE_URL、ARK_API_KEY和ARK_EMBEDDING_MODEL;平台请求并强校验1536维向量。生产环境拒绝本地向量提供器,避免索引向量和查询向量落入不同空间。
生产集群部署清单位于deploy/kubernetes,详细的镜像构建、外部依赖、Secret/CSI文件名、迁移、发布、轮换、检查和回滚步骤见《Kubernetes部署手册》。基线中的.example.invalid、全零RTC App ID和replace-with-*均是故意保留的不可用占位值,生产启动门禁会拒绝这些值,必须由环境覆盖层替换后才能发布。
只启动基础依赖并在宿主机开发:
docker compose up -d postgres redis minio keycloak migrate
go run ./cmd/api
宿主机默认使用API端口58080—58082、PostgreSQL端口55432、Redis端口56379、OTLP端口54317和Prometheus端口59190,避免与开发机现有服务冲突;可在.env中覆盖。容器间仍使用各组件的标准端口。
另开终端启动前端:
Set-Location E:\Codex\story\platform\web
npm ci
npm run generate:api
npm run dev
质量检查
日常开发默认执行轻量功能就绪检查:
Set-Location E:\Codex\story\platform
.\scripts\check-functional.ps1
该脚本检查必要容器、Web与三个后端进程、模拟供应商、模拟告警接收器、数据库/Redis/对象存储/OIDC依赖、Outbox积压和近期错误日志。功能改动再配合对应Go包测试或单项烟测,不要求每次执行全量回归。
发布候选或CI执行全量质量门禁:
Set-Location E:\Codex\story\platform
.\scripts\check.ps1
该脚本执行Go格式检查、静态检查、单元测试、OpenAPI类型生成、前端类型检查、前端构建和Compose语法检查。
阶段8候选证据包的输入、十类外部门禁、真机固件场景覆盖、状态语义、归档结构和命令见《发布候选证据包说明》,真实终端RTC六通矩阵见《真实终端与RTC/语音供应商一致性证据》,生成/Embedding/内容安全见《真实Agent模型质量一致性证据》,生产七类组件采集见《生产基础设施一致性证据》,真实Safari精简矩阵见《Safari兼容性一致性证据》。可先执行.\scripts\smoke-release-evidence.ps1验证本地真实OIDC快照到ZIP清单的纵向链路;该烟测不会把外部待验项改为通过。试点每日证据见《试点运行日报开发说明》,周度复盘口径、外部投诉缺口、接口和轻量烟测见《试点运行周报开发说明》。
完整本地环境运行后执行身份与数据库集成冒烟:
.\scripts\smoke-auth.ps1
执行设备签名、启动和配置联调:
docker compose --profile simulation run --rm sim-device
执行模拟设备断网重连、完整通话、重复请求、字幕补交、遥测和命令场景:
docker compose --profile simulation run --rm -e SIM_SCENARIO=offline,conversation,transcript,telemetry,commands sim-device
还可用SIM_SCENARIO=media和SIM_CONVERSATION_ID验证已授权通话的录音直传、后台校验、延迟删除及设备删除回执;详见docs/device-integration.md。
执行设备状态、错误和命令结果的批量遥测、幂等、事件判重及冲突回滚烟测:
.\scripts\smoke-device-telemetry.ps1
执行创建、激活、供应商启动、重复回调、心跳租约、停止和最终COMPLETED状态的完整冒烟:
.\scripts\smoke-conversation.ps1
执行家庭、长者、授权、角色隔离、ETag和授权快照纵向冒烟:
.\scripts\smoke-saas.ps1
执行设备读取、在线状态、影子配置、敏感字段拒绝和一次性绑定码烟测:
.\scripts\smoke-device-management.ps1
执行成员邀请、跨客户组织接受、角色并发、所有权保护与转移烟测:
.\scripts\smoke-members.ps1
执行隐私数据访问请求的权限、幂等、后台子任务和范围盘点烟测:
.\scripts\smoke-privacy.ps1
执行私有桶、导出范围、短期签名下载、摘要和过期删除烟测:
.\scripts\smoke-export.ps1
执行主体立即冻结、活动通话保护、六子系统删除对账、正文脱敏和墓碑证明烟测(UTF-8脚本建议使用PowerShell 7):
pwsh -NoProfile -File .\scripts\smoke-privacy-delete.ps1
执行设备命令排队、签名拉取和分阶段回执烟测:
pwsh -NoProfile -File .\scripts\smoke-device-commands.ps1
执行固件角色、跨域私有直传、签名校验、列表查询、非法签名拒绝、灰度暂停、下载/安装进度和回滚烟测:
powershell -NoProfile -ExecutionPolicy Bypass -File .\scripts\smoke-firmware-rollout.ps1
执行双轨录音直传、后台校验、错误摘要拒绝、本地删除回执、独立播放/下载授权和访问审计烟测:
pwsh -NoProfile -File .\scripts\smoke-media-upload.ps1
执行SSE断点续传、权限隔离、过期游标及设备在线/离线状态事件烟测:
pwsh -NoProfile -File .\scripts\smoke-web-events.ps1
pwsh -NoProfile -File .\scripts\smoke-device-presence-events.ps1
执行具体资源分享的幂等、权限、撤销、过期和访问审计烟测:
pwsh -NoProfile -File .\scripts\smoke-sharing.ps1
执行运营角色、评测/资源门禁、灰度投放、资源撤销、回滚和新通话版本冻结烟测:
pwsh -NoProfile -File .\scripts\smoke-ops-config.ps1
执行价格双人发布、七类用量去重核价、运营/家庭脱敏汇总、预算快照和硬额度烟测:
pwsh -NoProfile -File .\scripts\smoke-billing.ps1
执行告警路由、自动发现、超时升级、版本冲突、确认—缓解—关闭、静默和重新打开烟测:
pwsh -NoProfile -File .\scripts\smoke-alerts.ps1
执行联调诊断的五类精确检索、跨租户拒绝、安全停止、状态对账、配置刷新、死信受控重试、脱敏诊断包、合成设备吊销和审计关联烟测:
pwsh -NoProfile -File .\scripts\smoke-diagnostics.ps1
pwsh -NoProfile -File .\scripts\smoke-acceptance-snapshot.ps1
执行敏感数据临时访问申请、自批拒绝、双人审批、申请人绑定、字幕读取和逐次审计烟测:
pwsh -NoProfile -File .\scripts\smoke-ops-sensitive-access.ps1
执行需求规定的本地专项容量、恢复和HTTP安全门禁:
# 50 RPS持续30分钟
docker run --rm -v "${PWD}/test/load:/scripts:ro" grafana/k6 run `
-e BASE_URL=http://host.docker.internal:58080 `
-e PROFILE=acceptance /scripts/api-readiness.js
# 500回调/秒持续10分钟,并校验30万唯一事件
pwsh -NoProfile -File .\scripts\load-provider-callbacks.ps1 -Profile acceptance -ConversationPool 100
pwsh -NoProfile -File .\scripts\load-conversation-state.ps1
pwsh -NoProfile -File .\scripts\load-sse-connections.ps1 -Connections 500
pwsh -NoProfile -File .\scripts\load-media-manifest.ps1
pwsh -NoProfile -File .\scripts\load-privacy-delete.ps1
pwsh -NoProfile -File .\scripts\verify-postgres-restore.ps1
pwsh -NoProfile -File .\scripts\verify-runtime-recovery.ps1
pwsh -NoProfile -File .\scripts\verify-provider-outage.ps1
pwsh -NoProfile -File .\scripts\security-http-smoke.ps1
目录说明
cmd/ 三个可部署进程入口
internal/ 平台公共能力及后续领域模块
migrations/ 仅追加的数据库迁移
openapi/ 对外接口契约基线
web/ 家庭用户和运营网页
deploy/ 容器构建与运行配置
docs/ 架构决策与研发基线
scripts/ 本地启动和质量检查脚本
test/ 契约、集成和端到端测试
公共接口约束与监控指标见可观测性与接口治理设计,设备签名和模拟联调见设备接入与启动配置联调说明,设备命令见设备命令可靠下发说明,固件流程见固件制品、签名、灰度与回滚开发说明,A/B升级与启动失败回退见设备A/B分区固件升级与启动确认协议,设备/云端时间线对账见固件真机联调一致性证据采集与校验说明,双轨录音见双轨录音上传、校验与访问开发说明,网页状态通知见Web状态事件流开发说明,具体分享见具体资源分享开发说明,运营配置见内部运营身份与运行配置版本开发说明,用量费用与额度见用量、费用与额度开发说明,告警闭环见告警监测与运营处置开发说明,真实网关归档见告警接收器一致性证据,云密钥轮换见KMS/HSM轮换一致性证据,生产恢复见生产等价恢复演练一致性证据,生产基础设施见生产基础设施一致性证据,联调工作台及发布候选验收快照见集成诊断工作台开发说明,试点每日证据见试点运行日报开发说明,试点周度复盘口径、外部投诉缺口、接口和轻量烟测见试点运行周报开发说明,敏感数据提权见运营敏感数据临时访问开发说明,外部上线阶段见真机、真实供应商、试点与生产发布外部验收清单,生产门禁和压测告警见压测、告警与生产安全门禁,专项实测证据见性能、恢复、安全与兼容性专项验证报告,隐私数据访问见隐私数据请求开发说明,私有导出见私有数据导出开发说明。
从框架搭建到生产落地的阶段任务、里程碑、人员、测试门禁、依赖和风险见详细开发计划,当前实际完成证据见开发状态与门禁记录。
安全提醒
本地环境只允许使用合成数据。不要把生产Token、证书、设备私钥、供应商长期密钥、真实录音或真实个人资料写入仓库、.env、日志或测试夹具。