edit | blame | history | raw

CODE-DESIGN-ANA-SEMI-ROOT-PREFLIGHT-ORCHESTRATION-V007-V015

  • plan_id: CODE-DESIGN-ANA-SEMI-ROOT-PREFLIGHT-ORCHESTRATION-V007-V015
  • role_instance_id: dev.developer.ana.cai
  • created_at: 2026-07-26T10:29:03.4689921+08:00
  • predecessor_plan: CODE-DESIGN-ANA-SEMI-ROOT-PREFLIGHT-ORCHESTRATION-V007-V014 / 144286/bd9c03fac8a025bf3fe01eb37099e846f04bc304eef92bc5f3ac9f14cafc8539 / review=PASS/0/0
  • predecessor_failure_audit: AUDIT-DEV-ANA-SEMI-ROOT-PREFLIGHT-ORCHESTRATION-V007-REPAIR2-PRECONSUMPTION-STOP-FAILURE-001 / 162489/115bac1466edc3abac581830e6feac0dfa03c8ddbe935f60daf61bf1cb0a6045 / line=1434
  • predecessor_authorization: AUTH-DEV-ANA-SEMI-ROOT-PREFLIGHT-V007-REPAIR2-IMPLEMENTATION-20260725-001/A001=TERMINATED_PRECONSUMPTION_UNCONSUMED_PERMANENTLY_CLOSED
  • status: PENDING_INDEPENDENT_PREFLIGHT_REPAIR_PLAN_REVIEW
  • current_authorization: NOT_ISSUED
  • implementation/synthetic/database/BATCH-001: NOT_AUTHORIZED/HELD/HELD/HELD

1. 目标与范围

本计划只修复 BLOCK-PRECONSUMPTION-01_MANDATORY_PREFLIGHT_TERMINAL_MISMATCH_RERUN_STARTED,并固化 ISSUE-PRECONSUMPTION-COMM-01_LEGACY_MBX_ROUTE_ATTEMPT_AFTER_NATIVE_POLICY 的不回退要求。

必须关闭四个根因:

  1. 时间窗口全部使用 DateTimeOffset,禁止 DateTimeDateTimeOffset 隐式比较。
  2. mandatory preflight 恰好调用一次;首次异常、mismatch 或 uncertainty 当场生成本地 terminal STOP,禁止修正后重跑。
  3. 相关进程选择器使用完整可执行文件坐标和完整命令行等值匹配,禁止 substring/self-match。
  4. terminal 仅通过 Codex 原生 exact-thread 投递,禁止 legacy MB-X route/inbox/session fallback。

本计划不修改 V014,不复用已经关闭的 Repair2 A001/run/target,也不授权 R01—R20、outer、csc、synthetic、proof、config-editor、mysql、SQL、数据库、网络、凭据、正式数据或业务动作。

2. 技术路线决定

2.1 保留的执行工具栈

技术 职责
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#

2.2 Python / Node.js 处置

Python 和 Node.js 技术上均可实现时间、文件和 JSON 逻辑,但本轮不换栈:V007/V014 已审核的 C# API、PowerShell DAG、进程数、argv、JCS 和失败状态均依赖现有技术坐标。换栈会同时引入 runtime、依赖、进程、argv、canonical JSON 和打包合同重审,不能缩短当前最短路径。

若未来需要换栈,必须作为独立架构变更重新设计、审核和授权,不得在本计划或后续实现中静默替换。

3. 新的两阶段修复链

3.1 Stage P:稳定 preflight 模块

候选 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,不得访问数据库或凭据。

3.2 Stage R3:后续实现链

只有 P 阶段实现审核 PASS 后,才允许另立完整 R3 计划并冻结新的 versioned R01—R20、payload、run、authorization、attempt、argv 和 hash。R3 不得复用 Repair2 的任何 ID/path/hash。

本 V015 不请求 R3 实现授权;它只建立可被 R3 授权引用的稳定 preflight 能力。

4. P01 公共 API

