edit | blame | history | raw

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

  • plan_id: CODE-DESIGN-ANA-SEMI-ROOT-PREFLIGHT-ORCHESTRATION-V007-V021
  • role_instance_id: dev.developer.ana.cai
  • created_at: 2026-07-26T18:10:04.9230408+08:00
  • predecessor_plan: CODE-DESIGN-ANA-SEMI-ROOT-PREFLIGHT-ORCHESTRATION-V007-V020 / 11173/235aaa1ef3ead63f0b729239de95e89ab54cffe0f2b80a4a7eac2e563120fc93
  • predecessor_review: AUDIT-DEV-ANA-SEMI-ROOT-PREFLIGHT-ORCHESTRATION-V007-PRECONSUMPTION-REPAIR-PLAN-V020=PASS/0/0 / 202509/0c81bf1711d4bab2859f7c225d3f9d7fc3992dab143810fd1183663990b0e769 / line 1673
  • triggering_failure: AUDIT-DEV-ANA-SEMI-ROOT-PREFLIGHT-ORCHESTRATION-V007-STAGE-P-IMPLEMENTATION-FAILURE-001=PASS_FAILURE_PATH/1/1 / 208353/9c58e80fa237993c5f3194c09458cc529f3e57bbd7f18ea7ebdc2393dc7533dd / line 1704
  • triggering_blocker: BLOCK-STAGE-P-IMPLEMENTATION-FAILURE-01_P01_WINDOWS_POWERSHELL_GENERIC_METHOD_SYNTAX_INVALID
  • status: PENDING_INDEPENDENT_PYTHON_ARCHITECTURE_REPAIR_PLAN_REVIEW
  • implementation_authorization: NOT_ISSUED
  • database_execution_authorization: NOT_ISSUED

本版是全新、append-only 的实现架构修复计划。旧 Stage P A001 已永久关闭;旧 P01-P04 是不可变失败历史,旧 P05-P08 与旧 run 继续 absent。本版不修改、删除、重命名、复用或补造任何旧目标。

1. 决策与目标

1.1 架构决策

Stage P 从 C#/.NET Framework + Windows PowerShell 5.1 切换为受管 CPython 3.12 单进程实现。该切换只 supersede Stage P 的实现语言、运行时、API 表达与目标路径;V007/V020 已审核通过的业务边界继续有效:

  • 授权窗口仍为带时区的半开区间 [authorized_at, expires_at)
  • 第一次 preconsumption 异常立即 fail-closed,不允许修正后重跑;
  • process selector 必须 exact、non-self-match、confirmed-zero 与 unknown 分账;
  • source/result 使用 CreateNew/no-overwrite,原生字节与 hash 可复验;
  • native-only exact-thread terminal delivery,不使用 legacy MB-X route/inbox/session fallback;
  • network、credential、mysql、SQL、database、synthetic、R3、formal target 和 BATCH-001 均不在本计划执行范围内。

1.2 为什么切换 Python

旧实现失败点是 Windows PowerShell 5.1 无法解析 [Linq.Enumerable]::SequenceEqual[byte](...)。Python 直接使用 bytes == bytes,不存在 PowerShell 泛型静态方法语法差异;ast.parsejson.loadsjson.dumpshashlib.sha256os.open(..., O_CREAT|O_EXCL)datetime 均为标准库,不需要网络安装第三方依赖。

本计划不把“换语言”解释为放宽合同。相反,解析、JCS、字节、路径、进程与终态验证都前移到第一次持久化之前。

2. 运行时与依赖边界

2.1 逻辑运行时

代码和正式文档只绑定逻辑运行时 BUNDLED_WORKSPACE_PYTHON_3_12。管理授权前动态解析其绝对路径,并绑定同一次授权的 path/bytes/SHA-256/version。当前只读观察值为:

field observed value
absolute path C:\Users\Cai\.cache\codex-runtimes\codex-primary-runtime\dependencies\python\python.exe
bytes 91648
SHA-256 3c6a206b7d93cca823934a83732220dcffd413fd1036d9fb82eebb64599cf7f3
product/file version 3.12.13

该绝对路径是当前环境证据,不写入未来源代码。路径、bytes、hash 或 version 漂移时只能 HOLD/STOP,并重新走计划/授权判断。

