docs(contracts): archive superseded local schemas outside active contract root

This commit is contained in:
2026-09-30 17:08:16 +08:00
parent 91d23a15d3
commit 1bd5a54778
21 changed files with 27 additions and 1 deletions
+19
View File
@@ -0,0 +1,19 @@
package contracts_test
import (
"os"
"strings"
"testing"
)
func TestCurrentContractDirectoryExcludesHistoricalGenerations(t *testing.T) {
entries, err := os.ReadDir("local")
if err != nil {
t.Fatal(err)
}
for _, entry := range entries {
if entry.IsDir() && strings.HasPrefix(entry.Name(), "v0.") {
t.Errorf("historical contract directory %q remains in the current contract root", entry.Name())
}
}
}
+1 -1
View File
@@ -14,7 +14,7 @@
- [`architecture/`](architecture/) 保存产品方案、边界与阶段背景;[`decisions/`](decisions/) 保存设计决定;[`contracts/`](contracts/) 是原有合同和提案记录,当前机器约束以 `../contracts/local/` 为准;[`acceptance/`](acceptance/) 保存跨阶段验收基线,须按本轮单节点/单 Cell/单租户范围核对。
- [`plan-saas-dispatcher-v05-v0.1.md`](plan-saas-dispatcher-v05-v0.1.md) 是**不可变历史来源**:原文件路径和 SHA-256 被当前合同 `manifest.json` 引用,必须保持原字节,不是第二个当前运行计划。旧 [`plan-config-read-v0.1.md`](plan-config-read-v0.1.md)、[`plan-dispatcher-state-v0.1.md`](plan-dispatcher-state-v0.1.md)、[`plan-0926.md`](plan-0926.md)、`thirds/v0.1–v0.4` 和上游 MQ-only v1 只供追溯旧事实,不能覆盖当前项目内合同,也不能作为兼容回退。
- [`archive/`](archive/) 保存旧 W/F 工作包、旧部署样例和上一版 AGENTS 原文等历史事实;[`archive/plan-0918.md`](archive/plan-0918.md) 是旧 W00–W16 原文,不是现在的执行入口。归档说明不能代签真实验收。
- [`archive/`](archive/) 保存旧 W/F 工作包、旧部署样例、上一版 AGENTS 原文,以及 [`contracts-local-history/`](archive/contracts-local-history/README.md) 中 17 个逐字节保留的旧本地 Schema/示例;它们均不参与当前合同或运行校验。[`archive/plan-0918.md`](archive/plan-0918.md) 是旧 W00–W16 原文,不是现在的执行入口。归档说明不能代签真实验收。
- [`evidence/README.md`](evidence/README.md) 说明历史证据保留规则;旧本地结果仍按当时环境和版本解读,不能据此推断当前合同或真实供应商已通过。
- [`../deploys/README.md`](../deploys/README.md) 为 Mock-only 本地发布及物理环境要求,实际新主机/版本/Cell 诊断与拨号前受限抓包见 [`../deploys/test/nonprod-call-evidence.sh`](../deploys/test/nonprod-call-evidence.sh)。本地包检查不替代真实 Asterisk 加载或生产审批。
@@ -0,0 +1,5 @@
# 项目内旧合同原件(历史)
原来位于 `contracts/local/v0.1/` 至 `contracts/local/v0.4/` 的 17 个 JSON Schema/示例,已**逐字节**移至同名子目录。移动前的 Git 基线为 `91d23a1`;原路径与每个文件的确切内容可通过 `git show 91d23a1:contracts/local/<原相对路径>` 核对。本次移动前后逐文件 SHA-256 均相同,没有改写其中的 `$id`、`$ref` 或历史判断。
这些文件不是当前机器合同,也不被运行时 `contracts.Files` 嵌入或 `contracts.ReadCurrent` 加载。当前唯一合同是 [`../../../contracts/local/`](../../../contracts/local/) 顶层的无代次 Schema、拓扑、正反例及 `manifest.json`;外部来源 `contracts/upstream/v1/` 的历史原值另有独立校验。历史原件不能用于回退、兼容运行或代签真实 SaaS/管理平台验收。不得为消除历史标识而更改其内容或据此迁移/删除现存业务数据。
@@ -142,6 +142,8 @@
- AI 自有代次命名清理:新增 `TestAIBindingsUseDomainNames`,先在旧 `CurrentBound`/`BindCurrent` 和 `current*.go` 上得到预期失败;将获批配置绑定、ASR/LLM/TTS/对话参数和单通话控制统一改为业务名 `Binding`、`ASRConfig`/`LLMConfig`/`TTSConfig`/`ConversationConfig`、`Bind`、`Call`/`NewCall`,对应 `internal/ai/` 的源码和测试文件不再带 `current` 前缀,调用方与测试同步改名,业务行为未增减。命名测试、四个受影响模块的 `go test -race ... -count=1`、全仓 `make check`(含三项真实隔离 MQ PASS)及 `make release-check-local` 通过,旧 AI 标识和文件名在活动 Go 源中已无匹配。旧 `contracts/local/v0.1–v0.4` 文件与未使用的 `internal/testfixture` 仍需按真实来源及调用情况分类,不能凭命名删除合同来源或现存数据;此批不宣称 P07 完成。
- 旧本地 Schema/示例归档:新增 `TestCurrentContractDirectoryExcludesHistoricalGenerations`,先在 `contracts/local/v0.1–v0.4` 上预期失败;将共 17 个历史 JSON 文件逐字节移到 `docs/archive/contracts-local-history/v0.1–v0.4`,逐文件 SHA-256 与移动前一致、Git 基线为 `91d23a1`。`contracts/local/` 现在只保留当前无代次合同与示例,`contracts.Files` 原有嵌入规则未扩大;运行时拒绝旧本地合同的现有负例与目录检查均通过。`docs/contracts/local-contract-manifest-v0.6.json` 引用的是另一路径的历史原件,没有改写;本次也没有触碰上游来源、历史计划 hash 或现存 SQLite/恢复文件。历史文件不作为真实外部验收或配置回退。旧未使用夹具和测试对旧配置示例的直接依赖仍待移除,此批不宣布 P07 完成。
## 验收台账
P01–P06 的项目内隔离证据见上;P07 全仓命名与唯一入口尚在清理,A01–A12 和 K01–K16 的最终对照仍待 P08。不得用本地 Mock 冒充外部签收。