# CODE-DESIGN-ANA-SEMI-ROOT-PREFLIGHT-ORCHESTRATION-V007-V019 - plan_id: `CODE-DESIGN-ANA-SEMI-ROOT-PREFLIGHT-ORCHESTRATION-V007-V019` - role_instance_id: `dev.developer.ana.cai` - created_at: `2026-07-26T13:27:07.6111762+08:00` - predecessor_plan: `CODE-DESIGN-ANA-SEMI-ROOT-PREFLIGHT-ORCHESTRATION-V007-V018` / `23056/1a9b8debc04ca1f29240d55af947e147857ffc28aa9295d95e401cbeeb671744` - predecessor_review: `AUDIT-DEV-ANA-SEMI-ROOT-PREFLIGHT-ORCHESTRATION-V007-PRECONSUMPTION-REPAIR-PLAN-V018=HOLD/2/2` / `190678/0934e8a17eafa03fc6971760eec8408db6257e49f8de748fcfea1d7b4b39d6c3` / line `1598` - status: `PENDING_INDEPENDENT_PREFLIGHT_REPAIR_PLAN_REREVIEW` - implementation_authorization: `NOT_ISSUED` - P01-P08/R3/synthetic/database/BATCH-001: `ABSENT/HELD/HELD/HELD/HELD` V019 只关闭 `BLOCK-V018-01/02`。V018 已通过的 provider precedence 4 行、selector 15 行、functional case_total=30、Win32 CommandLine、P08 八行字段、tool/argv、DateTimeOffset、native hash DAG 与 native-only communication 全部继承且不得回退。本版不物化源码、测试、run 或 target,也不启动任何 PowerShell、csc、synthetic、proof、config-editor、mysql、SQL、database、network 或 credential 动作。 ## 1. BLOCK-V018-01:API negative actual observation 的可复演证据 ### 1.1 API_RESULT V004 的完整 property/type observation V018 `API_RESULT V003` 被本节完整取代。V019 的 `API_RESULT V004` 固定 key 顺序为: `actual_object_count,actual_property_count,actual_property_names,actual_property_names_sha256,actual_property_types,actual_property_types_sha256,actual_type_names,api_id,expected_object_count,expected_property_count,expected_property_names,expected_property_names_sha256,expected_property_type_rules,expected_property_type_rules_sha256,expected_type_name,observation_status,status,stop_code` 类型/null: - object/property count 为 `INT32`;actual property count 在 object_count!=1 或 type missing 时为 null,其余非负;expected object_count=1、property_count>0。 - actual/expected property names、actual property types、expected property type rules 均为 `ARRAY|null`;非 null 时长度分别等于对应 property_count。 - 四个 property SHA-256 字段为 `lowercase64|null`。preimage 均为对应数组元素 strict UTF-8、单一 `0x0A` 连接、无尾 LF;数组为 null 时 hash 必须为 null。 - actual type names 为 non-null `ARRAY`,长度必须等于 actual_object_count,按实际 pipeline ordinal;无 PSTypeName 的单对象写 `""`,不得伪造类型。 - observation_status 仍为 `SINGLE_VALID|ZERO_OBJECTS|MULTIPLE_OBJECTS|TYPE_MISSING|TYPE_DRIFT|PROPERTY_MISSING|PROPERTY_EXTRA|PROPERTY_ORDER_DRIFT|PROPERTY_TYPE_DRIFT`。 - row status=`MATCH|MISMATCH`;stop_code=`null|API_RESULT_MISMATCH`。success API row 只在 `SINGLE_VALID` 且 actual 全字段符合 expected 时 MATCH。 property type 的规范表示:实际非 null 值使用 `GetType().FullName`;实际 null 使用字面量 ``。expected rule 只允许:`STRING_NONNULL|STRING_OR_NULL|INT64_OR_NULL|INT32_OR_NULL|BOOL_OR_NULL`。验证器先按 property name/order 定位,再逐值验证 rule;只有 name/order 都合法后才判 property type。 ### 1.2 Invoke API 的固定 22-property sentinel 八个 negative runtime case 全部针对 `Invoke-AnaSemiPreconsumptionPreflight`,expected type=`ANA.SEMI.PRECONSUMPTION.RESULT.V002`。基础 sentinel 使用 V016 已审核的 22 个 property,名称以 LF 连接、无尾 LF: ```text authorization_id authorized_at_utc_ticks authorized_outer_started candidate_run_exists credential_access database_connection_performed exception_type expires_at_utc_ticks finished_at history_hash_mismatch_count invocation_count materialized_target_count network_access now_utc_ticks preflight_stage related_process_count result_schema_id started_at status stop_code target_existing_count uncertain_field ``` 该 name preimage=`403/4c3f8d873a6be20c0e449c6c6d1f196204ec8c3dfa399e3a5ee0e19f5fa153a2`。 基础 actual property type vector 固定为: ```text System.String System.Int64 System.Boolean System.Boolean System.Boolean System.Boolean System.Int64 System.String System.Int32 System.Int32 System.Int32 System.Boolean System.Int64 System.String System.Int32 System.String System.String System.String System.Int32 ``` preimage=`283/f57a1652d597b9cdea4dda4075701e2447e41d3d59261809f434ab62d9927cdd`。 expected rule vector 固定为: ```text STRING_NONNULL INT64_OR_NULL BOOL_OR_NULL BOOL_OR_NULL BOOL_OR_NULL BOOL_OR_NULL STRING_OR_NULL INT64_OR_NULL STRING_NONNULL INT32_OR_NULL INT32_OR_NULL INT32_OR_NULL BOOL_OR_NULL INT64_OR_NULL STRING_NONNULL INT32_OR_NULL STRING_NONNULL STRING_NONNULL STRING_NONNULL STRING_OR_NULL INT32_OR_NULL STRING_OR_NULL ``` preimage=`311/e885db2cbe8b0b81f858c539da5c6f310a4db7501690f6481976e7704ac4ceaa`。 sentinel 值固定为:`authorization_id="AUTH-SENTINEL"`,ticks=`1,2,1`,五 BOOL=false,五 count=`0`(invocation_count=1),started_at=finished_at=`2000-01-01T00:00:00.0000000Z`,stage/status=`PASS`,result_schema_id 为 expected type,三个 nullable STRING=`null`。任何 mutation 只能做 1.3 指定的一个变更。 ### 1.3 八个固定 negative runtime cases P03 `api_negative_cases` 与 P06 `api_negative_results` 均由 3 行升级为恰好 8 行,按 case_id ordinal 排序: | case_id | 唯一 mutation | expected observation | expected actual object/type/property evidence | |---|---|---|---| | INVOKE-ZERO | suppress all output | ZERO_OBJECTS | 0, [], property fields/hash 全 null | | INVOKE-TWO | emit two independent base sentinel objects | MULTIPLE_OBJECTS | 2, [expected,expected], property fields/hash 全 null | | INVOKE-TYPE-MISSING | remove only PSTypeNames[0] | TYPE_MISSING | 1, [""], property fields/hash 全 null | | INVOKE-TYPE-DRIFT | replace only PSTypeNames[0] with `ANA.SEMI.PRECONSUMPTION.RESULT.WRONG.V001` | TYPE_DRIFT | 1, [wrong type], property count=22, valid names/type vectors/hashes | | INVOKE-PROPERTY-MISSING | remove only `stop_code` | PROPERTY_MISSING | count=21; names=`bab64f935f2e77a536ff1f6a576874f197a46f9239561b16e0a0d2091dc9bf13`/393; types=`a9e9390d4c7612b23f68732d7e388123f0b5f164ac0bca567abe1c890eaec197`/276 | | INVOKE-PROPERTY-EXTRA | append only `zz_extra="x"` | PROPERTY_EXTRA | count=23; names=`21b206ce03a18a0521226e5e86944baf71ee20aa4fab226b3471692322acc991`/412; types=`8f10cdc1f7b6e05f3774537beed5a0a297630af7c018e59f298e8186f7078d46`/297 | | INVOKE-PROPERTY-ORDER | swap only ordinal positions of `status` and `stop_code` | PROPERTY_ORDER_DRIFT | count=22; names=`67a409a25891a90ba0e353f773bc3895364f820e525bbcccb73491e5ac5515e5`/403; types=`d969f373480ec41d5dcf7038c51dccb7f8876643b0581ab37a5622c8872ed78f`/283 | | INVOKE-PROPERTY-TYPE | replace only `authorization_id` value with INT32 1 | PROPERTY_TYPE_DRIFT | count=22; names=valid; types=`9cb2c7d0a2f931ee0db92764031d799a24414f0599130975f56accbbf3360777`/282 | 每行 expected_property_names/rules 仍保存完整 valid 22-row vectors与 hash。TYPE_DRIFT 行实际 property evidence 也必须保留,不能因 type 不符丢弃。defect 优先级保持 `TYPE_MISSING > TYPE_DRIFT > PROPERTY_MISSING > PROPERTY_EXTRA > PROPERTY_ORDER_DRIFT > PROPERTY_TYPE_DRIFT`;zero/multiple 在单对象验证之前终止。 API_NEGATIVE_CASE V004 keys: `api_id,case_id,expected_actual_object_count,expected_actual_property_count,expected_actual_property_names_sha256,expected_actual_property_types_sha256,expected_actual_type_names,expected_observation_status,probe_behavior` API_NEGATIVE_RESULT V004 keys: `actual_object_count,actual_property_count,actual_property_names,actual_property_names_sha256,actual_property_types,actual_property_types_sha256,actual_type_names,api_id,case_id,expected_actual_object_count,expected_actual_property_count,expected_actual_property_names_sha256,expected_actual_property_types_sha256,expected_actual_type_names,expected_observation_status,expected_property_count,expected_property_names,expected_property_names_sha256,expected_property_type_rules,expected_property_type_rules_sha256,expected_type_name,observation_status,status,stop_code` 所有字段类型/null 继承 1.1;expected_actual_property_* 对零/多/type-missing 为 null。row status=MATCH 仅当 actual observation 与 case expected 全字段相同;否则 MISMATCH/`API_NEGATIVE_EVIDENCE_MISMATCH`。P06 不得只复制 expected enum。 P06 summary 的 negative 计数升级为 `api_negative_total_count=8`,pass+fail=8;顶层 TEST_PASS 要求 fail=0。四个 success `api_results` 仍独立为 4 行,不进入 functional case_total=30。 ## 2. BLOCK-V018-02:source invalid 与 timeout-known total mapping ### 2.1 native final V003 与 state identity V018 native final V002 被 V003 取代。顶层 key 顺序升级为: `artifact_rows,closure_state,final_exit_code,final_status,final_stop_code,manifest_external_bytes,manifest_external_sha256,prepackage_variant,schema_id,state_id` - schema_id=`ANA.SEMI.PRECONSUMPTION.NATIVE.FINAL.V003`。 - state_id 非空,enum=`C00` 至 `C39`;恰好匹配本版唯一 overlay。 - C00-C19 未被本版明确 supersede 的字段保持 V018 值;C03-C06 仍只表示 attempted-no-output;C20-C23 专门表示可安全复开的 materialized-invalid source。 - artifact row 仍是 P01-P08 恰好八行与 V018 六字段 tuple。V/F/S upstream_stop_code=null;A/I/N 使用本 state 的 final_stop_code,除 base vector 的 `STATIC_TEST_FAILED|CONTRACT_TEST_FAILED` 继承值。 ### 2.2 source create 的 A|I 唯一分支 V018 C03-C06 保持 A 分支。新增四个 I 分支: | state | top-level | P01 | P02 | P03 | P04 | P05-P08 | |---|---|---|---|---|---|---| | C20 | NATIVE_ONLY/STOP/SOURCE_CREATE_STOP/21 | I | N | N | N | N | | C21 | NATIVE_ONLY/STOP/SOURCE_CREATE_STOP/21 | V | I | N | N | N | | C22 | NATIVE_ONLY/STOP/SOURCE_CREATE_STOP/21 | V | V | I | N | N | | C23 | NATIVE_ONLY/STOP/SOURCE_CREATE_STOP/21 | V | V | V | I | N | C03-C06 的当前 target 必须为 A,C20-C23 的当前 target 必须为 I;不存在自由选择。I 只在文件已关闭、只读独占复开成功、actual bytes/hash 可安全取得时合法;否则 liveness/handle/evidence 不确定进入 C10/U/27。下游 N 的 upstream=`SOURCE_CREATE_STOP`。 ### 2.3 timeout-killed-known 的完整合法前缀 `timeout-killed-known` 只在以下条件全部成立时使用:outer timeout 已发生;kill/wait 完成;child_liveness=`EXITED`;`actual_outer_exit_code:INT32` 非 null并只记录于 parent process result;所有已物化文件均已关闭且只读复开/bytes/hash 完成;P05→P06→P07 的 writer-open 顺序可由 durable sidecar/文件事实唯一判定。任一条件不成立必须 C10/U/27。 C09 是已知 `N,N,N` 前缀。新增 C24-C39;P01-P04 均为 V,P08 均为 `N(OUTER_TIMEOUT_KILLED_KNOWN_PREFIX)`,top-level 均为 `NATIVE_ONLY/STOP/OUTER_TIMEOUT_KILLED_KNOWN_PREFIX/24`: | state | P05 | P06 | P07 | prepackage_variant | |---|---|---|---|---| | C09 | N | N | N | null | | C24 | A | N | N | null | | C25 | I | N | N | null | | C26 | F | N(STATIC_TEST_FAILED) | N | null | | C27 | F | N(STATIC_TEST_FAILED) | A | null | | C28 | F | N(STATIC_TEST_FAILED) | I | null | | C29 | F | N(STATIC_TEST_FAILED) | V | STATIC_FAIL | | C30 | V | A | N | null | | C31 | V | I | N | null | | C32 | V | F | N | null | | C33 | V | F | A | null | | C34 | V | F | I | null | | C35 | V | F | V | CONTRACT_FAIL | | C36 | V | V | N | null | | C37 | V | V | A | null | | C38 | V | V | I | null | | C39 | V | V | V | PASS | 表中 A/I 的 upstream=`OUTER_TIMEOUT_KILLED_KNOWN_PREFIX`;F 的 upstream=null。P06 的 `N(STATIC_TEST_FAILED)` 保留其直接上游原因;其余 N 使用 timeout code。不存在 `F,V,*`、`V,F` 后 P07 之外的其他顺序,也不存在跳过 P05/P06 而物化后件。timeout 后 P08 已 closed/self-hash external 的路径仍只用 C19;C19 final stop/exit 继续为 `OUTER_TIMEOUT_AFTER_CLOSED_PACKAGE/24`。 ### 2.4 C18 external hash equality 与 unknown 边界 C18 的 P08 必须为 I,P08 row actual bytes/hash 非 null;top-level `manifest_external_bytes/manifest_external_sha256` 必须逐值等于该 P08 invalid file 的 actual bytes/hash。C18 不得写 self-row hash;external hash 只在 native final/audit 保存。 只有以下事实允许 U/C10/27:child liveness unknown;handle/stream close unknown;已物化文件无法安全复开;bytes/hash 无法可靠取得;writer-open stage 无法判定。已知 A/I/V/F/N 事实不得降格为 U,也不得伪造为 N。 ## 3. P03/P06/P07/P08 identity 与 literals 本版 schema identity: - P03=`ANA-SEMI-PRECONSUMPTION-VECTORS-JCS-V004` - P05=`ANA-SEMI-PRECONSUMPTION-STATIC-RESULT-JCS-V002`(不变) - P06=`ANA-SEMI-PRECONSUMPTION-CONTRACT-RESULT-JCS-V005` - P07=`ANA-SEMI-PRECONSUMPTION-RECEIPT-MD-V004` - P08=`ANA-SEMI-PRECONSUMPTION-MANIFEST-CSV-V002`(列 schema 不变) P03 top keys 仍按 V018,仅 `api_negative_cases` 内部升级 V004。P06 top keys 仍按 V018,仅 `api_results/api_negative_results/summary` 内部升级;functional case_total 仍唯一 30,selector=15,precedence=4,api_negative=8。P08 固定八行中的 P03/P06/P07 schema_id 必须使用本节值。 P07 仍是 as-of P06;UTF-8 no BOM/CR/NUL、恰好一个 final LF。以下 code fence 内容加一个 final LF 是完整 preimage。 PASS=`471/4996ed8ba89aff4ed6d0c227c77e9b3f1963e670183402d3c129700b242d0219` ```text receipt_schema_id: ANA-SEMI-PRECONSUMPTION-RECEIPT-MD-V004 run_id: RUN-DEV-ANA-SEMI-ROOT-PREFLIGHT-PRECONSUMPTION-REPAIR-IMPLEMENTATION-20260726-001 plan_id: CODE-DESIGN-ANA-SEMI-ROOT-PREFLIGHT-ORCHESTRATION-V007-V019 as_of_artifact_id: P06 prepackage_status: PASS prepackage_stop_code: null P05_status: TEST_PASS P06_status: TEST_PASS outer_process_count: 1 prohibited_process_count: 0 network_access: false credential_access: false database_connection_performed: false ``` STATIC=`502/b032af25edb91b3afe60a5f0ceff12e01cafac078210d16a92217beafba33362` ```text receipt_schema_id: ANA-SEMI-PRECONSUMPTION-RECEIPT-MD-V004 run_id: RUN-DEV-ANA-SEMI-ROOT-PREFLIGHT-PRECONSUMPTION-REPAIR-IMPLEMENTATION-20260726-001 plan_id: CODE-DESIGN-ANA-SEMI-ROOT-PREFLIGHT-ORCHESTRATION-V007-V019 as_of_artifact_id: P06 prepackage_status: TEST_FAIL prepackage_stop_code: STATIC_TEST_FAILED P05_status: TEST_FAIL P06_status: NOT_RUN_UPSTREAM_STOP outer_process_count: 1 prohibited_process_count: 0 network_access: false credential_access: false database_connection_performed: false ``` CONTRACT=`492/b4d5e38e7bbfaeee0081077ea68a0f175d3f7b51c611158cab1a14c0eac25323` ```text receipt_schema_id: ANA-SEMI-PRECONSUMPTION-RECEIPT-MD-V004 run_id: RUN-DEV-ANA-SEMI-ROOT-PREFLIGHT-PRECONSUMPTION-REPAIR-IMPLEMENTATION-20260726-001 plan_id: CODE-DESIGN-ANA-SEMI-ROOT-PREFLIGHT-ORCHESTRATION-V007-V019 as_of_artifact_id: P06 prepackage_status: TEST_FAIL prepackage_stop_code: CONTRACT_TEST_FAILED P05_status: TEST_PASS P06_status: TEST_FAIL outer_process_count: 1 prohibited_process_count: 0 network_access: false credential_access: false database_connection_performed: false ``` ## 4. 审核验收与门禁 V019 独立复审必须验证: 1. 八个 API negative case 覆盖全部 retained non-success observation enum;P06 保存 actual object/type/property name/type vectors与 hash,不能仅保存 enum。 2. 22-property valid/missing/extra/order/type-drift name/type/rule preimage、bytes/hash 可独立复算,negative total=8,functional total 仍为30。 3. C03-C06 A 与 C20-C23 I 一一对应;C09/C24-C39 恰好覆盖全部合法 timeout-known P05/P06/P07 prefix;C10 只用于真实 unknown。 4. native final V003 的 C00-C39 state_id、closure/status/stop/exit 与八行 artifact tuple 唯一;C18 external bytes/hash 等于 P08 invalid actual bytes/hash。 5. V018 已关闭 provider/selector/CommandLine/P07/P08/tool/argv 合同无回退;P01-P08/run/process/database 仍为零。 本 V019 只允许 `dev.reviewer.ana.cai` 独立计划复审。即使 PASS,也只允许向 management.admin 申请 Stage P P01-P08 的新单次实现/验证授权。在明确授权前,禁止任何 source/test/target 物化、PowerShell/csc/synthetic/proof/config-editor/mysql/SQL/database/network/credential/formal target、R3 或 BATCH-001。