2.2 依赖

本阶段只允许 Python 标准库。当前只读检查显示 pymysql=falsemysql.connector=falsesqlalchemy=false。本计划不安装包、不访问网络、不引入 vendor wheel。

后续数据库身份/授权预检不得把聊天中的密码传入 Python argv、stdin、环境、文件或日志。数据库连接仍应由 Python 编排器启动冻结的 mysql.exe --login-path=ana_semi_admin_preflight,由 .mylogin.cnf 提供不可见认证;是否允许该子进程和两条 SQL,必须在 Stage P 实现审核 PASS 后另立执行授权。

3. 全新目标宇宙

future run:RUN-DEV-ANA-SEMI-ROOT-PREFLIGHT-PYTHON-STAGE-P-20260726-001

id relative path role creation
Y01 dev/ana-dev/ana_semi_preconsumption_v002.py Python implementation module CreateNew
Y02 dev/ana-dev/test/test_ana_semi_preconsumption_v002.py Python standard-library unit/contract tests CreateNew
Y03 dev/ana-dev/test/ana_semi_preconsumption_vectors_v002.json strict canonical JSON vectors CreateNew
Y04 dev/ana-dev/test/run_ana_semi_preconsumption_validation_v002.py single-process validation entry CreateNew
Y05 dev/ana-dev/tmp/RUN-DEV-ANA-SEMI-ROOT-PREFLIGHT-PYTHON-STAGE-P-20260726-001/test/static-result.json static result CreateNew
Y06 dev/ana-dev/tmp/RUN-DEV-ANA-SEMI-ROOT-PREFLIGHT-PYTHON-STAGE-P-20260726-001/test/contract-result.json contract result CreateNew
Y07 dev/ana-dev/tmp/RUN-DEV-ANA-SEMI-ROOT-PREFLIGHT-PYTHON-STAGE-P-20260726-001/receipt/preflight-repair-receipt.md as-of Y06 receipt CreateNew
Y08 dev/ana-dev/tmp/RUN-DEV-ANA-SEMI-ROOT-PREFLIGHT-PYTHON-STAGE-P-20260726-001/manifest/preflight-repair-manifest.csv eight-row manifest, self hash external-only CreateNew

target count=8,source/test=4,temporary result=4,formal target=0。当前 Y01-Y08 与 future run 必须全部 absent。任何 pre-existence、reparse point、path escape、case-fold collision 或 parent mismatch 都是 preconsumption STOP。

旧 P01-P04 的 bytes/hash 必须继续精确为:

  • P01=18621/561d0a7d6ebb8769a459c2ec36e0c767330a29dc9117bea26acc0eb359af174b
  • P02=2824/85b561e449b7e385a44de7f66e609172c8e28869cde6f5e107701ff706a49a53
  • P03=4038/6b404e64d902ced1398664b2df50cb2f021512c6587b6bd5e513790db03377e1
  • P04=14811/e462986be23bababbdea99e2efa31f14c00ec09f2600cf5cfff568a409d30ae9

旧 P05-P08 必须保持 absent;不得用旧失败包作为 Python 实现输入。

4. 单进程实现模型

4.1 进程上限

Stage P implementation authorization 只允许一个 Python 进程:

BUNDLED_WORKSPACE_PYTHON_3_12 -I -B -c <reviewed_bootstrap>

  • python_process_count=exactly 1
  • powershell/csc/node/synthetic/proof/mysql_config_editor/mysql/query/database=0/0/0/0/0/0/0/false
  • timeout=120000ms,kill-wait=10000ms
  • stdout/stderr 分离为内存原生字节,不经过文本 pipeline,不创建额外文件;
  • process start 消耗未来单次授权;启动失败同样消费,不得 retry。

reviewed_bootstrap 的完整 UTF-8 bytes/hash、-c token、argv token count/preimage/hash 与 Win32 CommandLine bytes/hash,必须在下一次实现授权申请中作为动态固定向量提供。未冻结或复算不一致时不得启动。

4.2 内存 source bundle

唯一 Python 进程从 stdin 接收非秘密 ANA-SEMI-PYTHON-SOURCE-BUNDLE-JCS-V001。bundle 只含 Y01-Y04 的:artifact_id,relative_path,media_type,content_base64,bytes,sha256,按 Y01-Y04 排序。stdin 不得含数据库密码、token、cookie、credential 或 option-file 内容。

