创建人员: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
本文件是 append-only R2/V003。V001、V002 均保持不可变:
13850 bytes / 20e452a7f5bce3ac2bc96105577d1f616bd15c06b8884543cedc2d61b5dd7a6f / review=HOLD/3/3。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 冲突处仅以本版为准:
专业 V007 及审计 hash 继续沿用 V002,不在本版重复解释或修改。
I01 C# source 必须包含:
[assembly:System.Reflection.AssemblyVersion("1.0.0.0")][assembly:System.Reflection.AssemblyFileVersion("1.0.0.0")]AnaSemi.NativeProcessRunnerV006AnaSemi.NativeProcessRunnerV006, Version=1.0.0.0, Culture=neutral, PublicKeyToken=nullnamespace、六个 public type/method、22-property、Run/ValidateSingle/WriteCreateNew 签名逐字继承 V002。任何额外 public type、method、overload 或 identity 漂移为 STOP_ASSEMBLY_PUBLIC_API_DRIFT。
implementation validation 与未来 authorized synthetic harness 都只能按下列顺序加载 I09 published DLL:
Path.GetFullPath(RunnerAssemblyPath),ordinal 等于已审核 I09 absolute path;拒绝 relative、UNC、alternate stream、reparse point 和 path escape。FileMode.Open,FileAccess.Read,FileShare.None 独占只读复开,计算 bytes/SHA-256 并等于 manifest/调用参数。AppDomain.CurrentDomain.GetAssemblies() 中使用 StringComparer.Ordinal 搜索 simple name;加载前 count 必须为 0,否则 STOP_ASSEMBLY_ALREADY_LOADED。[System.Reflection.Assembly]::LoadFile($resolvedAbsolutePath);禁止 Load、LoadFrom、LoadWithPartialName、Add-Type、反射字节加载或再次 LoadFile。STOP_ASSEMBLY_LOAD_CONFLICT。LoadFile 抛错/返回空=STOP_ASSEMBLY_LOAD_FAILED;identity/type/method/property 不符=STOP_ASSEMBLY_PUBLIC_API_DRIFT。失败后禁止第二次加载、回退 API 或启动下游。
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
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。
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。8 checks 顺序不变;首个失败停止后续:
STOP_L0_SOURCE_CANONICAL_DRIFTSTOP_L0_CSC_OR_PUBLISH_DRIFTSTOP_ASSEMBLY_PUBLIC_API_DRIFTSTOP_L0_PROPERTY_CONTRACT_DRIFTSTOP_L0_POWERSHELL_AST_DRIFTSTOP_L0_PROHIBITED_APISTOP_L0_TOP_LEVEL_SIDE_EFFECTSTOP_L0_EXPECTED_VECTOR_BINDINGSTOP_L1_ARGV_QUOTINGSTOP_L1_ARGV_FINGERPRINTSTOP_L1_ENVELOPE_EXTRASTOP_L1_ENVELOPE_MISSINGSTOP_L1_RESULT_STATE_MATRIXSTOP_L1_RAW_PREIMAGESTOP_L1_REAL_13_TARGET_CONTRACTSTOP_L1_SYNTHETIC_30_TARGET_CONTRACTSTOP_L1_CREATE_NEW_DECISIONI02 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 并终止,不得吞掉或猜测。
外层 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,顺序固定:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe/nologo/target:library/optimize+/debug-/checked+/platform:anycpu/warnaserror+/utf8output/out:E:\mb-ms-doc\project-info\dev\ana-dev\tmp\RUN-DEV-ANA-SEMI-ROOT-PREFLIGHT-V007-IMPLEMENTATION-20260724-001\staging\AnaSemi.NativeProcessRunnerV006.dllE:\mb-ms-doc\project-info\dev\ana-dev\AnaSemi.NativeProcessRunnerV006.cs同一 canonical 公式得到 count=11、SHA-256=2d898216b8f1bb95fbc716737915a43e47c57f4d48685da74b392a167dc024df。I12 必须记录完整 count/hash;不得保存拼接 shell command line。
staging/AnaSemi.NativeProcessRunnerV006.dll 是唯一 COMPILER_OWNED_STAGING 例外:csc 可按自身 create/write 语义生成;它不是可加载或交付 assembly,不受“正式 publish 必须 CreateNew”声明覆盖。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。STOP_BUILD_PUBLISH_CREATE_NEW_OR_VERIFY_FAILED;I09 可为 partial,绝不删除/覆盖/重试,按实际 bytes/hash 收口。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 保留为审计证据,不删除。
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 节公式和值。
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。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。
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 已闭合。
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,不启动收口进程。
每个内部 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。
I16 仍使用 V002 14 列,恰好 16 行 I01→I16:
NOT_RUN_UPSTREAM_STOP、upstream_stop_code=primary stop。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。
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。
当前仍为零源码、零测试、零 run root、零 compiler/harness/child/database。计划复审仅判断:
BLOCK-DEV-PLAN-01 的 load/call/return/exit/STOP 是否关闭。BLOCK-DEV-PLAN-02 的 compiler staging→CreateNew publish 是否关闭。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。