P01 只导出以下四个函数,禁止额外 pipeline output:

  1. ConvertTo-AnaSemiAuthorizationWindow
  2. Test-AnaSemiAuthorizationWindow
  3. Select-AnaSemiExactRelatedProcess
  4. Invoke-AnaSemiPreconsumptionPreflight

所有 helper 的非返回 API 调用必须显式赋给 $null[void];每个导出函数只返回恰好一个 PSCustomObject。调用端在读取属性前必须验证:

  • @($result).Count -eq 1
  • PSTypeNames[0] 等于该函数冻结的类型名
  • required property set 采用 ordinal、case-sensitive、无 missing/extra
  • 每个字段类型/null 符合下文 schema

任何 count/type/property 漂移直接进入 STOP_PRECONSUMPTION_RESULT_CONTRACT_DRIFT,不得再次调用函数。

5. 时间窗口唯一合同

5.1 输入格式

authorized_atexpires_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 或解析失败后的第二种格式。

5.2 比较坐标

  • now 只来自一次 [DateTimeOffset]::UtcNow 调用,测试时由注入的 clock 返回。
  • 三个时点均转换为 UtcDateTime.Ticks:INT64
  • 唯一有效规则:authorized_ticks <= now_ticks -and now_ticks < expires_ticks
  • expires_ticks <= authorized_ticks 直接 STOP。
  • 解析、转换或 clock 任一异常直接 STOP,不得重新取时。

5.3 固定测试向量

authorized_at=2026-07-26T01:12:58.2748820+08:00expires_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

这些向量只验证比较语义,不授予历史窗口或任何执行权。

6. mandatory preflight 单次调用状态机

6.1 唯一阶段顺序

START → IDENTITY → WINDOW → PLAN_HASH → TARGET_ABSENCE → HISTORY_IMMUTABILITY → PROCESS_STATE → PASS

Invoke-AnaSemiPreconsumptionPreflight 内部维护 preflight_invocation_count=1。生产调用方必须在进入函数前置本地 monotonic guard;函数返回或抛出后 guard 永久关闭,本 turn 不得再调用。

6.2 首错终态

首个事实 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。

7. PreflightResult 完整 schema

类型名: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:

  • STRING 非空:authorization_id,result_schema_id,started_at,finished_at,status,preflight_stage
  • INT64 非负:三个 *_utc_ticks;解析失败时对应不可获得值为 null
  • INT32 非负:invocation_count,target_existing_count,history_hash_mismatch_count,related_process_count,materialized_target_count;无法安全取得的字段为 null
  • BOOL:candidate_run_exists,authorized_outer_started,credential_access,database_connection_performed,network_access;无法确定时允许 null,但 status 必须 STOP
  • nullable STRING:stop_code,exception_type,uncertain_field
  • invocation_count 在所有合法对象中恰好为 1
  • PASS 要求 stop/exception/uncertain 均 null,全部计数字段非 null且为 0,五个 BOOL 均 false
  • STOP 不得用 0/false 伪造未完成检查;未执行或不确定字段必须 null

本对象只存在于内存和原生 terminal 消息;pre-consumption STOP 不创建项目文件。

8. 不会 self-match 的 exact process selector

8.1 输入快照

selector 只接受结构化进程行:

process_id:UINT32,parent_process_id:UINT32,executable_path:STRING|null,command_line:STRING|null

生产 adapter 从 Win32_Process 一次性获取快照;测试 adapter 使用 P03 固定数组。禁止在 selector 内再次查询。

8.2 outer 匹配规则

future management authorization 必须提供:

  • expected_outer_executable_path
  • expected_outer_command_line_utf8_sha256
  • expected_outer_command_line_utf8_base64
  • source_preflight_process_id

一行仅在以下全部成立时匹配:

  1. process_id != source_preflight_process_id
  2. executable_path 非 null,经 Path.GetFullPath 后与 expected path 采用 OrdinalIgnoreCase 完全相等
  3. command_line 非 null,其 UTF-8 bytes 与 reviewed Base64 解码 bytes 完全相等
  4. UTF-8 SHA-256 与 reviewed hash 完全相等

