创建人员:dev.developer.ana.cai
文件职责:append-only 关闭 V009 唯一 terminal-outcome ErrorCode 阶段域矛盾。
predecessor:V009=6927/50f76a6356d6048656e672c4c68d241b152fc3c4b792931f11cfec40b9b2706c;review=AUDIT-DEV-ANA-HIBOR-FAST-COLLECTION-DESIGN-V009=HOLD/1/1,audit snapshot=409465/d8b7f332ef15f85b23ec86bce8b78e278f7b50ac590c9389feb7c1aeef410d09。
继承:V009 七种 Z outcome、51-key public wire 和 V001–V008 已关闭合同全部不变。V010 只后继 V006 第 4 节,增加 terminal phase 的权威 ErrorCode overlay。
error_origin=PACKAGE|TERMINAL 为内部 validator 参数,不新增 public key:
COMMON ∪ STAGE_CODES[state],用于 Z writer 调用前发生的业务/package 错误。TERMINAL_OUTCOME_CODE[outcome,source_state],不得再套用 V006 source-state stage code。这样 P06–P09 可如实记录 terminal writer 的 RECOVERY_UNKNOWN/PROCESS_LIVENESS_UNKNOWN,而不把它误当 manifest/delivery/timing 业务错误。T00U 属 PACKAGE;T00B 属 PACKAGE/common deadline;T01/T02/T03F/T03L 属 TERMINAL;T04 使用已验证的原 item outcome,不产生新 error。
R=RECOVERY_UNKNOWN,L=PROCESS_LIVENESS_UNKNOWN,D=DEADLINE_EXPIRED,P=PERSIST_LATE,Q=QUOTA_LEDGER_INVALID,ITEM(Pxx)=V006 对该 source state 已唯一验证的原 item code(含 NONE 或 DUPLICATE_EXISTING_ARTIFACT),X=事实不可达且必须拒绝。
| outcome | P00 | P01 | P02 | P03 | P04 | P05 | P06 | P07 | P08 | P09 |
|---|---|---|---|---|---|---|---|---|---|---|
| T00U pre-Z object U | R | R | Q | R | R | R | P | P | P | X |
| T00B known budget exhausted | D | D | D | D | D | D | D | D | D | D |
| T01 Z known absent after attempted create | P | P | P | P | P | P | P | P | P | P |
| T02 Z known partial/invalid | P | P | P | P | P | P | P | P | P | P |
| T03F Z file facts unknown, operation complete | R | R | R | R | R | R | R | R | R | R |
| T03L Z writer liveness unknown | L | L | L | L | L | L | L | L | L | L |
| T04 Z valid | ITEM(P00) | ITEM(P01) | ITEM(P02) | ITEM(P03) | ITEM(P04) | ITEM(P05) | ITEM(P06) | ITEM(P07) | ITEM(P08) | ITEM(P09) |
ITEM(Pxx) 不是自由占位:其定义是 V006 build_terminal_item(validated_snapshot,outcome).stop_code 的返回值;测试逐 ErrorCode 枚举展开,而实现只接受该已验证值,不能另选。T04 的 terminal receipt error_code=null;原 item code 仍保留在 TerminalItem/top-level outcome,二者不可互相覆盖。
T00U 的 state 表示 U 之前最高 durable state:M=U→P06,D=U→P07,T=U→P08;P09 已表示 timing=V,故 pre-Z object U 不可达。P02 的 U 是 quota terminal U,故 Q;P03–P05 是 cache/staging/artifact/recovery U,故 R。
| outcome | top-level internal/public status | exit | top stop_code | item handling |
|---|---|---|---|---|
| T00U | STATE_UNCERTAIN | 27 | 上表 code | source state + STOPPED + 同 code |
| T00B | TIME_BUDGET_STOP | 10 | DEADLINE_EXPIRED | source state + STOPPED + D |
| T01 | INTERNAL_ERROR | 20 | PERSIST_LATE | source state + STOPPED + P |
| T02 | INTERNAL_ERROR | 20 | PERSIST_LATE | source state + STOPPED + P |
| T03F | STATE_UNCERTAIN | 27 | RECOVERY_UNKNOWN | source state + STOPPED + R |
| T03L | STATE_UNCERTAIN | 27 | PROCESS_LIVENESS_UNKNOWN | source state + STOPPED + L |
| T04 | inherited V004/V006 mapping | inherited | original item/top outcome | unchanged;state=P10 |
T01/T02 不得被归入 TIME_BUDGET_STOP;T03F/T03L 不得被归入 INTERNAL_ERROR;T04 不得因 receipt.error_code=null 抹掉原 item failure/duplicate outcome。
当前状态:PENDING_INDEPENDENT_DESIGN_REREVIEW。V010 PASS 前不创建候选源码/测试/quota ledger,不运行 Python/ADB/APP/dry-run,不触发下载;新增 trigger=0。