4.6 KiB
F06 本地发布准备与切换阻断(无真实授权)
范围:单节点 P1 的项目内隔离 Mock 制品检查;没有部署 ECS、启动 systemd/Asterisk、访问真实 SaaS/management/OSS/SIP、发起拨号或执行新旧系统切换。任务发现仅按 v0.2 §2.5;其余本地 SaaS 协议维持 v0.1。contracts/upstream/v1/ 未改;下列项目内草案版本、队列名及本地哈希不代表外部签收。
制品与合同版本
make release-check-local 已通过:先验证已有 release/package 输出及哨兵文件绝不被覆盖,再运行 Proto/项目内合同正反例/hash 校验,以 Go 1.27.1 构建一次性本地制品和归档包,核对制品、归档及包内 SHA256SUMS、版本和清单,最后只删除本测试脚本独占的临时路径与自身生成的归档。scripts/build-release.sh 现在只允许 dist/ 下的新路径,拒绝已有目录/链接;deploys/build-package.sh 同样拒绝已有 release、stage、archive 或校验文件,不再先删除旧包。构建前校验合同和 Go 版本。清单保留来源 commit、dirty 状态及合同/Proto SHA-256,明确 scope=local-development、production_approval=false、credentials_embedded=false。不把脏工作树的构建产物称作可复现生产制品。
| 本次本地核对项 | 事实 |
|---|---|
| 来源 | HEAD ef84a0663d4356fbb5edd8a62de46c8549a2329b,与 origin/main 无提交差异;工作树仍有本轮及此前未提交文件,清单 source_dirty=true。 |
| 一次性制品 SHA-256 | b5709831faff4d5d87131ccdfcd44e1f5f2edd2f2d250f7644afdf8c060e07c0;仅供本次本地验证,脚本结束即移除临时产物。 |
| 一次性归档包 | 用唯一的本地测试版本号构建,外层 .sha256 与包内 package.SHA256SUMS 均核对通过;包内仍为 local-development、production_approval=false,没有调用 deploys/install.sh。已有包/目录的安全拒绝先失败后修复并复测通过。 |
| 其他本地协议 v0.1 | docs/contracts/local-contract-manifest-v0.1.json SHA-256 203ccec5cf4401f69bdf74a932797ecfba4e2b5b84ba2a3adca3b860a659561a。 |
| 任务发现 v0.2 | docs/contracts/local-contract-manifest-v0.2.json SHA-256 c5bbee5a074fb8102cb13db8918834273d675e8dee669bba06199321c2944c83;源文档 SHA-256 5358eaaecf944704975feab9150dcae8224ea89247a1086c68965ea46c253e31。新版不含旧分页发现 Schema 作为运行制品。 |
| SaaS 所有的 v3 队列(项目草案) | docs/contracts/mq-topology-v0.1-proposal.json SHA-256 20c0f69057e283df81823f7ff333e2c1cc7d756a68c10a22fc7d50ad793d53c4;任务、控制和结果队列均由 SaaS 创建,Dispatcher 仅检查并消费/发布,不声明、绑定或删除任务队列。 |
| Agent Proto | proto/manifest.json SHA-256 c428d6e1b278eb22c51519ca85b06e5e932b712f8dd8ec1c49d30ee778094639。 |
新旧互斥及 fail-closed
cmd/sip-go-agent/dispatcher_command_test.go使用有效项目配置及仅供测试的占位环境引用,证明mixed/real执行在开启 SQLite、RabbitMQ 或 Agent 连接之前被拒绝;不存在旧--tenant-key/--consume入口。实际deploys/env/dispatcher.env.example的默认real不会因此自动放行新 V3。- V3 Mock 消费 SaaS 预建的任务/控制队列;RabbitMQ 受限账号无
configure权限。internal/rpc/dispatcher_events_local_v3_test.go保证旧分散事件不能并行写入新最终结果路径;F03 不运行旧分页兼容/回退,F09 测试涵盖暂停/停止屏障及原队列积压。上述仅证明本地代码路径互斥,不证明真实旧 Python 实例已经退出或外部资源已交接。 - 新发起前仍需最终时段/名单/额度校验;实际 mixed/real 不因本地 Mock、合同草案、制品清单或本文件获得拨号授权。真实切换必须另有外部合同、实际 Agent/Asterisk 已加载快照、旧写者排空/停用、状态/额度回迁和受控维护窗口证据;目前没有这些事实,门禁保持关闭。
执行记录:make release-check-local(release+归档安全拒绝、双层哈希、版本核对)通过;go test ./cmd/sip-go-agent -run 'TestDispatcherRejectsNonMockExecutionBeforeOpeningResources|TestDispatcherCommandDoesNotExposeLegacyTenantQueueFlags' -count=1 通过;F09 的 ./scripts/acceptance-local.sh 已通过格式、合同、race、vet、构建及受限 RabbitMQ。deploys/install.sh 只做了只读核验,其目标主机/版本锁及 clean+production-approved 门禁仍要求额外授权;未执行真实部署/切换、systemd enabled+active、媒体监听和抓包,不以本地清单代签。