# CODE-DESIGN-ANA-SEMI-ROOT-PREFLIGHT-ORCHESTRATION-V007-V024 - plan_id: `CODE-DESIGN-ANA-SEMI-ROOT-PREFLIGHT-ORCHESTRATION-V007-V024` - role_instance_id: `dev.developer.ana.cai` - created_at: `2026-07-26T21:41:42.6035331+08:00` - predecessor: `CODE-DESIGN-ANA-SEMI-ROOT-PREFLIGHT-ORCHESTRATION-V007-V023` / `14676/947699226f5b69a8fcc1faa888bbd38277e456c3341f69289fd1e44363d09ad0` - predecessor_review: `AUDIT-DEV-ANA-SEMI-ROOT-PREFLIGHT-ORCHESTRATION-V007-PYTHON-STAGE-P-REPAIR-PLAN-V023=HOLD/3/3` / `234600/760e657f6cae3b7fed502a073f513374ebb10dea8ca1215e710a19b83f677e27` / line `1828` - status: `PENDING_INDEPENDENT_PYTHON_ARCHITECTURE_REPAIR_PLAN_REREVIEW` - implementation_authorization: `NOT_ISSUED` - database_execution_authorization: `NOT_ISSUED` V024 只关闭 V023 的三项 blocker。继续选择“外部完全继承 V020、Python 仅替换内部 runtime”,不申请专业 amendment,不改变 V020 consumer wire。V023 已通过的 Y03、Y07、actual command-line provider、zero-state 与 native-only 边界全部继承且不得回退。 ## 1. BLOCK-V021-01:恢复 exact V020 行级 wire ### 1.1 Y05/P05 exact CHECK_RESULT Y05 顶层、schema、summary 完全继承 V020: - top keys=`check_results,schema_id,status,summary` - schema_id=`ANA-SEMI-PRECONSUMPTION-STATIC-RESULT-JCS-V002` - CHECK_RESULT keys=`actual,check_id,expected,status,stop_code` - SUMMARY keys=`fail_count,pass_count,total_count` - row status=`MATCH|MISMATCH`;MATCH iff actual==expected 且 stop_code=null;MISMATCH iff actual!=expected 且 stop_code=`STATIC_CHECK_MISMATCH` - total_count=12,pass_count+fail_count=12;top status=`TEST_PASS` iff fail_count=0,否则 `TEST_FAIL` V023 的 `case_id` 与 12 个 `PY-*` ID 全部 supersede。唯一 12 行及 PASS actual/expected literal 为: | ordinal | check_id | expected | PASS actual | |---:|---|---|---| | 1 | API_COUNT | `4` | `4` | | 2 | API_SIGNATURES | `CONVERT,INVOKE,SELECTOR,TEST` | `CONVERT,INVOKE,SELECTOR,TEST` | | 3 | API_RETURN_SCHEMAS | `API_RESULT_V005` | `API_RESULT_V005` | | 4 | COMMUNICATION_FORBIDDEN_TOKENS | `0` | `0` | | 5 | CREATE_NEW_ONLY | `true` | `true` | | 6 | NO_EXTRA_PIPELINE_OUTPUT | `true` | `true` | | 7 | NO_FORBIDDEN_RUNTIME | `true` | `true` | | 8 | PROCESS_SELECTOR_NO_SUBSTRING | `true` | `true` | | 9 | RESULT_22_PROPERTY_HASH | `4c3f8d873a6be20c0e449c6c6d1f196204ec8c3dfa399e3a5ee0e19f5fa153a2` | `4c3f8d873a6be20c0e449c6c6d1f196204ec8c3dfa399e3a5ee0e19f5fa153a2` | | 10 | SEMAPHORE_NO_RELEASE | `true` | `true` | | 11 | SOURCE_PATH_ALLOWLIST | `Y01,Y02,Y03,Y04` | `Y01,Y02,Y03,Y04` | | 12 | TARGET_PATH_ALLOWLIST | `Y01,Y02,Y03,Y04,Y05,Y06,Y07,Y08` | `Y01,Y02,Y03,Y04,Y05,Y06,Y07,Y08` | Python-specific AST/import/call/writer checks只作为形成上述 actual literal 的内部子断言;不得新增行、改 ID、改字段或另建 consumer-visible group。任何子断言失败,使对应既有 check actual=`false` 或实际观测串并进入同一 MISMATCH row。 ### 1.2 Y06/P06 exact groups、row keys 与类型 Y06 顶层 keys 固定: `api_negative_results,api_results,preflight_results,process_selector_results,provider_precedence_results,schema_id,status,summary,time_results` schema_id=`ANA-SEMI-PRECONSUMPTION-CONTRACT-RESULT-JCS-V006`。SUMMARY keys 固定: `api_fail_count,api_negative_fail_count,api_negative_pass_count,api_negative_total_count,case_fail_count,case_pass_count,case_total_count,precedence_fail_count,precedence_pass_count,precedence_total_count,status` 固定 counts:api=4、negative=8、time=7、selector=15、preflight=8、precedence=4、functional case_total=30。每个数组按既有 ID ordinal,无 missing/extra/duplicate。 TIME_RESULT keys: `actual_inside,actual_status,actual_stop_code,case_id,expected_inside,expected_status,expected_stop_code,status,stop_code` inside=`BOOL|null`;actual/expected status=`STRING`;actual/expected stop与row stop=`STRING|null`。 SELECTOR_RESULT keys(exact 27): `actual_adapter_call_count,actual_confirmed_zero,actual_duplicate_process_id_count,actual_exact_outer_count,actual_matched_process_ids,actual_prohibited_process_count,actual_related_process_count,actual_snapshot_row_count,actual_status,actual_stop_code,actual_uncertain_fields,actual_unknown_relevant_count,case_id,expected_adapter_call_count,expected_confirmed_zero,expected_duplicate_process_id_count,expected_exact_outer_count,expected_matched_process_ids,expected_prohibited_process_count,expected_related_process_count,expected_snapshot_row_count,expected_status,expected_stop_code,expected_uncertain_fields,expected_unknown_relevant_count,status,stop_code` call/count=`INT32|null`;confirmed=`BOOL|null`;matched=`ARRAY|null`;uncertain=`ARRAY|null`;status=`STRING`;stop nullable。数组 numeric/ordinal sorted、无重复。任何 cross-field 不等为 MISMATCH/`SELECTOR_CASE_MISMATCH`。 PREFLIGHT_RESULT keys: `actual_finished_at_null,actual_invocation_count,actual_provider_call_vector,actual_stage,actual_started_at_null,actual_status,actual_stop_code,case_id,expected_finished_at_null,expected_invocation_count,expected_provider_call_vector,expected_stage,expected_started_at_null,expected_status,expected_stop_code,status,stop_code` null flags=`BOOL`;invocation=`INT32|null`;provider vector 是 exact 6-key object `history,identity,now,plan_hash,process_snapshot,target_state`,每值 `INT32 0|1`;stage/status非空 STRING;stop nullable。 PROVIDER_PRECEDENCE_RESULT keys: `actual_exception_type,actual_provider_call_vector,actual_stage,actual_status,actual_stop_code,case_id,expected_exception_type,expected_provider_call_vector,expected_stage,expected_status,expected_stop_code,status,stop_code` exception/row stop nullable,其余按 V018;exact 4 IDs 与 call vector 继承 V018 lines 30-39。 API_RESULT V005 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,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` 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` 两类 API row 的 counts=`INT32|null`(expected object/count按 V019/V020 非空);names/types/rules=`ARRAY|null`;hash=`lowercase64|null`;actual_type_names=`ARRAY`;null 与 observation priority 精确继承 V019 lines 18-31、126-151 和 V020 lines 16-64。四 API name/type/rule vectors及 hashes逐项继承 V020 lines 28-52,不进行 Python 类型重命名。row MATCH 必须对完整 actual/expected evidence 逐字段相等;不得只比较 enum。 TIME/SELECTOR/PREFLIGHT ordinary row 均使用各自上述完整 schema;V023 的通用 `case_id,status,stop_code` 三字段声明全部 supersede。 ## 2. BLOCK-V021-02:exact bootstrap preimage 安全修复 ### 2.1 唯一 deterministic transform V024 bootstrap 以 V023 已复算通过的 `6461/996a79a55972fde5258f012daada29b73bf00432e56a2cdf1a130a5cff629f96` 为唯一输入,按以下 ordinal replacements 生成;除此之外无 byte 差异: 1. import line 加入 `re`。 2. bundle authorization/attempt gate 改为本节 exact `re.fullmatch` block。 3. `validate_py` 整段替换为 2.2 exact block。 4. `create_new_verified` 及其 Win32 binding 整段替换为 2.3 exact block。 authorization/attempt exact replacement: ```python if not isinstance(bundle.get("authorization_id"),str) or re.fullmatch(r"AUTH-[A-Z0-9]+(?:-[A-Z0-9]+)*",bundle["authorization_id"],re.ASCII) is None: die(11,"BUNDLE_AUTH_ID_INVALID") if not isinstance(bundle.get("attempt_id"),str) or re.fullmatch(r"[A-Z0-9]+(?:-[A-Z0-9]+)*-A001",bundle["attempt_id"],re.ASCII) is None: die(11,"BUNDLE_ATTEMPT_ID_INVALID") ``` parent 在 child start 前必须把这两个值与 management exact authorization/attempt 逐字比较;fullmatch 只验证 shape,不能替代 parent equality。任何不等在 child 未启动前 STOP。 ### 2.2 per-artifact AST/import/call/native allowlist 以下是 replacement 的完整 gate contract;实现 source 必须适配它,不允许管理端放宽: ```python POLICY={ "Y01":{"imports":{"base64","ctypes","datetime","hashlib","json","os","pathlib","re","threading"},"module_calls":{"base64.b64decode","ctypes.WinDLL","ctypes.byref","ctypes.cast","ctypes.create_string_buffer","ctypes.create_unicode_buffer","ctypes.get_last_error","ctypes.set_last_error","ctypes.sizeof","ctypes.string_at","datetime.datetime.now","hashlib.sha256","json.dumps","json.loads","os.fspath","os.getpid","pathlib.Path","re.fullmatch"},"methods":{"CloseHandle","CommandLineToArgvW","CreateToolhelp32Snapshot","LocalFree","NtQueryInformationProcess","OpenProcess","Process32FirstW","Process32NextW","QueryFullProcessImageNameW","append","decode","encode","get","hexdigest","items","resolve","sort"}}, "Y02":{"imports":{"ast","base64","hashlib","json","pathlib"},"module_calls":{"ast.parse","base64.b64decode","hashlib.sha256","json.dumps","json.loads","pathlib.Path"},"methods":{"append","decode","encode","endswith","get","hexdigest","items","read_bytes","resolve","sort","startswith"}}, "Y04":{"imports":{"base64","ctypes","hashlib","importlib","json","os","pathlib","sys"},"module_calls":{"base64.b64decode","ctypes.WinDLL","ctypes.byref","ctypes.create_string_buffer","ctypes.get_last_error","ctypes.set_last_error","ctypes.sizeof","hashlib.sha256","importlib.util.module_from_spec","importlib.util.spec_from_file_location","json.dumps","json.loads","os.fspath","pathlib.Path"},"methods":{"CloseHandle","CreateDirectoryW","CreateFileW","FlushFileBuffers","GetFileInformationByHandleEx","GetFileType","ReadFile","WriteFile","append","decode","encode","exec_module","get","hexdigest","items","resolve","sort"}}} SAFE_NAMES={"RuntimeError","ValueError","bool","bytearray","bytes","callable","dict","enumerate","int","isinstance","len","list","max","min","range","set","sorted","str","tuple","type","zip"} DENIED_NAMES={"__import__","breakpoint","compile","delattr","eval","exec","getattr","globals","input","locals","open","setattr","vars"} DENIED_NODES=(ast.AsyncFunctionDef,ast.Await,ast.Delete,ast.Global,ast.Lambda,ast.Nonlocal,ast.With,ast.AsyncWith) def dotted(node): parts=[] while isinstance(node,ast.Attribute): parts.append(node.attr);node=node.value if not isinstance(node,ast.Name): return None parts.append(node.id);return ".".join(reversed(parts)) def validate_py(data,name): if data[:3]==b"\xef\xbb\xbf" or b"\r" in data or b"\x00" in data or not data.endswith(b"\n"): die(11,"SOURCE_BYTES_INVALID:"+name) try: text=data.decode("utf-8",errors="strict");tree=ast.parse(text,filename=name,mode="exec") except Exception as e: die(11,"SOURCE_AST_INVALID:"+name+":"+type(e).__name__) policy=POLICY[name];imports=set();local_calls={n.name for n in tree.body if isinstance(n,(ast.FunctionDef,ast.ClassDef))} for n in tree.body: if isinstance(n,ast.Import): for a in n.names: if a.asname is not None or a.name not in policy["imports"]: die(11,"SOURCE_IMPORT_DENIED:"+name) imports.add(a.name.split(".")[0]) elif isinstance(n,ast.ImportFrom): die(11,"SOURCE_IMPORT_DENIED:"+name) for n in ast.walk(tree): if isinstance(n,DENIED_NODES): die(11,"SOURCE_NODE_DENIED:"+name) if isinstance(n,ast.Attribute) and n.attr.startswith("__"): die(11,"SOURCE_DUNDER_DENIED:"+name) if isinstance(n,ast.Call): if isinstance(n.func,ast.Name): if n.func.id in DENIED_NAMES or (n.func.id not in SAFE_NAMES and n.func.id not in local_calls): die(11,"SOURCE_CALL_DENIED:"+name) elif isinstance(n.func,ast.Attribute): call=dotted(n.func);root=call.split(".",1)[0] if call else None if (root in imports and call not in policy["module_calls"]) or (root not in imports and n.func.attr not in policy["methods"]): die(11,"SOURCE_ATTR_CALL_DENIED:"+name) else: die(11,"SOURCE_DYNAMIC_CALL_DENIED:"+name) ``` Y01 的 native method set 只允许 process snapshot/command-line APIs;Y04 的 native method set 只允许目录与 exclusive writer APIs;Y02 不允许 ctypes。`os.system/os.spawn*`、subprocess/network/database import、dynamic import、attribute indirection、任意额外 native API 均在首个 source CreateNew 前被拒绝。Y05 只复核已发生的 gate evidence,不再承担安全前置责任。 ### 2.3 complete Win32 writer signatures、error 与 reparse boundary exact replacement 必须定义并使用下列全部 prototypes;任何未绑定 native symbol 不得调用: ```python import ctypes from ctypes import wintypes K32=ctypes.WinDLL("kernel32",use_last_error=True) CreateFileW=K32.CreateFileW;CreateFileW.argtypes=[wintypes.LPCWSTR,wintypes.DWORD,wintypes.DWORD,wintypes.LPVOID,wintypes.DWORD,wintypes.DWORD,wintypes.HANDLE];CreateFileW.restype=wintypes.HANDLE WriteFile=K32.WriteFile;WriteFile.argtypes=[wintypes.HANDLE,wintypes.LPVOID,wintypes.DWORD,ctypes.POINTER(wintypes.DWORD),wintypes.LPVOID];WriteFile.restype=wintypes.BOOL ReadFile=K32.ReadFile;ReadFile.argtypes=[wintypes.HANDLE,wintypes.LPVOID,wintypes.DWORD,ctypes.POINTER(wintypes.DWORD),wintypes.LPVOID];ReadFile.restype=wintypes.BOOL FlushFileBuffers=K32.FlushFileBuffers;FlushFileBuffers.argtypes=[wintypes.HANDLE];FlushFileBuffers.restype=wintypes.BOOL CloseHandle=K32.CloseHandle;CloseHandle.argtypes=[wintypes.HANDLE];CloseHandle.restype=wintypes.BOOL GetFileInformationByHandleEx=K32.GetFileInformationByHandleEx;GetFileInformationByHandleEx.argtypes=[wintypes.HANDLE,wintypes.INT,wintypes.LPVOID,wintypes.DWORD];GetFileInformationByHandleEx.restype=wintypes.BOOL GetFileType=K32.GetFileType;GetFileType.argtypes=[wintypes.HANDLE];GetFileType.restype=wintypes.DWORD class FILE_ATTRIBUTE_TAG_INFO(ctypes.Structure): _fields_=[("FileAttributes",wintypes.DWORD),("ReparseTag",wintypes.DWORD)] INVALID_HANDLE_VALUE=ctypes.c_void_p(-1).value GENERIC_READ=0x80000000;GENERIC_WRITE=0x40000000 FILE_SHARE_ALL=7;CREATE_NEW=1;OPEN_EXISTING=3;FILE_TYPE_DISK=1 FILE_ATTRIBUTE_DIRECTORY=0x10;FILE_ATTRIBUTE_NORMAL=0x80;FILE_ATTRIBUTE_REPARSE_POINT=0x400 FILE_FLAG_WRITE_THROUGH=0x80000000;FILE_FLAG_OPEN_REPARSE_POINT=0x00200000;FILE_FLAG_BACKUP_SEMANTICS=0x02000000 def fail_last(code,label): err=ctypes.get_last_error();die(code,label+":"+str(err)) def close_checked(h,label): ctypes.set_last_error(0);ok=CloseHandle(h);err=ctypes.get_last_error() if not ok: die(27,label+":"+str(err)) def info_checked(h,want_dir,label): ctypes.set_last_error(0);kind=GetFileType(h);err=ctypes.get_last_error() if kind!=FILE_TYPE_DISK: die(27,label+"_TYPE:"+str(err)) info=FILE_ATTRIBUTE_TAG_INFO();ctypes.set_last_error(0);ok=GetFileInformationByHandleEx(h,9,ctypes.byref(info),ctypes.sizeof(info));err=ctypes.get_last_error() if not ok: die(27,label+"_INFO:"+str(err)) if info.FileAttributes & FILE_ATTRIBUTE_REPARSE_POINT: die(27,label+"_REPARSE") if bool(info.FileAttributes & FILE_ATTRIBUTE_DIRECTORY)!=want_dir: die(27,label+"_KIND") def verify_parents(path): chain=[];cur=path.parent while True: if cur==ROOT: chain.append(cur);break if ROOT not in cur.parents: die(11,"PARENT_ESCAPE") chain.append(cur);cur=cur.parent for q in reversed(chain): ctypes.set_last_error(0);h=CreateFileW(str(q),0,FILE_SHARE_ALL,None,OPEN_EXISTING,FILE_FLAG_BACKUP_SEMANTICS|FILE_FLAG_OPEN_REPARSE_POINT,None);err=ctypes.get_last_error() if h in (None,INVALID_HANDLE_VALUE): die(27,"PARENT_OPEN:"+str(err)) try: info_checked(h,True,"PARENT") finally: close_checked(h,"PARENT_CLOSE") def create_new_verified(path,data): verify_parents(path) ctypes.set_last_error(0);h=CreateFileW(str(path),GENERIC_WRITE,0,None,CREATE_NEW,FILE_ATTRIBUTE_NORMAL|FILE_FLAG_WRITE_THROUGH,None);err=ctypes.get_last_error() if h in (None,INVALID_HANDLE_VALUE): die(11,"CREATE_NEW_FAILED:"+str(err)) try: info_checked(h,False,"CREATE") off=0 while off"`;CommandLine=`"" `;runtime snapshot 必须仍是 `91648/3c6a206b7d93cca823934a83732220dcffd413fd1036d9fb82eebb64599cf7f3/3.12.13`。 ## 3. BLOCK-V021-04:Y05/Y06/Y08 与 native closure 总闭合 ### 3.1 Y03/Y07 不回退 Y03 保持 `4016/86f563b43d934cb0828e395f557ded328ad2abcfb2c1ef7bdbc8a4c32c12cbca`。Y07 exact literals保持 PASS=`449/51f12385835588e257859e36073da90290cb2a5465426b73174568c86960490c`、STATIC=`480/9ee2ce5e1fb04b6e43572d1f634343654b6a54abed8063ab0dd20dcf0d783a80`、CONTRACT=`470/1caa6eee696e12af70af766fec88a34b001490e883b2b2397f2f2b4ff1621724`。 ### 3.2 Y08 exact fixed prefix rows 所有行 run_id 固定为 `RUN-DEV-ANA-SEMI-ROOT-PREFLIGHT-PYTHON-STAGE-P-20260726-001`。13 columns 固定: `artifact_id,run_id,role,schema_id,relative_path,media_type,expected_presence,materialized,exists,status,upstream_stop_code,bytes,sha256` 每行前七字段唯一为: | id | role | schema_id | relative_path | media_type | expected_presence | |---|---|---|---|---|---| | Y01 | SOURCE | ANA-SEMI-PRECONSUMPTION-MODULE-PY-V001 | dev/ana-dev/ana_semi_preconsumption_v002.py | text/x-python; charset=utf-8 | REQUIRED_BEFORE_OUTER | | Y02 | TEST_SOURCE | ANA-SEMI-PRECONSUMPTION-STATIC-TEST-PY-V001 | dev/ana-dev/test/test_ana_semi_preconsumption_v002.py | text/x-python; charset=utf-8 | REQUIRED_BEFORE_OUTER | | Y03 | TEST_VECTOR | ANA-SEMI-PRECONSUMPTION-VECTORS-JCS-V005 | dev/ana-dev/test/ana_semi_preconsumption_vectors_v002.json | application/jcs+json | REQUIRED_BEFORE_OUTER | | Y04 | VALIDATION_SOURCE | ANA-SEMI-PRECONSUMPTION-VALIDATION-PY-V001 | dev/ana-dev/test/run_ana_semi_preconsumption_validation_v002.py | text/x-python; charset=utf-8 | REQUIRED_BEFORE_OUTER | | Y05 | TEST_RESULT | ANA-SEMI-PRECONSUMPTION-STATIC-RESULT-JCS-V002 | dev/ana-dev/tmp/RUN-DEV-ANA-SEMI-ROOT-PREFLIGHT-PYTHON-STAGE-P-20260726-001/test/static-result.json | application/jcs+json | REQUIRED_ON_STATIC_STAGE | | Y06 | TEST_RESULT | ANA-SEMI-PRECONSUMPTION-CONTRACT-RESULT-JCS-V006 | dev/ana-dev/tmp/RUN-DEV-ANA-SEMI-ROOT-PREFLIGHT-PYTHON-STAGE-P-20260726-001/test/contract-result.json | application/jcs+json | REQUIRED_ON_CONTRACT_STAGE | | Y07 | RECEIPT | ANA-SEMI-PRECONSUMPTION-RECEIPT-MD-V005 | dev/ana-dev/tmp/RUN-DEV-ANA-SEMI-ROOT-PREFLIGHT-PYTHON-STAGE-P-20260726-001/receipt/preflight-repair-receipt.md | text/markdown; charset=utf-8 | REQUIRED_ON_CLOSURE_STAGE | | Y08 | MANIFEST | ANA-SEMI-PRECONSUMPTION-MANIFEST-CSV-V002 | dev/ana-dev/tmp/RUN-DEV-ANA-SEMI-ROOT-PREFLIGHT-PYTHON-STAGE-P-20260726-001/manifest/preflight-repair-manifest.csv | text/csv; charset=utf-8 | SELF | Y08 必须 RFC4180 CRLF+final CRLF、恰好八行、按 Y01-Y08 ordinal。后六字段由唯一 symbol 展开: - V=`true,true,MATERIALIZED_VALID,null,actual_nonnegative_decimal,actual_lowercase64` - F=`true,true,MATERIALIZED_TEST_FAIL,null,actual_nonnegative_decimal,actual_lowercase64` - A(code)=`false,false,ATTEMPTED_NO_OUTPUT,code,null,null` - I(code)=`true,true,MATERIALIZED_INVALID,code,actual_nonnegative_decimal,actual_lowercase64` - N(code)=`false,false,NOT_RUN_UPSTREAM_STOP,code,null,null` - U=`null,null,STATE_UNCERTAIN,PACKAGE_UNCLOSED_STOP,null,null` - S=`true,true,MANIFEST_SELF_EXTERNAL_HASH,null,null,null` 该固定 prefix + symbol 是每条 13-field row 的唯一构造,不存在自由字段。 ### 3.3 non-overlapping state lookup native schema=`ANA.SEMI.PRECONSUMPTION.NATIVE.FINAL.V004`,keys与 C00-C40 继续 V020。状态查找按以下优先且必须恰好命中一项: 1. 任一事实 unknown/handle/liveness/hash uncertain → C10/U/27; 2. source writer attempted but no file:Y01/Y02/Y03/Y04 分别 C03/C04/C05/C06,当前 target=A、上游 V、下游 N; 3. source materialized-invalid-known:Y01/Y02/Y03/Y04 分别 C20/C21/C22/C23,当前 target=I、上游 V、下游 N; 4. outer start/nonzero/timeout、Y05/Y06 writer、receipt/manifest、closed-package timeout 依次只查 V018 C07-C19; 5. timeout-killed-known prefix只查 V019 C24-C39与V020 C40,恰好 18 个; 6. closed PASS/STATIC/CONTRACT只查 C00/C01/C02。 C03-C06 **只允许 A**;C20-C23 **只允许 I**,V023 的“A或I自由分支”作废。每个 state 的 top-level 与 Y01-Y08 symbols仍取 V018 lines 177-227、V019 lines 155-203、V020 lines 66-84;上述 lookup 使它们无重叠。C18 external bytes/hash 必须等于 actual invalid Y08;C00 唯一 PASS/0;Y08 self row bytes/hash始终 blank,外部 hash仅进入 native/audit。 ## 4. 零状态、后续边界与验收 - Y01-Y08=`ABSENT_8_OF_8`;future run=`ABSENT`。 - 旧 P01-P04 immutable hashes不变,旧 P05-P08/run absent。 - 当前没有 implementation/database authorization;未执行 bootstrap、Python、PowerShell、csc、node、mysql、SQL、database、network、credential。 - V024 只允许独立计划复审。PASS 后仅可向 management 申请新的 single-use Python Stage P Y01-Y08 implementation authorization;仍不自动授权 R3 或数据库。 - 后续数据库预检继续采用 Python orchestration + frozen `mysql.exe --login-path=ana_semi_admin_preflight`,秘密不进入 argv/stdin/env/file/log;另需独立数据库授权。 - formal target=0;BATCH-001=HELD;darkline_restored=false。 验收必须复算:V024 plan bytes/hash、V023 audit snapshot、Y03/Y07、六项 bootstrap vectors、AST gate coverage、Win32 prototypes、Y05 12 rows、Y06 6 groups、Y08 8 prefixes/7 symbols、C00-C40 唯一 lookup及 zero-state。任何不一致 HOLD。 ## 5. 复算登记 - local read-only deterministic reconstruction:V022 bootstrap → V023 four transforms 首先复得 `6461/996a79a...9f96`,再执行 V024 四项 replacement;六项结果逐项等于 2.4。 - 本复算未启动 Python;只读取计划文字并用 UTF-8/Base64/SHA-256 字节函数派生。