# 慧博 10 分钟快速采集工具开发方案 V011 创建人员:`dev.developer.ana.cai` 文件职责:append-only 关闭 V010 的 pre-Z U、T01/T02 precedence、T04 reachable/public-null 三项。 predecessor:V010=`4760/a8a2524bab871e8ab076e3e6e5dc4630f6cd7a904b7da9f4e3f7ba5425c4d694`;review=`AUDIT-DEV-ANA-HIBOR-FAST-COLLECTION-DESIGN-V010=HOLD/3/3`,audit snapshot=`415511/5b96c40ddfe18298b0ea584c54c8dd3108adae5ba5a4a4ea7ca96b385d6e85d8`。 继承:V009 的七个 Z outcome/51-key wire、V008 receipt、V007 no-U-to-P10、V006 package matrix 及 V001–V005 已关闭合同不变。V011 替换 V010 第 2–3 节中有歧义的 P06–P08/T01/T02/T04 映射。 ## 1. pre-Z M/D/T U 按真实原因二分 内部 `EvidenceUncertaintyReceipt` 固定 6 键:`object_kind,source_state,presence,operation_completed,liveness_unknown,error_code`。类型:`object_kind=M|D|T`;`source_state=P06_PUBLISHED|P07_MANIFESTED|P08_DELIVERY`;`presence=U`;其余类型同 V009。 仅允许六个 literal: | object/state | file/evidence facts unknown,writer 已完成 | writer liveness unknown | |---|---|---| | M / P06 | `U,true,false,RECOVERY_UNKNOWN` | `U,null,true,PROCESS_LIVENESS_UNKNOWN` | | D / P07 | `U,true,false,RECOVERY_UNKNOWN` | `U,null,true,PROCESS_LIVENESS_UNKNOWN` | | T / P08 | `U,true,false,RECOVERY_UNKNOWN` | `U,null,true,PROCESS_LIVENESS_UNKNOWN` | 六行均为 `T00U→STATE_UNCERTAIN/27`,保持 source state、Z=N、Z writer call=0。`PERSIST_LATE` 只表示 known N/I 或已知超时/晚到事实,不允许 presence=U;因此 V010 T00U 的 P06/P07/P08=`P` 正式废止。P09 的 pre-Z M/D/T U 仍 X,因为进入 P09 已证明 T=V。 ## 2. T01/T02 原始原因与全局 precedence 内部 `TerminalOperationCause=DEADLINE|ENVIRONMENT|VALIDATION|INTERNAL`。terminal candidate 唯一映射: | Z outcome/cause | terminal candidate internal status | public | exit | code | |---|---|---|---:|---| | T01/DEADLINE | TIME_BUDGET_STOP | TIME_BUDGET_STOP | 10 | DEADLINE_EXPIRED | | T01/ENVIRONMENT | BLOCKED_ENVIRONMENT | BLOCKED_ENVIRONMENT | 14 | PERSIST_LATE | | T01/INTERNAL | INTERNAL_ERROR | INTERNAL_ERROR | 20 | PERSIST_LATE | | T01/VALIDATION | X | X | X | X | | T02/DEADLINE | TIME_BUDGET_STOP | TIME_BUDGET_STOP | 10 | DEADLINE_EXPIRED | | T02/ENVIRONMENT | BLOCKED_ENVIRONMENT | BLOCKED_ENVIRONMENT | 14 | PERSIST_LATE | | T02/VALIDATION | VALIDATION_FAILED | VALIDATION_FAILED | 16 | PERSIST_LATE | | T02/INTERNAL | INTERNAL_ERROR | INTERNAL_ERROR | 20 | PERSIST_LATE | `original_status` 必须是 V004 11 个 internal TerminalStatus 之一。最终 top-level status 为 `resolve_precedence(original_status,terminal_candidate)`:按 V004 precedence 1..11 选 rank 较小者;若原 outcome 是 SUCCESS 且 Z 失败,仅 terminal candidate 生效。status→public/exit 只再调用 V004 唯一表一次。于是 access-control、state-uncertain、deadline 等原始高优先级不会被 T01/T02 覆盖,T01/T02 也不再无条件 INTERNAL_ERROR/20。 item overlay 使用最终 status 的精确 stop source:若 original 赢,保留 original code;若 terminal candidate 赢,使用上表 code;同 rank 只允许同 status,code 优先保留 original non-NONE,否则 terminal code。所有 `11×7` 合法 Cartesian 组合必须测试,T01/VALIDATION 的 11 个组合全部 X。 ## 3. T04 可达集合与 internal/public code 分离 内部字段明确分开:`internal_item_code:ErrorCode` 永不 null;`public_stop_code:ErrorCode|null`。唯一投影:`NONE→null`;任何非 NONE 合法 ErrorCode→同枚举值。receipt `error_code=null` 只表示 Z 写入成功,不参与 item code 投影。 T04 只允许下列 10 行,不存在 default: | closure | lane | source_state | item status | internal_item_code | public_stop_code | |---|---|---|---|---|---| | C01 | NEW | P06\|P07\|P08\|P09 | SUCCESS | NONE | null | | C02 | NEW | P05\|P06\|P07\|P08\|P09 | DUPLICATE | DUPLICATE_EXISTING_ARTIFACT | DUPLICATE_EXISTING_ARTIFACT | | C03 | PURE | P06\|P07\|P08\|P09 | SUCCESS | NONE | null | | C04 | PURE | P06\|P07\|P08\|P09 | DUPLICATE | DUPLICATE_EXISTING_ARTIFACT | DUPLICATE_EXISTING_ARTIFACT | | C05 | NEW\|PURE | P00 | STOPPED | V006 P00 STOP_CODES only | same non-null code | | C06 | NEW | P01\|P02 | STOPPED | V006 source STOP_CODES only | same non-null code | | C07 | NEW | P02\|P03 | STOPPED | V006 source STOP_CODES only | same non-null code | | C08 | NEW | P03\|P04\|P05 | FAILED | `FAIL_CODES∩V006 allowed[source]` | same non-null code | | C09 | NEW | P06\|P07\|P08\|P09 | STOPPED\|FAILED | V006 allowed[source] 且 status/code 分类一致 | same non-null code | | C10 | PURE | P06\|P07\|P08\|P09 | STOPPED\|FAILED | V006 allowed[source] 且 status/code 分类一致 | same non-null code | 精确排除:P00–P05 的 SUCCESS;PURE P01–P05;C01/C03 的 DUPLICATE;C02/C04 的 SUCCESS;C05–C10 的 NONE;STOPPED 携 FAIL_CODES;FAILED 携 STOP_CODES;任一 closure/lane/source 不在表中。故 T04 不再把所有 `ITEM(Pxx)` 泛化为可达。 T04 top-level status/public/exit 由合法 item status 按 V004 映射:SUCCESS→SUCCESS/ACCEPTED/0,DUPLICATE item 在 batch top-level 由实际 aggregate 决定 SUCCESS 或 PARTIAL_SUCCESS,不由 receipt 自选;STOPPED/FAILED 进入全局 aggregate precedence。无论 aggregate 如何,item `public_stop_code` 都按本节投影。 ## 4. V010 7×10 的后继解释 - T00U/P06–P08 由第 1 节六个 literal 替换;不再出现 PERSIST_LATE+U。 - T01/T02 每个 source_state 都先按第 2 节 cause 生成 candidate,再与 original_status 做全局 precedence;source_state 不改变 cause。 - T03F/T03L 仍分别固定 RECOVERY_UNKNOWN/PROCESS_LIVENESS_UNKNOWN,STATE_UNCERTAIN/27。 - T04 仅使用第 3 节 10 行,不再使用 V010 的宽泛 `ITEM(Pxx)` 单元。 ## 5. 强制测试 1. M/D/T × file-U/liveness-U 六个 literal,分别断言 R/L、27、Z writer=0;PERSIST_LATE+U 全拒绝。 2. T01 三 cause、T02 四 cause;每个与 11 original_status 做 precedence Cartesian,T01/VALIDATION 全 X;验证 top status/public/exit/code winner。 3. 第 3 节 10 行正向覆盖所有 source alternatives;全 closure×lane×P00–P09×四 item status 枚举,只有表内组合可达且 predicate count=1。 4. internal NONE/public null、duplicate same-code、STOP/FAIL same-code 各正向;internal null、public NONE、NONE+non-null、non-NONE+null 全拒绝。 5. T04 receipt error_code 始终 null,但不得覆盖 item code;51-key public wire 与 item 26-key schema equality 回归。 6. V001–V010 全量测试不减少;设计 PASS 后才允许创建候选实现。 当前状态:`PENDING_INDEPENDENT_DESIGN_REREVIEW`。V011 PASS 前不创建候选源码/测试/quota ledger,不运行 Python/ADB/APP/dry-run,不触发下载;新增 trigger=`0`。