# 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.parse`、`json.loads`、`json.dumps`、`hashlib.sha256`、`os.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=false`、`mysql.connector=false`、`sqlalchemy=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 ` - `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,禁止 `subprocess`、`socket`、`urllib`、`http`、`requests`、数据库 connector、`eval`、`exec`、动态 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 修改。