在任何文件打开之前,bootstrap 必须:

  1. 严格 UTF-8 解码 bundle,拒绝 BOM/CR/NUL/trailing LF;
  2. 验证 ordinal key/order、target allowlist、Base64 roundtrip、bytes/SHA-256;
  3. 对 Y01/Y02/Y04 全量执行 ast.parse,三者 error count 必须均为 0;
  4. 对 Y03 执行 json.loads,再以 UTF-8、sort_keys=True,separators=(',',':'),ensure_ascii=False,allow_nan=False 重新序列化,必须 byte-identical;
  5. 扫描所有 Python AST,禁止 subprocesssocketurllibhttprequests、数据库 connector、evalexec、动态 import 和 shell invocation;仅 bootstrap 自身允许一次受审的 compile/exec 加载 Y04;
  6. 计算四个 source hashes 并与 bundle 固定值相等。

任一失败必须在 Y01-Y08 materialized_count=0 时 terminal STOP。不得修正 bundle 后再次启动。

4.3 写入与调用顺序

内存 gate PASS 后,严格执行:

Y01 CreateNew → reopen/hash → Y02 CreateNew → reopen/hash → Y03 CreateNew → reopen/hash/canonical → Y04 CreateNew → reopen/hash/AST → import Y01/Y02/Y04 from exact reviewed paths → run static tests → Y05 → run contract tests → Y06 → freeze Y01-Y06 → Y07 → Y08 → external Y08 hash

所有写入使用 os.open(path, os.O_WRONLY|os.O_CREAT|os.O_EXCL, 0o600) 或等价 Windows exclusive-create;写完 flush+os.fsync+close,只读独占复开并复算 bytes/hash。不得 predelete、truncate、rename-over、rewrite、repair、backfill。

Y04 只提供固定 main(project_root, run_id, output_root) -> int;同一进程内只能调用一次。second call 由原子 owner state 直接返回 STOP_REENTRANT_CALL,provider call count=0,不能再次读取 clock/process/filesystem。

5. Python 合同映射

5.1 时间

  • 输入时间必须为 RFC3339/ISO-8601 且含显式 offset;
  • 使用 datetime.fromisoformat 后强制 tzinfo is not None
  • 比较前统一 astimezone(timezone.utc)
  • inside = authorized_at_utc <= now_utc < expires_at_utc
  • malformed、naive datetime、end<=start、clock provider exception 或二次调用均为唯一 STOP,不得纠正后重算。

5.2 字节相等