禁止 -like-matchContains、substring、仅进程名、仅 script path 或把当前 shell 命令正文中的字符串当作实际 child argv。任一候选 path/command_line null、规范化异常或重复 exact match 均为 STATE_UNCERTAIN,不得宣称 count=0。

8.3 其他禁止进程

csc/mysql/mysql_config_editor 只按 future authorization 提供的 reviewed executable full path 做 OrdinalIgnoreCase 完整路径匹配。path 为 null 或枚举失败同样是 STATE_UNCERTAIN。

8.4 固定 selector 反例

P03 至少包含:

  1. exact outer 行 → count=1
  2. 相同 exe、不同完整 command line → count=0
  3. command line 仅包含 expected 字符串 → count=0
  4. source PID 且其 command line 文本含 expected 字符串 → count=0
  5. exact command line、不同 exe → count=0
  6. executable_path=null → STOP_UNCERTAIN
  7. command_line=null → STOP_UNCERTAIN
  8. 两条 exact outer → STOP_UNCERTAIN

9. native-only terminal delivery

terminal 的唯一通信入口为 Codex 原生 exact-thread:

  • management:授权中冻结的 management.admin thread id
  • reviewer:项目配置冻结的 dev.reviewer.ana.cai thread id

禁止 mbx interaction routembx 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 阶段真实发送测试消息。

10. P 阶段验证方案

10.1 进程与文件边界

未来 P 阶段若获单独授权:

  • P01—P04 使用 CreateNew/no-overwrite 物化
  • 启动恰好一个 reviewed PowerShell validation process 执行 P04
  • child/csc/mysql/config-editor/network/database/credential 均为 0/false
  • P05→P06→P07→P08 按 DAG CreateNew
  • 任一失败保留已物化子集,禁止补造、覆盖、删除或重试

10.2 测试覆盖

P04 必须覆盖:

  1. 5 个时间向量
  2. 首个异常注入后 invocation_count=1 且第二调用被本地 guard 拒绝
  3. 8 个 selector 向量
  4. PASS/4 类 STOP 的 22 字段 schema/null 矩阵
  5. helper 额外 pipeline object、missing/extra property、错误类型探针
  6. legacy communication token 静态禁入
  7. CreateNew conflict/no-overwrite

10.3 P05/P06 canonical

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 无环。

11. 验收标准

V015 计划审核 PASS 必须证明:

  1. C# + PowerShell 栈选择及不换栈边界明确。
  2. DateTimeOffset parse/UTC ticks/半开窗口合同唯一。
  3. 任一首错只生成一个 terminal,preflight 不可重入且不可重跑。
  4. exact selector 不会因为 source shell 文本而 self-match。
  5. unknown 与 confirmed zero 分离,不伪造进程或文件状态。
  6. native-only delivery 不存在 legacy fallback。
  7. P01—P08 目标、状态、测试、DAG 和两阶段授权边界完整。
  8. V014、历史失败包和已关闭授权均保持不变。

12. 风险与 STOP

  • 任何新增 runtime 或改用 Python/Node.js:STOP_ARCHITECTURE_DRIFT
  • 任何 DateTime/宽松 parse/culture fallback:STOP_TIME_CONTRACT_DRIFT
  • 首错后第二次 preflight、重新取时或重新枚举:STOP_RETRY_CONTRACT_DRIFT
  • substring/process-name-only/self-match:STOP_PROCESS_SELECTOR_DRIFT
  • legacy MB-X 通信 fallback:STOP_COMMUNICATION_POLICY_DRIFT
  • P 阶段与 R3 阶段合并授权:STOP_STAGE_AUTHORIZATION_DRIFT
  • 旧 Repair2 ID/path/run/target 复用:STOP_HISTORY_REUSE

13. 当前门禁

本文件仅允许 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 或形成业务结论。