Files
mini-openclaw-v2/docs/v2/03-detailed-design.md
T
qiaoqichaoandClaude Code d56c699ce6 chore(v2): 从兴邦预审v2白名单抽取独立可运行基座
按 docs/v2/05-implementation-plan.md §1 候选迁移表与 claude_use/T00 白名单,
从 55e2cdb 抽取 224 个文件(2.48 MB)到独立目录 F:/mini-OpenClaw-v2。

- 排除:凭据(.env/server-deploy.conf/旧DELIVERY.md)、运行数据(xingbang_data 等
  4 个 SQLite)、依赖(venv/node_modules 符号链接)、归档(_backup*/test-evidence/
  ori_file)、Office 临时文件
- 目标目录独立 git 仓库,初始恢复点;Gitea 远程与分支待 OQ-06 Q2 定案
- 未部署、未启动服务、未调用模型

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-29 12:58:26 +08:00

173 lines
23 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 兴邦预审 v2 详细设计候选
状态:0.2 草案,工程阶段①/②未定案;以下端点和新类型尚未实现。覆盖 BR-01–44 / E-01–26 / AC-01–45,先形成可评审的契约,再编写代码。
## 1. 约定与契约归属
唯一代码 owner 拟为 backend/contracts/prescreen.py,复用既有 Evidence / ProjectSnapshot,通过适配器处理版本差异;前端类型生成链在 M1 实现。API 路由仅授权和校验,业务决策在 service。
共同字段:id/project_id/snapshot_id 等为非空字符串(1–128 字符),revision 为正整数,时间为带时区 ISO-8601;未知发生时间允许 null,记录时间必填;data_domain 为 demo/production;所有输入禁止未知字段。列表分页候选 limit 默认 20,范围 1–100,cursor 可空。
P0 初始工程限制提案(非业务阈值):沿用单材料 10 MB;单次最多 10 个专项判断问题、每题最多 20 条证据、每次最多 10 个模拟动作;工具最多 20 次、总运行 120 秒、单次模型请求 30 秒、可重试故障最多重试 1 次且计入总预算。管理员只能在部署配置中降低初期限制;放宽须重新验证并更新规格。这些值在 OQ-04 定案前不得当作性能承诺。
## 2. 接口草案
路径前缀 /api/prescreen,写请求须身份、项目权限和 Idempotency-Key;更新已有对象需 expected_revision。Error 响应统一为 `{error:{code,message,retryable,request_id}}`,不得带密钥或无权限原文。
| 方法 / 路径 | 入参 | 成功响应 | owner / 主要异常 |
|---|---|---|---|
| POST /projects/{project_id}/case-timelines | document_ids:string[1..100] | 202 {timeline:CaseTimeline},状态 processing | history_cases;E-01/03/07/09 |
| GET /case-timelines/{id} | 无 body | 200 CaseTimeline | history_cases;E-03;不存在统一 404 NOT_FOUND |
| POST /case-timelines/{id}/experiences | title:string[1..200], source_event_ids:string[1..50], conditions:Condition[], exceptions:Condition[], scope:project/team, expires_at:datetime | 201 ExperienceCard draft | 经验治理;E-03/04/07/09 |
| POST /experiences/{id}/transitions | action:submit/approve/reject/withdraw, expected_revision:int, note:string[1..2000] | 200 ExperienceCard | 复用经验治理;E-03/05/07 |
| GET /projects/{project_id}/judgment-profiles | 无 body | 200 {profiles:[{id,revision,display_name,provider,capabilities}],default_profile_id:string?};仅授权可用项 | 判断配置;不存在/无权项目404;详见专项设计 |
| POST /projects/{project_id}/runs | snapshot_id:string, enable_judgment:boolean=false, judgment_profile_id:string? | 202 ScreeningRun queued | prescreen;E-03/07/09/10/13 |
| GET /runs/{id} | 无 body | 200 ScreeningRun | prescreen;E-03;不存在 404 NOT_FOUND |
| POST /runs/{id}/cancel | expected_revision:int | 200 ScreeningRun | prescreen;E-03/05/07 |
| POST /runs/{id}/simulations | assumptions:Assumption[1..10] | 202 Simulation queued(0.2异步增量见9.3) | scenario_service;E-03/05/07/09 |
材料上传/候选确认沿用已存在的项目助手接口,开发前核对调用方。此处不新增平行上传入口。
不存在与无访问权的对象统一对外为 404 NOT_FOUND,页面文案“对象不可访问或不存在”;E-03 用于已授权对象上的无权动作。评测先做离线内部入口,不开放目标标签 API 给主审。
## 3. 数据字段候选
| 对象 | 字段 / 类型 / 空值 | owner |
|---|---|---|
| CaseTimeline | id, project_id, data_domain, revision;status:processing/ready/partial/failed;events:DecisionEvent[];warnings:string[] | history_cases |
| DecisionEvent | id;event_type:question/evidence/action/opinion/decision;occurred_at:datetime?;recorded_at:datetime;question:string;evidence_ids:string[];judgment_before:string?;judgment_after:string?;conditions:string[] | history_cases |
| Condition | field:string(标准字段白名单);operator:eq/in/present/absent;value:string/bool/string[]/null;数据类型按 operator 校验,不执行表达式 | 经验治理 |
| ExperienceCard | id, project_id, data_domain, revision;version:string;title;status:draft/in_review/published/rejected/withdrawn;source_event_ids:string[];conditions/ exceptions:Condition[];scope:project/team;team_id:string?;expires_at;reviewer_id:string?;policy_version:string? | 经验治理 |
| Finding | 复用既有 Finding;展示 title/result/evidence_ids/basis_ids/suggested_action/status;无依据只能 unknown,已有枚举不改名 | 预审编排 |
| ScreeningRun | id, project_id, data_domain, revision, snapshot_id;status 见第4节;recommendation:advance/supplement/stop/insufficient_information/null;findings:Finding[];missing_inputs:string[];applied_experiences:{id,version,reason,evidence_ids}[];probability:null;probability_reason:not_calibrated;degradations:{code,message}[];judgment_config:{enabled,profile_id?,profile_revision?,provider,model_version?,adapter_version?,prompt_version?,mapping_version?};versions:{schema,policy,skills,experiences,model,questions};created_at;finished_at:datetime? | 运行存储 |
| Judgment | id, run_id, question_id, question_version;type:choice/score/binary;status:completed/skipped/failed;answer:JudgmentAnswer?;evidence_ids:string[];provider:jev/local/disabled;profile_id:string?;profile_revision:int?;model_version:string?;native_metrics:NativeMetric[];error_code:string?;skip_reason:string? | judgment_provider |
| Assumption | action_id:string;description:string[1..1000];field_changes:{field,value}[];required_evidence_ids:string[] | scenario_service |
| Simulation | id, project_id, base_run_id;assumptions:Assumption[];changed_findings:{code,before,after,basis_ids}[];unresolved_findings:string[];formal_result:false;created_at | scenario_service |
| Evaluation | id, dataset_version, split_id;run_versions:object;locked_at:datetime?;status:prepared/running/locked/revealed/invalidated;metrics:{name,numerator,denominator,value?,scope}[] | prescreen_evaluation |
JudgmentAnswer、NativeMetric、JudgmentProfile 及配置选择规则统一详见 [专项判断模型切换](11-judgment-providers.md) 第3–5节。题型统一为 choice/score/binary;原草案中的 noul 是厂商语义,改由 Jev 适配器处理,不再进入业务题型。该草案从未实现,无已上线 API 迁移。未知可作为显式答案;completed 只表示完成该题处理与校验(允许缺证直接返回 unknown),不表示支持结论或项目通过。
Evidence 来源可定位不代表真实性已核验,真实性结果须单列 Finding。conditions 非空,team 范围必有 team_id;例外命中即排除;首次发布缺失 reviewer_id 不合法。撤回不删除历史引用。
迁移拟新增有版本守卫的历史事件/预审对象存储,具体 DDL 在 M1 定案;禁止覆写旧 schema_v2 初始化或复用旧生产库测试。
## 4. 状态机与权限
| 对象 | 合法转换 | 守卫与失败 |
|---|---|---|
| 历史过程 | processing→ready/partial/failed | 部分缺日期为 partial;重新提炼生成新 revision |
| 经验 | draft→in_review→published/rejected;rejected→draft;published→withdrawn | submit 由编辑者;approve/reject/withdraw 由发布角色;审核不能自批,编辑后重提审;过期在读取时排除 |
| 运行 | queued→running→completed/partial/awaiting_input/failed;queued/running→cancelled | awaiting_input 补件后创建新运行,旧运行保留;completed 不允许原地覆写 |
| 模拟 | queued→running→completed/partial/failed;可取消,详见9.5 | 不存在“应用到真实项目”捷径;真实材料按原确认流程进入新快照 |
| 评测 | prepared→running→locked→revealed;任一未完状态→invalidated | locked 前标签不可进入推理;发现泄漏保留作废理由 |
recommendation 在 queued/running 时为 null,终态仍可能为 insufficient_information;partial 不是通过。过时结果允许查看但显示版本差异,不能静默升级到新版本。
## 5. 错误与恢复
错误码与文案统一引用规格第5节,防止维护两份。补充 NOT_FOUND 的语义见第2节。403/422 不自动重试;408/429/5xx/连接错误可按预算重试一次,使用同一幂等键。无可恢复工作时终止并保留日志;不自动切换未批准厂商。
硬规则冲突保留原模型提案但有效 recommendation=stop;来源无法验证的判断为 unknown。若综合意见失去关键依据,降为 insufficient_information 或 supplement,必须记录缺失事项;具体业务“关键项”列表依方案版本管理,需 OQ-01 确认。
## 6. 边界清单
空材料/空经验集:展示 empty,允许现有规则核查,明确无历史经验支持。版本不支持:422;对象过时:409;跨项目和跨域:过滤+授权拒绝。不能将 lack of evidence 当成 yes/no 否定事实。
幂等键唯一范围 actor_id+project_id+operation+key,记录请求哈希;相同请求返回原对象,冲突 E-09。并发更新通过 revision 和事务;先写运行记录再入队,取消后禁止写成功结果。实施阶段须覆盖 Worker 崩溃后恢复。
## 7. 测试映射
history_cases→AC-01/02;经验治理与检索→AC-03/04/13;prescreen+policy→AC-05/06/07/08/12;judgment_provider→AC-09/16/17/18/19/20/21;工具策略→AC-10;scenario_service→AC-11;命令入口→AC-14;evaluation→AC-15。具体测试提案见验证方案,当前均不是已执行的新功能测试。
## 8. 未决项
OQ-01 业务类型和关键项;OQ-02 审核权限;OQ-03 模型出口;OQ-04 性能/预算与验收阈值;OQ-05 已确认会议事件的标签/窗口映射;OQ-06 独立仓库和部署资源。全部在决策记录中有 owner 和进入条件。本文件不可直接作为已批准实现合同。
## 9. 三模块闭环契约增量(0.2 / 未实现)
覆盖新增 BR-21–44 / E-16–26 / AC-22–45。本文是唯一业务契约说明,11 文档拥有 Judgment 子契约;14 文档解释流程,不复制类型。下列类型在独立 v2 后端 contracts 下落地,具体绝对路径由 T00 定案,不能直接在旧版新增平行持久化入口。
### 9.1 共用约束与枚举
Ref={id:string,version:string};EvidenceRef 使用既有证据 ID 与快照绑定,不接受浏览器自造授权。所有 ID/版本非空且最长128,字符串说明默认最长2000,时间为带时区 ISO8601。数组默认上限100,另有定义者从其定义;分页沿用第1节。金额使用十进制定点及币种/单位,不用浮点字符串直接运算。未知值使用 null,不使用 0 或空字符串代替。
Origin=history_derived/manual/policy_import;DataDomain=demo/production;KnowledgeKind=skill/rule。GovernanceStatus=draft/in_review/published/rejected/withdrawn。RuleEffect=advisory/hard。EventOutcome=approved/rejected/deferred/withdrawn/not_submitted/conditional/unknown;是否将 conditional 计入目标由 MappingProfile 固定,P0不得默认当approved。
知识候选中的条件复用 Condition 的安全表达方式;数值算子 gt/gte/lt/lte 作为候选 v2 扩展,必须声明字段类型、币种/单位并由程序校验,旧契约不接受时不能直接透传。禁止 eval、SQL 或自然语言直接执行。缺失输入为 unknown,不等于条件不成立。
### 9.2 类型字段与唯一 owner
| 对象 | 字段与约束(共同字段约定见上) | owner |
|---|---|---|
| ImportBatch | id,project_id,data_domain,revision,created_at;status:queued/parsing/ready/partial/failed/cancelled;items:ImportItem[1..100];total_bytes:int>=0;parser_version:string | 材料导入服务 |
| ImportItem | id,document_id:string?,relative_path:string[1..512],sha256:string[64],size_bytes:int>=0,mime_type:string;status:queued/parsing/parsed/failed;error_code:string?;observed_at:datetime?;received_at:datetime | 材料导入服务 |
| SourceLocator | document_id,document_version;kind:pdf/table/manual;page:int>=1?;sheet:string?;cell_range:string?;excerpt:string?;pdf必有page,table必有sheet和cell_range,manual必有说明;不得把任意本机路径当定位 | 证据层 |
| FactConflict | id,project_id,field:string,candidate_evidence_ids:string[2..100];status:unresolved/resolved;resolution_note:string?;selected_evidence_ids:string[];resolved_by:string?;resolved需后两项及说明 | 事实确认服务 |
| KnowledgeCard | id,project_id,data_domain,revision,version,kind,title:string[1..200],origin,status;source_event_ids:string[];source_evidence_ids:string[];parent_version:Ref?;created_by,edited_by;scope:project/team,team_id:string?;conditions/exceptions:Condition[];effective_at,expires_at;reviewer_id:string?;evaluation_ref:Ref?;dimensions:DimensionSpec[];content:SkillContent或RuleContent | 复用卡片治理 |
| SkillContent | required_fields:string[];allowed_tools:string[](仅已登记工具ID);steps:{id,instruction:string,tool_ids:string[]}[];output_schema_ref:Ref;missing_input_action:supplement/manual_review;stop_conditions:Condition[] | Skill注册服务 |
| RuleContent | effect:advisory/hard;predicate:Condition[];on_match:flag/block;basis_evidence_ids:string[];policy_ref:Ref?;authorization_ref:string?;hard发布必须具备正式依据和独立审核 | Rule注册服务 |
| DimensionSpec | id,label:string[1..80],order:int>=0;scale_id:string;scale_version:string;levels:{value:int,label:string,criterion:string}[];component_refs:Ref[];required:boolean;同ID必须语义/刻度一致 | 方案维度解析 |
| ReviewPlan | id,project_id,data_domain,version,revision,title,status:GovernanceStatus;data_card_refs/skill_refs/rule_refs/experience_refs:Ref[];dimensions:DimensionSpec[];critical_check_ids:string[];judgment_bindings:{task,profile_id,profile_revision}[];created_by,reviewer_id:string? | 方案治理 |
| TrajectoryStep | id,run_id,parent_step_id:string?,sequence:int>=0;kind:plan/skill/tool/rule/judgment/synthesis;component_ref:Ref?;input_refs/output_refs:string[];evidence_ids:string[];status:queued/running/completed/skipped/failed/cancelled;started_at:datetime?,finished_at:datetime?;reason_summary:string?;error_code:string?;latency_ms:int>=0?;cost:number>=0?;cost_currency:string? | 运行存储 |
| ReviewOutcome | id,project_id,meeting_id,revision,occurred_at:datetime,recorded_at:datetime;reviewed_snapshot_id:string?;raw_code:string[1..100];normalized:EventOutcome;mapping_ref:Ref?;label:bool?;conditions:string[];evidence_ids:string[1..100];status:matched/unmatched;supersedes_id:string?;recorded_by:string | 会议结果服务 |
| ImprovementCandidate | id,project_id,data_domain,revision;target:knowledge/orchestration/question_profile;target_ref:Ref;source_run_ids/outcome_ids:string[];change_summary:string;proposed_revision_ref:Ref;status:draft/evaluating/ready/in_review/approved/rejected/released/withdrawn;evaluation_ref:Ref?;reviewer_id:string?;released_ref:Ref? | 改进治理 |
| DatasetManifest | id,version,data_domain,seed:int?,generator_version:string?;template_version:string?;source_hash:string;split_id:string;split_policy_version:string;group_assignments_ref:string;counts:{outcome,count:int>=0}[];created_at;synthetic:boolean | 数据集服务 |
| ProbabilityView | target_event:company_review_meeting_pass;snapshot_id;as_of:datetime;real_estimate:null(P0);reason:not_calibrated;demo_estimate:DemoEstimate? | 概率呈现服务 |
| DemoEstimate | value:number[0..1];source:synthetic_demo;scenario_table_version:string;scenario_key:string;label:string(固定人工设定说明);仅demo域 | 演示估计服务 |
KnowledgeCard 是既有 Skill/Rule 注册对象的目标投影,不新建第二套发布库;ExperienceCard 仍保存支持方法/规则的历史过程依据,二者用 Ref 关联。历史提炼来源必有 source_event_ids 或 source_evidence_ids;manual 可以无历史案例,但 hard 发布仍需正式依据。policy_import 不自动获得 hard 权限。撤回保留旧引用,过期状态在使用时派生。
ReviewOutcome.label 仅在明确 mapping_ref 且材料版本 matched、结果有可用二元映射时有值;withdrawn/not_submitted/deferred/unknown 均为 null。结果更正生成新 id 并指向 supersedes_id,拒绝跨项目或循环更正。后台保留变更审计,禁止改写已锁定评测;受影响评测追加失效/重算记录。
TrajectoryStep 的输入/输出正文通过授权存储引用访问;cost 缺失时币种也为空;failed 必有 error_code。序号在 run 内唯一,父步骤必须属于同 run,无循环。正文输出按数据策略脱敏,不存密钥或隐藏思维链。
### 9.3 现有草案对象增量
- ScreeningRun 新增 plan_ref:Ref、trajectory_id:string、run_instruction:string[0..2000]、dimension_results:{id,stage:int?,state:unknown/checked/blocked,basis_ids:string[]}[]、probability_view:ProbabilityView。原 probability:null 与 probability_reason:not_calibrated 保留;probability_view.real_estimate 在P0也必须为空,不形成两套不同数值。
- POST /projects/{project_id}/runs 新增必填 plan_ref:Ref 和可选 run_instruction;快照仍必填。原单一专项profile选项保留为默认绑定,ReviewPlan.judgment_bindings 按 task 精确覆盖;存在冲突或指定不支持任务则拒绝。首次实现前固化解析优先级测试。
- Assumption 新增 kind:information/business_change、preconditions:Condition[]、conflicts_with:string[];field_changes 仅允许方案声明的可模拟字段,不能写审批状态或正式事实。required_evidence_ids 缺失不允许说真实核验已完成;纯假设显示未落实前提。
- Simulation 新增 revision、selection_hash:string、status:queued/running/completed/partial/failed/cancelled、probability_view:ProbabilityView?、error_code:string?、frozen_versions:object(与base_run匹配)。异步创建从原201调整为202;原型没有业务API,因此无线上兼容迁移。空选择客户端恢复基线,不创建空情景。
- JudgmentProfile 增量由11第8节定义;不在本节维护第二份模型字段。
### 9.4 候选接口补充
统一权限/幂等/expected_revision/error格式沿用第2节;以下全部未实现。GET按对象范围检查,列表用limit/cursor,返回items/next_cursor;跨域/不可访问对象404。拟新增请求参数必须在T00/T02契约定案及对应OpenAPI中完整列出,未定案不开始接口实现。
| 接口 | 输入 / 输出 | 权限 / 错误 |
|---|---|---|
| 既有材料上传/确认入口扩展 | 增加batch_id及SourceLocator;通过当前调用方核对实际路径,不建立平行上传API | 项目材料编辑;E-01/03/04/16/17 |
| POST /projects/{project_id}/import-batches | manifest:{relative_path,mime_type,size_bytes,sha256}[1..100];202 ImportBatch;实际字节仍走原上传链并校验服务端哈希/大小 | 材料编辑;E-07/09/16 |
| GET /import-batches/{id} | 200 ImportBatch | 项目查看;404 |
| POST /import-batches/{id}/retry | item_ids:string[1..100],expected_revision;202 ImportBatch;仅失败项 | 材料编辑;E-05/07/09 |
| POST /projects/{project_id}/knowledge-candidates | kind,origin,content,source_event_ids,source_evidence_ids,conditions,exceptions,scope,expires_at;201 KnowledgeCard draft;服务端决定创建人/状态/版本 | 提议者;E-03/04/07/18;完整body以9.2字段约束定案 |
| PATCH /knowledge-candidates/{id} | expected_revision及允许编辑字段;200新草稿修订;已发布生成新版本对象 | 编辑者;E-03/05/07 |
| POST /knowledge-candidates/{id}/transitions | action:submit/approve/reject/withdraw,expected_revision,note;200 KnowledgeCard;委托同一治理服务 | 发布按独立资格;E-03/05/07/18/24 |
| POST /projects/{project_id}/review-plans | 方案字段(不含服务端ID/状态/审阅人);201 ReviewPlan draft | 方案编辑;E-03/07/19/20 |
| POST /review-plans/{id}/transitions | action:submit/approve/reject/withdraw,expected_revision,note;200 ReviewPlan | 独立发布资格;E-03/05/19/20 |
| GET /runs/{id}/trajectory | 200 {run_id,steps:TrajectoryStep[],next_cursor};seq稳定分页 | 项目查看;404;按当前权限解析引用 |
| POST /projects/{project_id}/review-outcomes | meeting_id,occurred_at,reviewed_snapshot_id?,raw_code,conditions,evidence_ids,supersedes_id?;201 ReviewOutcome;服务端映射label | 指定评审记录人;E-03/04/07,E-23/26为已保存记录警示 |
| POST /projects/{project_id}/improvements | target,target_ref,source_run_ids,outcome_ids,change_summary,proposed_revision_ref;201 ImprovementCandidate draft | 提议者;E-03/04/07 |
| POST /improvements/{id}/transitions | action:evaluate/submit/approve/reject/release/withdraw,expected_revision,note;200 ImprovementCandidate | 审核与发布独立资格;E-03/05/24;release委托既有发布入口 |
提炼作业、数据生成与评测先做内部受控任务;不开放任意prompt/文件路径/SQL执行API。新增读取卡片、方案、会议结果和改进列表在T02沿既有组件目录/对象查询接口扩展;实际URL与所有前端消费字段须在Contract gate前补齐,当前明确为阻塞项,不由实现者临时猜路径。
### 9.5 状态、恢复与存储要求
| 对象 | 转换与守卫 | 失败/恢复 |
|---|---|---|
| ImportBatch | queued→parsing→ready/partial/failed;queued/parsing→cancelled;partial/failed可仅重试失败items | 已成功条目不重复写入;确认事实另走授权流程;取消后忽略迟到结果 |
| 卡片/方案 | draft→in_review→published/rejected;rejected→draft;published→withdrawn | 审核不能自批;已发布编辑创建新draft版本;依赖撤回后新运行拒绝、旧运行保留 |
| Simulation | queued→running→completed/partial/failed;queued/running→cancelled | 新选择生成新记录;前端按selection_hash+请求序号接收;错误保留基线 |
| 会议结果 | 追加保存matched/unmatched;核对关联通过追加修订记录 | 无证据拒绝;E-23/26可保存但不计有效标签;更正不改原运行 |
| ImprovementCandidate | draft→evaluating→ready或rejected;ready→in_review→approved或rejected;approved→released;released→withdrawn | rejected可新建修订draft;评测失败保留原因;release引用已有不可变发布结果 |
改进发布与卡片发布同一事务/幂等命令边界,不允许一边标released一边没有对应版本;若复用服务跨事务,须在详细实现设计中明确outbox/恢复协议并有故障测试。评测锁定后才揭示结果;标签污染任何阶段均可追加作废记录。
存储优先现有对象/版本/审计机制,通过追加迁移保存新增类型;唯一键至少覆盖run+sequence、project+版本引用、命令幂等范围。完整DDL、索引、读写白名单及迁移前后恢复测试属于T02门禁,当前未建表。新数据根与旧库物理隔离由T01验证。
### 9.6 验收映射与当前限制
导入/冲突→AC-23/24;来源与治理→AC-25/26/27/43;方案/维度→AC-28/29/44;概率/沙盘→AC-30/31;轨迹/结果→AC-22/32/33;改进→AC-34/41;数据集→AC-35/36;业务指标→AC-37;专项准入/冻结/预算→AC-38/39/40;卡片UI→AC-42;建议边界→AC-45。
本节明确了候选类型和写路径,但读接口完整清单、DDL、生产角色映射、容量/模型时延及实际目录尚未定案。T00先关闭首个实施切片的缺口,不能以“文档写完”宣布全部Contract gate通过。