按 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>
173 lines
23 KiB
Markdown
173 lines
23 KiB
Markdown
# 兴邦预审 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通过。
|