# CODE-DESIGN-ANA-SEMI-ROOT-PREFLIGHT-ORCHESTRATION-V007-V004 创建人员:dev.developer.ana.cai 创建时间:2026-07-24T20:20:00+08:00 计划 ID:`DEV-PLAN-ANA-SEMI-ROOT-PREFLIGHT-ORCHESTRATION-V007-IMPLEMENTATION-R3` 当前状态:`PENDING_INDEPENDENT_PLAN_REREVIEW` 角色:`dev.developer.ana.cai` 独立审核:`dev.reviewer.ana.cai` 实现授权:`NOT_ISSUED` ## 1. 适用范围 本 V004 是 append-only R3,仅关闭 `AUDIT-DEV-ANA-SEMI-ROOT-PREFLIGHT-ORCHESTRATION-V007-PLAN-V003=HOLD/2/2` 的两项剩余问题。V001/V002/V003 均保持历史不变;V003=`20425` bytes / SHA-256 `facce6a8ded0cde38d414605b3364dd5cd9669c5efa8ca447b21420d2510aeea`,审计入口 `ana-doc/案例审计报告.md:799`。 - `BLOCK-DEV-PLAN-02=CLOSED`,V003 I08 compiler staging→I09 FileMode.CreateNew publish 合同完整继承,不再修改。 - 本版为 `BLOCK-DEV-PLAN-01` 增加每个 assembly/module primary 的唯一 outer exit、I13/I14 物化结果和 closure。 - 本版为 `BLOCK-DEV-PLAN-03` 增加 media_type literal、timeout exit 非空、attempted-no-output 与行级状态,并 append-only 更正 R2 账本 DAG。 与 V003 冲突时以 V004 为准;未提及部分全部继承 V003。 ## 2. Outer exit 总映射与优先级 I07 验证进程只允许以下 exit code。每个已启动 I07 的 primary 必须且只能映射一个值: | exit | primary / StopCode family | |---:|---| | 0 | PASS | | 11 | VALIDATION_PRECHECK_STOP / `STOP_VALIDATION_PRECHECK` | | 12 | CSC_START_STOP / `STOP_CSC_PROCESS_START_FAILED` | | 13 | CSC_TIMEOUT_STOP / `STOP_CSC_TIMEOUT` | | 14 | CSC_NONZERO_STOP / `STOP_CSC_NONZERO_EXIT` | | 15 | CSC_OUTPUT_INVALID_STOP / `STOP_CSC_OUTPUT_INVALID` | | 16 | PUBLISH_STOP / `STOP_BUILD_PUBLISH_CREATE_NEW_OR_VERIFY_FAILED` | | 17 | ASSEMBLY_PATH_HASH_STOP / `STOP_ASSEMBLY_PATH_OR_HASH_DRIFT` | | 18 | ASSEMBLY_ALREADY_LOADED_STOP / `STOP_ASSEMBLY_ALREADY_LOADED` | | 19 | ASSEMBLY_LOAD_FAILED_STOP / `STOP_ASSEMBLY_LOAD_FAILED` | | 20 | ASSEMBLY_LOAD_CONFLICT_STOP / `STOP_ASSEMBLY_LOAD_CONFLICT` | | 21 | ASSEMBLY_API_STOP / `STOP_ASSEMBLY_PUBLIC_API_DRIFT` | | 22 | MODULE_STOP / L0/L1 dot-source 或 success-output phase-specific STOP | | 23 | L0_STOP / 第一个 L0 固定 STOP | | 24 | L1_STOP / 第一个 L1 固定 STOP | | 25 | RECEIPT_CREATE_STOP | | 26 | MANIFEST_CREATE_STOP | | 27 | PACKAGE_UNCLOSED_STOP | | 28 | `STOP_UNKNOWN_CODE` | closure 优先级固定:`PACKAGE_UNCLOSED_STOP(27) > RECEIPT_CREATE_STOP(25) > MANIFEST_CREATE_STOP(26) > primary exit > PASS(0)`。因此 primary 已失败但 I15/I16 收口失败时,outer 只返回 closure exit,并在 native terminal 同时记录 original primary/stop;禁止返回两个 exit 或用最后异常覆盖 primary 字段。I07 未启动的 SOURCE/OUTER_START failure 无 process exit,native terminal 使用 `outer_process_started=false/exit_code=null`。 所有未知 exception/error/StopCode 必须转为 exit 28;不得映射到最接近的已知 primary。 ## 3. Module phase STOP 与调用结果 V003 的 generic module STOP 在 implementation validation 中唯一展开为: - I04 dot-source output/count/type 漂移:`STOP_L0_MODULE_DOTSOURCE_OUTPUT_DRIFT` / exit 22。 - I04 function success pipeline 非 0:`STOP_L0_MODULE_SUCCESS_OUTPUT_DRIFT` / exit 22。 - I05 dot-source output/count/type 漂移:`STOP_L1_MODULE_DOTSOURCE_OUTPUT_DRIFT` / exit 22。 - I05 function success pipeline 非 0:`STOP_L1_MODULE_SUCCESS_OUTPUT_DRIFT` / exit 22。 assembly path/hash/load/API primary 全部发生在 I13 前,绝不伪造 L0 执行。I04 dot-source failure 也发生在 I13 前。I04 function success-output drift 发生在 I13 已 CreateNew 后,I13 记录其内部 checks 结果,但 manifest status 必须=`TEST_OUTPUT_INVALID`。I05 dot-source failure 发生在 I13=TEST_PASS 后、I14 前;I05 success-output drift 发生在 I14 已 CreateNew 后,I14 status=`TEST_OUTPUT_INVALID`。 L0/L1 的业务 check FAIL 继续使用 V003 exit 23/24 与 `TEST_FAIL`。这四种 module STOP 不得伪装成 L0/L1 check FAIL。 future authorized synthetic harness 的 generic module STOP 仍按 V003 caller exit 72/73/74;它不属于本 implementation outer exit 表,两个链不得混用。 ## 4. I01-I16 media_type literal I16 的 `media_type` 列只能使用下列逐 ID literal: | ID | media_type | |---|---| | I01 | `text/x-csharp; charset=utf-8` | | I02 | `text/x-powershell; charset=utf-8` | | I03 | `text/x-powershell; charset=utf-8` | | I04 | `text/x-powershell; charset=utf-8` | | I05 | `text/x-powershell; charset=utf-8` | | I06 | `application/json` | | I07 | `text/x-powershell; charset=utf-8` | | I08 | `application/vnd.microsoft.portable-executable` | | I09 | `application/vnd.microsoft.portable-executable` | | I10 | `application/octet-stream` | | I11 | `application/octet-stream` | | I12 | `application/json` | | I13 | `application/json` | | I14 | `application/json` | | I15 | `text/markdown; charset=utf-8` | | I16 | `text/csv; charset=utf-8` | 不得从扩展名、Windows registry、MIME database 或运行时推断。 ## 5. Attempted-no-output 与 timeout 修正 ### 5.1 Attempted-no-output manifest status enum 在 V003 基础上新增: - `ATTEMPTED_NO_OUTPUT`:该 target 的创建/生成动作已经开始或其 producer 已启动,但 target 最终物理 absent。 - `TEST_OUTPUT_INVALID`:test JCS 已物化,但函数违反零 success pipeline 合同。 `ATTEMPTED_NO_OUTPUT` 行固定 `materialized=false,exists=false,bytes=null,sha256=null,created_at=null,upstream_stop_code=primary stop`。它不同于 `NOT_RUN_UPSTREAM_STOP`:后者表示 producer 从未进入。 逐 primary 适用: - `CSC_TIMEOUT_STOP|CSC_NONZERO_STOP`:若 I08 absent,I08=`ATTEMPTED_NO_OUTPUT`;若存在,按 V003 partial status。 - `PUBLISH_STOP`:若 I09 absent,I09=`ATTEMPTED_NO_OUTPUT`;若存在,`BUILD_PUBLISH_PARTIAL`。 - `CSC_START_STOP`:csc producer 未成功启动,I08 仍为 `NOT_RUN_UPSTREAM_STOP`,不是 attempted。 - assembly/module/L0/L1 primary 中 I08/I09 已成功,不使用 attempted。 ### 5.2 Timeout exit I12 `status=TIMED_OUT` 若可合法物化,必须同时满足 `process_started=true,child_liveness=EXITED,finished_at non-null,exit_code non-null INT32,timed_out=true`。kill/wait 后无法取得 exit code 或无法确认 EXITED 时,不构造 I12/I15/I16,唯一终态=`PACKAGE_UNCLOSED_STOP`/exit 27,由 native terminal 报 actual vector。V003 TIMED_OUT 允许 exit null 的文字由本条完全取代。 ## 6. 新增 primary 向量(I01-I14) 下表新增到 V003 primary table;所有行 I01-I07=`M(SOURCE_FROZEN)`、I08=`M(COMPILER_STAGING_READY)`、I09=`M(BUILD_PUBLISHED)`、I10/I11=`M(RAW_CAPTURED)`、I12=`M(PROCESS_RESULT_PASS)`: | primary | I13 | I14 | stop | exit | |---|---|---|---|---:| | ASSEMBLY_PATH_HASH_STOP | A(NOT_RUN) | A(NOT_RUN) | STOP_ASSEMBLY_PATH_OR_HASH_DRIFT | 17 | | ASSEMBLY_ALREADY_LOADED_STOP | A | A | STOP_ASSEMBLY_ALREADY_LOADED | 18 | | ASSEMBLY_LOAD_FAILED_STOP | A | A | STOP_ASSEMBLY_LOAD_FAILED | 19 | | ASSEMBLY_LOAD_CONFLICT_STOP | A | A | STOP_ASSEMBLY_LOAD_CONFLICT | 20 | | ASSEMBLY_API_STOP | A | A | STOP_ASSEMBLY_PUBLIC_API_DRIFT | 21 | | L0_MODULE_DOTSOURCE_STOP | A | A | STOP_L0_MODULE_DOTSOURCE_OUTPUT_DRIFT | 22 | | L0_MODULE_SUCCESS_OUTPUT_STOP | M(TEST_OUTPUT_INVALID) | A | STOP_L0_MODULE_SUCCESS_OUTPUT_DRIFT | 22 | | L1_MODULE_DOTSOURCE_STOP | M(TEST_PASS) | A | STOP_L1_MODULE_DOTSOURCE_OUTPUT_DRIFT | 22 | | L1_MODULE_SUCCESS_OUTPUT_STOP | M(TEST_PASS) | M(TEST_OUTPUT_INVALID) | STOP_L1_MODULE_SUCCESS_OUTPUT_DRIFT | 22 | 这里 A 的完整 manifest 行为=`materialized=false,exists=false,status=NOT_RUN_UPSTREAM_STOP,upstream_stop_code=本行 stop,其余物理字段 null`。M(TEST_OUTPUT_INVALID) 的 bytes/hash/time 非空且 upstream=本行 stop。 上述每个 primary 均适用 V003 closure state:CLOSED 时 I15/I16 materialized 并记录 primary;RECEIPT/MANIFEST_CREATE_STOP 时按 closure 优先级返回 25/26;无法安全收口返回 27。不得把 assembly/module primary 改写成 L0_STOP。 ## 7. I12/I13/I14/I16 行级总合同补充 - I12 PASS 只能在 I09 CreateNew publish、exclusive reopen/hash equal 后物化;其 publish metadata 必须非空。 - I12 failure status 与 V003 六状态表一一对应;`PROCESS_START_FAILED` 的 I08/I09 未运行,`TIMED_OUT/NONZERO` 的 I08 使用 partial 或 attempted-no-output,`OUTPUT_INVALID` 的 I08 必须 materialized invalid,`PUBLISH_FAILED` 的 I09 使用 partial 或 attempted-no-output。 - I13/I14 `status=FAIL` 只表示 check FAIL;module output drift 时 JCS 内部 status 可为 PASS 或 FAIL 的实际值,但 I16 target status 强制 `TEST_OUTPUT_INVALID`,primary stop 来自第 3 节,禁止伪称 TEST_PASS/TEST_FAIL。 - I16 status 总枚举升级为:`SOURCE_FROZEN|COMPILER_STAGING_READY|COMPILER_STAGING_PARTIAL|COMPILER_STAGING_INVALID|BUILD_PUBLISHED|BUILD_PUBLISH_PARTIAL|RAW_CAPTURED|PROCESS_RESULT_PASS|PROCESS_RESULT_FAIL|TEST_PASS|TEST_FAIL|TEST_OUTPUT_INVALID|ATTEMPTED_NO_OUTPUT|RECEIPT_FINALIZED|MANIFEST_SELF_EXTERNAL_HASH|NOT_RUN_UPSTREAM_STOP`。 - `ATTEMPTED_NO_OUTPUT|TEST_OUTPUT_INVALID` 必须 upstream non-null;成功 target upstream=null;failure/partial 继续按 V003。 ## 8. Authoritative DAG 与账本更正 权威 DAG 唯一为: `V007 design/audit → I01-I07 → csc/I08/I10/I11 → exclusive CreateNew publish I09 → I12 → unique LoadFile I09 → I13 → I14 → freeze I01-I14 → I15 → I16 → external I16 bytes/hash` `dev-doc/开发事项计划.md` R2 条目中将 I12 写在 I09 前的压缩 DAG 为历史登记错误,不得用于实现。本版在根账本 append-only 新增更正记录,不覆盖原文;只有上述顺序与 R3 更正记录有效。 ## 9. 复审与当前边界 复审只需判断: 1. 每个 assembly/module primary 是否已有唯一 I13/I14/closure/outer exit。 2. I08-I16 media_type、timeout exit、attempted-no-output、TEST_OUTPUT_INVALID 和总 status/null/upstream 是否唯一。 3. R3 账本是否 append-only 更正 I09→I12 顺序。 `BLOCK-DEV-PLAN-02` 必须保持 CLOSED。复审 PASS 后仍只允许向 management 请求一次实现物化/验证授权;本文件不授权 I01-I16、compiler、test、harness、child、proof、config-editor、mysql、SQL、数据库或业务。开发目录和 run root 当前仍为空/不存在,Git 非阻断且不得修改,BATCH-001 继续 HELD。