# CODE-DESIGN-ANA-SEMI-ROOT-PREFLIGHT-ORCHESTRATION-V007-V003 创建人员:dev.developer.ana.cai 创建时间:2026-07-24T19:56:00+08:00 事项 ID:`DEV-ANA-SEMI-ROOT-PREFLIGHT-ORCHESTRATION-V007-IMPLEMENTATION-20260724-001` 计划 ID:`DEV-PLAN-ANA-SEMI-ROOT-PREFLIGHT-ORCHESTRATION-V007-IMPLEMENTATION-R2` 当前状态:`PENDING_INDEPENDENT_PLAN_REREVIEW` 精确角色:`dev.developer.ana.cai` 独立审核:`dev.reviewer.ana.cai` 实现授权:`NOT_ISSUED` ## 1. 修订链与适用优先级 本文件是 append-only R2/V003。V001、V002 均保持不可变: - V001=`13850` bytes / `20e452a7f5bce3ac2bc96105577d1f616bd15c06b8884543cedc2d61b5dd7a6f` / review=`HOLD/3/3`。 - V002=`21697` bytes / `858b880753a4c968e9004bf9d956e654e281b055322203bb8fa6ce7faac6bcce` / `AUDIT-DEV-ANA-SEMI-ROOT-PREFLIGHT-ORCHESTRATION-V007-PLAN-V002=HOLD/3/3` / `ana-doc/案例审计报告.md:759`。 V003 继承 V002 已核验关闭的 wrapper/liveness 分离、22-property、public API、工具元数据、双进程模型、V007ExpectedVectors 专业绑定与高层 DAG。与 V002 冲突处仅以本版为准: 1. 增加唯一 assembly load/call/return/STOP 合同。 2. 将 csc 直接正式输出改为 compiler staging → exclusive verify → CreateNew publish。 3. 将 target universe 从 I01-I15 升级为 I01-I16,并用 primary terminal × closure state 冻结全部 PASS/FAIL schema、null/status/upstream 规则。 专业 V007 及审计 hash 继续沿用 V002,不在本版重复解释或修改。 ## 2. Assembly identity、唯一加载和调用图 ### 2.1 固定 identity I01 C# source 必须包含: - `[assembly:System.Reflection.AssemblyVersion("1.0.0.0")]` - `[assembly:System.Reflection.AssemblyFileVersion("1.0.0.0")]` - assembly simple name=`AnaSemi.NativeProcessRunnerV006` - full name=`AnaSemi.NativeProcessRunnerV006, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null` namespace、六个 public type/method、22-property、Run/ValidateSingle/WriteCreateNew 签名逐字继承 V002。任何额外 public type、method、overload 或 identity 漂移为 `STOP_ASSEMBLY_PUBLIC_API_DRIFT`。 ### 2.2 唯一加载 API 与顺序 implementation validation 与未来 authorized synthetic harness 都只能按下列顺序加载 I09 published DLL: 1. `Path.GetFullPath(RunnerAssemblyPath)`,ordinal 等于已审核 I09 absolute path;拒绝 relative、UNC、alternate stream、reparse point 和 path escape。 2. 以 `FileMode.Open,FileAccess.Read,FileShare.None` 独占只读复开,计算 bytes/SHA-256 并等于 manifest/调用参数。 3. 在 `AppDomain.CurrentDomain.GetAssemblies()` 中使用 `StringComparer.Ordinal` 搜索 simple name;加载前 count 必须为 0,否则 `STOP_ASSEMBLY_ALREADY_LOADED`。 4. 恰好调用一次 `[System.Reflection.Assembly]::LoadFile($resolvedAbsolutePath)`;禁止 Load、LoadFrom、LoadWithPartialName、Add-Type、反射字节加载或再次 LoadFile。 5. 返回 assembly 非空后,FullName、Location、ModuleVersionId、target runtime、公开 type/method/property 集按顺序校验;Location 必须 ordinal 等于 I09 path。 6. 再次枚举 AppDomain,simple name count 必须为 1 且引用相同 assembly;否则 `STOP_ASSEMBLY_LOAD_CONFLICT`。 7. 仅全部 PASS 后允许 dot-source I02/I04/I05 或读取任何 public member。 LoadFile 抛错/返回空=`STOP_ASSEMBLY_LOAD_FAILED`;identity/type/method/property 不符=`STOP_ASSEMBLY_PUBLIC_API_DRIFT`。失败后禁止第二次加载、回退 API 或启动下游。 ### 2.3 模块调用图与输出 implementation validation 唯一调用图: `I07 top-level → precheck → csc once → verify I08 → CreateNew publish I09 → unique LoadFile I09 → dot-source I04 → Invoke-AnaSemiL0StaticValidationV001 → dot-source I05 → Invoke-AnaSemiL1ContractValidationV001 → I15 → I16 → exit` - I04/I05 顶层只定义各自唯一函数;dot-source success pipeline object count 必须为 0,否则固定 STOP。 - L0/L1 函数 success pipeline object count 必须为 0;唯一结果在 I13/I14 JCS。失败只抛出一个带固定 StopCode 的 terminating error;禁止 warning/verbose/information/success stream 输出。 - I07 success pipeline/stdout/stderr 均为 0 bytes,成功 process exit=`0`;失败 exit 继续使用 V002 `11..16`,并在可能时生成闭合失败包。 future synthetic harness 唯一调用图: `I02 script top-level param → unique LoadFile I09 → dot-source definitions → Invoke-AnaSemiWrapperSelftestV006 → validate ST01-ST30 → script exit` I02 被 dot-source 时只定义函数且 pipeline count=0;被 `-File` 执行时调用函数恰好一次。`Invoke-AnaSemiWrapperSelftestV006` success pipeline count=0、返回语义=`void`、唯一成功证据=ST30 external hash、caller exit=0。失败抛一个固定 StopCode;caller 只映射 `71=AUTH/PRECHECK,72=ASSEMBLY/API,73=PROCESS/ENVELOPE,74=PACKAGE/NO_OVERWRITE,75=SECRET/NETWORK/DATABASE`,不得 retry。 ## 3. STOP 总枚举与触发 ### 3.1 Load/module STOP - `STOP_ASSEMBLY_PATH_OR_HASH_DRIFT`:path、exclusive open、bytes/hash 不符。 - `STOP_ASSEMBLY_ALREADY_LOADED`:LoadFile 前 simple-name count 非 0。 - `STOP_ASSEMBLY_LOAD_FAILED`:唯一 LoadFile 抛错/空。 - `STOP_ASSEMBLY_LOAD_CONFLICT`:加载后 count 非 1、Location/reference 不同。 - `STOP_ASSEMBLY_PUBLIC_API_DRIFT`:identity、runtime、type/method/property/22-hash 不符。 - `STOP_MODULE_DOTSOURCE_OUTPUT_DRIFT`:I02/I04/I05 dot-source pipeline count 非 0。 - `STOP_MODULE_SUCCESS_OUTPUT_DRIFT`:L0/L1/harness success pipeline count 非 0。 ### 3.2 L0 固定顺序与 STOP 8 checks 顺序不变;首个失败停止后续: 1. SOURCE_CANONICAL → `STOP_L0_SOURCE_CANONICAL_DRIFT` 2. CSC_EXIT → `STOP_L0_CSC_OR_PUBLISH_DRIFT` 3. PUBLIC_API → `STOP_ASSEMBLY_PUBLIC_API_DRIFT` 4. PROPERTY_22 → `STOP_L0_PROPERTY_CONTRACT_DRIFT` 5. POWERSHELL_AST → `STOP_L0_POWERSHELL_AST_DRIFT` 6. PROHIBITED_API → `STOP_L0_PROHIBITED_API` 7. TOP_LEVEL_SIDE_EFFECT → `STOP_L0_TOP_LEVEL_SIDE_EFFECT` 8. EXPECTED_VECTOR_BINDING → `STOP_L0_EXPECTED_VECTOR_BINDING` ### 3.3 L1 固定顺序与 STOP 1. ARGV_QUOTING → `STOP_L1_ARGV_QUOTING` 2. ARGV_FINGERPRINT → `STOP_L1_ARGV_FINGERPRINT` 3. ENVELOPE_EXTRA → `STOP_L1_ENVELOPE_EXTRA` 4. ENVELOPE_MISSING → `STOP_L1_ENVELOPE_MISSING` 5. RESULT_STATE_MATRIX → `STOP_L1_RESULT_STATE_MATRIX` 6. RAW_PREIMAGE → `STOP_L1_RAW_PREIMAGE` 7. REAL_13_TARGET_CONTRACT → `STOP_L1_REAL_13_TARGET_CONTRACT` 8. SYNTHETIC_30_TARGET_CONTRACT → `STOP_L1_SYNTHETIC_30_TARGET_CONTRACT` 9. CREATE_NEW_DECISION → `STOP_L1_CREATE_NEW_DECISION` I02 authorized synthetic 另外只允许专业 V007 STOP:`STOP_AUTHORIZATION_MISSING_OR_DRIFT|STOP_PROCESS_RESULT_COUNT_TYPE_OR_PROPERTY_DRIFT|STOP_ACTUAL_CHILD_ARGV_ROUNDTRIP_MISMATCH|STOP_CHILD_LIVENESS_UNCERTAIN|STOP_RAW_FINALIZATION_UNCERTAIN|STOP_PROCESS_RESULT_SIDECAR_PERSIST_OR_VERIFY_FAILED|STOP_TARGET_ALREADY_EXISTS|STOP_SYNTHETIC_PAYLOAD_PREIMAGE_MISMATCH|STOP_PACKAGE_CONTRACT_DRIFT|STOP_SECRET_NETWORK_DATABASE_TOUCH`。未知 StopCode 一律映射 `STOP_UNKNOWN_CODE` 并终止,不得吞掉或猜测。 ## 4. csc staging → CreateNew publish ### 4.1 唯一编译与 argv hash 外层 PowerShell argv 保持 V002 15 tokens,canonical preimage 为: `UTF8("ANA-SEMI-ARGV-V001" + NUL + argv[0] + NUL + ... + argv[14])`,无尾随 NUL;count=`15`、SHA-256=`ac99c11e3446bfa4d35867f99818d7836db9c17571960b3b1bfc9474f05a5b64`。 csc argv 升级为以下 11 tokens,顺序固定: 1. `C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe` 2. `/nologo` 3. `/target:library` 4. `/optimize+` 5. `/debug-` 6. `/checked+` 7. `/platform:anycpu` 8. `/warnaserror+` 9. `/utf8output` 10. `/out:E:\mb-ms-doc\project-info\dev\ana-dev\tmp\RUN-DEV-ANA-SEMI-ROOT-PREFLIGHT-V007-IMPLEMENTATION-20260724-001\staging\AnaSemi.NativeProcessRunnerV006.dll` 11. `E:\mb-ms-doc\project-info\dev\ana-dev\AnaSemi.NativeProcessRunnerV006.cs` 同一 canonical 公式得到 count=`11`、SHA-256=`2d898216b8f1bb95fbc716737915a43e47c57f4d48685da74b392a167dc024df`。I12 必须记录完整 count/hash;不得保存拼接 shell command line。 ### 4.2 staging 与 publish - run root 必须整体 absent,并由 I07 在授权后一次性新建;staging 目录在该新 root 内创建,禁止其他 writer。 - I08=`staging/AnaSemi.NativeProcessRunnerV006.dll` 是唯一 `COMPILER_OWNED_STAGING` 例外:csc 可按自身 create/write 语义生成;它不是可加载或交付 assembly,不受“正式 publish 必须 CreateNew”声明覆盖。 - csc 前 I08/I09 必须 absent。csc 后必须先等待 exit、关闭 stdout/stderr、以 exclusive read 复开 I08,校验 PE/.NET identity、bytes/hash;csc exit 非 0、timeout 或 I08 无效时禁止 publish。 - I09=`build/AnaSemi.NativeProcessRunnerV006.dll` 是唯一可加载 assembly。发布使用 `new FileStream(I09,FileMode.CreateNew,FileAccess.Write,FileShare.None)`,从 exclusive-read I08 顺序复制、Flush(true)、Dispose,再以 exclusive-read I09 重算 bytes/hash并必须等于 I08。 - I09 已存在、copy/flush/dispose/reopen/hash 任一失败=`STOP_BUILD_PUBLISH_CREATE_NEW_OR_VERIFY_FAILED`;I09 可为 partial,绝不删除/覆盖/重试,按实际 bytes/hash 收口。 ## 5. V003 完整 I01-I16 universe I01-I07 与 V002 相同。V003 从 I08 起完全取代 V002 编号: | ID | role | path | schema | success status | |---|---|---|---|---| | I01 | WRAPPER_SOURCE | `dev/ana-dev/AnaSemi.NativeProcessRunnerV006.cs` | ANA-SEMI-NATIVE-WRAPPER-CS-V001 | SOURCE_FROZEN | | I02 | HARNESS_SOURCE | `dev/ana-dev/Invoke-AnaSemiWrapperSelftestV006.ps1` | ANA-SEMI-WRAPPER-HARNESS-PS1-V001 | SOURCE_FROZEN | | I03 | CHILD_SOURCE | `dev/ana-dev/synthetic-child.ps1` | ANA-SEMI-SYNTHETIC-CHILD-PS1-V001 | SOURCE_FROZEN | | I04 | L0_TEST_SOURCE | `dev/ana-dev/test/Test-AnaSemiNativeProcessRunnerV006.Static.ps1` | ANA-SEMI-L0-VALIDATOR-PS1-V001 | SOURCE_FROZEN | | I05 | L1_TEST_SOURCE | `dev/ana-dev/test/Test-InvokeAnaSemiWrapperSelftestV006.Static.ps1` | ANA-SEMI-L1-VALIDATOR-PS1-V001 | SOURCE_FROZEN | | I06 | EXPECTED_VECTORS | `dev/ana-dev/test/V007ExpectedVectors.json` | ANA-SEMI-V007-EXPECTED-VECTORS-JCS-V001 | SOURCE_FROZEN | | I07 | VALIDATION_ENTRY | `dev/ana-dev/test/Invoke-AnaSemiImplementationValidationV001.ps1` | ANA-SEMI-IMPLEMENTATION-VALIDATION-PS1-V001 | SOURCE_FROZEN | | I08 | COMPILER_STAGING | `staging/AnaSemi.NativeProcessRunnerV006.dll` | PE-DOTNET48-STAGING-V001 | COMPILER_STAGING_READY | | I09 | PUBLISHED_ASSEMBLY | `build/AnaSemi.NativeProcessRunnerV006.dll` | PE-DOTNET48-V001 | BUILD_PUBLISHED | | I10 | CSC_STDOUT | `process/csc.stdout.bin` | RAW-BYTES-V001 | RAW_CAPTURED | | I11 | CSC_STDERR | `process/csc.stderr.bin` | RAW-BYTES-V001 | RAW_CAPTURED | | I12 | CSC_PROCESS_RESULT | `process/csc.result.json` | ANA-SEMI-IMPLEMENTATION-PROCESS-RESULT-JCS-V002 | PROCESS_RESULT_PASS | | I13 | L0_RESULT | `test/l0-static.json` | ANA-SEMI-IMPLEMENTATION-L0-JCS-V002 | TEST_PASS | | I14 | L1_RESULT | `test/l1-contract.json` | ANA-SEMI-IMPLEMENTATION-L1-JCS-V002 | TEST_PASS | | I15 | IMPLEMENTATION_RECEIPT | `receipt/implementation-receipt.md` | ANA-SEMI-IMPLEMENTATION-RECEIPT-MD-V002 | RECEIPT_FINALIZED | | I16 | IMPLEMENTATION_MANIFEST | `manifest/implementation-source-manifest.csv` | ANA-SEMI-IMPLEMENTATION-MANIFEST-CSV-V002 | MANIFEST_SELF_EXTERNAL_HASH | Canonical encodings 继承 V002。成功包恰好 16 项;I08 保留为审计证据,不删除。 ## 6. I12 完整 JCS 与 null matrix I12 keys 恰好 27 个:`schema_id,tool_path,tool_bytes,tool_sha256,argv_count,argv_sha256,process_started,process_id,started_at,finished_at,exit_code,timed_out,stdout_path,stdout_bytes,stdout_sha256,stderr_path,stderr_bytes,stderr_sha256,staging_path,staging_bytes,staging_sha256,publish_path,publish_bytes,publish_sha256,status,stop_code,child_liveness`。 类型:bytes/count/id 为 UINT64/UINT16/UINT32;exit=INT32;时间 RFC3339;hash HEX64;BOOL 原生;path/string 非空。status 总枚举=`PASS|PROCESS_START_FAILED|TIMED_OUT|NONZERO_EXIT|OUTPUT_INVALID|PUBLISH_FAILED`;child_liveness=`EXITED|NOT_STARTED`;stop_code 在 PASS 必须 null,失败必须为对应固定 STOP。 | status | started/pid/start | finish/exit | timed_out/liveness | raw metadata | staging | publish | |---|---|---|---|---|---|---| | PASS | TRUE/non-null/non-null | non-null/0 | FALSE/EXITED | non-null | non-null | non-null且hash=staging | | PROCESS_START_FAILED | FALSE/null/null | non-null/null | FALSE/NOT_STARTED | non-null,均 0/empty hash | all null | all null | | TIMED_OUT | TRUE/non-null/non-null | non-null/INT32或null | TRUE/EXITED;若无法确认退出则不构造 I12 | non-null | 三元组同空同非空 | all null | | NONZERO_EXIT | TRUE/non-null/non-null | non-null/非0 | FALSE/EXITED | non-null | 三元组同空同非空 | all null | | OUTPUT_INVALID | TRUE/non-null/non-null | non-null/0 | FALSE/EXITED | non-null | non-null | all null | | PUBLISH_FAILED | TRUE/non-null/non-null | non-null/0 | FALSE/EXITED | non-null | non-null | 三元组同空同非空,partial 可非空 | I12 process 未能确认 child exit/raw close 时不得物化,直接 native `PACKAGE_UNCLOSED_STOP`。I12 argv preimage/hash只能使用第 4.1 节公式和值。 ## 7. I13/I14 完整 PASS/FAIL JCS ### 7.1 公共 shape I13/I14 top-level keys 恰好:`schema_id,run_id,source_hashes,toolchain,assembly,checks,check_count,pass_count,fail_count,not_run_count,external_process_count,network_count,database_count,credential_count,status,terminal_stop_code`。 - `source_hashes`:恰好 I01-I07 七 key/HEX64。 - `toolchain`:恰好 `powershell,csc` 两 object;各自 keys=`path,bytes,sha256,version`,类型 STRING/UINT64/HEX64/STRING。 - `assembly`:keys 恰好 `staging_path,staging_bytes,staging_sha256,published_path,published_bytes,published_sha256,full_name,public_api_sha256`;无 null,published hash=staging hash。 - `checks`:固定顺序 array;每项 keys 恰好 `check_id,expected,actual,result,stop_code`,expected/actual 为 STRING,result=`PASS|FAIL|NOT_RUN`。PASS 时 stop_code=null;首个 FAIL 使用第 3 节对应 STOP;其后均 result=NOT_RUN、actual=`NOT_RUN_UPSTREAM_STOP`、stop_code=`STOP_UPSTREAM_NOT_RUN`。 - counts 为 UINT16 且三数之和=check_count;status=`PASS|FAIL`。PASS 时 terminal_stop_code=null;FAIL 时等于首个 FAIL stop_code。 `public_api_sha256` 的唯一 preimage 为 UTF-8:domain `ANA-SEMI-PUBLIC-API-V003`、assembly full name、V002 第 3.1 节六个 public type/method signature、V002 第 3.2 节 22 个 `property:CLR-type`,按文档顺序以单个 NUL 分隔、无尾随 NUL;禁止 reflection 默认排序、locale 或额外 member。实现落盘后才计算 actual HEX64,并由 L0 与独立 reviewer 复算。 I13 check_count=8;成功 `8/0/0`,external_process_count=1(csc 已由同一 outer 启动),其他 0。I14 check_count=9;成功 `9/0/0`,external_process_count=0,其他 0。失败文件仍完整包含全部 check objects,禁止省略或用 null 替代 NOT_RUN。 ### 7.2 固定执行与 trigger I13/I14 的 check 顺序、STOP 与触发逐项等于第 3.2/3.3 节。I13 在 unique LoadFile/API 校验后写;I14 复用已加载的同一 assembly reference,禁止再次 LoadFile。任何 JCS CreateNew/write/reopen/hash 失败升级 `PACKAGE_UNCLOSED_STOP`,不得声称 TEST_FAIL 已闭合。 ## 8. Primary terminal × closure state 总模型 ### 8.1 Primary vector(I01-I14) `M(status)`=materialized;`A(upstream)`=absent/NOT_RUN;`C(status)`=按实际存在并记录。I01-I07 在 outer 启动前已经成功物化,故下列内部 primary 全部为 M(SOURCE_FROZEN)。 | primary | I08 | I09 | I10-I11 | I12 | I13 | I14 | stop_code | |---|---|---|---|---|---|---|---| | CSC_START_STOP | A | A | M(RAW_CAPTURED) | M(PROCESS_RESULT_FAIL) | A | A | STOP_CSC_PROCESS_START_FAILED | | CSC_TIMEOUT_STOP | C(COMPILER_STAGING_PARTIAL) | A | M(RAW_CAPTURED) | M(PROCESS_RESULT_FAIL) | A | A | STOP_CSC_TIMEOUT | | CSC_NONZERO_STOP | C(COMPILER_STAGING_PARTIAL) | A | M(RAW_CAPTURED) | M(PROCESS_RESULT_FAIL) | A | A | STOP_CSC_NONZERO_EXIT | | CSC_OUTPUT_INVALID_STOP | M(COMPILER_STAGING_INVALID) | A | M(RAW_CAPTURED) | M(PROCESS_RESULT_FAIL) | A | A | STOP_CSC_OUTPUT_INVALID | | PUBLISH_STOP | M(COMPILER_STAGING_READY) | C(BUILD_PUBLISH_PARTIAL) | M(RAW_CAPTURED) | M(PROCESS_RESULT_FAIL) | A | A | STOP_BUILD_PUBLISH_CREATE_NEW_OR_VERIFY_FAILED | | L0_STOP | M(COMPILER_STAGING_READY) | M(BUILD_PUBLISHED) | M(RAW_CAPTURED) | M(PROCESS_RESULT_PASS) | M(TEST_FAIL) | A | I13 terminal_stop_code | | L1_STOP | M(COMPILER_STAGING_READY) | M(BUILD_PUBLISHED) | M(RAW_CAPTURED) | M(PROCESS_RESULT_PASS) | M(TEST_PASS) | M(TEST_FAIL) | I14 terminal_stop_code | | PASS | M(COMPILER_STAGING_READY) | M(BUILD_PUBLISHED) | M(RAW_CAPTURED) | M(PROCESS_RESULT_PASS) | M(TEST_PASS) | M(TEST_PASS) | null | 外部 `SOURCE_PRECHECK_OR_CREATE_STOP|VALIDATION_PRECHECK_STOP|OUTER_START_STOP|PACKAGE_UNCLOSED_STOP` 不构造 manifest;native terminal 逐 I01-I16 报实际 vector,不启动收口进程。 ### 8.2 Closure state(I15-I16) 每个内部 primary 只允许一个 closure: | closure | I15 | I16 | rule | |---|---|---|---| | CLOSED | M(RECEIPT_FINALIZED) | M(MANIFEST_SELF_EXTERNAL_HASH) | primary vector 安全冻结 | | RECEIPT_CREATE_STOP | A | A | native 报 I01-I14;不得再试 | | MANIFEST_CREATE_STOP | M(RECEIPT_FINALIZED) | A | native 报 I01-I15;不得再试 | I15 在失败 primary 中记录 primary/stop/实际 vector,upstream_stop_code=primary stop;PASS 时为 null。I16 仅 CLOSED 时存在,16 行完整记录 primary vector。 ### 8.3 Manifest 行级 null/status 规则 I16 仍使用 V002 14 列,恰好 16 行 I01→I16: - materialized=true ⇒ exists=true、bytes/sha256/created_at 非空;唯一例外 I16 self bytes/sha256=null。 - materialized=false ⇒ exists=false、bytes/sha256/created_at=null、status=`NOT_RUN_UPSTREAM_STOP`、upstream_stop_code=primary stop。 - materialized 成功状态(SOURCE_FROZEN、COMPILER_STAGING_READY、BUILD_PUBLISHED、PROCESS_RESULT_PASS、TEST_PASS)在 primary PASS 或后续失败中均 upstream=null,因为该 target 自身成功。 - materialized failure/partial 状态(COMPILER_STAGING_PARTIAL、COMPILER_STAGING_INVALID、BUILD_PUBLISH_PARTIAL、PROCESS_RESULT_FAIL、TEST_FAIL)必须 upstream=primary stop。 - I10/I11 RAW_CAPTURED 在 csc failure 时 upstream=primary stop,在 L0/L1/PASS 时 null。 - I15/I16 在失败 primary 的 CLOSED 包中 upstream=primary stop;PASS 中 null。 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|RECEIPT_FINALIZED|MANIFEST_SELF_EXTERNAL_HASH|NOT_RUN_UPSTREAM_STOP`。 ## 9. Hash DAG、自排除与外部返回 DAG 唯一为:`V007 design/audit → I01-I07 → csc/I08/I10/I11 → exclusive publish I09 → I12 → unique LoadFile → I13 → I14 → freeze I01-I14 → I15 → I16 → external I16 bytes/hash`。 - I06 不引用当前实现 hash;I12 不引用 I15/I16;I13/I14 不引用 I15/I16。 - I15 记录 I01-I14 hash,排除 I15/I16 hash。 - I16 记录 I01-I15;I16 self bytes/hash=null。 - outer native terminal 必须返回 outer argv count/hash、csc argv count/hash、process counts、primary/closure、I01-I16 actual vector、I16 external bytes/hash(若存在)。独立 audit 再记录 I16 external hash;禁止回写。 ## 10. 当前边界与复审目标 当前仍为零源码、零测试、零 run root、零 compiler/harness/child/database。计划复审仅判断: 1. `BLOCK-DEV-PLAN-01` 的 load/call/return/exit/STOP 是否关闭。 2. `BLOCK-DEV-PLAN-02` 的 compiler staging→CreateNew publish 是否关闭。 3. `BLOCK-DEV-PLAN-03` 的 argv preimage、JCS PASS/FAIL、primary×closure、行级 null/status/DAG 是否关闭。 复审 PASS 后只允许申请 I01-I16 的单次实现物化/验证授权;不自动执行。Git 继续 `INFORMATIONAL_NON_BLOCKING_BY_HUMAN_OVERRIDE`;旧 A001、ana-data/tmp、YAML/.mbx/binding/session、真实 proof/数据库/业务/BATCH-001 均保持禁止或 HELD;root 永不因本计划成为 `READONLY_PROVEN`。