CODE-DESIGN-ANA-SEMI-ROOT-PREFLIGHT-ORCHESTRATION-V007-V015dev.developer.ana.cai2026-07-26T10:29:03.4689921+08:00CODE-DESIGN-ANA-SEMI-ROOT-PREFLIGHT-ORCHESTRATION-V007-V014 / 144286/bd9c03fac8a025bf3fe01eb37099e846f04bc304eef92bc5f3ac9f14cafc8539 / review=PASS/0/0AUDIT-DEV-ANA-SEMI-ROOT-PREFLIGHT-ORCHESTRATION-V007-REPAIR2-PRECONSUMPTION-STOP-FAILURE-001 / 162489/115bac1466edc3abac581830e6feac0dfa03c8ddbe935f60daf61bf1cb0a6045 / line=1434AUTH-DEV-ANA-SEMI-ROOT-PREFLIGHT-V007-REPAIR2-IMPLEMENTATION-20260725-001/A001=TERMINATED_PRECONSUMPTION_UNCONSUMED_PERMANENTLY_CLOSEDPENDING_INDEPENDENT_PREFLIGHT_REPAIR_PLAN_REVIEWNOT_ISSUEDNOT_AUTHORIZED/HELD/HELD/HELD本计划只修复 BLOCK-PRECONSUMPTION-01_MANDATORY_PREFLIGHT_TERMINAL_MISMATCH_RERUN_STARTED,并固化 ISSUE-PRECONSUMPTION-COMM-01_LEGACY_MBX_ROUTE_ATTEMPT_AFTER_NATIVE_POLICY 的不回退要求。
必须关闭四个根因:
DateTimeOffset,禁止 DateTime 与 DateTimeOffset 隐式比较。本计划不修改 V014,不复用已经关闭的 Repair2 A001/run/target,也不授权 R01—R20、outer、csc、synthetic、proof、config-editor、mysql、SQL、数据库、网络、凭据、正式数据或业务动作。
| 层 | 技术 | 职责 |
|---|---|---|
| native process runner | C# / .NET Framework | 原生进程启动、stdout/stderr bytes、生命周期和 sidecar |
| orchestration / evidence | Windows PowerShell 5.1 + .NET BCL | preflight、CreateNew、hash、JCS/receipt/manifest、失败收口 |
| compiler | reviewed csc.exe |
仅在后续单独授权的 R3 实现链中编译 C# |
Python 和 Node.js 技术上均可实现时间、文件和 JSON 逻辑,但本轮不换栈:V007/V014 已审核的 C# API、PowerShell DAG、进程数、argv、JCS 和失败状态均依赖现有技术坐标。换栈会同时引入 runtime、依赖、进程、argv、canonical JSON 和打包合同重审,不能缩短当前最短路径。
若未来需要换栈,必须作为独立架构变更重新设计、审核和授权,不得在本计划或后续实现中静默替换。
候选 run:RUN-DEV-ANA-SEMI-ROOT-PREFLIGHT-PRECONSUMPTION-REPAIR-IMPLEMENTATION-20260726-001。
计划目标如下,全部使用项目根相对路径;当前均不得物化:
| ID | 路径 | role |
|---|---|---|
| P01 | dev/ana-dev/AnaSemi.Repair3PreconsumptionV001.psm1 |
SOURCE |
| P02 | dev/ana-dev/test/Test-AnaSemiRepair3PreconsumptionV001.Static.ps1 |
TEST_SOURCE |
| P03 | dev/ana-dev/test/AnaSemiRepair3PreconsumptionVectorsV001.json |
TEST_VECTOR |
| P04 | dev/ana-dev/test/Invoke-AnaSemiRepair3PreconsumptionValidationV001.ps1 |
VALIDATION_SOURCE |
| P05 | dev/ana-dev/tmp/RUN-DEV-ANA-SEMI-ROOT-PREFLIGHT-PRECONSUMPTION-REPAIR-IMPLEMENTATION-20260726-001/test/static-result.json |
TEST_RESULT |
| P06 | dev/ana-dev/tmp/RUN-DEV-ANA-SEMI-ROOT-PREFLIGHT-PRECONSUMPTION-REPAIR-IMPLEMENTATION-20260726-001/test/contract-result.json |
TEST_RESULT |
| P07 | dev/ana-dev/tmp/RUN-DEV-ANA-SEMI-ROOT-PREFLIGHT-PRECONSUMPTION-REPAIR-IMPLEMENTATION-20260726-001/receipt/preflight-repair-receipt.md |
RECEIPT |
| P08 | dev/ana-dev/tmp/RUN-DEV-ANA-SEMI-ROOT-PREFLIGHT-PRECONSUMPTION-REPAIR-IMPLEMENTATION-20260726-001/manifest/preflight-repair-manifest.csv |
MANIFEST |
Stage P 必须先独立计划审核,再由 management 单独决定 P01—P08 的一次性物化/验证授权。实现后必须由 dev.reviewer.ana.cai 独立实现审核。P 阶段不得创建任何 R3 target,不得访问数据库或凭据。
只有 P 阶段实现审核 PASS 后,才允许另立完整 R3 计划并冻结新的 versioned R01—R20、payload、run、authorization、attempt、argv 和 hash。R3 不得复用 Repair2 的任何 ID/path/hash。
本 V015 不请求 R3 实现授权;它只建立可被 R3 授权引用的稳定 preflight 能力。
P01 只导出以下四个函数,禁止额外 pipeline output:
ConvertTo-AnaSemiAuthorizationWindowTest-AnaSemiAuthorizationWindowSelect-AnaSemiExactRelatedProcessInvoke-AnaSemiPreconsumptionPreflight所有 helper 的非返回 API 调用必须显式赋给 $null 或 [void];每个导出函数只返回恰好一个 PSCustomObject。调用端在读取属性前必须验证:
@($result).Count -eq 1PSTypeNames[0] 等于该函数冻结的类型名任何 count/type/property 漂移直接进入 STOP_PRECONSUMPTION_RESULT_CONTRACT_DRIFT,不得再次调用函数。
authorized_at 与 expires_at 必须为带 offset、恰好 7 位小数的字符串,解析格式唯一为:
yyyy-MM-dd'T'HH:mm:ss.fffffffK
实现只允许:
[DateTimeOffset]::ParseExact(
$value,
"yyyy-MM-dd'T'HH:mm:ss.fffffffK",
[Globalization.CultureInfo]::InvariantCulture,
[Globalization.DateTimeStyles]::None
)
禁止 [datetime]、Get-Date 返回值与 DateTimeOffset 直接比较,禁止 culture fallback、宽松 parse 或解析失败后的第二种格式。
now 只来自一次 [DateTimeOffset]::UtcNow 调用,测试时由注入的 clock 返回。UtcDateTime.Ticks:INT64。authorized_ticks <= now_ticks -and now_ticks < expires_ticks。expires_ticks <= authorized_ticks 直接 STOP。以 authorized_at=2026-07-26T01:12:58.2748820+08:00、expires_at=2026-07-26T03:12:58.2748820+08:00 为纯合成向量:
| case | now | expected |
|---|---|---|
| T-BEFORE | 2026-07-26T01:12:58.2748819+08:00 |
OUTSIDE |
| T-AT-START | 2026-07-26T01:12:58.2748820+08:00 |
INSIDE |
| T-INSIDE | 2026-07-26T02:00:00.0000000+08:00 |
INSIDE |
| T-AT-END | 2026-07-26T03:12:58.2748820+08:00 |
OUTSIDE |
| T-MALFORMED | 2026/07/26 02:00:00 |
STOP_PARSE |
这些向量只验证比较语义,不授予历史窗口或任何执行权。
START → IDENTITY → WINDOW → PLAN_HASH → TARGET_ABSENCE → HISTORY_IMMUTABILITY → PROCESS_STATE → PASS
Invoke-AnaSemiPreconsumptionPreflight 内部维护 preflight_invocation_count=1。生产调用方必须在进入函数前置本地 monotonic guard;函数返回或抛出后 guard 永久关闭,本 turn 不得再调用。
| 首个事实 | terminal_status | stop_code | 可继续 |
|---|---|---|---|
| 所有检查通过 | PASS | null | 仅允许进入后续管理授权明确的下一动作 |
| 已知 mismatch | STOP | STOP_PRECONSUMPTION_GATE_MISMATCH |
否 |
| 解析/API/类型异常 | STOP | STOP_PRECONSUMPTION_PREFLIGHT_EXCEPTION |
否 |
| 进程或文件状态不可确定 | STOP | STOP_PRECONSUMPTION_STATE_UNCERTAIN |
否 |
| 返回对象合同漂移 | STOP | STOP_PRECONSUMPTION_RESULT_CONTRACT_DRIFT |
否 |
catch 只允许创建本地 terminal 对象;禁止修正参数、修改脚本、再次调用 preflight、重新取时、重新枚举或转入另一工具。即使尚未消费未来 authorization,也必须结束该 authorization chain。
类型名:ANA.SEMI.PRECONSUMPTION.RESULT.V001。
固定 22 个字段,按 ordinal 排序:
authorization_id,authorized_at_utc_ticks,candidate_run_exists,exception_type,expires_at_utc_ticks,finished_at,history_hash_mismatch_count,invocation_count,materialized_target_count,now_utc_ticks,preflight_stage,related_process_count,result_schema_id,started_at,status,stop_code,target_existing_count,uncertain_field,authorized_outer_started,credential_access,database_connection_performed,network_access
类型/null:
authorization_id,result_schema_id,started_at,finished_at,status,preflight_stage*_utc_ticks;解析失败时对应不可获得值为 nullinvocation_count,target_existing_count,history_hash_mismatch_count,related_process_count,materialized_target_count;无法安全取得的字段为 nullcandidate_run_exists,authorized_outer_started,credential_access,database_connection_performed,network_access;无法确定时允许 null,但 status 必须 STOPstop_code,exception_type,uncertain_fieldinvocation_count 在所有合法对象中恰好为 1本对象只存在于内存和原生 terminal 消息;pre-consumption STOP 不创建项目文件。
selector 只接受结构化进程行:
process_id:UINT32,parent_process_id:UINT32,executable_path:STRING|null,command_line:STRING|null
生产 adapter 从 Win32_Process 一次性获取快照;测试 adapter 使用 P03 固定数组。禁止在 selector 内再次查询。
future management authorization 必须提供:
expected_outer_executable_pathexpected_outer_command_line_utf8_sha256expected_outer_command_line_utf8_base64source_preflight_process_id一行仅在以下全部成立时匹配:
process_id != source_preflight_process_idexecutable_path 非 null,经 Path.GetFullPath 后与 expected path 采用 OrdinalIgnoreCase 完全相等command_line 非 null,其 UTF-8 bytes 与 reviewed Base64 解码 bytes 完全相等禁止 -like、-match、Contains、substring、仅进程名、仅 script path 或把当前 shell 命令正文中的字符串当作实际 child argv。任一候选 path/command_line null、规范化异常或重复 exact match 均为 STATE_UNCERTAIN,不得宣称 count=0。
csc/mysql/mysql_config_editor 只按 future authorization 提供的 reviewed executable full path 做 OrdinalIgnoreCase 完整路径匹配。path 为 null 或枚举失败同样是 STATE_UNCERTAIN。
P03 至少包含:
terminal 的唯一通信入口为 Codex 原生 exact-thread:
management.admin thread iddev.reviewer.ana.cai thread id禁止 mbx interaction route、mbx send、project inbox、session bridge、历史 session fallback 或任何 legacy JSONL 投递。
每个目标最多调用一次原生发送;成功只记 dispatch_accepted。超时、返回不确定或目标状态不明确时记录 DELIVERY_AMBIGUOUS_NO_RETRY,不得改走备用通道、重发或把 delivery ambiguity 解释为执行成功。
P02/P04 必须静态扫描 P01—P04,不允许出现 legacy route/inbox/session 调用字符串;本规则只验证源码合同,不在 P 阶段真实发送测试消息。
未来 P 阶段若获单独授权:
P04 必须覆盖:
invocation_count=1 且第二调用被本地 guard 拒绝P05/P06 为 UTF-8 无 BOM、无 CR、无尾 LF 的 ordinal-key JCS。P07 为 UTF-8 Markdown,P08 为 RFC4180 CSV。P08 记录 P01—P07 bytes/hash;P08 self row 的 bytes/hash 为空,外部 P08 hash 只进入原生 handoff/审计,保持 DAG 无环。
V015 计划审核 PASS 必须证明:
DateTimeOffset parse/UTC ticks/半开窗口合同唯一。DateTime/宽松 parse/culture fallback:STOP_TIME_CONTRACT_DRIFT本文件仅允许 dev.reviewer.ana.cai 独立计划审核。审核 PASS 也只允许向 management.admin 申请 Stage P 的 P01—P08 单次实现授权,不允许直接进入 R3、synthetic 或数据库。
在新的明确管理授权前,禁止创建 P01—P08、R3 R01—R20、运行 PowerShell validation/csc/outer/synthetic/proof/config-editor/mysql/SQL/database、读取凭据、访问网络、创建正式数据、执行 BATCH-001 或形成业务结论。