diff --git a/deploys/README.md b/deploys/README.md index 87bea36..6ee5651 100644 --- a/deploys/README.md +++ b/deploys/README.md @@ -41,6 +41,15 @@ artifact are injected separately. Asterisk is built or installed with the scripts under [`cell/`](cell/), and its management-owned configuration is never overwritten. +The current business binary is **isolated Mock-only**; mixed/real startup is +rejected, and the current release is not approved for production installation. +`config/agent-endpoints.example.json` is the only current local configuration +example. Earlier Dispatcher and static Cell JSON examples are preserved +byte-for-byte under [`docs/archive/deployment-examples/`](../docs/archive/deployment-examples/) +for history only; they must not be loaded as current configuration or treated +as management approval. Native Asterisk and non-production host diagnostics +remain separately required when a real stage is explicitly authorized. + The production install does not install test scripts, test fixtures, Docker or sudo rules for test tooling. diff --git a/docs/archive/deployment-examples/README.md b/docs/archive/deployment-examples/README.md new file mode 100644 index 0000000..165fd21 --- /dev/null +++ b/docs/archive/deployment-examples/README.md @@ -0,0 +1,11 @@ +# 已退役的部署配置样例 + +以下文件从 `deploys/config/` 原样移入本目录,仅保留历史来源事实。当前 Agent/Dispatcher 不读取这些配置,当前安装包也不包含它们;其中的审批标记和真实线路字段**不是现行部署授权**。 + +| 原路径(相对项目根目录) | SHA-256(迁移前后相同) | +| --- | --- | +| `deploys/config/dispatcher.json.example` | `c73954882284c0db9650dd5dda579365afb39124f2567bfff486b3b32efe3080` | +| `deploys/config/static-cell-artifact-v2.json` | `371e0e89548838a1d293b04503e40e681a8352312bad6db8fa273807b34875ac` | +| `deploys/config/static-cell-runtime-v1.json` | `89d2686d0d1ca60159c3c6bd725dc9e6f511cbdb56bf6ce7b65ca7d4dc3f2d60` | + +当前隔离 Mock 的端点样例是 [`deploys/config/agent-endpoints.example.json`](../../../deploys/config/agent-endpoints.example.json)。真实 Agent/Asterisk 加载、管理平台审批、主机诊断及供应商联调尚未验证;这些历史样例不得代替验收。 diff --git a/deploys/config/dispatcher.json.example b/docs/archive/deployment-examples/dispatcher.json.example similarity index 100% rename from deploys/config/dispatcher.json.example rename to docs/archive/deployment-examples/dispatcher.json.example diff --git a/deploys/config/static-cell-artifact-v2.json b/docs/archive/deployment-examples/static-cell-artifact-v2.json similarity index 100% rename from deploys/config/static-cell-artifact-v2.json rename to docs/archive/deployment-examples/static-cell-artifact-v2.json diff --git a/deploys/config/static-cell-runtime-v1.json b/docs/archive/deployment-examples/static-cell-runtime-v1.json similarity index 100% rename from deploys/config/static-cell-runtime-v1.json rename to docs/archive/deployment-examples/static-cell-runtime-v1.json diff --git a/docs/evidence/saas-dispatcher-implementation.md b/docs/evidence/saas-dispatcher-implementation.md index 542727a..4feeafd 100644 --- a/docs/evidence/saas-dispatcher-implementation.md +++ b/docs/evidence/saas-dispatcher-implementation.md @@ -136,6 +136,8 @@ - 当前本地验收入口:旧 `scripts/mq-integration-local.sh` 的 V3/旧 Dispatcher 筛选式均匹配零项测试,但原脚本仍可能返回成功;先以 `go test -list` 复现空匹配,随后删除旧入口并令 `scripts/acceptance-local.sh`、`Makefile` 共用要求三项明确 PASS 的当前隔离 MQ 脚本。首次运行发现 `internal/store/store.go` 三处匿名结构体缩进未格式化,已仅执行格式化;再次运行当前验收入口的合同来源、完整 race 测试、静态检查、构建及三项真实隔离 MQ 测试均通过。完成提示明确非生产主机诊断和真实外部仍未验证,不把历史 F09 验收数写成本轮通过。 +- 历史部署 JSON:部署目录仍放置旧 Dispatcher 文件配置与两份自行编号的静态 Cell 样例,其中审批标记不能证明现行管理平台审批。部署布局测试先复现三份旧样例仍在当前路径,再将原始字节移至 `docs/archive/deployment-examples/`,逐份核验迁移前后 SHA-256 相同并记录于该目录 README;当前 `deploys/config/` 仅保留已由现行 Mock 端点读取测试验证的 Agent 样例。安装包从未包含这三份旧文件,真实 Agent/Asterisk 加载和审批仍未验证。 + ## 验收台账 P01–P06 的项目内隔离证据见上;P07 全仓命名与唯一入口尚在清理,A01–A12 和 K01–K16 的最终对照仍待 P08。不得用本地 Mock 冒充外部签收。 diff --git a/internal/config/deployment_layout_test.go b/internal/config/deployment_layout_test.go index 133815e..98b69f4 100644 --- a/internal/config/deployment_layout_test.go +++ b/internal/config/deployment_layout_test.go @@ -12,7 +12,7 @@ func TestDeploymentHasOneCanonicalDirectory(t *testing.T) { if _, err := os.Stat(filepath.Join(root, "deploy")); !errors.Is(err, os.ErrNotExist) { t.Fatalf("obsolete deploy directory must not remain: %v", err) } - for _, path := range []string{"README.md", "build-package.sh", "install.sh", "versions.lock.json", "cell/install-asterisk-native.sh", "test/nonprod-call-evidence.sh", "test/README.md", "systemd/sip-go-agent-agent.service", "systemd/sip-go-agent-dispatcher.service", "config/dispatcher.json.example"} { + for _, path := range []string{"README.md", "build-package.sh", "install.sh", "versions.lock.json", "cell/install-asterisk-native.sh", "test/nonprod-call-evidence.sh", "test/README.md", "systemd/sip-go-agent-agent.service", "systemd/sip-go-agent-dispatcher.service", "config/agent-endpoints.example.json"} { info, err := os.Stat(filepath.Join(root, "deploys", path)) if err != nil { t.Errorf("canonical deployment entry %s: %v", path, err) @@ -22,4 +22,9 @@ func TestDeploymentHasOneCanonicalDirectory(t *testing.T) { t.Errorf("deployment entry %s is not a regular file", path) } } + for _, path := range []string{"config/dispatcher.json.example", "config/static-cell-artifact-v2.json", "config/static-cell-runtime-v1.json"} { + if _, err := os.Lstat(filepath.Join(root, "deploys", path)); !errors.Is(err, os.ErrNotExist) { + t.Errorf("retired deployment example %s still active: %v", path, err) + } + } }