Python 权威实现为内建 bytes 严格相等:actual_bytes == expected_bytes。旧 PowerShell 语法字符串 [Linq.Enumerable]::SequenceEqual[byte]( 必须作为负向 sentinel 出现在 Y03;Y01/Y02/Y04 的 UTF-8 源码中该字符串出现次数必须为 0。

5.3 process selector

Python 实现只读取一次管理授权指定的、只读 process snapshot provider。selector 先按 PID 去重和 source PID 排除,再按 ordinal/case-sensitive executable path、argv token vector、cwd 与 run id 分类。访问拒绝、字段 null、重复 PID、snapshot drift 或相关进程 liveness 不确定时记录 unknown 并 STOP;不得用 substring、自身当前命令行或宽松名称匹配证明 zero。

本阶段不启动、终止或修改任何被观察进程。future management authorization 必须冻结 snapshot provider、字段 schema、exact selector vectors 和 no-self-match 规则。

5.4 结果 schema

Y03/Y05/Y06 延续 V020 的语义组,但采用语言无关 JSON 类型:string|integer|boolean|null|array[integer]|array[string],不再把 PowerShell CLR FullName 当作权威业务字段。为保持可审计性,结果同时记录 python_type_name,固定 enum 为 str|int|bool|NoneType|list[int]|list[str]

Y03 至少覆盖:

  • authorization window 4 个边界向量;
  • malformed/naive/end-before-start/provider exception/second-call;
  • selector success、15 个 selector 边界、provider precedence;
  • bytes equality PASS 与旧 PowerShell generic syntax negative regression;
  • JSON BOM/CR/NUL/trailing-LF/order/hash mutation;
  • source bundle AST error、dynamic import、subprocess/network/database import 禁止向量;
  • Y05/Y06/Y07/Y08 各 success/failure/attempted-no-output/invalid/unknown closure。

Y05/Y06 为 canonical JSON、UTF-8、无 BOM/CR/NUL/trailing LF。Y07 UTF-8、无 BOM/CR/NUL、恰好一个 final LF。Y08 为 RFC4180 CRLF、含 final CRLF、固定八行 Y01-Y08;Y08 自身 row 的 bytes/hash 为空,external Y08 bytes/hash 只进入 native terminal 与独立审核。

6. 状态、失败闭包与 DAG

artifact row 状态 enum:

NOT_RUN_UPSTREAM_STOP|ATTEMPTED_NO_OUTPUT|MATERIALIZED_INVALID_KNOWN|MATERIALIZED_VALID|STATE_UNCERTAIN

终态优先级:

PACKAGE_UNCLOSED_OR_STATE_UNCERTAIN/27 > RECEIPT_CREATE_STOP/25 > MANIFEST_CREATE_STOP/26 > OUTER_TIMEOUT_KILLED_KNOWN/24 > STATIC_TEST_FAILED/21 > CONTRACT_TEST_FAILED/22 > SOURCE_CREATE_OR_VALIDATE_STOP/11 > PASS/0

已知且安全 hash 的 partial 文件必须记 MATERIALIZED_INVALID_KNOWN,不能降级为 unknown;writer 尝试但无文件为 ATTEMPTED_NO_OUTPUT;从未到达 writer 为 NOT_RUN_UPSTREAM_STOP。只有 handle/liveness/close/hash 无法判定时才允许 STATE_UNCERTAIN/27

权威无环 DAG:

V021 + plan audit + management authorization → in-memory bundle gate → Y01-Y04 → Y05 → Y06 → freeze Y01-Y06 → Y07(as-of Y06) → Y08(record Y07 hash; self blank) → external native terminal(record Y08 hash) → independent implementation review

Y07 不宣称 Y08 final;native terminal 才记录最终 closure。任何上游失败后,下游未执行目标必须物理 absent,禁止伪造零字节文件。

7. 与数据库连接的边界

Python Stage P PASS 只证明安全编排器实现可用,不自动连接数据库。后续最近的合法动作仍是 root identity/grant preflight:

  1. Python 编排器只负责 process argv、native byte capture、验证和证据闭包;
  2. 数据库认证仅使用现有 named login-path ana_semi_admin_preflight,不得使用聊天密码;
  3. 仅允许管理另行授权的 SELECT USER(), CURRENT_USER()SHOW GRANTS FOR CURRENT_USER()
  4. root 永远不得映射为 READONLY_PROVEN
  5. 业务行情、45 formal targets、BATCH-001、写入、DDL、GRANT 继续 HELD。

如果未来决定采用 Python connector,必须先建立不会暴露秘密的 credential provider 并独立审核;当前环境没有 connector 包,本计划不授权安装或直连。

8. 审核与阶段门

独立 reviewer 必须至少验证:

  1. Python 架构切换只 supersede implementation stack,V007/V020 安全和业务边界无回退;
  2. runtime 当前 snapshot、标准库-only、第三方 connector absent 与 no-network 边界;
  3. Y01-Y08 8 个唯一目标、旧 P01-P04 hashes、旧 P05-P08 absent 与新 run absent;
  4. 单进程/内存 bundle/first-write-before-AST prevention 与 fail-fast/no-retry;
  5. Python time/bytes/process/JSON contracts、状态优先级、Y07/Y08 无环 DAG;
  6. 数据库仍为后续独立授权,不把聊天密码带入 Python。

本 V021 只允许 dev.reviewer.ana.cai 独立计划审核。review PASS 后,也只允许向 management.admin 申请新的、single-use、exact Y01-Y08 Python implementation/materialization/validation 授权。未获得明确管理授权前,禁止 Y01-Y08/run 物化、Python process、PowerShell/csc/node/synthetic/proof/config-editor/mysql/SQL/database/network/credential/formal target、R3、BATCH-001、配置/binding/session/role/permission/Git 修改。