# SymCC-Parallel 新增实现技术档案

- 文档状态：持续维护
- 当前基线：2026-07-28
- 适用范围：本分支相对上游 SymCC 新增或显著扩展的编译器、运行时、求解器、
并行调度、AFL++ 协同、语义候选生成和 benchmark 能力。

## 1. 文档目的

本档案用于回答四个长期问题：

1. 新方案解决了什么研究问题，借鉴了哪类技术思想；
2. 方案在代码中如何实现，跨层数据如何流动；
3. 当前有什么可重复的功能性结果和测试证据；
4. 哪些结论尚未经过等 CPU、多轮公开 benchmark 验证。

本文是“已实现能力”的权威总账。详细环境变量以
[`Configuration.txt`](Configuration.txt) 为准，最新学术依据与 SOTA 差距以
[`sota_hybrid_execution_2026.md`](sota_hybrid_execution_2026.md) 为准，阶段计划以
[`Recent_Work_and_Next_Research_Plan.md`](Recent_Work_and_Next_Research_Plan.md)
为准。

### 1.1 结果等级

为避免把工程完成度误写成科研结论，本文统一使用以下等级：

| 等级 | 含义 | 可以对外表述 |
| --- | --- | --- |
| I：Implemented | 主路径已经接入真实系统 | “已经实现并集成” |
| T：Tested | 有自动化单元、lit 或集成测试 | “已通过功能与回归测试” |
| B：Benchmarked | 有固定预算的本地测量 | “在给定环境测得……” |
| R：Research-validated | 有等 CPU、多轮、置信区间和消融 | “实验支持该方法提升……” |

截至当前版本，本文记录的主路径达到 I/T。历史 benchmark 产物可用于检查评测
管线，但最新组合尚未全部达到 R；因此不声称所有新机制已经独立取得 SOTA 覆盖率。

## 2. 系统总览

新增系统把单次 concolic execution 扩展为跨层闭环：

```text
LLVM instrumentation
  |  branch/site/dependency metadata, ITE, UCSan shadow operations
  v
QSYM/SymCC runtime
  |  path prefix, solver outcome, data progress, generated candidates
  v
engine-neutral SolverTelemetry
  |  PrefixDAG / ECT / structural graph / semantic classification
  v
MPI coordinator
  |  seed-worker-state assignment + solver sequence + replay target
  v
exact / tailored / sampling executors
  |  candidates, semantic proposals, schedule replays
  v
concrete target replay + authoritative AFL bitmap triage
  |  reward, cost, interference, coverage ownership
  +----------------------------------------------------------+
```

可信边界有两条：

- 求解器、采样器、agent 或语义模型只负责提出候选；
- 候选是否到达目标、是否保留，分别由真实执行 telemetry 和全局 AFL bitmap 决定。

## 3. 实现清单

| ID | 实现族 | 主要代码 | 核心测试 | 状态 |
| --- | --- | --- | --- | --- |
| F00 | 编译/runtime 基础正确性 | `compiler/Symbolizer.cpp`, `runtime/src/RuntimeCommon.cpp` | `pointer_width_casts.ll`, 上游回归测试 | I/T |
| F01 | 统一执行遥测与后端抽象 | `runtime/.../solver.*`, `util/hybrid_feedback.py`, `util/executor_portfolio.py` | `telemetry.c`, `test_hybrid_feedback.py`, `test_executor_portfolio.py` | I/T |
| F02 | Backsolver 与 bounded Veritesting | `compiler/Symbolizer.*`, `compiler/Pass.cpp`, `runtime/.../solver.*` | `backsolver_*.ll`, `veritesting_memory_reject.ll` | I/T |
| F03 | 分层求解、Pangolin 上下文复用与 UNSAT 复用 | `runtime/.../solver.*` | `poly_cache.c`, `unsat_core_cache.c` | I/T |
| F04 | data coverage、comparison taint 与 AFL 原生 map | `compiler/Pass.cpp`, `runtime/src/LibcWrappers.cpp`, `util/afl_data_coverage_rt.c` | `data_coverage_libc.c`, `test_afl_data_coverage.py` | I/T |
| F05 | S2F actionseed、PrefixDAG、TACO/MultiGo | `runtime/.../solver.*`, `util/hybrid_feedback.py`, `util/mpi_fuzzing_helper.py` | `s2f_actionseed.c`, `test_hybrid_feedback.py` | I/T |
| F06 | directed coloration、并发引导和结构任务图 | `compiler/Pass.cpp`, `util/merge_directed_distance.py`, `util/structural_tasks.py` | `directed_*.c`, `concurrency_guidance.c`, `test_structural_tasks.py` | I/T |
| F07 | Expressive Coverage Tree 与 minimum path cover | `util/expressive_coverage.py`, `util/path_cover.py` | `test_expressive_coverage.py`, `test_path_cover.py` | I/T |
| F08 | 学习型 seed/worker/策略/参数调度 | `util/hybrid_feedback.py`, `util/adaptive_components.py`, `util/self_config.py` | `test_hybrid_feedback.py`, `test_adaptive_components.py`, `test_self_config.py` | I/T |
| F09 | SMTgazer 式算法序列调度 | `util/smt_algorithm_scheduler.py`, `util/smt_sequence_training.py` | `test_smt_algorithm_scheduler.py`, `test_smt_sequence_training.py` | I/T |
| F10 | 语义 fallback、agentic route 与验证式 proposal | `util/semantic_fallback.py`, `util/agentic_concolic_hooks.py`, `util/verified_proposals.py`, `util/semantic_proposals.py` | 对应 `test_*.py` | I/T |
| F11 | UCSan 式 under-constrained execution | `compiler/UCSan.*`, `runtime/*UCSan*`, `util/ucsan_seed.py` | `ucsan_jit.c`, `test_ucsan_seed.py` | I/T |
| F12 | content-addressed 分布式状态、fenced lease 与 coverage gossip | `util/distributed_state.py`, `util/mpi_fuzzing_helper.py` | `test_distributed_state.py` | I/T |
| F13 | bounded-DPOR 调度探索 | `util/symcc_schedule_rt.c`, `util/schedule_exploration.py` | `test_schedule_exploration.py` | I/T |
| F14 | AFL++ hint mutator 与 profile 编排 | `util/afl_symcc_hint_mutator.py`, `benchmark/run_benchmark.py` | `test_afl_hint_mutator.py`, `test_afl_profile_orchestration.py` | I/T |
| F15 | 干扰感知离线策略评估 | `util/offline_policy.py`, `benchmark/run_benchmark.py` | `test_offline_policy.py` | I/T |
| F16 | benchmark、消融与统计报告 | `benchmark/run_benchmark.py`, `benchmark/analyze_ablation.py` | `test_ablation_analysis.py` | I/T |
| F17 | MPI 并行执行基础与可靠协议 | `util/mpi_concolic_execution.py`, `util/mpi_fuzzing_helper.py` | MPI 集成运行、并行评估报告 | I/T/B |
| F18 | AFL++/SymCC 闭环与吞吐优化 | `util/mpi_fuzzing_helper.py`, `benchmark/profile_bottleneck.py` | hybrid/scaling benchmark、profile 产物 | I/T/B |
| F19 | 可扩展工作分解与资源控制 | `util/mpi_fuzzing_helper.py`, `benchmark/make_afl_targets_persistent.sh` | synthetic/public scaling 运行 | I/T/B |
| F20 | 结构化输入与异构 fuzzing 协同 | `util/grimoire_gen.py`, `benchmark/run_benchmark.py`, QSYM runtime | 固定配置集成实验 | I/T/B |
| F21 | 公开 benchmark 与测量正确性 | `benchmark/run_benchmark.py`, `benchmark/*public*` | 10-target/full benchmark 与报告 | I/T/B |
| F22 | 阶段计时与冗余归因 | `util/mpi_fuzzing_helper.py`, `benchmark/run_benchmark.py` | timing/redundancy benchmark 产物 | I/T/B |
| F23 | 可配置 SymCC/SymSan 引擎抽象 | `util/concolic_engine.py`, `scripts/engine_*dogfight.py` | 微目标、覆盖与 full-hybrid 对拍 | I/T/B |
| F24 | SymSan 技术迁移与 RGD 求解栈 | `scripts/symsan_patches/`, `scripts/build_public_symsan.sh` | 真实目标与 6-target benchmark | I/T/B |
| F25 | 可复现安装与离线交付 | `setup.sh`, `package.sh`, `scripts/build_symsan.sh` | bare-machine/debootstrap 验证 | I/T/B |
| F26 | 跨层正确性审查修复 | solver、SiteId、UCSan、hybrid feedback、distributed state | modular/cache/fast/libc/UCSan/site/fencing 回归 | I/T |
| F27 | 持久化 Query IR、异步 query trie 与增量 Z3 服务 | QSYM `solver.*`, `query_solver.cpp`, `util/query_store.py`, `util/symcc_query_service.py` | `query_ir.c`, `query_prefix_reuse.py`, `test_query_store.py` | I/T |
| F28 | 完整 static Data Coverage 与独立 novelty/dominance | `compiler/Symbolizer.cpp`, `compiler/Pass.cpp`, QSYM `solver.*`, `util/hybrid_feedback.py` | `data_coverage_static.c`, `data_coverage_dso.c`, `test_hybrid_feedback.py` | I/T |
| F29 | reusable solution generator 与 full-matrix AFL mutator | `util/solution_generator.py`, `util/query_store.py`, `util/afl_symcc_hint_mutator.py` | `test_solution_generator.py`, `test_query_store.py`, `test_afl_hint_mutator.py`, `query_generator.py` | I/T |
| F30 | string-constraint artifact 与 offset-aware candidate | `runtime/src/LibcWrappers.cpp`, `util/string_constraints.py`, `util/afl_symcc_hint_mutator.py` | `test_string_constraints.py`, `test_afl_hint_mutator.py`, `string_constraints.c` | I/T |
| F31 | asynchronous solver portfolio 与 disagreement telemetry | `util/query_store.py`, `util/symcc_query_service.py` | `test_query_store.py` | I/T |
| F32 | PSCache-inspired partial solution cache 与 Query IR verified reuse | `util/query_store.py` | `test_query_store.py` | I/T |
| F33 | SymCC-str phase-2 string theory backend 与 MPI/CLI materialization | `util/string_constraints.py`, `runtime/src/backends/qsym/query_solver.cpp`, `util/mpi_fuzzing_helper.py`, `util/symcc_string_solver.py` | `test_string_constraints.py`, `string_solver.py`, CLI smoke | I/T |
| F34 | Bounded parallel solver portfolio racing | `util/query_store.py`, `util/symcc_query_service.py` | `test_query_store.py` | I/T |
| F35 | Solver-helper internal PSCache assignment probing | `runtime/src/backends/qsym/query_solver.cpp`, `util/query_store.py` | `query_solver_pscache.py`, `test_query_store.py` | I/T |
| F36 | Lase/Cottontail-inspired token grammar solve-complete proposals | `util/semantic_proposals.py` | `test_semantic_proposals.py` | I/T |
| F37 | IFSS/Hydra-style targeted transformation proposals | `util/semantic_proposals.py`, `util/verified_proposals.py` | `test_semantic_proposals.py`, `test_verified_proposals.py` | I/T |
| F38 | GenSym-style live continuation checkpoint descriptors | `util/distributed_state.py` | `test_distributed_state.py` | I/T |
| F39 | ConDPOR-style HB/lockset schedule conflict analysis | `util/schedule_exploration.py` | `test_schedule_exploration.py` | I/T |
| F40 | ConDPOR-style memory read/write schedule trace instrumentation | `compiler/Symbolizer.cpp`, `util/symcc_schedule_rt.c`, runtime notification ABI | `schedule_memory_trace.c` | I/T |
| F41 | ConDPOR-style schedule constraint artifact export | `util/schedule_exploration.py`, `util/mpi_fuzzing_helper.py` | `test_schedule_exploration.py` | I/T |
| F42 | Query IR × schedule artifact joint replay validation | `util/query_store.py`, `util/symcc_query_service.py`, `util/mpi_fuzzing_helper.py` | `test_query_store.py` | I/T |
| F43 | Schedule memory provenance filtering | `util/symcc_schedule_rt.c` | `test_schedule_exploration.py` | I/T |
| F44 | Schedule memory provenance tags and artifact propagation | `util/symcc_schedule_rt.c`, `util/schedule_exploration.py`, `util/query_store.py` | `test_schedule_exploration.py`, `test_query_store.py` | I/T |
| F45 | Bounded SC schedule-SMT replay-prefix encoding | `util/schedule_exploration.py`, `util/mpi_fuzzing_helper.py` | `test_schedule_exploration.py`（libz3） | I/T |
| F46 | Mutex/rwlock lifecycle-state schedule-SMT | `util/schedule_exploration.py`, `util/mpi_fuzzing_helper.py` | `test_schedule_exploration.py`（SAT/UNSAT + preload） | I/T |
| F47 | Condition-variable wait/wake operational schedule-SMT | `util/symcc_schedule_rt.c`, `util/schedule_exploration.py` | `test_schedule_exploration.py`（SAT/UNSAT + real pthread preload） | I/T |
| F48 | Thread create/join operational schedule-SMT | `util/symcc_schedule_rt.c`, `util/schedule_exploration.py` | `test_schedule_exploration.py`（SAT/UNSAT + real pthread_exit preload） | I/T |
| F49 | Lifecycle partial-order / linear-extension schedule-SMT v5 | `util/schedule_exploration.py`, `util/mpi_fuzzing_helper.py` | `test_schedule_exploration.py`（partial/permutation differential SAT/UNSAT + strict link） | I/T/B |
| F50 | Scaled-anchor sparse lifecycle order links | `util/schedule_exploration.py` | `test_schedule_exploration.py`（linear-vs-quadratic counts + libz3） | I/T/B |
| F51 | Constructive linear-extension certificate checker | `util/schedule_exploration.py` | `test_schedule_exploration.py`（model/query/choice/tamper checks） | I/T |
| F52 | Verified topology-to-runtime replay materialization | `util/symcc_schedule_linearize.py`, `util/schedule_exploration.py` | CLI + real pthread preload replay | I/T |
| F53 | Violation-driven lazy critical-section refinement | `util/schedule_exploration.py` | exact/relaxed SAT/UNSAT + 64-section ablation | I/T/B |
| F54 | Direct system-libz3 model extraction and solve CLI | `util/schedule_exploration.py`, `util/symcc_schedule_solve.py` | C API model/certificate/CLI/digest tests | I/T |
| F55 | Detach/cancel/join-cancelled identity lifecycle | `util/symcc_schedule_rt.c`, `util/schedule_exploration.py` | real preload detach/cancel + 4104-thread recycling | I/T/B |
| F56 | Bounded Source-DPOR certificate、source set 与 sleep-set persistence | `util/schedule_exploration.py` | equivalence/source/tamper/persistence tests | I/T |
| F57 | Single-context Query IR × schedule × read-from solving | `util/schedule_exploration.py`, `util/query_store.py` | joint SAT/UNSAT、byte bridge、certificate recheck | I/T |
| F58 | Parameterized SC/TSO/RA bounded memory-model constraints | `util/schedule_exploration.py`, `util/mpi_fuzzing_helper.py` | SB、store forwarding、release/acquire litmus | I/T |
| F59 | Content-addressed live state、solver stack 与 page-COW memory | `util/distributed_state.py`, `util/symcc_live_state.py` | fork/restore/diff/tamper/missing-object tests | I/T |
| F60 | Executable research-evidence bundle and claim gates | `util/research_evidence.py` | backend oracle、semantic gate、digest/CLI tests | I/T |
| F61 | Bounded Optimal-DPOR wakeup tree and cooperative ready evidence | `util/schedule_exploration.py`, `util/symcc_schedule_rt.c`, `util/mpi_fuzzing_helper.py` | weak-initial、ready-root、tamper、real pthread replay tests | I/T |
| F62 | Bounded ConDPOR execution graph、backward revisit 与 maximal extension | `util/schedule_exploration.py`, `util/mpi_fuzzing_helper.py` | po/rf/co、cycle/protection、extension、tamper/persistence tests | I/T |
| F63 | Path-dependent branch/action schedule events 与 causal regeneration | compiler schedule instrumentation、`util/symcc_schedule_rt.c`, `util/schedule_exploration.py` | branch/action trace、byte-overlap dependency、suffix deletion tests | I/T |
| F64 | Operational enabledness offers 与可复检证书 | `util/symcc_schedule_rt.c`, `util/schedule_exploration.py` | mutex/rwlock/join/wait offer、terminal/tamper/real replay tests | I/T |
| F65 | Native atomic trace 与扩展 bounded C11 RA 语义 | `compiler/Pass.cpp`, compiler/runtime ABI、`util/schedule_exploration.py` | atomic lit、RMW/release-sequence/fence/SC/race/mixed-size tests | I/T |
| F66 | Executable continuation IR 与 MPI live-state fork/resume | `util/live_continuation.py`, `util/distributed_state.py`, `util/mpi_fuzzing_helper.py` | pause/resume/fork/call/COW/CLI、MPI integration checks | I/T |
| F67 | Sealed randomized research protocol 与配对统计 | `benchmark/research_protocol.py`, `benchmark/analyze_ablation.py`, `benchmark/run_benchmark.py` | protocol/tamper/equal-CPU/execution、paired analysis tests | I/T |
| F68 | Conservative LLVM-to-continuation lowering 与 feasibility pruning | `compiler/ContinuationLowering.*`, `util/llvm_to_continuation.py`, `util/live_continuation.py` | LLVM/C lowering、switch/call/select/交叉 PHI/rejection/solver pruning/CLI tests | I/T |
| F69 | Object-aware static memory continuation lowering | `compiler/ContinuationLowering.cpp`, `util/live_continuation.py`, `util/distributed_state.py` | initializer/GEP/multi-byte/COW/endianness/bounds/readonly/symbolic-address tests | I/T |
| F70 | Explicit-size symbolic input-buffer entry ABI | `compiler/ContinuationLowering.cpp`, `util/live_continuation.py`, `util/mpi_fuzzing_helper.py` | LLVM/C pointer-size lowering、logical bounds、capacity、CAS memory、CLI tests | I/T |
| F71 | Frame-local fixed stack objects 与 resumable lifetime | `compiler/ContinuationLowering.cpp`, `util/live_continuation.py` | alloca/dominance/reentry/init-marker/inactive/recursive/dynamic rejection tests | I/T |
| F72 | Bounded call-site heap objects 与 alloc/free lifetime | `compiler/ContinuationLowering.cpp`, `util/live_continuation.py` | LLVM/C malloc/free lowering、checkpoint lifetime、reallocation、UAF/double-free/uninitialized/dynamic rejection | I/T |
| F73 | Bounded symbolic offset/alias enumeration 与 finite ITE memory | `compiler/ContinuationLowering.cpp`, `util/live_continuation.py` | LLVM/C dynamic/nested GEP、symbolic load/store、no-wrap index domain、overlap、heap-init checkpoint、alias-contract/limit tests | I/T |
| F74 | Guarded pointer PHI/select provenance union | `compiler/ContinuationLowering.cpp`, `util/live_continuation.py` | LLVM/C select/PHI、cross-object load/store、per-arm dynamic GEP、null pruning、cycle/total-limit/artifact rejection | I/T |
| F75 | Bounded multi-instance heap identity 与 canonical slot reuse | `compiler/ContinuationLowering.cpp`, `util/live_continuation.py` | LLVM/C same-site multi-live、pool exhaustion、checkpoint、malformed pool、GEP-after-union tests | I/T |
| F76 | Bounded cross-function pointer/object references | `compiler/ContinuationLowering.cpp`, `util/live_continuation.py` | LLVM/C pointer arg/return/forwarding、caller-stack checkpoint、heap return、signature tamper、stack escape/domain rejection | I/T |
| F77 | CAS-rooted state-local incremental solver contexts | `runtime/src/backends/qsym/query_solver.cpp`, `util/live_continuation.py`, `util/distributed_state.py`, `util/mpi_fuzzing_helper.py` | exact/parent/cold context、warm/cold resume、one-shot ablation、legacy server compatibility | I/T |
| F78 | Nullable runtime-sized allocator 与 conditional heap state | `compiler/ContinuationLowering.cpp`, `util/live_continuation.py` | LLVM/C dynamic malloc/calloc/realloc、OOM、logical bounds、conditional lifetime/init、checkpoint tests | I/T |
| F79 | Caller-domain symbolic pointer certificate | `compiler/ContinuationLowering.cpp`, `util/live_continuation.py` | LLVM/C symbolic-GEP argument、hidden domain parameter、pointer-return domain、artifact tamper/false-domain pruning tests | I/T |
| F80 | Bounded indirect-call points-to dispatch 与 typed continuation ABI | `compiler/ContinuationLowering.cpp`, `util/live_continuation.py` | LLVM select/PHI、真实 C function pointer、symbolic target fork、ID/signature tamper tests | I/T |
| F81 | Deterministic external memory-compare effect summary | `compiler/ContinuationLowering.cpp`, existing continuation load/BV IR | LLVM/C memcmp、lexicographic sign、zero/null、pointer union、length-bound rejection tests | I/T |
| F82 | Bounded external region-write effect summaries | `compiler/ContinuationLowering.cpp`, existing continuation load/store/BV IR | LLVM intrinsic 与 C libc memcpy/memmove/memset、overlap snapshot、symbolic fill、zero/null、disjointness rejection tests | I/T |
| F83 | Pointer-returning bounded indirect dispatch | `compiler/ContinuationLowering.cpp`, `util/live_continuation.py` | LLVM/C indirect pointer argument/return、target fork、return-domain destination/signature tamper tests | I/T |
| F84 | Guarded memory access 与 bounded NUL-aware string summaries | `compiler/ContinuationLowering.cpp`, `util/live_continuation.py` | LLVM/C strlen/strcmp/strncmp、short-object union、logical input bound、zero/null、symbolic-length/guard tamper tests | I/T |
| F85 | Bounded pointer-returning memory/string search summaries | `compiler/ContinuationLowering.cpp`, existing guarded/core memory IR | LLVM/C memchr/strchr、symbolic needle、first match、zero/null、short union、extent rejection tests | I/T |
| F86 | Guarded memory write 与 bounded string-copy summaries | `compiler/ContinuationLowering.cpp`, `util/live_continuation.py` | LLVM/C strcpy/strncpy、snapshot/terminator/padding/return provenance、source union、zero/null、overlap/symbolic-length/guard tamper tests | I/T |
| F87 | LLVM defined-value guards for integer UB/poison conditions | `compiler/ContinuationLowering.cpp`, `util/live_continuation.py` | LLVM/C div/rem、symbolic shift、nuw/nsw/exact SAT/UNSAT、freeze-poison rejection、artifact tamper tests | I/T |
| F88 | Bounded pointer-valued memory 与 finite provenance sidecar | `compiler/ContinuationLowering.cpp`, existing page-COW memory/provenance guards | LLVM/C global/stack/heap pointer cells、GEP/null、conditional/overwrite/function-pointer rejection tests | I/T |
| F89 | Scalar function-pointer memory 与 typed target recovery | `compiler/ContinuationLowering.cpp`, existing indirect-call ABI/runtime | LLVM/C global/stack function-pointer cells、single/multi-target dispatch、signature checks | I/T |
| F90 | Bounded global pointer/function-pointer tables | `compiler/ContinuationLowering.cpp`, existing static initializer and finite-provenance lowering | LLVM/C symbolic table index、data/function target dispatch、loaded-ID/address guards | I/T |
| F91 | Direct-predecessor pointer-memory merge | `compiler/ContinuationLowering.cpp`, existing PHI edge/provenance machinery | LLVM data/function-pointer conditional merge、incomplete/mixed reaching-definition rejection | I/T |
| F92 | Proven-`nounwind` invoke normal-edge lowering | `compiler/ContinuationLowering.cpp`, `util/live_continuation.py` | direct/indirect LLVM invoke、PHI edge、dead landingpad pruning、may-unwind/tamper rejection | I/T |
| F93 | Stable dynamic nondeterministic freeze choice | `compiler/ContinuationLowering.cpp`, `util/live_continuation.py` | LLVM poison/undef fork、loop instance、checkpoint resume、site/token tamper tests | I/T |
| F94 | Bounded acyclic pointer-memory SSA closure | `compiler/ContinuationLowering.cpp` | nested/default/forwarding CFG merge、function-target reuse、cycle/missing/overwrite rejection | I/T |
| F95 | Deterministic scalar external/intrinsic summaries | `compiler/ContinuationLowering.cpp`, existing core BV IR | LLVM/C abs、hton/ntoh、llvm.bswap、INT_MIN与ABI rejection tests | I/T |
| F96 | Bounded bit-count intrinsic summaries | `compiler/ContinuationLowering.cpp`, existing core BV IR | LLVM/C ctpop、LLVM ctlz/cttz、zero semantics与zero-poison infeasibility tests | I/T |
| F97 | Direct deferred-poison freeze | `compiler/ContinuationLowering.cpp`, stable nondet core | LLVM overflowing/defined freeze、multi-consumer fallback tests | I/T |
| F98 | Bounded cyclic pointer-memory SSA fixed point | `compiler/ContinuationLowering.cpp` | loop-invariant/loop-carried writer execution、uninitialized-cycle rejection | I/T |
| F99 | Canonical constant-GEP pointer-cell identity | `compiler/ContinuationLowering.cpp` | equivalent nonzero GEP与distinct-offset interference tests | I/T |
| F100 | Bounded bit-permutation/funnel-shift intrinsics | `compiler/ContinuationLowering.cpp`, core BV IR | symbolic bitreverse、mod-width fshl/fshr LangRef examples | I/T |
| F101 | Bounded saturating add/sub intrinsics | `compiler/ContinuationLowering.cpp`, core BV IR | packed signed/unsigned extrema与symbolic saturation tests | I/T |
| F102 | Bounded saturating shift intrinsics | `compiler/ContinuationLowering.cpp`, definedness guards | signed/unsigned clamp与out-of-range poison tests | I/T |
| F103 | Bounded scalar abs/min/max intrinsics | `compiler/ContinuationLowering.cpp`, core BV IR | packed extrema、symbolic selection与INT_MIN poison tests | I/T |
| F104 | LLVM branch-hint identity intrinsics | `compiler/ContinuationLowering.cpp` | symbolic expect/expect.with.probability chain | I/T |
| F105 | Bounded static objectsize intrinsic | `compiler/ContinuationLowering.cpp`, pointer provenance | stack/global/union/null results与dynamic-input rejection | I/T |
| F106 | Bounded dynamic objectsize intrinsic | `compiler/ContinuationLowering.cpp`, runtime logical-size provenance | input interior、dynamic malloc与static-unknown execution tests | I/T |
| F107 | Bounded overflow arithmetic aggregates | `compiler/ContinuationLowering.cpp`, core BV IR | six add/sub/mul variants、symbolic flag、INT_MIN edge tests | I/T |
| F108 | Integer/data/function-pointer `ssa.copy` | `compiler/ContinuationLowering.cpp`, finite provenance | symbolic integer、pointer union与typed indirect dispatch tests | I/T |
| F109 | Dynamic realloc objectsize | `compiler/ContinuationLowering.cpp`, per-alternative in-place realloc provenance | shrink success、growth failure/null与realloc/global union tests | I/T |
| F110 | Transitive deferred poison chain | `compiler/ContinuationLowering.cpp`, stable nondet freeze | cast/BV/icmp/ssa.copy poison与defined tests | I/T |
| F111 | Totalized deferred division freeze | `compiler/ContinuationLowering.cpp`, safe-divisor IR | div-zero、sdiv overflow、exact与defined division tests | I/T |
| F112 | Path-sensitive select poison | `compiler/ContinuationLowering.cpp`, definedness sidecar | selected/unselected arm与poison-condition tests | I/T |
| F113 | PHI edge-definedness merge | `compiler/ContinuationLowering.cpp`, two-phase edge copies | selected/unselected predecessor poison tests | I/T |
| F114 | Straight-line memory poison sidecar | `compiler/ContinuationLowering.cpp`, exact store/load pair | poison/defined与multi-load fallback tests | I/T |
| F115 | Canonical-address memory poison | `compiler/ContinuationLowering.cpp`, DataLayout base+offset proof | equivalent GEP positive与distinct-offset negative tests | I/T |
| F116 | Linear-CFG memory poison | `compiler/ContinuationLowering.cpp`, bounded unique-edge walk | cross-block positive；merge/byte lanes由F124--F149扩展 | I/T |
| F117 | Direct-call return poison ABI | compiler + continuation validator/executor | poison/defined/multi-call与malformed endpoint tests | I/T |
| F118 | Direct-call argument poison ABI | compiler + typed call validator | poison/defined/multi-call与malformed endpoint tests | I/T |
| F119 | Bounded multi-callsite poison ABI | compiler direct-callsite proof | return/argument positive与mixed-sink rejection tests | I/T |
| F120 | Symbolic pointer-memory + initial definition merge | pointer provenance/reaching definitions | dynamic GEP、overwrite与initializer fallback tests | I/T |
| F121 | Transitive argument-to-return poison | composed defined-bit call ABI | BV passthrough poison/defined multi-call test | I/T |
| F122 | Bounded multi-consumer deferred poison | all-use freeze-sink proof | two-freeze positive与mixed-consumer negative tests | I/T |
| F123 | Bounded multi-load memory poison | finite linear memory version | two-load freeze、clobber与mixed-consumer tests | I/T |
| F124 | Acyclic branch memory poison | all-predecessor common-store proof | common-store diamond test | I/T |
| F125 | Path-dependent memory definedness PHI | edge-defined sidecar contract | poison/defined stores与tamper rejection | I/T |
| F126 | Interprocedural memory definedness PHI | call ABI/edge-PHI composition | argument/return双向`1,2,2` tests | I/T |
| F127 | Multilevel memory definedness PHI | bounded predecessor forwarding proof | nested forwarding `1,2,2` test | I/T |
| F128 | Cyclic memory definedness PHI | loop-edge sidecar state | two-iteration positive与missing-store negative | I/T |
| F129 | Initial memory definedness merge | global initializer edge state | poison-store/no-store `1,2,2` test | I/T |
| F130 | Initial subobject definedness merge | DataLayout constant-folded aggregate cell | constant-GEP poison/initial `1,2,2`与tamper test | I/T |
| F131 | Cyclic no-write definedness carry | loop edge sidecar self-carry | two-iteration 1/2、mixed store/carry negative与tamper test | I/T |
| F132 | Conditional store/carry transfer | canonical diamond i1 select edge transfer | symbolic store/carry `1,2,2`、forwarded negative与tamper test | I/T |
| F133 | Forwarded conditional carry | common-split ancestor-chain proof | forwarded store/carry `1,2,2`、multi-branch negative与tamper test | I/T |
| F134 | Multi-arm equivalent-source carry | reaching-source groups + all-endpoint arm proof | three-way `1,2,2,2`、distinct-store negative与tamper test | I/T |
| F135 | Equivalent defined-store carry | poison-free writer equivalence class | distinct constants `1,2,2,2`、mixed poison negative与tamper test | I/T |
| F136 | Shared-poison writer carry | shared SSA condition + writer-membership set | shared poison `1,1,2,2,2`、distinct-producer negative与tamper test | I/T |
| F137 | Nested conditional writer carry | two-level branch tree + eager-dominance proof | distinct poison `1,1,2,2,2`、four-source negative与tamper test | I/T |
| F138 | Bounded recursive writer/carry tree | flat proof IR + recursive CFG partition + postorder edge selects | depth-3 `1,1,1,2,2,2,2`、eager negative与tamper test | I/T |
| F139 | Grouped recursive source tree | all-endpoint same-arm proof per source group | grouped depth-3 nine-state execution、hierarchy tamper | I/T |
| F140 | Repeated-source recursive tree | conflicting-position detection + bounded leaf duplication | depth-4 five-leaf nine-state execution、hierarchy tamper | I/T |
| F141 | Multi-carry recursive tree | repeated carry leaves + exact artifact carry count | depth-4 five-leaf eight-state execution、count tamper | I/T |
| F142 | Disjoint multi-cell definedness PHI | constant region disjointness + independent edge sidecars | aggregate subcells `1,1,2`、same-cell negative与tamper | I/T |
| F143 | Identified-object multi-cell definedness PHI | distinct static object proof + independent edge sidecars | two stack objects `1,1,2`、same-object hierarchy与tamper | I/T |
| F144 | Fixed-heap-object multi-cell definedness PHI | distinct bounded malloc-site proof + independent sidecars | two heap sites `1,1,2`、static hierarchy与tamper | I/T |
| F145 | Finite pointer-domain multi-cell definedness PHI | bounded select/PHI region product proof | disjoint 2x2 domain `1,1,2`、overlap rejection与tamper | I/T |
| F146 | Guard-correlated pointer-domain multi-cell PHI | select-guard relational compatibility proof | mutually exclusive overlap `1,1,2`、compatible-overlap rejection | I/T |
| F147 | PHI-correlated pointer-domain multi-cell PHI | merge/predecessor edge relation proof | edge-exclusive overlap `1,1,2`、same-edge rejection | I/T |
| F148 | Symbolic-index interval multi-cell PHI | LLVM ConstantRange + region interval product | separated subarrays `1,1,2`、overlap rejection | I/T |
| F149 | Byte-lane memory definedness composition | bounded reverse MemorySSA + per-address-byte nearest writer | split/initial/overlap composition、branch-merge rejection、lane/capability tamper | I/T |
| F150 | Direct-predecessor byte-lane definedness PHI | per-edge lane vectors + edge-local sidecar reduction | path-dependent/initial lane PHIs、upstream-join rejection、tamper | I/T |
| F151 | Cyclic byte-lane definedness PHI | per-lane loop-carried state + alias-closed fixed point | entry/backedge transfer、alias negative、edge/capability tamper | I/T |
| F152 | Conditional cyclic byte-lane carry | strict diamond proof + arm-edge lane updates | symbolic write/skip `1,1,2`、alias negative、topology tamper | I/T |
| F153 | Forwarded conditional cyclic byte-lane carry | bounded linear arm corridors + graph reconstruction | forwarded `1,1,2`、nested-branch rejection、corridor tamper | I/T |
| F154 | Multi-arm conditional cyclic byte-lane carry | strict two-level branch tree + three edge-local lane transfers | low/high/carry `1,1,1,2,2`、four-arm rejection、route tamper | I/T |
| F155 | Forwarded multi-arm cyclic byte-lane carry | three bounded arm corridors + two-level tree reconstruction | forwarded `1,1,1,2,2`、nested-corridor rejection、successor tamper | I/T |
| F156 | Recursive conditional cyclic byte-lane carry | bounded strict binary source tree + leaf-local lane transfers | four-leaf `1,1,1,1,2,2,2`、shared-leaf rejection、depth tamper | I/T |
| F157 | Forwarded recursive cyclic byte-lane carry | bounded branch-to-child corridors + recursive graph reconstruction | forwarded four-leaf execution、nested-corridor rejection、successor tamper | I/T |
| F158 | Grouped recursive cyclic byte-lane source | dominating internal writer + exact descendant-leaf group | grouped four-leaf execution、two-group rejection、marker tamper | I/T |
| F159 | Repeated-source recursive cyclic byte-lane transfer | internal source with same-range leaf overrides | five-leaf nine-state execution、mismatched-override rejection、marker tamper | I/T |
| F160 | Composed repeated-source recursive byte-lane transfer | per-lane nearest internal/override/carry composition | mixed-source leaf nine-state execution、full-shadow rejection、marker tamper | I/T |
| F161 | Multi-carry composed recursive byte-lane tree | exact all-carry leaf count + unique-parent proof | six-leaf ten-state execution、shared-carry rejection、count tamper | I/T |
| F162 | Multiple internal recursive byte-lane groups | two disjoint internal writers + exact descendant partitions | dual-group nine-state execution、nested-group rejection、count tamper | I/T |
| F163 | Mixed multi-group recursive byte-lane composition | one composed group + one pure group | mixed six-leaf eleven-state execution、full-shadow rejection、count tamper | I/T |
| F164 | Forwarded grouped recursive byte-lane source | grouped dominance across bounded corridors | forwarded grouped seven-state execution、nested-corridor rejection、marker tamper | I/T |
| F165 | Forwarded repeated-source recursive byte-lane transfer | same-range override proof across bounded corridors | forwarded five-leaf nine-state execution、branching-corridor rejection、dual-marker tamper | I/T |
| F166 | Forwarded composed repeated-source byte-lane transfer | per-lane nearest-source proof across bounded corridors | forwarded composed nine-state execution、branching-corridor rejection、dual-marker tamper | I/T |
| F167 | Forwarded multi-group recursive byte-lane tree | two disjoint group partitions across bounded corridors | forwarded dual-group nine-state execution、branching-corridor rejection、marker/count tamper | I/T |
| F168 | Forwarded mixed multi-group byte-lane composition | one composed group across bounded corridors | forwarded mixed eleven-state execution、branching-corridor rejection、marker/count tamper | I/T |
| F169 | Forwarded multi-carry composed byte-lane tree | exact carry-leaf count across bounded corridors | forwarded six-leaf ten-state execution、branching-corridor rejection、marker/count tamper | I/T |
| F170 | Three-group recursive byte-lane tree | three disjoint complete descendant partitions | seven-leaf thirteen-state execution、nested-group rejection、marker/count tamper | I/T |
| F171 | Double-composed multi-group byte-lane tree | one partial override in each of two groups | seven-leaf thirteen-state execution、same-group override rejection、marker/count tamper | I/T |
| F172 | Forwarded double-composed multi-group tree | two per-group source differences across bounded corridors | forwarded seven-leaf thirteen-state execution、branching-corridor rejection、dual-marker tamper | I/T |

后续章节按此 ID 记录方案、实现细节、结果与边界。ID 表示进入统一总账的顺序，
不表示实现时间；历史时间线与提交边界见
[`Development_History_Traceability.md`](Development_History_Traceability.md)。

### 3.1 F00：编译与 runtime 基础正确性

这些改动不直接构成调度算法，但决定新增并行能力是否具备正确执行基础：

- `inttoptr`/`ptrtoint` 的 symbolic expression 按 LLVM `DataLayout` 指针宽度执行
  zero-extend 或 truncate，避免 32/64/128 位转换产生非法 extract；
- `pointer_width_casts.ll` 同时覆盖窄整数到 64 位指针、指针到 i128 和指针到 i16；
- runtime 的函数参数 expression 槽和 return expression 改为 `thread_local`，避免
  多线程目标的插桩调用互相污染；
- test-case handler 新增显式 `saveConcreteValues` 路径，使 sampling、Backsolver 和
  cache replay 能保存已经验证的候选，而不被当前 concrete input 覆盖；
- 新增 Python 测试作为 lit suffix，并按 backend feature gate 运行 QSYM 专属集成测试。

结果等级为 I/T：指针宽度测试与既有数组、整数、浮点、内存、字符串、函数调用
回归共同通过。线程局部状态后续仍需在线程密集 benchmark 上测量 runtime 开销。

## 4. F01：统一执行遥测与后端抽象

### 4.1 方案

并行调度不能只观察“是否生成新输入”。系统为每次执行建立统一
`SolverTelemetry`，同时描述路径、求解成本、数据依赖、目标到达和进程状态。
SymCC 与 SymSan 的原始结果均在 worker 侧归一化，调度器不依赖特定后端内部对象。

### 4.2 实现细节

- QSYM runtime 原子写出 versioned JSON，避免 coordinator 读取半文件；
- 记录 `engine`、`solver_algorithm`、`capabilities` 和 `missing_fields`，允许部分后端
  显式报告能力缺失；
- 记录 signed return code、timeout、killed、elapsed、generated，避免信号退出被
  错误转换为无符号值；
- 路径层包括 `path_hash`、`open_branches` 和 bounded `branch_trace`；
- 求解层包括 SAT/UNSAT/unknown、时间、依赖字节、Backsolver、poly cache、
  prefix context 和 UNSAT core 统计；
- 数据层包括 `data_features` 与 `comparison_taints`；
- `ExecutorPortfolio` 将 `exact`、`tailored`、`sampling` 映射到 SymCC 或 SymSan
  命令、超时和受限环境变量。

### 4.3 结果与证据

- `test/telemetry.c` 验证 schema、路径指纹、目标 replay、data feature 和核心求解
  统计字段；
- `test/test_hybrid_feedback.py` 覆盖 39 个反馈、解析和调度边界；
- `test/test_executor_portfolio.py` 验证执行器路由、后端选择与配置清洗；
- 当前结论为 schema 和调度接口可用；公开套件上的 SymCC/SymSan 等价性和开销
  对照仍待 R 级实验。

## 5. F02：Backsolver 与 bounded Veritesting

### 5.1 方案

具体执行在前序分支上作出的选择，可能让包含隐式流的后续目标失去可满足解。
编译器将可证明安全的控制依赖值恢复成 ITE，runtime 先尝试轻量反向候选，再在
必要时对不兼容前缀做受限适配求解。

### 5.2 编译器实现

- 识别 `select`、规范 two-arm diamond 和两输入 PHI；
- 支持 bounded multi-block、无环、nested PHI/ITE easy region；
- 克隆整数、浮点、指针标量的纯 SSA 算术、比较、cast 和 select；
- region 最大递归深度 12、每臂最多 32 个 basic block；
- 通过 DominatorTree/PostDominatorTree 验证控制合流；
- 通过 MemorySSA 与 AliasAnalysis 接受只读 load snapshot：只有在区域内无干扰
  写、地址不逃逸、alias 可证明且公式规模受控时才合成；
- call、写内存、模糊 alias、循环、非规范 merge、division/remainder 和不安全
  region 保守回退。

### 5.3 runtime 实现

- 收集 ITE controller，区分目标依赖和可保留前缀；
- 对可逆谓词直接修改候选字节并用表达式求值器验证；
- 直接候选失败后进入 Z3 fallback；
- telemetry 分别记录 direct attempt、validation failure、kept/dropped constraint
  和 Z3 fallback，便于消融。

### 5.4 结果与边界

- `backsolver_select.ll`、`backsolver_symbolic_phi.ll`、
  `backsolver_veritesting_region.ll`、`backsolver_nested_veritesting.ll` 和
  `backsolver_implicit_flow.ll` 验证 ITE 主路径；
- `backsolver_selective_prefix.ll` 验证适配查询只丢弃与 ITE controller 依赖重叠的
  prefix constraint；
- `backsolver_memory_snapshot.ll` 验证可证明只读内存；
- `veritesting_memory_reject.ll` 验证存在写入干扰时拒绝合成；
- 尚未实现完整 multi-exit、loop summary 以及 LLVM poison/undef/freeze 的显式模型。

## 6. F03：分层求解与约束上下文复用

### 6.1 方案

求解路径按成本由低到高组织为 fast、optimistic、polyhedral sampling 和 exact Z3。
相似 prefix 不重复翻译全部约束；已知模型、线性区域与不可满足子集可跨执行复用。

### 6.2 实现细节

- Fuzzy-Sat 风格 fast path 处理简单字节和 bounded concat 比较；
- optimistic-first 与 multi-solve 为相关分支提供低成本先验尝试；
- expression hash-cons cache 有固定容量并在逐出时保持引用安全；
- density-only profile 统计每个输入 offset 参与 interesting branch 的次数；
- BSFuzz 风格 timeout site 可写出并由 coordinator 聚合，其他 worker 在后续执行中
  跳过已知高成本 site；
- prefix key 由路径、目标表达式与依赖上下文构成；
- poly cache 保存 SAT/UNSAT/timeout、模型修改、byte box 和规范化线性约束；
- prefix context cache 保存翻译后的 Z3 assertion vector；
- template extraction 计算单字节、字节对和已知线性表达式的严格 min/max；
- John/Dikin 模式构造 dense `A x <= b`，用 barrier Hessian、Cholesky 和
  Lewis/leverage 近似产生相关方向；
- 奇异矩阵或边界退化时回退 integer hit-and-run/coordinate sampling；
- 每个离散样本再次检查精确整数不等式；
- UNSAT cache 保存 tracked core，经有界最小化后同时生成 exact 与 structural
  fingerprint；结构匹配允许输入索引重命名；
- 线性约束在进入 Z3 前进行 contradiction/subsumption 剪枝。

### 6.3 结果与边界

- `poly_cache.c` 验证 template 约束、dense John walk、持久化 cache 和第二次执行
  命中并生成候选；
- `unsat_core_cache.c` 验证 core 插入、命中、结构统一和线性剪枝；
- 已实现的是有界整数/线性多面体复用，不是通用非线性 polyhedral solver；
- 性能收益需按 cache hit、solver time、accepted candidates/CPU-hour 做独立消融。

## 7. F04：data coverage、comparison taint 与 AFL 原生反馈

### 7.1 方案

边覆盖无法表达“常量比较已经匹配了多少内容”。系统同时提供符号执行侧的细粒度
数据进度和 AFL++ 原生 bitmap 反馈，让解析进展参与 corpus retention 与调度。

### 7.2 SymCC 侧实现

- LLVM pass 对整数常量比较和 switch case 发出 data comparison；
- libc wrapper 覆盖 `memcmp`、`bcmp`、bounded `strcmp`/`strncmp`；
- 每个 site/constant 保存最高 matched-prefix bits；
- comparison taint 记录 branch、依赖字节数、min/max offset、outcome 和
  interesting 标记；
- concrete token 经长度限制和内容去重写入 hint 目录；
- coordinator 用 feature dominance 更新调度状态，并生成 sparse
  `.compact_focus_set`。

### 7.3 AFL++ 侧实现

- `afl_data_coverage_rt.c` 通过 `AFL_PRELOAD` 拦截内存/字符串比较；
- 优先使用 `__afl_area_ptr`，否则连接 `__AFL_SHM_ID`；
- 每增加一个匹配前缀，写入一个确定性的 AFL map slot；
- 复用 AFL 自身 queue retention，不建立无界的独立 data corpus；
- `afl_symcc_hint_mutator.py` 消费 string token、poly model 和 byte box，轮换执行
  token overwrite/insert、model patch、box sampling、splice 和 bounded havoc。

### 7.4 结果与边界

- `data_coverage_libc.c` 验证多个 libc 比较产生 data feature、map update 和
  `MAGIC`/`MASON` token；
- `test_afl_data_coverage.py` 验证原生共享 map 的前缀单调反馈；
- `test_afl_hint_mutator.py` 验证 mutator 可消费提示并产生有效变异；
- 原生 map 存在哈希冲突，属于 AFL bitmap 的预期近似；真实覆盖收益需在
  structured parser 上做消融。

## 8. F05：PrefixDAG、S2F、TACO 与 MultiGo

### 8.1 方案

调度单位从“一个 seed 文件”提升为“seed + prefix + target + action plan”。
运行时暴露尚未覆盖的 opposite outcome，coordinator 可跨执行重放高价值分支。

### 8.2 实现细节

- prefix-sensitive branch id 由父 prefix、site 和 outcome 构成；
- `PrefixDAG` 聚合访问次数、reward、solver cost、distance、difficulty 和 cooldown；
- actionseed 支持 `solve`、`sample`、`skip`；
- exact replay 可绕过普通 coverage pruning 并要求匹配 target branch；
- S2F high/low queue 将困难但高收益分支交给 sampling；
- TACO target-centric score 融合目标距离、under-exploration 和 extended
  path conditions；
- MultiGo 使用 site frequency 与 Poisson-style difficulty，在易路径利用与困难
  路径探索之间切换；
- edge-dependence、dynamic coloration 和 Bellman-style backup 作为软优先级，
  hard directed prune 保持 opt-in。

### 8.3 结果与边界

- `s2f_actionseed.c` 通过真实 runtime 验证 solve/sample/skip 动作；
- `test_hybrid_feedback.py` 覆盖 DAG、目标 replay、S2F、TACO/MultiGo、coloration
  与调度更新；
- 当前 actionseed 是跨进程 continuation 的工程表示，不保存完整 symbolic heap
  或 Z3 solver stack。

## 9. F06/F07：结构化覆盖与目标引导

### 9.1 编译期结构图

- `SYMCC_COLOR_TARGETS` 支持函数名、`file:line` 和 runtime site id；
- 构建模块 CFG、直接调用边和 bounded compatible indirect-call 过近似；
- 从 target 反向 BFS 计算 site distance；
- 多模块 sidecar 由 `merge_directed_distance.py` 合并；
- 并发图标记 thread lifecycle、mutex/rwlock/cond/barrier/semaphore、atomic 和 fence；
- task graph 输出 entry、site、branch、call 与 CFG 边；
- 静态依赖摘要把 branch site 映射到输入 byte interval，零额外目标执行即可产生
  replay focus。

### 9.2 动态结构任务

- `ProgramTaskGraph` 将函数图压缩为 bounded structural regions；
- `DynamicStructuralTaskAllocator` 按 worker 反馈学习 region ownership 并定期再平衡；
- `MinimumPathCoverPlanner` 在函数 CFG 上生成多组最小路径覆盖，避免只追踪单一
  shortest path；
- `ExpressiveCoverageTree` 将 observed/open outcome、function context、opcode、
  dependency shape、data quality、solver outcome 和 seed provenance 统一成树；
- constraint-shape key 不含绝对 byte offset，以合并结构相同但位置不同的 parser
  constraint；
- repeated shape 采用 loop counter 压缩，并在节点上限下优先保留 active
  open/timeout 节点。

### 9.3 结果与边界

- `directed_coloration.c`、`directed_coloration_indirect.c` 和
  `directed_coloration_multimodule.c` 验证直接、间接和多模块 distance；
- `directed_prune.c` 验证 runtime 按距离跳过求解；
- `concurrency_guidance.c` 验证并发 site sidecar；
- `static_dependencies.c` 验证 branch-to-byte 静态摘要；
- `test_structural_tasks.py`、`test_path_cover.py` 和
  `test_expressive_coverage.py` 验证动态分配、路径覆盖和 ECT persistence；
- 当前 function context 是有界近似，尚未保存精确 call/return stack 或表达式
  operator skeleton。

## 10. F08/F09：学习型并行调度与 SMT 算法序列

### 10.1 seed-worker 与策略调度

- seed context 包括输入大小、依赖密度、路径稀有度、data quality、目标距离和历史收益；
- worker context 包括本地路径/site 获取、成本、region affinity 和在途重叠；
- SimiFuzz 风格 LinUCB 对 seed-worker pair 打分，并按 time slice 聚合反馈；
- `StrategyPortfolio` 在 exact/tailored/sampling 等粗粒度 profile 间选择；
- `ComponentPortfolio` 分别学习 solver、focus、sampling 等组件臂；
- `AdaptiveParallelismController` 用带迟滞的 hill climbing 调整 active symbolic
  worker 数，避免频繁抖动；
- `SelfConfiguringPolicy` 从版本化工具schema、profile与自定义空间发现参数，使用
  conditional/context/interaction posterior sampling选择受限override，并可围绕
  有效数值动态扩展搜索空间；F186进一步记录其归因与迁移边界；
- K-Scheduler 风格 frontier score 使用 bounded showmap cache 统计稀有边权重；
- worker diversity 可把大输入划分为不相交 focus partition，并利用 density profile
  把热点字节隔离到较窄分区；
- TACE 两阶段路径先执行 bounded no-solve dependency profile，再只符号化得到的
  sparse focus set；profile 失败、目标 replay 或预分区任务均回退/绕过以保持完整性；
- 所有异步 assignment 都携带 token，完成后准确归因 reward/cost。

### 10.2 SMTgazer 式算法序列

默认序列为：

| 序列 | 阶段 |
| --- | --- |
| `exact` | Z3 exact |
| `fast-exact` | fast linear，然后 exact fallback |
| `optimistic-layered` | optimistic multi-solve，然后带 cache 的 layered Z3 |
| `polyhedral-exact` | polyhedral sampling，然后 exact fallback |

调度器实现：

- 将 input size、difficulty、timeout ratio、unknown ratio、dependency density、
  data quality、targeted 状态等压缩为 9 维 context；
- 低开销在线moment split维护有界context cluster；F239另以离线有界X-means和
  spherical-Gaussian BIC决定可复现的局部二分；
- 每个 cluster/sequence 维护 Bayesian arm；
- Thompson-style sample 平衡探索与利用；
- 同一 seed 后续 replay 推进到下一 algorithm stage；
- timeout 使用 censored PAR-2 cost；
- 每次动作记录真实 propensity，供离线策略评估；
- state 原子持久化，算法空间可由受限 JSON 覆盖；
- F239从轨迹生成带canonical SHA-256的context-specific sequence prior，在线端只把
  通过独立复算的建议作为90/10探索偏好，显式在线门控建议优先。

### 10.3 结果与边界

- `test_adaptive_components.py`、`test_self_config.py` 和
  `test_hybrid_feedback.py` 验证在线选择、状态恢复和归因；
- `test_tace_profile.py` 验证 dependency-density parser 的边界、去重和失败回退；
- `test_smt_algorithm_scheduler.py` 验证 cluster、序列推进、持久化和 propensity；
- `test_smt_sequence_training.py`验证BIC分裂/拒绝、context-specific序列、PAR-2
  删失、支持度门槛、摘要与重哈希篡改拒绝、CLI以及保守在线接入；
- 当前在线Bayesian arm仍是轻量近似，F239也不是SMTgazer完整boosting/bagging
  surrogate；是否优于每个benchmark的最佳静态oracle必须通过同CPU离线估计和在线
  A/B共同验证。

## 11. F10/F15：语义候选、agentic route 与保守离线学习

### 11.1 语义 fallback

`SemanticFallbackPlanner` 将 telemetry 分类为 byte-local、token-progress、
wide/nonlinear、timeout-prone 和 opaque，再映射到：

- exact/tailored/sampling/skip executor；
- target branch；
- bounded focus range；
- S2F actionseed。

分类器是确定性的，可独立消融，不依赖外部模型。

### 11.2 agentic route

- task JSONL 只导出受限路径、依赖、目标和成本摘要；
- 外部 hint 只能修改 allowlist 中的 route、focus、target、strategy 和 action；
- command/HTTP/chat-completions backend 在 MPI 热循环之外异步运行；
- 每个 provider 有 timeout、并发上限、circuit breaker 和 canonical task cache；
- 内置 `cottontail`、`concollmic`、`gordian`、`hybrid` route 保持确定性。

### 11.3 semantic proposal

内置 `SemanticProposalGenerator` 实现：

- 从 comparison taint 提取 bounded constraint core；
- 为位运算、加减、大小端常量关系生成 inverse patch；
- 从 data coverage 高质量 exemplar 和 token 文件迁移 surrogate candidate；
- 从 IFSS-like relevance slice 构造 Hydra-style core copy/swap、boundary perturbation
  和 bounded truncate 的 `targeted_transform` candidate；
- 从 AFL extras/string token 与历史 comparison-core fragment 合成 bounded token grammar，
  生成 `solve_complete` proposal；
- 对 UCSan seed 的 alias class 做 split/compatible merge。

`VerifiedProposalManager` 只接受 bounded data transformation，不执行 proposal 中的
代码。候选按内容寻址落盘，经过：

```text
materialize -> concrete target replay -> target telemetry check
            -> authoritative AFL novelty -> retain/reject
```

### 11.4 离线策略与干扰建模

- 每个算法 assignment 记录 action、propensity、context、reward、cost、coverage、
  generated、interesting、concurrent workers 和 killed；
- 干扰惩罚只在“高并发且 generated 中重复比例高”时增长，不惩罚有效并行；
- evaluator 提供 clipped importance weight、SNIPS、doubly robust、effective sample
  size、standard error 和 lower confidence bound；
- `ConservativePolicyGate` 只有在有效样本足够且 lower-bound improvement 超过阈值
  时才批准 preferred sequence；
- CLI 可从任意 trajectory JSONL 重建报告，benchmark JSON/CSV 保存轨迹和 scheduler
  state 摘要。

### 11.5 结果与边界

- `test_semantic_fallback.py` 验证类别到执行动作的映射；
- `test_agentic_concolic_hooks.py` 验证 hint 清洗、异步 provider、route 和失败恢复；
- `test_semantic_proposals.py` 验证 inverse、exemplar、targeted transform 和 UCSan
  partition proposal；
- `test_verified_proposals.py` 验证 content-addressed materialization 与验证状态；
- `test_offline_policy.py` 验证干扰 reward、轨迹恢复、保守门控和 CLI；
- NeuroSCA 风格训练模型尚未作为默认后端接入；若以后接入，仍必须保持 proposal
  与 verifier 的边界。

## 12. F11：UCSan 式 under-constrained execution

### 12.1 方案

当完整程序入口难以到达深层函数时，由编译器为指定函数生成 harness，并用结构化
seed 表示 root、对象、alias 和对象路径。pseudo pointer 与 shadow metadata 将对象图
恢复推迟到真正解引用时。

### 12.2 编译器与 runtime

- `compiler/UCSan.cpp` 解析受限 YAML，选择 entry、scope、external policy 和 wrapper；
- 原 `main` 被重命名，生成的新 harness 从结构 seed 物化参数；
- scoped load/store/GEP/memcpy/call 维护 pointer shadow；
- JIT provisioning 支持对象下界、container-of 风格负 offset 和有界扩展；
- external policy 包括 `pure`、`arbitrary`、`passthrough`；
- runtime 可 dump 实际访问到的 root/object graph；
- root 与 object bytes 可在原 seed offset 上符号化。

### 12.3 图规范化与学习

`ucsan_seed.py` 提供：

- stable binary serialization 与 parser；
- canonical object path；
- union-find alias class；
- payload 冲突和 cycle rejection；
- 从多份 concrete dump 学习稳定 path、payload 和 alias；
- `create`、`inspect`、`normalize`、`learn` CLI。

### 12.4 结果与边界

- `ucsan_jit.c` 构造带负下界对象的 seed，并验证 JIT 访问返回预期退出码 42；
- `test_ucsan_seed.py` 覆盖 round-trip、canonicalization、alias learning、冲突与循环；
- 尚待研究 minimal object grammar、复杂 symbolic pointer arithmetic 和更完整
  external stub soundness。

## 13. F12：分布式状态与多 coordinator 控制面

### 13.1 对象与 bitmap 传输

- 输入按 SHA-256 content address 发送，worker 命中本地 cache 时不重复传字节；
- AFL bitmap 以 bounded version journal 发送 sparse byte-bit delta；
- worker 落后于 journal 时回退 full snapshot；
- QSYM 内部 pruning map 与 AFL authoritative map 分离。

### 13.2 持久状态与 continuation task

- analyzed input 使用分片 ledger；
- 未完成工作写入 append-only lease journal，restart 后可恢复；
- state task key 包括 input digest/path、focus、target 和 actionseed；
- consistent hash 选择 owner shard/worker，优先本地派发并允许 bounded stealing；
- reward、failure、lease 和 completion 持久化。

### 13.3 多 master 一致性

- `FencedWorkLeaseTable` 为 work id 分配单调 fencing token；
- claim/renew/complete 必须携带 token；
- lease 过期后其他 coordinator 可 steal；
- stale master completion 被拒绝；
- coverage-owner shard 对 AFL hit-count bit 做锁内原子 OR claim；
- shard epoch 单调递增，coordinator 周期 pull/gossip；
- heartbeat 选择 preferred owner，其他存活 coordinator 可 proxy commit；
- OR merge 满足交换、结合和幂等，保证共享文件系统上的最终收敛。

### 13.4 结果与边界

- `test_distributed_state.py` 的 15 个用例覆盖 CAS、delta、shard、lease、fencing、
  stale completion、gossip 和 state task 恢复；
- 当前一致性依赖共享文件系统的 atomic mkdir/rename/replace；
- 非共享文件系统仍需要网络 CAS/quorum adapter 和 partition fault injection。

## 14. F13：bounded-DPOR 并发调度探索

### 14.1 方案与实现

- `libsymcc_schedule_rt.so` 通过 `LD_PRELOAD` 包装 pthread mutex、rwlock、cond 和
  join 等同步点；
- 运行时为线程分配 logical thread id，写出 `seq tid op object` trace；
- replay prefix 指定每个受控同步点应优先运行的 logical thread；
- 等待超过 `SYMCC_SCHEDULE_WAIT_MS` 时放行，避免 replay 永久阻塞；
- `DporScheduleExplorer` 在同一同步对象上的 dependent pair 处生成 alternative prefix；
- explorer 可解析 F40 可选发出的 `read`/`write` trace rows，用 SC vector-clock 和
  lockset 注释 trace，并只为未被 HB/共同 lock 保护的内存冲突生成 source-style replay
  prefix；
- prefix 深度、trace window、队列和每次生成数都有硬上限；
- schedule job 进入 MPI 高优先级 work queue，并与普通 input state 一起持久化。

### 14.2 结果与边界

- `test_schedule_exploration.py` 验证 trace parser、prefix 规范化、dependent
  backtracking、HB/lockset memory-conflict 分类、去重和 persistence；
- 这是面向 fuzzing diversity 的 bounded-DPOR，不声称穷举所有 interleaving；
- 后续需加入真实多线程 benchmark 的 schedule coverage 和 happens-before 消融。

## 15. F14：AFL++ profile 与混合执行编排

### 15.1 实现

- benchmark 可启动 AFL++ baseline、SymCC、MPI parallel 和 hybrid adaptive；
- AFL profile 支持 LAF/CTX/Ngram/CmpLog/MOpt 组合与独立输出；
- adaptive 模式自动连接 data coverage preload、hint mutator、SymCC extras 和 poly cache；
- worker 执行 profile、solver algorithm override、focus、target、actionseed 和 DPOR
  prefix 在单次 message 中组合；
- 目标执行后统一进行 showmap/bitmap triage；
- profile 启动、进程退出和 artifact 路径写入 benchmark result。
- master/worker phase timing 与 redundancy 以 per-rank 文件记录，事后聚合，避免
  在 MPI 热路径上加入同步写；

### 15.2 结果与边界

- `test_afl_profile_orchestration.py` 验证 profile 命令与环境拼装；
- `test_tace_profile.py` 验证大输入选择性 taint profile；
- 实际 AFL++ 版本、map size、CPU affinity 和初始 corpus 必须写入最终实验元数据。

## 16. F16：benchmark、消融与统计

### 16.1 实现

`benchmark/run_benchmark.py` 当前能够：

- 运行 built-in 与 public target；
- 统一记录 serial/parallel/hybrid 的时间、覆盖、生成量和 worker 数；
- 收集 phase timing、redundancy、offline trajectory、approved action、
  policy evaluation 和 SMT scheduler state；
- 输出 human-readable report、CSV 和 JSON；
- 保留每次 run 的原始 artifact 路径。

`benchmark/analyze_ablation.py` 当前能够：

- 合并一份或多份 benchmark CSV；
- 以指定 baseline 对各 mode/feature 组比较；
- 计算 bootstrap interval 与 Vargha-Delaney effect size；
- 生成机器可读和介绍用摘要。

### 16.2 当前结果

当前仓库中的 benchmark result 目录证明历史管线能够产出数据，但不能自动证明最新
全部功能组合的独立收益。最新实现的功能性验证结果为：

- CMake/Ninja 完整构建通过；
- lit：68/68 通过；
- 其中 21 个 Python 测试入口共包含 123 个 `test_*` 单元用例；
- compiler/runtime 集成测试覆盖 telemetry、Backsolver/Veritesting、poly cache、
  UNSAT core、data coverage、S2F、directed guidance 与 UCSan。

最终论文级实验仍应执行：

- 相同初始 corpus、相同 CPU 总预算和固定随机种子记录；
- 每组至少 10 次调参、20 次最终比较；
- baseline、逐项 feature ablation 和 full system；
- coverage AUC、final coverage、time-to-target、accepted/CPU-hour、solver cost、
  worker redundancy；
- median、bootstrap confidence interval 和 Vargha-Delaney effect size。

## 17. 历史实现补档（F17-F25）

本节补录 2026-02-26 至 2026-07-20 已提交但此前分散在阶段报告中的实现。历史
定量结果保留其原始配置和结果等级：有固定预算测量的记为 B，不因结果已经写入
报告而升级为 R。

### 17.1 F17：MPI 并行执行基础与可靠协议

**研究问题。** 单进程 SymCC 的路径翻转受限于串行 seed 消费、求解器长尾和单点
I/O；直接复制进程又会造成重复求解、目录竞争和 coordinator 过载。F17 建立了
纯 MPI concolic 与 hybrid 共用的 master/worker 基础。

**实现。**

- `util/mpi_concolic_execution.py` 提供 seed 分发、worker 执行、生成输入回收和
  反馈式再入队；
- `util/mpi_fuzzing_helper.py` 把同一模型接到 AFL++ 队列与共享 coverage 状态；
- 生成文件采用原子写入，worker 环境使用独立副本，终止阶段显式处理正在求解和
  正在保存的任务；
- 协议由大对象回传演进为路径/内容哈希和稀疏元数据回传；大规模运行按 worker
  数自动启用多 coordinator 与共享目录直写；
- 修复 `np>=64` 的 inter-master 死锁、唯一输入重复计数、serial orphan、超时
  误判和非阻塞消息资源泄漏。

**证据与边界。** MPI、serial 和多 master 路径在项目 benchmark 上完成集成运行，
历史架构和评测见
[`MPI_Parallelization.txt`](MPI_Parallelization.txt)、
[`Parallel_Architecture_v2.md`](Parallel_Architecture_v2.md) 和
[`SymCC_MPI_Parallel_Evaluation_Report.md`](SymCC_MPI_Parallel_Evaluation_Report.md)。
结果等级为 I/T/B；共享目录多 master 仍依赖共享文件系统，不是无共享存储的
分布式一致性协议。

### 17.2 F18：AFL++/SymCC 闭环与吞吐优化

**方案。** AFL++ 负责高吞吐变异，SymCC 负责约束翻转；AFL queue 增量流入
concolic workers，只有经真实 `afl-showmap` 判定带来新 bitmap bit 的候选才回灌
fuzzer。该闭环把候选生成与覆盖所有权严格分离。

**关键优化。**

- coverage triage 下沉到 worker，coordinator 只接收稀疏边与小型元数据；
- coverage bitmap 加版本号，worker 在版本变化时同步，降低陈旧判断；
- showmap 从逐进程执行演进为 streaming fork server，再演进为批量 `-I`；
- AFL queue 扫描改为 `os.scandir`、增量缓存和反馈阶段跳过无效全量扫描；
- 输入先做内容哈希去重，batch 内和跨 batch 再去重，避免为字节相同的候选调用
  showmap；
- dispatch、feedback、队列扫描与 MPI 接收交错执行，避免 phase barrier。

历史固定配置测量记录了 master showmap `103s -> 0`、消息约 `8MB -> 64B`、
单次 showmap `12ms -> 0.6ms`、queue 扫描 `39.5s -> 3.7s`、MPI 接收数据
`34MB -> 3.6MB`。这些数字来自
[`Parallel_Architecture_v2.md`](Parallel_Architecture_v2.md)，用于说明优化机制，
不能外推为跨目标平均加速，故等级为 I/T/B。

### 17.3 F19：可扩展工作分解与资源控制

F19 针对“增加 worker 后重复路径上升、单 seed 内部并行度不足”的扩展瓶颈：

- AFL persistent mode 与 shared-memory testcase 支持减少目标启动和文件 I/O；
- focus partition 把输入相关字节域切给不同 concolic worker；
- dynamic work stealing 在空闲 worker 出现时拆分未完成任务；
- branch-density-balanced partitioning 使用分支密度而非等长字节区间，降低任务
  难度偏斜；
- adaptive granularity 根据队列压力、worker 空闲和历史成本改变拆分粒度；
- benchmark 记录总 CPU 与 active worker，避免把进程数直接当成有效并行度。

历史 persistent-mode 脚本在特定目标上记录过 `5x-35x` 吞吐变化，synthetic、
libarchive、SQLite 和多实例实验也验证了扩展路径能运行；同时多实例 seed
partition 的负结果被保留，说明“更多独立实例”不自动等于更高覆盖。等级为
I/T/B，尚需在相同总 CPU 和固定 corpus 下重新验证最新 scheduler 组合。

### 17.4 F20：结构化输入与异构 fuzzing 协同

该实现族扩展了纯 SMT 路径翻转的候选空间：

- QSYM runtime 支持 `SYMCC_DICT`，按求解修改位置拼接 AFL dictionary token；
- AFL++ profile 接入 LAF、CTX/NGRAM、CmpLog 与 MOpt，用 comparison 反馈补充
  魔数和状态相关变异；
- `util/grimoire_gen.py` 从 corpus 学习结构 fragment，支持静态重组、多粒度 gap
  泛化和向 SymCC 直接喂入；
- honggfuzz 作为异构覆盖引擎写入独立目录，再通过 AFL `-F` 与 hybrid 闭环共享；
- 编排层可同时运行 AFL、honggfuzz、GRIMOIRE 与 MPI concolic，并保留各来源计数。

历史固定配置中，LAF+NGRAM 曾测得 queue 多样性 `+48%`、公共覆盖 `+1.4%`；
GRIMOIRE 静态重组为 `4339 -> 4628` 边（`+6.7%`），多粒度版本为 `4691`
（相对 seeds `+8.1%`），直接 feed 记录 `800` 个结构输入和 `304` 个 concolic
triage batch。原始条件与异构集成记录见
[`Research_and_Optimization_Report.md`](Research_and_Optimization_Report.md)。
这些是 B 级历史结果，不是控制全部变量后的独立因果结论。

### 17.5 F21：公开 benchmark 与测量正确性

**覆盖范围。** benchmark 从内置 `maze/parser/deep_branches/crypto_check` 扩展到
LAVA-M、Google Fuzzer Test Suite、libarchive、SQLite、PCRE2 和 FreeType2，并
支持 target-specific seed、参数文件、stdin/file harness 与自动发现。

**测量修正。**

- coverage 与 crash 分开统计，seed 不计入生成输入，吞吐 speedup 以同口径工作量
  计算；
- 读取 AFL `fuzzer_stats` 的 `execs_done/execs_per_sec`，不使用目录大小代替；
- 大 corpus 的 replay 采用分层抽样和上限，保留早期、中期、后期样本；
- 识别 libtool wrapper、非插桩 ELF、LAVA-M 参数和 target suffix，避免把构建成功
  误判为有效 benchmark；
- 修复 batch timeout 溢出，并保存 CSV、JSON、文本报告和原始 artifact 路径。

历史结果涵盖 10-target、8 targets x 4 modes x 3 worker counts、最高 190 ranks
和 public hybrid runs；它们证明评测管线及多种目标可运行。由于不同阶段的 harness、
CPU 分配和版本发生过变化，跨报告数字不得直接拼成一张 SOTA 对比表。

### 17.6 F22：阶段计时与冗余归因

可观测性从“总运行时间”下钻到 worker 内部因果链：

- `SYMCC_WORKER_PROFILE=1` 记录取任务、运行 concolic、扫描输出、内容去重、
  showmap、反馈发送等 phase；
- SIGTERM 中断时间归属到当时 phase，避免 shutdown 时间落入 unknown；
- redundancy funnel 区分同一 worker 内部重复、跨 item 内容重复、跨 worker 重复、
  coverage 已见和最终 accepted；
- hint 可通过环境变量强制开关，支持真实消融；
- benchmark 汇总 phase timing、候选数量、跳过原因和根因比例。

这些字段支持定位“求解重复”和“triage 重复”两类不同问题，也为 F08/F15 的
干扰感知调度提供观测基础。当前为 I/T/B；旧实验没有统一 schema，跨阶段只比较
定义完全一致的字段。

### 17.7 F23：可配置 SymCC/SymSan 引擎抽象

`util/concolic_engine.py` 定义 `ConcolicEngine` 黑盒契约：给定 target、seed 和
输出目录，返回命令、环境与 stdin 策略。`SymCCEngine` 使用进程内 QSYM backend，
`SymSanEngine` 使用 DFSan 插桩目标和 `fgtest` driver；MPI 编排、coverage triage、
K-Scheduler、冗余统计和反馈路径保持共用。

构建与发现同样引擎感知：编译 wrapper、目标后缀和插桩符号检测由 engine 决定。
验证覆盖：

- parser 嵌套 magic 的反馈式 dogfight：两引擎均在第 4 轮到达目标，各 11 个唯一
  输入；
- 45 秒 coverage dogfight：展示 SymCC 的生成吞吐和 SymSan 的目标兼容性差异；
- `run_benchmark --engine {symcc,symsan} --hybrid` 全链路：微目标上均达到
  `30/38` 边。

详见 [`engine_abstraction.md`](engine_abstraction.md)。以上为特定目标 B 级结果，
不支持“某引擎总体优于另一引擎”的结论。

### 17.8 F24：SymSan 技术迁移与 RGD 求解栈

SymSan 侧完成四项直接迁移：

1. DFSan taint 源处的选择性符号化；
2. driver 层 dictionary-guided candidate；
3. 多分支解的 multi-field 组合；
4. `offset:old:new` hint 旁车输出与编排复用。

第五项 fast-solve 在 SymSan 的 task/JIGSAW 模型中由既有快速路径覆盖，记录为
语义等价分析而非重复实现。新增 `fgtest_rgd` 把 I2S、JIGSAW gradient search 和
Z3 组成级联，并保留 one-shot 输出目录契约。修复了 `taint_getc` 丢 label、
SQLite memory-error 默认退出、优化级别导致的构建问题和退出阶段 crash。

真实目标覆盖 base64、libxml2、libpng、PCRE2、SQLite 和 coreutils/uniq；
6-target、3-round hybrid 均值已经归档。实现与参数见
[`symsan_ported_techniques.md`](symsan_ported_techniques.md)，实验见
[`symsan_hybrid_benchmark_6targets.md`](symsan_hybrid_benchmark_6targets.md)。
当前为 I/T/B；C++ libFuzzer harness 的外部 FastGen 链接、离散
`SYMCC_FOCUS_SET` 和最新 F00-F16 telemetry 对齐仍是明确边界。

### 17.9 F25：可复现安装与离线交付

工程交付覆盖三种环境：

- `setup.sh` 完成依赖检测/安装、venv、submodule、构建和 smoke test，支持重复执行；
- `package.sh` 生成 tar/zip、无 Git 源码包和 `--offline` air-gapped bundle；
- 离线包收录 apt 依赖闭包、Python wheels、AFL++ 源码、runtime 源码，可选收录
  SymSan、patch、Z3 与构建脚本；
- 安装树使用相对 RPATH，避免移动目录后 `fgtest` 仍引用打包机绝对路径；
- package/setup 经代码审查修复管道误判、缺失 `apt-get update`、`.gitignore`
  排除和依赖闭包问题，并在 debootstrap bare-machine 环境验证。

该项的 B 表示在固定 Ubuntu/debootstrap 环境完成部署验证，不表示对所有 Linux
发行版提供兼容性保证。交付包仍需保存 OS、LLVM、Z3、AFL++ 和 SymSan revision
作为复现实验元数据。

## 18. 可复现操作

### 18.1 构建与全量回归

```bash
cmake --build build -j2
ninja -C build check
```

### 18.2 离线策略报告

```bash
python3 util/offline_policy.py \
  benchmark_results/.../.offline_trajectory.jsonl
```

### 18.3 消融分析

```bash
python3 benchmark/analyze_ablation.py \
  benchmark_results/benchmark_data.csv \
  --baseline-mode baseline \
  --output-dir benchmark_results/ablation
```

### 18.4 UCSan seed 工作流

```bash
python3 util/ucsan_seed.py inspect seed.bin
python3 util/ucsan_seed.py normalize seed.bin --output normalized.bin
python3 util/ucsan_seed.py learn dumps/*.bin --output learned.bin
```

完整参数、默认值和产物路径见
[`Configuration.txt`](Configuration.txt) 与
[`benchmark/README.md`](../benchmark/README.md)。

## 19. 工作介绍建议

### 19.1 30 秒版本

本项目把 SymCC 从单机路径翻转器扩展为并行混合符号执行框架。系统统一了编译器
结构信息、QSYM 求解遥测、AFL code/data coverage 和 MPI worker 状态，并围绕
prefix continuation 调度 exact、tailored、sampling 与语义 proposal。所有近似或
学习型模块只生成候选，最终由真实目标 replay 和全局 AFL bitmap 验证。

### 19.2 三项核心贡献

1. 跨编译器、运行时、求解器与分布式调度的统一路径上下文；
2. Backsolver/Veritesting、Pangolin reuse、UCSan object graph 和 data coverage 的
   编译型工程整合；
3. 带 propensity、并行干扰和保守离线门控的可学习 solver-sequence 调度。

### 19.3 介绍时必须保留的边界

- “已实现/已测试”不等于“已在公开 benchmark 上达到 SOTA”；
- agentic/neural/semantic 模块不进入正确性可信边界；
- DPOR 是 bounded schedule diversification，不是完备模型检查；
- 多 master 一致性当前以共享文件系统为部署前提；
- 最新 full system 的等 CPU、多轮统计验证仍是下一阶段主任务。

## 20. 后续新增功能的强制记录模板

以后每项新增实现必须在合并前更新本档案，并包含以下内容：

```markdown
### Fxx：功能名称

- 日期/负责人：
- 研究问题：
- 技术来源与差异：
- 方案：
- 可信边界与保守回退：
- 主要代码：
- 配置开关及默认值：
- 输入/输出 schema 或持久化产物：
- 单元测试：
- 集成测试：
- benchmark 配置：
- 当前结果等级：I / T / B / R
- 定量结果：
- 已知局限：
- 下一步：
```

同时执行四项同步更新：

1. 在 `docs/Configuration.txt` 记录所有用户可见配置、默认值和副作用；
2. 在本档案清单中增加 ID、代码、测试和状态；
3. 增加至少一个自动化测试，或明确说明无法自动测试的原因；
4. 若影响 benchmark schema，在 `benchmark/README.md` 记录新增字段与复现命令。

只有完成上述记录，功能才视为“工程完成”；只有达到 R 级，才可在论文或汇报中
表述为经实验验证的性能贡献。

## 21. F26：跨层正确性加固（2026-07-24）

- 研究问题：SOTA 求解复用和并行调度优化是否保持位向量、路径上下文与分布式
  提交的一致性；
- 方案：无回绕线性化证明、`poly-cache-v2` 完整前缀键、fast/cache 候选复验、
  目标专属终态、确定性 LLVM site ID、UCSan 完整 shadow copy、multi-master
  `begin_commit` fencing；
- 主要代码：QSYM `solver.cpp/h`、`compiler/SiteId.h`、`compiler/Pass.cpp`、
  `compiler/Symbolizer.*`、`runtime/src/LibcWrappers.cpp`、
  `runtime/src/UCSanRuntime.cpp`、`util/hybrid_feedback.py`、
  `util/distributed_state.py`、`util/mpi_fuzzing_helper.py`；
- 自动化测试：`poly_modular_soundness.ll`、`poly_prefix_cache.c`、
  `fast_solve_prefix.c`、`libc_long_compare.c`、`ucsan_partial_shadow.c`、
  `ucsan_invalid_entry.c`、`stable_site_ids.c` 及三组 Python 回归；
- 当前结果等级：T；
- 详细错误模型、实现不变量、代价与验证：
  [`Correctness_Review_Fixes_2026-07.md`](Correctness_Review_Fixes_2026-07.md)；
- 局限：确定性 ID 针对相同 IR 结构；poly 证明是保守充分条件；
  committing recovery 依赖共享文件系统时钟与 lease TTL；
- 下一步：把 fallback/retry/fencing 指标加入等 CPU 多轮消融，量化正确性加固的
  性能代价和错误候选减少量。

## 22. F27：持久化 Query IR 与异步增量求解（2026-07-24）

- 研究问题：并行 concolic worker 是否可以共享约束而不是反复重放 seed、重建相同
  路径前缀，并允许 tracer 退出后继续求解；
- 技术来源与差异：实现 Triereme/Marco 风格的 trace/solve 解耦和 query-trie
  调度基础。当前复用粒度是规范化完整前缀，不声称已经复现论文的全部全局搜索策略；
- 方案：QSYM 将路径条件和目标条件序列化为 `symcc-query-ir-v1`，其中表达式节点按
  拓扑顺序记录 opcode、位宽、children 和常量/输入偏移。Python 服务验证 envelope，
  将表达式与 SMT-LIB artifact 以 SHA-256 内容寻址，构造持久 prefix trie，再通过
  fenced lease 分配给独立 solver worker；
- 增量上下文：每个 worker 持有长期运行的 `symcc-query-solver --server`。首次看到
  prefix hash 时解析 `prefix_smt2`，后续查询在该 solver 上执行
  `push -> target_smt2 -> check/model -> pop`。prefix ID 对 worker 槽做确定性分片，
  避免共享前缀在不同进程间反复冷启动；
- 缓存与剪枝：相同 query ID 直接复用持久 SAT/UNSAT result；每个查询另存规范化
  clause set。已证明 UNSAT 的集合只在其为新查询子集时剪枝逻辑超集，并记录
  `reused_from`，不使用 branch-only 猜测；
- 并行可靠性：SQLite WAL/FULL、不可变 artifact、原子 spool rename、过期 lease
  recovery 和递增 fencing token 防止 stale worker 覆盖新结果。损坏 envelope 被
  移入 rejected 目录；
- 结果回流：SAT model 只修改 witness 中有效的输入 offset，生成候选及 manifest。
  MPI master 将候选放回普通 feedback queue，最终保留仍由真实目标 replay 和全局
  AFL bitmap 决定；
- 主要代码：QSYM `solver.cpp/h`、`runtime/src/backends/qsym/query_solver.cpp`、
  `util/query_store.py`、`util/symcc_query_service.py`、
  `util/mpi_fuzzing_helper.py`；
- 配置：`SYMCC_QUERY_SPOOL`、`SYMCC_QUERY_DEFER`、
  `SYMCC_QUERY_OUTPUT_DIR`、`SYMCC_QUERY_MAX_NODES`、
  `SYMCC_ASYNC_QUERY_WORKERS`、`SYMCC_QUERY_STORE`、
  `SYMCC_QUERY_SOLVER`、`SYMCC_QUERY_TRAVERSAL` 和
  `SYMCC_QUERY_PREFIX_CACHE`，详见 `Configuration.txt`；
- 持久化产物：`index.sqlite3`、`objects/{smt2,smt2-prefix,smt2-target}`、
  `queries/<sha256>.json`、`results/<sha256>.json`、
  `candidates/<sha256>.bin` 与 spool 的 accepted/rejected 分区；
- 单元测试：`test/test_query_store.py` 覆盖内容寻址/前缀去重、fenced lease、
  model materialization、损坏 spool 隔离和 UNSAT 超集剪枝；
- 集成测试：`test/query_prefix_reuse.py` 证明两个公共前缀查询只构造一个缓存上下文，
  第二个结果包含 `prefix_cache_hit=true`；`test/query_ir.c` 证明 runtime 在
  `SYMCC_QUERY_DEFER=1` 时不进行 inline solve，退出后服务仍求得
  `0x12345678` 对应输入；
- 当前结果等级：I/T，SOTA 审计中的证据等级为 E；
- 定量功能结果：5 个存储层单元测试和 2 个 lit 集成测试通过；共享前缀测试的缓存
  entry 数为 1，第二次查询命中；端到端测试的 runtime `solver_queries=0` 且异步
  候选字节为 `78 56 34 12`；
- 可信边界：IR 校验、SMT 求解和 clause-subset 规则决定逻辑结果；任何异步 candidate
  仍需 concrete replay。solver 进程 crash 会由 fenced retry 处理，不会把错误结果
  当作 SAT；
- 已知局限：当前只有 Z3 QF_BV helper；prefix cache 位于单个 worker 进程内；
  clause-subset cache 保存完整 UNSAT 查询而非最小化 proof core；尚无公开 benchmark
  的 query redundancy、cache hit、coverage/CPU-hour 和内存增长曲线；
- 下一步：G03 使用同一 IR 记录 static-data feature；G02 在 query result 之上持久化
  solution generator；G06/G07 扩展多 solver portfolio 与 proof/partial-solution
  cache。

## 23. F28：Static Data Coverage 与独立数据新颖度（2026-07-24）

- 研究问题：边覆盖和常量比较进度无法区分 lookup table、lexer automaton、静态图等
  “访问了不同常量数据但没有产生新分支”的输入，如何把这类状态转移纳入并行
  concolic 调度；
- 技术来源与差异：依据 USENIX Security 2024 Data Coverage 的静态存储识别、有效
  匹配长度、switch 邻接选择和 code/data 联合 dominance。实现保持 SymCC 的编译型
  传播方式，并增加跨模块稳定对象 ID；AFL preload 兼容平面与无碰撞结构化 novelty
  平面分离；
- 编译方案：module ctor 注册 constant globals；`Symbolizer` 对 load provenance 做
  保守回溯，区分 simple load 和已提升为 predicate 的 load，给整数比较传递 concrete
  operands、静态 origin 和 signed/ordered 类别；switch case 排序后以只读数组一次
  传入 runtime；
- runtime 方案：启动时用 `dl_iterate_phdr` 注册已加载模块的 readable/non-writable
  `PT_LOAD` 段，细粒度 LLVM object 优先于包含它的模块段。特征键为稳定
  `(object_id, byte_offset, effective_width_bits)`，不包含 ASLR load base；
- 有效长度：相等谓词使用 `width - popcount(lhs xor rhs)`，有序谓词使用最高位起的
  相等位数；region comparison 使用完整相等前缀字节加首个差异字节的相等位数；
  simple load 的有效长度为 load width。switch 仅比较 lower/upper neighbor 或范围
  endpoint，并输出实际 switch/probe 计数；
- novelty 与 corpus：telemetry schema 3 输出
  `[object, offset, matched, width, kind]`。协调器以完整三元键保存 winner，严格单调
  增加 matched bits；只有 code summary 相等时记录 refinement。旧 schema-1/2 状态
  可迁移。该机制是独立持久 novelty/dominance，不与 AFL edge map 哈希碰撞；
- 可信边界：普通边覆盖仍负责 trivial branch；AFL preload 仍是 comparison-prefix
  兼容通道。协调器只降低被支配 seed 的调度 bonus，不删除 AFL queue 文件；不同
  路径摘要之间不做激进替换；
- 主要代码：`compiler/Runtime.*`、`compiler/Pass.cpp`、
  `compiler/Symbolizer.cpp`、`runtime/include/RuntimeCommon.h`、
  `runtime/src/LibcWrappers.cpp`、QSYM/simple backend runtime、QSYM
  `solver.cpp/h`、`util/hybrid_feedback.py`、`util/mpi_fuzzing_helper.py`；
- 配置：`SYMCC_DATA_COVERAGE`、`SYMCC_DATA_CMP_BYTES`、
  `SYMCC_TELEMETRY_OUT`，详细 schema 见 `Configuration.txt`；
- 自动化测试：`data_coverage_static.c` 同时覆盖 lookup table、static graph、
  predicate、region compare、switch 邻接、位级 equality 和 ASLR 稳定性；
  `data_coverage_dso.c` 验证未插桩 DSO 的只读表；`telemetry.c` 验证 schema；
  `test_hybrid_feedback.py` 验证不同 width 不碰撞、同 code summary 的 winner
  refinement 和持久化迁移；
- 当前结果等级：I/T，SOTA 审计证据等级 E；
- 定量功能结果：40 个 hybrid-feedback unittest、4 个 data/telemetry lit 集成测试、
  2 个 AFL preload unittest 通过；微基准观察到 kind 0/1/2，位级 equality 为
  6/8，四 case switch 对中间值只产生 2 个 probe，未插桩 DSO 产生稳定 32-bit
  static feature；
- 已知局限：启动后才通过 `dlopen` 加载且未插桩的 DSO 不会自动重扫；code summary
  当前采用完整 path fingerprint，安全但可能漏掉 code-equivalent refinement；
  尚未在真实 flex/bison、static graph 和 DSL parser 上给出等 CPU 多轮收益；
- 下一步：公开 benchmark 上测量 data feature AUC、refinement、edge coverage/CPU、
  instrumentation overhead 与内存上限；随后按审计顺序推进 G02 solution generator。

## 24. F29：Reusable Solution Generator 与原生全矩阵 polytope mutator（2026-07-25）

- 研究问题：传统 concolic 执行通常一次 SMT 查询只返回一个 model，导致并行 worker
  在同类 path prefix 上重复求解。GenSlv 的关键思想是把“一个解”提升为可复用的
  input generator；Pangolin 的关键思想是从同一线性 path abstraction 采样多个解。
  本轮实现把这两条线合并到 G01 异步 query store 和 AFL 原生 mutator；
- 技术来源与差异：实现借鉴 GenSlv 的 reusable generator、层次 range sampler 和
  model-converter 思路，以及 Pangolin 的 full-matrix polyhedral sampling。当前不是
  论文等价复现：没有导出 Z3 tactic 内部 model-converter，也没有跨 prefix 的
  polyhedron inclusion 证明；但已经实现可版本化、可持久化、可验证回放的核心
  generator 语义；
- Generator IR：新增 `symcc-solution-generator-v1`，包含 `query_id`、
  `input_size`、确定性 `seed`、`fixed` byte assignment、`ranges`、连续 byte
  `fields`、`converter_chain`、`verified_models` 与 `metrics`。IR 使用 canonical JSON
  计算 content SHA-256，并在 query store 中单独持久化；
- Converter 子集：`util/solution_generator.py` 从 topological Query IR 中提取可逆
  equality chain，覆盖 `read`、`concat` split、`zext/sext`、`not/neg`、`xor/add/sub`、
  奇数模乘逆元以及常量 `rol/ror`。提取结果只作为 generator 元数据和后续采样提示，
  不绕过求解验证；
- C++ solver 侧：`symcc-query-solver` 在 SAT 后遍历当前 solver assertions，收集
  8-bit input variables，按完整 solver context 对每个变量做有界二分，得到 exact
  feasible unsigned lower/upper。然后按 byte、field boundary/midpoint 和确定性随机
  层次采样生成候选；每个 candidate 都重新加回原 solver 做完整 byte assignment
  SAT check，`unknown` 不被当作有效模型；
- query store 侧：`QueryStore.complete()` 校验并补齐 generator 的 lease `query_id`，
  若 solver helper 没有 converter chain，则从存储的 Query IR 自动派生。generator
  与 result 在同一 SQLite transaction 中提交，并写入
  `generators/<prefix>/<sha>.json`。candidate materialization 同时消费 primary model
  和所有 `verified_models`，manifest 记录 `model_index`、`generator_hash`、
  `solver_verified=true` 和等待 concrete replay 的 `verified=false`；
- Python sampler：`sample_generator()` 对 fixed/range/field offset 做 witness 边界
  检查，优先生成 field lower/mid/upper 候选，再按 generator seed 做确定性随机 range
  采样。所有输出必须通过调用方 verifier，返回 metrics 中的 proposal、verified、
  accepted、field_attempts 和 synthetic_attempts；
- AFL mutator：`util/afl_symcc_hint_mutator.py` 扩展 poly cache 第六列
  `lower:upper:offset=coefficient,...;...`，保存 `(model, byte box, full matrix)`。
  poly 模式先恢复一个满足矩阵的 feasible base，再沿 joint byte box 和完整线性矩阵
  计算整数 direction 的 alpha interval；输出前再次检查矩阵。若无法移动但已有可行
  点，返回该可行点而不回退到普通 havoc，避免破坏跨变量约束；
- 配置：`SYMCC_GENERATOR_SAMPLES`、`SYMCC_GENERATOR_MAX_VARS`、
  `SYMCC_GENERATOR_CHECK_TIMEOUT` 控制 helper 的 generator 预算；
  `SYMCC_HINT_MUTATOR_POLY_ATTEMPTS` 控制 mutator 从不相关 AFL seed 恢复 feasible
  base 的随机尝试次数。AFL mutator 继续读取 `SYMCC_POLY_CACHE_MUTATOR` 或
  `SYMCC_POLY_CACHE`；
- 主要代码：`runtime/src/backends/qsym/query_solver.cpp`、
  `util/solution_generator.py`、`util/query_store.py`、
  `util/afl_symcc_hint_mutator.py`；
- 自动化测试：`test/test_solution_generator.py` 覆盖可逆 word converter、deterministic
  verifier-gated sampling、field boundary models、重复 range 拒绝和 witness 越界拒绝；
  `test/test_query_store.py` 覆盖 generator 持久化、converter augmentation、content
  hash 和多 verified model materialization；`test/query_generator.py` 运行真实
  persistent query solver，验证 `10 <= input[0] <= 20` 的 range/field/generator artifact
  与候选输出；`test/test_afl_hint_mutator.py` 覆盖 full-matrix 相关约束和可行定点
  不退回 havoc；
- 当前结果等级：I/T，SOTA 审计证据等级 E；
- 定量功能结果：`test_solution_generator.py` 5 个 unittest、`test_query_store.py`
  6 个 unittest、`test_afl_hint_mutator.py` 3 个 unittest、`query_generator.py`、
  `query_ir.c`、`query_prefix_reuse.py` 三个 lit 集成测试通过；增量
  `cmake --build build` 通过。真实 helper 集成测试中 generator 产生 `[0,10,20]`
  range、`[0]` field、至少 3 个 solver-verified models，query store 物化至少 4 个
  位于 `[10,20]` 的候选；
- 可信边界：generator 只产生候选，不替代 exact solver result；每个 solver-side
  candidate 先由原 SMT context 验证，每个 corpus candidate 仍需 concrete replay 和
  AFL novelty triage。mutator 的矩阵验证只证明 cached linear abstraction 一致，不
  证明目标程序路径一定改变；
- 已知局限：当前 helper 只覆盖 Z3 QF_BV byte variables；converter chain 是 Query IR
  上的有界语法提取，不是 Z3 tactic pipeline 的完整 model-converter；range 是
  per-byte exact interval，未实现 optimistic simplification 的约束弱化证明；Pangolin
  cache 仍缺跨 prefix/polyhedron inclusion/subsumption 索引；尚未在公开 benchmark
  上报告 generator coverage、models/query、valid-model ratio、unique edges/query 和
  coverage/CPU-hour；
- 下一步：在 G06 solver portfolio 中让不同 solver helper 共享同一 generator schema；
  在 G18 后续研究中加入兼容 polyhedron 索引和跨 prefix 复用；在 benchmark 中加入
  single-model、range-generator、poly-generator 和 full-generator 的消融。

## 25. F30：SymCC-str-inspired String Constraint Artifact 与 offset-aware candidate（2026-07-25）

- 研究问题：C 字符串程序经常把多个输入字节作为一个逻辑 string 处理。纯 bit-vector
  路径约束可以求解，但 fuzzing 侧只看到零散 byte hint，难以把 `strcmp/strncmp`
  这类语义作为可复用候选。完整 SymCC-str 需要 SMT string/BV 双表示；本轮实现先
  落地一个保守的 string/BV 桥；
- 技术来源与差异：借鉴 TACAS 2026 SymCC-str 的 libc string 语义提升目标，但不在
  trusted path 中替换现有 QSYM bit-vector solver。实现只在一侧 concrete、另一侧为
  直接 input-byte `ReadExpr` 时记录 offset patch；复杂派生字符串、非直接输入 byte、
  substring/indexof/contains 仍保守回退到现有 BV 约束和 string hint；
- runtime ABI：新增 `_sym_expr_input_offset(SymExpr, uint32_t*)`。QSYM backend 只对
  裸 `ReadExpr` 返回 input offset，simple backend 返回 false。该 hook 不改变表达式
  构造、solver stack 或 path constraint；
- libc wrapper：`memcmp/strcmp/strncmp` 在现有 data coverage、string hint 和
  memory-equality constraint 之外，可选写出 `symcc-string-constraint-v1` JSONL。记录
  字段包括 op、site、result、taken_equal、symbolic_side、token_hex、nul_terminated、
  complete 和 `patches[{offset,value}]`。`strcmp` 在 bounded concrete token 内观察到
  NUL 时加入 NUL patch；
- candidate materialization：新增 `util/string_constraints.py`，严格校验 schema、
  patch offset 唯一性和边界，再按 witness 生成候选；调用方 verifier 必须确认候选
  有效。`util/check_string_constraints.py` 用于 lit 集成检查；
- AFL 原生消费：`util/afl_symcc_hint_mutator.py` 读取 `SYMCC_STRING_CONSTRAINTS` 或
  `SYMCC_STRING_CONSTRAINT_OUT`，按 patch 直接修改 AFL buffer，作为独立
  `symcc_string` mutation stage。offset 超出当前 seed 时保守失败并交给后续 mutation；
- 配置：`SYMCC_STRING_CONSTRAINT_OUT`、`SYMCC_STRING_CONSTRAINT_MAX_BYTES`、
  `SYMCC_STRING_CONSTRAINT_MAX_RECORDS` 控制 runtime artifact；
  `SYMCC_STRING_CONSTRAINTS`、`SYMCC_HINT_MUTATOR_STRING_LINES` 控制 AFL mutator 消费；
- 主要代码：`runtime/include/RuntimeCommon.h`、QSYM/simple backend `Runtime.cpp`、
  `runtime/src/LibcWrappers.cpp`、`util/string_constraints.py`、
  `util/check_string_constraints.py`、`util/afl_symcc_hint_mutator.py`；
- 自动化测试：`test/test_string_constraints.py` 覆盖 schema 校验、offset patch
  materialization 和重复 offset 拒绝；`test/test_afl_hint_mutator.py` 覆盖
  `symcc_string` mutation stage；`test/string_constraints.c` 运行真实 instrumented
  `strcmp` wrapper，从 stdin 符号输入记录 JSONL，再检查 `xxxxx\0zz` 可还原为
  `MAGIC\0zz`；
- 当前结果等级：I/T，SOTA 审计证据等级 E；
- 定量功能结果：新增 2 个 string-constraint unittest、mutator 4 个 unittest、
  `string_constraints.c` lit 集成测试通过；增量 runtime 构建通过；
- 可信边界：string constraint artifact 是候选生成提示，不替代 path constraint 和
  exact solver。只有 direct `ReadExpr` offsets 会进入 patch；所有候选仍需 verifier、
  concrete replay 和 AFL novelty triage；
- 已知局限：尚未实现 SMT string solver、smt-switch 双表示、symbolic length、substring、
  concat、contains、indexof、`strlen/strchr/strstr` 的 string-theory lowering，也未接入
  cvc5。当前机制对直接输入缓冲区的 equality/string-token 约束有效，对复杂 string
  操作只是候选提示；
- 下一步：为 `strlen/strchr/strstr` 加入同 schema 的 guarded patches；在 G04 后续阶段
  设计 backend-neutral string solver API，并在 G06 solver portfolio 中接入 Z3/cvc5
  string backend 对拍。

## 26. F31：Asynchronous Solver Portfolio 与 disagreement telemetry（2026-07-25）

- 研究问题：SMTgazer 调度的是互补 SMT solver/algorithm sequence，而不是同一 Z3
  后端上的环境开关。G01 已经把 query solving 抽象为独立 helper，因此可以先在
  asynchronous query service 边界实现真正的多 helper portfolio；
- 技术来源与差异：借鉴 SMTgazer 的 per-instance solver/algorithm portfolio 和
  exact replay oracle 思路。本轮实现不是完整 X-means/BO 序列学习，也没有内置
  cvc5/Bitwuzla lowering；它先建立可持久化的 portfolio attempt schema、winner
  selection 和 disagreement 保守处理；
- Portfolio runner：新增 `PortfolioSolver`，接受 `(name, solver callable)` 列表，对同
  一 `WorkLease` 运行多个 backend，记录每个 attempt 的 status、solver、elapsed_us
  和 prefix_cache_hit。若至少一个 SAT 且没有 UNSAT，选择 SAT；否则选择 UNSAT；若
  SAT 与 UNSAT 同时出现，返回 `unknown` 并标记 disagreement；
- 可信策略：SAT/UNSAT conflict 不会写成确定 proof 或 model，不进入 UNSAT subset
  cache，也不会 materialize candidate。错误或 unknown attempt 被记录，但不阻止
  其他 exact backend 给出结果；
- Query store schema：result 可包含 `symcc-solver-portfolio-v1`，字段为 `winner`、
  `disagreement` 和 bounded `attempts`。`stats()` 新增 `portfolio_results` 与
  `portfolio_disagreements`；
- Query service：`symcc_query_service.py` 支持 `--portfolio` 或
  `SYMCC_QUERY_SOLVER_PORTFOLIO`。JSON 形如
  `{"solvers":[{"name":"z3","command":"/path/to/helper","persistent":true}]}`。
  persistent backend 使用现有 `--server` prefix-cache 协议；非 persistent backend 逐
  query 调用 helper；
- 主要代码：`util/query_store.py`、`util/symcc_query_service.py`；
- 自动化测试：`test/test_query_store.py` 新增 portfolio winner telemetry 和
  SAT/UNSAT disagreement 降级为 unknown 的回归；
- 当前结果等级：I/T，SOTA 审计证据等级 E；
- 定量功能结果：`test_query_store.py` 8 个 unittest 通过；此前 query generator 和
  Query IR lit 集成测试继续通过；
- 已知局限：还没有 backend-neutral SMT lowering 到 cvc5/Bitwuzla；没有 SMTgazer 的
  X-means/BIC、censored PAR-2 objective、BO sequence optimizer 或 boosting/bagging
  surrogate；F34后续补bounded parallel racing，F237--F241补异构context与调度，
  F242再补SAT-gated running-attempt cancellation；Bitwuzla实机仍未完成；
- 下一步：将 Query IR lowering 拆成 backend-neutral SMT-LIB profiles，接入 cvc5 和
  Bitwuzla helper；将 portfolio attempt telemetry 回灌到 `SMTAlgorithmScheduler` 的
  offline/online policy。

## 27. F32：PSCache-inspired Partial Solution Cache 与 Query IR 验证复用（2026-07-25）

- 研究问题：FSE 2024 PSCache 的核心价值不是 branch-only result cache，而是在不同
  path/query 之间复用可解释的 partial assignment。对本项目来说，第一优先级是把
  “可复用部分解”接入异步 Query IR/store，使其能提前产生候选输入，同时保持求解
  结果仍由 exact solver 或可证明 UNSAT subset 规则决定；
- 技术来源与差异：本轮实现采用 PSCache-inspired 工程主路径：复用 SAT primary
  model 与 solver-verified generator model 中的 byte assignment，并在目标 query 上
  做完整 Query IR evaluation 后才 materialize candidate。它不是完整 solver-internal
  CDCL/bit-blast conflict assignment extraction，也不把 partial hit 写成 SAT/UNSAT；
- Cache schema：`util/query_store.py` 新增 `symcc-partial-solution-v1`，SQLite 表
  `partial_solutions` 记录 `solution_hash`、source query、canonical assignments、
  offsets、source clause hashes、model index、generator hash 和 created time；
  `partial_solution_clauses` 建立 solution 到 source clause hash 的倒排索引；
  `partial_solution_candidates` 记录 query/witness/solution/candidate 的复用证据；
- 写入路径：`QueryStore.complete()` 在 SAT completion 同一事务中调用
  `_store_partial_solutions()`。只采集 `assignments` 和 `generator.verified_models`；
  `unknown`、`error`、disagreement portfolio result 和 UNSAT 不进入 partial solution
  cache；
- 读取路径：`QueryStore.ingest()` 在没有 exact cached result 时调用
  `materialize_partial_candidates()`；SAT completion 后额外调用
  `materialize_partial_candidates_for_pending()`，对有限数量 pending query 进行提前
  materialization；lookup 按当前 query 与 source clause 的 overlap 优先级排序，再做
  byte patch 和 Query IR verification；
- Query IR 验证器：新增 bounded evaluator，按 expression closure 从
  content-addressed `expressions` 表重建 DAG，支持常见 QF_BV 节点
  `bool/constant/read/concat/extract/zext/sext/add/sub/mul/div/rem/bitwise/shift/compare/land/lor/lnot/ite/rol/ror`。
  候选必须让所有 prefix roots 和 target root 为真；遇到未知 op、超出预算 bit-width、
  read 越界或除零时保守拒绝复用；
- Candidate manifest：partial candidate 使用既有
  `symcc-query-candidate-v1` manifest，并标注 `solver_verified=false`、
  `partial_solution_hash`、`partial_solution_source_query_id`、
  `partial_solution_verified=true`、`query_ir_verified=true`、`verified=false`。
  外部输出目录写入 `async-partial-*` 文件，仍需 MPI/AFL concrete replay 和 novelty
  triage；
- 配置：`SYMCC_PARTIAL_SOLUTION_CACHE` 控制开关，默认启用；
  `SYMCC_PARTIAL_SOLUTION_LIMIT` 限制每个 query 物化数量；
  `SYMCC_PARTIAL_SOLUTION_SCAN` 限制最近 partial solution 扫描数；
  `SYMCC_PARTIAL_SOLUTION_PENDING_QUERIES` 限制 SAT completion 后扫描 pending query
  的数量；
- 主要代码：`util/query_store.py`；
- 自动化测试：`test/test_query_store.py` 新增 partial cache positive/negative 回归。
  positive 用 source equality model 复用到 range query，检查 external
  `async-partial-*`、manifest flags、stats 和 query 仍保持 pending；negative 检查
  不满足 target 的 partial assignment 不会写 candidate 记录；
- 当前结果等级：I/T，SOTA 审计证据等级 E；
- 定量功能结果：`test_query_store.py` 从 8 个扩展为 10 个 unittest 并全部通过；
- 可信边界：partial cache 只产生候选，不改变 solver result cache，也不写 UNSAT
  proof。候选的逻辑前置是 Query IR evaluation，最终保留仍依赖 concrete replay 和 AFL
  coverage novelty；
- 已知局限：F35 已补 persistent solver helper 内部 recent-SAT assignment probe，但
  尚未在 vendored Z3/CDCL/bit-blast 边界采集 conflict assignments，尚未进行 SAT
  variable 到 input bit-vector 的低层重建，也没有 proof-core/minimal partial solution
  extraction；当前 evaluator 对超大 bit-vector 和部分特殊 SMT-LIB 语义采取拒绝复用
  策略；
- 下一步：把 solver helper 暴露的 model/proof telemetry 与此 cache 合并，采集
  partial hit rate、candidate validity、lookup 开销和 solver-time saved；随后实现
  solver-internal conflict assignment extraction 并接入 ParaSuit 自配置预算。

## 28. F33：SymCC-str phase-2 String Theory Backend 与 MPI/CLI Materialization（2026-07-26）

- 研究问题：F30 只把 libc 字符串比较变成 exact offset patches，能快速恢复
  `strcmp/memcmp` 目标 token，但不能表达 `contains/indexof/substr/length` 这类真实
  string theory 关系，也无法在已相等路径上生成“避开当前 token”的 alternative。G04
  第二阶段要把 string/BV bridge 提升为 backend-neutral query layer，并让候选进入并行
  fuzzing 主路径；
- 技术来源与差异：借鉴 SymCC-str 的 bit-vector/string 双表示目标，但本阶段仍保持
  conservative side-channel 设计：string query 只生成候选，不替换 QSYM 的原始 BV
  path constraints。SMT string 模型经本地 byte-level verifier 再落到输入 offset；
  concrete replay 与 AFL bitmap novelty 仍是最终准入条件；
- Query schema：`util/string_constraints.py` 新增 `symcc-string-query-v1`。变量包含
  `name/offset/capacity/min_length/max_length/nul_terminated`，并要求 input span 不重叠；
  term 支持 `var/literal/concat/substr`，predicate 支持 `equal/distinct`、
  `prefixof/suffixof/contains`、`length`、`indexof` 和 `char_at`。所有字符串、hex、
  变量数、递归深度、constraint 数和 input size 都有上界；
- Lowering：`lower_string_query()` 生成 SMT-LIB String 公式，使用带 offset metadata
  的符号名 `|symcc!str!offset!capacity!nul|`。当前实现只把 printable ASCII literal
  下沉到 SMT string；包含任意二进制字节的 token 保守回退到 F30 patch/BV 路径；
- Solver helper：`runtime/src/backends/qsym/query_solver.cpp` 新增 `--generic` one-shot
  模式。普通 Query IR 仍走 QF_BV/generator 路径；generic 模式用 Z3 通用 parser/solver
  检查 SMT-LIB，并从 String model 中解析 UTF-8 byte 序列回填输入 offset。C string
  变量会在容量允许时补 NUL；超出 capacity 或无法映射的 model 被拒绝；
- Backend API：`SymccJsonStringBackend` 通过 `symcc-query-solver --generic` 调用 solver，
  返回现有 JSON model 协议。`materialize_string_candidates()` 会先尝试 string query，
  再回退 exact offset patches；所有 solver candidate 必须通过
  `candidate_satisfies_string_query()`，并且 no-op witness candidate 被过滤；
- MPI 集成：`util/mpi_fuzzing_helper.py` 默认启用
  `SYMCC_STRING_SOLVER_ENABLE=1`。每个 worker execution 写隐藏
  `.string_constraints.jsonl`，执行后最多扫描
  `SYMCC_STRING_SOLVER_QUERY_LIMIT` 条记录，按
  `SYMCC_STRING_SOLVER_TIMEOUT_MS` 调用 backend，并把 verified
  `string-solver-*` 候选写入同一 output dir。随后复用既有 pass 1/2 showmap、worker
  coverage dedup、master triage 和 AFL sync；`.string_solver_metrics.json` 记录
  loaded/scanned/written、solver_queries、solver_sat、solver_verified/rejected/errors；
- 离线 CLI：新增 `util/symcc_string_solver.py`，用于 benchmark 或 paper artifact 复现：
  `symcc_string_solver.py constraints.jsonl witness out --solver ...`。它和 MPI helper
  共用 `string_constraints.py` 的 normalization/lowering/verifier/materializer，不维护
  第二套语义；
- 配置：新增 `SYMCC_STRING_SOLVER_ENABLE`、`SYMCC_STRING_SOLVER`、
  `SYMCC_STRING_SOLVER_QUERY_LIMIT`、`SYMCC_STRING_SOLVER_CANDIDATES`、
  `SYMCC_STRING_SOLVER_TIMEOUT_MS`，详见 `docs/Configuration.txt`。没有可用 solver
  helper 时，MPI helper 仍可应用 exact offset patch，并把 backend 缺失记录到 metrics；
- 主要代码：`util/string_constraints.py`、`runtime/src/backends/qsym/query_solver.cpp`、
  `util/mpi_fuzzing_helper.py`、`util/symcc_string_solver.py`；
- 自动化与 smoke 结果：`python3 test/test_string_constraints.py -v` 6/6 通过；
  `lit -sv build/test/string_solver.py` 通过，覆盖真实 `symcc-query-solver --generic`
  equality、distinct 和 contains query；`python3 -m py_compile
  util/string_constraints.py util/mpi_fuzzing_helper.py util/symcc_string_solver.py`
  通过；CLI smoke 将 `xxxxx\0zz` materialize 为 `MAGIC\0zz`，metrics 中
  `solver_queries=1`、`solver_sat=1`、`solver_verified=1`、`written=1`；
- 当前结果等级：I/T，SOTA 审计证据等级 E；
- 可信边界：这是 string-theory candidate plane，不是 trusted solver replacement。
  它不会写 SAT/UNSAT proof，不更新 QueryStore exact result cache，也不跳过 concrete
  replay。二进制 string literal、overlapping input spans、超长/递归 query、未知 op、
  model 越界和 verifier 不满足都会拒绝或回退；
- 已知局限：尚未实现 smt-switch 级 BV/String 同步视图，尚未接入 cvc5/Princess/Z3str3
  对拍，尚未在 runtime 中为 `strlen/strchr/strstr` 产生原生 string query；generic
  solver 目前 one-shot 调用，没有 persistent string-server、portfolio racing 或
  learned backend routing；
- 下一步：把 runtime artifact 从 patch schema 扩展为 guarded string-query schema，
  覆盖 symbolic length、substring/indexof/contains 和更多 libc model；随后把 F33
  backend 纳入 G06 portfolio telemetry，并与 G08/G11 的 grammar/solve-complete
  结构化补全共享 token 与 length constraints。

## 29. F34：Bounded Parallel Solver Portfolio Racing（2026-07-26）

- 研究问题：F31 建立了 solver portfolio 的 result schema 与 disagreement 语义，但
  attempt 仍按顺序执行，不能体现 SMTgazer/portfolio solving 的核心工程收益：互补
  solver 同时竞争同一 query 的 wall-clock 时间预算。G06 第二阶段目标是在不降低可信
  边界的前提下并发化 backend attempts；
- 技术来源与差异：借鉴 portfolio SAT/SMT solving 与 SMTgazer per-instance scheduling
  的 racing 思路。本阶段实现 bounded parallel racing，但默认等待所有已启动 attempt
  完成后再选择 winner，因此仍能观察 SAT/UNSAT disagreement。它不是 eager
  cancellation，也不是论文级 X-means/BO scheduler；
- Portfolio runner：`PortfolioSolver` 新增 `parallelism` 参数。默认使用
  `SYMCC_QUERY_SOLVER_PORTFOLIO_PARALLELISM`，未设置时等于 configured solver 数，
  上限 64。每个 solver callable 在独立 thread 中执行，attempt telemetry 按配置顺序
  持久化，terminal results 也按配置顺序决定 SAT 优先、UNSAT 其次的 winner；
- Result schema 扩展：`symcc-solver-portfolio-v1` 新增 `mode`、`parallelism` 和
  portfolio-level `elapsed_us`。`elapsed_us` 现在表示整个 race 的 wall-clock 时间，而
  每个 attempt 仍保留自己的 solver-reported 或 measured `elapsed_us`；
- Service 集成：`util/symcc_query_service.py` 新增 `--portfolio-parallelism`，覆盖环境
  默认值。persistent backend 仍由 `ExitStack` 管理生命周期；同一 service worker 对
  一个 query 内的不同 backend 并发调用，不跨 query 重入同一 backend；
- 可信策略：winner/disagreement 规则完全沿用 F31。若任一 backend SAT 且没有 UNSAT，
  选择配置顺序最靠前的 SAT；若只有 UNSAT，选择配置顺序最靠前的 UNSAT；若 SAT 与
  UNSAT 同时出现，返回 `unknown`，不缓存 proof/model，也不 materialize candidate；
- 主要代码：`util/query_store.py`、`util/symcc_query_service.py`；
- 自动化测试：`test/test_query_store.py::test_portfolio_solver_runs_backends_in_parallel`
  用 `threading.Barrier` 证明两个 backend 同时进入；既有 winner telemetry 和
  SAT/UNSAT disagreement 测试继续覆盖 schema 兼容性；
- 当前结果等级：I/T，SOTA 审计证据等级 E；
- 定量功能结果：`python3 test/test_query_store.py -v` 11/11 通过；`python3 -m
  py_compile util/query_store.py util/symcc_query_service.py test/test_query_store.py`
  通过；
- 已知局限：Python thread 层无法强杀已经进入外部 persistent solver 的 attempt，故
  本阶段默认等待全部 attempt 完成。F242后续加入opt-in SAT-gated cancellation、
  helper独立process group和bounded disagreement window；默认全收集语义仍保留；
- 下一步：接入 cvc5/Bitwuzla/string backend 的 capability matrix，并把 per-attempt
  status/elapsed/prefix-cache-hit 回灌到 `SMTAlgorithmScheduler` 和 offline PAR-2
  训练轨迹。

## 30. F35：Solver-helper Internal PSCache Assignment Probing（2026-07-26）

- 研究问题：F32 的 partial-solution cache 位于 QueryStore 层，只能在 solver 完成后为
  后续 query 生成 candidate，不能缩短当前 helper 的 solve path。PSCache 的更核心思想
  是把可复用 assignment 带回求解器内部，在进入昂贵 search 前尝试已知 partial model；
- 技术来源与差异：借鉴 PSCache 的 partial assignment reuse，但当前实现采用
  solver-helper 内部 recent-SAT model probe，而不是修改 Z3 CDCL/bit-blast pipeline。
  它只复用已经由 Z3 SAT 结果验证过的 input-byte assignment，并对当前 prefix+target
  solver context 再次 `check()`；probe miss 不产生 UNSAT 结论；
- Server cache：`symcc-query-solver --server` 新增 `PartialSolutionCache`。每个 SAT
  result 的 `assignment_values` 被裁剪到 `SYMCC_SOLVER_PSCACHE_ASSIGNMENTS` 个 input
  byte，并按 LRU-ish front insertion 保留在进程内 deque 中，上限
  `SYMCC_SOLVER_PSCACHE_SIZE`；
- Probe path：persistent server 在 `solver.push(); solver.from_file(target)` 后，正式
  `checkSolver()` 前调用 `tryPartialSolutions()`。它最多尝试
  `SYMCC_SOLVER_PSCACHE_PROBES` 条 cached assignment，每次用
  `SYMCC_SOLVER_PSCACHE_TIMEOUT` 设置短超时，并把 `input_offset == byte` 断言进当前
  solver。若 Z3 返回 SAT，helper 立即返回 `solver=z3-pscache`，并从当前 model 重新
  collect assignments；否则 pop 后继续下一条或完整求解；
- Result telemetry：helper JSON 新增 `solver_pscache_hit` 和
  `solver_pscache_probes`。`QueryStore._validate_result()` 保留这两个字段，
  `stats()` 新增 `solver_pscache_hits`；
- 配置：`SYMCC_SOLVER_PSCACHE`、`SYMCC_SOLVER_PSCACHE_SIZE`、
  `SYMCC_SOLVER_PSCACHE_ASSIGNMENTS`、`SYMCC_SOLVER_PSCACHE_PROBES`、
  `SYMCC_SOLVER_PSCACHE_TIMEOUT`，详见 `docs/Configuration.txt`；
- 主要代码：`runtime/src/backends/qsym/query_solver.cpp`、`util/query_store.py`；
- 自动化测试：新增 `test/query_solver_pscache.py`。第一条 query 求解
  `input[0] == 0x42`，第二条不同 query 为 `0x40 <= input[0] <= 0x50`；persistent
  helper 必须在第二条返回 `solver_pscache_hit=true`、`solver=z3-pscache`，且
  QueryStore stats 中 `solver_pscache_hits=1`。`test/test_query_store.py` 仍覆盖 stats
  schema 兼容；
- 当前结果等级：I/T，SOTA 审计证据等级 E；
- 定量功能结果：`cmake --build build --target SymCCRuntime` 通过；`lit -sv
  build/test/query_solver_pscache.py` 通过；`python3 test/test_query_store.py -v`
  11/11 通过；
- 可信边界：solver PSCache hit 只是“当前 query 在 cached assignment 下 SAT”的
  shortcut，不写 UNSAT proof，不更新 UNSAT subset cache，不跳过 Z3 validation，也不
  直接声明 query solved unless Z3 returned SAT under current constraints；
- 已知局限：仍未采集 PSCache 论文中的 conflict assignments、bit-blast internal
  variables、proof-core-minimized partial solution 或 prefix/off-path 子约束索引；
  当前 recent-SAT assignment 对高度变化的 queries 可能只贡献少量 cheap probes；
- 下一步：在 solver helper 中加入 clause-hash/target-shape fingerprints，把 recent
  assignments 从单纯 LRU 提升为 overlap/range-aware selection；长期方向是修改
  vendored Z3 或接入可暴露 assumption/core/model telemetry 的 backend，采集真正
  conflict-derived partial solutions。

## 31. F36：Lase/Cottontail-inspired Token Grammar Solve-Complete Proposals（2026-07-26）

- 研究问题：已有 semantic proposal 能做 byte inverse、data exemplar transfer 和 UCSan
  object partition，但缺少 Lase 式在线 token grammar synthesis 与 Cottontail
  Solve-Complete 的结构化补全路径。G08/G11 的完整实现很大，本阶段先把 token grammar
  completion 接入 verified proposal plane；
- 技术来源与差异：借鉴 Lase 的 online token grammar 与 Cottontail 的
  “约束核心 + 语法补全 + replay 验证”思路。实现只从 AFL extras/string token 和
  comparison-core fragments 合成 bounded grammar rules，不推导完整 CFG，也不调用
  LLM；所有输出仍是 data-only `solve_complete` proposal；
- Grammar synthesis：新增 `TokenGrammarRule` 与 `synthesize_token_rules()`，从 token
  中抽取 `literal`、`delimited`、`key_value` 和路径/点划线 `segment` 规则。规则数量、
  token 长度和渲染长度均有上界；
- Online state：`SemanticProposalGenerator` 维护 `grammar_fragments`，从每次
  comparison core 的输入片段中采样最多 512 条历史 fragment，并写入
  `.semantic_proposal_generator.json`，供后续 seed 使用；
- Solve-complete stage：在 inverse 与 surrogate 之后、UCSan heap partition 之前新增
  `_solve_complete_candidates()`。它使用当前 core span 的形状保留 quote/bracket wrapper
  或 key-value 左侧，再把 token grammar body 填入，生成 kind=`solve_complete` 的
  candidate。候选仍进入 `VerifiedProposalManager`，后续由 target replay、target
  telemetry 和 AFL novelty 决定是否保留；
- 配置：沿用 `SYMCC_SEMANTIC_PROPOSALS` 和 `SYMCC_SEMANTIC_TOKEN_DIR`，详见
  `docs/Configuration.txt`。不新增默认外部依赖；
- 主要代码：`util/semantic_proposals.py`；
- 自动化测试：`test/test_semantic_proposals.py` 新增
  `test_token_grammar_rule_synthesis` 和
  `test_solve_complete_uses_token_grammar_and_core_shape`，覆盖 delimited/key-value/
  segment rule synthesis 与 `""` core 补全为 `"MAGIC"` 的 structured candidate；
- 当前结果等级：I/T，SOTA 审计证据等级 E；
- 定量功能结果：`python3 test/test_semantic_proposals.py -v` 5/5 通过；`python3 -m
  py_compile util/semantic_proposals.py test/test_semantic_proposals.py` 通过；
- 可信边界：这是 untrusted proposal plane，不改变 symbolic solver result，不绕过
  `VerifiedProposalManager`，也不把 grammar completion 视为 parser acceptance proof；
- 已知局限：还没有完整 online CFG/nonterminal inference、grammar-rule coverage、
  precision/recall feedback、conflict rule splitting、variable-length append/truncate
  planning 或 history-guided seed acquisition；当前实现是 Lase/Cottontail 的 bounded
  deterministic baseline；
- 下一步：把 G04 string-query metadata、G03 data features 和 ECT node ids 一起写入
  solve-complete proposal metadata，再用 replay 结果学习 grammar-rule success/invalid
  ratio，并为 G11 的 full structured seed acquisition 提供实验数据。

## 32. F37：IFSS/Hydra-style Targeted Transformation Proposals（2026-07-26）

- 研究问题：现有 Backsolver/Veritesting 已能处理受限 side-effect-free region，但还没有
  IFSS worklist、region state merge 和 Hydra 式 targeted control-flow transformation。
  编译器级替换需要完整 LLVM memory/poison/exception 语义，本阶段先把相关思想落到
  verified proposal plane；
- 技术来源与差异：借鉴 IFSS 的 relevance slice、state merge、symbol substitution，
  以及 Hydra 的 failure-preserving targeted transformation。实现不生成或运行变换后
  程序，只在输入数据上进行受限 core fragment 迁移和边界扰动，随后用原程序 replay
  过滤 spurious result；
- Relevance slice：新增 `RelevanceSlice` 与 `ifss_relevance_slices()`，从
  `comparison_taints` 中提取 bounded constraint core，并按 target branch、interesting
  标记、依赖密度和 span 长度排序；
- Targeted transform stage：`SemanticProposalGenerator` 新增
  `_targeted_transform_candidates()`，在 inverse/surrogate 后、solve-complete 前以
  有界预算生成 kind=`targeted_transform` 的候选：
  - `hydra-copy-core`：在等宽 comparison core 间复制高相关 fragment；
  - `hydra-swap-cores`：交换等宽 core fragment，模拟状态合并后的 symbol substitution；
  - `hydra-boundary-zero/ff/highbit/step`：对 slice 边界做 parser/control-flow 常见扰动；
  - `hydra-truncate-after-core`：对 interesting core 做受限 prefix preservation；
- 预算与可信边界：targeted stage 最多占 `max_proposals_per_observation` 的小比例，
  避免饿死 solve-complete/heap-partition baseline。所有候选仍由
  `VerifiedProposalManager` materialize、原程序 target telemetry 验证和 AFL novelty
  triage 决定是否保留；
- 配置：沿用 `SYMCC_SEMANTIC_PROPOSALS`；`SYMCC_VERIFIED_PROPOSALS` 的 accepted kinds
  新增 `targeted_transform`，详见 `docs/Configuration.txt`；
- 主要代码：`util/semantic_proposals.py`、`util/verified_proposals.py`；
- 自动化测试：`test/test_semantic_proposals.py` 新增
  `test_targeted_transform_uses_ifss_relevance_slices`，覆盖 relevance slice 排序、
  `hydra-copy-core` candidate 和 `targeted_transform` ingest；
- 当前结果等级：I/T，SOTA 审计证据等级 E；
- 定量功能结果：`python3 test/test_semantic_proposals.py -v` 6/6 通过；
  `python3 test/test_verified_proposals.py -v` 2/2 通过；`python3 -m py_compile
  util/semantic_proposals.py util/verified_proposals.py test/test_semantic_proposals.py
  test/test_verified_proposals.py` 通过；
- 已知局限：尚未实现 compiler/runtime 级 IFSS continuation state、multi-exit region、
  loop summary、MemorySSA alias-sensitive merge、LLVM poison/undef/freeze、transformed
  binary exploration 或 spurious-result taxonomy。当前实现是 SOTA 思想在可信 proposal
  边界内的 aggressive baseline；
- 下一步：把 expensive-branch profiling、Query IR prefix roots、static dependency map
  和 ECT node metadata 写入 transform proposal state，形成可学习的
  transformation-success/invalid-ratio 统计，再评估是否推进真正的 compiler-level
  IFSS/Hydra engine mode。

## 33. F38：GenSym-style Live Continuation Checkpoint Descriptors（2026-07-26）

- 研究问题：`StateShardCoordinator` 已能把 seed/focus/target/action/schedule prefix
  切成可 lease 的 state task，但 G05 需要的是可恢复 symbolic continuation：程序位置、
  path condition、symbolic store、symbolic memory 和 parent delta 都必须有稳定身份。
  本阶段先实现 canonical descriptor 与 checkpoint id，作为后续 live-state engine 的
  控制面 schema；
- 技术来源与差异：借鉴 GenSym continuation-passing symbolic execution 的“可调度
  continuation frame”思想。当前实现不暂停进程、不序列化真实 heap，也不迁移正在
  执行的 solver context；它只定义 future engine 可交给 MPI coordinator 的
  `symcc-live-continuation-v1` 描述；
- Descriptor schema：新增 `ContinuationFrame` 与 `LiveContinuationDescriptor`。
  descriptor 包含 engine、最多 32 个 PC frame、content-addressed
  `path_condition_root`、`symbolic_store_root`、`symbolic_memory_root`、parent checkpoint
  和 target branch。所有 digest 字段必须是 SHA-256 hex，否则被清空；
- Checkpoint identity：`LiveContinuationDescriptor.checkpoint_id()` 对 canonical JSON
  做 SHA-256，保证同一 continuation 在不同 coordinator/path 表示下得到稳定 id；
- State task integration：`StateShardCoordinator.payload_from_item()` 接受可选第 6 个
  tuple 元素作为 continuation descriptor，将 canonical `continuation` 和
  `continuation_id` 写入 `state_payload`，因此 task id、shard owner、lease/recovery 都可
  对 live-state identity 生效；
- 配置：沿用 `SYMCC_STATE_PARALLEL` 控制面；F38 阶段的 replay mode 不传输 live
  memory pages，F59 后可引用 portable page-COW bundle，但仍不具备 native resume；
- 主要代码：`util/distributed_state.py`；
- 自动化测试：`test/test_distributed_state.py` 新增
  `test_live_continuation_descriptor_is_canonical_state_identity`，覆盖 checkpoint id
  稳定性、state-task id 对 PC 变化敏感，以及 descriptor payload 的恢复语义；
- 当前结果等级：I/T，SOTA 审计证据等级 E；
- 定量功能结果：`python3 test/test_distributed_state.py -v` 17/17 通过；`python3 -m
  py_compile util/distributed_state.py test/test_distributed_state.py` 通过；
- 后续状态：F59 已补 content-addressed solver frames、symbolic store、COW memory
  pages、fork/restore 和 checkpoint integrity；仍没有 live symbolic VM、
  CPS/native PC-register-call-stack resume、external-resource virtualization、
  state-local execution integration、fault-injection recovery 或 locality-aware
  live-state stealing benchmark。F38 是 G05 的 schema/control-plane 前置层，不是完整
  GenSym engine；
- 下一步：在 compiler/runtime 层产出可恢复 CPS task 或等价 native continuation，
  把 F59 bundle 接入单步/单分支 executor 与 MPI stealing/recovery。

## 34. F39：ConDPOR-style HB/Lockset Schedule Conflict Analysis（2026-07-26）

- 研究问题：已有 bounded-DPOR 只把同一同步对象上的 pair 当作 dependent，缺少
  ConDPOR/DPOR 系列所需的 happens-before、lockset 和普通 shared-memory conflict
  语义。完整 ConDPOR 还需要输入约束和调度约束联合求解，本阶段先补 trace-level
  冲突分类；
- 技术来源与差异：借鉴 ConDPOR 的 concolic data nondeterminism + schedule
  nondeterminism 联合视角，以及 Source-DPOR 的 source backtracking。实现只在 Python
  trace explorer 中做 SC vector-clock 和 lockset 分析，不声称 optimal、complete 或
  memory-model-parametric；
- Trace schema：`parse_schedule_trace()` 继续接受 `seq tid op object`，并扩展支持
  F40 可选发出的 `read`/`write` rows。`symcc_schedule_rt.c` 默认仍只记录 pthread
  同步点；
- HB/lockset：新增 `SchedulePoint`、`annotate_schedule()` 和 `happens_before()`。
  acquire 同步点合并对应 object 的 release clock，release 写回 clock；memory event
  记录当前 thread 持有的 lockset；
- Conflict classification：新增 `ScheduleConflict` 与
  `classify_schedule_conflicts()`。同步冲突保留未 HB ordered 的 same-object controlled
  pair；内存冲突要求 same-object、跨线程、至少一侧 write、无 HB order 且无共同 lock；
- Replay generation：`DporScheduleExplorer.propose_prefixes()` 改由 conflict
  classification 生成 source-style prefix，使 F40 的 `read/write` trace 能直接进入
  bounded replay queue，同时保持原同步点测试兼容；
- 配置：沿用 `SYMCC_DPOR`、`SYMCC_DPOR_MAX_DEPTH`、`SYMCC_DPOR_WINDOW`、
  `SYMCC_DPOR_PREFIXES` 和 `SYMCC_DPOR_PENDING`；
- 主要代码：`util/schedule_exploration.py`；
- 自动化测试：`test/test_schedule_exploration.py` 新增
  `test_happens_before_tracks_lock_release_acquire`、
  `test_memory_conflict_generates_source_backtrack_prefix` 和
  `test_lockset_suppresses_protected_memory_conflict`，覆盖 HB、unprotected memory
  conflict 和共同 lock pruning；原 LD_PRELOAD runtime replay 测试继续通过；
- 当前结果等级：I/T，SOTA 审计证据等级 E；
- 定量功能结果：`python3 test/test_schedule_exploration.py -v` 8/8 通过；`python3 -m
  py_compile util/schedule_exploration.py test/test_schedule_exploration.py` 通过；
- 已知局限：没有 vector-clock compression、source-set/sleep-set optimality、
  schedule constraint SMT encoding、输入约束与 schedule 约束联合 query、SC 完整性
  证明或 TSO/RA memory model。F39 是 G10/G13 的
  trace-analysis baseline，不是完整 ConDPOR；
- 下一步：在 F42 bounded joint replay validation 基础上，推进完整 schedule-SMT
  encoding、source/sleep set optimality 和 memory-model proof。

## 35. F40：ConDPOR-style Memory Read/Write Schedule Trace Instrumentation（2026-07-26）

- 研究问题：F39 的 HB/lockset analyzer 已能消费 `read/write` trace rows，但 runtime
  仍只记录 pthread 同步点。要推进 G10/G13，必须让 instrumented target 可选择性输出
  普通 shared-memory access evidence；
- 技术来源与差异：借鉴 ConDPOR 对 data nondeterminism 和 schedule nondeterminism 的
  联合建模。当前实现只提供可采样的 memory-access trace，不做 race detection 结论，
  不声称 source-set optimality，也不把内存冲突直接转化为 bug；
- 编译器插桩：`SYMCC_DPOR_MEMORY=1` 时，`Symbolizer::visitLoadInst()` 与
  `visitStoreInst()` 在非 atomic、非 volatile load/store 周围插入
  `_sym_notify_schedule_read/write(address, byte_length)`。byte length 来自 LLVM
  `DataLayout`，并复用已有 pointer-size lowering；
- Runtime ABI：`compiler/Runtime.*` 导入两个通知函数；
  `runtime/include/RuntimeCommon.h` 声明 ABI；QSYM/simple runtime 提供 no-op 定义，
  确保未 preload schedule runtime 时链接和普通执行保持兼容；
- Preload runtime：`util/symcc_schedule_rt.c` 在运行期
  `SYMCC_SCHEDULE_MEMORY=1` 或 `SYMCC_DPOR_MEMORY=1` 时把通知转成 `read`/`write`
  rows。`SYMCC_SCHEDULE_MEMORY_BYTES` 限制单次 load/store 最多展开多少 byte-granular
  object，默认 8、最大 4096；
- 与 F39 联动：byte-granular object rows 进入 `parse_schedule_trace()`，再由
  SC vector-clock、lockset pruning 和 source-style prefix generator 处理；
- 配置：详见 `docs/Configuration.txt` 的 `SYMCC_DPOR_MEMORY`、
  `SYMCC_SCHEDULE_MEMORY` 和 `SYMCC_SCHEDULE_MEMORY_BYTES`；
- 主要代码：`compiler/Symbolizer.cpp`、`compiler/Runtime.cpp`、`compiler/Runtime.h`、
  `runtime/include/RuntimeCommon.h`、QSYM/simple runtime、`util/symcc_schedule_rt.c`；
- 自动化测试：新增 `test/schedule_memory_trace.c`，编译期打开
  `SYMCC_DPOR_MEMORY=1`，运行期 preload `libsymcc_schedule_rt.so` 并打开
  `SYMCC_SCHEDULE_MEMORY=1`，验证 trace 中出现 `read` 和 `write` rows；
- 当前结果等级：I/T，SOTA 审计证据等级 E；
- 定量功能结果：`lit -sv build/test/schedule_memory_trace.c` 通过；`cmake --build
  build --target SymCC SymCCRuntime symcc_schedule_rt -j2` 通过；
- 已知局限：内存 trace 可能很大，当前按访问起始地址展开固定数量 byte；F43 已补
  stack/owner 过滤 baseline，但仍不做对象级 alias recovery、global/static provenance、
  采样自适应、shadow memory ownership、source/sleep set optimality 或 schedule-SMT
  联合验证；
- 下一步：在 F43 provenance filtering 基础上继续加入 object/global/static
  provenance，随后把 F42 validation 扩展为真正的 schedule-SMT encoding 与 concrete
  schedule replay oracle。

## 36. F41：ConDPOR-style Schedule Constraint Artifact Export（2026-07-26）

- 研究问题：F39/F40 已能从同步点和 byte-granular memory trace 生成 source-style replay
  prefix，但 prefix 队列只保存“要重放什么”，没有保存“为什么重放”。这不利于 benchmark
  消融、后续 schedule-SMT encoding，也不利于论文实验复现；
- 技术来源与差异：借鉴 ConDPOR 将输入 nondeterminism 与 schedule nondeterminism
  统一为可检查约束对象的思想。当前实现导出约束证据 artifact，而不是完整 optimal DPOR
  proof：它记录 SC vector-clock/HB、lockset、冲突窗口和 replay prefix 生成结果，为后续
  source/sleep sets、joint SMT validation 和 live-state search 提供稳定边界；
- Schema：新增 `symcc-schedule-constraint-v1` JSONL。每行包含 `input_id`、
  `target_branch`、`trace_digest`、`current_prefix`、bounds、event/conflict 计数、
  sync/memory conflict 计数、bounded schedulable event 摘要、bounded conflict 摘要、
  `replay_prefixes` 和 truncation 标记；
- Prefix 生成一致性：新增 `propose_source_replay_prefixes()`，由 explorer 队列和 artifact
  共同调用，避免实验记录和实际 replay 的 prefix 发生语义漂移；
- Explorer 接入：`DporScheduleExplorer(..., constraint_path=...)` 在 `observe()` 中对每条
  有效 trace 追加 artifact；默认 `constraint_path` 为空，不影响既有 fuzzing 路径；
- MPI 接入：`util/mpi_fuzzing_helper.py` 读取
  `SYMCC_SCHEDULE_CONSTRAINT_OUT=PATH`，master 在处理 worker 回传的 schedule trace
  时把 artifact 写到该 JSONL 路径，并携带当前 target branch 与 replay prefix；
- 主要代码：`util/schedule_exploration.py`、`util/mpi_fuzzing_helper.py`；
- 自动化测试：`test/test_schedule_exploration.py` 新增
  `test_schedule_constraint_artifact_matches_replay_queue`，验证 schema、trace digest、
  memory conflict 计数、artifact JSONL 写出，以及 artifact 中的 replay prefix 与
  explorer pending queue 一致；
- 当前结果等级：I/T，SOTA 审计证据等级 E；
- 定量功能结果：`python3 test/test_schedule_exploration.py -v` 9/9 通过；`python3 -m
  py_compile util/schedule_exploration.py util/mpi_fuzzing_helper.py
  test/test_schedule_exploration.py` 通过；
- 已知局限：artifact 仍是 bounded trace evidence，不是完整 schedule constraint SMT。
  F42 已把 Query IR/path roots 与 schedule prefix 做 bounded replay validation，F43 已
  补 stack/owner provenance filter baseline，但没有 source-set/sleep-set optimality、SC
  完整性证明、TSO/RA 模型、object/global/static provenance 或完整联合 SMT proof。

## 37. F42：Query IR × Schedule Artifact Joint Replay Validation（2026-07-26）

- 研究问题：F41 已保存 schedule conflict 和 replay prefix 证据，但它仍和输入约束
  分离。ConDPOR-style 系统需要回答“这个 schedule prefix 是否对应某个可达 path
  condition/query root”，否则调度探索和输入求解很难做联合消融；
- 技术来源与差异：借鉴 ConDPOR 的 data nondeterminism + schedule nondeterminism
  联合建模，但当前实现是 bounded replay validation baseline：它把 schedule artifact
  与 Query IR evaluator/solver result 对齐，不编码完整 schedule SMT，也不证明
  optimal DPOR；
- Schema：新增 `symcc-joint-schedule-query-v1`。每条记录包含 schedule trace digest、
  target branch、current/replay prefixes、conflict 计数、query id、prefix/target hash、
  query metadata、matching source、path validation status 和 joint status；
- Query 匹配：`QueryStore.validate_schedule_artifact()` 优先使用 artifact 中的
  `query_id/query_ids`。否则按 `target_branch` 与 Query IR metadata 的 `site`、
  `target_branch`、`target_site` 或 `branch` 匹配，并用 `max_queries/max_scan` 做
  上界；
- Path validation：对 pending query，bounded evaluator 检查 concrete witness 是否
  satisfied prefix roots、是否已经 satisfied prefix+target roots。对 SAT result，先用
  QueryStore 的 result normalizer 和 assignment sets（含 generator verified models），
  将 assignment patch 到 witness 后再执行 Query IR evaluation。UNSAT result 保守记录
  `path_unsat`；
- Joint status：`ready` 表示存在 replay prefix 且某个 solver/witness candidate 通过
  Query IR roots；`path_target_unsolved` 表示 witness 观察到 prefix 但 target 仍未验证；
  `path_unsat` 表示 path side 已 UNSAT；`schedule_no_replay` 表示 schedule artifact 没有
  replay prefix；其余为 `path_unknown`；
- 持久化：新增 SQLite 表 `joint_schedule_validations`，并把 canonical JSON 写到
  `$SYMCC_QUERY_STORE/joint_schedule/<hash-prefix>/<hash>.json`。可选
  `SYMCC_SCHEDULE_QUERY_VALIDATION_OUT`/`--schedule-validation-out` 追加 JSONL；
- 服务接入：`symcc_query_service.py` 新增 `--schedule-constraints`、
  `--schedule-validation-out`、`--schedule-validation-max-artifacts` 和
  `--schedule-validation-only`。MPI helper 在 `SYMCC_ASYNC_QUERY_WORKERS>0` 且
  `SYMCC_SCHEDULE_CONSTRAINT_OUT` 设置时自动把该文件传给 query service；
- 主要代码：`util/query_store.py`、`util/symcc_query_service.py`、
  `util/mpi_fuzzing_helper.py`；
- 自动化测试：`test/test_query_store.py` 新增
  `test_schedule_artifact_joint_query_validation`，覆盖 pending query 的 prefix-observed
  状态、SAT result 的 Query IR verified `ready` 状态、explicit query-id 匹配、
  no-replay 状态、JSONL 输出和 QueryStore stats；
- 当前结果等级：I/T，SOTA 审计证据等级 E；
- 定量功能结果：`python3 test/test_query_store.py -v` 12/12 通过；`python3 -m
  py_compile util/query_store.py util/symcc_query_service.py util/mpi_fuzzing_helper.py
  test/test_query_store.py` 通过；
- 已知局限：仍没有真正的 schedule-SMT encoding、schedule equivalence proof、
  source/sleep set optimality、SC/TSO/RA memory-model proof、跨 worker live-state
  validation 或 concrete schedule replay oracle。`ready` 只表示“输入侧 Query IR 已验证
  且存在 bounded schedule replay prefix”，不是完整 ConDPOR 可达性定理。

## 38. F43：Schedule Memory Provenance Filtering（2026-07-26）

- 研究问题：F40 的 `SYMCC_DPOR_MEMORY` 可以把普通 load/store 转成 byte-granular
  schedule trace，但真实程序会产生大量明显 thread-local 访问。F41/F42 已经把 trace
  evidence 接入 artifact 与 Query IR validation，因此下一步需要在 runtime 侧降低噪声，
  否则 benchmark 的 trace size、DPOR window 和 JSONL artifact 都会被无共享证据的内存
  rows 淹没；
- 技术来源与差异：借鉴 ConDPOR/data-race 工具常用的 ownership/provenance pruning
  思想，但当前实现是 conservative engineering filter，不是 sound alias analysis。默认
  关闭，只有显式配置后才改变 memory row 输出；
- Stack filter：`SYMCC_SCHEDULE_MEMORY_FILTER=stack` 或
  `SYMCC_SCHEDULE_MEMORY_STACK=1` 时，preload runtime 使用
  `pthread_getattr_np(pthread_self())` 与 `pthread_attr_getstack()` lazy cache 当前线程栈
  范围，跳过落在当前线程栈范围内的 `_sym_notify_schedule_read/write` byte rows；
- Dynamic owner filter：`SYMCC_SCHEDULE_MEMORY_FILTER=owner/shared/dynamic` 或
  `SYMCC_SCHEDULE_MEMORY_OWNER=1` 时，runtime 维护 bounded byte-address owner table。
  首次同线程访问只记录 owner/last-op，不写 trace；同一 owner 的重复访问继续被压缩；
  第一次跨逻辑线程访问同一 byte 时标记为 shared，并在至少一侧为 write 时输出一条
  compressed prior-access row 加当前 row，使 Python HB/lockset analyzer 仍能看到可生成
  replay prefix 的 read/write 证据；
- Bounds：`SYMCC_SCHEDULE_MEMORY_OWNERS` 控制 owner table 大小，默认 65536、最大
  1048576。probe window 命中失败时回退为直接记录当前访问，避免因过滤器容量不足
  静默丢失共享证据；
- Replay 兼容性：真实当前 memory row 仍经过 `controlled_event()` 和 logical-thread-id
  prefix gate；compressed prior-access row 只作为 evidence 写出，不参与 gate，因为它
  代表已经发生的首次 owner-side access；
- 配置：详见 `docs/Configuration.txt` 的 `SYMCC_SCHEDULE_MEMORY_FILTER`、
  `SYMCC_SCHEDULE_MEMORY_STACK`、`SYMCC_SCHEDULE_MEMORY_OWNER` 和
  `SYMCC_SCHEDULE_MEMORY_OWNERS`；
- 主要代码：`util/symcc_schedule_rt.c`；
- 自动化测试：`test/test_schedule_exploration.py` 新增两个 runtime tests。第一个手动
  调用 `_sym_notify_schedule_read/write`，验证 `stack` filter 不记录当前线程栈地址但
  保留 global 地址；第二个用两个 pthread 对同一 global byte 做 write/read，验证
  `owner` filter 在首次跨线程共享时输出 compressed write/read transition；
- 当前结果等级：I/T，SOTA 审计证据等级 E；
- 定量功能结果：`python3 test/test_schedule_exploration.py -v` 11/11 通过；
  `cmake --build build --target symcc_schedule_rt -j2` 通过；`lit -sv
  build/test/schedule_memory_trace.c` 通过；全量 `cmake --build build --target check
  -j2` 87/87 通过；
- 已知局限：owner table 以运行时地址为 key，不做 object/field identity、heap lifetime、
  ASLR-stable global id、static LLVM provenance、alias recovery、sampling controller 或
  memory-model proof；跨线程首次共享前的历史访问是 compressed evidence，不是完整
  trace reconstruction。

## 39. F44：Schedule Memory Provenance Tags and Artifact Propagation（2026-07-26）

- 研究问题：F43 能减少明显 thread-local memory rows，但后续 benchmark 仍需要知道
  进入 DPOR analyzer 的 memory rows 大致来自 stack、heap、module/static mapping 还是
  anonymous memory。否则 trace reduction、object provenance、schedule-window tuning 和
  Query IR joint validation 很难做分层消融；
- 技术来源与差异：借鉴并发测试与 race detector 中的 memory-region provenance
  metadata。当前实现只追加 bounded evidence tag，不建立 sound object identity，也不
  把 provenance tag 用作 correctness proof；
- Trace tag：`SYMCC_SCHEDULE_MEMORY_PROVENANCE=1` 时，`symcc_schedule_rt.c` 对
  memory read/write row 追加兼容第五列，如 `prov=stack`、`prov=heap`、
  `prov=module`、`prov=anonymous`、`prov=system` 或 `prov=unknown`。旧 parser 仍可按
  前四列读取；
- Runtime classification：stack 仍来自 lazy cached pthread stack bounds；非 stack
  地址用 bounded `/proc/self/maps` lookup 分类。`SYMCC_SCHEDULE_MEMORY_FILTER=tag`、
  `tags` 或 `provenance` 也可打开 tag 输出；
- Python parser：`ScheduleEvent` 新增 `tags` 字段；`parse_schedule_trace()` 保存第 5
  至第 12 个 token；`schedule_trace_digest()` 把 tags 纳入 digest，保证带 provenance
  和不带 provenance 的 trace artifact 可区分；
- Artifact propagation：`schedule_constraint_artifact()` 新增 `provenance_counts`，
  同时每个 event mapping 带可选 `tags`；`QueryStore.validate_schedule_artifact()`
  保留 `provenance_counts` 并写入 `symcc-joint-schedule-query-v1`；
- 主要代码：`util/symcc_schedule_rt.c`、`util/schedule_exploration.py`、
  `util/query_store.py`；
- 自动化测试：`test/test_schedule_exploration.py` 新增 parser/artifact tag 测试和
  runtime provenance tag 测试，验证 local stack row 带 `prov=stack`，global row 至少带
  一个 `prov=` tag；`test/test_query_store.py` 验证 joint validation 不丢失
  `provenance_counts`；
- 当前结果等级：I/T，SOTA 审计证据等级 E；
- 定量功能结果：`python3 test/test_schedule_exploration.py -v` 13/13 通过；
  `python3 test/test_query_store.py -v` 12/12 通过；`lit -sv
  build/test/schedule_memory_trace.c` 通过；Python unittest sweep 24/24 通过；
  全量 `cmake --build build --target check -j2` 87/87 通过；`python3 -m py_compile
  util/schedule_exploration.py util/query_store.py test/test_schedule_exploration.py
  test/test_query_store.py` 通过；
- 已知局限：`prov=module` 仍是 process mapping 级别，不是 compiler-emitted
  global/static object id；`/proc/self/maps` lookup 是可选慢路径，适合 profiling 和
  benchmark evidence，不适合默认高吞吐 fuzzing；尚未建 heap allocation lifetime、
  object/field identity、ASLR-stable global ids 或 alias-aware memory partitions。

## 40. F45：Bounded SC Schedule-SMT Replay-Prefix Encoding（2026-07-27）

- 研究问题：F41 已导出 schedule conflict/replay-prefix evidence，F42 已把该 evidence
  与 Query IR/result 做记录级联合验证，但 replay prefix 本身还不是求解器可检查的
  调度约束。需要一个稳定、可复现、能由 Z3 等 SMT-LIB2 solver 直接解析的中间层，
  同时不能把缺失 enabledness、read-from 和 path semantics 的工程子集误称为完整
  ConDPOR proof；
- 技术来源与差异：借鉴 ConDPOR 对 data/schedule nondeterminism 进行约束化建模的
  思路，以及 bounded model checking 常用的 event-position encoding。当前实现是
  SC structural-admissibility baseline，不是 sound/complete/optimal DPOR：每条 query
  证明或否定的是一个有界 partial-order skeleton，而不是具体程序状态中的调度可达性；
- Schema：新增 `symcc-schedule-smt-v1` JSONL。顶层记录 input/branch/trace identity、
  SC memory-model 标签、encoding/version、hard/optional/not-encoded 语义清单、线程和
  event 统计、bounds、candidate/query/drop 计数、truncation 状态及 artifact SHA-256；
  公共部分保存 `base_smt2`/hash 和可直接运行的 `incremental_smt2`/hash，每个 query
  保存 replay prefix、source conflict、PO 计数、`delta_smt2`/hash 及物化后独立
  query 的 hash；
- Event-position encoding：对 bounded schedulable events 建立 `pos_i : Int`，
  约束 `0 <= pos_i < N` 与 `distinct(pos_0...pos_N)`，从而得到事件位置排列；同一
  logical thread 的相邻 modeled events 加入命名 `po_i_j` 程序序约束；
- Prefix/conflict encoding：replay prefix 中某 thread 的第 k 次选择直接绑定该线程
  的第 k 个 modeled event，避免对同线程全部事件构造冗余析取；同时加入
  `conflict_reversal`，要求生成该 prefix
  的 source conflict 右端事件先于左端事件。这个显式反序避免“prefix 字面满足但目标
  conflict 没有真正翻转”的弱约束；
- HB 语义边界：vector-clock HB 从包含 unlock/signal 等 release event 的完整 trace
  计算，但在 SMT 中编码为 `observed_hb_i_j` Boolean assumption implication，默认不
  强制。原因是观测 execution 的动态 synchronization edge 可能在替代 schedule 中
  改变；每条 query 直接列出 `observed_hb_assumptions` 名称，消费者可在诊断观测
  等价性时选择 `check-sat-assuming`，结构候选筛选则只使用 schedule-invariant PO
  hard constraints；
- Incremental context reuse：公共 declaration、event bounds、permutation、PO 与
  observed-HB guards 只生成一次 `base_smt2`；每个候选仅保存 `delta_smt2`。artifact
  同时提供 `incremental_smt2`，用 `push/check-sat/pop` 在同一 solver context 中依次
  检查候选，并提供 `materialize_schedule_smt_query()` 在需要时拼出独立 query；
- Bounds 与可观察失败：`SYMCC_SCHEDULE_SMT_MAX_EVENTS` 默认 128、范围 2--512，
  `SYMCC_SCHEDULE_SMT_MAX_QUERIES` 默认 64、范围 1--512。
  source conflict endpoint 超出 modeled event window 时不生成残缺 query，而是增加
  `dropped_event_bound_count`；超过 query evidence budget 时增加
  `dropped_query_limit_count`。二者汇总到 `dropped_query_count` 并设置相应
  truncation flags，但 query budget 不改变 explorer 的 replay queue；
- MPI 接入：`DporScheduleExplorer` 新增 `smt_path/smt_max_events`，MPI master 读取
  `SYMCC_SCHEDULE_SMT_OUT`、`SYMCC_SCHEDULE_SMT_MAX_EVENTS` 与
  `SYMCC_SCHEDULE_SMT_MAX_QUERIES`。默认输出路径为空，
  因而既有 fuzzing 热路径不增加 SMT artifact 体积；
- 主要代码：`util/schedule_exploration.py`、`util/mpi_fuzzing_helper.py`；
- 自动化测试：`test/test_schedule_exploration.py` 覆盖 deterministic artifact hash、
  event bounds/permutation、program order、thread-prefix、conflict reversal、完整
  trace HB assumption、shared/incremental context、JSONL explorer export、
  event-window truncation 与 per-trace query budget；测试通过
  `ctypes` 调用系统 `libz3` 的 `Z3_eval_smtlib2_string`，实际解析并求解生成的
  SMT-LIB2，结果为 SAT；
- 当前结果等级：I/T，SOTA 审计证据等级 E；
- 定量功能结果：`python3 test/test_schedule_exploration.py -v` 18/18 通过；
  `python3 -m py_compile util/schedule_exploration.py util/mpi_fuzzing_helper.py
  test/test_schedule_exploration.py` 通过；生成 query 已由系统 libz3 真实 parse/solve；
  Python unittest discover 169/169 通过；`cmake --build build --target check -j2`
  87/87 通过；`git diff --check` 通过；
- Artifact 体积压力检查：对 128 个 same-object write events、4 个 logical threads、
  256 个 source candidates 的确定性合成 trace，原始“每候选复制完整 query”JSON 为
  65,752,864 bytes；shared base + exact next-event delta + 默认 64-query evidence
  budget 后为 558,547 bytes，降低约 99.15%。这是 formula-volume 工程测量，不是
  coverage/throughput benchmark，因而不据此升级为 R 级证据；
- 已知局限：hard constraints 尚未编码 runtime enabledness、mutex ownership/
  condition wakeup、read-from/coherence、alias/object equivalence、Query IR path roots
  或 TSO/RA axioms；SAT 只表示当前 SC partial-order skeleton 结构可容纳候选，
  UNSAT 只对已编码硬约束有效。下一步应把 Query IR expression roots 与调度状态转移、
  object identity 和 concrete replay oracle 纳入同一 solver query，再讨论 SC 的
  soundness/completeness，之后才能扩展到 TSO/RA 与 optimal DPOR。

## 41. F46：Mutex/RWLock Lifecycle-State Schedule-SMT v2（2026-07-27）

- 研究问题：F45 的 SC event-position model 可以判断 replay prefix、程序序和目标
  conflict reversal 是否结构相容，但它不知道一次成功 lock 已经拥有对象，也不知道
  unlock 之前另一个不兼容 acquire 不能成功。于是某些结构 SAT model 仍可能包含
  mutex/rwlock 临界区重叠。F46 的目标是利用 preload 已经记录的 outcome/release
  evidence 补上有界同步状态，同时不因 trace 截断产生错误 UNSAT；
- Runtime 证据语义：`symcc_schedule_rt.c` 在 pthread 调用前记录受控
  `lock/trylock/rdlock/wrlock`，调用返回后记录 `acquire` 或 `*_fail`，释放调用前记录
  `unlock/rwunlock`。F46 不修改该 ABI，而是在 Python artifact 层按
  `(logical_tid, object)` 配对 attempt、outcome 和 release；
- Schema 演进：当前 exporter 输出 `symcc-schedule-smt-v2`，encoding 标记为
  `bounded-sc-sync-state-v2`。`materialize_schedule_smt_query()` 同时接受 v1/v2，
  保留已经产生的 F45 artifact 的物化兼容性；
- 双位置空间：F45 的 `pos_i` 继续表示可被 prefix 选择的 lock/memory schedule
  points；F46 为 attempt/outcome/release lifecycle 建立 `sync_ord_i : Int` 的独立
  bounded permutation，并施加同线程 lifecycle program order。所有同时进入两个
  空间的受控 lock attempts 用 pairwise order-equivalence 连接，避免 prefix 顺序和
  同步状态顺序各自形成互不相干的 model；
- Critical-section recovery：成功 `acquire` 继承其 pending attempt 的 mode：
  mutex/trylock 为 `mutex_write`，rdlock 为 `rw_read`，wrlock 为 `rw_write`；
  随后的匹配 `unlock/rwunlock` 关闭区间。artifact 的 `sync_state.sections` 保存
  attempt/acquire/release seq、lifecycle index 和 SMT variable name，便于实验复核；
- Hard enabledness subset：只有 acquire 与 release 都位于 bounded lifecycle window
  的完整区间参与 hard constraints。同对象、跨线程且至少一个区间不是 `rw_read` 时，
  编码 `release_A < acquire_B OR release_B < acquire_A`；两个 rwlock reader 允许
  重叠。open、unmatched 或因 window 截断的区间只计数，不加入 exclusion，从而避免
  用不完整 trace evidence 证明伪 UNSAT；
- Trylock failure：`trylock_fail` 的“attempt 被某个不兼容完整区间覆盖”编码为
  `sync_trylock_busy_i` optional assumption。默认 structural replay query 不断言它；
  需要诊断观测一致性时，消费者可以显式 assert/`check-sat-assuming`。metadata 保存
  failure 对应的 thread/object/seq/SMT variable、assumption name 和候选区间数；
- HB/lockset 修复：`rwunlock` 加入 `RELEASE_OPS`。此前 Python analyzer 会在
  rwlock 释放后继续把对象保留在 held lockset，可能错误抑制后续 memory conflict；
  新回归验证释放后的访问不再继承该 lockset；
- Bounds：同步 lifecycle window 取 `3 * max_events` 并封顶 512，用于容纳常见的
  attempt/outcome/release 三元组。`sync_state` 明确记录原始/建模 lifecycle 数、
  complete/open/pending/unmatched 数、order-link/exclusion 数和 truncation；
- 配置与 MPI 接入：新增 `SYMCC_SCHEDULE_SMT_SYNC_STATE=0/1`，默认 1。MPI master
  把该值传入 `DporScheduleExplorer.smt_sync_state`；设为 0 时保留 F45 的结构模型，
  但仍输出 v2 schema 并在 `not_encoded` 标注 ownership state 缺失；
- 主要代码：`util/schedule_exploration.py`、`util/mpi_fuzzing_helper.py`；
- 自动化测试：`test/test_schedule_exploration.py` 新增五类验证：
  1）两个完整 mutex 区间恢复为一个 exclusion，人工强制交叠后系统 libz3 返回
  UNSAT，而正常 replay query 为 SAT；2）两个 rdlock reader 人工交叠仍为 SAT；
  3）trylock busy assumption 在合理覆盖下 SAT，强制 attempt 位于 release 后则
  UNSAT；4）`rwunlock` 后的 memory access 不再被旧 lockset 错误保护；5）关闭
  sync-state 时不生成 `sync_ord_*`，且 v1 artifact 仍可物化。真实 preload
  mutex replay 测试也会把 runtime trace 转成 v2 state，验证至少两个完整区间、
  exclusion constraint 和 base SMT SAT；
- 当前结果等级：I/T，SOTA 审计证据等级 E；
- 定量功能结果：`python3 test/test_schedule_exploration.py -v` 23/23 通过；
  `python3 -m py_compile util/schedule_exploration.py util/mpi_fuzzing_helper.py
  test/test_schedule_exploration.py` 通过；Python unittest discover 174/174 通过；
  `cmake --build build --target check -j2` 87/87 通过；定向
  `lit -sv build/test/schedule_memory_trace.c` 通过；`git diff --check` 通过；
- Formula-volume 压力检查：确定性构造 64 个完整 mutex sections、4 个 logical
  threads、同一 object，恢复 1536 个 exclusion constraints；artifact JSON
  1,214,525 bytes，生成约 8.8 ms，base SMT 567,842 bytes，系统 libz3 单次
  parse/solve 为 SAT、约 0.55 s。该结果用于确认默认 bounds 下公式规模，不作为
  coverage/throughput 的 R 级实验结论；
- 已知局限：这是 complete-section nonoverlap baseline，不是完整 pthread operational
  semantics。尚未编码 condition wait 的 mutex 释放/重获和 wakeup choice、join/create
  enabledness、mutex type/recursive/error-check、rwlock upgrade/fairness、spurious
  wakeup、取消/异常退出、memory read-from/coherence、对象跨运行稳定 identity，亦未
  与 Query IR path roots 在同一 solver 中求解。只有 hard exclusion 子集的 UNSAT
  可按该子集解释，不能宣称 SC sound/complete 或 ConDPOR optimal。

## 42. F47：Condition-Variable Operational Schedule-SMT v3（2026-07-27）

- 研究问题：`pthread_cond_wait(cond, mutex)` 不是普通阻塞事件。调用者必须在进入
  wait 时原子地释放关联 mutex，并在返回前重新获得它。F46 只看到 condition
  object 上的 `wait/wake`，因此会错误地把 wait 前持有的 mutex 延伸到整个阻塞区间，
  既可能抑制真实 memory conflict，也无法判断某个 `signal/broadcast` 是否位于可解释
  唤醒的 release/reacquire 窗口。F47 把这段隐式 pthread 状态变化显式化；
- Runtime trace ABI：`symcc_schedule_rt.c` 在受控 `wait` 后、进入 libc wait 前记录
  `wait_mutex_release <mutex>`；正常返回或 `ETIMEDOUT` 后记录
  `wait_mutex_acquire <mutex>`，再分别记录 `wake` 或 `wait_timeout <cond>`。其他错误
  记录 `wait_fail`，不虚构 mutex 已重获。该设计保留 condition 和 mutex 两种 object
  identity，而不是把二者拼成不可分析的字符串；
- HB/lockset 语义：`annotate_schedule()` 把 `wait_mutex_release` 当作 mutex release，
  更新 release clock 并移出 held lockset；把 `wait_mutex_acquire` 当作 mutex acquire，
  合并 release clock 并恢复 held lockset。成功 `wake` 不会无条件合并 condition
  上时间最近的 `signal/broadcast`：该 signal 可能已丢失，wake 也可能是伪唤醒；
  因而 signal-to-wake 因果只由后述 optional witness 表达，避免错误 HB pruning。
  wait 阻塞区内也不再错误携带 mutex lockset；
- Schema 演进：新 exporter 输出 `symcc-schedule-smt-v3`，encoding 为
  `bounded-sc-lock-condition-state-v3`；`materialize_schedule_smt_query()` 继续接受
  v1/v2，避免已有实验 artifact 失去物化能力。`SYMCC_SCHEDULE_SMT_SYNC_STATE=0`
  仍可关闭全部 lifecycle-state 扩展，但输出 schema 保持 v3；
- Wait recovery：Python 层按 logical thread 关联
  `wait -> wait_mutex_release -> wait_mutex_acquire -> wake/timeout/fail`。release 关闭
  wait 前的 mutex critical section，reacquire 建立 origin 为
  `condition_reacquire` 的新 section，随后由普通 `unlock` 或下一次 wait release
  关闭。循环谓词导致的多次 wait 因而形成连续而不重叠的所有权区间；
- 双位置空间连接：condition `wait` 是可被 replay prefix 选择的 `pos_*` event，
  同时也属于 `sync_ord_*` lifecycle。v3 将所有同时出现在两种空间的 controlled
  lifecycle event 做 pairwise order-equivalence，不再只连接 lock attempts；
- Wake witness：每个完整成功 wait 声明 optional Boolean
  `cond_wake_signal_i` 和 integer `cond_witness_i`。断言该 assumption 时，witness
  必须选择相同 condition 上的一次 `signal` 或 `broadcast`，且严格满足
  `wait_mutex_release < witness < wait_mutex_acquire`。没有候选时 assumption 推导
  `false`，但默认 base query 仍允许 POSIX 伪唤醒；
- Signal/broadcast 基数：同一次 plain `signal` 不能同时成为两个已断言成功 wait 的
  witness；SMT 中对共享 signal candidate 加条件化 one-to-one 约束。
  `broadcast` candidate 可被多个 wait 复用。`wait_timeout` 不创建 wake witness，
  但仍恢复 mutex ownership；
- 不完整证据策略：只有 release、reacquire 和 outcome 都位于 bounded lifecycle
  window 的 wait 才产生 wake witness。缺失 marker/outcome、截断 wait 和 unmatched
  event 只进入 metadata，不生成会造成假 UNSAT 的 hard constraint。
  `sync_state.condition_waits` 保存 condition/mutex、四阶段 seq/index/SMT variable、
  完整性、候选和 assumption；同时统计 complete/success/timeout/unmatched 及 signal
  uniqueness 数量；
- 主要代码：`util/symcc_schedule_rt.c`、`util/schedule_exploration.py`；
- 自动化测试：`test/test_schedule_exploration.py` 增加四组机制验证：
  1）单 wait 的 mutex split 恢复两个 section，合法 signal witness 为 SAT，强制
  signal 位于 reacquire 后为 UNSAT；2）两个 wake 同时选择一个 signal 为 UNSAT，
  改为 broadcast 后为 SAT；3）timedwait 超时恢复 mutex section 但不生成 signal
  assumption；4）编译并通过 `LD_PRELOAD` 运行真实 pthread condition 程序，检查
  四阶段 trace、完整 section、signal candidate 和 libz3 SAT；5）运行真实
  `pthread_cond_timedwait` 超时路径，确认 reacquire marker、timeout outcome 和两个
  mutex sections；
- 当前结果等级：I/T，SOTA 审计证据等级 E。这里的创新点是把真实 runtime
  wait/mutex evidence、临界区恢复和可开关唤醒因果统一在可增量复用的 schedule-SMT
  context 中；尚不能据此声称完整 ConDPOR；
- 定量功能结果：`python3 test/test_schedule_exploration.py -v` 29/29 通过；
  `python3 -m py_compile util/schedule_exploration.py
  test/test_schedule_exploration.py` 与 preload runtime 独立编译通过；全部新增
  SAT/UNSAT 判据均由系统 libz3 实际 parse/solve，不以字符串匹配代替求解；
- 完整回归：Python unittest discover 180/180 通过；
  `cmake --build build --target check -j2` 87/87 通过；
  `git diff --check` 通过；
- Formula-volume 压力检查：构造 32 个 waiters、一个 broadcast、129 个 lifecycle
  events，并同时断言 32 个 wake assumptions；artifact JSON 为 244,924 bytes，
  base SMT 为 82,374 bytes，生成约 6.6 ms，系统 libz3 返回 SAT、约 0.99 s。
  这是公式规模工程测量，不是 coverage/throughput 的 R 级 benchmark；
- 已知局限：runtime marker 位于 libc wait 调用边界，尚未证明与不同 libc 的内部
  cancellation/error path 等价；伪唤醒只通过“不默认断言 witness”保留，未建模其
  原因；尚未编码 join/create enabledness、mutex type/recursive/error-check、
  rwlock fairness/upgrade、cancellation cleanup、read-from/coherence、跨运行稳定
  object identity、weak-memory axioms，亦未把 Query IR path roots 与 schedule
  transition 放进同一求解上下文。v3 的 UNSAT 只能解释为已编码有界子集不可满足。

## 43. F48：Thread Create/Join Operational Schedule-SMT v4（2026-07-27）

- 研究问题：F47 以前的 runtime 在成功 `pthread_create` 后把调用者提供的
  `pthread_t *` 存储地址记为 `create` object，而 `pthread_join` 使用 opaque
  `pthread_t` 值作为 object；两者通常不相等，也随进程地址和 libc 表示变化。
  trace 因而无法回答某个 join 等待哪一个 logical child，也没有 thread termination
  marker，无法建立 create/start 或 exit/join 的 operational enabledness；
- 稳定 identity：runtime 在 create 前分配单调 logical child id，并以
  `0x<logical-id>` 统一标识 `create`、`create_success/create_fail`、
  `thread_start/thread_exit`、`join` 和 `join_success/join_fail`。SMT identity 不再
  依赖 ASLR、调用者局部变量地址或 opaque pthread handle；
- Create 边界：pre-call `create` marker 必定早于子线程执行；调用返回后记录
  `create_success` 或 `create_fail`。子线程完全可能在父线程获得 success outcome
  之前进入 `thread_start`，因此 v4 只硬约束 `create < thread_start`，不错误要求
  `create_success < thread_start`；
- Exit 完整性：trampoline 在调用用户 start routine 前压入 pthread cleanup handler。
  正常 return 通过 `pthread_cleanup_pop(1)` 执行它，直接 `pthread_exit` 和
  cancellation 展开 cleanup stack 时也执行它，因此 `thread_exit` 位于用户 cleanup
  之后、线程真正终止之前。该 marker 捕获子线程完成时的 vector-clock frontier；
- Join identity registry：runtime 用固定 4096-entry 表保存
  `(pthread_t handle, logical child id)`，查找使用 `pthread_equal` 并由 atomic flag
  保护。mapped join 以 logical id 记录，成功返回后释放表项；查找失败保留实际 handle
  且标 `mapped=0`，Python 不将其猜测为任何 child。这里记录的是 F48 当时状态；
  detached retirement、create/register race 与 join cancellation 后续由 F55 修复；
- Schema 演进：exporter 输出 `symcc-schedule-smt-v4`，encoding 为
  `bounded-sc-lock-condition-thread-state-v4`；materializer 继续接受 v1/v2/v3。
  `sync_state.semantics` 升级为 `lock-condition-thread-operational-state-v3`；
- Lifecycle recovery：bounded trace 按 stable object 恢复 parent/create outcome、
  child start/exit、joiner/join outcome，并验证 start/exit 的 event tid 与 object
  logical id 一致。metadata 保存各阶段 seq、`sync_ord_*` variable、mapped flag、
  identity consistency、complete 状态和 unmatched 计数；
- Hard operational subset：有 create 与一致 child start 时加入
  `create < thread_start`；mapped successful join 且存在目标 exit 时加入
  `thread_exit < join_success`。join attempt 可以在 exit 前发生并阻塞；create/join
  failure、unmapped handle、缺失 exit、identity mismatch 和 window truncation只计数，
  不制造 completion constraint，保持 incomplete evidence 下的保守 SAT；
- HB/DPOR：`annotate_schedule()` 在 child `thread_start` 合并 parent create clock，
  在 parent `join_success` 合并 target exit clock。因此 create 前的父线程访问 HB
  child，child 退出前的访问 HB join 后的父线程访问；已 join 的同地址访问不再被
  错误分类为可交换 memory conflict；
- Bounds：thread lifecycle 使一次受控 join 最多伴随 create/outcome/start/exit/join
  outcome 等证据，lifecycle window 从 `3 * max_events` 提高到
  `5 * max_events`，仍封顶 512。open/unmatched/truncated 统计保留在 artifact；
- 主要代码：`util/symcc_schedule_rt.c`、`util/schedule_exploration.py`；
- 自动化测试：`test/test_schedule_exploration.py` 新增四类验证：
  1）child start 早于 create return 且 join attempt 早于 exit 为 SAT；
  2）强制 start 早于 create 或 join_success 早于 exit 均为 UNSAT；
  3）create failure、unmapped join 和缺失 exit 不生成错误 completion constraint；
  4）真实 preload 目标由 worker 调用 `pthread_exit`，验证六类事件共享同一 stable
  object、mapped tags、完整 thread/join metadata 和 libz3 SAT。另有 vector-clock
  回归证明 joined memory conflict 被 HB 抑制；
- 当前结果等级：I/T，SOTA 审计证据等级 E。`python3
  test/test_schedule_exploration.py -v` 33/33 通过；Python/C 严格编译与系统 libz3
  SAT/UNSAT 求解均通过；
- 完整回归：Python unittest discover 184/184 通过；
  `cmake --build build --target check -j2` 87/87 通过；
  `git diff --check` 通过；
- Formula-volume 压力结果：64 个完整 threads 与 joins 产生 384 个 lifecycle
  events、64 个 spawn constraints 和 64 个 join completion constraints。artifact
  JSON 为 1,047,123 bytes，base SMT 为 468,265 bytes，生成约 15.8 ms，系统 libz3
  返回 SAT但耗时约 13.5 s。该结果暴露 `sync_ord_*` 全排列在高线程数下的主要瓶颈，
  不是性能收益结论；后续应研究 partial-order clock、interval order 或分层 context；
- F48 当时局限：4096-entry registry 对 detached threads 不回收，join cancellation
  只留下无 outcome evidence；这些项已由 F55 的预留/绑定/退休状态机和
  `join_cancelled` marker 修复。仍未建模 double join、detach/join 未定义竞态、
  process-shared synchronization、fork 后线程状态、线程优先级或公平性。
  create/join hard constraints 仍处于 bounded SC total-order context，尚无
  sound/complete/optimal DPOR 证明，也尚未与 Query IR path roots、read-from/coherence
  和 weak-memory axioms联合求解。v4 UNSAT 只对已编码 operational subset 有效。

## 44. F49：Lifecycle Partial-Order / Linear-Extension Schedule-SMT v5（2026-07-27）

- 研究问题：F48 为 384 个 lifecycle events 同时声明整数位置范围和全局
  `distinct`，即使 operational constraints 只需要比较少量先后关系，也强制 Z3
  构造一个完整排列。64-thread 压力样例的单次 SAT 求解约 13.5 s，表明瓶颈来自
  lifecycle 全排列，而不是 create/join 约束本身；
- 约束语言审计：当前 `sync_ord_*` 只参与严格先后边、区间不相交的二选一方向、
  condition witness 候选选择，以及 controlled event 与 `pos_*` 的相对次序连接。
  它不使用 rank 加减、相邻位置、绝对槽位或“恰好第 k 个 lifecycle event”等性质。
  因此任一满足赋值定义一个无环严格部分序；对该图做拓扑排序可获得保持所有严格边
  和二选一方向的线性扩展。反向上，任何旧 permutation 模型显然也是 partial 模型，
  所以在当前已编码语言内两种模式等可满足；
- 严格连接修复：旧连接
  `(= (< pos_a pos_b) (< sync_a sync_b))` 在去掉 `sync_ord_*` 的全局
  `distinct` 后允许两者 rank 相等，从而逃逸受控事件顺序。v5 改为
  `(or (and (< pos_a pos_b) (< sync_a sync_b))
       (and (< pos_b pos_a) (< sync_b sync_a)))`，
  同时禁止相等并保持两个位置空间的相对方向；
- 双层次序编码：replay-visible `pos_*` 仍是 `0..N-1` 的全排列，因为 prefix slot
  和 conflict reversal 必须引用精确事件位置；只有内部 lifecycle `sync_ord_*`
  默认改成无界整数 rank，不再生成逐事件 bounds 和全局 `distinct`。求解器得到的
  lifecycle partial model 可通过线性扩展解释为某个满足同一约束的 SC 总序；
- 双模式与消融：新增
  `SYMCC_SCHEDULE_SMT_ORDER_ENCODING=partial|permutation`，默认 `partial`；
  `permutation` 保留 v4 风格 bounds + all-different，作为差分验证、回归定位和论文
  消融基线。MPI master 将该设置传入 `DporScheduleExplorer`，未知值保守回退
  `partial`；
- Schema 与可复现性：exporter 输出 `symcc-schedule-smt-v5`，encoding 为
  `bounded-sc-partial-order-lock-condition-thread-state-v5` 或对应
  `permutation` 变体；materializer 继续接受 v1--v4。artifact 顶层记录
  `lifecycle_order_encoding`，`sync_state` 记录 `linear_extension_semantics`、
  `order_bound_constraint_count` 和 `order_distinct_constraint_count`，使实验不能在
  未知编码下混合统计；
- 自动化验证：`test_schedule_exploration.py` 新增相同 thread lifecycle trace 的
  partial/permutation 差分求解。两者对合法 join-before-exit 阻塞轨迹均为 SAT，
  对人工强制 start-before-create 均为 UNSAT；另一个受控 wait 顺序测试强制两个
  `sync_ord_*` 相等并验证 UNSAT，专门防止弱 order-link 回归。原有 mutex/rwlock、
  condition、thread 与真实 preload 测试继续覆盖默认 partial 模式；
- 定量功能结果：定向 schedule suite 35/35 通过。对相同 64-thread、384-event
  deterministic trace，partial artifact 为 1,219,136 bytes，base SMT 为
  554,560 bytes，生成约 17.0 ms，系统 libz3 单次 SAT 约 173.9 ms；permutation
  artifact 为 1,292,095 bytes，base SMT 为 590,652 bytes，生成约 15.0 ms，SAT
  约 8178.5 ms。当前样例上求解时间约缩短 47 倍，base formula 约缩小 6.1%；
  这是单机单次 B 级工程压力测量，不是公开 benchmark 的 R 级性能结论；
- 当前结果等级：I/T/B，SOTA 审计证据等级 E。创新性在于对真实 pthread lifecycle
  operational subset 先审计可观察约束语言，再利用线性扩展保持 SAT/UNSAT，同时
  保留 replay event 的精确排列和可切换旧编码，而不是无条件把所有调度变量改成
  不可解释的松弛 rank；
- 可信边界：等可满足性论证只覆盖当前正向严格序原子及其布尔组合。未来若加入
  rank distance、adjacency、cardinality、绝对 slot 或优化目标，必须重新证明或
  自动切回 permutation。当前没有 machine-checked proof，也没有从部分序模型输出
  具体拓扑排序 replay；pairwise controlled order links 和 section exclusions 仍可
  二次增长。这里列出的 detach/cancellation completion 与二次 exclusion 已分别由
  F55/F53 完成；read-from/coherence、TSO/RA、Query IR path roots 联合求解以及
  sound/complete/optimal DPOR 仍未实现。

## 45. F50：Scaled-Anchor Sparse Lifecycle Order Links（2026-07-27）

- 研究问题：F49 已移除 lifecycle bounds/all-different，但每两个受控 lifecycle
  events 仍生成一个 `pos_*`/`sync_ord_*` 相对顺序连接。若有 C 个受控事件，公式
  需要 `C(C-1)/2` 个四重严格比较；64-thread create/join trace 的 64 个受控 join
  因而产生 2016 个连接，仍占 base SMT 的主要体积；
- 线性编码：v6 partial 模式对第 i 个受控 lifecycle event 只生成一个
  `sync_ord_i = (L+1) * pos_j`，其中 L 是 bounded lifecycle event 数。
  `pos_j` 的全排列直接保证所有 anchors 严格有序，连接数量从 O(C²) 降为 O(C)；
- 槽位充分性：相邻 `pos_*` anchors 的 rank 差至少为 `L+1`，中间有 L 个可用整数。
  整个窗口最多只有 L 个 lifecycle events，因此任何原 partial model 的非受控
  outcome/release/start/exit 均可按拓扑序嵌入 anchors 之间；首 anchor 前和末 anchor
  后使用无界负/正整数。该构造保持 F49 当前严格顺序语言的等可满足性；
- 兼容与消融：`SYMCC_SCHEDULE_SMT_ORDER_ENCODING=permutation` 继续使用 bounded
  all-different 与旧 pairwise links，不改变 legacy 对拍含义。metadata 新增
  `order_link_encoding=scaled-anchor|pairwise`、实际 link count、semantic pair count、
  `controlled_anchor_count` 和 `anchor_stride`；
- Schema：当前 exporter 输出 `symcc-schedule-smt-v6`，encoding 为
  `bounded-sc-*-order-lock-condition-thread-state-v6`；reader 继续接受 v1--v5；
- 测试：24 个受控 waits 的 partial 公式只含 24 个 anchors，permutation 含 276
  个 pairwise links；两者均由系统 libz3 返回 SAT，partial base 小于 permutation
  的三分之一。原 strict-link 回归改为强制两个 anchored ranks 相等并得到 UNSAT；
- 64-thread 压力测量：相同 384-event deterministic trace 上，v6 partial 的
  64 anchors 表达 2016 个 semantic pairs，base SMT 255,663 bytes，artifact
  723,091 bytes，生成约 18.0 ms，libz3 SAT 约 66.4 ms；v6 permutation base
  587,016 bytes，artifact 1,389,790 bytes，SAT 约 3609.9 ms。两者证书均通过；
  这是单机单次 B 级公式压力结果，不是 R 级 coverage/throughput 结论；
- 当前等级：I/T/B。剩余的主要二次项已转为同一同步对象上 complete-section
  exclusions；若要 lazy refinement，必须先提供模型检查、违反区间提取和迭代
  re-solve，而不能简单删除 hard exclusions 造成假 SAT。

## 46. F51：Constructive Linear-Extension Certificate Checker（2026-07-27）

- 研究问题：F49 的线性扩展论证此前只存在于文档，artifact 没有机器可读的边，
  也无法证明某份 solver assignment 确实能构造满足当前 operational subset 的总序；
- Order IR：v6 在 `sync_state.order_ir` 写出
  `symcc-lifecycle-order-ir-v1`，包含 bounded lifecycle events、程序序/thread
  固定边、critical-section nonoverlap 的方向 alternatives、controlled anchors、
  link encoding 和 stride。IR 与 SMT 由同一恢复过程产生，但证书验证不解析注释或
  依赖命名字符串；
- 构造器：`schedule_linear_extension_certificate()` 接收完整 `pos_*` 与
  `sync_ord_*` assignment；按源 ranks 选择每个已满足 exclusion direction，加入
  anchors 所确定的 controlled order，再以确定性 Kahn/priority-queue 算法生成拓扑
  总序。未提供 model 时，将 observed trace 总序嵌入同一 scaled-anchor 空间；
- 独立检查器：`verify_schedule_linear_extension_certificate()` 重新检查 event
  position permutation 与 per-thread program order、partial anchor equality 或 legacy pairwise direction、
  source ranks 上的固定/选择边、总序对所有边的保持、choice 完整性、controlled
  projection、trace/base digest 和 certificate SHA-256。篡改 replay、choice 或
  digest 均拒绝；
- Query 绑定：证书可携带 `query_index`，检查器会重新计算该 query 的第 k 次
  per-thread replay slot，并验证 source conflict 的 right event 严格早于 left
  event；因此任意 base model 不能冒充目标 query model；
- Artifact：每个有 lifecycle state 的 v6 artifact 自动包含
  `observed_linear_extension` 证书和 `observed_topology_replay_prefix`，便于实验
  数据先验证再消费；
- 当前等级：I/T。这里的“machine checked”指项目内独立可执行 certificate checker，
  不是 Coq/Lean 等定理证明。证书 scope 明确为 hard lifecycle/order IR 与指定
  query；optional HB、trylock busy、condition wake assumptions、path constraints、
  read-from 和具体 runtime reachability 均未认证。

## 47. F52：Verified Topology-to-Runtime Replay Materialization（2026-07-27）

- 研究问题：partial SMT 的 `sync_ord_*` model 不能直接写入 preload runtime；
  runtime 消费的是每个受控调度点的 logical-thread-id prefix。此前缺少从已验证总序
  到该 ABI 的明确投影；
- 投影规则：证书按 total lifecycle order 选出同时具有 controlled anchor 的
  lock/trylock/rdlock/wrlock/wait/join events，并输出其 logical tid。outcome、
  release、thread marker 等非受控 lifecycle events 保留在证书中但不写 prefix；
  memory trace events 也不伪装成 runtime scheduling points。若指定 query 的任一
  replay slot 或 conflict endpoint 是 read/write，证书标记
  `runtime_replayable=false`，writer/CLI 拒绝物化；
- API：`write_schedule_linear_extension_prefix()` 只接受能通过独立 checker 的
  certificate，随后复用原有 atomic `write_schedule_prefix()`；篡改或跨 artifact
  certificate 不会写出；
- CLI：`util/symcc_schedule_linearize.py` 支持 JSON/JSONL artifact、负数行索引、
  `--model`、`--query-index`、`--prefix-out` 和 `--certificate-out`。model JSON
  接受数组或 `pos_i`/`sync_ord_i` map；没有 model 时物化 artifact 内嵌 observed
  certificate；
- 自动化证据：两 wait query 的反序 model 产生 `[2,1]` prefix，CLI 输出的证书再次
  通过 checker；不满足 query replay slot 的 model 被拒绝。真实 pthread preload
  测试把 observed certificate 写成 prefix 后重新执行 target，并确认下一次 trace
  的首个 controlled logical tid 与证书一致；
- 当前等级：I/T。该 prefix 只表达受控点的优先线程，不保证目标线程当时 enabled；
  runtime 仍受 `SYMCC_SCHEDULE_WAIT_MS` 有界等待和 fallback 约束。证书也不是路径
  可达性、完整 operational semantics 或 optimal DPOR 的证明。
- 2026-07-27 线性化修复：原 gate 在匹配线程 CAS 递增 `prefix_index` 后才记录
  controlled event，等待线程可观察到索引推进并抢先写 trace，使物化 prefix 偶发与
  trace 首事件不一致。runtime 现在用独立 `replay_gate_lock` 原子化“匹配/timeout
  决策、controlled/fallback 记录、prefix index 发布”；无 prefix 的普通记录不经过
  该锁。真实 mutex replay 50 次压力重跑全部保持首事件一致，schedule suite 50/50
  与严格 `-Wall -Wextra -Werror` 编译通过。

## 48. F53：Violation-Driven Lazy Critical-Section Refinement（2026-07-27）

- 研究问题：F50 已把 controlled/lifecycle 连接从二次规模降为线性，但同一对象上
  S 个不兼容完整临界区仍产生 `S(S-1)/2` 个 nonoverlap 析取。直接删除这些 hard
  constraints 会接受不可执行的重叠模型；预先用 activation implication 包裹全部
  析取又不能降低 parser 和初始 context 体积；
- v7 双上下文：`base_smt2` 仍是权威精确公式，包含全部 exclusion，现有
  materializer、incremental script 和外部 solver 行为不放宽；新增
  `relaxed_base_smt2` 及独立 SHA-256，只供内置 refinement solver 使用。宽松基线
  省略 exclusion AST，但保留 declarations、event/lifecycle PO、scaled anchors、
  condition/thread enabledness 和 query delta；
- Refinement IR：`symcc-lifecycle-order-ir-v1.choice_constraints` 保存每个
  critical-section choice 的稳定名称及两组方向边；`sync_state.lazy_refinements`
  只保存 name/kind/choice index，避免重复保存 SMT 文本。内置 solver 从 model 的
  `sync_ord_*` 检查每个 choice，收集当前真正违反的集合，并用 `Z3_mk_lt`、
  `Z3_mk_or` 和 `Z3_solver_assert` 直接加入 AST，再增量 re-check；
- 精确终止条件：只有当前模型满足全部 choice 时才生成 certificate 并返回 SAT。
  active hard choice 仍被模型违反会作为内部一致性错误拒绝；到达
  `max_refinement_rounds` 时返回 `refinement_limit` 和
  `exact_semantics=false`，不得冒充 SAT。UNSAT 在已加入的 hard refinements 下成立；
- 兼容与消融：schema 升为 `symcc-schedule-smt-v7`，reader 继续接受 v1--v6。
  `lazy_refinement=False` 与 CLI `--eager` 使用完整基线，作为小实例、对抗性 UNSAT
  和差分验证路径；
- 自动化证据：同一强制重叠约束在 relaxed base 为 SAT、exact base 为 UNSAT；
  lazy solver 第一轮得到重叠模型、加入 `sync_exclusion_0_1`，第二轮得到 UNSAT。
  零 refinement 预算明确返回 limit；eager 一次检查为 UNSAT；
- 64-section 公式压力消融：192 lifecycle events、2016 choices，exact base
  426,631 bytes，relaxed base 218,101 bytes。普通 SAT 五次本地测量的 lazy 中位数
  124.696 ms（106.250--126.677），eager 中位数 366.579 ms
  （348.431--380.498）；人工强制全局重叠的三次 UNSAT 中，lazy 激活全部 2016
  choices、两次 check，中位数 182.359 ms，eager 一次 check 中位数 140.513 ms。
  该 B 级结果说明 lazy 的收益取决于违例稀疏性，因此保留 eager 消融，不宣称对
  所有查询单调加速；
- 当前等级：I/T/B。该循环只细化完整 critical-section nonoverlap；condition wake、
  trylock busy、read-from、path constraints 和 weak-memory axioms 尚未纳入同一
  counterexample-guided refinement loop。

## 49. F54：Direct System-libz3 Model Extraction and Solver CLI（2026-07-27）

- 研究问题：F51/F52 已能检查完整 `pos_*`/`sync_ord_*` assignment，但此前必须由
  外部脚本解析 Z3 文本 model 再转换 JSON，存在版本格式差异、遗漏 unconstrained
  常量和人工工件错配风险；
- C API：`_SystemZ3Solver` 通过 `ctypes` 加载系统 `libz3`，使用
  `Z3_parse_smtlib2_string`、incremental solver API 和引用计数 context。每个整数
  变量由 `Z3_model_eval(..., model_completion=true)` 与
  `Z3_get_numeral_int64` 结构化读取，不解析 `model.to_string()`；
- 完整链路：`solve_schedule_smt_query()` 校验 base/delta SHA-256，解析一次
  base+query，运行 F53 refinement，提取 event positions/lifecycle ranks，调用 F51
  构造器，并再次运行独立 checker。SAT result 包含 model、certificate、
  runtime-replayability 与 prefix；UNSAT/unknown/limit 不伪造证书；
- CLI：`util/symcc_schedule_solve.py` 支持 JSON/JSONL、query/base-only、
  lazy/eager、round bound、附加研究断言，以及原子写 result/certificate/prefix。
  其 prefix 输出沿用 F52 的 runtime-replayability gate；
- 自动化证据：覆盖直接 SAT model 与 certificate、lazy forced-overlap UNSAT、
  eager 消融、digest tamper 拒绝、CLI result/certificate/prefix 三类产物；系统
  没有 `libz3` 时 API 明确报告 unavailable，而不是静默降级到未验证文本解析；
- 当前等级：I/T。当前 binding 只服务本模块已生成的 QF_LIA schedule schema，
  不是通用 Python Z3 replacement；未实现 unsat core/proof object，certificate
  证明的是 SAT model 对 order IR/query 的一致性，不证明 concrete path reachability。

## 50. F55：Detach/Cancel/Join-Cancelled Identity Lifecycle（2026-07-27）

- 研究问题：F48 在 `pthread_create` 成功返回后才注册 handle，快速退出 child 可先于
  注册；detached entry 永不回收，超过固定 4096 项后稳定 identity 退化；取消一个
  正阻塞于 `pthread_join` 的 joiner 又只留下无 outcome attempt，难以区分 trace
  截断与 cancellation；
- 竞态安全 registry：runtime 在调用真实 `pthread_create` 前按 logical child id
  预留 entry，成功后绑定 handle，失败时丢弃 reservation。entry 显式记录
  `handle_valid/detached/exited/cancel_requested`；joinable exit 保留到成功 join，
  detached identity 只在 handle 已绑定且 exit/detach 两条件都满足时退休；
- Runtime ABI：新增 `pthread_detach`、`pthread_cancel` interposition，以及
  `detach[_success|_fail]`、`cancel[_success|_fail]`、`join_cancelled` 和
  `thread_retire cause=join|detach`。join wrapper 在真实 cancellation point 外压入
  cleanup handler；若 joiner 被取消，先记录 `join_cancelled`，不删除 target
  mapping，另一线程仍可完成 join；
- Cancellation-safe tracing：replay gate 与持有 `log_lock` 的 logger 不再调用
  libc cancellation points，分别改用 `SYS_nanosleep` 与 `SYS_write`。否则取消可在
  logger 持锁时展开 cleanup，cleanup 再记录 `join_cancelled/thread_exit` 时永久
  自锁；join cleanup 现在覆盖 gate 与真实 join，提前取消也会补齐 attempt marker；
- 创建即 detached：runtime 读取 `pthread_attr_getdetachstate`，在 create markers
  写 `detached=1`。若 child 在父线程绑定 handle 前已经退出，bind 操作完成退休并
  发出显式 `thread_retire`，避免 exit/register 竞态泄漏；
- Operational IR：生命周期恢复器新增 detach/cancel/join-cancelled/retire rows。
  mapped successful join 仍要求 `thread_exit < join_success`；cancelled join 不合并
  target exit clock，也不增加 completion edge。完整 retire 产生
  `thread_exit < thread_retire`，并根据原因增加
  `join_success|detach_success|detached-create-success < thread_retire`；
- 自动化证据：真实 preload detach target 产生完整 detach/exit/retire metadata 和
  两条 retirement hard edges；真实 joiner cancellation 后 trace 含 mapped
  `join_cancelled`，主线程随后仍以 mapped join 成功回收原 target。另一个压力目标
  顺序创建 4104 个 `PTHREAD_CREATE_DETACHED` threads，全部 create-success 为
  `mapped=1`，全部发出 `thread_retire`，证明跨越 4096 容量后槽位持续复用；
  cancellation test 同时启用 replay prefix，另做 50 次连续压力重跑未再出现日志锁
  死锁；
- 测试状态：schedule suite 42/42，严格
  `cc -Wall -Wextra -Werror -fPIC -shared -pthread` 通过。当前等级 I/T/B；
- 可信边界：记录 successful cancellation request 不等于证明目标已接收或执行
  cancellation；`thread_exit normal=0 cancel_requested=1` 是 runtime evidence，
  不是 POSIX delivery proof。double join、detach 与并发 join 的未定义竞态、fork、
  process-shared objects、优先级与公平性仍未建模。

## 51. F56：Bounded Source-DPOR Certificate and Sleep Sets（2026-07-27）

- 研究问题：原 explorer 由冲突对直接生成 thread prefix，缺少可检查的依赖图、
  Mazurkiewicz 等价类、source set 和跨重启 sleep set；因此“source-style”只是候选
  启发式，不能解释为何两个独立交换属于同一类，也不能验证回溯目标的因果前驱；
- 技术依据：实现参考 Source-DPOR 的 source-set/sleep-set 架构和 Optimal-DPOR
  对 wakeup-tree 必要性的分析。当前版本刻意命名为 bounded Source-DPOR
  certificate，不宣称具备论文中的 unbounded completeness 或 optimality；
- 依赖与等价：`_bounded_dependency_graph()` 为每个事件建立稳定的
  `(tid, per-thread-index)` identity，加入 thread program order 与同步/内存冲突边，
  计算规范拓扑线性化及其 SHA-256 Mazurkiewicz class。独立事件互换得到相同 class，
  dependent 事件互换得到不同 class；
- Source 分析：`_source_replay_analysis()` 从目标 backtracking event 逆向加入同
  thread 的因果前驱，形成可执行 wakeup sequence、source set 和有界 replay
  candidate。比如目标线程在冲突点前已有一个事件时，候选会保留两个 thread slot，
  而不是构造不可达的单元素跳转；
- 可检查证据：`source_dpor_certificate()` 输出
  `symcc-bounded-source-dpor-v1`，绑定 normalized trace digest、依赖边、canonical
  order、equivalence digest、source records 和明确 bounds；
  `verify_source_dpor_certificate()` 独立重算并拒绝 trace、edge、source 或 digest
  篡改。schedule constraint artifact 同步内嵌该证书；
- 持久探索：F56 首版 `DporScheduleExplorer` state schema v2 持久化已观察等价类
  和 bounded sleep sets，过滤已探索的首步选择，并统计
  `sleep_pruned_prefixes` 与 `equivalent_traces`；F61/F62 后续把 schema 升到 v4，
  加入 wakeup leaves 和 ConDPOR revisit identities。旧 state 仍可读取并升级；
- 自动化证据：`test_schedule_exploration.py` 覆盖 independent-swap 等价、
  dependent-swap 区分、因果 wakeup、证书篡改、sleep persistence 和等价类计数；
- 当前等级 I/T。F56 阶段尚未实现 wakeup tree；该项随后由 F61 的 bounded
  weak-initial tree 补齐。动态 operational enabled set、unbounded race reversal
  和 optimality proof 仍未实现；sleep pruning 只在当前 bounded contract 内有效，
  不能扩展解释为完整模型检查。

## 52. F57：Single-Context Path/Schedule/Read-From Solving（2026-07-27）

- 研究问题：F42 只把 Query IR 和 schedule artifact 放在同一 JSON 记录中分别验证；
  path SAT 与 schedule SAT 仍可能由互不相容的 input-byte/read-from witness 支持。
  ConDPOR 所需的关键步骤是让 data 与 schedule nondeterminism 在同一 solver
  context 中共享变量；
- 联合公式：`solve_joint_path_schedule_query()` 去除两侧 SMT-LIB2 的
  `check-sat/get-model/exit` 控制命令，在一个 system-libz3 context 中组合 Query IR
  QF_BV、schedule QF_LIA 和 read-from constraints。`_SystemZ3Solver` 扩展为结构化
  提取额外 integer 与 byte bit-vector model，不解析 solver 打印文本；
- Read-from 桥：memory event tag 使用显式 `sym-byte=N` 把 read value 连接到输入
  byte，`init=0xNN` 表示初始内存，write 的 `value=0xNN` 表示 concrete write
  witness。联合结果携带 event positions、RF selector 和 input bytes；
- 持久化入口：`QueryStore.solve_joint_schedule_smt()` 按 Query IR content hash
  读取已存 SMT，执行联合求解，并用 bounded Query IR evaluator 再检查 byte model。
  SQLite stats 增加 `joint_smt_solves` 和 `joint_smt_verified`；
- 独立复检：`verify_joint_path_schedule_result()` 重验 Query/schedule/delta digest、
  F51 schedule certificate、RF 结构和 byte bridge，并重新调用 solver，防止把过期
  或跨 artifact model 当作有效证据；
- 自动化证据：测试构造 path 单独 SAT、schedule 单独 SAT、但 read-from byte bridge
  冲突的实例，联合结果必须 UNSAT；把 initial write 改为兼容值后得到 SAT，提取的
  input byte 同时通过 Query IR evaluator 与联合 verifier；
- 当前等级 I/T。该公式只覆盖 artifact 中存在的 byte tags 和 bounded memory
  events；缺 tag 的 concrete runtime value 不会被推测。它不是任意程序路径的
  operational reachability proof，也未实现 ConDPOR 的 backward revisit/maximal
  extension 算法。

## 53. F58：Parameterized Bounded SC/TSO/RA Memory Models（2026-07-27）

- 研究问题：此前 schedule-SMT 只约束 SC event order，没有 authoritative
  read-from/coherence 语义；这既会接受 stale read，也无法研究 weak-memory 下
  fuzzing schedule 与 input 的交互；
- 模型选择：`schedule_smt_artifact(..., memory_model=...)` 和 MPI 环境变量
  `SYMCC_SCHEDULE_MEMORY_MODEL=SC|TSO|RA` 选择语义。memory event window 由
  `SYMCC_SCHEDULE_SMT_MAX_MEMORY_EVENTS` 控制，默认 32、硬上限 64，超过边界明确
  截断并记录 metadata；
- SC：所有内存事件共享总位置序；每个 read 选择 initial value 或位置上早于它的
  write，并要求选择的 write 是该地址在 read 前的最后一次 global write；
- TSO：保留 load/load、load/store 和 store/store program order，允许
  store/load global-order relaxation；同线程未 flush 的最新 store 必须通过
  forwarding 被后续 load 读取，否则才从 global last write 读取。这里是 bounded
  store-buffer observational subset；
- RA：为每个地址建立 read-from、per-location modification-order ranks 和 Boolean
  happens-before closure。thread PO、RF causal rank、release-write 到
  acquire-read 的 synchronizes-with，以及 WW/WR/RW/RR coherence 共同排除 thin-air
  和违反 release/acquire message-passing 的 witness。trace tag
  `mo=relaxed|release|acquire|acq_rel|seq_cst` 指定原子意图；
- 证书边界：SC 可继续检查严格 program order；TSO/RA 证书 checker 使用
  model-aware PO。由于 pthread runtime prefix 不能强制 CPU memory order，非 SC
  certificate 标记 `runtime_replayable=false`；
- Litmus 证据：Store Buffering 两个 load 都读 initial 在 SC 下 UNSAT、TSO/RA 下
  SAT；TSO 同线程 store 后 stale initial read 因 forwarding 为 UNSAT；RA 的
  release/acquire flag 读取配合 stale data 为 UNSAT，而 relaxed flag 允许该 witness；
- 当前等级 I/T。RA 是 bounded axiomatic subset，不是完整 C11/C++ memory model；
  fences、release sequence、RMW、SC atomics 总序、non-atomic race UB、mixed-size
  tearing、x86 locked operations 和完整 TSO propagation 均未建模。

## 54. F59：Content-Addressed Live State and Page-COW Memory（2026-07-27）

- 研究问题：F38 只有 continuation descriptor，无法迁移真实 solver stack、
  symbolic store 和 memory image。GenSym 式并行状态 fork 需要深状态可复制，但
  全量序列化每次分支会造成 O(memory) 放大；
- CAS：`LiveStateStore` 以 canonical JSON 的 SHA-256 为对象 ID，使用原子 rename
  写入，读取时重验 digest、schema、大小和引用。表达式节点、solver frame、
  symbolic store、memory page、memory root 分别有版本化 schema；
- 增量 solver stack：frame 以 parent digest 连接，仅存本层 constraint expression
  references。`restore_solver_frames()` 检查深度、循环和对象 schema，恢复从 root
  到 leaf 的约束序列；
- Symbolic store：变量名映射到 expression CAS object；恢复时验证所有引用存在且
  类型正确，不允许 dangling symbolic value；
- Page-COW memory：默认 4096-byte page 保存 concrete bytes 和稀疏 symbolic-byte
  references。`fork_memory()` 只重写受影响 page 和 memory root，未修改 page digest
  在父子状态间共享；concrete overwrite 默认清除对应 symbolic byte，避免 stale
  expression；
- Continuation bundle：`put_continuation()` 绑定 descriptor、solver/store/memory
  roots，checkpoint id 就是 CAS id；`restore_continuation()` 返回
  `LiveContinuationBundle`。`symcc_live_state.py inspect|memory-diff` 提供离线验证和
  比较，并明确输出 `native_resume_supported=false`；
- 自动化证据：测试验证跨页写只复制一个 page、未修改 page digest 共享、solver
  stack/store/memory 完整恢复、CLI inspect/diff，以及 tamper、缺失对象、错误
  reference 全部拒绝；
- 当前等级 I/T。这是 portable live-state persistence contract，不是任意 native
  instruction 的 resume engine。当前 SymCC instrumentation 不是 CPS compiler，
  尚无 register/PC/call-stack 恢复、external resource virtualization 或 MPI
  scheduler 对该 bundle 的实际执行适配。

## 55. F60：Executable Research Evidence and Claim Gates（2026-07-27）

- 研究问题：单元测试数量不能直接支持论文声明；需要把输入、bounds、环境、公式
  hash、checker 结论与不支持的 claim 放入可机器复检的实验单元，防止实现继续演化
  后历史结果失去语义；
- Evidence builder：`build_research_evidence()` 当前生成
  `symcc-research-evidence-v2`，运行 F56 equivalence certificate、F57 joint
  path/schedule/RF、F58 SC/TSO/RA litmus、F59 CAS/COW restore、F61 wakeup/ready
  certificate 和 F62 graph/revisit certificate。每项记录精确输入、schema/digest、
  bounds、protocol、oracle 与结果；verifier 仍可读取历史 v1；
- Solver 对拍：`validate_smt_backends()` 自动探测 system-libz3 C API、Z3 CLI 和
  cvc5 CLI，以预期 SAT/UNSAT oracle 验证可用 backend。当前环境只有 libz3 时，
  evidence 会如实记录单一 solver family，不虚构 cross-family consensus；
- Claim gate：`verify_research_evidence()` 先验证整个 bundle digest，再执行 semantic
  gates。claim scope 明确排除 optimal/unbounded DPOR、完整 C11/fence/UB、任意 native
  resume 和未由独立 solver family 复现的共识；
- CLI：`python3 util/research_evidence.py --output evidence.json` 生成 artifact，
  `python3 util/research_evidence.py --verify evidence.json` 在另一个环境复检；
- 自动化证据：`test_research_evidence.py` 覆盖 backend capability/oracle、
  claim/digest gate、tamper rejection 和 CLI round trip；
- 当前等级 I/T。该 artifact 是可执行证据与声明约束，不替代等 CPU、多目标、多轮
  benchmark、统计效应量、artifact evaluation 或形式化证明。达到 R 级仍需固定
  commit/container、公开 corpus、失败样本和至少一个独立 solver family。

## 56. F61：Bounded Optimal-DPOR Wakeup Tree and Ready Evidence（2026-07-27）

- 研究问题：F56 已有 source set、causal wakeup sequence 和 sleep-set persistence，
  但没有 Optimal-DPOR 的有序 wakeup tree。只按 prefix hash 去重无法检查“较早
  sibling 是否已是新 leaf 的 weak initial”，也无法用运行时 evidence 排除根节点
  尚未到达调度点的候选；
- 技术依据：按 Optimal-DPOR（POPL 2014）Lemma 6.1 实现 weak-initial 递归，并在
  bounded deterministic-next-event 抽象中检查 wakeup-tree leaf/sibling/sleep
  invariants。候选 process sequence 的首事件要么能从 reference 中跨越独立事件
  成为 initial，要么与 reference 全部独立后递归；
- 数据结构：`BoundedWakeupTree` 以 base prefix 为根，保存有序 leaves。插入拒绝
  超界、complete-ready 集之外的首线程、sleep weak initial、existing-leaf weak
  initial 和 ordered-sibling weak initial；state schema v3 持久化 leaves，并在
  replay 实际观察到对应 prefix 后删除已探索 leaf；
- 运行时 enabled evidence：preload runtime 可记录
  `ready decision=N chosen=T tids=... complete=...`。controlled pthread 调用先在
  bounded registry 注册，再由 `replay_gate_lock` 原子化 ready snapshot、选择事件
  记录和 prefix-index 发布；配置可限制 settle 时间与最多参与线程。该 ready 集表示
  已到达 cooperative scheduling point 的线程，不等同于任意程序状态的 enabled set；
- 可检查证书：`symcc-bounded-wakeup-tree-v1` 绑定 trace、Source-DPOR certificate、
  bounds、ready evidence、sleep sets、每次 insertion reason 和最终 tree；独立
  verifier 从原始 trace 重建全部字段并拒绝 tamper；
- 自动化证据：测试区分 independent sequence 的 weak-initial 等价与 dependent
  leaves，检查 complete ready root 接受/拒绝、证书篡改、state persistence；真实
  mutex replay 在 ready settle 下确认首决策 snapshot 包含竞争线程且选择与 prefix
  一致。schedule suite 在本阶段为 52/52；
- 正确性修复：原 replay gate 先发布 prefix index、后写 trace，等待线程可抢先记录。
  现在选择、记录与发布在同一 gate lock 临界区完成，真实 replay 压力测试不再出现
  首事件线性化反转；
- 当前等级 I/T。实现证明的是 bounded trace abstraction 下的 tree invariants；
  没有证明运行时 enabledness 完备、termination/maximal execution、state-dependent
  dependence 或 unbounded Optimal-DPOR 每个 Mazurkiewicz class 恰好一次。

## 57. F62：Bounded ConDPOR Graph and Backward Revisit（2026-07-27）

- 研究问题：F57 将 path、schedule 与 RF 放进单一 solver context，F58 提供
  parameterized memory subset，但此前没有 ConDPOR 的 execution graph、backward
  revisit、causal-successor deletion 和 maximal extension 工件，跨 trace 也无法按
  `po/rf/co` 结果去重；
- 技术依据：参考 ConDPOR（CONCUR 2025）的 execution graph。当前实现将 runtime
  trace 映射为稳定 `t<tid>:<thread-index>` 节点与每地址 `init:<object>` 节点，
  事件分为 read/write/constraint/action，显式保存 program order、read-from、
  coherence 和 observed add order。因果关系严格取 `(po union rf)+`；
- RF 与一致性：显式 `rf=`/`rf-seq=` tag 优先；否则使用同地址、先出现且 value
  匹配的最新 write，再退化到 latest observed write 或 init。每地址 coherence 从
  init 开始按 observed writes 建立。inference reason 进入证书，未把猜测伪装成
  concrete value proof；
- backward revisit：对后加入 write 和先前同址 read，仅保留现有 HB/lockset
  classifier 认定为 unordered/unprotected 的 pair；若 read 因果先于 write 则拒绝，
  否则删除 read 的严格因果后继并改写 `rf(write, read)`。所有 relation 重新检查
  acyclic，拒绝任何 causal-cycle candidate；
- bounded maximal extension：按稳定 observed position 恢复删除事件。恢复 read
  选择当前 coherence-maximal write；恢复 write 放到当前同址 writes 之后；
  constraint 优先使用 `model-outcome=` 作为确定性 tie-break，否则显式标注
  observed-outcome fallback；action 只恢复观察到的 thread successor。extension
  保存删除集、顺序、选择、最终 RF/co 和 model-witness 计数；
- 可复检与探索：`symcc-bounded-condpor-graph-v1` 对 graph identity、每个 revisit
  identity 和整个 certificate 分层 SHA-256。独立 verifier 从 trace 重算。explorer
  state schema v4 持久化每个 input 的 revisit digest，统计首次/重复 revisit；
  revisit 绑定同一 Source-DPOR base/wakeup/replay prefix，所以由现有 bounded queue
  实际执行，不创建不受 wakeup-tree gate 约束的旁路；
- 开关与产物：MPI 默认启用 `SYMCC_DPOR_CONDPOR_GRAPH=1`；schedule constraint
  JSONL 内嵌 execution graph。关闭后只停用 explorer 跨 trace revisit bookkeeping，
  不影响旧 Source-DPOR queue 或 schedule-SMT；
- 自动化证据：synthetic trace 覆盖 `init -> read` RF、write-to-read revisit、
  read-successor constraint deletion、model-outcome maximal extension、replay
  prefix、certificate tamper；另覆盖同线程因果拒绝、mutex/HB 保护拒绝，以及两次
  observe 后 revisit identity persistence/dedup。schedule suite 为 55/55；
- 全量回归：Python unittest 212/212、LLVM lit 88/88、完整 build、严格 runtime
  `-Wall -Wextra -Werror` 编译、cooperative-ready mutex replay 20/20、
  `py_compile` 与 `git diff --check` 全部通过；
- 当前等级 I/T。此实现刻意命名为 bounded observed-control-flow ConDPOR graph。
  read 值改变后控制流可能产生不同事件，当前只能恢复已观察 suffix；没有完整
  interpreter、path-dependent event existence、memory-model consistency oracle 或
  sound/complete/optimal 证明，不能对外表述为完整 ConDPOR 复现。

## 58. F63：Path-Dependent Events and Causal Regeneration（2026-07-27）

- 研究问题：F62 的 backward revisit 能改写 read-from 并删除 read 的因果后继，但
  compiler/runtime trace 只有 read/write 和 pthread rows。若新 read value 改变
  branch，原 suffix 中的事件可能根本不存在；继续机械恢复 observed suffix 会构造
  不可执行 execution graph；
- Compiler trace：schedule instrumentation 为 LLVM conditional branch、switch 和
  action basic block 增加 `constraint`/`action` 通知。runtime 把最近一次 schedule
  read 的 object、address 和 byte width 关联到 branch row，形成显式
  `last-read=<id>`/`last-read-bytes=<N>` evidence，而不是只比较相同字符串地址；
- 依赖判定：`_constraint_depends_on_read()` 同时接受显式 event identity、相同 object
  和 byte interval overlap。mixed-size read 只要地址区间相交，就将 constraint 判为
  path-dependent；不相交 row 不被扩大删除；
- ConDPOR regeneration：backward revisit 删除目标 read 的 causal successors 后，
  继续删除依赖该 read 的 constraint 及其同线程控制流 suffix。extension 不再把这些
  rows 当成 observed action 恢复，而是要求下一次 concrete/symbolic execution重新
  生成；artifact 记录 withheld/regeneration 原因；
- 自动化证据：`schedule_memory_trace.c` 使用不可被优化掉的 volatile side effect
  产生真实 BranchInst；lit 检查 read、constraint 和 action rows。Python tests
  覆盖显式 id、object+byte-overlap 和 causal suffix withholding；
- 当前等级 I/T。事件重生成仍依赖下一轮 instrumented concrete execution，不是
  ConDPOR 论文中的 interpreter-level symbolic transition generator。异常边、间接
  跳转、signal 和外部 I/O 引起的 event existence 尚未统一进入该模型。

## 59. F64：Operational Enabledness Certificate（2026-07-27）

- 研究问题：F61 ready snapshot 只说明线程已到达 cooperative gate，无法区分一个
  mutex/rwlock/join/wait 操作在当前 abstract state 中是真正 enabled、blocked 还是
  evidence 不足。把 ready 直接等同于 enabled 会错误剪枝 wakeup leaf；
- Runtime offers：bounded TLS-safe registry 的每个 ready entry 保存 logical tid、
  operation、primary object 和 auxiliary object。trace tag
  `offers=tid:op:object:auxiliary,...` 将 mutex、rwlock、join、condition wait 及其
  associated mutex 与同一 decision 绑定；wait rows另记录 timed 属性；
- 状态恢复：`operational_enabledness_certificate()` 从 lifecycle trace 重建
  mutex owner、rwlock readers/writer、join target completion 和 wait mutex state。
  每个 offer 被分类为 `enabled`、`blocked` 或 `unknown`，并检查 chosen operation
  与恢复状态一致；缺失 mutex type、截断 lifecycle 或 unsupported operation 保持
  unknown，不猜测；
- Terminal witness：只有 runtime 显式 stop 且 registry 无 pending offer 时，证书才
  产生 bounded terminal witness。settle timeout 或 snapshot `complete=1` 单独都
  不被解释为整个程序的 maximal termination；
- 可检查性：证书 schema 为 `symcc-operational-enabledness-v1`，其 digest/summary
  进入 wakeup、ConDPOR 和 schedule constraint artifacts。独立 verifier 从原 trace
  重建并拒绝 offer、status、chosen 或 terminal 字段篡改；
- 自动化证据：synthetic tests 覆盖 enabled/blocked/unknown、wait auxiliary mutex、
  terminal 和 tamper；真实 pthread replay 检查 runtime offer 与所选线程一致；
- 当前等级 I/T。这是 bounded pthread subset 的 operational evidence。robust/
  recursive/error-checking mutex、process-shared objects、priority/fairness、futex、
  signal 和 scheduler enforcement 不在 claim scope，不能据此证明完整 enabled set。

## 60. F65：Native Atomics and Extended Bounded RA（2026-07-27）

- 研究问题：LLVM pipeline 在 Symbolizer 前运行 `LowerAtomicPass`，若只在 visitor
  中处理 atomic instruction，真正看到的已是普通 load/store，既丢 memory order，
  又会把 lowered RMW 重复记为非 atomic memory event；
- Pre-lowering instrumentation：`compiler/Pass.cpp` 在 LowerAtomic 前遍历 atomic
  load/store、`atomicrmw`、`cmpxchg` 和 fence。compiler/runtime ABI 新增
  `_sym_notify_schedule_atomic` 与 result 通知；cmpxchg pre/result 通过 group id
  关联 success/failure，普通 lowered notification 由 TLS address/read/write counter
  抑制；
- Trace schema：atomic rows保存 `kind`、byte width、success/failure memory order、
  RMW operation、group 和 `atomic=1`；ordinary memory rows显式写 `atomic=0`。
  `cmpxchg` failure 规范化为 read，success 规范化为 RMW，fence 作为独立 schedulable
  event；
- Bounded RA：每个 overlap-connected location component 建 modification order。
  RMW 必须从紧邻的 MO predecessor 读取；release sequence 按 release head、
  same-thread continuation 和 RMW 递推；release/acquire fence 建 synchronizes-with；
  seq_cst atomics/fences共享 total rank，并同时受 HB/MO 与 latest-SC-write 约束；
- Race 与 mixed size：在 runtime 提供 atomic classification 时，跨线程 conflicting
  non-atomic access 且无 HB 被拒绝为 data-race execution。地址区间按 byte overlap
  建 component；read-from source 必须完整包含 read interval，部分覆盖不会被当作
  无撕裂 witness；
- 自动化证据：`schedule_atomic_trace.c` 的 lit 检查 load/store/RMW/cmpxchg result/
  fence；Python litmus 覆盖 release sequence、RMW atomicity、fence synchronization、
  stale SC read、non-atomic race、mixed-size full/partial source 和 cmpxchg normalization；
- 当前等级 I/T。语义名为
  `bounded-c11-rf-mo-hb-release-sequence-fence-sc-rmw`，明确不是 ISO C/C++ 完整
  executable model。consume、dependency ordering、full SC axioms、undefined behavior
  全传播、object lifetime、unaligned tearing 和 herd7 全 corpus 对拍仍未完成。

## 61. F66：Executable Continuation IR and MPI State Search（2026-07-27）

- 研究问题：F59 checkpoint 能持久化 PC descriptor、solver stack、symbolic store
  与 page-COW memory，却不能执行；state coordinator 实际仍只 lease seed replay
  tuple，无法证明 checkpoint 是可恢复的 symbolic work；
- Executable IR：新增 `symcc-live-program-v1`，支持
  `const/input/binary/unary/load/store/assume/branch/jump/call/return/halt`。
  `LiveContinuationExecutor` 从 CAS 恢复 frame PC、value-expression roots、path frames
  和 memory root，按 step/state budget 执行；
- Symbolic fork：symbolic branch按 concrete-first 顺序生成正/负 condition solver
  frame，为两个 child 提交 canonical checkpoint。超出本 lease state/step budget
  的 child 进入 frontier；call/return 维护 frame stack，symbolic store 使用
  depth-qualified local name，memory write继续复用 F59 page-COW；
- MPI 接入：`SYMCC_LIVE_PROGRAM` 启用 executable state mode。master 从输入 seed
  建初始 checkpoint，将 descriptor/identity纳入 fenced lease 与 state shard；
  worker 按 `SYMCC_LIVE_STEPS_PER_LEASE`、`SYMCC_LIVE_STATES_PER_LEASE` 恢复执行，
  master 校验 frontier checkpoint 后重新排队，实现跨 worker bounded fork/resume；
- 正确性复核：修复 state coordinator tuple 构造中 continuation 被误传为
  `tuple()` 第二参数的集成错误；调度 reward 只统计仍可 resume 的 frontier，不把
  已在本 lease halt 的临时 fork checkpoint 计作生成吞吐；halt/return 状态提交最终
  CAS checkpoint，结果不再指向写内存前的 stale parent；worker 在导入可能已被 AFL
  移动的 seed 之前优先恢复 self-contained checkpoint；超过
  `SYMCC_MAX_TRANSPORT_INPUT` 的 live seed 显式拒绝，不构造超大 expression graph；
- CLI：`symcc_live_state.py run-program|resume` 可创建、暂停和继续 IR；`inspect`
  对该 engine 报告 `continuation_ir_resume_supported=true`，同时继续明确
  `native_instruction_resume_supported=false`；
- 自动化证据：测试在第二条 instruction 暂停并恢复 PC，随后对 symbolic byte
  fork 两条路径，执行 nested call，得到 0/66 两个结果并检查 symbolic COW memory；
  另覆盖 CLI round trip、无效 target rejection、CAS tamper 与 state identity；
- 当前等级 I/T。F66 是可执行的 portable CPS-like research IR，不是自动从任意
  LLVM/native 程序生成 continuation。缺 compiler CPS lowering、完整 LLVM IR/
  memory/exception semantics、SAT feasibility pruning、TLS/syscall/external resource
  virtualization，以及 non-shared filesystem CAS replication。

## 62. F67：Sealed Randomized Research Protocol and Paired Analysis（2026-07-27）

- 研究问题：历史 runner 按 mode 成块执行，默认三轮，统计器只做未配对中位数
  bootstrap 与 A12；它不能控制热漂移/顺序效应、证明等 CPU 预算、保留失败/删失，
  也无法把结果绑定到 source/corpus/environment；
- Sealed protocol：`research_protocol.py plan` 从 target/configuration spec 生成
  `symcc-research-protocol-v1`。target×repeat 是配对 block，block 顺序和 block 内
  configuration 顺序由固定 seed 随机化；同一 block 共享 pair id 和 common random
  number。confirmatory phase 少于 20 repeats 直接拒绝，tuning phase 显式分离；
- Provenance 与预算：manifest 记录 git commit、dirty/status/diff digest、
  tracked+untracked working-tree digest、recursive dirty submodule digest、CPU、
  kernel、Python/compiler、container image 和输入/corpus tree SHA-256。所有 cell
  使用相同 CPU-second budget，wall budget按 declared cores 计算；executor 将进程组
  限制到指定 CPU affinity，记录实际 user/system CPU、assigned CPUs、command 和
  artifact digests。MPI teardown 可使用单独封存的 wall grace，不进入 campaign
  coverage/CPU 分母；
- Failure-safe execution：每个 run 独立保存 stdout/stderr/result，原子写入并支持
  resume。success、nonzero failure、wall timeout 全部保留；timeout 终止整个 process
  group，避免残留 MPI/fuzzer 污染后续 block。manifest/result 以及排除自引用 result
  的整个 raw artifact tree 均 content-addressed，tamper 或不完整 schedule 被
  verifier 拒绝；
- Coverage outcomes：`coverage_auc()` 对 endpoint carry-forward 的覆盖曲线做
  trapezoidal time-normalized AUC；`time_to_target()` 返回首次到达时间或
  right-censored budget。runner 修复时间序列线程固定多跑 `timeout+30s` 的偏差，
  benchmark 完成即停止并补一次 final-corpus sample，避免短任务 AUC 低估。时间
  序列现统一覆盖 serial、MPI、hybrid 与 AFL-only。campaign 期间每个 tick 只枚举
  目录并建立 metadata-only hard-link snapshot；被测作业完全结束后才对 snapshot
  做 content deduplication 和串行 showmap replay，避免 coverage measurement 与
  fuzzing/concolic 争抢封存 CPU。hybrid snapshot 包含初始 seed、所有 AFL/SymCC
  queue、未过滤 SymCC 输出以及 GRIMOIRE/honggfuzz 语料，内容去重避免同步副本在
  20k 上限抽样中挤掉独立输入。showmap 的 target extra arguments 同时用于所有
  中间点和最终点，空目录/缺失 showmap 标记为 measurement failure 而非真实零覆盖；
  CSV 写
  experiment/run/pair/status/budget/AUC；
- Cross-layer budget fidelity：protocol executor 通过 `SYMCC_CPU_CORES` 把 manifest
  的权威核数传给 inner runner，CSV 的 `allocated_cpu_cores` 与
  `wall_budget_seconds` 不再依赖 mode/np 猜测。serial 目标执行也透传公开 benchmark
  `.args`，使被测语义与 showmap replay 一致。MPI 的 wall/per-execution/idle
  timeout 以及 hybrid/AFL 初始化等待都被 campaign timeout 上界约束，移除了短任务
  会被内部 10/30 秒下界静默延长的问题；
- 配对统计：`analyze_ablation.py` 使用 pair id（legacy 回退 round）计算 paired
  median-difference bootstrap CI、two-sided sign-flip randomization p-value、
  direction-aware Vargha-Delaney A12/Cliff's delta 和 Holm family-wise correction。
  summary 显式报告 total/success/failure/timeout/censored/paired counts；少于 20 个
  有效 pairs 或含缺失 pair 的比较只能标为 exploratory；
- 自动化证据：`test_research_protocol.py` 覆盖 20-repeat 完整性、随机配对、等 CPU、
  underpowered/tamper rejection、AUC/censoring、success/failure/timeout/resume；
  `test_ablation_analysis.py` 覆盖 lower-is-better、failure retention、paired test、
  Holm、AUC 和 CLI schema；`test_afl_profile_orchestration.py` 另验证 live-corpus
  union 去重、extra-argument routing、manifest core override 与 final sampling；
- 工程冒烟结果：临时构建 maze native/AFL 二进制，以 `np=2`、2 秒 MPI simulation、
  1 秒采样运行完整 runner；实际 `afl-showmap` 产出 `t=0/1/2s` 三点、17/64 edges、
  `coverage_auc=17.0`，`analyze_ablation.py` 成功读取 benchmark/timeseries CSV 并
  生成两行统计工件。该结果验证链路，不构成性能优越性证据；
- 本轮全量回归：Python unittest 233/233、LLVM lit 90/90、完整 build、schedule
  runtime 严格 `-Wall -Wextra -Werror`、`py_compile` 与 `git diff --check` 均通过；
- 当前等级 I/T。框架现在能生成 R 级实验所需工件，但仓库尚未实际完成多目标
  20-repeat confirmatory campaign，因此现有算法效果仍不能升级为 R。CPU affinity
  控制单机 process tree，不等价于跨节点频率、NUMA、温控和共享存储完全隔离；这些
  必须在实验 manifest 与论文 threats-to-validity 中另行控制。时间序列快照仍有
  目录遍历/硬链接 metadata 开销；跨文件系统时会退回复制，因此正式实验应把 work
  directory 与 snapshot 放在同一文件系统，并把 post-campaign showmap 时间计入各
  配置相同的 `wall_grace_seconds`，但不计入 coverage/CPU 分母。

## 63. F68：Conservative LLVM-to-Continuation Lowering and Feasibility Pruning（2026-07-27）

- 研究问题：F66 已能执行、暂停和迁移手写 `symcc-live-program-v1`，但真实
  LLVM/C target 无法进入该路径；branch fork 也没有检查完整 path condition，
  会保留明显 UNSAT 的 child。F68 的目标是建立一个可运行、可拒绝、可扩展的
  compiler lowering 入口，而不是用部分翻译伪装成完整 LLVM 语义；
- 技术依据：GenSym 将 symbolic execution task 编译为 continuation，并用
  cooperative concurrency 暴露并行状态。实现参考
  [GenSym ICSE 2023 论文](https://continuation.passing.style/static/papers/icse23.pdf)
  的 compiled-continuation 方向；PHI 的 edge semantics、poison/undefined behavior
  边界以 [LLVM Language Reference](https://llvm.org/docs/LangRef.html) 和
  [LLVM Undefined Behavior Manual](https://llvm.org/docs/UndefinedBehavior.html)
  为规范依据；
- Compiler pass：新增 legacy/new-PM `live-continuation-export` module pass。
  `SYMCC_LIVE_PROGRAM_OUT` 启用导出，`SYMCC_LIVE_ENTRY` 选择入口，
  `SYMCC_LIVE_STRICT=1` 将保守拒绝升级为编译失败。pass 先对 promotable scalar
  allocas 执行 mem2reg，再只遍历入口可达的 direct internal call graph；
- 支持子集：最多 64-bit integer arguments、little-endian symbolic input binding、
  integer arithmetic/bitwise、icmp、trunc/zext/sext/bitcast、select、conditional
  branch、switch dispatch chain、direct non-variadic internal call、return、
  `llvm.assume`、lifetime/debug intrinsic，以及由 `assume false` 表示的
  `unreachable` path pruning；
- PHI 正确性：每条进入 PHI block 的 CFG edge 生成独立 continuation block。
  incoming values 先全部写入 `phi_in_*` temporaries，再统一 commit 到 PHI
  destinations，保持 LLVM PHI 的 parallel assignment 语义；交叉 PHI loop 测试
  会在一次迭代中交换两个值并返回 `2`；
- 保守拒绝：pointer/vector/FP、不可提升 memory、indirect/external/variadic call、
  `invoke`/`callbr`、reachable recursion、exception、division/remainder、
  symbolic/out-of-range shift、`nsw`/`nuw`/`exact` 和其他可能越过当前
  poison/UB 模型的 instruction 不产生半可执行程序，而是输出
  `symcc-llvm-continuation-lowering-v1` rejection report。完整 lower 成功时才输出
  `symcc-live-program-v1`；
- Feasibility：`LiveContinuationExecutor` 将 CAS expression DAG 和全部 parent-linked
  solver frames lowering 为 QF_BV SMT-LIB，调用已有 `symcc-query-solver --generic`。
  `assume` 和 symbolic branch 在提交 child 前查询 SAT；UNSAT child 被剪除，
  timeout/unavailable/unsupported 为 `unknown` 并保守保留。结果记录 solver 名称、
  check/pruned/unknown counters；
- Concrete bit-vector 修复：constant/input 按声明位宽归一化；`eq/ne` 因此正确处理
  `i8 -1 == 255`。有符号除法和余数改用精确整数的 toward-zero 计算，不再经 Python
  float 丢失 64-bit 精度。LLVM exporter 仍拒绝 division，因为 LLVM 的除零和
  signed overflow 需要额外 UB guard；
- 驱动与 MPI：`llvm_to_continuation.py` 可从 `.ll/.bc` 经 `opt`，或从 C/C++ 经
  Clang plugin 原子发布 artifact；`symcc_live_state.py run-llvm` 完成
  lower/create/resume。MPI 的 `SYMCC_LIVE_LLVM` 自动生成程序并进入 F66 state
  lease；显式 `SYMCC_LIVE_PROGRAM` 优先，不会被 LLVM source 意外覆盖；
- 自动化证据：`live_continuation_lowering.ll` 覆盖 direct call、switch、select、
  symbolic fork、普通 PHI、交叉 PHI、unsupported load rejection、独立 lowering
  CLI 和 `run-llvm`；`live_continuation_source.c` 覆盖 C source 编译入口；
  `test_distributed_state.py` 覆盖 derived infeasible branch pruning、negative
  bit-vector normalization 和 exact signed division；同一 lit 还验证 recursion
  rejection report 会由 CLI 保留并以非零退出，以及 `unreachable` path 不产生
  spurious return。本轮全量结果为 Python unittest 236/236、LLVM lit 92/92、
  完整 compiler build、`py_compile` 和 `git diff --check` 通过；
- 当前等级 I/T。F68 是 conservative bounded integer-SSA frontend，不是完整
  GenSym 或 arbitrary native continuation。下一阶段需实现 object-aware pointer/
  memory lowering、allocation/lifetime、exception/indirect/external effect
  virtualization、可信 poison/freeze 模型、跨节点 CAS replication，并执行 F67
  定义的公开目标等 CPU confirmatory campaign。

## 64. F69：Object-Aware Static Memory Continuation Lowering（2026-07-27）

- 研究问题：F68 对任何 LLVM load/store 一律拒绝，而 F66 手写 IR 的 memory op
  又固定为单字节，并会把 symbolic address 直接 concretize。前者使真实 parser/
  stateful C 函数难以进入 continuation path，后者会在未知地址上产生不健全执行；
- 设计原则：本阶段采用 object-aware、fail-closed 的静态内存子集。只为入口可达
  instruction 实际引用的、已初始化、address-space 0、非 TLS global 分配确定性
  synthetic address；每个对象保留 base/size/read-only metadata。64-byte null
  redzone 与对象边界检查阻止 null/out-of-object access；
- Initializer lowering：按 LLVM `DataLayout` 的 alloc/store size、ABI/explicit
  alignment 和 target endianness 序列化最多 64-bit integer、
  `ConstantDataSequential`、array、struct、zero aggregate 与 null pointer。
  undef/poison、relocation expression、external/TLS global 或超过
  `SYMCC_LIVE_MEMORY_LIMIT` 的 image 输出 rejection；
- Pointer subset：`GEPOperator::accumulateConstantOffset()` 计算 constant GEP，
  并相对原 object 验证负偏移、one-past 与 access width。dynamic/symbolic GEP、
  nonzero address space、pointer argument、stack/heap object 和未知 provenance
  保守拒绝。当前不使用 synthetic numeric address 推断 LLVM pointer provenance；
- LLVM memory lowering：non-volatile/non-atomic integer load/store 最多 8 bytes，
  artifact 显式记录 `bits`、`bytes`、endianness、initial `memory_hex` 和
  `memory_objects`。写 constant global、越界、null 或跨对象 access 在 compiler
  阶段拒绝；
- Executor memory semantics：multi-byte load 将 concrete/symbolic page bytes 按
  target endianness组合为 bounded BV；symbolic store 使用 `lshr/trunc/zext`
  拆为独立 byte-expression roots，再复用 F59 page-COW。写入前先对 snapshot 做
  bounds read，禁止 `fork_memory()` 原有的隐式扩容掩盖 OOB；
- Defense in depth：`_validate_program()` 独立规范化 initial memory，限制 image
  为 4 MiB，检查 object bounds/non-overlap；执行每次 memory op 时再次检查 declared
  object 和 read-only 属性。没有 object metadata 的历史手写 IR 保持兼容；
- Symbolic address policy：executor 现在检测 address expression 是否依赖 input。
  发现 symbolic address 即显式拒绝，不再沿 concrete witness 静默读取单一地址。
  完整支持需要 array theory、bounded alias enumeration 或对象级 fork/ITE；
- 自动化证据：LLVM lit 覆盖 little-endian 32-bit initializer、constant string GEP、
  symbolic 4-byte store/load、memory-derived branch feasibility、constant-global
  store rejection 和 symbolic-GEP rejection；C source test 覆盖 mutable global
  round trip。Python tests 覆盖 big-endian 16-bit load、symbolic-address rejection
  以及对 tampered read-only object contract 的 executor recheck；
- 当前定向结果为 `test_distributed_state.py` 27/27、两个 continuation lowering lit
  files 2/2；本阶段全量结果为 Python unittest 239/239、LLVM/CMake lit 92/92，
  完整 compiler build、`py_compile` 与 `git diff --check` 通过；
- 当前等级 I/T。F69 不包含 non-promotable alloca、heap allocator、entry pointer
  buffer ABI、symbolic index/alias、pointer load/store/compare、relocation、TLS、
  atomic/volatile、exception 或 syscall state。下一阶段应先实现有显式 size contract
  的 input-buffer pointer ABI 和 frame-local stack objects，再研究 bounded symbolic
  address enumeration；不能把当前 static-global subset 称为完整 LLVM memory model。

## 65. F70：Explicit-Size Symbolic Input-Buffer Entry ABI（2026-07-27）

- 研究问题：F68 的 entry integer-argument ABI 适合小型函数验证，却不能表达 parser
  常用的 `parse(bytes, size)` 接口。仅把 pointer concretize 为任意整数会丢失对象
  provenance；按预留容量访问又会把短 seed 后面的零填充误当作合法输入；
- ABI contract：LLVM exporter 仅自动识别参数恰为
  `(address-space-0 pointer, integer <= 64 bits)` 的 entry。pointer 绑定到独立
  synthetic input object，size 由新 `input_size` continuation instruction 绑定到
  当前 seed 的实际字节数。其他含 pointer 的 entry 继续 fail closed；
- Bounded layout：输入对象位于 64-byte null redzone 之后，默认预留 65536 bytes。
  `SYMCC_LIVE_INPUT_BUFFER_LIMIT`、`SYMCC_LIVE_MEMORY_LIMIT` 和 size 参数可表示的
  unsigned range 共同限定最终 capacity；超过 capacity 的 seed 在 checkpoint
  创建前拒绝；
- Artifact contract：program 新增 `symcc-live-input-buffer-v1`
  `{address,capacity,size_bits}`，对象 metadata 使用
  `kind=input,logical_size=input-length`。validator 要求 descriptor 与唯一 input
  object 完全一致、普通 `input_size` 指令位宽一致且 legacy `input_size=0`，防止
  手工或篡改 artifact 混淆两种 ABI；
- Symbolic memory initialization：`LiveContinuationExecutor.create()` 仍为每个 seed
  byte 建立 canonical input expression，同时把 digest 写入输入对象对应的
  page-COW symbolic byte slot，并以 `@input:length` constant root 保存逻辑长度。
  program、symbolic store、memory pages 和 length 因而全部进入 checkpoint CAS；
  MPI worker 恢复时不需要重新读取 AFL seed 文件；
- Object safety：compiler 只 lowering capacity 内的 constant GEP/load/store；
  executor 每次访问再以 `min(capacity,current_seed_length)` 计算 input object 的
  effective size。短输入即使拥有更大的零填充 backing memory，也无法越过逻辑
  长度；symbolic/dynamic GEP 仍显式拒绝；
- 自动化证据：LLVM lit 覆盖 pointer/size metadata、实际长度分支、symbolic input
  memory branch、短 seed、runtime logical-OOB 和 `run-llvm` CLI；C source test
  覆盖短路条件产生的三条真实路径；Python tests 覆盖 seed-to-COW mapping、
  `@input:length`、capacity rejection、logical OOB 和 tampered contract；
- 结果：`test_distributed_state.py` 30/30、两个 continuation lowering lit 2/2；
  全量 Python unittest 242/242、LLVM/CMake lit 92/92、完整 compiler build、
  `py_compile` 与 `git diff --check` 通过；
- 研究依据与定位：该实现遵循 KLEE 的 object-bounded symbolic memory原则和
  GenSym 的 portable continuation/state 思路，但目前是可审计的 constant-offset
  子集，不是 array-theory memory 或任意 native continuation。参考：
  KLEE OSDI 2008
  https://www.usenix.org/legacy/event/osdi08/tech/full_papers/cadar/cadar.pdf ，
  GenSym ICSE 2023 https://continuation.passing.style/static/papers/icse23.pdf ，
  LLVM LangRef https://llvm.org/docs/LangRef.html ；
- 当前等级 I/T。F70 不包含 dynamic/symbolic index、pointer PHI/select/call
  propagation、frame-local stack、heap/lifetime、pointer load/store/compare 或
  external resources。下一阶段按依赖实现 frame-local stack object 与
  lifetime-aware frame reclamation，再引入 bounded alias enumeration。

## 66. F71：Frame-Local Fixed Stack Objects and Resumable Lifetime（2026-07-27）

- 研究问题：F70 已让 parser 输入进入 object memory，但局部 array/struct 等不能被
  mem2reg 的 alloca 仍会阻断真实 C 函数。若仅为 alloca 分配固定 backing bytes，
  顺序再次调用同一函数可能读取上次调用的陈旧内容，checkpoint 也无法区分哪些
  stack bytes 已在当前 frame 初始化；
- Compiler object model：lowerer 为 entry block 中 fixed nonzero、address-space 0、
  sized、non-scalable alloca 分配 ABI/explicit-aligned synthetic object。对象 metadata
  为 `kind=stack,function=<owner>,initialization=runtime-write-tracked`；所有对象仍受
  `SYMCC_LIVE_MEMORY_LIMIT` 和 non-overlap validation 约束；
- Conservative initialization proof：每个 stack load 必须有同一 alloca 上覆盖完整
  load byte range 的 non-atomic store，并由 LLVM `DominatorTree` 证明该 store
  dominates load。该证明支持较宽 store 覆盖较窄 constant-offset load，但保守拒绝
  分支分别初始化后 merge 的更复杂 must-initialize 情形；
- Pointer/lowering subset：alloca 与其 constant GEP 被 lowering 为确定性 pointer
  constant，最多 8-byte integer load/store 复用 F69/F70 endian-aware memory。
  dynamic/scalable alloca、symbolic GEP、pointer PHI/select、stack pointer 传入 callee、
  pointer-valued memory 和 escaping address 均不发布部分 artifact；
- Runtime frame safety：executor 只有在 object owner 等于当前 top frame function
  时才允许 stack access。store 为每个字节写 CAS symbolic-store marker
  `@stack:init:<depth>:<address>`；load 必须找到覆盖全部字节的 marker，防止 backing
  zero 或旧调用内容被解释为已初始化 LLVM value；
- Lifetime/reentry：markers 随 pause/fork checkpoint 持久化。return 在弹栈前删除
  当前 depth 的全部 marker 和 `<depth>:<ssa-local>`，因此同一非递归 callee 的顺序
  重入不会继承上一 invocation 的栈或局部绑定。program validator 在存在 stack
  object 时独立拒绝 reachable recursive call graph；
- 自动化证据：LLVM IR 覆盖 stack store/load、memory-derived symbolic branch、
  同一 callee 顺序两次调用、缺少 dominating store 和 dynamic alloca rejection；
  C source 以 `optnone` 局部数组验证真实 Clang alloca/GEP/lifetime 形态。Python
  tests 覆盖 marker 跨 pause/resume、return 清理、uninitialized/inactive access 和
  recursive contract rejection；
- 结果：`test_distributed_state.py` 33/33、两个 continuation lowering lit 2/2；
  全量 Python unittest 245/245、LLVM/CMake lit 92/92、完整 compiler build、
  `py_compile` 与 `git diff --check` 通过；
- 研究定位：当前使用非递归 call graph 上的 per-function synthetic slot，加上
  per-depth initialization/liveness state，等价于 bounded frame-local object
  virtualization；不是 native stack capture，也没有实现 LLVM undef 的任意值语义。
  研究依据包括 KLEE object memory、GenSym continuation state 与 LLVM alloca/
  lifetime semantics：
  https://www.usenix.org/legacy/event/osdi08/tech/full_papers/cadar/cadar.pdf ，
  https://continuation.passing.style/static/papers/icse23.pdf ，
  https://llvm.org/docs/LangRef.html ；
- 当前等级 I/T。F71 不包含 dynamic alloca、递归 frame address、跨函数 stack
  pointer、path-sensitive must-initialize dataflow、heap allocation/free、
  use-after-return poison、symbolic alias 或 exception unwinding。下一阶段应实现
  bounded heap allocation/lifetime；随后统一 stack/input/heap 的 bounded alias
  enumeration。

## 67. F72：Bounded Call-Site Heap Objects and Resumable Lifetime（2026-07-27）

- 研究问题：F71 已能虚拟化固定栈对象，但真实 C 数据结构仍常通过 `malloc/free`
  获得动态生命周期。直接把 heap backing bytes 当作永久 static memory 会让
  use-after-free、double-free、未初始化读取和同调用点重分配读取旧内容在迁移后被
  静默接受；把宿主 allocator 地址写入 checkpoint 又会破坏跨进程可移植性；
- Compiler allocation model：lowerer 仅识别 direct declaration
  `malloc(constant nonzero size)`，为每条 allocation call site 分配 16-byte aligned
  synthetic slot。单对象默认上限为 65536 bytes，由
  `SYMCC_LIVE_HEAP_OBJECT_LIMIT` 控制，并继续受全局
  `SYMCC_LIVE_MEMORY_LIMIT`、64-bit continuation operand 和目标 pointer range
  限制。动态 size、非零 address space、无效 pointer width 或越界 image 输出
  structured rejection；
- Artifact/lowering contract：对象 metadata 为
  `kind=heap,site=<stable-id>,lifetime=runtime-alloc-free,
  allocation=bounded-infallible`。新增 `heap_alloc` continuation op 返回该调用点的
  synthetic base，`heap_free` 只接受 null 或已支持 heap object 的精确 base；
  interior pointer free、calloc/realloc 和未知 allocator 不做不可信近似；
- Pointer 与 initialization 子集：malloc pointer 及 constant GEP 延续 object
  provenance。最多 8-byte integer load/store 复用 F69 的 endian-aware page-COW。
  compiler 要求 heap load 由 allocation 和覆盖完整字节范围的 store 支配；runtime
  仍逐次复检，因此 loop/reallocation 等动态路径不会只依赖静态证明；
- Resumable lifetime：allocation 在 symbolic store 写
  `@heap:live:<base>`，store 为每个被写字节写
  `@heap:init:<address>`。load 必须同时满足 declared bounds、live marker 和全部
  init markers；free 删除 live 以及对象范围内全部 init markers。marker 作为
  checkpoint CAS 的一部分随 fork、pause、迁移和恢复保持一致；
- Reallocation 与错误语义：释放后重新执行同一 allocation site 可复用固定 slot，
  但旧 backing bytes 因 init markers 已清除而不可读。重复执行仍存活的 allocator
  报 already allocated；double-free 报 not allocated；free 后访问报 inactive
  heap；未初始化读取独立报错。`free(NULL)` 为 no-op；
- Defense in depth：program validator 独立验证 heap metadata、site 唯一性、
  allocation instruction 与对象 address/size/site 的一一对应及 object
  non-overlap。由于每个 call site 只有一个静态 slot，含 stack 或 heap object 的
  reachable recursive call graph 均 fail closed，避免递归重入产生地址别名；
- 有意建模边界：本阶段采用 bounded-infallible allocation，即合法 constant-size
  malloc 总返回非 null synthetic pointer，不探索资源耗尽分支。一个 call site
  不能同时拥有多个 live instances；pointer PHI/select、跨函数/内存 escape、
  symbolic index、allocator family、native allocator metadata 和任意 heap graph
  不在可信子集内。这是可迁移 object lifetime virtualization，不是完整 libc heap，
  也不是 POSE 的 path-optimal heap search；
- 自动化证据：LLVM IR 覆盖 round trip、memory-derived symbolic branch、UAF、
  double-free、未初始化 load、dynamic-size malloc 和 interior free；C source
  覆盖真实 Clang malloc/store/load/free 形态。Python tests 覆盖 live/init marker
  跨新 executor 恢复、free 清理、同调用点 loop 重分配、UAF/double-free/
  uninitialized、篡改 contract、重复 site 和 recursive reentry rejection；
- 结果：`test_distributed_state.py` 37/37、两个 continuation lowering lit 2/2；
  全量 Python unittest 249/249、LLVM/CMake lit 92/92、完整 compiler build、
  `py_compile` 与 `git diff --check` 通过；
- 研究定位与依据：object-bounded access 与显式 lifetime 继承 KLEE memory-object
  设计，portable checkpoint/continuation 继承 GenSym 的状态编译方向；POSE 提醒
  heap-manipulating path exploration 还需更强的路径等价与别名处理。参考：
  KLEE OSDI 2008
  https://www.usenix.org/legacy/event/osdi08/tech/full_papers/cadar/cadar.pdf ，
  GenSym ICSE 2023 https://continuation.passing.style/static/papers/icse23.pdf ，
  POSE SANER 2026
  https://conf.researchr.org/details/saner-2026/saner-2026-papers/7/Path-Optimal-Symbolic-Execution-of-Heap-Manipulating-Programs ，
  LLVM LangRef https://llvm.org/docs/LangRef.html ；
- 当前等级 I/T。下一阶段应统一 input/global/stack/heap pointer provenance，实施
  bounded symbolic offset/alias enumeration 与 ITE memory；再扩展 pointer
  PHI/select、跨函数对象引用、calloc/realloc 和多 live instance allocator。

## 68. F73：Bounded Symbolic Alias Enumeration and Finite ITE Memory（2026-07-27）

- 研究问题：F69--F72 的 object bounds 已阻止未知地址按 concrete witness 静默执行，
  但 constant-only GEP 仍无法处理 array/table/parser 的 symbolic index。若直接对
  当前 seed 地址读写，会丢失其他可行索引；若每次为所有地址 fork 完整 state，又会
  造成 alias count × branch count 的过早 state amplification；
- Compiler GEP decomposition：LLVM 18 `collectOffset()` 将 GEP 分为 constant
  offset 和 `Value -> APInt scale`。lowerer 仅接受一个 integer variable term、
  pointer/index width <= 64 bits、pointer width 等于 DataLayout GEP index width、
  非零 signed scale，以及已知 input/global/stack/heap base provenance。动态 GEP
  后的 constant GEP 继续传播原始 index/scale/object provenance；第二个 variable
  term、pointer escape 和非标准 pointer/index-width 组合继续 fail closed；
- Finite alias contract：对每次 load/store，compiler 根据 object base/size、
  constant offset、signed index range、scale 和 access byte width 枚举 no-wrap
  defined subdomain 内的全部 in-object candidate addresses。默认最多 16 个，由
  `SYMCC_LIVE_ALIAS_LIMIT` 调整，硬上限 256；集合为空或超限输出 rejection。
  artifact 以 `pointer_offset` op 保存 modular
  `base + sext(index) * scale`；memory op 同时保存去重 alias address list、
  `alias_index`、`alias_index_bits` 和闭区间
  `alias_index_min/max`，并发布 `bounded-symbolic-alias` capability；
- LLVM wrap/poison soundness：仅有 `address == alias` 不足以排除大索引经 BV
  multiplication wrap 后重新落回对象的模型，尤其会错误接纳 `inbounds` poison。
  executor 因此把 signed `min <= alias_index <= max` 与每个 address guard 相与后
  才形成 domain。非 `inbounds` GEP 的合法 wrapped-object 路径当前也被保守剪除，
  这是显式的 no-wrap bounded subset，而不是把 wrapped witness 当作普通别名。
  每个 `inbounds` 动态结果都与已有区间求交；若 constant `inbounds` GEP 的 base
  已是动态指针，则 base 和 result 的对象内区间都求交，避免中间 poison 被最终
  对象内地址掩盖；
- Independent validation：executor validator 检查 pointer width、index width、
  nonzero constant scale、alias index signed bounds、alias count/uniqueness，以及
  所有 candidate 必须完整落入同一 compatible declared object。runtime 复检
  pointer/index/scale operand width，再应用 input actual length、top stack frame、
  heap liveness 和 read-only contract；artifact 不能借 alias list 跨对象写入；
- Symbolic load：executor 为每个 candidate 读取 endian-aware COW bytes，生成
  `address == candidate` guard，并以 nested ITE 合成一个 BV value。所有合法
  guard 的 OR 被加入 CAS path-condition frame；stack/heap candidate 还与逐字节
  initialization condition 相与。因此 OOB 或未初始化 alias 是不可行的 LLVM
  defined-execution path，而不是被 backing zero 补全；
- Symbolic store：value 先按端序拆为 byte expressions；每个可能被写 byte 更新为
  `ite(address == candidate, new_byte, old_byte)`。候选访问区间重叠时，更新以原
  byte 为底递归组合，不按循环顺序丢失其他 alias。只有这些 byte pages 进入 F59
  page-COW fork，不为每个 alias 复制整份 checkpoint；
- Conditional initialization：stack/heap init marker 从“仅检查 key 是否存在”提升为
  1-bit CAS expression。symbolic store 将 marker 更新为
  `old_init OR address_guard`；symbolic load 的 domain 同时要求相应 marker。
  marker 随 pause/fork/resume，heap free 和 frame return 仍按生命周期清理；
- Delayed state splitting：alias load/store 本身保持单状态 finite functional
  memory；只有后续 branch/assume 依赖 ITE value 时才由既有 feasibility path fork。
  这与 eager per-alias state fork 语义等价于当前 bounded QF_BV subset，同时降低
  checkpoint 和 solver-frame 扩增；
- 自动化证据：LLVM IR 覆盖 readonly symbolic load、guarded global store、
  dynamic heap/stack/input store/load、constant-after-dynamic nested GEP、multi-term/
  alias-limit/pointer-index-width rejection；C source 覆盖真实
  `values[input & 3]` pointer reuse。Python tests 覆盖 finite ITE branch fork、
  symbolic store、2-byte overlapping alias update、heap conditional init marker
  跨 executor checkpoint、wrapped-index infeasibility、两种 chained-inbounds
  intermediate-domain、missing/duplicate alias contract 和 zero-scale rejection；
- 结果：`test_distributed_state.py` 43/43、continuation lowering lit 3/3；
  全量 Python unittest 255/255、LLVM/CMake lit 93/93、完整 compiler build、
  `py_compile`、文档链接与 whitespace checks 通过；
- 研究定位：这是 KLEE-style object bounds 上的 finite alias expansion，并借鉴
  symbolic-array read-over-write 的 ITE encoding；它不是通用 SMT Array memory。
  当前没有跨对象 alias、pointer PHI/select、pointer load/store、两个 symbolic
  index term、unbounded table、nonstandard pointer/index-width DataLayout、native
  address space、wrapped non-inbounds alias completeness 或 alias-set subsumption。
  alias domain 作为 path condition 保存，但 executor 不为新 domain立即求一个新
  concrete model；最终候选仍需既有 solver/materialization 与 concrete replay；
- 当前等级 I/T。下一阶段应实现 pointer PHI/select 的 provenance union 和
  path-sensitive alias-set merge，再研究跨函数 object references、multi-instance
  heap identity 与按需 SMT Array fallback；超过 finite bound 时继续拒绝，不能
  静默 concretize。

## 69. F74：Guarded Pointer PHI/Select Provenance Union（2026-07-27）

- 研究问题：F73 只允许一个 memory op 的所有 candidate 属于同一 object，因此
  `select cond, &a[i], &b[i]` 和由控制流 merge 产生的 pointer PHI 会被拒绝。若只
  保留最终 numeric address，就会丢失“哪条边选择了哪个 object”的 provenance；
  这对地址相同的 frame-local slot、heap lifetime、read-only 属性和 null/UB 分支
  尤其不可靠；
- 双轨 pointer 表示：pointer SSA 仍以目标 pointer width 的 BV 执行普通
  `select` 或 PHI edge copy，保持真实地址依赖；compiler 另行递归构造
  `PointerAlternative={StaticPointer,guards}`。select 两臂分别附加
  `condition==1/0`，PHI 则为每个 incoming edge 写入独立 32-bit discriminator，
  再附加 `pointer_tag==incoming_index`。因此 provenance 不依赖 synthetic address
  是否唯一，也不会把相同地址的不同控制流来源错误合并；
- Artifact contract：union memory op 使用 `alias_cases`，每个 case 保存一个对象内
  的非空去重 `addresses`、非空 `guards`，以及可选的 F73
  `alias_index/index_bits/min/max`。一个 case 内必须属于同一 compatible object，
  但不同 case 可以属于不同 global/input/stack/heap object。旧的单对象
  `aliases` schema 保持兼容，二者同时出现会被 validator 拒绝；
- 有界性：递归 provenance 最多 256 alternatives，单 case 和整个 union 的地址
  总数均受 `SYMCC_LIVE_ALIAS_LIMIT` 约束，executor 对外部 artifact 另设 256
  aliases 和每 case 64 guards 的硬上限。limit 作用于 union 总量，不能通过拆成
  多个对象 case 绕过；
- Executor 语义：`_memory_alias_candidates()` 对每个 case 独立恢复 owner，
  将 selection/PHI guards、可选 signed no-wrap index domain 和
  `address==candidate` 相与。load 在全部 guarded candidates 上生成 finite ITE；
  store 按 candidate owner 生成逐字节 guarded read-over-write。所有有效
  candidate condition 的 OR 进入 path frame，memory op 本身仍不 eager fork；
- Object/lifetime 复检：每个 case 独立应用 input actual length、top stack frame、
  heap live marker、read-only 和 byte bounds。未选择的 inactive stack/heap case
  不制造 runtime error；null load arm和 read-only store arm不生成 candidate，
  其 guard 因 union domain 被剪成不可行。含 stack/heap 的 union load仍要求同一
  pointer SSA 上有 dominating full-width store，heap allocation必须支配 load；
- 自动化证据：LLVM lit 覆盖跨 global pointer select/PHI load、跨对象 guarded
  store、每臂 one-term dynamic GEP、null arm pruning、整个 union alias limit 和
  cyclic PHI fail-closed；C source 以真实 ternary pointer 和显式
  memory-derived branch 验证 Clang frontend。Python tests 覆盖手工 artifact 的
  cross-object load fork、per-object guarded store，以及 empty guards、
  mixed-object case、legacy/union contract 冲突拒绝；
- 结果：全量 Python unittest 258/258、LLVM/CMake lit 93/93、
  `cmake --build build -j2` 通过。F74 定向 LLVM、C 与 executor tests 全部通过；
  `py_compile`、Markdown links 与 whitespace 检查见本阶段最终验证记录；
- 研究定位：该设计接近 object-sensitive value-set analysis 与 guarded symbolic
  memory expansion的交叉点，并延续 GenSym portable continuation 与 KLEE
  object-bound memory 的原则。它保留 path guard 后再做 finite expansion，而不是
  根据当前 concrete pointer 猜唯一对象；但它仍不是全程序 points-to analysis、
  通用 SMT Array memory 或完整 LLVM pointer semantics；
- F74 阶段仍保守拒绝 cyclic pointer PHI、以 select/PHI 为 base 的后续 GEP、
  pointer load/store/compare、跨函数 pointer 参数/返回/escape、multi-term GEP、
  dynamic/multi-instance allocator、nonzero address space 和超过 finite bound 的
  union。F75 已补上 bounded multi-instance identity 与 GEP-after-union；其余边界
  见下一节。未通过 R 级 benchmark 前不宣称 coverage 或性能达到 SOTA。

## 70. F75：Bounded Multi-Instance Heap Identity（2026-07-28）

- 研究问题：F72 为每个 `malloc` call site 只预留一个对象，循环或多路径中第二个
  未释放实例会触发 double-allocation。直接把 site 当作 object identity 会错误合并
  同站点的不同 lifetime；使用宿主 allocator 地址又会破坏 checkpoint 的跨进程
  可移植性。F75 因此把 “allocation site” 与 “runtime instance slot” 分开建模；
- Compiler pool layout：每个 direct `malloc(constant nonzero size)` site 预留固定
  容量的 16-byte aligned synthetic slots。`SYMCC_LIVE_HEAP_SITE_CAPACITY` 默认 4，
  用户范围 1--64；每个 slot 仍受 `SYMCC_LIVE_HEAP_OBJECT_LIMIT`、全局
  `SYMCC_LIVE_MEMORY_LIMIT` 和目标 pointer range 约束。空间不足时整个 lowering
  structured reject，不生成截断 pool；
- Stable identity 与 artifact：每个 heap object 保存同一 stable `site` 及不同
  `slot`，并携带 `capacity`、`allocation=bounded-pool-infallible`、
  `lifetime=runtime-alloc-free`。`heap_alloc` 保存严格按 slot 排序的 `addresses`
  和 `capacity`；validator 要求一个 site 恰有 `capacity` 个对象、slot 完整覆盖
  `[0,capacity)`、大小一致、地址不重叠且只有一条 allocation instruction。旧的
  `bounded-infallible`/`address` 单槽 artifact 仍可读取，但不能与 pool contract
  混合；
- Canonical allocation semantics：executor 每次选择地址序中第一个没有
  `@heap:live:<base>` marker 的 slot。该 first-free 规则在当前不允许 pointer
  ordering、跨函数 escape 和任意 allocator metadata 的子集中，给 heap-isomorphic
  allocation history 一个确定性代表；它减少仅由可交换空闲 slot 命名造成的状态
  分裂，但不是对所有 C heap observation 的等价性证明；
- Exhaustion 与 lifetime：所有 slot 存活时，执行器显式报
  `continuation heap pool is exhausted`。当前 bounded-infallible 模型不合成
  `malloc == NULL` child，因此 exhaustion 是模型边界而非目标程序可见分配失败。
  `heap_free` 清理被选 slot 的 live/init markers；后续分配可 first-free 复用该
  slot，且旧 backing bytes 仍因 init markers 清除而不可读；
- Pointer provenance：malloc SSA 不再绑定一个静态地址，而是产生每个 slot 一个
  `PointerAlternative`，guard 为 `malloc_result == slot_base`。普通 load/store
  复用 F74 `alias_cases`，把 slot guard、对象 owner、可选 F73 index domain 和
  numeric address equality 一起验证；因此同站点多个 live instance 不会因共享
  site ID 被错误合并；
- GEP-after-union：GEP provenance 改为递归应用到每个 base alternative；生成的
  runtime pointer BV 则从真实 base SSA 加 constant/one-term symbolic offset，
  而不是从某个 synthetic static base 重建。这同时支持 malloc pool pointer 和
  select/PHI 后的 GEP，并保持 address semantics 与 object provenance 双轨一致；
- Initialization proof 修正：union load 的 dominating-store 检查不再要求 store
  与 load 使用同一个 pointer SSA，而是比较每个 alternative 的 object/slot base、
  offset、dynamic index、scale 与覆盖宽度。这既处理 Clang `optnone` 生成的等价
  不同 GEP SSA，也保持“每个可选对象均已完整初始化”的 must-property；
- 自动化证据：LLVM IR 在同一 loop allocation site 连续产生两个同时 live 的
  实例并返回 21；容量 2 的第三次分配验证 exhaustion。C source 使用真实 malloc
  loop 验证 frontend。新增 union 后 GEP 用例区分两个 global array。Python
  executor tests 在第一次分配后暂停，确认只有 slot 0 live，恢复后确认 slot 0/1
  的 live/init markers 均持久化；并验证 exhaustion、缺失 slot 和地址乱序
  artifact fail closed；
- 验证结果：`cmake --build build -j2`、全量 Python unittest 260/260、
  LLVM/CMake lit 93/93、`test_distributed_state.py` 48/48、Python syntax 和
  whitespace checks 通过。pool contract tests 还覆盖过窄 pointer width 与缺失
  explicit capacity 的载入期拒绝；
- 研究定位：这是 allocation-site abstraction、object-sensitive finite value set
  与 canonical heap naming 的有界组合。它为后续 POSE 风格 heap-state quotient
  和 live-state search 提供稳定 instance identity，但尚未实现 graph
  isomorphism、lazy object materialization、path-optimal state merging 或完整
  libc allocator；
- F75 阶段仍保守拒绝 dynamic malloc size、calloc/realloc/custom allocator、
  symbolic pointer-union free、pointer-valued memory/compare、跨函数 pointer
  参数/返回/escape、cyclic pointer PHI、multi-term GEP、超过 finite alias/pool
  bound、nonzero address space 和 resource-exhaustion branch。F76 已补上 bounded
  direct-call pointer/object references；其余边界见下一节。在真实
  heap-manipulating benchmark 完成等 CPU 多轮实验前，不宣称 POSE 等价或
  coverage/performance SOTA。

## 71. F76：Bounded Cross-Function Pointer/Object References（2026-07-28）

- 研究问题：F68--F75 的 direct internal call 只接受 integer 参数/返回值。把 pointer
  仅作为目标宽度 BV 传入 callee 虽能保留数值，却会丢失 underlying
  global/input/stack/heap object、read-only、lifetime 和 initialization owner；
  反过来把 caller 的 LLVM `Value*` guard直接写进 callee artifact 又会跨越 frame
  namespace，无法 checkpoint/replay。F76 因此在数值 SSA 之外生成 bounded
  interprocedural object-reference summary；
- Summary 构造：对每个 non-entry pointer formal，compiler 扫描全部可达 direct
  call sites，递归恢复 actual 的 F74/F75 alternatives，去重
  `(object,address,offset)` 后在 callee 中重写为 `formal_arg==candidate_address`
  guards。synthetic memory objects 全局不重叠、call graph 无递归，因此数值相等可
  作为当前 bounded subset 的稳定 object discriminator；候选硬上限 256，memory
  operation 仍受 `SYMCC_LIVE_ALIAS_LIMIT` 总量限制；
- Pointer return：internal pointer call 汇总 callee 所有 return sites 的 object
  alternatives，并在 caller 重写为 `call_result==candidate_address`。返回 formal
  pointer 可以继续跨多层 forwarding；global/input 和仍存活的 heap object 可以
  返回。数值依赖不由 summary 重新构造，而由 executor 把 callee return expression
  digest 原样绑定到 caller call SSA，因此 guard 与真实 return relation共享一个
  expression DAG；
- Stack lifetime：caller stack pointer 传入 callee 时，memory object 仍声明原
  owner function。executor 在无递归 frame stack 中唯一定位 owner depth，并以该
  depth 读取/写入 `@stack:init:<depth>:<address>`；callee 内 pause/checkpoint 后
  owner frame 与 markers 一起恢复。callee return 时只清理自己的 depth，所以对
  caller stack 的初始化效果保留；
- Escape 边界：任何 return alternative 若 rooted in 当前 callee 的 alloca，
  lowering 立即以 `pointer return escapes the callee stack frame` 拒绝，不能依赖
  return 后的 runtime failure 假装安全。经 formal 传入、实际属于更外层 caller
  的 stack object 可原样返回，因为 owner frame 仍活动；recursive call graph
  继续 fail closed，避免 owner function 对应多个 depth；
- Initialization proof：local stack/heap alternatives 仍要求同函数 dominating
  full-width store 和 heap allocation dominance。标记为 interprocedural 的
  alternatives 不伪造跨函数 dominator proof，而由 runtime live/init marker
  强制检查；未初始化 caller stack、inactive heap、read-only store 和 frame
  失活仍在执行时 fail closed；
- Artifact contract：internal function 可带
  `pointer_params=[{index,bits}]` 和 `pointer_return_bits`；call 必须带完全一致的
  `pointer_args` 与可选 `pointer_result_bits`，pointer return instruction 带
  `pointer_bits`。validator 独立复检 parameter index 唯一性、1--64 bit width、
  call arity、callee signature 和 result destination；runtime 再对 expression
  digest 的真实 width检查。旧 integer-only hand artifact 无需新增字段；
- 有意拒绝 symbolic actual：若 actual pointer 自身含 caller-side symbolic GEP
  term，F76 报 `cross-function symbolic pointer requires caller-domain transport`。
  仅把它展开成地址候选会丢失原 index 的 signed/no-wrap domain，并可能重新接纳
  wrapped pointer path。当前支持 constant/interior pointer、select/PHI union、
  heap-pool alternatives 和任意层数的 formal forwarding；后续必须把 caller
  domain certificate 作为显式 hidden argument 才能放宽；
- 自动化证据：LLVM lit 覆盖 pointer select 传给 helper 后 constant GEP/read、
  pointer formal 经 echo return 再传给第二 helper、callee 写入并读取 caller
  stack、callee 返回已初始化 heap pointer并由 caller load/free；负例覆盖 callee
  stack escape 和 caller symbolic-GEP domain。C source 使用 `noinline,optnone`
  helper 验证真实 Clang stack pointer 参数与 heap pointer 返回；
- Executor tests：手工 artifact 在 callee store 后暂停，确认 frame 为
  `[main,helper]`、marker 写在 depth 0 而非 depth 1，恢复后返回 41；pointer echo
  contract 返回 static byte 42，并对缺失 `pointer_args`、错误 return width
  fail closed；
- 验证结果：`cmake --build build -j2`、全量 Python unittest 262/262、
  LLVM/CMake lit 93/93、`test_distributed_state.py` 50/50、Python syntax 与
  whitespace checks 全部通过；两个 continuation lowering lit files 定向为
  2/2；
- 研究定位：这是 acyclic direct-call graph 上的 finite object-sensitive value-set
  summary，连接 GenSym portable frames 与 KLEE-style object bounds。它不是
  context-sensitive whole-program points-to、general escape analysis、separation
  logic heap summary 或 native ABI capture；候选数可能随 call sites 增长，超过
  bound 必须拒绝而非 concretize；
- 当前等级 I/T。仍拒绝 indirect/function-pointer call、recursion、varargs、
  caller-side symbolic-GEP actual、pointer-valued memory、pointer comparison、
  callee-stack escape、external allocator/resource、nonzero address space 和
  exception unwinding。F77 已补上 state-local incremental solver context；
  cross-function dynamic-domain transport 与 richer escape summary 作为后续
  pointer semantics 工作包。

## 72. F77：CAS-Rooted State-Local Incremental Solver Contexts（2026-07-28）

- 研究问题：F68 的 feasibility pruning 在每次 branch/assume probe 时恢复完整
  parent-linked CAS solver-frame chain、递归 lowering 全部 expression、写临时 SMT2，
  再启动一次 `symcc-query-solver --generic`。同一 symbolic branch 的 true/false
  alternatives 具有完全相同的 path prefix，却重复承担 O(path depth) 解析和进程
  启动成本；MPI worker 又按 lease 重建 executor，使 checkpoint 邻近性无法转化为
  solver locality。F77 将 immutable `path_condition_root` 直接用作 context identity；
- 三级 context acquisition：
  1. exact-root hit 直接取得已存在的 `z3::solver`，对 candidate assertion 执行
     `push/from_file/check/pop`；
  2. root miss 但 parent-root hit 时，新建 solver、复制 parent 的 asserted formula
     vector，只解析当前 CAS frame delta；
  3. worker 冷启动或 parent eviction 时，从完整 CAS frame chain 重建目标 root。
  第三级保证 cache 完全可丢弃，checkpoint 在不同进程/节点恢复时不依赖隐藏 solver
  pointer；
- Helper protocol：`symcc-query-solver --server` 保留既有 QueryStore 五字段请求，
  新增八字段 live request：
  `(request,timeout,root,parent,full-prefix,frame-delta,target,check-only)`。
  `check-only` 禁止为仅需 SAT/UNSAT 的 live probe 构造 solution generator；响应新增
  `prefix_parent_hit`，与既有 `prefix_cache_hit` 区分结构派生和 exact reuse。
  QueryStore/PSCache 的旧协议与输出字段保持兼容；
- Prefix representation：executor 把每个 CAS frame 规范化为
  `(input declarations, assertion lines)` fragment。child prefix 通过 declarations
  set union 和 assertion concatenation 构造，避免重复 declare 或重新遍历整个
  expression DAG。prefix/delta/target SMT files、frame metadata 和 fragment 均为
  有界 LRU/FIFO cache；CAS digest 使缓存键同时具备内容身份与跨 checkpoint 稳定性；
- MPI 生命周期：live executor 从 per-lease 临时对象提升为 per-worker 长寿命对象。
  `resume()` 只重置当次 telemetry，不清空 solver process、context、fragment 或 frame
  cache；正常 `TAG_STOP`/context-manager/析构路径关闭 helper 并删除临时 artifacts；
- 可信退化：`SYMCC_LIVE_INCREMENTAL_SOLVER=0` 可执行严格 one-shot 消融。server
  startup、协议、pipe、timeout 或 JSON 失败会打开 executor-local circuit breaker，
  关闭残留进程并回到完整 CAS path 的 `--generic` query。SAT/UNSAT 决策仍来自同一
  QF_BV formula；UNKNOWN、unsupported lowering 和 solver unavailable 继续保守保留
  state，不能因优化路径故障剪枝；
- 可观测性：execution result 分别记录 exact hit、parent hit、cold rebuild、当前
  context entries、server starts/failures、one-shot fallback、SMT artifact/
  fragment 与 CAS frame metadata cache hit/miss。计数按 `resume()` 清零，但 cache
  持续存在，因此 warm checkpoint resume 可以直接验证跨 lease/local invocation
  复用；
- 自动化证据：两层独立 symbolic branch 产生四条可行路径、六次 feasibility
  checks。结构性结果固定为 1 次 cold rebuild、2 次 parent derivation、3 次 exact
  hit；同一 executor 再恢复第一层 checkpoint 时为 2 次 exact hit、0 rebuild、
  0 process start。新 executor 冷恢复同一 checkpoint 为 1 rebuild + 1 exact hit，
  证明 CAS portability；关闭增量模式后六次 one-shot checks 仍得到相同四个结果。
  helper 在 server handshake 前退出会触发一次 circuit breaker，随后六次 one-shot
  仍保持等价；该负例还在 `PYTHONWARNINGS=error` 下验证 stdin/stdout/stderr 与
  子进程全部关闭。原 derived-UNSAT pruning 与 QueryStore PSCache server tests
  同时通过；
- 验证结果：`cmake --build build -j2`、全量 Python unittest 265/265、
  LLVM/CMake lit 93/93、`test_distributed_state.py` 53/53、F77 定向 3/3、
  legacy QueryStore tests 13/13 与 PSCache lit 1/1、Python warnings/syntax、
  whitespace checks 全部通过；
- 研究定位：该实现对应 Triereme/Marco 类 trace/solve 解耦中的 persistent prefix
  context，以及经典 incremental SMT 的 assumption-local push/pop。创新点不是重新
  命名 solver cache，而是把分布式 continuation 的 CAS root、solver context identity
  和可恢复 parent delta 统一为同一内容寻址坐标。parent-derived solver 当前复制
  asserted formulas，不声称复制 Z3 内部 learned clauses；exact-root context 可保留
  solver 自身在 push/pop 后保留的内部增量状态；
- 当前等级 I/T。已消除单 worker/state-local 的重复 solver process 和 prefix parse，
  但尚无 R 级公开 benchmark 证据，也未实现跨 worker solver-context transport、
  learned-clause serialization、distributed shared solver service、unsat-core-guided
  state subsumption 或 backend-neutral incremental protocol。F78 已在其上接入
  runtime-sized nullable allocator；后续应以 F77 telemetry 做 solver-cost/
  state-amplification 消融。

## 73. F78：Nullable Runtime-Sized Allocator 与 Conditional Heap State（2026-07-28）

- 研究问题：F72/F75 的 heap pool 为每个固定大小 `malloc` 调用点预留稳定对象，
  但把 live marker 的“键存在”当作已分配，并在容量耗尽时抛出执行器异常。该模型
  无法表达 `malloc == NULL` 分支、符号请求大小、`calloc` 溢出/零初始化或
  `realloc` 的条件 lifetime，也会把物理预留容量误当成目标程序可访问大小。F78
  将 heap state 从集合成员关系升级为内容寻址的布尔/位向量表达式；
- 双重边界：动态站点的每个 slot 由 `SYMCC_LIVE_DYNAMIC_HEAP_LIMIT` 给出物理上界，
  `@heap:size:<base>` 保存当前运行时逻辑长度。每次 concrete 或 finite-alias
  load/store 都把 `live(base) AND offset+width<=logical_size(base)` 加入 defined
  domain。于是 backing image 只提供有限枚举空间，不会授权越过请求长度的访问；
- Nullable first-free：`bounded-pool-nullable` allocation 对每个 slot 构造
  `select_i = valid_size AND all_previous_live AND NOT live_i`，返回按稳定地址排序的
  nested ITE 或 null。新 live、size 和逐字节 init marker 都以 `select_i` 条件更新，
  因此不同 OOM/slot 路径可以共享一个 expression DAG 并跨 checkpoint 恢复。零大小、
  超界和池耗尽成为目标可见 null 结果，不再是宿主异常；
- LLVM pointer failure path：compiler 支持 pointer `icmp eq/ne`，并继续以
  `result==slot_base` guards 保留 object provenance。null arm 不进入 memory alias
  domain；目标程序显式检查分配失败时可以正常 fork，未检查而直接解引用时则由
  defined-domain 约束排除 null/OOM 路径；
- Calloc：`calloc(count,size)` artifact 保存两个原始 bit-vector operands，不能先把
  它们在 compiler host 上相乘。executor 同时检查因子非零、wrapped product 除以
  safe count 后仍等于 element size，以及 product 不超过物理上界。选中 slot 的每个
  `offset<logical_size` 字节通过条件 ITE 写零并标记初始化；复用 slot 时旧内容不能
  泄漏到新的 calloc 对象；
- Realloc：当前实现选择 C 标准允许的 bounded in-place strategy，而不伪造任意
  moving allocator。`heap_realloc` 只接受有限 provenance 中的非空 heap base：
  `new_size==0` 条件释放并返回 null；`0<new_size<=capacity` 保持地址，保留
  `min(old,new)` 已初始化字节并把扩展区设为未初始化；超界返回 null且旧对象的
  live/size/init 全部保持。结果仍携带原对象 alternatives，可继续 GEP/load/free；
- Conditional free：dynamic allocator 返回值是符号 pointer BV，free 不再要求宿主
  可具体化地址。executor 对 null 或每个 `(address==base AND live)` 构造合法域，并
  条件清理 live/size/init。非法 base 与 double free fail closed；固定大小旧
  artifact 继续使用原有 concrete fast path；
- Artifact 与可信边界：validator 独立复检 nullable pool 的完整 slot 集合、
  `runtime-allocation-size`、operand width、physical max、calloc zero contract 和
  realloc base/strategy。新 lowering capabilities 为 `bounded-nullable-heap`、
  `runtime-sized-heap` 和 `bounded-in-place-realloc`。旧
  `bounded-infallible`/`bounded-pool-infallible` artifact 保持可读；
- 自动化证据：Python tests 覆盖 zero/超界 OOM、第三次分配池耗尽返回 null、物理
  槽内但逻辑对象外的访问、realloc 失败保留、扩展区未初始化和零长度释放；
  LLVM IR 与真实 C frontend 均覆盖 dynamic malloc、calloc、realloc 和 pointer-null
  branch。定向结果为 F78 continuation tests 6/6、`test_distributed_state.py` 61/61、
  LLVM/CMake lit 93/93，compiler `-Werror` build、Python syntax 与 whitespace
  checks 通过；包含 F79 后的全仓 Python unittest 为 273/273；
- 研究定位：该实现把 KLEE 风格 object bounds、allocation-site abstraction 和
  GenSym-style persistent state结合为有限、可迁移的 allocator relation。它不是
  glibc/jemalloc 模型，也不声称 POSE heap path optimality。仍未实现 moving
  realloc、`realloc(NULL,n)`、custom allocator summary、heap graph isomorphism、
  pointer-valued memory、unbounded object count或外部 allocator state；
- 当前等级 I/T。下一依赖项是 caller-domain symbolic pointer certificate，使跨函数
  symbolic GEP 不丢 no-wrap/domain 证明；随后是 indirect-call points-to 和
  effect-summary 驱动的 external virtualization。公开 benchmark 的 equal-CPU
  20-repeat 结果仍应单独记录为 R 级证据，不能由本节功能测试替代。

## 74. F79：Caller-Domain Symbolic Pointer Certificate（2026-07-28）

- 研究问题：F76 能把有限 object/address provenance 汇总到 direct callee，但遇到
  caller 内的 symbolic GEP 时只能丢弃动态 index，因而无法证明实际地址仍属于有限
  候选域。只传 numeric pointer 会把“当前 concrete 地址可用”误当成“所有 symbolic
  模型均合法”；只在 callee 重新做地址相等判断又会遗漏 caller 的 signed
  no-wrap/index range。F79 把这个定义域证明提升为显式、可求解且可恢复的调用约定；
- Certificate 构造：每个 pointer actual 的所有 provenance arms 分别合取
  select/PHI/heap-result guards 与动态 index 的 `sge(min)`、`sle(max)`，再对 arms
  做析取。结果不是 host boolean 或 metadata hint，而是 continuation expression
  DAG 中的 1-bit BV，因此可以依赖 symbolic input、跨 CAS checkpoint 保留并进入
  QF_BV feasibility check；
- 参数传输：compiler 在原始 ABI 参数之后追加稳定命名的
  `__ptr_domain_<argument-index>` hidden parameter，并输出 function-side
  `pointer_domains=[{index,parameter}]` 与 call-side
  `pointer_domains=[{index,argument}]`。Callee 的每个 finite object alternative
  同时带 `formal==candidate_address` 和 `domain==1` guards。动态 actual 被有限展开
  为 object 内候选 offset，默认排除 one-past 地址，最大集合继续受 256 项
  provenance bound 约束；
- 返回传输：pointer-returning function 声明 `pointer_return_domain=true`，每条
  pointer return 携带 `pointer_domain` expression；调用点用
  `pointer_domain_dst` 接收该表达式。后续 GEP/load/store/free 对 call-result
  provenance 加入 `result_domain==1`，因此经 identity/selector helper 多次转发后
  仍不能绕过原 caller 的定义域；
- Artifact 可信边界：validator 精确匹配 pointer 参数索引、hidden domain
  parameter/argument 位置、call arity、1-bit runtime width、pointer-return domain
  与 destination。缺失、重复、错位或与 callee contract 不一致的 mapping 在创建
  checkpoint 前拒绝；runtime 还复检每个 domain actual/return expression 的位宽。
  旧 F76 artifact 未声明 domain contract 时保持可读，但新 compiler artifact 以
  `caller-domain-pointer-certificate` capability 标明更强合约；
- 自动化证据：手写 continuation tests 覆盖合法 symbolic address、false
  certificate 导致 infeasible、缺失 call mapping、pointer-return domain 正向传输
  以及缺失 return/destination 的 tamper rejection。LLVM IR 与真实 C frontend 均
  将 `global + symbolic_index` 传给 direct callee 并正确读取；既有 pointer
  argument/echo/heap-return/caller-stack 用例继续回归。F79 定向 executor tests
  2/2、`test_distributed_state.py` 61/61、全仓 Python unittest 273/273、
  LLVM/CMake lit 93/93、compiler build、syntax 与 whitespace checks 均通过；
- 正确性边界：certificate 只证明 caller 已枚举的 finite object domain，不提供
  任意整数到指针的 provenance 恢复。当前仍保守拒绝多动态项 GEP、超过 alias bound
  的对象、递归、indirect call、callee-stack escape、pointer-valued memory 与
  external pointer effects。排除 one-past summary 是保守不完备选择，不会接纳
  LLVM UB 路径；
- 研究定位：该实现接近 capability-carrying pointer / proof-carrying state 的
  工程化形式，把 interprocedural points-to summary 与 path condition 放入同一
  content-addressed continuation state。它解决了 F76 的 caller-domain 丢失，但不
  等同于完整的 context-sensitive Andersen/SeaDsa heap graph。当前等级 I/T；
  下一依赖项是 bounded indirect-call points-to dispatch，再以 effect summary
  处理纯函数、只读 libc 与显式外部状态虚拟化。

## 75. F80：Bounded Indirect-Call Points-to Dispatch 与 Typed ABI（2026-07-28）

- 研究问题：此前任何 `getCalledFunction()==nullptr` 都与未知 external effect 一起
  被拒绝，即使 LLVM 已把目标限制成两个内部函数的 `select` 或 acyclic PHI。直接
  按 concrete witness 选择目标会漏掉路径；仅保存函数名列表又无法证明 runtime
  selector、PHI edge 和目标一致。F80 为 address-taken internal functions 建立有限、
  可验证的 continuation dispatch；
- 有限 points-to：compiler 递归解析 function constant/pointer cast、`select`、
  acyclic pointer PHI 和 null arm，最多保留 64 个 target cases。Reachability 与
  recursion analysis 同时加入全部间接边，不再只扫描 direct call。目标必须是
  non-variadic、非 intrinsic、非 external internal function，且 LLVM parameter/
  return types与 call site 精确一致；
- Stable function identity：address-taken targets 按函数名排序分配非零
  `function_id`；function-pointer SSA 以目标位宽的 BV ID 执行。`indirect_call`
  artifact 保存 `target` selector、`target_bits` 和
  `{function,id,guards}` cases。Runtime 对每个 case 同时证明
  `selector==function_id` 与 select/PHI discriminator guards，调用 Z3 筛除
  infeasible cases，并为多个可行目标创建独立 CAS continuation children；
- Typed continuation ABI：深度审查发现旧 schema 只显式记录 pointer widths，不能
  独立证明两个 integer callees 真正同签名。F80 因而为 compiler functions 增加
  `param_bits`/`return_bits`，call 增加 `result_bits`。Validator 要求 indirect
  targets 都具备 typed signature 且完整 tuple 相同；runtime 在参数绑定、callee
  return 和 caller result binding 三处复检 expression width。旧手写/direct-call
  artifact 未声明 typed fields 时保持兼容；
- Checkpoint/return：每个 dispatch child 保留相同 caller PC、symbolic store、
  COW memory 与 path root，只追加 target assertion 并压入普通
  `ContinuationFrame`。因此既有 return destination、pause/resume、lease/fencing
  和 caller-domain pointer argument逻辑无需旁路；solver UNKNOWN 时保守保留
  target，而不是错误剪枝；
- Artifact 可信边界：validator 复检 function ID 非零且全局唯一、case ID 与 callee
  metadata 一致、selector/guard width、target 数量、call arity、pointer-domain
  mappings、typed parameters/return 和 call graph。错误 ID、异构签名、缺失
  target、超过 bound 或递归间接边在初始 checkpoint 前 fail closed；
- 自动化证据：LLVM tests 分别覆盖 symbolic `select` 和 PHI function pointer，
  真实 C frontend 覆盖 typedef function pointer；两目标路径分别得到不同返回值。
  手写 artifact test 固定观察一次 target fork，并篡改 function ID 与 typed
  signature 验证拒绝。F80 阶段 `test_distributed_state.py` 62/62、
  LLVM/CMake lit 93/93、compiler `-Werror` build、Python syntax 与 whitespace
  checks 通过；
- 正确性边界：当前不支持从 pointer argument/heap/global memory 加载的 function
  pointer、超过 64 target、pointer-returning indirect call、varargs、musttail、
  inline asm、external target 或 recursive indirect SCC。Null arm没有 dispatch
  case，因此被定义域约束变成 infeasible。该实现是 bounded context-sensitive
  dispatch，不声称完整 Andersen/Steensgaard points-to；
- 研究定位：F79 让数据 pointer 携带 domain proof，F80 则让 control pointer
  携带有限 target proof，两者共享 QF_BV/CAS state 和 fork mechanism。当前等级
  I/T；下一项依赖是 effect-summary 驱动的 external-call virtualization，优先从
  deterministic/pure libc 与显式 memory region effects 开始。

## 76. F81：Deterministic External Memory-Compare Effect Summary（2026-07-28）

- 研究问题：将所有 external call 一律拒绝能保持保守性，却使真实 parser 中最常见
  的 magic/header 比较无法进入 live-state engine；把宿主 libc 结果具体化又会冻结
  symbolic bytes。F81 首先选择无写副作用、语义可有限展开的 `memcmp`/`bcmp`，
  建立 external effect virtualization 的最小可信基线；
- Lowering strategy：长度必须是 compile-time constant 且不超过 64 bytes。
  Compiler 为两侧每个 byte 生成既有 `load`，再用 `eq`、unsigned `ult` 与 nested
  `select` 构造 first-difference lexicographic result。结果规范化为目标返回位宽的
  `-1/0/+1`；这满足 C 对 `memcmp` 只保证返回值符号的契约，不能声称复刻特定 libc
  的字节差数值；
- No privileged opcode：summary 不增加 executor opcode，也不调用 host libc。
  每个 generated load 继续经过 object bounds、input logical length、heap
  live/logical-size、stack owner、read-only、per-byte initialization、finite alias
  与 caller-domain guards；CAS expression DAG、QF_BV solver、checkpoint 和 MPI
  resume 因而自动适用。Artifact capability 仅标记
  `bounded-external-effect-summary`，语义本体仍是可审计的普通 IR；
- Pointer unions：对 select/PHI/heap/cross-function pointer alternatives，byte
  offset 同时作用于 runtime numeric pointer 与每臂 object-relative provenance。
  Null/OOB/uninitialized arm不产生定义良好的 load path，defined-domain
  constraint 会剪掉相应状态；跨对象候选仍受全局 alias limit；
- Zero/bound contract：`n==0` 直接生成零值，不解析或解引用 pointer，因此
  `memcmp(NULL,NULL,0)` 保持定义良好。Symbolic length、`n>64`、非整数/过窄返回
  或非 pointer operands 结构化拒绝，不按 concrete witness 截断。64 是 artifact
  和 expression-size bound，不是目标程序 ABI 假设；
- 自动化证据：LLVM/C input-buffer tests 对 `ABC` 与 symbolic bytes 探索 equal/
  unequal；LLVM lexicographic test分别覆盖 `<`、`==`、`>`；zero/null、65-byte
  rejection 和 cross-object pointer-union compare 均有定向 RUN。F81 使用现有
  executor contract，因此不新增手写 schema。阶段 compiler `-Werror` build、
  `test_distributed_state.py` 62/62、全仓 Python unittest 274/274、LLVM/CMake lit
  93/93、Python syntax 与 whitespace checks 均通过；
- 正确性边界：尚不支持 symbolic length、locale、case folding、`strcmp`/
  `strncmp` 的 NUL termination、`strlen`、memory writes、errno、I/O、syscall、
  TLS、callback 或 nondeterministic external state。对 `bcmp` 返回任意非零值的
  代码可正确分支，但依赖具体非零数值的非可移植代码会看到 canonical sign；
- 研究定位：该实现对应 compositional symbolic execution 中的 verified library
  summary，但刻意采用 lowering-to-core IR 而非 opaque model。当前等级 I/T；
  下一阶段应扩展 bounded NUL-aware string summaries 与 memcpy/memset region
  effects，并继续让 validator 从展开后的 core operations 独立复检。

## 77. F82：Bounded External Region-Write Effect Summaries（2026-07-28）

- 研究问题：真实 parser 和结构化输入处理常通过 `memcpy`、`memmove`、`memset`
  更新短 buffer。将调用整体拒绝会切断大量后续路径；直接调用宿主 libc 则无法把
  symbolic bytes、logical object bounds 和初始化状态写回 continuation checkpoint。
  F82 将这三类确定性、有限 region effect 编译成可迁移的核心 memory IR；
- 双 frontend：compiler 同时识别标准 C declaration call 与 LLVM
  `llvm.memcpy`/`llvm.memmove`/`llvm.memset` intrinsic。长度必须是 compile-time
  constant 且不超过 64 bytes，volatile intrinsic fail closed。标准 libc 形式返回
  destination pointer identity；void intrinsic 不伪造返回值。生成 artifact 继续以
  `bounded-external-effect-summary` 标明 external virtualization；
- `memmove` 快照语义：所有 source byte loads 在任何 destination store 之前生成，
  因此 source/destination 完全相同、前向重叠和后向重叠都读取调用发生时的源区域，
  不会被先前写入污染。这一顺序直接编码在 continuation instruction list 中，无需
  executor 专用 opcode；
- `memcpy` 定义域证明：compiler 对 destination/source 的所有有限 pointer
  alternatives 和 dynamic-index aliases 枚举地址区间，使用扩宽整数比较证明每一对
  `[base,base+n)` 均不相交；只要一个可行候选无法证明 disjoint 就整体拒绝。该策略
  保守牺牲部分带 guard 关联的合法程序，但不会把 C 中重叠 `memcpy` 的未定义行为
  误建模成 `memmove`；
- `memset` symbolic fill：第二参数作为目标位宽 BV 求值，再按 C 语义取低 8 bit，
  同一 symbolic byte 写入全部目标位置。普通 byte stores 会更新 page-COW memory
  和逐字节 initialization marker，因此随 checkpoint、MPI lease 和恢复保持一致；
- Object semantics：每个展开的 byte load/store 都继续使用 finite alias cases，
  复检 input logical length、heap live/logical size、stack owner/read-only、
  caller-domain certificate、pointer-union guards 和目标初始化。写入 read-only、
  null、越界或 inactive object 不会由 concrete witness 补全，而由原 memory-domain
  约束 fail closed；
- Zero/bound contract：`n==0` 不读取 source、不写 destination；libc 返回值仍是原
  destination numeric pointer，因此 `memset(NULL,x,0)` 可在不解引用 null 的前提
  下正确比较。Symbolic length、`n>64`、错误 signature、volatile intrinsic 或
  无法证明 disjoint 的 `memcpy` 输出结构化 rejection report；
- 自动化证据：LLVM tests 覆盖重叠 `memmove` 得到 `AABC`、input-buffer `memset`、
  symbolic fill byte、跨全局对象 `memcpy`、zero/null 和 overlap rejection；
  真实 C tests 额外经过 Clang 的 LLVM memory intrinsic 路径。阶段 compiler
  `-Werror` build 与专门 lowering/checker tests 通过；全量回归结果记录在阶段报告；
- 正确性边界：当前不接受 symbolic/over-64 length，不优化 guard-correlated
  conditional disjointness，也未建模 fortified variants、alignment promise、
  sanitizer interceptor、DMA/I/O memory、atomic/volatile region effect 或外部
  resource。NUL-aware string termination 仍需 guarded access semantics；
- 研究定位：F81/F82 形成 read-only 与 bounded write-effect 两个 verified library
  summary 基线。其关键属性不是 libc API 数量，而是 external call 被降到同一
  proof-carrying object-memory/CAS state，避免 opaque host execution。当前等级
  I/T；下一依赖项是 pointer-returning indirect dispatch，然后引入 guarded load
  以实现 bounded `strlen`/`strcmp`/`strncmp`。

## 78. F83：Pointer-Returning Bounded Indirect Dispatch（2026-07-28）

- 研究问题：F80 已能对有限 internal function-pointer target fork，但为避免丢失
  object identity，主动拒绝 pointer return。这使 factory/selector/visitor 风格的
  C callback 即使只在两个纯内部 helper 间选择，也无法继续解引用返回对象；
- Target-wise return summary：compiler 对每个 finite indirect target 独立遍历所有
  pointer return，递归复用 direct-call 的 bounded object provenance expansion，
  再对全 target 集合去重。每个对象仍由 call-result numeric equality 和
  `result__domain==1` 约束；callee return-side certificate 只在实际进入的 target
  frame 生成，因此未选 target 不能凭静态 union 伪造合法 provenance；
- Indirect pointer argument：callee formal 的 interprocedural summary 现在同时扫描
  direct call 与 finite indirect call sites。若 owner function 是 target set 成员，
  对应 actual pointer alternatives 会进入 callee object summary；hidden
  `__ptr_domain_<index>` ABI、signed GEP bounds 和 pointer-union guards继续按调用点
  传输；
- Runtime/validator reuse：没有新增 executor opcode。既有 `indirect_call` target
  feasibility fork 进入普通 `ContinuationFrame`；普通 return path绑定
  `dst`/`pointer_domain_dst`。Validator 已要求所有 target 的完整 typed signature
  tuple相同，其中包含 pointer parameter/domain mapping、pointer return width 与
  `pointer_return_domain`，因此缺失 destination、异构 target 或错误 certificate
  在创建 checkpoint 前 fail closed；
- 自动化证据：LLVM IR 与真实 C 均在两个 pointer-returning function targets 间
  symbolic dispatch，一个 target 返回固定 global，另一个返回 pointer actual，
  随后 caller load 得到 65/66。手写 artifact test观察 target fork，并篡改
  return-domain destination 与 target domain contract 验证拒绝；
- 正确性边界：target provenance 仍只来自 local constant/cast/select/acyclic PHI，
  最多 64 targets；data pointer summary 最多 256 finite alternatives。仍不从
  function-pointer argument/global/heap load做 general points-to，不支持 varargs、
  recursive SCC、external callback、callee-stack escape 或 pointer-valued memory；
- 研究定位：F83 完成了 F79 proof-carrying data pointer 与 F80 proof-carrying
  control pointer 的组合闭环。它是 context-sensitive bounded target/product
  summary，不是完整 Andersen/SeaDsa。当前等级 I/T；下一项以 guarded access
  表达 NUL-aware external string semantics。

## 79. F84：Guarded Access 与 Bounded NUL-Aware String Summaries（2026-07-28）

- 研究问题：把 `strlen`/`strcmp` 简单展开成固定次数普通 load 会错误要求 NUL
  之后的字节仍可读，尤其会把短 object、logical input 尾部和 heap logical-size
  之外的 backing memory 纳入定义域。F84 先引入通用 conditional memory semantics，
  再在其上构造 string library summary；
- Guarded load core：普通 `load` 可选携带 1-bit `guard`。Executor 对 access domain
  `D` 只提交 `NOT guard OR D`，结果为 `ITE(guard, loaded_value, 0)`；guard concrete
  false 时甚至不求值 address。`D` 仍包含 physical/logical bounds、finite alias
  address equality、pointer-union/caller-domain guards、heap live/size、stack owner
  和逐字节 initialization。Validator 限制 guard 只能出现在 load，runtime 独立复检
  expression width；
- `strlen`：从 active=1 开始逐字节 guarded load，first NUL 用 nested select记录
  offset，active 更新为 `active AND byte!=0`。对象候选最大 extent 与 64-byte 全局
  bound决定展开次数；末尾 `assume NOT active`，所以没有在定义域内终止的模型被
  剪枝，而不是读取 object 外的宿主零字节；
- `strcmp`：两侧只在此前 bytes 全部相等且非 NUL 时读取。首个差异产生 canonical
  `-1/+1`，同时停止后续 access；共同 NUL 返回 0。不同大小 pointer-union 的短 arm
  在后续 offset没有 alias case，但其 active 已为 false，因此仍满足 guarded
  domain；
- `strncmp`：长度必须为 compile-time constant `0..64`。`n==0` 不解析 pointer
  并返回 0；达到 n 时无需 NUL。若某个 candidate object 在 n 前结束，则 active
  必须已经因 NUL/差异变 false，否则定义域不可满足；
- Artifact/capability：summary 不增加 opaque string opcode，生成
  `load/binary/unary/select/assume`，并标记 `guarded-memory-access`、
  `bounded-nul-string-summary` 和 `bounded-external-effect-summary`。因此 CAS
  expression sharing、incremental QF_BV context、MPI checkpoint 和 branch fork
  全部沿用；
- 自动化证据：LLVM/C tests 覆盖 empty/`AB` pointer union 的 strlen、`AB`/`AC`
  strcmp、无 NUL 前两字节相等的 strncmp、n=0/null 和 symbolic n rejection。
  Input-buffer test证明 `strlen==logical_size` 不可行，不能借用 capacity backing
  zero；手写 artifact test证明 guard=false 可跳过物理 OOB，guard=true infeasible，
  8-bit malformed guard在 runtime 拒绝；
- 正确性边界：搜索与 `strncmp` 上界为 64，不支持 symbolic n、wide/locale/
  case-insensitive/multibyte string、`strcoll`、external locale state 或 fortified
  variants。超过 64 才出现 NUL/差异的路径被有界 `assume` 排除，属于显式
  under-approximation，不应表述为完整 libc semantics；
- 研究定位：该实现把 compositional library summary 的短路访问条件提升为
  proof-carrying memory domain，而不是用 host wrapper concretization。当前等级
  I/T；后续可在同一 guard primitive 上增加 `memchr`/`strchr` 与 bounded
  string-copy effect，并将动态 length交给可信 loop/array-theory lowering。

## 80. F85：Bounded Pointer-Returning Search Summaries（2026-07-28）

- `memchr(ptr,c,n)` 要求 constant `n<=64`，普通 byte loads 保持完整 n-byte region
  定义域，reverse nested select选择 first match；`n==0` 不解析 pointer并返回 null；
- `strchr(ptr,c)` 复用 F84 guarded load，active 在命中或 NUL 后关闭，最多搜索有限
  object extent/64 bytes，末尾要求已经命中或终止；needle 按 C 语义取低 8 bit；
- 返回指针不是无 provenance 的整数。Compiler 为 null 和每个有限 source
  object/offset candidate生成 `result==address` guard；dynamic base先按有限 alias
  contract 展开。因此返回值可继续 load、作为 pointer actual跨 frame传输或与 null
  比较，仍受 256 项 union 上界；
- 两种 summary 均只生成 core load/BV/select/assume，并标记
  `bounded-pointer-search-summary`。LLVM/C tests覆盖 first match、symbolic needle、
  pointer load、strchr short union、zero/null 和长度超过所有 object extent拒绝；
- 当前不支持 symbolic/over-64 `memchr` length、wide-character/locale search、
  general array-theory pointer result或超过 finite alias bound 的对象。等级 I/T；
  下一阶段用 conditional store 实现 bounded string-copy write effects。

## 81. F86：Guarded Memory Write 与 Bounded String-Copy Summaries（2026-07-28）

- 研究问题：`strcpy` 的写集合由 first NUL 决定，不能用固定次数无条件 store
  近似；否则既会覆盖 terminator 后的目标字节，也会要求短 source/destination 的
  不活跃 suffix 有效。`strncpy` 还要求在 source NUL 后持续写零。F86 将 F84 的
  conditional definedness 对偶扩展到 write effect；
- Guarded store core：`store` 可选 1-bit `guard`。Executor 只要求
  `NOT guard OR access_defined`，并将每个目标 byte 更新为
  `ITE(guard,new,old)`；guard 为 concrete false 时不求值 address/value，也不改变
  memory root。Symbolic address仍枚举 finite alias cases，每个候选写条件是
  `guard AND alias_domain`。Stack/heap 初始化 marker 同样以该条件更新，checkpoint
  恢复后不会把未执行写误报为已初始化；
- Snapshot 与 short circuit：compiler 在发出任何 destination store 之前，先以
  guarded loads 快照全部可能 source bytes。Active 初值为真，每读取非 NUL 字节后
  保持，读到 NUL 后关闭。`strcpy` 对第 `i` 个 byte 使用读取前的 active 作为写
  guard，因此精确写入 first NUL 而不触碰其后 suffix；在 bounded extent 内未终止
  的路径由 `assume !active` 剪枝；
- `strncpy`：长度必须是 compile-time `0..64`。它无条件写恰好 n bytes，source
  NUL 后的 guarded load结果为零，从而实现 padding；source object 在 n 前结束且
  尚未终止时不可行。`n==0` 不解析 source/destination，仍返回原 destination；
- Object/provenance contract：source 与 destination 的所有 finite pointer
  alternatives 必须能证明属于不同对象，避免把未定义 overlap 悄悄建模成
  `memmove`。普通 object/logical-size/liveness/read-only/caller-domain checks继续
  作用于每个 byte。返回值复用 destination 的有限 provenance，因此可继续
  dereference、跨 direct/indirect frame传递或与 null 比较；
- Artifact：摘要只生成 `load/store/binary/unary/assume` 等 core IR，并标记
  `guarded-memory-write`、`bounded-string-copy-summary`、
  `bounded-nul-string-summary` 与 `bounded-external-effect-summary`。Validator
  只允许 load/store 携带 guard，executor再次复检 condition width；
- 自动化证据：LLVM tests覆盖 `AB\0` 复制且保留 destination suffix、返回 pointer
  identity、empty/AB source union 的 66/88 条件写、`strncpy` NUL padding、
  n=0/null、same-object overlap rejection 与 symbolic n rejection；真实 C
  frontend以禁用 builtin folding的声明调用对拍。手写 artifact test覆盖 guard
  false 跳过物理 OOB、guard true infeasible 和 malformed 8-bit guard；
- 正确性边界：不支持 symbolic/over-64 n、可能重叠对象、fortified/wide/locale
  variants、unbounded strings、volatile/atomic destination、external resource 或
  general points-to。对象上限内无 NUL 的 `strcpy` 路径是显式 under-approximation。
  当前等级 I/T；下一优先级是补全 poison/undef/UB-sensitive LLVM integer semantics
  与 pointer-valued memory/general points-to。

## 82. F87：LLVM Integer Defined-Value Guards（2026-07-28）

- 研究问题：直接拒绝除法、符号 shift 和 optimizer 生成的 `nuw/nsw/exact` 会使
  大量普通 LLVM IR 无法导出；忽略这些条件则会把 UB/poison execution 当作正常
  路径。F87 采用 defined-value continuation 语义，将定义域证明显式降成 core
  `assume`，并沿 CAS solver root迁移；
- Division/remainder：`udiv/urem/sdiv/srem` 在求值前断言 divisor 非零；`sdiv`
  额外排除 `INT_MIN/-1`。Guard排在 binary instruction 之前，因此 concrete
  executor不会先触发宿主除零，symbolic divisor则由同一 incremental QF_BV context
  剪枝；
- Shift：`shl/lshr/ashr` 的 amount不再要求常量，而是断言 unsigned
  `amount < bitwidth`。这同时覆盖 symbolic 和 constant out-of-range poison，
  没有按当前 input witness截断 amount；
- Overflow flags：`add/sub` 通过 unsigned order或 sign transition验证，
  `mul nuw` 使用 safe-divisor `UINT_MAX/rhs` 上界，`mul nsw` 使用 signed
  reversible quotient并显式排除 inverse division overflow；`shl nuw/nsw` 分别用
  logical/arithmetic reverse shift证明未丢失有效位。两个 flag同时出现时两个
  condition都必须成立；
- Exact：exact `udiv/sdiv` 断言相应 remainder为零；exact `lshr/ashr` 将结果左移
  恢复原 operand并断言相等。Opcode先分类后读取 LLVM optional-data bits，避免
  `nuw` 与 `exact` 共用 bit位时被跨 subclass误判；
- Freeze 边界：对已定义 bounded integer，freeze仍是 identity。直接
  `freeze undef/poison` 需要一个可迁移、每次动态实例稳定的 nondeterministic
  choice primitive；当前没有该 primitive，因此结构化拒绝而非错误固定成零。
  对 flagged operation产生 poison后再 freeze 的执行，本阶段通过 defined-value
  assume排除，属于明确的 sound under-approximation；
- Runtime contract：artifact标记 `llvm-defined-value-guards`。Validator新增
  binary/unary operator白名单、1..64 bit结果和 operand形状检查；executor要求
  assume condition为 1 bit。SMT lowering与 concrete evaluator已有完整 BV div/rem/
  shift语义，因此不增加 opaque opcode；
- 自动化证据：LLVM tests覆盖 symbolic udiv/shift的多路径、有效 flag组合、constant
  divide-by-zero、signed division overflow、nuw/nsw overflow、non-exact division/
  shift的 infeasible结果，以及 freeze poison rejection；真实 C `/`、`%` frontend
  与手写 artifact operator/assume-width篡改也有定向测试。阶段 compiler
  `-Werror` build、LLVM/CMake lit 93/93 和定向 executor tests通过；
- 正确性边界：这不是完整 LLVM poison lattice。尚未支持 freeze undef/poison 的
  nondeterministic choice、select对 poison的精确非严格传播、vector/FP poison、
  inrange/GEP新 flags、poison-valued memory或 deferred poison consumption。
  当前等级 I/T；下一项建立 pointer-valued memory的有限 points-to sidecar。

## 83. F88：Bounded Pointer-Valued Memory Sidecar（2026-07-28）

- 研究问题：F74--F83 能在 SSA、参数和返回值中保留 pointer provenance，但
  `store ptr`/`load ptr` 会跨越 memory SSA边界。只把地址作为 64-bit整数写回会让
  后续 load无法证明其对象、lifetime和 bounds；直接把所有同类型对象合并又会制造
  不可行 alias；
- 双轨表示：pointer value按 DataLayout pointer width写入普通 page-COW memory，
  checkpoint仍保存真实 numeric bytes；compiler同时为受支持 load构造 finite
  provenance sidecar。每个 candidate继承 stored pointer的 select/PHI/object guards，
  再加入 `loaded_numeric == candidate_address`。后续 GEP/load/store/call沿用已有
  `alias_cases` 和 caller-domain certificate，无 executor专用 pointer opcode；
- Global cell：scalar address-space-0 global pointer initializer可以直接指向另一个
  bounded data global或 null。Layout先为每个对象分配稳定非重叠地址，再按 target
  endianness把地址序列化进初始 memory；load从 initializer恢复唯一 provenance。
  Constant-expression GEP表和 function-pointer initializer仍拒绝；
- Dynamic cell：同一函数内的 pointer slot必须由 exact same stripped storage SSA
  标识，并存在唯一、非 atomic/volatile、支配 load的 pointer store。若另一写在
  load后则忽略；若有 path-conditional writer、不可比较 reaching definitions或
  non-pointer覆盖则拒绝。该规则支持 stack array cell与 heap pool cell，也支持
  stored select/PHI union，但不猜测 MemorySSA phi；
- Initialization/lifetime：pointer load/store使用普通 pointer-width memory
  instruction，所以 stack/heap dominating initialization、heap live/logical size、
  read-only、pool slot guard、COW bytes和checkpoint marker全部复用。Heap cell中
  取出的 data pointer可继续 GEP，cell释放不改变所指对象的独立身份；
- Artifact：新增 `bounded-pointer-memory` capability。现有 validator仍复检
  load/store width、object/alias cases和初始化，pointer result的 guard在后续访问时
  成为 proof-carrying alias condition；
- 自动化证据：LLVM tests覆盖 scalar global pointer initializer、stack cell中
  select后store/load得到65/66、heap cell load后GEP得到66、stored null equality；
  真实 C global pointer也执行得到77。负例覆盖分支两侧 stores在merge load、
  pointer slot被i64覆盖和function pointer store，全部结构化拒绝；
- 正确性边界：这不是 general Andersen/Steensgaard/SeaDsa，也不是完整 MemorySSA。
  尚不支持 pointer arrays/tables、constant GEP initializer、conditional reaching
  store merge、跨函数/escaped cell、部分/unaligned覆盖、memcpy携带pointer
  provenance、function-pointer memory、recursive heap graph或moving GC。当前等级
  I/T；下一阶段先扩展 function-pointer table与 bounded reaching-definition merge，
  再考虑 field-sensitive heap graph summary。

## 84. F89：Scalar Function-Pointer Memory（2026-07-28）

- 研究问题：F80/F83 的 function points-to 只在 SSA select/PHI 中存在；真实前端常把
  callback 写入 global、stack 或 heap cell。若按普通 data pointer 解释，函数 ID 会
  被误当成对象地址；若在 load 后丢失 target set，则间接调用无法复检 typed ABI；
- 表示：函数地址仍使用 F80 的稳定 module-local function ID，按 target endianness
  序列化到 pointer-width memory。Compiler另外恢复 finite
  `FunctionAlternative` sidecar，并加入 `loaded_id == candidate_id` 与原 stored
  select/PHI guards；executor继续使用既有 `indirect_call.targets`，不增加不可复检
  的 host callback primitive；
- 支持边界：scalar global initializer可为 internal function/null；dynamic cell要求
  exact storage identity与 F88 的唯一支配 pointer store。Store lowering区分 data
  pointer address和 function ID，load后的每个 target仍必须通过 exact argument/
  return width和 pointer-domain contract；
- Artifact：使用该能力时声明 `bounded-function-pointer-memory`。Validator对
  `targets`、稳定 ID、guards和 typed signature执行原有强校验，单一可行 target也
  保留间接调用语义；
- 自动化证据：LLVM覆盖 global单目标 cell和 stack select双目标 cell，真实 C global
  callback覆盖 frontend lowering；结果分别验证单目标执行和两个 symbolic target
  child，compiler `-Werror` build与定向 lit通过；
- 正确性边界：不支持 external/variadic function、跨模块可重定位 function address、
  pointer authentication、非完整宽度覆盖、escaped cell或未经有限 provenance证明
  的 integer-to-function-pointer。当前等级 I/T。

## 85. F90：Bounded Global Pointer Tables（2026-07-28）

- 研究问题：parser dispatch和对象选择常用只读 pointer table。F88/F89 的 scalar
  initializer不能表达 `table[symbolic_index]`，而仅保留加载的数字又会丢失元素级
  provenance；
- 初始化与恢复：支持 address-space-0、固定长度一维 global pointer array；每个
  element必须为 null、bounded data global/internal function，或以 constant GEP指向
  bounded data global。静态 memory image沿用 DataLayout endian序列化，侧边恢复
  汇总全表候选并去重；
- Symbolic index：现有 bounded GEP/alias enumeration证明 table element address
  属于有限域；pointer load再以 `loaded_numeric == candidate_address/function_id`
  过滤候选。因此 table index条件和元素身份都进入同一 QF_BV solver prefix，而不是
  按 concrete witness选择一项；
- Artifact：使用时声明 `bounded-pointer-table`，并与
  `bounded-pointer-memory`/`bounded-function-pointer-memory`组合。没有新增运行时
  opcode，table bytes、COW pages、alias guards和间接调用 target contract均由既有
  validator/executor复检；
- 自动化证据：LLVM data-pointer table对 symbolic index产生值1/2，function-pointer
  table产生目标返回6/7；真实 C data table得到相同两个结果。定向 lowering/executor
  tests与完整 compiler build通过；
- 正确性边界：仅支持固定一维全局常量形状；nested aggregate、runtime table mutation、
  relocation/ifunc、跨 DSO target、table element部分覆盖与无限 points-to仍拒绝。
  当前等级 I/T。

## 86. F91：Direct-Predecessor Pointer-Memory Merge（2026-07-28）

- 研究问题：常见 `if/else` 会在两个分支分别写 pointer cell，再于 join load。
  F88 的“唯一支配 store”会拒绝这种合法 memory-phi；直接汇总函数内所有 stores又
  会把不可达旧值引入 points-to；
- 有界 reaching proof：先寻找 exact stripped storage上的唯一最新支配 pointer
  store。若不存在，只接受 load所在 block的每个直接 CFG predecessor恰有一个该
  slot的 pointer store，且函数中不存在其他同 slot store或非 pointer覆盖。所有
  writer必须非 atomic/non-volatile，且位于对应 predecessor并支配其 terminator；
- Merge semantics：data/function pointer候选分别对所有 predecessor stores递归恢复，
  去重后增加 loaded numeric equality。路径可达性仍由 predecessor branch与 PHI
  edge执行决定，numeric equality阻止来自另一 writer的伪 candidate；function
  reachability discovery也纳入同一有限 target union；
- Artifact：使用条件合流时声明 `bounded-pointer-memory-merge`。这是一项
  compiler proof capability；core memory、solver和indirect-call schema保持不变；
- 自动化证据：LLVM data-pointer conditional cell产生1/2，function-pointer版本
  产生6/7；缺少一个 predecessor writer的 uninitialized merge结构化拒绝。定向
  LLVM/CMake lit与 compiler `-Werror` build通过；
- 正确性边界：这不是 MemorySSA。循环回边、超过一层 predecessor merge、dominant
  default store加条件 overwrite、switch predecessor复用、跨函数/escaped cell、
  memcpy传播 provenance、atomic/volatile和部分宽度覆盖仍 fail closed。当前等级
  I/T；后续 general heap graph必须引入显式 memory-version或可验证 points-to
  artifact，而不能继续靠全函数 store扫描外推。

## 87. F92：Proven-`nounwind` Invoke Normal-Edge Lowering（2026-07-28）

- 研究问题：C++ frontend和优化后 IR即使调用不会抛出，也可能保留 `invoke` 与
  landingpad。把它整体拒绝会丢失普通路径；无条件忽略 unwind edge则会错误执行真正
  可能抛出的函数；
- 证明条件：call-site带 LLVM `nounwind` attribute，或 direct internal callee带
  `nounwind`；有限间接目标则要求每个 recovered internal target都带
  `nounwind`。目标不完整、为空、external/intrinsic或任一目标可能抛出时 fail
  closed；
- Control transfer：call/indirect-call artifact新增可选 `normal_target`，指向
  `context.edgeTarget(invoke_parent, normal_dest)`。Callee return先绑定普通 result与
  pointer-domain，再跳到该 block的instruction 0；因此 normal destination含 PHI时
  仍经过既有 two-phase edge copy，不会跳过 parallel assignment；
- Semantic reachability：compiler从函数 entry计算 continuation CFG。对已证明
  `nounwind` 的 invoke只遍历 normal successor，未到达的 landingpad/unwind subtree
  不被 lowering、call-graph discovery或recursion proof消费；普通 terminator和未
  证明 invoke仍保留全部 LLVM successors；
- Artifact：使用时声明 `bounded-nounwind-invoke`。Validator要求
  `normal_target`必须是同一 caller function内的现有 block；runtime不信任 raw
  program中的任意 PC。该字段对direct与bounded indirect call使用相同契约；
- 自动化证据：LLVM direct invoke通过normal-edge PHI后返回7；select形成的两个
  nounwind targets分叉返回6/7；带潜在 external throw的internal target结构化拒绝，
  两个 unwind landingpad均不会进入 executable artifact。手写 artifact测试证明
  return跳过call后的线性instruction并到达显式normal block，missing target在create
  阶段拒绝。定向 lit、executor unit、Python syntax、whitespace及compiler
  `-Werror` build通过；
- 正确性边界：这不是 Itanium/Windows EH lowering，不建模 exception object、
  cleanup/destructor、catch/filter/resume、personality、`landingpad`/`catchswitch`
  或跨 frame unwinding。只有证明 unwind edge不可达的 invoke进入 executable
  subset；其余仍拒绝。当前等级 I/T。

## 88. F93：Stable Dynamic Nondeterministic Freeze Choice（2026-07-28）

- 研究问题：LLVM `freeze undef/poison`必须选择任意但对该动态 SSA实例稳定的值。固定
  为零会丢路径；按静态指令只建一个 SMT变量会把循环多次执行错误绑定为同一值；
  不持久化实例编号则 checkpoint恢复后会改变约束身份；
- Core IR：新增 `nondet {dst,bits,site}` instruction。Compiler仅对1..64-bit整数的
  direct `freeze undef`/`freeze poison`生成该指令，并声明
  `stable-nondeterministic-freeze`；已定义 operand的 freeze仍降为 identity；
- Dynamic identity：executor在 symbolic store中维护64-bit
  `@nondet:counter`。执行时表达式token为 `<stable-site>:<counter>`，随后原子递增
  counter。SSA destination保存同一 CAS expression digest，因而所有uses一致；循环
  re-entry获得新token，pause/resume从checkpoint中的counter继续；
- Solver semantics：expression `nondet`始终被视为symbolic，concrete witness取任意
  合法零值以驱动concolic evaluator。QF_BV lowering为每个token声明独立、精确位宽
  的BV常量；input仍保留数字变量名，避免影响现有model-to-byte extraction。
  One-shot和CAS-rooted incremental fragment使用同一带宽声明集合；
- Artifact contract：validator要求site字符集限定为字母数字及`._:-`、长度有界、
  module artifact内唯一，且bits为1..64。Runtime生成的token再次校验，重复site或
  非法token不会静默造成变量碰撞；
- 自动化证据：LLVM `freeze poison`与`freeze undef`后比较常量均由SMT产生true/false
  两个结果；executor循环在同一静态site执行两次，跨中间checkpoint得到
  `site:0`/`site:1`并保留counter=2；重复site artifact拒绝。定向 lit/unit、
  compiler `-Werror` build、Python syntax和whitespace检查通过；
- 正确性边界：F93解决direct undef/poison freeze的动态choice，不是完整LLVM poison
  lattice。F87当前仍在产生poison的算术操作前加入defined-value assume，因此
  `freeze(add nsw overflow)`仍被保守剪枝；select非严格传播、poison memory、
  vector/FP freeze、deferred poison consumption与跨线程choice ordering尚未实现。
  当前等级 I/T。

## 89. F94：Bounded Acyclic Pointer-Memory SSA Closure（2026-07-28）

- 研究问题：F91要求join的每个直接前驱都有writer，不能表达常见的“entry默认值、
  某个嵌套分支覆盖、其他路径沿用默认值”。全函数收集stores则会把旁路旧写和已经
  覆盖的写错误并入provenance；
- Backward dataflow：从pointer load所在block、load之前的位置逆向扫描exact stripped
  storage identity，只取每个block最后一个同slot writer；若没有writer则递归所有CFG
  predecessors。每条entry路径必须到达一个定义，结果按StoreInst identity去重；
- Last-write semantics：只有实际reaching的最后写需要是full-width pointer且
  non-atomic/non-volatile；被后续完整pointer store覆盖的早期writer不影响结果，
  load之后或无法逆向到达的writer不会制造歧义。Data/function pointer provenance
  使用同一closure，后者也用于call-graph target discovery；
- Bounds：最多访问4096个backward节点、恢复256个stores。active block集合检测循环
  memory-phi并fail closed；缺失entry definition、non-pointer last writer、
  atomic/volatile last writer分别给出结构化诊断；
- Artifact：跨前驱闭包使用时声明`acyclic-pointer-memory-ssa`；存在多个reaching
  writers时同时声明`bounded-pointer-memory-merge`。Core memory仍以实际loaded
  numeric equality过滤候选，不增加host-side path猜测；
- 自动化证据：LLVM nested two-level branch包含entry default、inner overwrite、
  forwarding和bypass paths，得到1/1/2并保留两项provenance；原direct merge、
  function-pointer merge继续通过。无写入口、non-pointer overwrite和循环回边均
  拒绝。定向 compiler build、artifact execution与whitespace检查通过；
- 正确性边界：storage identity仍要求同一stripped SSA value；不等价合并不同GEP
  expressions。循环fixed point、partial/unaligned writes、memcpy pointer
  provenance、escaped/interprocedural cells和atomic memory model尚未实现。这是
  bounded acyclic MemorySSA-like proof，不是LLVM MemorySSA或general points-to。
  当前等级 I/T。

## 90. F95：Deterministic Scalar External/Intrinsic Summaries（2026-07-28）

- 研究问题：continuation frontend已覆盖memory/string externals，但普通parser常见的
  `abs`与network byte-order调用仍导致整个函数拒绝。直接执行host libc会把symbolic
  argument concretize，并可能把host ABI/endian误用于目标；
- Absolute-value summary：支持严格ABI的`abs(i32)`、`labs(target-long)`和
  `llabs(i64)`，参数/返回必须同宽。Core DAG计算signed-negative、`0-x`与select；
  C标准中不可表示的`abs(INT_MIN)`以显式`x != INT_MIN` assume进入CAS solver prefix，
  而不是依赖宿主溢出；
- Byte-order summary：支持`htons/ntohs(i16)`与`htonl/ntohl(i32)`。Big-endian
  DataLayout降为identity，little-endian按byte mask、logical shift和OR构建完整BV
  permutation。相同helper支持LLVM `bswap` intrinsic的16/32/64-bit形态，保证C
  frontend builtin folding前后语义一致；
- Artifact：external scalar使用时声明`bounded-external-effect-summary`与
  `bounded-scalar-external-summary`；纯LLVM bswap声明后者。所有实现只使用已验证
  binary/unary/select/assume core ops，不增加host-call opcode或隐藏状态；
- 自动化证据：LLVM symbolic abs产生match/non-match 1/2，constant ntohl与
  `llvm.bswap.i32(0x01020304)`均得到`0x04030201`；真实C在禁用builtin folding后
  abs与ntohl走external declaration并得到相同结果。x86-64上错误`labs(i32)`精确
  拒绝。定向artifact、executor、compiler `-Werror`与whitespace检查通过；
- 正确性边界：不建模locale-dependent ctype、errno、FP/libm、随机数、时间、
  filesystem/network state或用户自定义同名但非标准语义；也不接受variadic、
  pointer参数或错误ABI。当前等级 I/T。

## 91. F96：Bounded Bit-Count Intrinsic Summaries（2026-07-28）

- 研究问题：LLVM frontend和优化器会把parser中的bitset、bitmap索引与整数归一化
  变换为`llvm.ctpop/ctlz/cttz`。若将这些pure intrinsics当external call拒绝，
  continuation覆盖会随优化级别变化；若调用host builtin，则无法把符号输入保留到
  solver；
- Core lowering：对1..64-bit scalar integer，以`lshr/and/add`展开population
  count；leading/trailing zero从MSB/LSB依次建立zero-prefix predicate并求和。
  结果保持原LLVM位宽，零输入且`is_zero_poison=false`时严格返回位宽；
- Definedness：`ctlz/cttz`的第二个`i1 immarg`必须是常量。为true时生成
  `input != 0` assume并进入既有CAS-rooted QF_BV prefix，因此零输入状态被明确标记
  infeasible；为false时不引入额外定义域。错误arity、非标量或超过64-bit均
  fail closed；
- Artifact：使用时声明`bounded-bitcount-intrinsic`。没有新增executor opcode，
  validator/runtime继续复检已有binary/unary/assume primitive；展开规模为O(w)，
  当前w上限64，避免不受控artifact增长；
- 自动化证据：LLVM symbolic `ctpop.i8`与`cttz.i8`产生match/non-match双分支，
  `ctlz.i8(0,false)`返回8，`ctlz.i8(0,true)`不可行；真实C
  `__builtin_popcount`经`-O1` frontend同样进入capability。定向artifact执行、
  compiler `-Werror` build、Python syntax和whitespace检查通过；
- 正确性边界：仅支持scalar integer overload，不支持vector、scalable vector、
  arbitrary precision、VP intrinsics或target-specific bit operations。当前线性
  DAG优先保证可移植和可审计；超宽值应由未来native/SMT primitive cost model选择
  专用表示。当前等级 I/T。

## 92. F97：Direct Deferred-Poison Freeze（2026-07-28）

- 研究问题：F87在产生`nuw/nsw` poison的算术点立即加入definedness assume，
  对普通consumer是安全的under-approximation，但错误处理了LLVM
  `freeze(poison)`：freeze本应把poison变为任意且对该动态实例稳定的值；
- 有界数据流：仅对1..64-bit `add/sub/mul`、至少一个`nuw/nsw` flag、唯一use且该
  use为direct `freeze`的形态延迟definedness。Compiler仍生成wrapped BV result，
  将所有unsigned/signed no-wrap条件合取后保存在function-local side table，不在
  产生点assume；
- Freeze semantics：freeze生成F93的stable dynamic nondet choice，并绑定
  `ite(defined, wrapped_result, choice)`。定义路径严格保留原值；溢出路径不受
  wrapped witness约束；site×persistent counter继续保证循环实例与checkpoint恢复
  identity；
- Artifact：使用时同时声明`bounded-deferred-poison-freeze`与
  `stable-nondeterministic-freeze`。Core只增加已有nondet/select表达式，执行器和
  solver不信任compiler特有side table；
- 自动化证据：constant `add nsw i8 127,1`后direct freeze产生两个可解分支，
  `add nuw nsw i8 1,1`后freeze严格返回2；同一poison-producing result存在额外
  consumer时不进入延迟子集，并按F87得到infeasible。Compiler `-Werror` build、
  artifact execution、Python syntax通过；
- 正确性边界：这不是完整deferred poison lattice。Shift/div/exact、cast/compare/
  select/PHI传播、memory/call/return边界、多use但所有use安全的证明、vector/FP均
  仍采用defined-only策略。该限制防止在没有per-SSA poison bit和consumer规则时
  做不可靠的广义传播。当前等级 I/T。

## 93. F98：Bounded Cyclic Pointer-Memory SSA Fixed Point（2026-07-28）

- 研究问题：F94的backward DFS遇到writer-free回边即拒绝，即使cell已在entry完整
  初始化；这会排除parser loop中常见的loop-invariant callback/data pointer，也
  无法表达上一迭代的完整pointer store；
- Dataflow：对入口可达CFG建立每个block的`IN/OUT = {last stores, may-uninitialized}`
  lattice。Block内最后一个exact-slot store执行kill；否则OUT继承IN。所有live
  predecessors做union，entry边引入uninitialized，迭代至fixed point；
- Load point：若block内load之前有writer仍走fast path；否则读取IN集合。任何路径
  保留uninitialized即拒绝；最多4096次block transfer与256个reaching stores。
  Atomic/volatile/non-pointer last writer在最终reaching集合中结构化拒绝；
- Cyclic proof：反向收集能到达load的live ancestors并做颜色DFS，区分acyclic与
  cyclic certificate。后者声明`bounded-cyclic-pointer-memory-ssa`；多个loop-
  carried writer仍同时声明merge capability。Candidate按函数指令顺序输出，保持
  artifact确定性；
- Runtime semantics：numeric pointer/function ID仍由真实page-COW load得到，有限
  provenance candidate以loaded equality过滤。因此entry writer与回边writer同时
  出现在静态集合时，当前迭代只可能采用实际内存版本，而不是host侧猜测迭代次数；
- 自动化证据：固定三次循环的loop-invariant cell返回65；入口写left、每次loop尾
  写right的loop-carried case返回66并恢复两个候选；无入口初始化的同构循环拒绝。
  Compiler `-Werror`、artifact executor、Python syntax与whitespace检查通过；
- 正确性边界：仍要求exact stripped storage identity与full-width store；不支持
  partial/unaligned/memcpy pointer writes、escaped/interprocedural cell、atomic
  memory model或不同GEP表达式的alias证明。这是有限may-reaching-definition
  fixed point，不是LLVM MemorySSA+AA的通用替代。当前等级 I/T。

## 94. F99：Canonical Constant-GEP Pointer-Cell Identity（2026-07-28）

- 研究问题：同一数组/结构字段常由不同LLVM GEP instructions重新计算。F98按raw
  stripped SSA pointer匹配时，会把语义相同的非零offset storage误判为没有writer；
- Canonical key：对address-space pointer width不超过64的constant GEP chain，
  使用target DataLayout逐层`accumulateConstantOffset`，以
  `(stripped base, modular pointer-width offset)`作为cell identity。Bitcast与zero
  GEP继续归一化，symbolic/nonconstant GEP退回原SSA identity；
- Integration：last-writer kill、fixed-point store集合、data pointer provenance和
  function target discovery使用同一key。只有load/store raw SSA不同但canonical key
  相等时声明`canonical-pointer-cell-identity`，便于artifact审计实际使用；
- Soundness guard：offset按target pointer width模运算，与LLVM pointer arithmetic
  表示一致；base或offset不同绝不合并。不引入宿主地址或基于名称的alias猜测；
- 自动化证据：两个独立`gep [2 x ptr], ..., 1`之间store/load返回65并声明
  capability；在offset 0写入另一pointer后从重复offset 1读取仍返回65，证明
  interference没有被错误合并。Compiler `-Werror`、artifact execution和whitespace
  检查通过；
- 正确性边界：symbolic GEP、不同base但AA可证明must-alias、ptrtoint/inttoptr、
  address-space cast、partial/overlapping cell与escaped pointer仍不规范化。当前
  等级 I/T。

## 95. F100：Bounded Bit-Permutation/Funnel-Shift Intrinsics（2026-07-28）

- 研究依据：[LLVM Language Reference, Bit Manipulation Intrinsics]
  (https://llvm.org/docs/LangRef.html#bit-manipulation-intrinsics)定义
  `bitreverse`的bit M到N-M-1映射，以及`fshl/fshr`对`{a:b}`拼接值执行
  `shift % bitwidth`；
- Core lowering：对1..64-bit scalar integer，bitreverse逐位
  `lshr/and/shl/or`；funnel shift先以`urem`规范化shift，再计算互补距离并合并两侧
  片段。所有参数/返回必须精确同型；
- Boundary handling：normalized shift为0时，互补距离等于bitwidth。Continuation
  core采用SMT-LIB BV shift语义，shift-by-width片段为0，因此结果精确等于对应未移位
  half，不引入LLVM poison；大shift则先取模；
- Artifact：使用时声明`bounded-bit-permutation-intrinsic`。实现为O(w) reverse
  DAG或O(1) funnel DAG，不增加target-specific opcode或host builtin；
- 自动化证据：symbolic `bitreverse.i8`以concrete 0xb6命中0x6d并求得双分支；
  LangRef风格`fshl.i8(0xff,0,15)`返回0x80，
  `fshr.i8(0,0xff,15)`返回1。Compiler `-Werror`、artifact execution与Python
  syntax通过；
- 正确性边界：不支持vector/VP、`clmul/pext/pdep`、target-specific intrinsics或
  超过64位。当前等级 I/T。

## 96. F101：Bounded Saturating Add/Sub Intrinsics（2026-07-28）

- 研究依据：LLVM LangRef的saturation arithmetic把数学结果限制到目标signed或
  unsigned可表示区间，而不是产生wrap/poison；
- Core lowering：支持1..64-bit scalar `sadd/uadd/ssub/usub.sat`。Unsigned add以
  `wrapped < lhs`检测上溢并clamp全1，unsigned sub以`lhs < rhs`检测下溢并clamp 0；
  signed add/sub以operand sign关系和result sign翻转检测溢出，再按lhs sign选择
  signed min/max；
- Artifact：声明`bounded-saturating-arithmetic-intrinsic`，只使用
  add/sub/compare/select core ops；不借用host integer promotion或UB；
- 自动化证据：一个packed oracle同时验证`250+20 -> 255`、`3-5 -> 0`、
  `120+20 -> 127`、`-120-20 -> -128`；symbolic unsigned add到255的predicate求得
  saturation/non-saturation双分支；
- 正确性边界：本节不含shift/fixed-point/vector saturation；shift由F102扩展。
  当前等级 I/T。

## 97. F102：Bounded Saturating Shift Intrinsics（2026-07-28）

- 研究依据：LLVM `sshl.sat/ushl.sat`在shift amount小于bitwidth时执行clamping，
  amount大于等于bitwidth则产生poison；
- Core lowering：先生成`amount < width` assume，再计算wrapped shl。Unsigned以
  `lshr(result,amount)==input`判断可逆性，否则clamp unsigned max；signed使用ashr
  可逆性并按input sign clamp signed min/max；
- 自动化证据：i8 signed `-100 << 2`clamp到-128，unsigned `100 << 2`clamp到255，
  packed i16返回65408；amount=8的i8 case进入明确infeasible状态并声明LLVM
  defined-value guard；
- 正确性边界：该poison边界仍遵循F87 defined-only策略，尚未进入F97 direct
  deferred-freeze子集；vector/VP/fixed-point shifts不支持。当前等级 I/T。

## 98. F103：Bounded Scalar Abs/Min/Max Intrinsics（2026-07-28）

- 研究依据：LLVM LangRef定义scalar `abs/smax/smin/umax/umin`为任意integer-width
  overload；`llvm.abs`的第二个constant flag单独决定INT_MIN是保留INT_MIN还是
  poison；
- Core lowering：支持1..64位。Abs使用signed-negative、0-x与select；flag为true时
  额外加入`x != INT_MIN` definedness assume。Min/max使用signed/unsigned compare
  直接选择operand，不经过host promotion；
- Artifact：声明`bounded-scalar-selection-intrinsic`，与F95 C `abs`区分：C函数
  固定排除INT_MIN，而LLVM intrinsic的false flag允许返回wrapped INT_MIN；
- 自动化证据：packed i64同时复检abs(-5)、abs(INT_MIN,false)、signed min/max和
  unsigned min/max六个结果；symbolic smax产生双分支；
  abs(INT_MIN,true)明确infeasible；
- 正确性边界：不支持vector/VP和后续LangRef `scmp/ucmp`三向比较。当前等级 I/T。

## 99. F104：LLVM Branch-Hint Identity Intrinsics（2026-07-28）

- 研究问题：`llvm.expect`和`expect.with.probability`只影响optimizer分支权重，运行
  语义严格为第一个参数；未知intrinsic拒绝会使带likely/unlikely hint的frontend
  产物无法执行；
- Lowering：对1..64-bit integer overload验证参数/返回同型；probability variant
  额外要求constant double位于[0,1]。Expected value和probability不进入path
  constraint，结果以identity绑定第一个参数；
- Artifact：使用时声明`llvm-optimization-hint-identity`。该capability表明只移除
  非语义hint，不会把期望值错误地当assumption；
- 自动化证据：symbolic i8依次通过expect(expected=10)和
  expect.with.probability(10,0.9)，随后比较10仍产生true/false两条可行路径；
- 正确性边界：不处理profile metadata的调度利用、`ssa.copy`、deopt/guard、
  sideeffect或pointer hints。当前等级 I/T。

## 100. F105：Bounded Static `llvm.objectsize`（2026-07-28）

- 研究问题：fortify/bounds-check frontend常保留`llvm.objectsize`。已有provenance已
  知对象与offset，继续拒绝会丢失可精确执行的安全长度分支；
- Static semantics：对1..64-bit result、四参数标准ABI及三个constant i1 flags做
  验证。Global、fixed stack和fixed-capacity heap返回
  `object_size - current_offset`；null按`null_is_unknown`和min/max flag返回0或
  unknown sentinel；
- Pointer union：为每个finite alternative复用pointer provenance guards并构建
  size ITE；fallback遵循min unknown=0、max unknown=all-ones。不同对象size不被
  host concretize；
- Artifact：声明`bounded-objectsize-intrinsic`。Guard comparisons与select均为
  普通core IR，runtime无需信任compiler-side object metadata；
- 自动化证据：8-byte stack offset2返回6；4-byte offset1与6-byte offset2的
  symbolic object union返回3/4并驱动双分支；known-null返回0。Pointer-size input
  且dynamic=true在F105中明确拒绝，防止把capacity误报为logical length；
- 正确性边界：F105只提供fixed-size exact provenance。Runtime input、nullable
  heap、realloc size、symbolic offset和unknown external object留给dynamic
  objectsize扩展；vector/nonstandard ABI拒绝。当前等级 I/T。

## 101. F106：Bounded Dynamic `llvm.objectsize`（2026-07-28）

- 研究问题：F105只可回答编译期固定capacity。Pointer-size input ABI和F78
  nullable heap同时具有“静态池容量”和“运行时逻辑长度”；把前者当作
  `llvm.objectsize(...,dynamic=true)`会允许越过实际输入或分配请求；
- Runtime semantics：当dynamic flag为true时，输入对象使用continuation
  `input_size`，`malloc`使用请求size，`calloc`使用count × element-size。当前
  pointer与对象base在目标pointer bitwidth下相减，结果无符号转换到intrinsic
  result width，并以`logical_size >= offset`保护`logical_size - offset`；
- Conservative fallback：runtime-sized对象或symbolic offset在dynamic=false时
  不返回预分配capacity，而严格按minimum flag返回0或all-ones unknown。
  Null alternative仍单独服从`null_is_unknown`，finite pointer union继续以
  provenance guard构造ITE；
- Artifact：除F105 `bounded-objectsize-intrinsic`外，实际使用runtime logical
  size时声明`bounded-dynamic-objectsize-intrinsic`。导出物因此可区分静态
  provenance query与动态长度语义；
- 自动化证据：3-byte pointer-size input的offset1精确返回2；symbolic-entry
  `malloc(3)`返回3而不是4096-byte池容量；同一runtime allocation在
  dynamic=false且maximum模式返回`2^64-1` unknown。Compiler `-Werror` build、
  directed execution与whitespace checks通过；
- 正确性边界：支持input、malloc、calloc和已有bounded symbolic GEP。尚未追踪
  `realloc`成功后的当前逻辑长度，也不猜测unknown external/custom allocator
  object；pointer/result widths限于1..64，vector/nonstandard ABI拒绝。当前等级
  I/T。

## 102. F107：Bounded `*.with.overflow` Aggregates（2026-07-28）

- 研究依据：LLVM的六个signed/unsigned add/sub/mul overflow intrinsics返回
  `{wrapped-value, i1 overflow}`，而非poison；普通SymCC instrumentation已有支持，
  但portable continuation此前不支持aggregate/extractvalue；
- Lowering：为1..64位scalar生成独立wrapped BV与overflow predicate，并只接受
  结构索引0/1的`extractvalue`。Unsigned add/sub使用wrap ordering；signed add/sub
  使用operand/result sign关系；mul以安全非零divisor做可逆性检查，signed
  `INT_MIN * -1`单独置overflow；
- Artifact：声明`bounded-overflow-arithmetic-intrinsic`。Aggregate不进入通用
  struct ABI，而以call-stable value/flag binding桥接，因此不会暗示任意
  `insertvalue/extractvalue`已支持；
- 自动化证据：packed oracle覆盖六个overflow variant的wrapped value与flag，
  另覆盖unsigned乘零、symbolic uadd双路径和signed minimum negation边界；
- 正确性边界：vector、超过64位和非overflow aggregate仍拒绝。当前等级 I/T。

## 103. F108：Bounded Integer/Pointer `llvm.ssa.copy`（2026-07-28）

- 研究依据：LangRef规定`ssa.copy`只建立新SSA名称，runtime value严格等于operand，
  常由PredicateInfo/extended SSA中间形态产生；
- Lowering：1..64位integer降为identity；address-space-0 data pointer保留完整
  finite provenance；function pointer同时扩展target discovery与typed indirect
  dispatch，使copy不会切断reachable target graph；
- Artifact：声明`bounded-ssa-copy-intrinsic`。Identity不产生assumption或branch
  bias；pointer guard仍引用原select/PHI/loaded target certificate；
- 自动化证据：symbolic integer copy保留双分支，data pointer select经copy/load
  保留两对象路径，function pointer select经copy后仍分派increment/increment-two。
  测试隔离在opt-only lit模块：LLVM 18 IPSCCP会在人工持久化的ssa.copy模块上先于
  SymCC pass触发`PredicateBase`崩溃，该上游工具链缺陷不计作lowering失败；
- 正确性边界：floating/vector/token/metadata overload与nonzero address space拒绝。
  当前等级 I/T。

## 104. F109：Dynamic `objectsize` after `realloc`（2026-07-28）

- 正确性修复：F106若仅沿原malloc provenance，直接查询realloc result可能误报旧
  logical length或pool capacity；这比“未支持”更危险；
- Lowering：每个`StaticPointer` alternative携带自己的`reallocationObject`，
  provenance经GEP/cast/select/PHI保持；非null alternative使用对应realloc请求
  size，actual pointer减原对象base得到offset。该设计避免整个objectsize调用
  共享一个语法realloc root；guard不匹配表示realloc failure/null，并服从
  `null_is_unknown`；
- 自动化证据：bounded in-place `realloc(4,2)`成功后返回2；请求5超出对象容量时
  runtime realloc失败，`null_is_unknown=false`返回0；`select(realloc,
  fixed-global)`的symbolic双分支分别返回2与4，并由校验器验证guarded objectsize
  union ITE而非仅检查capability字符串；
- 正确性边界：只覆盖现有F78 bounded in-place realloc，不声称moving realloc、
  custom allocator或任意heap graph支持。当前等级 I/T。

## 105. F110：Transitive Deferred-Poison Freeze（2026-07-28）

- 研究问题：LLVM poison可穿过整数cast、算术和comparison，F97只支持flagged
  arithmetic直接进入freeze，导致本可精确恢复的linear chain被defined-only
  剪枝；
- Analysis：从poison-producing value沿single-use链前向检查，允许bounded integer
  cast、core binary、`icmp`和integer `ssa.copy`，终点必须是唯一freeze。任一
  multi-use、PHI、select、memory、call或control consumer立即回退原definedness
  assumption；
- Lowering：每个透明节点传递“value is defined”条件；多个operand条件取合取。
  Freeze生成stable nondet并选择`ite(defined, wrapped, nondet)`，声明
  `bounded-transitive-deferred-poison`；
- 自动化证据：overflow经sext/trunc、xor/icmp和ssa.copy的三类poison chain均
  恢复双路径；defined add经cast/add chain精确返回3；既有multi-consumer case
  仍infeasible；
- 正确性边界：未覆盖select条件依赖、PHI合流、memory poison、跨函数传播或
  aggregate/vector poison。当前等级 I/T。

## 106. F111：Totalized Deferred Division/Exact Freeze（2026-07-28）

- 执行层问题：continuation concrete evaluator会急切求值select children。即使
  defined=false，未选择的`udiv 7,0` wrapped child仍可能抛除零错误；
- Totalization：复用`divisor != 0` definedness predicate构造
  `safe_divisor = ite(nonzero, divisor, 1)`。主division/remainder和exact remainder
  check均使用safe divisor；原predicate仍进入freeze defined condition，因此只在
  LLVM-defined域暴露wrapped结果；
- 自动化证据：udiv zero、sdiv INT_MIN/-1和non-exact `udiv exact 7,2`均由freeze
  恢复稳定non-deterministic双路径；`udiv exact 8,2`精确返回4且无隐藏除零；
- 正确性边界：该totalization只服务single-use deferred-freeze链，不改变普通
  defined-only division的UB pruning。当前等级 I/T。

## 107. F112：Path-Sensitive Select Poison（2026-07-28）

- 研究问题：LLVM select不会传播未选中value arm的poison，但condition poison总使
  result poison；简单合取三个defined bit会错误丢弃合法路径；
- Semantics：对single-consumer integer select计算
  `cond_defined AND ite(cond, true_defined, false_defined)`，value本身继续使用
  wrapped select。结果definedness沿后续透明链进入freeze；
- Artifact：实际使用时声明`bounded-select-deferred-poison`，并保留F110
  `bounded-transitive-deferred-poison`；
- 自动化证据：constant false选择defined arm时即使另一臂overflow poison仍精确
  返回7；constant true选择poison arm及poison comparison作为condition时均由
  freeze恢复双路径；
- 正确性边界：只支持bounded integer select、single-consumer freeze sink；
  pointer/vector select poison不在本子集。当前等级 I/T。

## 108. F113：PHI Edge-Definedness Merge（2026-07-28）

- 研究问题：PHI definedness取决于实际CFG predecessor，不能在merge block用无
  control certificate的ITE近似；
- Lowering：对唯一流向freeze-chain的integer PHI预分配`phi__defined`。每条已有
  edge block同时stage incoming value与incoming defined bit，再在所有stage后
  two-phase commit，保持parallel PHI语义和循环边复制协议；
- Artifact：当incoming确有deferred condition时声明
  `bounded-phi-deferred-poison`；
- 自动化证据：constant false edge选择defined 7时精确返回7；constant true edge
  选择overflow poison时freeze恢复双路径；
- 正确性边界：cyclic/self-dependent poison PHI、多consumer和跨函数PHI仍回退
  defined-only。当前等级 I/T。

## 109. F114：Straight-Line Memory Poison Sidecar（2026-07-28）

- 研究问题：scalar mem2reg通常消除stack store/load，但mutable global或未提升
  memory仍会承载poison；直接假设store value defined会丢失freeze语义；
- Conservative analysis：只接受同一basic block、相同pointer SSA、相同scalar
  type、非atomic/volatile、恰好一个store与一个load，期间及其余block suffix无
  第二个memory access/call。Store保存definedness sidecar，唯一load恢复后继续
  transparent chain；
- Artifact：声明`bounded-memory-deferred-poison`。分析不调用alias oracle，任何
  可能别名或额外访问直接不建立sidecar；
- 自动化证据：mutable global上的overflow store/load/freeze恢复双路径，defined
  store/load返回2；同一store后的two-load case回退defined-only并infeasible。
  初始alloca oracle因前置mem2reg消失而未被误计为memory证据；
- 正确性边界：不支持跨block MemorySSA、alias union、循环、heap escape、partial
  width、多load或跨函数memory poison。当前等级 I/T。

## 110. F115：Canonical-Address Memory Poison（2026-07-28）

- 研究问题：F114要求store/load使用同一pointer SSA，导致两个语义等价的constant
  GEP被误判为未知alias；直接放宽为“同一object”又会错误合并不同offset；
- Analysis：使用LLVM DataLayout的`GetPointerBaseWithConstantOffset`分别归一化
  store/load pointer，仅当strip-cast base相同且signed byte offset严格相等时，
  才接受为exact address。Dynamic index、不同base或不同offset继续fail closed；
- Artifact：在既有`bounded-memory-deferred-poison`之外声明
  `canonical-address-memory-deferred-poison`，便于实验区分pointer-SSA直连与
  canonical-address证明；
- 自动化证据：`gep [4 x i8], @array, 0, 2`与
  `gep i8, gep(@array,0,0), 2`之间的poison store/load/freeze恢复双路径；
  offset 1 store与offset 2 load不传播sidecar并保持infeasible；
- 正确性边界：这是exact constant-address等价证明，不是general AA/MemorySSA；
  跨block、symbolic alias、partial overlap、循环与多access仍保守拒绝。当前等级
  I/T。

## 111. F116：Linear-CFG Memory Poison（2026-07-28）

- 研究问题：F114--F115只能在单一basic block识别store-to-load definedness，
  即使两者之间只是unconditional CFG edge也会丢失合法freeze语义；
- Analysis：从store向后及从load向前最多遍历64条edge。每一步要求当前block只有
  一个successor、下个block只有一个predecessor，沿途除目标exact store/load外
  不得有任何memory effect；visited set显式拒绝cycle。两向证明必须在lowering
  context中汇合到同一store sidecar；
- Artifact：声明`bounded-cross-block-memory-deferred-poison`。该capability只表示
  unique-edge linear corridor，不暗示一般dominance、MemorySSA或join处理；
- 自动化证据：store与load跨两个unconditional blocks时poison/freeze恢复双路径；
  本阶段的merge反例后来由F124--F149的common-store、path-dependent、initial-state
  与byte-lane
  edge contracts转为正例；
- 正确性边界：F116本身只证明linear corridor；branch/join、loop与跨路径clobber
  的当前支持边界见F124--F149；general symbolic alias与control-flow lane PHI仍
  拒绝。当前等级 I/T。

## 112. F117：Direct-Call Return Poison ABI（2026-07-28）

- 研究问题：LLVM poison可经函数返回值到达caller中的freeze；在callee return前
  强制defined会错误丢失合法nondeterministic语义，只传wrapped value又会把poison
  当普通值；
- Analysis：只接受bounded integer callee、唯一direct callsite、callee poison
  source到return的single-use透明链，以及call result到freeze的single-use透明链。
  Producer仍复用F110 definedness计算；多callsite和indirect target不建立通道；
- ABI：function声明`return_defined`，每个return携带1-bit `defined` operand，
  call声明`defined_dst`。Program validator要求function/return/call三端一致并限制
  non-pointer、non-void typed return；executor在pop callee frame前求值该bit并写回
  caller-local binding；
- 自动化证据：poison callee return在caller freeze恢复双路径；defined nsw add
  精确返回2；同一callee两个callsite回退defined-only并infeasible；独立executor
  test证明false bit跨frame选择fallback 42，缺失return或call endpoint均被拒绝；
- 正确性边界：尚不传递poison argument，不支持多callsite summary、indirect
  dispatch、pointer/aggregate/vector return、recursion或跨函数memory poison。
  当前等级 I/T。

## 113. F118：Direct-Call Argument Poison ABI（2026-07-28）

- 研究问题：caller中的poison producer可作为callee参数，并只在callee内被freeze；
  caller-side defined assumption会错误剪枝，单传wrapped argument则丢失poison；
- Analysis：要求callee只有一个direct callsite、bounded integer argument、producer
  到call operand及对应formal parameter到freeze均为single-use透明链。Backward
  source walk以64层和active set为界，支持core BV/cast/icmp/select/PHI/ssa.copy；
- ABI：callee `defined_params`把原参数索引映射到追加的1-bit typed parameter，
  call `defined_args`映射到对应追加argument。Validator复检两侧mapping完全相等、
  parameter width为1且不与pointer-domain auxiliary slot重叠；executor沿既有
  call-frame参数绑定自然传输，不维护旁路状态；
- 自动化证据：constant overflow实参在callee freeze恢复双路径，defined nsw add
  精确返回2；callee具有两个callsite时回退infeasible；独立artifact test证明false
  defined argument跨frame选择42，缺失call/callee metadata均被拒绝；
- 正确性修复：F117 `return_defined` detection改为从实际return operand做backward
  slice，避免“函数内存在传参poison”被误报为poison return；
- 正确性边界：multi-callsite、indirect call、多个consumer、memory/aggregate/
  pointer/vector poison argument与recursion仍保守拒绝。当前等级 I/T。

## 114. F119：Bounded Multi-Callsite Poison ABI（2026-07-28）

- 研究问题：F117--F118的defined-bit ABI并不依赖callee只有一个调用点；真正约束是
  所有function uses必须可枚举为exact direct calls，并满足各方向的sink contract；
- Analysis：最多枚举64个direct callsites。Return poison要求每个call result均沿
  single-use chain进入freeze，任何普通consumer使整个return通道fail closed；
  argument poison只要求formal parameter进入freeze且至少一个actual argument含
  deferred source，其他callsite显式传`defined=true`；
- Artifact：实际多调用点使用时声明`bounded-multicallsite-deferred-poison`；
  function signature中的defined auxiliary slot对所有calls一致，validator继续逐
  call复检mapping；
- 自动化证据：同一argument sink被poison/defined两个callsite调用时，第一条路径
  恢复双分支且第二条精确传true；同一poison-return callee的两个call results均
  freeze时恢复双分支；已有“一个call普通消费、一个call freeze”反例仍infeasible；
- 正确性边界：function bitcast/alias、indirect call、超过64 callsites、任一return
  ordinary consumer、递归和跨函数memory仍拒绝。当前等级 I/T。

## 115. F120：Symbolic Pointer-Memory and Initial Definition Merge（2026-07-28）

- 审查发现：pointer load若slot具有global initializer，旧实现完全跳过runtime
  reaching stores；symbolic GEP pointer又以静态base address作为loaded-value
  guard。两者组合会把合法非零index错误折叠到initializer/base；
- Provenance：`sameStaticPointer`补齐dynamic index/scale/width/object base/range、
  interprocedural与realloc identity。写入pointer cell的finite symbolic GEP先通过
  object bounds枚举为concrete address alternatives，再以实际loaded pointer等于
  address作为provenance guard，声明`bounded-symbolic-pointer-memory`；
- Reaching definitions：fixed point新增`hasInitialDefinition` entry state。Data与
  function pointer load统一合并global initializer和runtime stores；function target
  discovery使用同一集合，避免新target因未分配stable function ID而漏失。实际同时
  存在initial/runtime defs时声明`pointer-initial-definition-merge`；
- 自动化证据：symbolic index 0/1的`"AB"` pointer经mutable global cell roundtrip
  后产生A/B双路径；function-pointer global必写overwrite在increment/increment-two
  间双分派；conditional write路径与no-write initializer fallback同样双分派；
- 证据校准：初始alloca版本被mem2reg消除，只证明普通symbolic GEP，未计入F120；
  最终oracle使用真实mutable global pointer cell；
- 正确性边界：dynamic domain仍受alias limit约束；general pointer-int casts、
  partially initialized raw bytes、moving heap graph与concurrent atomic pointer
  cells未覆盖。当前等级 I/T。

## 116. F121：Transitive Argument-to-Return Poison（2026-07-28）

- 审查发现：F117 return detection只识别callee-local poison producer。若F118已标记
  的formal parameter经callee透明BV链返回，argument defined bit会进入frame但
  `return_defined`不建立，caller freeze断链；
- Analysis：return backward slice除local source外识别已证明的deferred-poison
  Argument，沿bounded BV/cast/icmp/select/PHI/ssa.copy透明节点传播；active set
  防止cyclic SSA traversal。该condition在callee内由F110传播，再由F117 return
  channel输出；
- Artifact：argument与return ABI同时使用时声明
  `bounded-transitive-call-deferred-poison`；既有`defined_params/defined_args`和
  `return_defined/defined/defined_dst`仍由统一validator逐端复检；
- 自动化证据：同一passthrough callee具有poison/defined两个direct callsites，
  parameter先经`xor 0`再return，两项call result均freeze；poison path恢复1/2，
  defined call传true，并同时触发multi-callsite与双向ABI capabilities；
- 审查修复：capability条件从“函数同时有argument channel和任意return poison”
  收紧为“return backward slice实际到达deferred-poison Argument”；callee内部
  freeze参数、但返回独立local poison的负例同时保留双向ABI且禁止transitive-call
  capability，防止artifact夸大语义覆盖；
- 正确性边界：仅透明bounded integer slice；indirect/mixed function uses、
  recursion、memory/aggregate/vector passthrough仍拒绝。当前等级 I/T。

## 117. F122：Bounded Multi-Consumer Deferred Poison（2026-07-28）

- 研究问题：F97--F121要求每个deferred-poison value只有一个use，即使同一poison
  SSA的所有消费者都最终进入`freeze`，也会被defined-only under-approximation
  裁掉；这会系统性损失编译优化后出现的fan-out/fan-in路径；
- Analysis：把single-use existential walk替换为最多256次value访问的all-use
  proof。每个use必须是freeze，或属于已支持的integer cast/BV/icmp/select/PHI、
  `ssa.copy`、exact memory sidecar、direct argument/return ABI之一，并且递归证明
  其全部后继到达freeze。active set拒绝循环，空use、未知consumer和预算溢出均
  fail closed；
- Definedness：共享producer condition沿每条透明链传播；每个freeze仍创建各自
  stable dynamic nondeterministic value，符合“freeze结果稳定、不同freeze不要求
  相同”的LLVM语义。Artifact声明
  `bounded-multiconsumer-deferred-poison`；
- 自动化证据：同一`add nsw` poison由两个独立freeze消费，联合branch可恢复1/2；
  一个freeze加一个最终未freeze普通consumer的混合图保持不可行，并用通用
  `--reject-capability` oracle禁止能力误标；
- 正确性边界：只证明有限、无环、全部sink可见的integer use graph；general
  memory alias、循环poison SSA、indirect call、aggregate/vector/FP与超过256访问
  的图继续使用defined-only under-approximation。当前等级 I/T。

## 118. F123：Bounded Multi-Load Memory Poison（2026-07-28）

- 研究问题：F114--F116只允许一个exact load。F122虽能证明SSA fan-out，却无法表示
  同一memory version的多个load；更重要的是，旧forward scan在发现首个load后立即
  停止，可能看不到后续consumer，证明边界不够严格；
- Memory-version analysis：从store沿最多64个unique-successor/unique-predecessor
  block扫描，收集最多64个同类型、非atomic/volatile、exact canonical-address
  loads；精确同址全宽store作为version clobber，函数出口作为终点。未知memory
  effect、不同地址访问、CFG分叉/合流、循环和预算溢出均拒绝；
- Reverse proof：load向前驱逆序搜索最近store时允许跳过同址earlier loads，
  但遇到任意不同/未知memory effect即fail closed。这样每个load都绑定同一个
  可复检definedness sidecar，不以源代码顺序猜测别名；
- Composition：store对应的全部load还必须分别通过F122 all-use freeze-sink proof；
  两项证明同时成功才声明`bounded-multiaccess-memory-deferred-poison`。原有
  same-block、canonical-address与cross-block capabilities保持；
- 自动化证据：同一poison store的两个load各自freeze并产生1/2；同址defined
  overwrite终止version。已有“第二个load freeze、首个load普通消费”负例继续不可行
  且禁止capability；旧memory正例增加显式同址clobber，防止首个load后证明截断；
- 正确性边界：尚不是alias-aware MemorySSA；只覆盖有限线性CFG和exact full-width
  scalar cell，不覆盖symbolic alias、partial overlap、分支memory phi、循环、
  atomic/volatile及并发内存。当前等级 I/T。

## 119. F124：Acyclic Branch Memory Poison（2026-07-28）

- 研究问题：F123只沿unique predecessor/successor线性CFG传播，无法处理一个store
  支配diamond两臂、再在merge block读取的常见优化形态；
- Forward proof：以active/completed block集合对store后的CFG执行最多64 block的
  bounded DFS，收集同址loads，并在exact clobber、exit处结束各路径；active back
  edge、未知memory effect、非同址访问与预算溢出均拒绝；
- Reverse proof：每个load从所在block逆序跨越同址earlier loads，对全部predecessor
  递归寻找最近store；只有每条路径返回同一个`StoreInst`才成立。不同路径分别返回
  original store与clobber store时整体失败，因此没有伪造path-dependent memory
  definedness PHI；
- Composition：forward收集的每个load必须反向解析回原store，并继续满足F122
  all-use sink proof。使用branch/join证明时artifact声明
  `bounded-branch-memory-deferred-poison`；
- 自动化证据：symbolic selector diamond两臂无memory effect，merge load/freeze
  对两项selector状态分别产生1/2，即`1,1,2,2`；path-dependent store与initial
  definition的组合由后续F125/F127/F129处理；
- 正确性边界：只覆盖acyclic exact-address、all-path common-store情况；不同
  reaching stores的真正definedness PHI、循环MemorySSA、symbolic alias、partial
  overlap、atomic/volatile与并发内存仍未实现。当前等级 I/T。

## 120. F125：Path-Dependent Memory Definedness PHI（2026-07-28）

- 研究问题：F124只接受all-path common store；diamond两臂分别full-width写入同一
  cell时，数值memory本身可由runtime正确执行，但poison definedness仍需随实际CFG
  edge选择，不能静态合并为任一store condition；
- Static proof：仅接受2--64个direct predecessors；merge block在目标load前不得有
  memory effect，每个predecessor必须具有唯一successor，且逆序遇到的首个memory
  effect必须是同类型、非atomic/volatile、exact-address full store。至少一个
  incoming value包含bounded local poison source，load的全部use还需通过F122；
- Edge lowering：为每条predecessor->merge edge预先建立edge block，并写入统一
  `<load>__defined` destination。Poison store写其condition，defined store写constant
  true；merge load沿实际执行路径读取该sidecar，再由freeze决定wrapped value或
  independent stable choice；
- Artifact contract：function metadata声明`memory_defined_phis`，包含load、
  defined destination、merge block与全部incoming edge blocks；独立validator要求
  每条edge恰有一个i1 identity assignment，且末尾jump指向声明merge。Artifact声明
  `bounded-memory-definedness-phi`；
- 自动化证据：symbolic selector一臂`add nsw` poison store、一臂constant 7 store，
  执行结果为poison侧1/2加defined侧2，即`1,2,2`；checker删除一个edge assignment
  后，production validator以memory-PHI endpoint错误拒绝artifact；
- 正确性边界：只覆盖direct-predecessor full-store merge；argument/call/memory
  来源的incoming poison、嵌套/循环MemorySSA、symbolic alias、partial overlap、
  atomic/volatile与并发内存仍fail closed。当前等级 I/T。

## 121. F126：Interprocedural Memory Definedness PHI（2026-07-28）

- 研究问题：F125的potential-source analysis只识别callee-local producer，因此
  F117 return defined-bit或F118 argument defined-bit虽已进入function context，
  仍不能作为incoming store condition写入memory-PHI edge；
- Composition：bounded source walk新增两类已证明端点：`Argument`必须通过
  `argumentHasDeferredPoison`的all-callsite argument contract；direct internal call
  result必须通过callee return backward slice。透明cast/BV/icmp/select/PHI/
  `ssa.copy`仍可继续组合，未知parameter/call不推测；
- Lowering：incoming store直接复用`context.poisonConditions`中的ABI bit，F125
  edge assignment与production validator无需新执行语义。Artifact额外声明
  `bounded-interprocedural-memory-definedness-phi`，contract metadata标记
  `interprocedural: true`；
- 自动化证据：argument方向由caller `add nsw`经F118进入callee，callee在poison/
  defined两臂store后merge/freeze，结果`1,2,2`；return方向由F117 poison-return
  call result在caller两臂store后执行相同oracle，也得到`1,2,2`。两者分别要求
  cross-function argument/return capability与interprocedural memory-PHI；
- 正确性边界：只组合已验证的bounded direct-call integer ABI；indirect/mixed
  callsites、aggregate/vector/FP、memory-mediated跨函数来源、递归与general
  interprocedural alias graph仍fail closed。当前等级 I/T。

## 122. F127：Multilevel Memory Definedness PHI（2026-07-28）

- 研究问题：F125要求store位于merge的direct predecessor，编译优化插入一到多层
  memory-free forwarding blocks后，等价reaching definition会被不必要拒绝；
- Analysis：对每个immediate incoming edge独立执行最多64 block的reverse walk。
  逆序可跨同址earlier loads和无memory blocks；遇到分支时，其全部predecessors必须
  递归解析到同一StoreInst。不同store、未知memory effect、循环或预算溢出拒绝；
- Edge lowering：defined assignment仍放在最终immediate predecessor的edge block，
  但operand可引用祖先store已经计算的condition。所有incoming若解析到同一个store，
  则退回F124 common-store proof，不创建冗余PHI；
- 自动化证据：poison/defined stores分别经过2层/1层forwarding后在merge load，
  symbolic selector结果`1,2,2`；一臂exact defined clobber、另一臂沿祖先poison
  store forwarding的非对称图同样得到`1,2,2`；artifact声明
  `bounded-multilevel-memory-definedness-phi`并标记contract `multilevel`；
- 正确性边界：仅bounded acyclic predecessor subgraph；未知alias、partial memory
  effects和超过64 block的图fail closed。当前等级 I/T。

## 123. F128：Cyclic Memory Definedness PHI（2026-07-28）

- 研究问题：loop header load的entry/backedge stores形成真正动态memory condition
  state；F124 forward DFS和F127 reverse walk都必须拒绝cycle，不能直接复用静态
  common-store结果；
- Semantics：当loop header每个direct incoming edge都能在本edge子图内解析到exact
  full store时，F125 edge assignment自然成为每次迭代的state update。header支配
  某incoming predecessor时标记cyclic；producer sink proof以显式incoming-store
  membership替代会遇到backedge的forward DFS；
- Artifact：声明`bounded-cyclic-memory-definedness-phi`并在
  `memory_defined_phis` contract标记`cyclic`；既有validator继续逐edge验证assignment
  和loop-header jump；
- 自动化证据：entry poison store进入loop，第一次load/freeze的choice经SSA PHI
  保存；latch defined store更新condition，第二次load为7并退出，最终按第一次choice
  产生1/2。负例backedge不store，reverse proof遇到cycle，保持不可行并禁止capability；
- 正确性边界：本阶段要求每个iteration edge具有可证明的exact full store；纯
  no-write backedge由F131扩展。单一最终edge内部混合store/carry、多个alias cell、
  partial/atomic/volatile store、nested irreducible loops与并发内存仍fail closed。
  当前等级 I/T。

## 124. F129：Initial Memory Definedness Merge（2026-07-28）

- 研究问题：F127能沿no-store incoming edge回溯祖先store，但若该路径一直到function
  entry仍无runtime writer，global scalar initializer是合法且defined的reaching
  definition；直接拒绝会裁掉可恢复的poison-store路径；
- Analysis：仅在continuation entry function中对direct scalar integer global
  cell接受initial state；global必须有同类型`ConstantInt` initializer、非TLS且
  address space 0。Internal callee entry不能假定global重新初始化。Reverse result显式
  区分invalid与valid-initial，避免以null同时表示失败；
- Edge semantics：initial incoming endpoint没有StoreInst，F125 edge assignment
  写constant true；其他incoming poison store写其condition。Canonical numeric
  memory继续从已有initial image读取实际值；
- Artifact：声明`bounded-initial-memory-definedness-merge`，memory-PHI contract
  标记`initial`；production validator仍复检所有edge assignment/jump；
- 自动化证据：symbolic selector一臂local poison store，另一臂无store并读取global
  initializer 0；poison侧freeze产生1/2，initial侧确定返回2，合计`1,2,2`；
- 正确性边界：只支持entry function中的direct scalar ConstantInt global
  initializer；aggregate/GEP subcell由F130扩展。Stack uninitialized state、
  heap lifetime initial state、undef/poison
  initializer、symbolic alias与并发内存仍fail closed。当前等级 I/T。

## 125. F130：Initial Subobject Definedness Merge（2026-07-28）

- 研究问题：F129只把全局对象根地址上的scalar initializer视为defined entry
  state，实际LLVM IR常以独立重算的constant GEP访问数组元素或结构体字段；若
  no-store路径保留聚合初始化器、另一条路径写入poison，仍需要同一个edge-defined
  PHI表达动态definedness；
- Analysis：使用LLVM `GetPointerBaseWithConstantOffset`按target `DataLayout`
  取得global base与signed byte offset，再调用官方
  `ConstantFoldLoadFromConst`从aggregate initializer折叠目标typed scalar load。
  仅当结果为`ConstantInt`、global非TLS/address-space 0、且位于continuation entry
  function时，no-store incoming才是valid defined state；越界、undef/poison、
  非整数或不可折叠子对象保持fail closed；
- Composition：store/load可使用独立构造但base+offset等价的GEP，F115 canonical
  address proof确认同一cell；F125/F127 edge block在initial edge写true，在poison
  store edge写producer condition。Numeric memory仍读取序列化的aggregate initial
  image，不用另造常量值；
- Artifact：声明`bounded-initial-subobject-definedness-merge`，并在既有
  `memory_defined_phis` contract同时标记`initial`和`initial_subobject`。Production
  validator强制`initial_subobject => initial`，防止孤立子对象声明绕过initial
  state证明；
- 自动化证据：`[4 x i8] zeroinitializer`的element 2在一臂接收`add nsw` poison，
  另一臂保留初值；merge/freeze对symbolic selector产生`1,2,2`。Checker同时要求
  canonical-address与initial/subobject capabilities，并删除父级`initial`执行
  tamper oracle，生产执行器必须拒绝；
- 正确性边界：仅支持constant-offset、typed scalar integer、完整load/store且可由
  LLVM常量折叠证明的global subobject。Symbolic indices、partial overlap、
  aggregate/vector load、internal-callee初始假设、stack/heap lifetime初值、
  atomic/volatile与并发内存仍fail closed。当前等级 I/T。

## 126. F131：Cyclic No-Write Definedness Carry（2026-07-28）

- 研究问题：F128要求每个loop entry/backedge都存在exact full store；若某个
  backedge整条路径不写目标cell，LLVM memory state应保持上一迭代的definedness，
  既不能把它误当global initializer写true，也不应丢弃可恢复的poison路径；
- Analysis IR：reaching-definition结果由nullable store重构为显式`Store`、
  `Initial`、`Carry`三态。Reverse walk在回到目标loop-header load时，只扫描本次
  load之后的memory effects；若未遇到writer则返回`Carry`。非header cycle、未知
  memory effect、超过64 block预算仍拒绝；
- Edge semantics：entry store edge照常写producer condition；carry backedge执行
  `<load>__defined = <load>__defined`，从持久executor local state保留上一迭代
  sidecar。若header之后存在exact full store，reverse walk优先返回该store，不会
  错误carry旧状态；
- Artifact：声明`bounded-cyclic-memory-definedness-carry`，top-level
  memory-PHI contract同时标记`cyclic`与`carry`，具体endpoint标记`carry`。
  Production validator要求carry endpoint的唯一i1 identity assignment必须从同一
  defined destination自引用，并强制`carry => cyclic`及top-level/endpoint一致；
- 自动化证据：entry poison store后运行两次header load，backedge无store；第二次
  freeze仍按carried poison condition产生1/2。Checker删除父级`cyclic`后artifact
  被生产执行器拒绝。负例在同一最终backedge子图内一臂defined store、一臂no-write，
  因无法在单一edge assignment表达路径选择而保持不可行并禁止capability；
- 正确性边界：支持一个immediate incoming edge的全部bounded predecessor路径都
  解析为同一carry状态；canonical direct-arm store/carry由F132扩展。更深层
  forwarding、多个条件或不同store在进入同一最终edge前发生合流时，仍需递归
  memory-SSA transfer；symbolic alias、partial overlap、
  atomic/volatile、跨cell state与并发内存也不推测。当前等级 I/T。

## 127. F132：Conditional Store/Carry Transfer（2026-07-28）

- 研究问题：F131只能在整条backedge无writer时自carry；常见loop latch以一个
  canonical diamond条件更新cell，store臂应使用新definedness，no-write臂应保留
  prior state。把整个最终edge静态归为任一来源都会不健全；
- Static proof：reverse analysis在同一block发现恰好两个不同来源时，只接受一个
  direct parent以exact full store结束、另一个parent解析为Carry，且两parent各自
  只有同一个conditional `BranchInst` predecessor；branch的两个successor必须恰为
  这两臂。其他store/carry合流继续拒绝；
- Transfer semantics：最终backedge edge block生成一位
  `select(branch_condition, store_defined, prior_defined)`；若store位于false arm
  则交换两operand。Defined store使用true，poison/interprocedural store复用其已
  验证condition，carry arm自引用header load的defined destination；
- Artifact：声明`bounded-conditional-memory-definedness-carry`，contract和具体
  endpoint标记`conditional_carry`并继续标记`carry/cyclic`。Validator要求endpoint
  恰有一个一位select写声明destination、condition/两臂均为合法operand且恰一臂
  自引用prior defined state，同时复检top-level/endpoint标记一致；
- 自动化证据：entry poison store后，symbolic selector在latch选择defined store或
  no-write carry；第二次load/freeze分别产生确定2与1/2，完整终态为`1,2,2`。
  Checker删除top-level conditional标记后生产执行器拒绝。Store臂增加额外forward
  block的负例仍不可行且不声明capability；
- 正确性边界：当前证明只识别direct-arm canonical two-way branch，不跨arm内
  forwarding由F133扩展；仍不递归组合多个condition，也不合并两个不同conditional stores。
  Symbolic alias、partial overlap、atomic/volatile、异常边和并发memory effects
  继续fail closed。当前等级 I/T。

## 128. F133：Forwarded Conditional Carry（2026-07-28）

- 研究问题：F132的store/carry语义只依赖共同branch condition，但实现要求branch
  successor就是最终join parent；优化器插入一个或多个memory-free forwarding block
  后，语义不变却被拒绝；
- Static proof：对最终join的store与carry candidate分别沿unique-predecessor链反向
  枚举conditional-arm祖先，总reverse/ancestor walk共享64-block预算。Store链必须
  实际经过已证明的exact StoreInst所在block；两臂只有找到同一个conditional
  `BranchInst`且对应不同successors时才组合。Cycle、非唯一predecessor和预算溢出
  保持拒绝；
- Transfer：复用F132的最终edge i1 select，不增加运行时状态；branch condition在
  LLVM SSA中支配forwarding join。Store arm仍选择store condition，carry arm仍选择
  prior header definedness；
- Artifact：新增`bounded-forwarded-conditional-memory-definedness-carry`，
  contract/endpoint标记`forwarded_conditional_carry`，并同时保留
  conditional/carry/cyclic和multilevel capabilities。Validator强制forwarded标记
  依附conditional标记且top-level与endpoint一致；
- 自动化证据：defined store后增加独立forward block再与carry arm合流，symbolic
  selector仍产生`1,2,2`；checker移除父conditional标记后生产validator拒绝。
  三路最终join（两个forwarded store paths加carry）保持不可行并禁止新capability；
- 正确性边界：支持每个候选沿unique-predecessor链寻找同一二路split。多路join、
  中的同源endpoint由F134扩展。Nested conditional transfer、两个不同store
  condition、symbolic alias、partial
  overlap、atomic/volatile与并发memory effects仍fail closed。当前等级 I/T。

## 129. F134：Multi-Arm Equivalent-Source Carry（2026-07-28）

- 研究问题：一个外层store/carry branch的store臂可在写入后因无关控制流再次分裂，
  导致最终join有三个或更多predecessors；若多个endpoint都解析到同一个StoreInst，
  它们在definedness transfer上是同一source，不需要多值memory PHI；
- Source grouping：reverse analysis按store identity、source kind、已有condition、
  arm orientation、forwarded/multiarm flags的完整tuple将全部candidate分组。只有
  恰好两个groups且分别为exact Store和Carry时进入conditional composition；
- All-endpoint proof：先从representative endpoints提出共同conditional split，再
  对store group和carry group的每一个endpoint重新执行bounded ancestor-arm查找。
  每项必须映射到同一个BranchInst及对应同一个arm successor；不能以一个代表样本
  替整组背书。全部walk共享64-block预算；
- Transfer/Artifact：执行语义继续复用单一i1 edge select。新增
  `bounded-multiarm-conditional-memory-definedness-carry`，contract/endpoint标记
  `multiarm_conditional_carry`并依附conditional contract；validator复检层级与
  top-level/endpoint一致；
- 自动化证据：outer selector选择store/carry；store之后的第二selector分到两个
  forwarding endpoints，三路join执行产生carry侧1/2和两个defined侧2，即
  `1,2,2,2`。Checker移除父conditional标记后生产validator拒绝。两个不同StoreInst
  加carry形成三个source groups，保持不可行且禁止新capability；
- 正确性边界：只合并完全相同的reaching source identity。不同StoreInst即使当前
  都是defined constants的情况由F135扩展；递归condition tree、symbolic alias、
  partial overlap、atomic/volatile、异常边与并发memory effects继续fail closed。
  当前等级 I/T。

## 130. F135：Equivalent Defined-Store Carry（2026-07-28）

- 研究问题：F134按StoreInst identity分组，两个不同writers即使都写入LLVM语义上
  必定defined的值也形成不同groups；对numeric memory它们当然不同，但对一位
  definedness sidecar都严格等于true；
- Equivalence proof：两个`Kind::Store` sources仅在各自value都通过bounded
  `valueMayCreateDeferredPoison`分析、确认没有local flagged producer、已验证
  interprocedural poison或透明传播来源时视为definedness-equivalent。Exact address、
  full-width type与non-atomic/volatile条件仍由reaching-store proof保证；
- All-writer validation：source group保留每个endpoint自己的StoreInst。
  Ancestor-arm复检对每个candidate使用其自身writer作为required store，不能让
  representative writer替其他路径背书。最终edge select的store arm写true；
- Separation of concerns：该等价只改变definedness grouping；原有store lowering
  继续向numeric memory写各自实际值。因此constant 7/8不会被错误合并成同一个
  数据值；
- Artifact/证据：声明`bounded-equivalent-defined-store-memory-carry`，
  contract/endpoint标记`equivalent_defined_stores`并依附multiarm conditional
  contract；validator复检层级。两个distinct constant stores加carry产生
  `1,2,2,2`，删除父multiarm标记后生产执行器拒绝；一条defined writer和一条
  `add nsw` poison writer不等价，负例保持不可行；
- 正确性边界：只合并经当前bounded source analysis证明必定defined的writers。
  写入同一poison-capable SSA value的writers由F136扩展；
  symbolic alias、partial overlap、atomic/volatile、异常边和并发memory effects
  继续fail closed。当前等级 I/T。

## 131. F136：Shared-Poison Writer Carry（2026-07-28）

- 研究问题：不同StoreInst若写入同一个poison-capable LLVM SSA value，它们的
  numeric write sites不同，但definedness condition严格相同；F135只合并必定
  defined writers，仍会不必要拒绝该结构；
- Equivalence proof：两个`Kind::Store` candidates仅在
  `getValueOperand()`指针完全相同的情况下获得shared-poison equivalence。相同
  opcode、常量或语法形状但不同SSA producers不视为等价，不进行表达式猜测；
- Writer membership：首次实现时incoming只保留representative StoreInst，导致
  第二个writer的`poisonMergeLoadsForStore`查询失败、edge错误退化成true。修复后
  reaching source携带去重的全部`equivalentStores`集合；forward sink proof、
  reverse membership和每个store的condition传播都按该集合判断。代表store仅用于
  读取已证明共享的condition；
- Transfer/Artifact：numeric memory仍执行各自store，definedness store arm选择
  shared condition。声明`bounded-shared-poison-store-memory-carry`，
  contract/endpoint标记`shared_poison_stores`并依附multiarm conditional合同；
  validator复检层级与top-level/endpoint一致；
- 自动化证据：entry先写defined 7；两个route arms各自以不同StoreInst写同一个
  `add nsw` poison value，carry arm保留defined state。两个poison paths各产生1/2，
  carry产生2，总计`1,1,2,2,2`。删除父multiarm标记后生产validator拒绝。两个独立
  poison producers不合并，只有carry路径可行并返回2；
- 正确性边界：仅接受相同SSA value identity，不以结构哈希或SMT等价证明条件。
  两个不同producer的严格两层condition tree由F137扩展；symbolic alias、partial overlap、
  atomic/volatile、异常边和并发memory effects继续fail closed。当前等级 I/T。

## 132. F137：Nested Conditional Writer Carry（2026-07-28）

- 研究问题：两个不同poison writers和一个carry形成三个definedness sources。它们
  不能由F135/F136合并，但若CFG是严格的外层store-vs-carry、内层store-A-vs-store-B
  二叉树，其动态condition可精确组合成两层select；
- Static shape proof：只接受恰好三个source groups且每组一个endpoint，其中两个为
  exact Store、一个为Carry。Ancestor analysis必须找到一个内层conditional branch
  将两个store映射到不同successors，以及一个外层branch将两个store映射到同一
  successor、carry映射到另一successor；内层branch block必须等于外层store
  successor。全部reverse/ancestor工作共享64-block预算；
- Eager dominance：continuation core IR的select在执行前解析全部operands，并非
  lazy SSA control dependence。因此内层predicate与两个stored values必须由LLVM
  DominatorTree证明支配最终incoming terminator；否则即使源LLVM路径合法也拒绝，
  防止carry路径读取未定义local；
- Edge semantics：backedge先生成
  `inner = select(inner_condition, storeA_defined, storeB_defined)`，再生成
  `load_defined = select(outer_condition, inner, prior_defined)`；两层arm方向均从
  BranchInst successor顺序推导。Numeric memory继续由实际store路径决定；
- Artifact：声明`bounded-nested-conditional-memory-definedness-carry`，
  contract/endpoint标记`nested_conditional_carry`并依附multiarm conditional。
  Validator从外层非self arm解析inner destination，要求endpoint中恰有一个一位
  inner select，condition/两臂合法且内层两臂均不直接引用prior state；
- 自动化证据：两个支配latch的独立`add/sub nsw` producers分别由内层selector
  写入，外层selector还可选择defined carry；两个poison路径各产生1/2，carry产生2，
  总计`1,1,2,2,2`。删除父multiarm标记后production validator拒绝。三个独立
  poison stores加carry形成四source groups，保持不声明capability且仅carry返回2；
- 正确性边界：仅支持固定深度2、三个source groups、单cell exact full stores且
  所有eager operands支配最终edge。更深递归condition tree、路径局部condition的
  edge staging、symbolic alias、partial overlap、atomic/volatile、异常与并发
  memory effects仍fail closed。当前等级 I/T。

## 133. F138：Bounded Recursive Writer/Carry Condition Tree（2026-07-28）

- 研究问题：F137用固定字段描述两个writer，无法组合三个以上独立definedness
  sources。继续增加`secondary/tertiary`字段不能形成可递归证明或可验证的语义；
- Proof IR：新增扁平`MemoryDefinednessTreeNode`，叶节点为exact Store或唯一Carry，
  内部节点保存LLVM i1 branch condition及true/false子节点索引。当前预算为4--8个
  singleton source groups、深度3--6、一个carry、64次共享CFG访问；已有F137深度2
  合同保持不变；
- CFG reconstruction：对每个leaf从最终join endpoint沿唯一前驱链收集包含其writer
  的conditional ancestors。递归构造器只选择出现在当前全部leaf路径中且把集合
  严格分为两个非空successor partitions的branch，并从最外层split向内分解。无法
  完整分割、非singleton source group、多个carry或预算耗尽均拒绝；
- Eager soundness：所有内部predicate及所有store value必须为constant/argument，
  或由LLVM DominatorTree证明支配最终incoming terminator。该条件防止portable
  continuation的eager select读取只在某个LLVM arm上定义的local；
- Edge semantics：树以后序生成`recursive_memory_defined_*`一位select，根直接
  写入load的`__defined` sidecar；Store叶读取对应writer condition，Carry叶唯一
  自引用prior sidecar。Numeric page-COW memory仍由实际LLVM store路径更新；
- Artifact/validator：声明
  `bounded-recursive-memory-definedness-condition-tree`，并在contract/endpoint
  写入`recursive_conditional_carry`、`condition_tree_depth`和
  `condition_tree_leaves`。生产validator从根assignment反向重建select DAG，复检
  i1节点、无环、全部临时节点可达、精确深度/叶数、full-binary node count和唯一
  carry；endpoint与top-level元数据必须一致；
- 自动化证据：三个独立`add/sub/mul nsw` writer与一个defined carry形成深度3树，
  三个poison paths各产生freeze结果1/2，carry产生2，总计
  `1,1,1,2,2,2,2`。将endpoint深度篡改加一后生产validator拒绝。相同四叶CFG若
  predicate/value只在各自path局部定义，则不声明F138且仅carry返回2；
- 正确性边界：这是有界singleton-leaf control tree，不是通用MemorySSA。等价源
  分组与递归树的组合、路径局部lazy staging、symbolic alias、partial overlap、
  multi-cell transfer、atomic/volatile、异常和并发memory effects仍fail closed。
  当前等级 I/T。

## 134. F139：Grouped Recursive Source Tree（2026-07-28）

- 研究问题：F138要求每个tree leaf只有一个final CFG endpoint，因此同一writer在
  store之后发生无memory effect的控制分流时会被拒绝；此类endpoints具有完全相同
  的definedness source，不应人为复制tree leaf；
- Group representation：每个递归leaf现在保存一个由完整`sameSource` tuple证明的
  endpoint group。组内可以是同一StoreInst、必定defined writers或写入同一
  poison-capable SSA value的writers；leaf仍只表示一个definedness condition，
  numeric stores保持原路径语义；
- All-endpoint arm proof：候选branch必须出现在当前每个source group的每个endpoint
  ancestor list中；同一group的全部endpoints必须映射到同一个successor。只有随后
  才把整个group作为一个leaf加入true/false partition。任何组内跨臂分歧都使该
  branch不可用，不能由代表endpoint替其他成员作证；
- Artifact：复用F138的深度、叶数和根select合同，另声明
  `bounded-grouped-recursive-memory-definedness-condition-tree`并在top/endpoint
  标记`grouped_recursive_conditional_carry`。Validator要求该标记蕴含
  `recursive_conditional_carry`且两级元数据一致；删除父标记的篡改被拒绝；
- 自动化证据：深度3树的writer A在store后由额外symbolic branch分成两个latch
  endpoints，writer B、writer C和carry各一个endpoint。树仍为4 source leaves，
  但执行产生四个poison CFG paths的1/2与一个carry结果2，总计
  `1,1,1,1,2,2,2,2,2`；
- 正确性边界：只合并已由source identity证明且对每个选定ancestor branch同臂的
  endpoints。若同一source出现在tree的不同结构位置，需要带共享叶/DAG或条件
  归约；该位置重复随后由F140的受控leaf复制扩展。F138的4--8 leaves、深度3--6、
  唯一carry、64-block和eager-dominance预算均保持。当前等级 I/T。

## 135. F140：Repeated-Source Recursive Tree（2026-07-28）

- 研究问题：一个definedness source可以由不同StoreInst写入同一SSA value，并位于
  condition tree的不同结构位置。F139要求source group同臂，无法把这种非连续
  source class压成一个leaf；
- Position conflict proof：analysis为source group的全部endpoint建立
  `BranchInst -> successor`映射。如果同一个ancestor branch在组内映射到不同
  successors，则判定为structural position conflict；只检查代表endpoint不充分；
- Controlled duplication：发生位置冲突的Store source group按原CFG endpoints展开
  为多个tree leaves。每个leaf仍引用已经过identity proof的同一个definedness
  condition，但递归partition分别证明其结构位置。没有冲突的group继续使用F139
  单leaf表示；Carry group若发生位置冲突仍拒绝，保证树中只有一个prior-state
  self-reference；
- Budget/semantics：展开后的树仍必须有4--8 leaves、深度3--6、唯一carry，并满足
  64-block和eager-dominance预算。Lowering无需新增执行op，重复Store leaves读取
  同一condition，numeric stores及路径计数保持实际CFG语义；
- Artifact：声明
  `bounded-repeated-source-recursive-memory-definedness-condition-tree`，
  top/endpoint标记`repeated_source_recursive_conditional_carry`。Validator要求
  该标记蕴含F138 recursive contract；删除父标记后拒绝；
- 自动化证据：writer A/B在相邻嵌套branch的不同位置写同一个`add nsw` SSA value，
  writer C/D各有独立poison condition，再加一个carry。source classes为4，位置展开
  后为深度4、5叶树；四个poison CFG paths各产生1/2，carry产生2，总计
  `1,1,1,1,2,2,2,2,2`。F139 post-store fanout正例继续不声明F140 capability；
- 正确性边界：只复制Store leaves，不复制多个Carry位置；不做Boolean condition
  minimization，也不声称canonical BDD/DAG。多个Carry位置随后由F141扩展。超过
  leaf/depth/CFG预算、路径局部eager operand、symbolic alias、partial overlap和
  multi-cell transfer继续fail closed。当前等级 I/T。

## 136. F141：Multi-Carry Recursive Tree（2026-07-28）

- 研究问题：prior iteration definedness可能在递归树的多个互斥控制位置保持不变。
  F138--F140的“唯一Carry leaf”和根select恰有一个直接self arm是假定的形状约束，
  不是语义必要条件；
- Analysis：当Carry source group对同一个ancestor branch映射到不同successors时，
  复用F140 position-conflict证明并按endpoint展开。每个Carry leaf引用同一个prior
  `merge.defined`，但由完整递归branch partition保证运行时只选择一条路径；
- Edge/validator semantics：根select允许0或1个直接self arm；production validator
  从根递归遍历全部select operands，实际统计self-reference leaf occurrences。
  Artifact新增`condition_tree_carry_leaves`，top与endpoint必须和实际计数完全一致；
  非multi-carry树必须恰为1，multi-carry树必须为2--8。F137固定深度2 validator保持
  原有恰一直接self arm规则；
- Artifact：声明
  `bounded-multicarry-recursive-memory-definedness-condition-tree`，
  top/endpoint标记`multicarry_recursive_conditional_carry`，并要求其蕴含
  repeated-source与recursive父合同。篡改endpoint carry-leaf count后被树validator
  拒绝；
- 自动化证据：三个独立poison Store leaves与两个结构位置不同的Carry leaves形成
  深度4、5叶树。三个poison路径各产生freeze结果1/2，两个carry路径各返回2，总计
  `1,1,1,2,2,2,2,2`。F140 repeated-Store正例重新生成后仍为单carry且显式拒绝
  F141 capability；
- 正确性边界：仍要求Carry endpoints属于同一exact no-write source class，不允许
  hidden clobber。树预算仍为4--8 leaves、深度3--6和64-block；不做无界DAG/BDD
  化、symbolic alias、partial overlap或multi-cell MemorySSA。当前等级 I/T。

## 137. F142：Disjoint Multi-Cell Memory Definedness PHI（2026-07-28）

- 研究问题：`predecessorPoisonStores`此前把目标load之前或writer回溯途中出现的任意
  其他memory operation视为clobber。因此同一loop header只能为第一个cell建立
  definedness PHI，即使后续访问有静态不相交证明；
- Region proof：新增固定宽度scalar region disjointness。地址必须由target
  DataLayout规范化为constant base+offset；同一base仅在两个`[offset, offset+size)`
  区间严格不重叠时接受，不同base仅接受两个不同`GlobalVariable`对象。宽度未知、
  算术溢出、symbolic offset和其他base组合返回unknown；
- Reverse scan：header pre-scan允许越过非atomic/nonvolatile的同cell exact load或
  proven-disjoint scalar load/store；backward writer scan同样越过disjoint accesses，
  但overlap/unknown effect仍使当前cell证明整体失败。每个cell继续独立执行原有
  Store/Carry/conditional/tree reaching-source analysis；
- Composition：`prepareMemoryPoisonMerges`在全部merge建立后，对同一header中的load
  pairs再次运行disjoint proof并标记两侧contract。Edge block可顺序更新多个独立
  `__defined` sidecars；numeric memory及每个load的freeze semantics不合并；
- Artifact：声明`bounded-multicell-memory-definedness-phi`，每个参与contract标记
  `multicell`。Production validator要求同一merge block至少两个marked contracts；
  删除一个marker导致孤立multi-cell contract并被拒绝；
- 自动化证据：同一`[4 x i8]` global的offset 0/1 subcells在entry写7，回边可同时写
  两个独立poison values或carry。两个freeze的xor在poison路径可为0/非0，carry路径
  为0，产生`1,1,2`；两个load指向同一cell的对照组同样执行，但明确不声明multi-cell
  capability；
- 正确性边界：这里只组合独立full-width scalar cells，不传播跨cell value relation，
  不处理partial overlap、symbolic alias、memcpy-style region write、atomic/volatile、
  call effects或general points-to MemorySSA。当前等级 I/T。

## 138. F143：Identified-Object Multi-Cell Definedness PHI（2026-07-28）

- 研究问题：F142只在同一base的常量区间或两个不同global之间证明不相交，尚未覆盖
  continuation frame中天然独立的固定栈对象。这会使两个互不别名的static allocas
  因header中的交错访问而相互阻断definedness PHI；
- Object proof：将不同base证明扩展为lowerer能够完整建模的identified objects：
  `GlobalVariable`或entry block中的static `AllocaInst`。两个base必须是不同LLVM
  values，且两侧都属于上述集合；同一base仍回到F142的DataLayout常量区间证明。
  动态alloca、普通pointer argument、无`noalias`证明的call result与symbolic base
  一律保持unknown；
- Arithmetic hardening：固定scalar store size在转换为signed offset前先限制为
  `INT64_MAX`以内，随后才执行半开区间末端加法检查。该顺序避免超大类型宽度转换
  破坏overflow guard；
- Composition：当同一merge block中的load pair通过“不同identified object”路径
  得到不相交结论时，两侧merge除`multicell`外再标记
  `identifiedObjectMultiCell`。Reverse/header scans使用同一证明跨越另一个对象的
  load/store，每个对象的Store/Carry/condition-tree sidecar仍完全独立；
- Artifact：新增
  `bounded-identified-object-multicell-memory-definedness-phi`，并在参与合同写入
  `identified_objects`。Production validator要求该标记蕴含`multicell`，且同一
  block至少存在两个identified-object marked contracts；删除其中一个marker会
  形成孤立合同并被拒绝；
- 自动化证据：函数建立两个独立`[1 x i8]` static allocas，loop header分别load/
  freeze，回边同时写两个独立poison values或carry，执行得到`1,1,2`。F142同一
  aggregate offset0/1正例明确拒绝F143 capability，同cell对照组同时拒绝F142/F143，
  从而覆盖能力层级与反向误报；
- 正确性边界：这是LLVM identified static storage的有界扩展，不是general
  points-to analysis。不同heap allocations、`noalias`参数/返回值、跨函数逃逸对象、
  partial overlap、symbolic offset、region writes、atomic/volatile与unknown call
  effects继续fail closed。当前等级 I/T。

## 139. F144：Fixed-Heap-Object Multi-Cell Definedness PHI（2026-07-28）

- 研究问题：F143覆盖固定栈/全局对象，但continuation已经用F72/F75的site-local
  bounded slot pool执行heap allocations；两个同时存活的固定`malloc` sites也具有
  独立对象身份，仍因交错访问而阻断彼此的definedness PHI是不必要的；
- Allocation proof：只接受direct external `malloc`、单个constant integer size、
  大小非零且不超过`SYMCC_CONTINUATION_MAX_HEAP_OBJECT`、address space 0，并要求
  两个LLVM base values不同。该条件与`layoutHeap`的infallible fixed-capacity路径
  对齐；至少一侧必须是此类heap object，另一侧可以是同类heap或F143 static object；
- Lifetime argument：在LLVM定义良好的执行中，两个同时可访问的malloc返回对象
  生命周期不重叠存储；若对象已经free，继续通过旧pointer访问本身即为UB。Lowerer
  又为不同allocation sites分配不相交的synthetic slot pools，因此numeric memory
  和一位sidecar的对象身份一致。分析不跨越`free`/unknown calls，它们仍是clobber；
- Composition：F142的header/reverse scans使用扩展后的disjoint predicate越过另一
  fixed heap object的scalar load/store。Pair composition在两侧记录
  `fixedHeapObjectMultiCell`，各自的Store/Carry/recursive transfer保持独立；
- Artifact：声明
  `bounded-fixed-heap-object-multicell-memory-definedness-phi`，合同写入
  `fixed_heap_objects`并同时保留`multicell`。Production validator复检父合同及
  同一block至少两个heap-object markers；删除一侧marker被拒绝；
- 自动化证据：entry由两个不同`malloc(1)` sites分配对象并写7，loop header分别
  load/freeze，回边可同时写两个poison values或carry，执行得到`1,1,2`。F143双
  static-alloca正例和F142同aggregate正例均明确拒绝F144 capability，同cell负例
  拒绝全部三层multi-cell capability；同构的dynamic-size双malloc用例保持
  guarded/infeasible且不声明multi-cell capability；
- 正确性边界：不接受zero/dynamic-size malloc、calloc nullable semantics、realloc、
  同一callsite的多个动态实例、custom allocator、noalias参数/返回、跨函数逃逸
  points-to、symbolic base/offset、partial overlap、region/atomic/volatile access。
  因而这是bounded heap pool的专用证明，不是general heap MemorySSA。当前等级 I/T。

## 140. F145：Finite Pointer-Domain Multi-Cell Definedness PHI（2026-07-28）

- 研究问题：F142--F144只处理单一constant base+offset。Lowerer的F73/F74已经能执行
  finite pointer select/PHI union，但definedness reverse scan仍把整个pointer SSA
  当unknown，无法证明两个符号地址域始终不相交；
- Side-effect-free domain extraction：新增只读region collector，递归展开pointer
  `select`与无环pointer `phi`，沿constant `GEPOperator`累积signed 64-bit offset，
  叶子仅接受F143 static base或F144 fixed malloc base。它不调用会写diagnostic的
  lowering provenance builder，因此证明失败不会把原本可保守lower的函数变成错误；
- Budget：每个pointer域去重后最多`SYMCC_LIVE_ALIAS_LIMIT`个regions，默认16；
  两个域最多执行256次pair checks。循环PHI、symbolic GEP、offset算术溢出、null/
  ordinary argument/unknown base、超预算均返回unknown；
- Product proof：至少一侧实际包含select/PHI时才进入F145。对两个region sets做完整
  笛卡尔积；不同已识别base利用F143/F144对象身份，同base利用F142半开常量区间。
  只有每一对都不重叠才允许header/reverse scan跨越另一个访问，不能以concrete
  witness或代表alternative代替全域证明；
- Composition/Artifact：每个symbolic cell继续以原LLVM pointer SSA执行exact
  writer/load匹配和独立edge sidecar。声明
  `bounded-finite-pointer-domain-multicell-memory-definedness-phi`，合同标记
  `finite_pointer_domains`并蕴含`multicell`；production validator要求同一block
  至少两项，删除单个marker被拒绝；
- 自动化证据：pointer A在aggregate offsets `{0,1}`中选择，pointer B在`{2,3}`
  中选择，2x2 product全部不重叠；pointer select和前置diamond生成的两个pointer
  PHIs两种形态均执行得到`1,1,2`。负例把B域改为`{1,2}`，product存在A/B offset1
  重叠，保持guarded/infeasible且不声明任何multi-cell capability；
- 正确性边界：当前product proof故意忽略alternative guards之间的互斥关系。因此
  即使两个重叠regions由同一condition的互斥arms保护也会保守拒绝；该select-guard
  relational case由F146扩展。cyclic pointer PHI fixed point、symbolic index区间、
  partial overlap byte composition、general BasicAA/MemorySSA仍未覆盖。当前等级 I/T。

## 141. F146：Guard-Correlated Pointer-Domain Multi-Cell PHI（2026-07-28）

- 研究问题：F145的笛卡尔积证明忽略control guards。例如A为
  `select(c, offset0, offset1)`、B为`select(c, offset1, offset2)`时，cross product
  包含A.false/B.true的offset1重叠，但该组合要求`c=false ∧ c=true`，不可执行；
- Relational domain：finite region leaf新增一组`(i1 condition, expected polarity)`
  guards。展开select true/false arms时分别追加true/false guard；嵌套时若同一
  condition要求相反极性，该leaf本身不可行并被丢弃。Pointer PHI当前仍不生成关系
  guard，保持F145的保守全对全检查；
- Compatibility proof：对每个空间重叠region pair，比较两侧guard conjunction。
  只有发现同一LLVM condition identity且期望极性相反时才证明该pair不可行并跳过；
  无重叠pair直接通过。任一空间重叠且guards兼容的pair立即使整体证明失败。条件仅
  按SSA identity关联，不用语法相似、concrete witness或未经证明的SMT等价；
- Budget/Composition：沿用F145每域最多16个regions和最多256个pair checks。
  Header/reverse scans仅在完整关系proof通过后跨越另一个access，每个symbolic cell
  仍使用exact pointer SSA writer/load identity和独立edge sidecar；
- Artifact：声明
  `bounded-guard-correlated-pointer-domain-multicell-memory-definedness-phi`，
  合同标记`guard_correlated_pointer_domains`并蕴含`multicell`。它与F145的
  “all spatial pairs disjoint”capability分开，production validator要求同一block
  至少两个markers并拒绝孤立marker；
- 自动化证据：上述A `{0,1}`、B `{1,2}`共享同一condition，唯一cross-product
  overlap由互斥极性排除，loop执行得到`1,1,2`且只声明F146。负例把B true arm改为
  offset0，使A.true/B.true在兼容guards下实际重叠；执行保持guarded/infeasible，
  不声明任何multi-cell capability。F145 select/PHI正例重新生成后仍只声明F145；
- 正确性边界：仅处理相同i1 SSA condition的literal polarity冲突。逻辑互补但SSA
  不同的conditions、PHI edge correlation、path constraints、SMT guard
  unsatisfiability、cyclic pointer domains、symbolic offset interval和partial-byte
  composition继续fail closed。当前等级 I/T。

## 142. F147：PHI-Correlated Pointer-Domain Multi-Cell PHI（2026-07-28）

- 研究问题：两个不同pointer PHIs位于同一merge block时，它们的incoming choices由
  同一条CFG predecessor edge共同决定。F145把所有incoming做cross product，F146
  只认识select condition identity，都会保守包含不可能的跨edge组合；
- Edge relation：region guard新增`(phi merge block, incoming predecessor)`。
  展开每个PHI incoming时记录其实际predecessor；同一merge block要求两个不同
  predecessors的guard conjunction不可同时成立，同一predecessor则兼容。循环PHI
  仍由active-set拒绝；
- Compatibility：空间重叠pair若含同merge/different-predecessor关系可跳过；若含
  same-predecessor重叠则整体失败。Select polarity与PHI edge关系可共存在同一leaf，
  但分别记录F146/F147 capability；
- Artifact：声明
  `bounded-phi-correlated-pointer-domain-multicell-memory-definedness-phi`，合同标记
  `phi_correlated_pointer_domains`并蕴含`multicell`；validator要求同block至少两个
  markers并拒绝孤立marker；
- 自动化证据：diamond中A PHI为left/right offsets `{0,1}`，B为`{1,2}`；唯一空间
  overlap来自A.right/B.left的不同edges，loop执行得到`1,1,2`。将B.left改为offset0
  后A.left/B.left在同edge实际重叠，保持infeasible且不声明multi-cell。F145的
  all-pairs PHI与F146 select正例仍保持原capability；
- 正确性边界：仅关联同一LLVM merge block的直接incoming predecessor identity，
  不推导跨block等价edge、edge predicate SMT关系、循环PHI fixed point、symbolic
  offset区间或partial-byte composition。当前等级 I/T。

## 143. F148：Symbolic-Index Interval Multi-Cell PHI（2026-07-28）

- 研究问题：F145--F147只展开常量offset alternatives，仍拒绝F73已经可执行的
  one-term symbolic GEP；两个索引范围位于不相交子区域时不应互相阻断sidecar；
- Range proof：对`collectOffset`得到的唯一symbolic term调用LLVM 18
  `computeConstantRange(..., ForSigned=true)`，把constant与signed scale应用到
  range端点，并用`__int128`检查乘加溢出。Region由单点扩展为保守
  `[minimumOffset, maximumOffset]`；
- Product：同base regions仅在`maxA + widthA <= minB`或反向条件成立时不相交；
  不要求range精确，过近似仍分离即可。Select/PHI guards可与区间组合，未知/full
  range通常自然导致拒绝；
- Artifact：声明
  `bounded-symbolic-index-interval-multicell-memory-definedness-phi`，合同标记
  `symbolic_index_intervals`并蕴含`multicell`；validator要求同block至少两个marker；
- 证据：`[2 x [2 x i8]]` global中两个GEP分别以常量subarray 0/1为基准，共享
  `and i8 selector,1`索引范围；区间`[0,1]`与`[2,3]`分离，执行得到`1,1,2`。
  两者均指向subarray 0时保持infeasible且不声明capability；
- 边界：只接受一个collectOffset symbolic term、<=64-bit integer range与constant
  scale；多项仿射、跨变量关系、wrap-sensitive精确域、partial-byte composition和
  cyclic MemorySSA继续fail closed。当前等级 I/T。

## 144. F149：Byte-Lane Memory Definedness Composition（2026-07-28）

- 研究问题：F114--F148把一个scalar memory cell的poison definedness表示为一位
  sidecar，并要求reaching writer与load同宽。真实LLVM IR经SROA、memcpy lowering
  或窄字段更新后，经常由多个部分写共同定义一个宽load；继续要求exact full-width
  writer会把可证明的freeze语义退化为eager UB guard；
- Lane domain：对2--8 byte、byte-aligned integer load建立按地址递增的lane vector。
  从load向后沿最多64个basic blocks反向扫描，每个lane绑定第一个覆盖它的非
  atomic/non-volatile scalar store，即该byte的最近写者。相同base使用DataLayout
  constant offset和半开区间交集；已证明不相交的访问可跨越，未知clobber、覆盖缺口、
  多前驱或循环立即返回unknown；
- Initial completion：如果扫描到entry仍有未覆盖lane，只有
  `ConstantFoldLoadFromConst`证明整个typed global load为`ConstantInt`时，才能把
  剩余lane标记为`initial`。Stack/heap未初始化字节、undef/poison initializer和
  internal-callee entry均不推断为defined；
- Definedness transfer：每个可能产生deferred poison且真正成为lane来源的store
  获得独立一位sidecar。宽load的definedness是所有唯一poison-capable source
  sidecars的AND；普通defined writer和initial lane贡献true。后来窄写覆盖旧byte时，
  reverse scan自然选择新writer，未被覆盖的lane仍保留旧writer，因此支持重叠写的
  byte-precise last-writer语义；
- Sink proof：旧store-to-load前向证明现在可以越过已由同一verified lane contract
  解释的部分clobber，并且仍遍历全部successors。任何未被exact或lane contract覆盖
  的潜在consumer都会使deferred propagation失败，不能仅凭一个正例load放宽整条
  store use chain；
- Artifact：函数写入`byte_lane_memory_definedness`，逐lane记录`source`、
  `store`、`store_byte`、`store_bytes`和可选`defined`，store指令带唯一
  `byte_lane_store`及sidecar destination。Capability为
  `bounded-byte-lane-memory-definedness`。Production validator重建完整lane覆盖、
  store宽度/唯一性、紧邻sidecar、load后的AND数据流、`initial`/`cross_block`
  一致性，并要求capability与合同双向对应；
- 自动化证据：两个i8 writers跨block组成i16 load并在poison路径产生`1,2`；一个
  i8 poison writer与global initial byte组成同一load；两个实际defined的nsw writers
  组合后精确返回little-endian `1026`；i16 poison writer被后续i8高字节写部分覆盖，
  lane0/lane1分别绑定旧/新writer并产生`1,2`。F149阶段的分支两臂对照组需要
  lane PHI，因此未声明本capability；该边界随后由F150的独立edge contract覆盖。
  删除一个lane或删除capability均被validator拒绝；
- 验证：LLVM 18 compiler target构建通过，定向五组lower/execute/tamper oracle通过，
  Python unittest `284/284`，LLVM/CMake lit `94/94`；最终完整build、syntax和
  whitespace检查见阶段验证记录；
- 正确性边界：F149是bounded acyclic/single-predecessor byte MemorySSA，不是通用
  MemorySSA。分支来源的per-lane PHI、循环lane carry、symbolic address overlap、
  memcpy/memmove region-source sidecar、atomic/volatile、unknown calls、非byte-aligned
  scalar和超过8 byte的load仍fail closed。控制流lane-PHI由F150继续扩展，F149
  本身仍只声明直线/唯一前驱合同。当前等级 I/T。

## 145. F150：Direct-Predecessor Byte-Lane Definedness PHI（2026-07-28）

- 研究问题：F149能在单一路径组合多个byte writers，但一个wide load位于CFG join时，
  不同predecessor可拥有不同的lane最近写者集合。把所有路径writers无条件AND会让
  未执行路径污染definedness；只选一个代表path又不完备；
- Per-edge reconstruction：load所在block要求2--64个直接predecessors，每个
  predecessor只有merge这一successor。对每条edge分别从endpoint反向扫描，使用
  F149相同的byte-aligned width、constant base+offset、nearest-writer、disjoint
  access和typed global initial规则；每条path必须完整覆盖全部lanes。若未覆盖lane
  需要穿越另一个multi-predecessor join、cycle或unknown clobber，则整个PHI proof
  返回unknown；
- Edge transfer：为每条incoming edge收集该path上唯一的poison-capable writer
  sidecars，在lowerer已有的edge block内做AND并写同一个
  `load__byte_phi_defined` destination。没有poison-capable source的edge写true。
  Numeric memory仍由正常load读取；freeze只读取沿实际edge建立的defined bit，因此
  左右路径writers不会交叉合取；
- Sink closure：raw per-edge candidates在deferred-poison sink分析前先注册
  store-to-load关系；筛选完成后再按F149+F150 accepted contracts重建函数内索引。
  这既允许writer sidecar生成，又防止rejected candidate残留为伪sink；
- Artifact：新增`byte_lane_memory_definedness_phis`，合同包含load、defined、
  merge block、width和2--64个incoming endpoints；每个endpoint记录实际edge block、
  可选initial和完整lane vector。Capability为
  `bounded-byte-lane-memory-definedness-phi`，与F149直线capability分离；
- Validator：逐edge复检lane编号全集、store ID/width/local-byte、initial marker、
  紧邻store sidecar、edge block末端到merge的jump，以及仅由该endpoint source
  sidecars/true构造的AND数据流。所有lane stores必须被F149或F150合同引用；
  capability与至少一个PHI合同双向一致；
- 自动化证据：一条path以poison/defined两个i8 writers组成i16，另一条path以两个
  defined writers组成i16，symbolic edge+freeze执行得到`1,2,2`；两路分别只写低/
  高byte并由global initial补足另一lane时得到`1,1,2,2`。删除incoming lane或删除
  capability均被拒绝。负例使未覆盖lane必须穿越上游multi-predecessor join，保持
  guarded/infeasible且不声明F150；
- 验证：LLVM 18完整build、Python unittest `284/284`、LLVM/CMake lit `94/94`、
  `llvm-as`、Python syntax、正向/initial/negative/tamper与whitespace检查通过；
- 正确性边界：只处理direct-predecessor acyclic lane state，不包含backedge carry、
  conditional store/carry tree、跨join递归source grouping、symbolic overlap、
  region-copy source、atomic/volatile和unknown calls。下一依赖项是bounded cyclic
  byte-lane carry fixed point。当前等级 I/T。

## 146. F151：Cyclic Byte-Lane Definedness PHI（2026-07-28）

- 研究问题：F150在每条直接前驱edge上计算一个aggregate defined bit，但部分写循环
  需要保留“哪些byte仍沿回边继承旧状态”。若只回传aggregate bit，一条低byte poison
  写会错误地把未写高byte也标为poison；若整值carry，又会漏掉低byte的新writer。
  因此循环状态必须提升为每个address-order byte一位的fixed-point vector；
- Candidate proof：仅处理2--8 byte、byte-aligned、non-atomic/non-volatile integer
  load，header有2--64个直接前驱且每个endpoint只有header这一successor。每条edge
  从末端反向执行最多64-block nearest-writer scan：遇到同一header load时，尚未覆盖
  lane标记为`carry`；到函数entry时只允许typed constant global initial补足；已证明
  disjoint的访问可越过，未知clobber、多前驱corridor和活动扫描环立即返回unknown；
- Alias-closed sink：为避免旧store-to-load前向扫描在回边上因cycle失败而被任意绕过，
  F151在整个函数内检查目标region的memory-effect closure。除合同中的writers与目标
  load外，任何可能alias的load/store、volatile/atomic访问或未知memory effect都会
  拒绝candidate。只有通过该证明的store才可用合同记录的目标load作为deferred-poison
  sink；筛选结束后会清空raw索引并从F149--F151 accepted contracts重建；
- Per-lane transfer：每个合同为load建立`bytes`个稳定lane state variables。
  Entry edge把defined/full-width writer lane写为true或对应store sidecar；backedge
  对新写lane写sidecar，对未写lane执行self-identity carry。Header完成numeric load
  后按lane state做完整AND并生成aggregate defined bit，`freeze`仅在该bit为false时
  使用稳定nondeterministic value；
- Artifact：新增`cyclic_byte_lane_memory_definedness_phis`，记录`load`、
  aggregate `defined`、header `block`、`bytes`、有序`lane_defined`变量和2--64个
  incoming edge vectors。每个lane source严格为`store`、`initial`或`carry`；
  capability为`bounded-cyclic-byte-lane-memory-definedness-phi`，与F149直线和
  F150无环merge能力分离；
- Production validator：要求lane state名字非空、唯一且与width一一对应；逐edge
  检查完整lane编号、末端jump、store ID/width/local byte、紧邻sidecar，并要求每个
  lane destination恰好有一次合法identity transfer。`carry`必须读取自身，initial/
  defined store必须写true，poison-capable store必须读取声明sidecar。Header采用
  dependency-set重建AND链，最终aggregate必须依赖全部lane而非任意子集。所有带
  `byte_lane_store`的指令必须被F149--F151某一合同引用，capability与合同双向一致；
- 自动化证据：entry以defined i16初始化两个lanes，第二轮前仅以poison i8覆盖低
  lane，高lane沿回边carry；第一次freeze保留42，第二次freeze生成两种稳定选择，
  最终返回集合`1,2`。负例在回边加入额外aliasing i8 load，alias closure失败，
  producer恢复eager defined-value guard，状态不可行且不声明F151。Checker还把
  `carry`伪造成`initial`以及删除capability，production validator均拒绝；
- 验证：LLVM 18完整build、`llvm-as`、Python unittest `284/284`、LLVM/CMake lit
  `94/94`、Python syntax、正例/负例/metadata tamper/capability tamper、
  完整`live_continuation_lowering.ll`与whitespace检查通过；
- 正确性边界：这是bounded、single-header、alias-closed的per-lane fixed point，
  不是通用MemorySSA。Conditional partial stores、多个循环headers、irreducible
  CFG、symbolic overlap、跨调用memory effects、memcpy/memmove region sources、
  atomic/volatile和超过8 byte的state仍fail closed。下一依赖是conditional
  per-lane carry/source tree，再后续是region-copy definedness summary。当前等级
  I/T。

## 147. F152：Conditional Cyclic Byte-Lane Carry（2026-07-28）

- 研究问题：F151要求回边路径上的partial writer无条件执行。常见loop body却是
  `if (condition) store narrow;`，write/carry两臂先合流到latch，再由唯一backedge
  返回header。若在latch才读取write-arm sidecar，skip路径会引用从未定义的SSA
  local；若直接把latch视为carry，又会漏掉实际执行的writer；
- Strict-diamond proof：只接受一个conditional branch的两个直接successor arms，
  两臂各自只有同一join这一successor且只有该branch这一predecessor。一臂必须含
  唯一、constant base+offset、non-atomic/non-volatile、与2--8 byte load部分重叠的
  scalar writer；另一臂不得含aliasing writer。额外aliasing load、未知memory
  effect、两个writers、full-width writer或非严格CFG均返回unknown。函数级
  alias-closure继续由F151复检整个region；
- Edge-state semantics：lowerer为`store-arm -> join`和`carry-arm -> join`都建立
  synthetic edge block。Store edge对被覆盖lanes写writer sidecar/true，对未覆盖
  lanes写self-carry；carry edge对全部lanes写self-carry。`join -> ... -> header`
  backedge随后只携带已经更新的vector，因此任何路径都不会求值未执行arm的sidecar；
- Artifact：新增
  `conditional_cyclic_byte_lane_memory_definedness_phis`和
  `bounded-conditional-cyclic-byte-lane-memory-definedness-phi`。除F151的header、
  `lane_defined`和incoming vectors外，合同含一个`conditional_transfers`项，记录
  branch、store/carry arms、join、两个synthetic edges、`store_when_true`以及完整
  store/carry lane vector；
- Production validator：先执行F151的seed edge、header complete-AND和incoming
  carry校验，再重建branch true/false拓扑、arm-to-edge jumps、edge-to-join jumps，
  并要求join实际跳向该header的一个all-carry incoming edge。每条lane在两个arm
  edges上都必须恰好赋值一次：store edge读取匹配sidecar/true或自身，carry edge
  必须读取自身。循环至少有一条不含carry的完整seed endpoint，避免首次header
  load引用未初始化lane state；
- 自动化证据：symbolic i1控制write/skip，entry以i16常量初始化，write arm以poison
  i8覆盖低lane，得到状态集合`1,1,2`；skip路径保持42，write路径的第二次freeze
  产生两种稳定结果。负例在carry arm加入额外aliasing load，candidate失败，常量
  true的write路径恢复eager guard并不可行，不声明F152。Checker翻转
  `store_when_true`或删除capability时，production validator均拒绝；
- 验证：LLVM 18完整build、`llvm-as`、Python syntax、Python unittest `284/284`、
  LLVM/CMake lit `94/94`、正例/负例/topology tamper/capability tamper、
  完整`live_continuation_lowering.ll`与whitespace检查通过；
- 正确性边界：当前仅一个direct strict diamond和一个partial writer，不处理
  forwarded arm corridors、多arm switch、两个条件writers、nested/recursive
  condition tree、多个conditional updates、symbolic overlap、region copy或跨调用
  memory effect。下一依赖是forwarded/multiarm conditional lane transfer，再后续
  才是recursive per-lane source tree。当前等级 I/T。

## 148. F153：Forwarded Conditional Cyclic Byte-Lane Carry（2026-07-28）

- 研究问题：编译器CFG清理、coverage instrumentation或手写状态机常在conditional
  branch与实际writer/join之间插入若干无条件blocks。F152要求branch successors
  就是join predecessors，会保守拒绝这些语义等价的forwarded diamonds；
- Corridor proof：从join的两个直接predecessors分别反向沿unique-predecessor、
  unconditional single-successor chain搜索，最多16个blocks；两条path必须遇到同一
  conditional branch的不同successors，block集合互不相交。只接受最内层共同branch，
  遇到nested conditional、多前驱、cycle、非branch terminator或超预算即返回unknown；
- Memory proof：writer scan从单block扩展到整条corridor。两条path中恰有一条含唯一
  constant-offset partial scalar writer，另一条无alias writer；disjoint accesses可
  跨越，alias load/unknown effect继续由arm scan与函数级alias closure拒绝。状态仍在
  两个join-predecessor synthetic edges上更新，因此forwarding blocks不引入未定义
  sidecar读取；
- Artifact：新增
  `forwarded_conditional_cyclic_byte_lane_memory_definedness_phis`与
  `bounded-forwarded-conditional-cyclic-byte-lane-memory-definedness-phi`。
  Transfer在F152字段外增加`store_successor`、`carry_successor`与`forwarded=true`，
  区分branch直接targets和实际arm endpoints；
- Validator：从完整continuation blocks图重建predecessor sets。Header的实际
  predecessors必须与incoming edge合同完全相同；每条corridor从声明successor沿
  最多16个真实jump到endpoint，且每个block只有期望的唯一predecessor；join的实际
  predecessors必须恰为两个synthetic edges。随后复用F152逐lane transfer、seed、
  all-carry backedge和complete header AND证明；
- 自动化证据：write/carry各经过两个forwarding blocks，symbolic write/skip仍得到
  `1,1,2`。负例在write corridor加入第二个conditional与multi-predecessor tail，
  proof拒绝，常量write路径恢复eager guard并不可行。Checker把
  `store_successor`伪造成endpoint或删除capability时，production validator拒绝；
- 验证：LLVM 18 compiler build、`llvm-as`、Python syntax、F151--F153定向执行、
  nested negative与corridor/capability tamper通过；Python unittest `284/284`、
  LLVM/CMake lit `94/94`和完整build通过；
- 正确性边界：只允许两条线性corridors、一个conditional update和一个writer。
  Switch/multiarm、两臂都写、多个顺序conditional updates、nested/recursive source
  tree、irreducible CFG、symbolic overlap与region-copy sources仍fail closed。
  下一依赖是multiarm conditional lane transfer。当前等级 I/T。

## 149. F154：Multi-Arm Conditional Cyclic Byte-Lane Carry（2026-07-28）

- 研究问题：一个循环更新常由优先级条件树选择多个窄写入，例如第一臂更新低字节、
  第二臂更新高字节、末臂保持旧值。F152/F153只能表示一个Store/Carry二选一，
  把两个writer折叠成aggregate condition会丢失逐lane来源，也可能在未执行路径读取
  writer sidecar；
- Bounded tree proof：接受恰好三个direct endpoints汇入同一join的严格两级二叉树。
  Root branch的一条边直达root arm，另一条边唯一进入inner branch；inner的true/false
  分别直达另两臂。每个arm只有声明branch这一predecessor和join这一successor，
  inner branch也只能由root进入。三臂中必须恰有两个各含一个constant-offset partial
  scalar writer，第三臂无alias writer；函数级alias closure继续排除额外load/store、
  unknown effect、atomic和volatile访问；
- Lane fixed-point semantics：两个writer arms分别在自己的synthetic edge上把覆盖
  lane写为对应defined sidecar/true，并self-carry其余lanes；纯carry arm对全部lanes
  self-carry。Join之后只转发已完成更新的lane vector，header仍以dependency-checked
  complete AND生成aggregate defined bit。因而三个互斥路径都不求值其他路径的局部
  sidecar；
- Artifact：新增
  `multiarm_conditional_cyclic_byte_lane_memory_definedness_phis`与
  `bounded-multiarm-conditional-cyclic-byte-lane-memory-definedness-phi`。一个
  `multiarm_transfers`项记录`root_branch`、`inner_branch`、`join`及三个带
  `root`/`inner_true`/`inner_false` route的arm；每个arm显式记录block、synthetic
  edge与完整store/carry lane vector；
- Production validator：从完整continuation图重建root/inner branch targets、
  inner唯一predecessor、三个arm和edge的唯一predecessor、arm-to-edge与edge-to-join
  jumps以及join的精确三edge predecessor set。它还要求两个不同store IDs、一个
  all-carry arm、每个writer arm同时含store与carry lane、store确实位于对应arm且
  紧邻匹配sidecar，并逐lane核验edge assignment。Join必须流向header的all-carry
  incoming path，且循环必须有完整non-carry seed；
- 自动化证据：两个symbolic i1依次选择低字节poison writer、高字节poison writer
  或carry，稳定freeze的返回多重集为`1,1,1,2,2`。四臂深树超过证明范围时不声明
  capability，常量poison路径恢复eager guard并不可行。Checker伪造重复route或删除
  capability时，production validator拒绝；
- 验证：LLVM 18 compiler build、`llvm-as`、Python syntax、正例、四臂负例、
  route/capability tamper与whitespace检查通过；Python unittest `284/284`、
  LLVM/CMake lit `94/94`和完整build通过；
- 正确性边界：当前只接受direct、两级、三叶树和两个partial writers。Forwarded
  multiarm corridors、四叶以上recursive tree、顺序多次conditional update、
  switch-chain归一化、symbolic overlap、region-copy来源、跨调用memory effects及
  general cyclic MemorySSA仍fail closed。下一依赖是recursive per-lane source tree，
  然后才是region-copy definedness summary。当前等级 I/T。

## 150. F155：Forwarded Multi-Arm Cyclic Byte-Lane Carry（2026-07-28）

- 研究问题：F154的两级三叶树要求三个branch successors就是join predecessors；
  instrumentation、loop rotation和CFG cleanup通常会在各arm插入若干无条件blocks，
  writer也可能位于corridor中间。只比较endpoint metadata既会漏掉等价程序，也无法
  排除隐藏的二次分支或旁路入口；
- Corridor proof：对join的三个predecessors分别反向沿unique-predecessor、
  unconditional single-successor chain搜索，单臂最多16 blocks，直到最近conditional
  branch。三个corridors必须互不相交；其中两条命中同一inner branch的true/false
  successors，第三条命中root branch的另一个successor。Root的剩余successor必须
  直接且唯一进入inner branch，避免把未经证明的decision corridor混入树结构；
- Memory/state semantics：writer scan覆盖每条corridor的全部blocks，仍要求两个
  corridors各含一个partial writer、第三条无alias writer。Lane state只在三个实际
  endpoint-to-join synthetic edges更新，因此中间块不会提前读取sidecar；函数级
  alias closure继续排除合同之外的潜在alias access和unknown effects；
- Artifact：新增
  `forwarded_multiarm_conditional_cyclic_byte_lane_memory_definedness_phis`与
  `bounded-forwarded-multiarm-conditional-cyclic-byte-lane-memory-definedness-phi`。
  F154每个arm增加`successor`，transfer设置`forwarded=true`，从而区分branch target
  与实际join endpoint；
- Production validator：从声明successor沿最多16个真实jump重建每条corridor，
  要求首块predecessor是对应root/inner branch、后续块只有前一块这一predecessor、
  三条path互斥且endpoint跳向自己的synthetic edge。Writer必须真实位于对应corridor；
  随后继续复检三个edge、join精确predecessor set、two-writer/one-carry partition、
  all-carry backedge、seed和header complete AND；
- 自动化证据：low/high/carry三条arms各经两个blocks，writer位于tail，两个symbolic
  条件仍产生`1,1,1,2,2`。负例在low corridor插入nested conditional并让tail拥有
  两个predecessors，proof拒绝，常量poison路径恢复eager guard且不可行。Checker
  把一个`successor`伪造成endpoint或删除capability时，production validator拒绝；
- 验证：LLVM 18 compiler build、`llvm-as`、Python syntax、正例、nested negative、
  successor/capability tamper与whitespace检查通过；Python unittest `284/284`、
  LLVM/CMake lit `94/94`和完整build通过；
- 正确性边界：decision root-to-inner仍必须direct；只接受三叶、两个writers和线性
  arm corridors。Forwarded decision corridor、四叶以上recursive tree、顺序多次
  updates、switch、symbolic overlap、region copy、跨调用effects与irreducible CFG
  仍fail closed。下一依赖是bounded recursive per-lane source tree。当前等级 I/T。

## 151. F156：Recursive Conditional Cyclic Byte-Lane Carry（2026-07-28）

- 研究问题：优先级更新链和lowered switch常产生四个以上的writer/carry leaves；
  为每一种固定形状增加特殊规则不可扩展。所需抽象不是在join构造会求值全部writer
  sidecars的巨大ITE，而是把控制树证明与leaf-local lane state transfer分离；
- Recursive tree proof：对拥有4--8个direct predecessors的join，枚举conditional
  root并递归跟随true/false successors。每个内部节点必须是二路conditional branch，
  每个child只能由该parent到达；所有路径必须恰好覆盖join的全部leaf predecessors，
  无共享leaf、cycle或额外出口。树深上限6、总branch+leaf上限64，且只能有一个满足
  完整partition的root；
- Source proof：每个leaf只能包含至多一个constant-offset partial scalar writer；
  至少两个leaves写入、至少一个leaf纯carry，且writer StoreInst两两不同。每个writer
  leaf的未覆盖lanes carry，纯carry leaf的全部lanes carry。函数级alias closure继续
  排除树外的潜在alias access和unknown memory effect；
- Artifact：新增
  `recursive_conditional_cyclic_byte_lane_memory_definedness_phis`与
  `bounded-recursive-conditional-cyclic-byte-lane-memory-definedness-phi`。
  `recursive_transfers`记录root、join、depth、完整branch节点`block/true/false`和
  leaf节点`block/edge/lanes`，避免仅凭扁平source列表猜测层次；
- Production validator：核验4--8 leaves、`branches = leaves - 1`、depth 2--6，
  并从真实branch terminators递归重建reachability、唯一parent、无共享/无环和完整
  node partition；实际最大深度必须等于声明。每个leaf-to-edge-to-join关系、join
  精确predecessor set、writer所在leaf与sidecar、逐lane assignment、至少two-store/
  one-carry partition、all-carry backedge、seed及header complete AND均独立复检；
- 自动化证据：深度3的四叶优先级树含low/high/low三个独立poison writers和一个
  carry leaf，三个symbolic条件产生`1,1,1,1,2,2,2`。负例让一个leaf多出不可达
  predecessor，tree proof拒绝，常量poison路径恢复eager guard并不可行。Checker
  篡改depth或删除capability时，production validator拒绝；
- 验证：LLVM 18 compiler build、`llvm-as`、Python syntax、四叶正例、shared-leaf
  negative、depth/capability tamper与whitespace检查通过；Python unittest
  `284/284`、LLVM/CMake lit `94/94`和完整build通过；
- 正确性边界：leaves必须direct，writers不可重复或分组，carry leaf可以有多个但
  当前测试覆盖一个；不支持forwarded recursive arms、leaf group/repeated source、
  sequential updates、symbolic overlap、region copy、跨调用effects、irreducible
  或超过预算的树。下一依赖是forwarded recursive lane tree，再处理grouped/repeated
  lane sources。当前等级 I/T。

## 152. F157：Forwarded Recursive Cyclic Byte-Lane Carry（2026-07-28）

- 研究问题：F156仍要求branch successors直接命中下一个branch或leaf，而真实CFG会在
  decision-to-decision和decision-to-leaf edges上插入无条件blocks。只扩展leaf arms
  不足以覆盖loop rotation产生的decision corridor；
- Recursive corridor proof：每个conditional edge从实际successor开始，沿
  unique-predecessor、unconditional single-successor chain前进，最多16 blocks，
  直到下一个声明branch或leaf。所有intermediate blocks全树唯一，不能被另一条edge
  复用；terminal仍参与F156的unique-parent、acyclic、complete leaf partition和
  depth<=6证明。总branch、leaf与intermediate blocks不超过64；
- Writer/state proof：leaf writer scan覆盖到该leaf的完整terminal corridor；
  decision corridors若含潜在alias access会因函数级alias closure被拒绝。Lane state
  仍只在实际leaf endpoint-to-join edge更新，不在decision corridor构造会触及局部
  sidecar的select；
- Artifact：新增
  `forwarded_recursive_conditional_cyclic_byte_lane_memory_definedness_phis`与
  `bounded-forwarded-recursive-conditional-cyclic-byte-lane-memory-definedness-phi`。
  Transfer设置`forwarded=true`，每个leaf增加branch-edge `successor`；branch节点的
  true/false保留实际corridor入口；
- Production validator：从每个真实branch target沿最多16个jump重建terminal，
  逐块要求精确唯一predecessor并维护全树corridor-membership set；重新计算branch
  depth和完整node partition，再要求leaf声明successor等于实际corridor首块。
  Writer可位于leaf corridor任意块，但不能出现在其他corridor；随后复检所有leaf
  edges、join、lane assignments、seed与header AND；
- 自动化证据：四叶树的root-to-inner decision edge及四个leaf arms都加入forwarding
  blocks，三个symbolic条件仍得到`1,1,1,1,2,2,2`。负例在writer corridor插入nested
  branch并形成multi-predecessor tail，proof拒绝且常量poison路径不可行。Checker
  把leaf `successor`伪造成endpoint或删除capability时，production validator拒绝；
- 验证：LLVM 18 compiler build、`llvm-as`、Python syntax、forwarded正例、nested
  negative、successor/capability tamper与whitespace检查通过；阶段全量回归为
  Python unittest `284/284`、LLVM/CMake lit `94/94`；
- 正确性边界：仍要求严格二叉树、4--8 leaves、depth<=6、distinct leaf writers，
  不支持shared/grouped/repeated writer sources、顺序updates、switch-specific
  semantic grouping、symbolic overlap、region copy或跨调用effects。下一依赖是
  grouped/repeated recursive lane sources。当前等级 I/T。

## 153. F158：Grouped Recursive Cyclic Byte-Lane Source（2026-07-28）

- 研究问题：一个partial writer可能在内部conditional node的terminator之前执行，
  随后多个控制leaves共享该定义。F156要求writer位于leaf，因而拒绝这种
  store-then-fanout形状；简单复制store ID又无法证明每个引用leaf都真实执行过writer；
- Group proof：在F156 direct tree上允许恰好一个internal branch block含唯一partial
  writer。沿严格unique-parent tree反向检查，该block必须是至少两个leaves的结构祖先；
  这些descendant leaves不得再含自己的alias writer。树外至少还有一个独立leaf
  writer和一个carry leaf，使合同包含至少两个真实source stores并保留loop carry；
- State semantics：group writer执行后立即产生一次defined sidecar，所有且仅有其
  descendant leaves在各自edge transfer中读取该sidecar；未覆盖lanes继续self-carry。
  因sidecar定义block结构支配整组leaves，不会出现未执行路径读取局部值；
- Artifact：新增
  `grouped_recursive_conditional_cyclic_byte_lane_memory_definedness_phis`与
  `bounded-grouped-recursive-conditional-cyclic-byte-lane-memory-definedness-phi`，
  transfer设置`grouped=true`。同一store ID在组内多个leaf lane vectors中重复出现；
- Production validator：先从真实CFG重建完整树与`branch -> terminal children`
  关系，再为每个store ID收集引用leaf集合。必须恰有一个重复source，其实际store
  block是声明branch node，且该branch递归可达的完整descendant-leaf集合必须与引用
  集合完全相等；其他sources只能leaf-local且各出现一次。随后复检sidecar、lane
  transfers、carry leaf、join、seed和header AND；
- 自动化证据：root选择一个含low-byte poison writer的group branch，该branch的
  两个leaves共享writer；另一子树含high-byte独立writer和carry，三个symbolic条件
  得到`1,1,1,1,2,2,2`。负例在两个internal branches各放一个group writer，
  compiler proof拒绝，常量第一组poison路径不可行。Checker清除`grouped` marker或
  删除capability时，production validator拒绝；
- 验证：LLVM 18 compiler build、`llvm-as`、Python syntax、grouped正例、
  two-group negative、marker/capability tamper与whitespace检查通过；阶段全量
  回归为Python unittest `284/284`、LLVM/CMake lit `94/94`；
- 正确性边界：只允许一个group writer，group tree必须direct且组内leaves不得有
  override writer。不支持多个disjoint groups、nested overwrite、forwarded group、
  repeated leaf source位置、多carry group、symbolic overlap、region copy或跨调用
  effects。下一依赖是repeated-source recursive lane transfer。当前等级 I/T。

## 154. F159：Repeated-Source Recursive Cyclic Byte-Lane Transfer（2026-07-28）

- 研究问题：F158要求group writer覆盖其全部descendant leaves；实际树中部分leaves
  会用更近writer覆盖同一lane region，使group source只出现在其余多个位置。若把
  override leaf简单视为全新source但不检查region，会错误丢失group writer覆盖而
  override未覆盖的lanes；
- Nearest-source proof：保留一个internal group writer，允许至少一个descendant leaf
  含自己的writer。Override必须与group writer具有相同canonical base、constant
  offset和byte width，确保它完全替换group定义的lane集合；至少两个其他descendant
  leaves仍引用group source。树外保留carry leaf，全部writers仍受alias closure；
- State semantics：未override leaves在edge上读取internal sidecar，override leaves
  读取自己的更近sidecar，其他lanes self-carry。因此同一个group store ID可以在树中
  多次出现，而override positions使用不同ID，不需要在join求值路径条件ITE；
- Artifact：新增
  `repeated_source_recursive_conditional_cyclic_byte_lane_memory_definedness_phis`
  与
  `bounded-repeated-source-recursive-conditional-cyclic-byte-lane-memory-definedness-phi`，
  transfer设置`repeated_source=true`；
- Production validator：识别唯一重复store ID及其internal branch block，计算完整
  descendant set并取`descendants - repeated-reference-leaves`作为override positions。
  该集合必须非空且每个位置引用不同leaf-local writer；validator还比较group与所有
  override leaves的store-lane index集合，保证覆盖范围一致。其他sources只能出现
  一次，随后复检sidecar、edges、join、seed与header AND；
- 自动化证据：五叶树中low-byte internal source出现在两个leaves，第三个descendant
  以同范围low-byte writer覆盖，另一子树含high-byte writer与carry；四个symbolic
  条件得到`1,1,1,1,1,2,2,2,2`。负例用high-byte writer覆盖low-byte group，
  proof拒绝且常量poison路径不可行。Checker清除`repeated_source`或删除capability
  时，production validator拒绝；
- 验证：LLVM 18 compiler build、`llvm-as`、Python syntax、repeated-source正例、
  mismatched-override negative、marker/capability tamper与whitespace检查通过；
  阶段全量回归为Python unittest `284/284`、LLVM/CMake lit `94/94`；
- 正确性边界：只允许一个internal source group及same-range leaf overrides；
  不支持不同lane的partial composition、多个groups、forwarded repeated tree、
  同一source的非支配位置、多carry group、region copy、symbolic overlap或跨调用
  effects。下一依赖是per-lane override composition，再处理multi-carry groups。
  当前等级 I/T。

## 155. F160：Composed Repeated-Source Recursive Byte-Lane Transfer（2026-07-28）

- 研究问题：F159把一个override leaf整体归给internal source或same-range local
  writer，不能表达更近writer只覆盖group region的一部分。直接用leaf级source会
  丢失未覆盖lane的上游definedness；错误地把全部lanes绑定到`leaf.store`还会在
  edge上读取错误sidecar；
- Per-lane nearest-source proof：仍只接受一个direct strict recursive group。
  Leaf-local writer必须与internal writer的constant byte interval真实相交，但不得
  完全遮蔽它；逐lane优先选择leaf-local writer，其次选择结构祖先internal writer，
  最后self-carry。至少一个composed leaf必须同时保留两个store IDs，且至少两个
  pure group leaves保持完整internal lane set；same-range overrides继续归F159，
  exact与partial override混用暂时拒绝；
- Compiler implementation：`RecursiveCyclicByteLaneTransfer`新增
  `composedRepeatedSource`。Recursive alias closure、candidate poison detection、
  store-ID/defined-sidecar注册、multi-access统计与edge lowering全部从
  leaf-level `store`迁移到实际`lane.store`，从而让同一leaf安全读取两个不同的
  path-dominating sidecars；
- Artifact：新增
  `composed_repeated_source_recursive_conditional_cyclic_byte_lane_memory_definedness_phis`
  与
  `bounded-composed-repeated-source-recursive-conditional-cyclic-byte-lane-memory-definedness-phi`，
  transfer设置`composed_repeated_source=true`；
- Production validator：除重建完整branch tree、edge、join和sidecar外，为每个
  `(store ID, leaf)`独立重建lane set。唯一internal repeated source必须位于branch；
  至少两个pure leaves具有相同完整group lane set。每个composed leaf恰有一个
  leaf-local source，该source与group set相交，group在该leaf中的lane set必须精确
  等于`group_set - local_set`且非空；全部descendants仍引用internal source，
  其他writers只能在单一leaf corridor出现；
- 自动化证据：i32循环中internal i16 poison writer覆盖lanes 0--1，override leaf
  的i8 writer只覆盖lane 1，artifact确认该leaf为`internal, override, carry, carry`。
  两个pure group leaves、一个独立lane-2 writer与一个carry leaf得到
  `1,1,1,1,1,2,2,2,2`。负例让i16 local writer完全遮蔽lane-1 group source，
  proof拒绝、不声明F160且常量poison路径不可行；marker/capability tamper均由
  production validator拒绝；
- 验证：LLVM 18 compiler build、`llvm-as`、Python syntax、F158/F159兼容回归、
  F160正负定向执行与`git diff --check`通过；全量回归将在本阶段收尾同步；
- 正确性边界：只支持一个direct group、一个leaf-local writer/override leaf和
  constant byte intervals；不支持完全遮蔽、exact/partial混合、forwarded group、
  多internal groups、symbolic overlap、region copy、unknown calls、atomic或
  volatile effects。下一依赖是recursive byte-lane multi-carry source groups。
  当前等级 I/T。

## 156. F161：Multi-Carry Composed Recursive Byte-Lane Tree（2026-07-28）

- 研究问题：F156--F160只要求“至少一个”pure carry leaf，artifact不能区分多个互斥
  no-write控制位置，也无法检测producer伪造carry位置数量。多个carry leaves不是
  多个lane carry variables，而是同一完整lane state在树中多个不同控制叶上的
  identity transfer；
- Scope：F161建立在F160 composed repeated-source proof上，允许2--8个pure
  all-carry leaves。树仍为4--8 leaves、depth<=6、64 nodes的direct strict binary
  tree；每个carry leaf必须有唯一branch parent和独立leaf-to-join synthetic edge；
- Compiler/artifact：`RecursiveCyclicByteLaneTransfer`记录`multiCarry`和
  `carryLeaves`，候选从无store的完整lane vectors精确计数。新增
  `multicarry_composed_repeated_source_recursive_conditional_cyclic_byte_lane_memory_definedness_phis`
  与
  `bounded-multicarry-composed-repeated-source-recursive-conditional-cyclic-byte-lane-memory-definedness-phi`；
  transfer同时设置`composed_repeated_source=true`、`multicarry=true`与
  `carry_leaves=N`；
- Production validator：从每个leaf lane vector独立重算all-carry leaf数量，
  要求声明值为2--8且精确相等；非multi F160合同规范化为恰好一个pure carry leaf，
  防止把同一producer artifact在两个能力类别之间任意移动。完整tree reachability、
  unique predecessor、join edge集合、composed store partition、seed和header AND
  继续全部复检；
- 自动化证据：六叶树包含两个pure group leaves、一个composed override leaf、
  一个独立writer leaf和两个pure carry leaves，五个symbolic条件得到
  `1,1,1,1,1,1,2,2,2,2`。负例让carry branch的true/false共享同一leaf，
  unique-parent proof拒绝且常量poison路径不可行；checker修改`carry_leaves`或删除
  capability时validator拒绝；
- 验证：LLVM 18 compiler build、`llvm-as`、Python syntax、正负定向执行、
  count/capability tamper与`git diff --check`通过；全量回归将在阶段收尾同步；
- 正确性边界：F161当前只扩展F160 direct composed tree，不声明一般recursive、
  grouped或same-range repeated树的multi-carry能力；不支持shared carry node、
  forwarded tree、多个internal groups、symbolic overlap、region copy、calls、
  atomics或volatile effects。下一依赖是multiple internal source groups。
  当前等级 I/T。

## 157. F162：Multiple Internal Recursive Byte-Lane Groups（2026-07-28）

- 研究问题：F158--F161只允许一个internal writer group。真实控制树可在两个互不
  相交的子树中分别执行不同partial writer；把它们扁平化为leaf-local copies会丢失
  source identity，也无法证明sidecar在所有引用位置均已执行；
- Scope/proof：允许恰好两个internal branch writers。每个writer必须是至少两个
  leaves的结构祖先，且其完整descendant-leaf集合必须全部且仅引用该source。两个
  descendant sets必须不相交，组内不允许leaf-local override；树外至少有一个pure
  carry leaf。Forwarded、nested groups和第三个internal writer继续拒绝；
- Compiler implementation：internal writer discovery从单值扩展为最多两个
  `GroupWriter`记录。逐leaf沿unique-parent chain查找ancestor group；同时命中两个
  group即表示嵌套并拒绝。每组独立计数pure leaves，要求均至少2；multi-group合同
  只允许两个实际store IDs，不能混入leaf-local writer；
- Artifact：新增
  `multigroup_recursive_conditional_cyclic_byte_lane_memory_definedness_phis`与
  `bounded-multigroup-recursive-conditional-cyclic-byte-lane-memory-definedness-phi`，
  transfer设置`multiple_groups=true`、`group_count=2`；
- Production validator：识别恰好两个重复store IDs，验证两者实际store blocks均为
  声明branch，分别递归计算完整descendant sets并与引用leaf sets精确相等；两个集合
  必须disjoint，每个leaf只能引用所属组source，各组所有leaves的lane set一致，
  且不存在第三个store ID。Tree、edge、sidecar、carry、seed与header AND仍独立复检；
- 自动化证据：i16循环中第一个internal group写low byte并有两个leaves，第二个
  disjoint group写high byte并有两个leaves，另有carry leaf；四个symbolic条件得到
  `1,1,1,1,1,2,2,2,2`。负例把第二组嵌套到第一组，使其leaves受两个writers支配，
  proof拒绝且常量poison路径不可行；修改`group_count`或删除capability均被拒绝；
- 验证：LLVM 18 compiler build、`llvm-as`、Python syntax、正负定向执行、
  count/capability tamper与`git diff --check`通过；全量回归将在阶段收尾同步；
- 正确性边界：恰好两个direct disjoint groups，组内无override；不支持grouped+
  composed混合、nested groups、forwarding、三个以上groups、symbolic overlap、
  region copy、calls、atomics或volatile effects。下一依赖是bounded mixed
  multi-group composition，然后才是general cyclic MemorySSA。当前等级 I/T。

## 158. F163：Mixed Multi-Group Recursive Byte-Lane Composition（2026-07-28）

- 研究问题：F162的两个groups都必须为pure complete-descendant sources，不能同时
  表达F160式partial override。直接放宽到任意override会使每组source partition、
  local source identity和per-lane nearest definition相互混淆；
- Scope：保留两个direct disjoint internal groups，允许恰好一个group中的恰好一个
  descendant leaf含partial overlapping local writer。该组仍需至少两个pure leaves；
  另一个group全部leaves保持pure。Local writer必须保留至少一个internal lane，
  不允许same-range或full-shadow override；
- Compiler implementation：双组候选允许最多一个`candidateComposition`，并要求
  source集合恰为两个internal writers加一个local writer。Artifact新增
  `mixed_multigroup_recursive_conditional_cyclic_byte_lane_memory_definedness_phis`
  与
  `bounded-mixed-multigroup-recursive-conditional-cyclic-byte-lane-memory-definedness-phi`，
  transfer设置`multiple_groups=true`、`group_count=2`、`mixed_groups=true`和
  `composed_group_count=1`；
- Production validator：先识别两个重复internal IDs及disjoint descendant sets。
  对每组从pure leaves恢复完整group lane set；恰好一个group允许一个双source leaf，
  其local source必须leaf-local且唯一、与group set相交，保留的internal lanes必须
  精确为`group_set - local_set`且非空。全合同store IDs必须等于两个internal加该
  唯一local ID；
- 自动化证据：i32树中第一组i16 writer覆盖lanes 0--1并在一个leaf由lane-1 i8
  writer部分覆盖，第二组i8 writer覆盖lane 2；两组各保留两个pure leaves，另有
  carry leaf。五个symbolic条件得到`1,1,1,1,1,1,2,2,2,2,2`。负例让local i16
  writer完全遮蔽第一组i8 source，proof拒绝且常量poison路径不可行；
  `composed_group_count`与capability tamper均拒绝；
- 验证：LLVM 18 compiler build、`llvm-as`、Python syntax、F162兼容回归、F163
  正负定向执行与`git diff --check`通过；全量回归将在阶段收尾同步；
- 正确性边界：两个direct groups、仅一个partial override，不支持两组同时override、
  exact/partial混合、forwarded corridors、nested groups、第三组、symbolic overlap、
  region copy、calls、atomics或volatile effects。下一依赖是forwarded group trees。
  当前等级 I/T。

## 159. F164：Forwarded Grouped Recursive Byte-Lane Source（2026-07-28）

- 研究问题：F158 grouped source要求direct branch-to-child edges；loop rotation与
  block splitting会在group root、decision和leaf edges插入无条件blocks。只接受
  direct tree会丢失已由F157证明安全的CFG形状；
- Proof composition：只对“单internal group、无override”组合F157与F158。
  每条branch edge仍最多16个unique-predecessor unconditional blocks，全树最多64
  nodes；`treeAncestor`沿实际唯一前驱链证明group writer支配所有descendant leaves，
  writer/alias扫描覆盖leaf terminal corridors；
- Artifact：新增
  `forwarded_grouped_recursive_conditional_cyclic_byte_lane_memory_definedness_phis`
  与
  `bounded-forwarded-grouped-recursive-conditional-cyclic-byte-lane-memory-definedness-phi`，
  transfer同时设置`forwarded=true`、`grouped=true`；
- Validator：以F157逐jump恢复全部decision/leaf corridors、唯一predecessors、
  disjoint block membership与真实depth，再执行F158的唯一重复store ID、internal
  branch位置及完整descendant-set相等证明；两个marker必须与artifact类别一致；
- 自动化证据：root-to-group/root-to-other decision edges和四条leaf edges均含
  forwarding blocks，low-byte group writer、high-byte leaf writer和carry执行得到
  `1,1,1,1,2,2,2`。负例在group leaf corridor加入nested branch并形成
  multi-predecessor endpoint，proof拒绝且常量poison路径不可行；forwarded marker与
  capability tamper均拒绝；
- 验证：LLVM 18 compiler build、`llvm-as`、Python syntax、正负定向执行与
  `git diff --check`通过；全量回归将在阶段收尾同步；
- 边界：不支持forwarded repeated/composed/multigroup sources、nested branch、
  shared corridor、超过16-block edge、symbolic overlap、region copy、calls、
  atomics或volatile effects。下一依赖是forwarded same-range repeated source。
  当前等级 I/T。

## 160. F165：Forwarded Repeated-Source Recursive Byte-Lane Transfer（2026-07-28）

- 研究问题：F159只接受direct recursive tree，因此LLVM block splitting产生的
  unconditional forwarding blocks会使已证明的same-range leaf override退化为
  unsupported；简单把`forwarded` marker附到F159合同又无法证明corridor未分支或
  汇合；
- Proof composition：只组合F157与F159，不放宽source语义。每条tree edge最多跨越
  16个unique-predecessor jump blocks，全树/走廊预算64 nodes；唯一internal writer
  仍至少被两个pure descendant leaves引用，exact override leaves必须使用相同
  base、offset、width与lane set，且树外保留独立writer和carry；
- Artifact与compiler：新增
  `forwarded_repeated_source_recursive_conditional_cyclic_byte_lane_memory_definedness_phis`
  与
  `bounded-forwarded-repeated-source-recursive-conditional-cyclic-byte-lane-memory-definedness-phi`。
  Compiler只在`tree.forwarded && repeatedSource`时选择该类别，transfer同时声明
  `forwarded=true`、`repeated_source=true`，不会误发布旧F159或F164 capability；
- Production validator：先逐jump恢复全部decision/leaf corridors、实际parent、
  depth和disjoint membership，再重算唯一重复store ID、internal branch位置、
  pure group lane set、完整descendant set与exact override集合；两个marker都必须
  与artifact类别精确一致；
- 自动化证据：五叶i16循环的root、group-inner、override、other-writer与carry
  edges均经过forwarding blocks；两个pure group leaves、一个same-range override、
  一个high-byte writer和carry得到`1,1,1,1,1,2,2,2,2`。负例把group corridor
  改为nested branch并让terminal具有多个predecessors，lowering fail-closed且常量
  poison路径infeasible；分别篡改`forwarded`、`repeated_source`或删除capability
  均被拒绝；
- 验证：LLVM 18 compiler build、`llvm-as`、Python syntax、正负定向执行、双marker
  与capability tamper、`git diff --check`通过；全量回归将在阶段收尾同步；
- 边界：只支持same-range exact override；forwarded partial composition、
  multi-carry、multiple groups、shared/branching corridor、symbolic overlap、region
  copy、calls、atomics与volatile effects仍拒绝。下一依赖是F166 forwarded
  per-lane composed source。当前等级 I/T。

## 161. F166：Forwarded Composed Repeated-Source Byte-Lane Transfer（2026-07-28）

- 研究问题：F165只证明same-range leaf replacement，无法表达F160中一个leaf同时从
  internal writer、部分相交的local writer与carry取不同lanes的情形；forwarding
  又使leaf-local writer membership不能靠直接前驱判断；
- Scope与proof：组合F157 corridor proof和F160 per-lane composition，且本阶段要求
  恰好一个pure carry leaf。Compiler沿unique-parent corridor寻找结构祖先writer，
  leaf-local writer必须位于恢复出的terminal corridor；每lane仍选择最近的local
  source、未覆盖的internal source或carry。至少两个pure leaves恢复完整group set，
  composed leaf必须保留非空`group_set - local_set`；
- Artifact：新增
  `forwarded_composed_repeated_source_recursive_conditional_cyclic_byte_lane_memory_definedness_phis`
  和
  `bounded-forwarded-composed-repeated-source-recursive-conditional-cyclic-byte-lane-memory-definedness-phi`。
  Transfer同时声明`forwarded=true`与`composed_repeated_source=true`；多carry树不会
  被误归入本类别；
- Production validator：先验证每条最多16-block、全树最多64-node的真实jump
  corridors、unique predecessors、tree depth与leaf edge，再从sidecar逐store/leaf
  重建lane sets，证明internal writer的完整descendant集合、pure set一致性、local
  source leaf-locality及精确集合差；
- 自动化证据：i32五叶树中i16 internal source覆盖lanes 0--1，composed leaf的
  lane-1由更近i8 writer覆盖，另有lane-2 writer与pure carry；forwarded执行得到
  `1,1,1,1,1,2,2,2,2`。Branching corridor与multi-predecessor endpoint负例
  infeasible；`forwarded`、`composed_repeated_source`及capability tamper均拒绝；
- 验证：LLVM 18 compiler build、`llvm-as`、Python syntax、正负定向执行、双marker
  与capability tamper、`git diff --check`通过；全量回归将在阶段收尾同步；
- 边界：单个composed group、恰好一个carry leaf；forwarded multi-carry、
  multiple groups、多个composed leaves、shared/branching corridors、symbolic
  overlap、region copy、calls、atomics和volatile effects仍拒绝。下一依赖是
  forwarded multigroup tree。当前等级 I/T。

## 162. F167：Forwarded Multi-Group Recursive Byte-Lane Tree（2026-07-28）

- 研究问题：F162的双group proof依赖direct tree adjacency，而常见CFG规范化会在
  group入口、decision与leaf edges插入jump blocks；若只验证flattened leaf列表，
  两个internal writers可能被错误关联到重叠或不完整的descendant partitions；
- Scope：组合F157与F162，仍只接受恰好两个pure、direct-by-reconstructed-tree、
  互不嵌套的groups；每组至少两个leaves且lane set一致，树外至少一个carry。
  本阶段不允许任何local override；
- Artifact与compiler：新增
  `forwarded_multigroup_recursive_conditional_cyclic_byte_lane_memory_definedness_phis`
  与
  `bounded-forwarded-multigroup-recursive-conditional-cyclic-byte-lane-memory-definedness-phi`。
  Transfer同时声明`forwarded=true`、`multiple_groups=true`、`group_count=2`；
- Validator：先按每edge最多16 jumps、全树64 nodes预算恢复完整唯一前驱树，再识别
  两个重复store IDs；分别要求store block为声明branch、完整descendant set等于
  source references、两个member sets disjoint、组内lane sets相同且合同无第三
  source。`forwarded`、`multiple_groups`与count均类别绑定；
- 自动化证据：i16五叶树中low/high byte两个internal writers各支配两个leaves，
  root、group与leaf edges均含forwarding blocks，另有carry，执行得到
  `1,1,1,1,1,2,2,2,2`。负例在第一组leaf corridor加入branching detour形成
  multi-predecessor terminal，lowering拒绝且poison路径infeasible；marker、
  `group_count`和capability tamper均拒绝；
- 验证：LLVM 18 compiler build、`llvm-as`、Python syntax、正负定向执行、
  marker/count/capability tamper、`git diff --check`通过；全量回归待阶段收尾；
- 边界：两个pure groups；forwarded mixed overrides、nested/third groups、
  shared/branching corridors、symbolic overlap、region copy、calls、atomics和
  volatile effects仍拒绝。下一依赖是F168 forwarded mixed multigroup。当前等级
  I/T。

## 163. F168：Forwarded Mixed Multi-Group Byte-Lane Composition（2026-07-28）

- 研究问题：F167只允许pure groups，不能表达F163中“一个group含唯一partial
  override、另一个group保持pure”的多源leaf；需要同时维护corridor reachability、
  两组descendant partitions和composed leaf的per-lane差集；
- Scope：组合F157、F160与F163。恰好两个disjoint internal groups，其中恰好一个
  group含一个双source leaf；该组仍至少两个pure members，另一组全部pure。合同
  source集合恰为两个internal writers与一个leaf-local writer；
- Artifact与compiler：新增
  `forwarded_mixed_multigroup_recursive_conditional_cyclic_byte_lane_memory_definedness_phis`
  及
  `bounded-forwarded-mixed-multigroup-recursive-conditional-cyclic-byte-lane-memory-definedness-phi`。
  Transfer绑定`forwarded=true`、`multiple_groups=true`、`group_count=2`、
  `mixed_groups=true`与`composed_group_count=1`；
- Validator：先恢复bounded unique-predecessor tree，再分别重建两组完整lane sets。
  唯一composed leaf的local source必须只在该leaf出现、与group set相交，保留的
  internal lanes必须精确等于非空`group_set - local_set`；两个member sets仍
  disjoint且分别等于对应branch的完整descendants；
- 自动化证据：i32六叶树中第一组i16 source覆盖lanes 0--1并由lane-1 local writer
  部分覆盖，第二组i8 source覆盖lane 2，另有carry；group-entry corridor存在时
  执行得到`1,1,1,1,1,1,2,2,2,2,2`。负例把该corridor改成branching merge，
  proof拒绝且poison路径infeasible；`forwarded`、`mixed_groups`、count与capability
  tamper均拒绝；
- 验证：LLVM 18 compiler build、`llvm-as`、Python syntax、正负定向执行、
  marker/count/capability tamper和`git diff --check`通过；全量回归待阶段收尾；
- 边界：两个groups且仅一个composed group/leaf；forwarded multi-carry、两组同时
  override、三个以上groups、shared/branching corridors、symbolic overlap、region
  copy、calls、atomics与volatile effects仍拒绝。下一依赖是F169 forwarded
  multi-carry composition。当前等级 I/T。

## 164. F169：Forwarded Multi-Carry Composed Byte-Lane Tree（2026-07-28）

- 研究问题：F166将forwarded composed tree规范为一个carry leaf，无法覆盖F161的
  多个独立carry alternatives；若只沿用`has_carry`布尔量，shared leaf或伪造计数
  会破坏condition-tree partition的可审计性；
- Scope：组合F157、F160与F161。单个composed group保留至少两个pure leaves和
  per-lane partial override，另有2--8个distinct all-carry leaves；每个carry
  terminal仍满足unique-parent与独立edge条件；
- Artifact与compiler：新增
  `forwarded_multicarry_composed_repeated_source_recursive_conditional_cyclic_byte_lane_memory_definedness_phis`
  与
  `bounded-forwarded-multicarry-composed-repeated-source-recursive-conditional-cyclic-byte-lane-memory-definedness-phi`。
  Transfer绑定`forwarded=true`、`composed_repeated_source=true`、
  `multicarry=true`和精确`carry_leaves=N`；
- Validator：在恢复每条bounded jump corridor及完整tree后，从每个完整lane vector
  重算all-carry leaves，要求2--8范围内且与声明精确相等；同时复用F160的pure group
  set、leaf-local source及非空difference证明。类别marker、count与capability均
  双向绑定；
- 自动化证据：i32六叶树含两个pure group leaves、一个composed leaf、一个独立
  writer和两个carry leaves；group-entry corridor存在时得到
  `1,1,1,1,1,1,2,2,2,2`。负例把corridor改为branching merge并形成多前驱
  terminal，proof拒绝且poison路径infeasible；`forwarded`、`multicarry`、count与
  capability tamper均拒绝；
- 验证：LLVM 18 compiler build、`llvm-as`、Python syntax、正负定向执行、
  marker/count/capability tamper与`git diff --check`通过；全量回归待阶段收尾；
- 边界：单个composed group与2--8 carry leaves；多个groups同时composition、
  三组以上、shared/branching corridors、symbolic overlap、region copy、calls、
  atomics及volatile effects仍拒绝。下一步审计bounded multi-group generalization
  与general cyclic MemorySSA的证明成本。当前等级 I/T。

## 165. F170：Three-Group Recursive Byte-Lane Tree（2026-07-28）

- 研究问题：F162/F167把internal source partition固定为两组；在现有8-leaf预算内，
  三个互不嵌套groups仍可形成有限、可完全枚举的结构，但需要避免只检查前两组而
  漏掉第三组重叠；
- Scope：direct strict binary tree中恰好三个internal writers，每组至少两个pure
  descendant leaves，三个member sets两两disjoint，树外至少一个carry。由此最小
  形状是7 leaves/6 branches，仍满足4--8 leaves与depth<=6预算；不允许local
  overrides或forwarding；
- Compiler与artifact：internal group discovery上限由2扩为3，但三组类别要求
  `writers.size()==3`、每组pure count>=2、无exact/partial overrides。新增
  `trigroup_recursive_conditional_cyclic_byte_lane_memory_definedness_phis`及
  `bounded-trigroup-recursive-conditional-cyclic-byte-lane-memory-definedness-phi`，
  transfer声明`multiple_groups=true`、`triple_groups=true`、`group_count=3`；
- Validator：从三个重复store IDs恢复各自branch与完整descendant sets，执行所有
  pairwise disjoint检查，要求合同source IDs精确等于三组writers、每组lane set
  一致、每个leaf只引用所属组；marker与count必须与类别精确一致；
- 自动化证据：i32七叶树的三个i8 internal writers分别覆盖lanes 0、1、2，各有
  两个leaves，另有carry；六个symbolic conditions得到七个`1`和六个`2`共十三
  状态。负例把第二组嵌入第一组，使其leaves同时受两个writers支配，compiler
  fail-closed且poison路径infeasible；`triple_groups`、`group_count`与capability
  tamper均拒绝；
- 验证：LLVM 18 compiler build、`llvm-as`、Python syntax、正负定向执行、
  marker/count/capability tamper、`git diff --check`通过；全量回归待阶段收尾；
- 边界：恰好三个direct pure groups；forwarding、group-local override、四组以上、
  nested groups、symbolic overlap、region copy、calls、atomics及volatile effects
  拒绝。下一依赖是双composed groups。当前等级 I/T。

## 166. F171：Double-Composed Multi-Group Byte-Lane Tree（2026-07-28）

- 研究问题：F163/F168只允许两个groups中的一个含partial override。仅把全局
  `composedOverrideCount`上限改成2并不充分，因为两个overrides可能都落在同一组，
  另一组没有对应的composed proof；
- Scope：direct two-group tree中，每组恰好一个composed leaf且至少两个pure leaves，
  两个local writers各自leaf-local并与所属group相交，均保留非空internal lanes；
  树外至少一个carry；
- Compiler与artifact：新增per-group composed counters，要求向量精确为`[1,1]`、
  source集合为两个internal加两个local writers。新增
  `double_composed_multigroup_recursive_conditional_cyclic_byte_lane_memory_definedness_phis`
  与
  `bounded-double-composed-multigroup-recursive-conditional-cyclic-byte-lane-memory-definedness-phi`；
  transfer声明`multiple_groups=true`、`group_count=2`、`mixed_groups=true`、
  `double_composed_groups=true`和`composed_group_count=2`；
- Validator：分别从两组pure leaves恢复完整lane set，要求每组恰好一个composed
  member；两个local IDs必须distinct且各自只在对应leaf出现，每个internal set
  精确等于`group_set - local_set`并非空。完整source IDs必须等于两组internal与
  两个local的并集；
- 自动化证据：i32七叶树的两个i16 groups分别覆盖lanes 0--1与2--3，每组由一个
  i8 local writer覆盖后一lane并保留两个pure leaves，另有carry；六个条件得到
  十三状态。负例把两个local leaves都置于第一组，尽管全局count仍为2，per-group
  `[2,0]` proof拒绝且poison路径infeasible；double marker、count与capability
  tamper均拒绝；
- 验证：LLVM 18 compiler build、`llvm-as`、Python syntax、正负定向执行、
  marker/count/capability tamper、`git diff --check`通过；全量回归待阶段收尾；
- 边界：两个direct groups、每组一个composed leaf；forwarding、额外carry计数
  分类、三个groups中的composition、多个override/group、symbolic overlap、region
  copy、calls、atomics及volatile effects拒绝。下一步设计统一bounded multigroup
  contract以控制组合爆炸。当前等级 I/T。

## 167. F172：Forwarded Double-Composed Multi-Group Tree（2026-07-28）

- 研究问题：F171的两个per-group composition proofs仍要求direct edges；需要证明
  corridor reconstruction不会改变local writer membership或把两个groups的
  composed leaves混淆；
- Scope与实现：组合F157与F171，保留两个groups各自`1`个composed leaf、至少两个
  pure leaves及树外carry。Compiler允许`tree.forwarded && [1,1]`，并新增独立
  `forwardedDoubleComposedGroupsRecursiveConditional`分类，避免误发布F171；
- Artifact：新增
  `forwarded_double_composed_multigroup_recursive_conditional_cyclic_byte_lane_memory_definedness_phis`
  与
  `bounded-forwarded-double-composed-multigroup-recursive-conditional-cyclic-byte-lane-memory-definedness-phi`。
  Transfer同时声明`forwarded=true`、`double_composed_groups=true`及原有group/count
  markers；
- Validator：先恢复每条最多16 jumps、全树64 nodes内的actual tree，再分别执行
  两组complete partition、pure lane set、distinct leaf-local source与非空difference
  证明。`forwarded`与double marker均类别绑定；
- 自动化证据：F171七叶i32树在第一组entry edge加入forwarding block后仍得到十三
  状态。负例把该block改成branching merge形成多前驱group terminal，lowering
  fail-closed且poison路径infeasible；两个marker与capability tamper均拒绝；
- Correctness fix：初次tamper执行暴露validator把artifact dispatch误插入transfer
  normalization、提前引用`normalized_contract`的问题；已把marker normalization与
  contract dispatch恢复为两个阶段，并由capability-tamper路径回归覆盖；
- 验证：LLVM 18 compiler build、`llvm-as`、Python syntax、正负定向执行、
  marker/capability tamper与`git diff --check`通过；全量回归待阶段收尾；
- 边界：forwarded two groups、每组一个composed leaf；three-group composition、
  多override/group、symbolic overlap、region copy、calls、atomics及volatile effects
  拒绝。下一依赖是forwarded three-group proof。当前等级 I/T。

## 168. F173：Forwarded Three-Group Recursive Byte-Lane Tree（2026-07-28）

- 研究问题：F170的三组partition要求每条tree edge直接相邻，无法覆盖branch
  normalization插入的unconditional jump blocks；仅检查flattened leaves会漏掉
  shared corridor、branching detour或第三组被错误接入另一组的情况；
- Scope：组合F157与F170。恰好三个pure internal writers，每组至少两个leaves，
  三个完整member sets两两disjoint，树外至少一个carry；每条逻辑edge允许最多
  16个unique-predecessor forwarding blocks，全树恢复预算64 nodes；
- Compiler与artifact：新增
  `forwarded_trigroup_recursive_conditional_cyclic_byte_lane_memory_definedness_phis`
  与
  `bounded-forwarded-trigroup-recursive-conditional-cyclic-byte-lane-memory-definedness-phi`。
  Transfer绑定`forwarded=true`、`multiple_groups=true`、`triple_groups=true`和
  `group_count=3`，避免被direct F170或two-group F167错误接收；
- Validator：先逐edge恢复唯一forwarding corridor与实际branch tree，再从三个
  repeated store IDs分别重建完整descendant/reference sets。要求所有pairwise
  intersections为空、每组lane set一致、source IDs精确等于三组writers，且marker、
  count、artifact与capability双向绑定；
- 自动化证据：F170七叶i32树在第一组入口加入forwarding block后仍由六个条件得到
  七个`1`和六个`2`。负例把入口改成branching merge，产生多前驱terminal并被
  fail-closed lowering拒绝，poison路径保持infeasible；forwarded/triple markers、
  `group_count`与capability tamper均拒绝；
- 验证：LLVM 18 compiler build、`llvm-as`、Python syntax、正向十三状态执行、
  branching corridor负例、marker/count/capability tamper与`git diff --check`
  通过；全量回归待本阶段收尾；
- 边界：恰好三个forwarded pure groups；group-local composition、四组以上、
  nested groups、shared/branching corridors、symbolic overlap、region copy、
  calls、atomics及volatile effects拒绝。下一依赖是三组中唯一composed group的
  direct/forwarded证明。当前等级 I/T。

## 169. F174：Composed Three-Group Recursive Byte-Lane Tree（2026-07-28）

- 研究问题：F170/F173的三个groups均要求pure leaves，F163的partial composition
  则固定为两个groups；在8-leaf上限内，三组恰好还能容纳一个composed leaf，但
  validator必须同时证明三组完整partition和唯一local writer的lane差集；
- Scope：direct strict binary tree中恰好三个internal writers；其中一组含至少
  两个pure leaves与一个partial-override leaf，另两组各至少两个pure leaves，
  树外一个carry。总计恰好八个leaves/七个branches；不允许exact override、
  第二个composed group或forwarding；
- Compiler与artifact：三组分类允许`composedOverrideCount<=1`，要求source集合
  大小精确为`3+count`并保留每组pure count。新增
  `composed_trigroup_recursive_conditional_cyclic_byte_lane_memory_definedness_phis`
  及
  `bounded-composed-trigroup-recursive-conditional-cyclic-byte-lane-memory-definedness-phi`。
  Transfer声明`multiple_groups=true`、`triple_groups=true`、`mixed_groups=true`、
  `composed_triple_groups=true`、`group_count=3`和`composed_group_count=1`；
- Validator：mixed partition由固定两组泛化为声明的2/3组，对全部member sets执行
  pairwise disjoint；逐组要求branch descendants精确等于source references和至少
  两个一致pure members。唯一composed leaf必须含一个distinct leaf-local writer，
  与所属group相交，并使保留internal lanes精确等于非空
  `group_set - local_set`；
- 自动化证据：i32八叶树中第一组i16 source覆盖lanes 0--1并在lane 1受i8 local
  writer覆盖，另外两个i8 groups覆盖lanes 2、3，另有carry；七个symbolic条件得到
  八个`1`和七个`2`。负例用同范围i16 local writer完全遮蔽第一组，compiler识别
  为exact override并fail closed，poison路径infeasible；category marker、
  composed count和capability tamper均拒绝；
- 验证：LLVM 18 compiler build、`llvm-as`、Python syntax、十五状态正向执行、
  full-shadow负例及marker/count/capability tamper通过；全量回归待阶段收尾；
- 边界：direct three groups且仅一组一个partial override；forwarding、第二个
  composed group、四组以上、nested groups、symbolic overlap、region copy、calls、
  atomics及volatile effects拒绝。下一依赖是F175 forwarded composed-trigroup。
  当前等级 I/T。

## 170. F175：Forwarded Composed Three-Group Byte-Lane Tree（2026-07-28）

- 研究问题：F174的八叶上界已经达到当前tree预算，但真实LLVM CFG仍可能在group
  入口与leaf edge间插入jump blocks；需要确认corridor recovery不会把唯一local
  override归到错误group，或在三组partition中遗漏shared predecessor；
- Scope：组合F157与F174。三个groups中恰好一组含一个partial-override leaf，
  每组至少两个pure leaves，树外一个carry；每条逻辑edge允许最多16个
  unique-predecessor unconditional blocks，全树最多64个恢复节点；
- Compiler与artifact：移除F174对`tree.forwarded`的临时拒绝，复用per-group
  counters与per-lane nearest-source transfer，新增
  `forwarded_composed_trigroup_recursive_conditional_cyclic_byte_lane_memory_definedness_phis`
  及
  `bounded-forwarded-composed-trigroup-recursive-conditional-cyclic-byte-lane-memory-definedness-phi`。
  Transfer同时绑定`forwarded=true`、三组、mixed、composed-triple及两个精确count；
- Validator：artifact类别独立于F173/F174，先逐edge恢复actual branch tree，再
  重建三个完整descendant/reference sets、全部pairwise disjoint关系与唯一
  leaf-local source的非空lane difference。`forwarded`和
  `composed_triple_groups`均为类别必需marker；
- 自动化证据：F174八叶树在第一组入口加入forwarding block后仍得到八个`1`与七个
  `2`。负例把入口改为branching merge，使group terminal具有两个predecessors，
  proof fail closed且poison路径infeasible；两个类别marker、composed count与
  capability tamper均拒绝；
- 验证：LLVM 18 compiler build、`llvm-as`、Python syntax、十五状态正向执行、
  branching corridor负例、marker/count/capability tamper及`git diff --check`
  通过；全量回归待阶段收尾；
- 边界：三组、唯一composed group/leaf与8-leaf预算；第二个三组composition需要
  至少9 leaves，已超当前证明上限。四组以上、shared/branching corridors、
  symbolic overlap、region copy、calls、atomics与volatile effects拒绝。当前
  bounded recursive byte-lane组合矩阵在8-leaf预算内闭合；下一步转向general
  multi-cell cyclic MemorySSA和跨prefix求解复用。当前等级 I/T。

## 171. F176：Validated Cross-Prefix Polyhedral Reuse（2026-07-28）

- 研究问题：原Pangolin-style cache key绑定exact branch PC、open-branch hash、
  prefix fingerprint、target与dependencies，因此只能复用相同上下文；AFL mutator
  虽可消费全矩阵，却无法判断另一个prefix的抽象是否相关，也未在保存每个sample前
  复检当前完整路径；
- 规范化与索引：QSYM runtime对cached/current linear constraints分别执行term排序、
  同offset coefficient合并及同normal bounds求交；再按双向implication分类为
  `equivalent`、`cached-subset`、`current-subset`或`compatible`。无共享变量、
  同normal区间冲突或规范化失败均不进入候选集；
- Soundness边界：relation只用于排序，不作为SAT证明。Exact-key lookup仍优先，
  exact UNSAT只对原key生效且绝不跨prefix传播。外来SAT model按当前seed应用后，
  必须由QSYM expression evaluator逐项验证当前完整prefix与desired target；由其
  box/full matrix生成的每个John/Dikin/integer sample也在写盘前执行相同验证；
- 有界执行：`SYMCC_POLY_CROSS_PREFIX=1`启用，按relation强度与稳定cache key排序，
  `SYMCC_POLY_CROSS_PREFIX_PROBES`默认32、上限256。Sampling strategy与adaptive
  MPI helper默认开启，自配置参数域可学习开关和probe budget；
- Telemetry：新增`poly_cross_prefix_probes/relations/hits/
  validation_failures`与`poly_sample_validations/validation_failures`，把抽象召回、
  精确有效率和采样拒绝成本分开；
- 自动化证据：新lit先在`value<=2`prefix缓存`value==1`的SAT polytope，再在
  exact key不同的`value<=3`prefix运行；第二次产生`\x01`并报告relation、probe和
  cross-prefix hit。原`poly_prefix_cache`继续证明窄prefix UNSAT不会污染宽prefix，
  `poly_cache`继续覆盖full-matrix John walk；Python mutator/self-config/adaptive
  tests全部通过；
- 验证：QSYM runtime完整重编译，三个poly lit tests、14个相关Python tests、
  syntax与diff checks通过；全量回归待阶段收尾；
- 边界：当前inclusion是同input-offset坐标系上的bounded linear-template关系，
  尚不做跨格式字段重命名、Fourier--Motzkin projection或一般非线性抽象。
  Concrete replay/AFL novelty仍是最终接纳边界，公开benchmark效果待验证。当前
  等级 I/T/E。

## 172. F177：Verifier-Gated Optimistic Generator Simplification（2026-07-28）

- 研究问题：F29 的 reusable generator 只在完整 path condition 上计算 byte
  range，因此生成域不会超过单次精确查询；GenSlv 的 optimistic simplification
  要求在较弱约束上构造 generator，但若直接把弱化模型写入语料会破坏 path
  soundness；
- 弱化构造：persistent `symcc-query-solver` 在载入 target SMT 前记录 prefix
  assertion 边界。默认 `SYMCC_GENERATOR_OPTIMISTIC=1` 时，proposal solver 只保留
  target assertions，并删除全部 prefix assertions；原 solver 始终保留完整
  prefix 与 target。由于弱化式是原合取式的断言子集，证书方向固定为
  `original-implies-weakened`。one-shot、无 prefix 或关闭开关时保留全部断言；
- 可审计证书：`symcc-solution-generator-v1` 新增
  `symcc-optimistic-simplification-v1`，记录原 query content hash、原断言数、
  target 起始索引、完整且互斥的 kept/dropped partition、策略、蕴含方向、
  `proposal_only` 与 `full_validation_required`。Python normalizer 检查 query ID、
  有序唯一索引、完整 partition、target 不可删除及验证计数守恒，畸形 artifact
  fail closed；
- 生成与验证：per-byte lower/upper 二分和 field sampling 在弱化 solver 上执行，
  因而可得到严格大于完整 PC 的范围；每个 boundary/midpoint/random candidate
  随后把全部 byte assignment 加回原 solver。仅 `sat` 进入
  `verified_models`，`unsat`、`unknown` 和异常均计入
  `full_validation_failures` 且不物化。Python 离线 sampler 继续要求调用方 verifier，
  concrete replay/AFL novelty 仍是最终语料边界；
- Telemetry：generator metrics 新增 `full_validation_checks`、
  `full_validation_failures` 与 `full_validation_accepted`，并强制
  `checks=failures+accepted`、`accepted=len(verified_models)`。这使 benchmark 能同时
  报告域扩张、solver 复核成本和有效模型率；
- 自动化证据：新 `query_generator_optimistic.py` 在完整约束
  `8 <= byte <= 10` 上证明弱化 target 域为 `[8,255]`，至少两个越界候选被完整
  solver 拒绝，所有保存 model 仍位于 `[8,10]`；关闭开关后范围恢复 `[8,10]` 且
  零验证失败。`test_solution_generator.py` 新增 partition、query identity 与计数
  tamper 拒绝；
- 验证：query helper 增量构建、6 个 generator unittest、13 个 QueryStore
  unittest、原 generator integration 与新 optimistic integration 均通过；
- 边界：当前是可验证的 target-assertion slice，而不是 Z3 tactic pipeline 内部
  model converter/simplifier 的完整导出；弱化 range 只能作为 proposal domain，
  不能单独证明完整 path feasibility。下一研究步骤是公开 benchmark 的
  accepted/proposed、models/query、unique edges/query 与 coverage/CPU-hour 消融，
  以及有独立证明检查器的 tactic model-converter 提取。当前等级 I/T/E。

## 173. F178：Native Z3 Tactic Model-Converter Generation（2026-07-28）

- 研究问题：此前 `converter_chain` 是 Query IR 上手写且可证明可逆的语法子集，
  没有执行 GenSlv 所依赖的 Z3 tactic model converter；仅在文档中记录 tactic
  名称或重新实现 substitution 都不能证明真实 converter 路径已运行；
- 原生 pipeline：generator helper 把 F177 的 proposal assertions 构造成
  model-enabled Z3 goal，按 `simplify & solve-eqs` 执行有界 tactic。仅接受单一
  subgoal；多 subgoal、超时和异常均 fail soft，继续使用 range sampler。当前系统
  Z3 4.8.12 通过 `Z3_goal_convert_model` 将 subgoal model 转回原 goal model，
  直接复用 Z3 维护的 elimination/model-conversion 语义；
- 多模型枚举：在转换后的 subgoal 中识别仍存活的8-bit input variables，对其当前
  assignment加入disjunctive blocking clause，最多尝试
  `4 * SYMCC_GENERATOR_CONVERTER_SAMPLES` 次。被 `solve-eqs` 消去的输入不在
  blocking clause中，而由 model converter 随每个 surviving-variable model恢复；
  空 blocking set时安全停止；
- 双重验证：converted model先覆盖完整SAT base中的原输入变量，再以全部byte
  equality回到原始full-prefix solver检查。只有`full solver == sat`才进入共享
  `verified_models`；converter失败不会改变主SAT结果，也不会绕过 F177 与 concrete
  replay边界。Converter models与range models共同受
  `SYMCC_GENERATOR_SAMPLES`总预算约束；
- Artifact：新增 `symcc-z3-tactic-model-converter-v1`，记录pipeline、原query
  hash、proposal assertion数、subgoal数、converted models、验证
  checks/failures/accepted、errors及`full_validation_required`。Normalizer验证
  pipeline白名单、query identity、flag状态和计数守恒，accepted数不得超过
  `verified_models`；
- 配置：`SYMCC_GENERATOR_TACTIC_CONVERTER=1`默认开启；
  `SYMCC_GENERATOR_CONVERTER_SAMPLES`默认2、上限64，且被generator总sample预算
  截断；
- 自动化证据：新`query_generator_tactic_converter.py`构造
  `x = y + 1, 8 <= y <= 10`。`solve-eqs`消去一个输入后，helper枚举多个subgoal
  models，通过原生converter恢复`(x,y)`，至少一个非base model通过完整solver；
  所有保存结果保持`x=y+1`和`y`范围。Generator unittest增加converter provenance、
  pipeline与计数tamper拒绝；
- 验证：query helper增量编译、7个generator unittest、13个QueryStore unittest、
  原range generator、F177 optimistic generator与新tactic-converter真实集成测试
  均通过；
- 边界：Z3 model converter是context-local对象，当前持久化其pipeline/provenance
  和已转换模型，不序列化内部converter闭包；pipeline固定为
  `simplify/solve-eqs`，多subgoal、非BV8 surviving variables与跨进程converter
  replay尚未实现。下一步应以公开benchmark比较syntax converter、native tactic
  converter、range-only和组合策略。当前等级 I/T/E。

## 174. F179：Validated Cross-Size Polyhedral Projection（2026-07-28）

- 研究问题：F176虽能在不同prefix key间按linear relation复用，但cache loader以
  当前input size规范化旧矩阵，旧artifact中超出当前长度的变量会在relation之前被
  丢弃；同时候选扫描硬性要求相同input size，无法复用共享字段上的抽象；
- Artifact正确性修复：新增按显式artifact `input_size`规范化约束的路径。Cache
  loader先完整保留旧坐标系矩阵，当前查询约束仍按当前input size校验，避免把
  “无法在当前维度直接解释”误写成“旧artifact非法”；
- 有界投影：对cached/current约束取当前有效的shared offsets。对每行
  `L <= kept + eliminated <= U`，依据每个被消去byte的`[0,255]`域计算
  `emin/emax`，生成
  `L-emax <= kept <= U-emin`。中间运算使用`__int128`并饱和到linear infinity；
  纯被消去且区间可满足的行被删除，不可满足行拒绝。多行共享被消去变量时，该
  per-row interval elimination是存在量projection的保守外包络，不声称精确
  Fourier--Motzkin整数投影；
- 召回与排序：`SYMCC_POLY_PROJECTED_REUSE=1`在cross-prefix模式默认开启。同长度
  direct equivalent/subset关系优先；direct `compatible/none`可尝试shared-variable
  projection。输入长度不同时强制经过projection路径，即使共享子空间已经
  equivalent，防止绕过维度证明；
- Soundness：仍只扫描SAT entries，跨prefix UNSAT禁止不变。外来model只应用当前
  范围内offset，必须通过当前完整prefix/target expression evaluator。Projected
  sample只使用过滤后的box与projected constraints，每个sample继续完整复检；
- Telemetry与调度：新增`poly_projection_attempts/relations/hits`，sampling
  profile、adaptive MPI默认开启，self-config可学习0/1开关；
- 自动化证据：新`poly_projected_reuse.c`先用两字节输入缓存
  `x<=2, y<=2, x==1`，再以一字节输入和`x<=3, x==1`运行。第二次通过shared-`x`
  projection产生`\x01`并报告attempt/relation/hit；关闭投影时projection计数均为
  零。原exact/cross-prefix/UNSAT-isolation三个poly tests继续通过；
- 验证：QSYM runtime完整重编译，四个poly lit tests、5个self-config与5个adaptive
  component tests、Python syntax和diff checks通过；
- 边界：当前只在相同offset语义下消去缺失变量，不做字段重命名、endianness/width
  转换、等式耦合的精确整数消元或非线性抽象。Projection只决定候选召回，完整
  expression validation与concrete replay仍是接纳边界。当前等级 I/T/E。

## 175. F180：Bounded Structure-Preserving Polyhedral Field Renaming（2026-07-28）

- 研究问题：协议版本、不同解析入口和结构化seed经常把同一组语义字段移动到不同
  byte offsets。F176/F179只比较相同offset，因而即使两个线性系统在变量置换后完全
  相同，也无法复用已有SAT polytope；
- 有界同构搜索：从cached/current矩阵提取非零变量及其系数/约束出现签名，签名只
  用于稳定候选排序，不作为可能产生false negative的硬过滤。对变量建立有界双射并
  回溯验证重命名后的完整规范化矩阵关系；默认最多6个变量，硬上限8个，默认检查
  128个完整双射、硬上限4096，防止最坏情况下的阶乘爆炸；
- 结构保持变换：命中双射后统一重写cached full matrix、model offset和polyhedral
  byte box，再进入现有relation-ranked候选序列。Direct relation优先于projection，
  projection优先于renaming；同一relation等级内保持确定性顺序；
- Soundness：字段重命名只用于同input-size SAT artifact召回，不传播UNSAT，也不与
  cross-size projection叠加。每个重命名model和每个衍生sample仍由当前完整
  prefix/target expression evaluator复检；错误或歧义映射最多降低召回率，不会
  成为路径可满足性证据；
- 配置与遥测：`SYMCC_POLY_FIELD_RENAMING=1`在cross-prefix模式默认开启；
  `SYMCC_POLY_RENAME_VARS`默认6、最大8，
  `SYMCC_POLY_RENAME_ATTEMPTS`默认128、最大4096。新增
  `poly_renaming_attempts/relations/hits`，sampling profile、MPI worker与
  self-config参数域均已接入；
- 自动化证据：新`poly_field_renaming.c`先缓存四字节输入左侧字段
  `(x0,x1)`的约束和model，再对结构等价但移动到`(x2,x3)`的查询执行。复用路径产生
  `00 00 01 00`，并报告attempt/relation/hit；关闭开关后三项计数均为零；
- 验证：QSYM runtime完整重编译，exact/prefix/cross-prefix/cross-size/field-rename
  五个poly lit tests、5个self-config和5个adaptive component tests、Python syntax
  与diff checks通过；
- 边界：当前只证明byte变量的线性矩阵置换同构，不推断语义字段名，不做
  width/endianness转换、多个字段的packing/unpacking或非线性映射；bounded搜索也
  可能遗漏高维或高度对称实例。所有候选仍必须通过exact expression validation与
  concrete replay。当前等级 I/T/E。

## 176. F181：Persistent Query-IR Converter Replay（2026-07-28）

- 研究问题：F29已把可逆Query IR equality写入`converter_chain`，但离线
  `sample_generator()`从未消费它，QueryStore也只物化solver侧
  `verified_models`。因此converter在跨进程持久化后仍只是元数据，不能称为可重放
  generator；
- Artifact合约：新增`QUERY_IR_CONVERTER_SCHEMA =
  symcc-query-ir-converter-v1`。Normalizer对root、equal relation、最多64步的
  invertible op白名单、最多16个byte assignments、数值位宽及constant side逐项
  检查；recipe必须声明`proposal_only`和`full_validation_required`。旧版无schema
  recipe按相同严格字段迁移到新canonical schema，未知op和关闭验证义务均fail
  closed；
- 层次重放：sampler在solver-verified models之后，依次生成单recipe proposal和
  无冲突的累积recipe proposal。后者可同时满足由不同prefix/target roots提取的多个
  equality；fixed冲突、重复byte不同赋值和越界offset均显式计数或拒绝。所有候选
  继续经过调用方verifier，新增`converter_attempts/conflicts`漏斗指标；
- QueryStore执行路径：完成SAT事务后，store加载content-addressed Query IR，以完整
  `[prefix..., target]` roots构造bounded evaluator verifier，再调用持久化generator。
  只有全部roots求值为true的offline model才进入candidate目录和外部async输出；
  `SYMCC_GENERATOR_REPLAY_SAMPLES`默认8、最大64、0禁用；
- 证据标记：离线候选manifest使用
  `candidate_source=generator-query-ir-replay`、
  `solver_verified=false`、`generator_replay_verified=true`和
  `query_ir_verified=true`，并保存generator hash、replay index及proposal漏斗。
  它不会伪装成solver model，后续concrete replay的`verified=false`边界不变；
- 自动化证据：generator unittest证明两个独立direct equality recipe只有累积为
  `AB`时通过verifier，并验证未知step/关闭full-validation被拒绝；QueryStore测试以
  `[64,67]`完整Query IR和更窄`[64,66]`generator domain物化`@/A/B`，检查离线候选
  的证据标记；
- 验证：9个solution-generator、14个QueryStore unittest、Python syntax与diff
  checks通过；
- 边界：持久化的是可审计Query IR inverse recipe，不是Z3 context-local model
  converter闭包；bounded evaluator不支持的表达式会保守拒绝离线候选。当前重放
  按recipe顺序累积，不求解冲突recipe的最大可满足子集。当前等级 I/T/E。

## 177. F182：SMT-Validated Exact Integer Projection Relations（2026-07-28）

- 研究问题：F179的per-row interval elimination是安全外包络，但多个约束共享被消去
  byte时会丢失耦合关系；整数投影还可能产生奇偶/同余等非凸集合，不能诚实地塞回
  单一`A x <= b`矩阵。外包络会把实际不相交的cache/current projection误排为
  compatible，浪费完整candidate验证；
- 双层表示：原区间投影继续作为可高效采样的proposal matrix；新增精确关系层把
  cached/current byte变量解释为`[0,255]`有界Int，分别构造对非shared变量的
  existential Presburger projection。系统不声称外包络本身已经精确；
- 精确分类：以三个有界Z3检查决定
  `cached => current`、`current => cached`和二者intersection，从而返回
  equivalent/cached-subset/current-subset/compatible/none。证明为none时不会进入
  cross-prefix probe；证明为非none时仍只用于SAT候选排序，采样继续完整表达式复检；
- 成本边界：`SYMCC_POLY_EXACT_PROJECTION=1`在cross-prefix模式默认开启；默认最多
  2个被消去变量（最大6）、32行（最大128）、每次10ms（最大1000ms），每个branch
  最多8个exact projection probes（最大64）。任一预算超限、Z3 `unknown`或异常均
  fail soft到F179区间关系；
- 排序与遥测：同relation等级下direct优先、exact projection其次、interval
  projection再次、field renaming最后。新增
  `poly_exact_projection_attempts/relations/unknown/hits`，sampling profile、MPI
  worker和self-config参数域已接入；
- 自动化证据：新`poly_exact_integer_projection.c`加载合法cache artifact
  `x - 2y = 0`，当前一字节查询要求`x = 1`。精确整数投影识别偶数域与`{1}`不相交，
  relation和validation failure均为0；关闭精确层后区间外包络产生relation，并由
  完整表达式验证拒绝其`x=2`model；
- 验证：QSYM runtime完整重编译；exact/prefix/cross-prefix/cross-size/
  field-renaming/exact-integer六个poly lit tests、self-config/adaptive tests、
  Python syntax与diff checks通过；
- 边界：当前使用Z3有界Presburger量词判定关系，没有导出无量词整数投影矩阵；
  超预算/unknown回退会恢复F179的保守外包络与exact candidate validator，而不是
  阻塞主求解。非线性、width/endian转换仍不进入此关系证明。当前等级 I/T/E。

## 178. F183：Cross-Size Endian-Aware Field Alignment（2026-07-28）

- 研究问题：F180的结构保持重命名被`cached.input_size == current.input_size`硬限制。
  实际格式迁移常同时改变总record长度、字段offset和byte order；即使两边使用相同
  数量的字段bytes，也无法进入重命名；
- 表示洞察：QSYM linear IR把multi-byte concat展开为byte coefficient，例如big-endian
  16-bit为`256*x0 + x1`，little-endian为`x2 + 256*x3`。因此相同width的端序变化
  不需要猜测host ABI，可由保持coefficient/constraint结构的byte bijection证明；
- 实现：字段重命名现在允许不同artifact/current input sizes。关系搜索仍要求双方
  非零变量数相同并受6/8变量与bijection attempt预算限制；成功映射统一重写cache
  matrix、model和box。跨长度候选必须显式经过projection或renaming之一，不能再以
  input-size mismatch无条件拒绝；
- Soundness：这不是按字段名猜测schema。只有重命名后的完整矩阵通过现有relation
  classifier才进入SAT candidate列表；外来model随后必须通过当前prefix/target
  expression evaluator。UNSAT仍不跨prefix，错误端序映射最多导致验证失败；
- 自动化证据：新`poly_cross_size_endian_renaming.c`加载两字节big-endian
  `256*x0+x1=1` artifact，将其映射到四字节record的little-endian
  `x2+256*x3=1`字段。Cache model `(0,1)`被转换为`00 00 01 00`并产生
  rename attempt/relation/hit；关闭开关计数均为0；
- 验证：QSYM runtime完整重编译，新cross-size endian lit及前六个poly tests通过，
  diff checks通过；
- 边界：当前覆盖相同byte数量的纯置换/搬移，不覆盖16到32位的zero/sign extension、
  bitfield packing、scale或非线性编码；这些转换若要加入，必须携带独立可检查的
  widening/narrowing证明。当前等级 I/T/E。

## 179. F184：Exact-Proof Widening Field Alignment（2026-07-28）

- 研究问题：F183要求cached/current非零变量数相同，不能复用16-bit字段到32-bit
  zero-extended表示。直接忽略新增bytes会把任意宽化误当作等价，尤其无法区别
  zero extension、sign extension和普通高位数据；
- 注入搜索：当cached变量数小于current且current变量数不超过rename上限时，搜索
  cached byte到current byte的有界injective mapping。Coefficient/row signatures
  继续只负责确定性候选排序，同一映射重写cached matrix/model/box；
- 强证明门：变量数不等的mapping必须同时经过F182 exact integer projection，并且
  返回`projected=true && exact_projected=true`；仅有interval relation的mapping
  一律拒绝。Z3存在量化current未映射bytes后检查双向蕴含与交集，因此高bytes只有在
  约束系统允许一致extension语义时才被接受；
- 组合成本：新增`SYMCC_POLY_RENAME_EXACT_PROBES`默认8、最大32，限制一次renaming
  search中可触发的exact projections；原variable、bijection、projection variable/
  row/timeout预算同时生效。预算耗尽只降低召回，不回退到不精确widening；
- 组合数据流：candidate可同时标记renamed/projected/exact_projected。采样使用精确
  关系对应的cached interval envelope，box offset先重命名再按projected variables
  过滤；model只写mapped bytes，未映射current bytes保持当前concrete base并由完整
  validator检查；
- 自动化证据：新`poly_exact_widening_renaming.c`把两字节big-endian
  `256*x0+x1=1` cache artifact注入四字节little-endian `uint32_t==1`查询。
  Exact projection证明额外高两字节可取0，model输出`01 00 00 00`，同时报告
  renaming relation/hit和exact projection relation/hit；关闭renaming计数为0；
- 验证：QSYM runtime完整重编译；widening、新cross-size endian与原field-renaming
  lit tests、self-config/adaptive tests、diff checks通过；
- 边界：当前只实现cached narrower到current wider的unsigned byte-aligned线性
  extension；不实现反向narrowing、sign-extension识别、bitfield packing或scale。
  这些场景继续走普通Z3，不会被宽化reuse近似。当前等级 I/T/E。

## 180. F185：Exact-Proof Narrowing Field Alignment（2026-07-28）

- 研究问题：F184只覆盖cached变量少于current变量的宽化，无法把旧格式中更宽、
  更靠后的字段投影到新格式的窄字段。简单截断model或忽略高位会把非零高位、
  溢出和任意变量排列误当作合法narrowing；
- 子字段搜索：当cached变量数大于current时，为每个current byte搜索一个不同的
  cached source，未选cached bytes改写到当前input范围之外的synthetic offsets，
  再作为存在量变量消去。映射、约束矩阵和model使用同一source-to-destination
  注入关系；
- 结构证据门：每个映射边必须具有完整约束出现签名一致，或至少一个规范化线性
  系数重叠。零结构重叠的全排列不进入SMT探测，避免把数学上偶然可投影的任意byte
  当作同一字段；签名与系数重叠只筛选/排序候选，不承担语义证明；
- 精确证明门：narrowing没有interval-only fallback。转换后的cached系统与current
  系统必须由F182 bounded Presburger检查证明为非空relation；变量、行、timeout、
  mapping attempts与`SYMCC_POLY_RENAME_EXACT_PROBES`预算共同限制成本。预算耗尽或
  `unknown`只降低召回；
- Soundness：外来SAT model只复制被选cached bytes，未选bytes不写入current
  input；relation命中后仍由当前完整prefix/target expression evaluator验证每个
  model/sample。UNSAT不跨prefix，synthetic变量不会进入输出；
- 自动化证据：新`poly_exact_narrowing_renaming.c`加载四字节线性字段，其中低16位
  位于offset 2/3，将其精确投影并重命名到两字节little-endian查询，生成
  `01 00`且同时报告renaming/exact-projection relation与hit；关闭renaming后计数
  为0。F182奇偶反例同时验证零结构重叠的单字节猜测不会绕过精确投影；
- 验证：QSYM runtime完整重编译；narrowing、widening、cross-size endian、
  field-renaming、projected-reuse与exact-integer六个poly lit tests、
  self-config/adaptive tests及diff checks通过；
- 边界：当前覆盖byte-aligned unsigned linear subfield selection，不推断C类型、
  signedness或schema；sign-extension、bitfield packing/unpacking、scale与非线性
  编码继续保守回退普通Z3。当前等级 I/T/E。

## 181. F186：Conditional Contextual ParaSuit Parameter Graph（2026-07-28）

- 研究问题：原`SelfConfiguringPolicy`虽能posterior sample与扩展数值域，但参数仍
  来自Python内嵌表，`select(context=...)`立即丢弃context，依赖关系只靠选择后的
  hard-coded guard；更严重的是reward会更新全部注册参数的当前/unset值，而非本次
  实际采样项，产生系统性归因污染；
- 机器schema：新增`util/self_config_schema.json`，使用
  `symcc-self-config-parameter-schema-v1`声明参数值、numeric bounds和
  `active_when`依赖。默认自动加载，可由`SYMCC_SELF_CONFIG_SCHEMA`替换、
  `SYMCC_SELF_CONFIG_SPACE`覆盖候选值；未知parent与循环依赖节点fail closed。
  `python3 util/self_config.py --print-schema`输出规范化工具registry；
- 条件参数DAG：选择前只排序当前profile中active specs，选择后迭代删除因parent
  改变而失活的descendants。Exact executor的fast/multi/optimistic禁用作为最终
  hard guard显式下发，避免继承环境重新开启；sampling profile自动建立poly/cache
  prerequisite；
- 上下文后验：token绑定稳定context key：
  `cold/warm/mature × targeted × structural-task × input-size bucket`。MPI派发输入
  size与target/task信息；worker rank故意不入键，使并行度变化不碎片化学习。
  全局value、context-value与context-local pair interaction后验按
  55/25/20层次组合，context最多128、interaction最多4096；
- 正确归因：pending token持久化`profile/context/choices`，完成时只更新本次真正
  选择的value与value-pairs；完整configuration posterior单独更新。Numeric expansion
  也只由被选择值触发。State schema升级到v2并兼容读取v1 pending/profile；
- 迁移隔离：`SYMCC_SELF_CONFIG_PRIOR`只读导入其他campaign的global value
  posteriors，以随本地pull数衰减的弱prior参与选择；不复制observations、contexts、
  interactions或pending，也不写回prior文件，避免跨target污染；
- 可复现性：state保存规范化parameter schema SHA-256、global/context/interaction
  posteriors和配置统计，写入仍采用temp+atomic replace；seed开关控制抽样；
- 自动化证据：`test_self_config.py`从5项扩展到8项，覆盖schema依赖、循环拒绝、
  inactive descendant裁剪、hard guard、稳定context key、interaction持久化、
  v2恢复与read-only transfer prior隔离；CLI schema JSON、Python syntax、
  adaptive component和diff checks均通过；
- 边界：这是对ParaSuit自动识别/选择/采样思想的SymCC参数注册表实现，不声称复刻
  KLEE命令行爬取、论文silhouette clustering或其12-program覆盖结果。当前尚缺
  等CPU公开目标上fixed-registry、global-only、conditional-contextual与transfer
  prior的分项消融。当前等级 I/T/E。

## 182. F187：Feedback-Validated Online Token Grammar（2026-07-28）

- 研究问题：原`solve_complete`只把AFL extras/历史fragment做固定宽度overwrite；
  `literal/delimited/key_value/segment`没有持久规则identity、没有variable-length
  completion，也不消费proposal验证结果，因而不能称为在线grammar acquisition；
- Span推断：从`comparison_taints`的`(branch,lo,hi)`core向两侧扩展到空白、分隔符
  或bounded lexical boundary；完整quote/bracket pair优先形成closed span，防止把
  相邻payload误吞入token。`SYMCC_GRAMMAR_MAX_SPAN`默认128、范围8--1024；
- 规则系统：新增stable SHA-256 `LearnedGrammarRule`，在线累积literal、delimited、
  key-value、segment、choice、相邻span sequence、optional删除和repetition复制。
  `SYMCC_GRAMMAR_RULES`默认2048、最少32、硬上限8192；满额时优先淘汰未retained、
  低score、低support规则；
- 可变长度生成：grammar路径使用`content[:lo] + production + content[hi:]` splice，
  可生成更短/更长输入，继续受全局proposal byte cap约束。Rule按未尝试探索、
  support、target-validation ratio、AFL-retention ratio和coverage features排序；
- 验证闭环：proposal manifest与`VerifiedProposal`持久化`grammar_rule_id`和
  generator label。真实目标执行更新`validations/verified`；只有进入全局AFL
  novelty triage后才更新`retained/coverage_features`。Rule feedback只影响排序，
  从不把grammar接受当作parser proof或SAT证据；
- Artifact：`.semantic_proposal_generator.json`升级schema v2，兼容读取v1，
  保存rules、support/attempt/validation/retention漏斗、grammar coverage和预算。
  `grammar_snapshot()`报告attempted/validated/verified/retained rule coverage；
- 自动化证据：`test_semantic_proposals.py`扩展为7项，新增词法span、长token splice、
  provenance传入proposal manager、验证/coverage反馈与v2恢复；quote-delimited旧
  回归、inverse/surrogate/Hydra/UCSan tests继续通过。2个proposal-manager、
  8个self-config tests、Python syntax和diff checks通过；
- 边界：当前是comparison-taint/token evidence驱动的bounded regular tree grammar
  approximation，不是完整CFG推断；尚未从parser accept/reject trace做冲突规则拆分，
  也未实现Query IR partial model与nonterminal hole的统一求解。当前等级 I/T/E。

## 183. F188：Fail-Soft Per-Query Selective Concolic Partitioning（2026-07-28）

- 研究问题：原`SYMCC_FOCUS_BYTES`只能在执行前全局决定symbolization范围，无法按
  query约束结构选择变量；直接把非目标byte concrete化后返回UNSAT则会错误剪枝其他
  concrete completion；
- 数据协议：`WorkLease`携带QueryStore中content-validated witness `input_hex`，
  persistent helper协议从5字段扩展为向后兼容的6字段；8字段live continuation
  check协议不变。空/超长/奇数长度/非hex witness保守禁用选择性路径；
- 依赖分区：helper为每条prefix/target assertion收集8-bit input offsets，建立隐式
  assertion-to-byte超图，从全部target bytes做传递闭包。只允许闭包外disconnected
  variables使用witness equality；与target通过任意prefix row耦合的byte始终保持
  symbolic；
- 非对称可信边界：短超时selective solver仍断言完整prefix+target，只额外加入
  witness equalities，因此SAT model是完整query的真实模型，可标为`z3-selective`。
  Selective UNSAT/unknown/exception只pop局部frame并恢复完整timeout执行普通Z3，不写
  UNSAT proof、不进入subsumption；generator model继续在去除fixes后的full solver
  中逐个验证；
- 成本与自配置：`SYMCC_SELECTIVE_QUERY`默认开；默认至少fixed 2 bytes、最多64，
  剩余symbolic最多16，probe最多`min(50ms, query timeout)`，各有硬上限并进入F186
  schema。超预算直接full solve；
- Telemetry：result增加`selective_query_attempted/hit/symbolic/fixed/elapsed_us`，
  QueryStore严格bounded normalize并统计attempts/hits；portfolio仍可逐backend比较；
- 自动化证据：新`query_solver_selective.py`构造两个disconnected prefix bytes和
  一个target byte。合法witness产生`z3-selective`模型`42 05 07`（fixed=2、
  symbolic=1）；故意错误witness使局部查询UNSAT，但fallback full Z3仍返回相同SAT
  模型且hit=0。104项lit中该测试及5个query generator/PSCache/prefix tests通过；
  14个QueryStore、9个solution-generator tests、runtime完整重编译与diff checks通过；
- 边界：当前只分区QF_BV 8-bit input constants，不处理FP、String/Array或随机变量，
  也未实现FM 2026论文的学习型timeout predictor/MDP；这是可审计、fail-soft的机制
  baseline，科研收益仍需公开benchmark。学习型byte-domain子集已由F189补充；本段
  保留F188阶段边界。当前等级 I/T/E。

## 184. F189：Persistent Cost-Aware Mixed Completion Policy（2026-07-28）

- 研究问题：F188只用静态变量阈值决定每个eligible query都执行一次witness probe，
  无法区分“局部fix经常命中并节省长求解”的上下文与“局部fix稳定失败、只增加额外
  solver调用”的上下文，也没有让fuzz-side concrete completion参与同一个精确查询；
- 上下文与在线估计：persistent helper把断言数、8-bit输入变量数、target依赖闭包
  比例、fixed变量数、共享AST节点数和mul/div/rem/shift高成本节点数做对数/比例分桶。
  每个context维护decision/trial/hit计数以及full/selective elapsed EWMA；Beta平滑
  命中率加置信上界形成optimistic expected saving。冷启动探索后，只有预测节省达到
  `SYMCC_SELECTIVE_QUERY_POLICY_MIN_SAVINGS_US`才尝试，否则记录`learned-skip`并
  直接完整求解；
- Timeout predictor：选择性预算以上一轮配置值为上界，以两倍selective EWMA与
  full-solve EWMA的四分之一为候选收紧，并受最小timeout、原query timeout双重限制。
  Predictor只控制额外probe成本，不缩短完整solver的权威timeout；
- Mixed completion：同一个disconnected component可在总预算内依次尝试witness、
  全零、全`0xff`和由query ID/witness确定性播种的随机assignment，最多8个并去重。
  每次都在独立push/pop frame中额外断言fixed equalities，完整prefix+target保持不变；
  因此任意completion SAT都是精确模型，所有UNSAT/unknown/exception仍只触发下一个
  completion或full solver，绝不进入UNSAT cache/subsumption；
- 持久化与并行隔离：策略artifact为
  `symcc-selective-query-policy-v1`，有限context表使用temp+rename替换，非法、
  非有限或计数不一致的行忽略。Query service默认按
  `worker slot × portfolio backend`分配独立state路径，跨重启恢复且避免并发writer
  覆盖；用户显式共享路径不提供多writer一致性保证；
- Telemetry与配置：result新增`eligible`、policy context/decision/observations、
  predicted savings、full EWMA、learned timeout、completion attempts/hit index。
  QueryStore对所有整数做硬边界校验，并统计policy skips和non-witness mixed hits；
  completion、learning、explore、minimum saving、minimum timeout已进入F186条件参数
  图，路径、context容量和保存周期保留为运维配置；
- 自动化证据：扩展`query_solver_selective.py`。原合法witness仍返回精确
  `42 05 07`；错误witness仍fallback得到相同完整模型；`ff ff` disconnected
  prefix由第三个all-`0xff` completion命中；两个稳定失败样本后第三个同context
  query产生`learned-skip`，关闭helper并重启后第四个query继续skip且observation从
  state恢复。该lit测试、8个self-config、14个QueryStore测试、runtime重编译、
  Python/JSON/diff checks均通过；
- 边界：这是bounded contextual bandit/cost predictor，不声称复刻论文完整MDP。
  当前mixed concrete domain仍限QF_BV byte变量；FP、nonlinear real、SMT String/
  Array的domain-specific partition与公开benchmark saved-time/coverage消融仍待完成。
  当前等级 I/T/E。

## 185. F190：Query-IR-Verified Grammar Hole Completion（2026-07-28）

- 研究问题：F187的grammar completion只依据comparison token span，F181的Query IR
  model/converter replay只生成满足约束的byte assignment；两者没有共享“哪些字节已被
  当前path语义约束、哪些结构字段仍是hole”的机器可验证表示，因而无法实现
  Solve-Complete式“SMT先约束语义、grammar再补结构”；
- Query candidate contract：QueryStore在每个solver/generator candidate manifest中
  写入由真实expression DAG收集的`query_input_offsets`、实际
  `model_assignment_offsets`与evaluator计算的`query_ir_verified`，并为MPI
  `.query_candidates`输出生成隐藏`.NAME.query.json` sidecar。Master显式跳过隐藏
  sidecar，防止metadata被当成测试输入；
- 正确性加固：过去primary solver manifest隐含假设solver返回值必然有效，本阶段改为
  对materialized witness+assignment执行Query IR evaluator后才设置
  `query_ir_verified=true`。新增矛盾fake SAT回归确认伪模型仍可作为非可信诊断artifact，
  但不得获得Query-IR verified身份；
- Hole生成：SemanticProposalGenerator只在manifest candidate SHA匹配、query ID合法、
  sidecar读集与QueryStore重新计算的读集完全一致、原candidate重新通过Query IR时
  启用联合补全。Comparison-derived lexical span与任何query input offset相交则拒绝；
  对其余span应用online grammar，允许长度变化，但每个结果再次执行完整Query IR
  evaluator，绝对offset变化破坏语义时自然拒绝；
- 三层证书：通过第一层的candidate携带
  `symcc-query-grammar-hole-v1`，绑定query ID、source candidate/manifest SHA、
  精确read set、hole范围与stable grammar rule ID，并明确
  `target_replay_required/coverage_retention_required`。VerifiedProposalManager严格
  校验证书和rule provenance、持久化query/hole字段；之后仍由真实target telemetry
  验证目标，再由AFL bitmap决定retention；
- 反馈与预算：`query_hole_completion`复用F187 rule validity/coverage feedback，
  grammar state schema升级到v3并兼容v1/v2，记录hole attempts/verified/rejected。
  `SYMCC_QUERY_GRAMMAR_HOLES`提供campaign消融，
  `SYMCC_QUERY_GRAMMAR_HOLE_MAX`默认16、硬上限64；
- 自动化证据：`test_semantic_proposals.py`新增真实QueryStore端到端测试：只约束
  JSON首字节`{`，把未约束`"x"`hole变长补为`"LONGVALUE"`，所有输出重新满足Query
  IR；篡改sidecar隐藏约束读集后零hole proposal。`test_verified_proposals.py`新增
  证书严格校验、tamper拒绝与state恢复；QueryStore测试从14增至15，新增真实manifest
  read/assignment set、隐藏sidecar与contradictory fake-SAT gate。8个semantic、
  3个proposal-manager、15个QueryStore测试及对应3项lit、Python syntax和diff checks
  均通过；
- 边界：当前“hole”来自comparison-taint lexical span，不是CFG nonterminal推断或
  parser-state proof；Query IR evaluator仍只覆盖其bounded BV操作集。History-guided
  seed acquisition、parser accept/reject冲突拆分和string/array partial model仍待
  后续阶段。当前等级 I/T/E。

## 186. F191：Plateau-Gated Retained-History Acquisition（2026-07-28）

- 研究问题：F187会从所有观察输入学习fragment，无法区分普通路径噪声与真正被AFL
  全局novelty保留的结构；若持续做跨seed completion，还会在已有策略仍产出覆盖时
  增加大量低价值replay。G11需要一个由真实coverage history驱动、只在plateau触发
  的结构化seed acquisition baseline；
- Retained bank：proposal通过真实target验证并进入AFL全局bitmap后，读取其
  `candidate_path`，以content SHA建立`HistorySeed`。每项有coverage features、
  retained、attempts、target validations/verified漏斗；内容默认最多4096 bytes，
  bank默认128项，满额按未retained、低yield/score优先淘汰；
- Plateau gate：MPI把每次完成任务的authoritative `coverage_delta`传给semantic
  generator。连续零增益计数达到`SYMCC_HISTORY_ACQUISITION_PLATEAU`（默认64）前
  不运行history route；任意正增益立即归零。计数有界到阈值四倍并进入state；
- Acquisition：平台期按coverage yield、验证率和underexplored bonus排列retained
  seeds，从其中提取bounded lexical/closed-delimiter tokens，splice到当前
  comparison-derived spans。Proposal标记`history_acquisition`与stable
  `history_seed_id`，manager严格校验并持久化provenance。目标验证结果回写seed
  validity，AFL retention回写二次coverage yield，同时任何新retained semantic
  candidate都可进入bank；
- 状态与预算：semantic generator state升级schema v4并兼容v1--v3，持久化seed
  内容/漏斗、plateau计数与全局history attempts/verified/retained。Seed数、单seed
  bytes和plateau阈值各有硬上限；proposal仍受全局per-observation与input byte预算；
- 自动化证据：`test_semantic_proposals.py`从8增至9项。保留
  `kind=LONGVALUE;`后，`kind=x;`第一次零覆盖不产生history proposal，第二次达到
  threshold后生成含`LONGVALUE`的candidate；proposal manager保存seed ID，target/
  retention反馈及generator/manager重启均恢复；随后`coverage_delta=1`立即清零并
  禁止history route。3个proposal-manager、15个QueryStore回归与Python/diff checks
  同时通过；
- 边界：当前history结构是bounded lexical token bank，不是Cottontail完整path/
  context-sensitive history或LLM acquisition；plateau按master观测次数而非时间/
  survival model定义。公开benchmark需消融always-on、plateau-gated、random-history
  与no-history并报告proposal validity、retention和coverage/CPU。当前等级 I/T/E。

## 187. F192：Independent Parser Oracle and Contextual Grammar Conflict Splitting（2026-07-28）

- 研究问题：命中目标branch只能证明candidate可被当前执行接受，不能证明其满足独立
  语法。F187的rule rejection又是全局的，同一个fragment在一种结构位置失败后可能
  错误压制其他有效位置。F192把parser evidence作为目标回放之后、coverage triage
  之前的独立可信门，并把grammar冲突拆分到结构上下文；
- Parser oracle：`SYMCC_PROPOSAL_PARSER`接受shell-split命令，`{input}`替换为
  content-addressed candidate路径；若没有占位符则追加路径。只有退出码0表示
  parser-valid，非零、启动错误和有界timeout全部fail closed，stdout/stderr丢弃。
  Parser从不替代真实target/branch replay，也不替代AFL全局novelty；
- Context identity：grammar candidate携带由target branch、输入长度桶、hole左/右
  bounded lexical neighborhood计算的stable context ID。相同rule在同一context连续
  两次parser rejection后只屏蔽该context；其他context仍可生成。后续parser
  acceptance会清除对应局部冲突；
- 反馈正确性：MPI仅按本次validation的`last_reason`回传parser verdict，不能把历史
  累计“曾经接受”误当成当前结果。目标回放未通过时parser没有被执行，反馈为unknown，
  不会错误解除context suppression；
- 状态与审计：grammar state升级为schema v5并兼容v1--v4，持久化rule-level parser
  validation/acceptance以及每条rule最多256个rejected contexts；proposal manager
  保存parser漏斗、grammar context和最后结论。非法context/provenance在恢复时拒绝；
- 自动化证据：`test_verified_proposals.py`用独立进程oracle在相同target gate之后
  接受`GOOD`、拒绝`BAD`；`test_semantic_proposals.py`证明同一rule/context两次拒绝
  后跨重启保持局部屏蔽，随后parser acceptance重新开放。10个semantic、4个
  proposal-manager、15个QueryStore测试、3个query lit测试及Python/diff checks通过；
- 边界：parser由campaign显式提供，框架不能从任意binary自动恢复权威CFG或
  nonterminal。当前context是稳定的bounded结构指纹，不是parser-state proof；
  每个候选增加一次独立进程开销。完整Cottontail ECT/nonterminal representation、
  自动parser instrumentation与公开benchmark validity/coverage消融仍是后续研究。
  当前等级 I/T/E。

## 188. F193：Exact String/BV Dual-View Query Contract（2026-07-28）

- 研究问题：F33的string query只声明SMT `String`，再把model文本回填成input byte，
  没有同时保留bit-vector path view，也不能表达String predicate与byte predicate的
  联合约束。审查还发现`nul_terminated`变量缺少NUL时仍可通过concrete evaluator，
  非NUL变量允许与固定capacity不一致的动态长度；
- 双表示schema：`symcc-string-query-v2`为每个non-overlap variable保留String view，
  并为其每个input offset声明独立8-bit BV view。V1 artifact继续可读并规范化为v2。
  `byte_constraints`支持eq/ne与unsigned order，且只能引用已链接的string span；
- 精确链接：非NUL region强制`len == capacity`并逐位置约束
  `str.at == str.from_code(bv2nat(byte))`。NUL region强制`len < capacity`，所有
  `i < len`字符与非零byte双向一致，`i == len`的byte必须为零；suffix不被错误固定，
  可保留原witness；
- Binary与模型提取：literal lowering对每个0--255 byte使用`str.from_code`，不再把
  非打印字符退回patch-only路径。C++ helper把显式BV model设为权威来源，最后覆盖
  String C API反序列化结果，避免UTF-8或内嵌NUL改变offset/value；
- 正确性修复：SMT-LIB `str.contains`的参数是`(haystack, needle)`；旧lowering与
  prefix/suffix共用相反顺序，可能得到错误UNSAT。现在单独lower且有文本与真实solver
  回归。Concrete evaluator要求NUL实际存在，并同时复核所有String和BV predicates；
- Telemetry：materializer与MPI worker metrics新增`dual_view_queries`和
  `dual_view_verified`，候选仍进入正常target/AFL coverage triage；
- 自动化证据：8个string单元测试覆盖双view文本、联合contains/BV、NUL缺失拒绝、
  legacy升级和固定长度拒绝。真实`z3-string` helper集成覆盖比较翻转、
  `contains + byte[0]=='A'`及`41 01 42` binary literal；37项跨semantic/proposal/
  QueryStore/string回归、runtime重编译、Python/diff checks均通过；
- 边界：这是单一Z3 context中的精确String/BV view，不是smt-switch多backend IR。
  F193阶段runtime仍主要从memcmp/strcmp/strncmp导出artifact；strlen/strchr/strstr
  已由F194补齐，conversion summaries、cvc5/Princess/Z3str3 portfolio和公开
  SymCC-str benchmark对拍仍留给后续阶段。当前等级 I/T/E。

## 189. F194：Guarded Runtime String-Operation Query Artifacts（2026-07-28）

- 研究问题：F193具备contains/indexof/length的solver IR，但runtime只从
  memcmp/strcmp/strncmp生成token equality，真实`strlen/strchr/strstr`调用无法把
  symbolic length/search语义送入双view backend；
- Operation contract：新增`symcc-string-operation-v1`。记录operation/site、
  symbolic role、constant operand、concrete observed length/index以及从符号对象首字节
  到first-NUL的连续`input_bytes`。只接受全部byte为direct input offset、offset连续、
  没有提前NUL、总长不超过4096的记录；
- Query translation：`strlen`生成`length != observed_length`，`strchr/strstr`生成
  `indexof != observed_index`。Observed hit可探索其他位置或missing，observed miss
  可探索hit。符号needle与符号haystack分别映射到同一backend-neutral term位置；
  operation record不携带direct patches，防止观察值被误当作candidate；
- Runtime语义：compiler新增`strlen/strstr` interception，`strchr`沿用既有wrapper。
  `strlen`为当前bounded path构造first-zero ITE返回表达式，并约束前缀非零/terminator
  为零；`strchr`补上过去遗漏的found-byte equality或not-found terminator条件；
  `strstr`在最多16384个byte comparisons内建立BV contains OR-of-matches。超预算不做
  近似，保留concrete libc结果并允许严格operation artifact走String solver；
- 正确性边界：只在单符号角色可证明时导出operation；`strchr('\\0')`不映射到排除NUL
  的SMT String；empty/过长/不连续/多符号情况保守跳过。所有String solver model仍由
  F193 dual-view evaluator复核，再进入target/AFL triage；
- 自动化证据：新增真实instrumented `string_operations.c`，输入三个`ABC\\0` span，
  分别导出strlen length 3、strchr miss -1、strstr hit 1；独立checker对每条artifact
  调用真实Z3 helper，确认原witness不满足alternative且model满足双view。10个string
  unit、39项跨层回归、原strcmp/strchr集成、compiler/runtime重编译和diff checks通过；
- 边界：当前没有strtol/atoi/base64/URL/Unicode等conversion model，strstr的BV
  fallback是有界quadratic summary；smt-switch多backend与真实parser benchmark仍待
  实现。当前等级 I/T/E。

## 190. F195：Validation-First Parallel String Backend Portfolio（2026-07-28）

- 研究问题：单Z3 backend无法测量string theory solver差异，也不能在某个backend
  timeout/unknown时利用其他实现；但直接相信任一solver的UNSAT或厂商特定String
  model会把portfolio disagreement变成错误剪枝；
- Backend-neutral adapter：保留`symcc-json`协议，并新增`SmtLibCliStringBackend`。
  后者把同一v2 dual-view SMT-LIB交给外部命令，只请求已链接的numeric 8-bit symbols，
  解析`#xNN`、`#bNNNNNNNN`和`(_ bvN 8)`；不依赖backend特有String model打印格式；
- 并发与预算：`StringSolverPortfolio`最多8个backend，使用bounded thread pool并发，
  每个process backend仍有独立timeout。结果按配置顺序规范化，最多消费8条；
  materializer可在全局candidate budget内接纳多个不同verified SAT model；
- 非对称可信边界：每个SAT先应用到原witness并执行完整F193 concrete evaluator。
  Invalid/incomplete model只记rejected；相同合法model记duplicate agreement而不是
  invalid。SAT与UNSAT同时出现只增加`solver_disagreements`；UNSAT不剪枝、不缓存、
  不阻止任何合法SAT candidate；
- 配置与观测：MPI和离线CLI支持`SYMCC_STRING_SOLVER_PORTFOLIO`/`--portfolio` JSON
  或文件，entry分`symcc-json`与`smtlib`，命令不经shell。Metrics增加backend runs、
  SAT/UNSAT/unknown/error、disagreement、rejected与duplicate models；
- 自动化证据：unit portfolio并发一个UNSAT、一个伪SAT、一个合法SAT和一个重复SAT，
  仅合法model被接受，漏斗分类为4 runs/3 SAT/1 UNSAT/1 rejected/1 duplicate/
  1 disagreement。CLI stub覆盖三种BV model格式与显式`get-value`；配置边界覆盖两类
  backend。真实双Z3离线smoke产生2 SAT、1 verified、1 duplicate、0 rejected；
  13个string unit、42项跨层回归、真实string solver集成与Python/diff checks通过；
- 边界：F195阶段尚未安装cvc5、Princess或Z3str3，因此当时只验证了adapter contract
  与双Z3并发；F198已补上cvc5 1.1.2真实conformance，Princess/Z3str3仍未验证。
  Portfolio当前不学习backend选择或共享incremental context；真实多solver效果与
  资源隔离仍需benchmark。当前等级 I/T/E。

## 191. F196：Exact-Subdomain Decimal Conversion Semantics（2026-07-28）

- 研究问题：G04已有string search/length，却没有字符串到整数的跨理论转换；直接把
  完整C `atoi`映射到SMT `str.to_int`会在空白、正负号、trailing bytes、locale和
  overflow上产生语义不一致；
- 精确子域：只接受first-NUL前1--10个ASCII digits、无sign/space/prefix/trailing
  character，且concrete fold不超过`INT_MAX`并与真实libc结果相等。其他输入不导出
  artifact、不设置symbolic return expression；
- Query IR：string predicate新增`decimal`和`to_int`。前者lower为non-empty
  `[0-9]+` regex，后者lower为`str.to_int` integer relation；两者必须同时成立，
  防止无效string的SMT `-1`被错误当作C `atoi` model。Concrete evaluator用同一
  ASCII digit contract复核；
- Runtime语义：compiler拦截`atoi`；wrapper在32-bit BV中逐digit执行
  `acc = acc * 10 + digit`，每byte加入`'0' <= byte <= '9'`，并约束observed NUL。
  `symcc-string-operation-v1`新增`observed_value`，转换为
  `decimal(value) ∧ str.to_int(value) != observed`；
- 验证链：direct-input连续span和first-NUL仍由F194 provenance gate证明，String/BV
  link与candidate evaluator沿用F193，portfolio沿用F195。候选可改变数字或缩短长度，
  但必须留在精确decimal子域；
- 自动化证据：unit构造offset 2的`123\\0`，确认原值不满足alternative、`124\\0`
  满足、`ABC\\0`被regex/evaluator拒绝。真实instrumented operation test新增offset
  12--15的atoi artifact，检查observed value 123并由真实Z3产生有效纯数字candidate。
  14个string unit、43项跨层回归、compiler/runtime重编译、Python/diff checks通过；
- 边界：尚不支持`strtol/strtoul`的base/endptr、signed decimal、leading whitespace、
  overflow/errno或locale，也不处理数字后suffix。该保守子域是可证明baseline，
  不是完整libc conversion模型。当前等级 I/T/E。

## 192. F197：Width-Bound Signed strtol Contract（2026-07-28）

- 研究问题：F196只覆盖unsigned `atoi`；`strtol`还包含sign、base、endptr消费位置、
  target-long位宽与errno/overflow。若忽略任一项，String model可能与C observable
  state不一致；
- 严格启用门：只在`endptr == NULL`、base参数concrete且等于10、输入为可选单个
  `-`加1--19位digits（32-bit long最多10位）、first-NUL结束、真实调用未ERANGE且
  手工overflow-safe fold与libc结果相等时启用。其他情况保留原libc返回与errno；
- Width contract：operation artifact新增`integer_bits=32|64`。F196 atoi同样明确
  `integer_bits=32`；query除different-value外加入目标类型min/max。由此String
  proposal不能生成超出C返回类型的decimal，即使原observed value本身合法；
- Signed String IR：`decimal(signed=true)`lower为`[0-9]+ | -[0-9]+`，
  `to_int(signed=true)`以prefix test、substring和整数negation组合
  `str.to_int`。Concrete evaluator使用完全相同的可选minus/digits/range规则；
- Runtime语义：compiler拦截`strtol`。Wrapper保存并按success/error恢复errno，
  以unsigned accumulator和`limit-digit`预检避免host arithmetic overflow，
  在target `long`位宽构造multiply-by-10 fold；negative path显式约束minus，
  digits与NUL继续有BV guards；
- 自动化证据：unit以offset 1的`-123\\0`验证signed regex、prefix/substr lowering、
  negative/positive alternative及`+123`拒绝。真实operation test在offset 16--20
  导出observed -123、integer_bits 64，并由真实Z3求得范围内candidate；同一span的
  non-null endptr/base16调用不产生第二条artifact。15个string unit、44项跨层回归、
  compiler/runtime重编译、Python/diff checks通过；
- 边界：完整strtol仍需endptr symbolic memory effect、base 0/2--36、leading
  whitespace/`+`、prefix、suffix消费、locale和ERANGE/errno状态。当前子域因
  `endptr == NULL`而避免伪造副作用，并不声称operation-complete。当前等级 I/T/E。

## 193. F198：Executable Cross-Solver String Conformance Gate（2026-07-28）

- 研究问题：F195的backend adapter测试只能证明本地协议和model parser，不能证明另一
  String solver接受同一SMT-LIB语法、返回完整BV model且与F193 concrete contract一致；
  单纯获得`SAT`也无法排除不同String/Integer语义或错误model解释；
- 可执行门禁：新增`util/string_backend_conformance.py`，固定运行binary byte、
  contains+BV、negative indexof、atoi和signed strtol10五类query。每个backend的每个
  结果都必须为SAT，assignment应用到witness后必须通过独立dual-view concrete
  evaluator；空结果、unknown、UNSAT、不完整model和语义不一致均令门禁失败；
- 可移植性修复：实测cvc5暴露四处Z3方言依赖，lowering统一改用SMT-LIB可接受的
  `bv2nat`、`str.to_int`、`str.to_re`，负整数常量使用`(- N)`而非词法`-N`。
  CLI adapter在非零退出时合并stdout/stderr，保留solver parser诊断；
- 证据协议：输出版本化`symcc-string-backend-conformance-v1`，逐case记录solver、
  status、verified、assignment数量、耗时和有界reason；`--backend`可直接检查F195
  portfolio配置，`--solver`检查单个内置helper，lit加入持续回归入口；
- 自动化证据：仓库内置Z3和Ubuntu打包cvc5 1.1.2都在真实进程中完成5/5 SAT且5/5
  concrete-verified；binary、联合String/BV、负index和两种跨String/Integer转换均
  不是adapter stub。相关string/semantic/QueryStore回归、Python compile和diff
  checks通过；
- 边界：本轮未安装Princess和Z3str3，也未声称五个探针覆盖完整SMT-LIB String
  标准、增量context、性能稳定性或UNSAT proof。新增backend仍须固定版本运行该门禁，
  并在公开目标上另做等CPU效果评测。当前等级 I/T/E。

## 194. F199：Validation-Aware Contextual String Backend Selection（2026-07-28）

- 研究问题：F195对每条query固定运行全部backend，能发现disagreement但在某个solver
  对特定String fragment持续慢或产生无效model时浪费预算。通用SMTgazer调度器又不
  掌握F193的独立concrete verification结果，不能直接作为String可信反馈；
- 上下文表示：策略以operation集合、总capacity桶、单/多变量和是否含BV predicate
  形成稳定context。它维护backend全局arm与最多1024个context-local arm，统计pull、
  concrete-verified SAT和elapsed microseconds，不把solver自报SAT直接当成功；
- 选择策略：显式`selection.max_backends`限制每query实际backend数；cold-start保证
  每个backend至少运行`warmup`次，周期性`explore_every`选择低使用arm，其余按平滑
  verified yield、timeout归一化成本和不确定性项排序。默认无`selection`时行为保持
  全portfolio并发；
- 可信边界：materializer先应用assignment并执行完整dual-view evaluator，再批量回灌
  policy。duplicate合法model仍是solver语义成功；invalid/incomplete SAT、UNSAT、
  unknown和error均为零成功，但UNSAT仍不剪枝、不缓存。target coverage acceptance
  与backend语义有效性继续分层；
- 持久化与并发：新增`symcc-string-backend-policy-v1`，按backend name保存global/
  context arm、round和updates；写入采用临时文件、fsync、原子rename，文件锁保护共享
  文件系统上的MPI多进程read-modify-write。context按last-round有界淘汰，损坏或缺失
  state fail-soft回到先验；
- 观测与门禁：worker metrics增加selected、skipped、updates、explorations和contexts。
  `solve_all_conformance`强制绕过学习选择，确保F198始终检查所有配置backend，而不是
  只验证当前winner；
- 自动化证据：unit覆盖冷启动逐arm探索、有效快速backend胜出、每轮严格max-backends、
  state重启恢复、conformance全backend旁路，以及只有concrete-valid SAT得到成功反馈。
  17个string unit、46项跨层回归通过；真实Z3+cvc5配置在`max_backends=1`时仍由门禁
  运行10个结果并全部concrete-verified；
- 边界：该策略是低维在线bandit，不是完整SMTgazer的X-means、censored PAR-2和
  sequence BO；共享状态只保证本机/共享POSIX文件系统一致性，尚未接入分布式CAS。
  Coverage reward目前不进入backend arm，因为未通过target的candidate不能反证solver
  语义能力；公开benchmark需分别报告调用节省、wall time和coverage/CPU。当前等级
  I/T/E。

## 195. F200：Width-Bound Unsigned strtoul and Overflow-Proof Decimal Folds（2026-07-28）

- 研究问题：F197只覆盖signed `strtol`，且F196/F197 runtime fold仅证明当前concrete
  witness不溢出；同长度symbolic alternative仍可能越界，使BV回绕与libc的undefined
  `atoi`域或`strto*` ERANGE饱和语义不一致；
- 严格`strtoul`子域：compiler新增`strtoul` interception。Runtime只在endptr为NULL、
  base concrete 10、参数本身concrete、1--20位纯ASCII digits、无ERANGE、手工
  overflow-safe fold与libc结果一致时建立symbolic return和artifact。`-`/`+`、base
  0/2--36、non-null endptr、whitespace、prefix/suffix全部保守回退；
- 无符号artifact：`symcc-string-operation-v1`新增`strtoul10`，允许32/64-bit
  `integer_bits`和`0..2^bits-1` observed value；writer用单一共享去重/配额状态和
  显式unsigned输出，避免64-bit `ULONG_MAX`经signed窄化；
- Query contract：unsigned decimal regex与`str.to_int`同时约束`0..2^bits-1`和
  different observed value。通用to-int常量边界扩为有界64-bit unsigned范围，
  concrete evaluator同样拒绝sign、非digits和width overflow；
- 逐位溢出证明：atoi、strtol和strtoul的每个digit fold都新增
  `acc < limit/10 || (acc == limit/10 && digit <= limit%10)` path guard；signed
  strtol依据当前固定sign选择`LONG_MAX`或`abs(LONG_MIN)` limit。由此runtime BV
  expression只在与libc一致的defined/non-ERANGE子域内使用；
- 自动化证据：unit以`ULONG_MAX`证明原值被alternative排除、`ULONG_MAX-1`接受、
  20位全9 overflow拒绝。真实instrumented测试导出唯一`strtoul10(456)`，negative
  input、base16/non-null-endptr不误导出；测试先清理自己的append artifact并连续
  两次通过，证明幂等。18个string unit、47项跨层回归、Z3/cvc5各6/6 conformance、
  compiler/runtime重编译和diff checks通过；
- 边界：尚未建模sign的C unsigned negation、endptr消费memory effect、base
  autodetection/2--36、locale whitespace、prefix/suffix和errno分支。逐位guard只
  保证当前严格domain，不把域外调用转成符号返回。当前等级 I/T/E。

## 196. F201：Parser-State Structural Trace and Nonterminal-Aware Grammar Context（2026-07-28）

- 研究问题：F192的独立parser只有布尔exit status，冲突context仍由branch、长度桶和
  lexical邻域启发式构造；相同字节位置可能位于不同nonterminal，同一词法context中的
  不同rule也可能触发不同parser state，全局一对一映射会产生错误屏蔽；
- 版本化trace：`SYMCC_PROPOSAL_PARSER`新增可选`{trace}`占位符。Parser写出
  `symcc-parser-structural-trace-v1`，绑定parser实现标识、accepted verdict及最多
  4096个`symbol/state/[start,end)/parent`节点；文件限制1 MiB，label必须bounded
  printable ASCII；
- 严格验证：accepted必须与process exit code一致，节点span必须落在candidate内，
  parent必须先出现并包含child。Grammar proposal显式携带candidate replacement span；
  manager选择覆盖该span的最小节点。成功退出但trace损坏、verdict不一致或没有enclosing
  node都以`parser-trace-invalid` fail closed；
- Structural identity：context hash包含parser implementation与selected node的完整
  bounded ancestor `(nonterminal,state)`链，不包含易过拟合的绝对offset。Proposal
  state保存context ID、symbol/state、trace SHA-256和node count，但验证后删除临时
  trace；
- 冲突拆分：semantic state升级schema v6并兼容v1--v5，持久化
  `(grammar_rule_id, lexical_context_id) -> parser_context_id`别名，最多4096条。
  下一次同rule/source context直接按真实结构context查询rejection；不同rule不能相互
  覆盖别名。零宽deletion在offset 0也用显式span-present位区分旧版缺失字段；
- 三层反馈：target/branch未通过时仍不运行parser；parser rejection可以携带合法错误
  state用于局部学习，但candidate不能进入coverage triage；parser acceptance也不替代
  AFL novelty。MPI反馈优先使用本次record的parser context，并保留source lexical
  context建立alias；
- 自动化证据：proposal-manager测试覆盖两层node中最小`value/string`选择、trace
  digest/state持久化，以及exit 0/accepted false mismatch拒绝。Semantic集成测试从
  真实grammar proposal span运行拒绝trace，两次反馈后按`field_value/after-equals`
  context局部屏蔽，重启仍保持rule-scoped alias。17项semantic/proposal、32项含
  QueryStore回归、54项扩展相关回归和Python/diff checks通过；
- 边界：框架不从任意binary自动恢复parser/CFG，trace由campaign配置的可信parser
  instrumentation提供；当前使用最小enclosing node和ancestor path，不含完整ECT
  structural path、recursive production induction或parser增量复用。公开benchmark仍需
  评估额外parser/trace成本、validity、rule coverage和coverage/CPU。当前等级 I/T/E。

## 197. F202：Structural Rule-Coverage-Aware Grammar Scheduling（2026-07-28）

- 研究问题：F187只把coverage features累计到rule全局；F201得到parser structural
  context后若仍按全局rule score排序，会反复生成已覆盖nonterminal中的高收益规则，
  无法区分“规则有效”与“该规则/结构组合仍有探索价值”；
- Coverage state：每条`LearnedGrammarRule`新增最多256个
  `parser_or_lexical_context -> coverage feature count`。MPI只在proposal通过target、
  parser gate并经AFL novelty保留后，用record的parser context（无trace时退回lexical
  context）回灌delta；
- 调度：solve-complete与Query-IR hole在每个span内重新按
  `global rule score + 0.5/sqrt(1+context_features)`排序。未覆盖组合获得有限探索奖励，
  随feature证据单调衰减；validity/retention/parser validity的原排序信号仍保留；
- 状态边界：context map达到上限时淘汰coverage最低且ID稳定排序最小项；计数饱和到
  signed 31-bit。Retention API新增`retained < verified`前置条件，拒绝无验证证据或
  重复消费同一次verified observation，保持重启校验不变量；
- 自动化证据：结构context集成测试记录7个features，证明已覆盖context的score低于
  未覆盖context并在schema v6重启后恢复；先建立verified证据、再执行parser局部拒绝，
  证明coverage统计不解除冲突屏蔽。32项semantic/proposal/QueryStore回归、54项扩展
  相关回归及Python/diff checks通过；
- 边界：该计数使用AFL全局feature delta，不是语法产生式自身的独立coverage bitmap；
  未做edge/data/string feature的多目标Pareto调度，也未证明inverse-square-root系数最优。
  需在公开parser目标消融global-only、structural novelty与随机rule选择。当前等级
  I/T/E。

## 198. F203：Recursive Parser Production Induction and Independent Grammar Bitmap（2026-07-28）

- 研究问题：F201只把parser树压缩为最小nonterminal的context，F202又以AFL新特征
  近似“语法覆盖”。前者丢失`A -> prefix A suffix`递归产生式，后者把程序coverage
  与grammar production exercise混为一谈，不能回答规则是否探索了新的结构路径；
- Production IR：在已经通过大小、label、parent/span和exit/verdict检查的
  `symcc-parser-structural-trace-v1`上，从replacement最小enclosing node向祖先搜索
  最近的、恰有一个同symbol direct child的节点。以parser实现、LHS/state、按byte span
  排序的RHS `(symbol,state,recursive-slot)`和terminal-gap SHA-256构造稳定
  `symcc-parser-production-v1` ID；超过32层祖先、direct sibling重叠均fail closed；
- 有界递归归纳：只有一个明确self-recursive slot、slot外至少一个byte且两侧总计不
  超过128 bytes时，保存concrete prefix/suffix和观察到的递归深度。Parser接受后，
  semantic generator学习稳定`recursive` rule；应用语义是对当前token执行一次
  `prefix + token + suffix` splice。每proposal只展开一层并继续受input/rule预算、
  target replay、parser gate和AFL triage约束；
- ECT式结构统一：proposal-state schema升级到v3，保存selected structural path ID、
  production ID/LHS/state/arity、recursive depth和wrapper。Semantic-state升级到v7，
  兼容v1--v6，并分别持久化`(rule, lexical context) -> structural path`与
  `-> production`的rule-scoped alias；
- 独立grammar coverage：新增逻辑64K count bitmap，以
  `(rule ID, structural path ID, production ID)`哈希索引。Parser trace完成一次合法
  production exercise即更新，计数8-bit饱和；稀疏state同时保存首个owner digest、
  event和collision计数。它不读取AFL edge/data delta，因此与F202 retained coverage
  是两个独立目标；
- 联合调度：每span排序在F202全局质量与AFL结构收益之外，再加
  `0.35/sqrt(1+grammar_count)`。已解析过的rule/path/production组合奖励递减，未知
  production仍保留探索奖励；parser rejection仍进入冲突屏蔽且绝不会诱导recursive
  rule，只有parser acceptance能扩充生成语法；
- 状态防护：production/context/owner均需64位hex digest；bitmap最多65536个槽，
  counters、events和collisions有界；规则kind使用显式allowlist。加载时复检production
  字段一致性、wrapper hex/128-byte上限、`recursive_depth <=> nonempty wrapper`和
  原有verified/retained漏斗不变量；
- 自动化证据：proposal-manager测试以`expr -> '(' expr ')'`三层树证明最小`value`
  context与ancestor recursive production同时提取，prefix/suffix为`28/29`、depth为2，
  v3重启保持ID。Semantic测试证明parser接受归纳`recursive` rule、生成`(x)`、
  独立bitmap计数和v7 aliases/rule跨重启恢复。19项semantic/proposal、34项含
  QueryStore、56项扩展相关回归、Python compile和diff checks通过；
- 边界：当前只归纳单一direct self-recursive slot，不处理mutual recursion、多recursive
  slots、epsilon recursion、跨parser symbol校准或完整probabilistic CFG。64K bitmap
  允许哈希碰撞并显式计数，但不提供无碰撞proof；edge/data/string/grammar的Pareto
  权重仍需公开benchmark校准。当前等级 I/T/E。

## 199. F204：Bounded Multi-Slot/Mutual CFG Fragments and Derivation Search（2026-07-28）

- 研究问题：F203只接受一个direct self-recursive child，并把一个wrapper直接挂到
  token rule；它无法表达`Expr -> Expr ',' Expr`的两个递归槽，也无法从
  `A -> B -> A`识别互递归。规则去重后若只保存一个cycle provenance，还会覆盖不同
  production导出的同形wrapper；
- 技术依据：Lase以syntax-rule coverage驱动online grammar search，Cottontail以ECT
  表示比branch-only路径更完整的结构进度，Arvada通过parse-tree bubbling处理高度递归
  grammar。F204采用可信parser tree上的bounded CFG fragment，不引入未经parser验证的
  oracle泛化。参考：[Lase/OOPSLA 2026](https://zbchen.github.io/files/oopsla2026.pdf)、
  [Cottontail/S&P 2026](https://mboehme.github.io/paper/SP26-cottontail.pdf)、
  [Arvada](https://arxiv.org/abs/2108.13340)；
- Canonical CFG fragment：proposal manager沿replacement ancestry提取最多32个
  去重production；每个production包含parser、LHS/state、ordered RHS
  `(symbol,state,direct-recursive)`和`arity+1`个terminal-gap SHA-256。Canonical
  JSON `symcc-parser-cfg-fragment-v1`自身再绑定SHA-256，proposal state升级v4；
- Cycle extraction：每个direct same-symbol child独立形成slot，因此多槽production
  不再拒绝；ancestry中任意重复nonterminal形成bounded cycle path，故
  `A/state0 -> B/state1 -> A/state2`被识别为mutual cycle。Cycle ID绑定parser、
  outer production、slot和完整`(symbol,state)` path；prefix/suffix是outer span相对
  descendant span的concrete context，总计不超过128 bytes且不得同时为空；
- 双层复检：semantic generator不直接相信proposal record，而是重新解析fragment、
  复算每个production/cycle ID、检查path首尾LHS、slot/arity、digest、label、大小和
  32/16预算。只有parser acceptance且整个fragment通过二次验证才合入最多4096个
  production/cycle的持久图；tampered JSON/digest不学习任何cycle；
- Derivation search：recursive rule在一个observation内生成depth `1..N`的独立
  candidate，`SYMCC_GRAMMAR_DERIVATION_DEPTH`默认3、范围1--8。每层执行真实
  prefix/suffix composition并立即检查全局input size；epsilon cycle不进入rule。
  这允许`<x>`继续生成`<<x>>`和`<<<x>>>`，但不会执行无界递归；
- Provenance与覆盖：semantic state升级v8并兼容v1--v7，保存canonical productions、
  direct/mutual cycles、multi-slot count及`recursive rule -> {cycle IDs}`一对多关系。
  同形wrapper可去重成一个rule，但所有cycle来源都保留；F203的独立64K
  rule/path/production bitmap继续作为derivation排序信号；
- 自动化证据：proposal测试以`Expr -> Expr ',' Expr`证明两个slot均进入fragment、
  每个cycle声明`recursive_slots=2`；semantic集成测试从真实parser subprocess的
  `A -> B -> A`树提取mutual path，生成depth 1/2/3候选，验证production/cycle/
  one-to-many provenance跨v8重启恢复，并证明追加一个byte的tampered fragment无法
  学习递归rule。22项semantic/proposal、37项含QueryStore回归、全量319项Python与
  4项subtest通过；
- 正确性边界：这是沿一个replacement ancestry观察到的bounded CFG fragment，不是
  全parser grammar；mutual cycle必须在同一trace中闭合。当前template固定未替换
  sibling的concrete bytes，尚不做多nonterminal同时展开、epsilon production、
  ambiguity/SPPF、subtree correspondence或PCFG概率估计。下一阶段是incremental ECT
  subtree matching和多目标Pareto调度。当前等级 I/T/E。

## 200. F205：Incremental ECT Subtree Correspondence and Verified Substitution（2026-07-28）

- 研究问题：F204只用terminal-gap digest认证production，并以cycle template执行递归；
  digest无法恢复一个已接受subtree的concrete yield，也不能判断两个candidate中的
  production是否只有终结符实例不同。因此它不能执行Cottontail式增量结构复用或
  Arvada式同形subtree替换；
- 表示分层：`symcc-parser-cfg-fragment-v2`为每个production增加
  `symcc-parser-production-shape-v1` ID。Shape绑定parser、LHS/state和ordered RHS，
  但有意排除terminal-gap内容；原production ID仍绑定全部gap digest。最多32个
  `symcc-parser-subtree-instance-v1`再绑定production/shape、完整yield SHA-256、
  root-to-node ancestry path、concrete yield和逐gap bytes。这样“结构对应”与“具体
  语法实例”不再混为一个哈希；
- 可信边界：只有target replay和独立parser均接受后，semantic层才解析v2 fragment，
  并重新计算shape、production、instance、yield和每个gap hash；path末端必须等于
  production LHS/state。单yield与gap总量各不超过256 bytes、fragment仍不超过64 KiB。
  错误outer digest、内部yield修改、gap不一致或持久化引用悬空均fail closed；
- 增量correspondence：semantic state v9维护最多4096个shape、8192个instance和
  shape-to-instances equivalence class。相同shape下具有不同yield的instance才计为
  correspondence class。每个instance学习显式`subtree` rule，并保留
  `rule -> {shape IDs}/{instance IDs}`多对多provenance；
- Context-safe substitution：只有一个lexical source/candidate context已由accepted
  selected instance映射到对应shape时，该shape的subtree rule才进入候选集。错误branch/
  邻域context在生成前被过滤；产生的proposal携带shape/instance ID，并仍需经过
  target、parser和AFL novelty三层验证。这不是跨nonterminal的无条件字节字典；
- Incremental chain：manager按candidate的branch、input-size bucket和replacement
  两侧16-byte邻域计算candidate-local context。Source context与accepted-output
  context都映射到selected shape，因此被保留的candidate可作为下一轮source继续复用，
  而无需重新泛化整个parser grammar；
- 长期运行与降级：proposal state升级v5，semantic state升级v9并兼容旧状态。CFG
  production、cycle、shape、instance和rule provenance采用引用一致的级联驱逐；达到
  64 KiB时优先确定性移除非selected instance，必要时放弃instance增强证据而尽量保留
  F204 CFG/cycle，不因F205可选信息拒绝原本合法的结构反馈。加载proposal state时还
  重新哈希content-addressed candidate和candidate context；
- 自动化证据：真实parser subprocess分别接受同一`value/atom` shape的`A`与`B`，
  得到不同instance并形成两个可执行subtree alternatives；错误branch context不生成，
  v9重启保持shape/instance/rule correspondence。测试重算outer digest后篡改内部
  `yield_hex`，semantic层仍拒绝学习；32层长label树证明64 KiB超限时裁剪instance且
  保留selected evidence。24项semantic/proposal、39项含QueryStore定向回归、全量
  321项Python与4项subtest通过；
- 科研定位与边界：这是observed ancestry上的incremental ECT correspondence，不是
  完整Cottontail expression tree、SPPF或parser增量算法。Shape严格包含parser ID和
  state，故不会擅自跨parser对齐；当前不替换多个nonterminal槽、不支持epsilon yield、
  ambiguity forest、PCFG概率或全局Pareto corpus replacement。下一阶段是把edge/data/
  string/grammar/ECT novelty纳入显式多目标Pareto frontier，并做公开parser目标等CPU
  消融。参考：[Cottontail/S&P 2026](https://mboehme.github.io/paper/SP26-cottontail.pdf)、
  [Lase/OOPSLA 2026](https://zbchen.github.io/files/oopsla2026.pdf)、
  [Arvada](https://arxiv.org/abs/2108.13340)。当前等级 I/T/E。

## 201. F206：Seven-Objective Pareto Grammar/ECT Scheduling（2026-07-28）

- 研究问题：F202--F205依次把AFL structural yield、grammar bitmap和ECT instance接入
  排序，但最终仍是固定系数加权和。加权和会把互有优势的规则压成一个标量，不能保留
  non-convex trade-off；新规则、未触发String的规则还可能因“缺数据等于零收益”被错误
  支配；
- 七维目标：每个rule/context分别最大化target validation posterior、AFL retained
  edge-feature yield、dynamic data-comparison progress、独立concrete-verified String
  model yield、`rule/context/production` grammar novelty、matched-shape ECT novelty和
  scheduling age。Data由`SolverTelemetry.data_features`的matched/width质量反馈；
  worker把本次`.string_solver_metrics.json`中的query/verified/dual-view计数并入
  telemetry，绝不把SAT但未通过concrete evaluator的model记为String成功；
- 缺失观测语义：data与String采用0.5的bounded Bayesian neutral prior，未出现相关
  operation不被当作成功或失败。Edge objective结合retention posterior与每attempt的
  feature rate；grammar objective使用独立64K bitmap而非AFL delta；ECT objective只对
  已认证matched shape的subtree rule计算；
- Bounded Pareto archive：每个source context先对全部bounded grammar rules计算目标，
  按七个维度的极值round-robin保留最多256个arm，避免在8192-rule硬上限执行无界
  O(n²)。在archive内执行精确non-dominated sorting；同一front按每维归一化crowding
  distance排序，优先保留相互远离的trade-off而非重新求加权和；
- 公平性修复：初版测试发现parser局部冲突解除后的低收益rule可能长期位于后续front。
  F206增加持久化`last_attempt_observation`和age objective；刚执行rule的age归零，
  等待rule随observation增长成为不可被近期rule支配的极端。该机制提供bounded
  starvation resistance，而不虚构coverage收益；
- 状态与消融：`SYMCC_GRAMMAR_PARETO=1`默认启用，设0恢复F202/F203 scalar排序作为
  实验baseline。Semantic state升级v10并兼容v1--v9，保存per-rule data quality、
  String query/verified、last-attempt与global frontier/ranking计数；加载复检finite
  quality、`quality_sum <= observations`、`verified <= queries`和时间上界；
- 自动化证据：构造一个edge-yield极端、一个data-progress极端和一个被二者支配的
  rule，证明前两者同处front 0且低质量rule进入后续front；真实telemetry mapping证明
  data quality与2/3 verified String yield跨v10重启恢复。原parser rejection测试进一步
  证明age objective使解除冲突的rule重新获得proposal预算。26项semantic/proposal、
  41项含QueryStore、81项含hybrid-feedback定向回归、全量323项Python与4项subtest
  通过；C++ build、2项String lit及真实Z3/cvc5各6/6 conformance通过；
- 科研边界：这是contextual Pareto arm scheduling，不是整个corpus的多目标
  replacement proof。当前edge反馈仍是AFL feature delta而不是按edge family拆分；
  String objective仅在配置了artifact/cross-solver验证时有观测；frontier的公开目标
  coverage/CPU、hypervolume、invalid ratio和各目标消融尚需F67 confirmatory protocol。
  下一阶段是Pareto corpus ownership/replacement与公开parser campaign，而不是继续
  人工调权。当前等级 I/T/E。

## 202. F207：Epsilon-Pareto Corpus Metadata Ownership and Replacement（2026-07-28）

- 研究问题：F206只在grammar rule层保留多目标trade-off；主seed调度仍由LinUCB标量
  reward和`DataCoverageTracker`逐feature winner组成。后者能回答“谁是某个data
  feature最优”，却不能决定edge、data、String、结构、path和成本互有优势时哪些seed
  应继续占用bounded replay metadata；
- 六维archive：`ParetoCorpusArchive`对每个已执行path累计AFL edge-feature delta、
  data coverage refinement bits、concrete-verified String query yield、branch-trace
  structural sites、stable path hash和reward/cost efficiency。严格全目标不差且至少
  一维更优才构成dominance；缺String observation继续使用neutral posterior；
- Admission/replacement：若任一entry支配新seed，拒绝其metadata admission；若新seed
  支配已有entry，则级联移除这些dominated metadata。容量默认为4096、硬范围8--65536，
  不在全量entry上反复执行O(n²) front排序；
- Epsilon density：容量溢出时把六维目标量化到2--32 bins。每个目标至少保护一个全局
  extreme，然后从最拥挤的未保护cell选择总效用最低的victim；这在bounded cost下近似
  保持frontier diversity。Grid只参与capacity tie-break，不改变strict dominance；
- 系统接入：`AdaptiveHybridScheduler.observe`在DataCoverage delta和统一reward已确定
  后更新archive；`score`只给archive member一个有界priority bonus。驱逐仅删除SymCC
  replay/scheduling metadata，不删除、改名或覆盖AFL queue/crash文件，也不改变
  `CoverageBitmap`的权威ownership；
- 状态与开关：`SYMCC_PARETO_CORPUS`默认1，
  `SYMCC_PARETO_CORPUS_ENTRIES`默认4096，`SYMCC_PARETO_CORPUS_BINS`默认8。
  Adaptive scheduler state升级v12并兼容v1--v11，持久化entry evidence、admission/
  rejection、dominance/density eviction计数；加载复检path长度、finite reward/cost、
  String漏斗和logical observation time；
- 自动化证据：edge、data和String三个互不支配extreme同时保留，零收益/无path evidence
  seed被拒绝；一个在六维均更优的`super` seed替换三个旧entry。Round-trip测试证明
  archive counters/evidence恢复；scheduler集成测试证明edge=3、String=1/2和state v12
  跨重启保持。83项hybrid/semantic/proposal/QueryStore定向回归、全量325项Python与
  4项subtest、C++ build和2项String lit通过；
- 科研边界：这是metadata archive而不是物理AFL corpus minimizer，故不会减少AFL自身
  queue磁盘规模；当前结构目标使用site diversity而非完整ECT hypervolume，edge目标
  使用新feature数量而非稀有度直方图。公开实验仍需比较no archive、code/data winner、
  scalar utility与epsilon-Pareto，并报告archive churn、front hypervolume、coverage/
  CPU和内存。下一阶段可把archive admission接到distributed coverage ownership
  consensus，但在证明跨master线性化前不能删除共享queue文件。当前等级 I/T/E。

## 203. F208：Packed Parser Forest Families and Verified Epsilon Derivation（2026-07-28）

- 研究问题：F204/F205只能消费一棵非空span tree，因此无法表示同一nonterminal的多个
  parser-supported RHS，也会把合法的零宽归约排除在ECT之外。直接允许空字节规则又会
  产生无上下文删除器；直接遍历GLR/SPPF全部节点则可能把未被当前parse选择的备选节点
  错认成replacement context，并导致产生式和instance证据无界膨胀；
- Trace v2协议：新增`symcc-parser-structural-trace-v2`。`epsilon`必须与
  `start == end`严格等价，epsilon节点不得有children。每个节点可声明最多8个
  `alternatives`，每个alternative最多64个有序、互不重叠的direct-child index；
  alternative列表必须唯一，其并集必须恰好覆盖全部direct children。第0项是parser
  选中的concrete tree，其余项只是packed evidence；
- 主树定位修复：replacement最小enclosing node只在从roots沿alternative 0可达的
  primary nodes中选择。非主分支不能因相同span或更晚node index劫持context；它们只在
  所属primary ancestor处形成额外RHS family。这一约束把“当前执行树”与“可能语法”
  分离，也是后续context-safe生成的必要条件；
- Canonical family：v2 trace使用`symcc-parser-production-v2`和
  `production-shape-v2`，二者都把epsilon语义纳入hash；packed ordinal不进入
  production ID，只作为证据元数据，故语义相同的备选会规范化合并。
  `symcc-parser-cfg-fragment-v3`先保留最多32层primary ancestry production，再按
  parser/node/alternative确定性顺序填充非主family到总计32条；cycle只引用primary
  production，instance按ID去重并继续受32项、单yield/gap 256 bytes与总64 KiB限制；
- Verified epsilon：只有empty RHS、唯一empty terminal gap、empty concrete yield、
  production/shape/instance全部hash一致的epsilon evidence才可进入semantic图。
  Semantic层在target replay和独立parser均接受后学习body为空的`epsilon` rule；
  rendering是对当前source token执行零字节splice，即删除，而不是插入不受约束的
  空节点；
- ECT上下文门：epsilon rule与普通subtree rule共享`rule -> shapes/instances`和
  lexical-context-to-selected-shape映射。错误branch/邻域context在生成前被过滤；
  proposal仍携带零宽candidate span并重新经过target、parser和AFL novelty三层门禁。
  Pareto ECT objective也把epsilon视为结构rule，而不是给予固定neutral分；
- 状态与兼容：proposal state升级v6，新增packed alternative/epsilon production
  计数并在加载时与v3 fragment复核；semantic state升级v11，持久化v2 production、
  empty instance、epsilon rule和全部引用关系。Proposal v1--v5、semantic v1--v10、
  parser trace v1与CFG fragment v1/v2继续兼容；
- 自动化证据：真实parser subprocess输出`choice -> empty | token` packed trace，
  验证4条production、1条非主family、1条epsilon production和selected empty
  instance；错误child union fail closed。构造16层、每层8个备选的forest证明primary
  优先和32-production确定性上限。跨层测试证明epsilon rule只在认证shape context
  生成空candidate，错误branch不生成，v11重启恢复；修改selected empty yield并重算
  outer digest仍被二次验证拒绝。30项semantic/proposal定向测试、全量329项Python与
  4项subtest、C++ build、2项String lit及Z3/cvc5各6/6 conformance通过；
- 科研定位与边界：F208实现的是沿一个已选择parse ancestry的bounded packed
  production families，不是共享节点/边的完整SPPF、generalized parsing算法或
  probabilistic CFG。跨alternative的深层subtree correspondence、多个nonterminal
  同步替换、nullable-cycle fixed point、production probability/inside-outside
  估计、跨parser symbol校准和公开parser campaign仍未完成。所有性能提升结论在F67
  equal-CPU confirmatory实验前保持E级。参考：
  [Lase/OOPSLA 2026](https://zbchen.github.io/files/oopsla2026.pdf)、
  [Cottontail/S&P 2026](https://mboehme.github.io/paper/SP26-cottontail.pdf)、
  [Arvada](https://arxiv.org/abs/2108.13340)。当前等级 I/T/E。

## 204. F209：Shared Packed DAG and Deep Alternative ECT Correspondence（2026-07-28）

- 研究问题：F208的v2 alternatives仍以单parent nodes表示，本质是把多棵树压在一个
  列表中，不能证明两个derivation真正共享同一个forest node；production也只沿选中
  ancestry抽取，非主分支下一层的subtree不会进入ECT。简单递归全部备选又会出现
  exponential tree unfolding、重复instance和无界provenance；
- V3 shared-DAG trace：新增`symcc-parser-structural-trace-v3`。Node不再声明
  `parent`，而由`roots`和alternative child indexes形成DAG；child必须严格位于更大的
  node index，故无须相信parser的cycle声明即可证明有限无环。每个alternative仍要求
  span包含、有序、内部不重叠；最多4096 nodes、16384 edge occurrences和1 MiB；
- Concrete-tree约束：`roots[0]`和每个reachable node的alternative 0构成当前parser
  选中的concrete tree。该子图要求单父；replacement context只在此子图定位。共享
  node可被不同非主alternative、不同非主parent或主/非主边共同引用，但不能制造两个
  current-tree parents。这保留SPPF sharing而不把ambiguity误当作当前execution；
- Bounded closure：提取器先无条件保留最多32层selected ancestry，再从这些节点按
  确定性BFS展开所有alternatives，闭包最多32 nodes。Production总预算仍是32：
  ancestry primary优先、再保留deep node primary、最后填充alternative families。
  Graph edge先保留每个node的一条完整root path，再填充到128 edges，因此每个保留
  instance都有可复检的derivation path；
- Canonical graph evidence：`symcc-parser-cfg-fragment-v4`增加
  `symcc-parser-packed-node-v1`和`packed-edge-v1`。Node ID绑定parser、原trace order、
  symbol/state、span、epsilon和yield digest；edge ID绑定parent/child、alternative和
  slot。`roots`、`selected_path`和`truncated`区分完整forest与有界projection；
  总fragment继续受64 KiB限制；
- Deep ECT instance：`symcc-parser-subtree-instance-v2`在F205的production/shape/
  yield/path上再绑定`node_id`与完整`node_path`。这使相同production/yield位于不同
  shared-node provenance时不会错误折叠instance，同时shape equivalence仍能跨node和
  candidate聚合；
- 二次验证与执行边界：semantic层复算全部node/edge/production/shape/instance ID，
  检查topological order、span containment、root无incoming edge、alternative slot、
  selected path全为alternative 0、每个instance path edge存在且symbol/state/yield与
  node一致。Non-primary deep instance可学习subtree rule，但只有source context已经
  被selected instance认证为同一shape时才可生成，故packed evidence不能自行授权；
- 长期运行：proposal state升级v7，记录packed node/edge计数并与v4 fragment复核。
  Semantic state升级v12，保存最多8192 nodes、32768 edges和v2 instances；node驱逐
  删除所有incident edges及含该node的instances，edge驱逐在不存在平行parent-child
  edge时级联删除失去完整path的instance，并沿F205引用图撤销rule shape/instance；
- 自动化证据：真实parser subprocess输出5-node/5-edge DAG，delimiter node在两个
  root alternatives间共享；非主wrapper下的deep `value("b")`与主树
  `value("a")`同shape。验证器保留完整selected/deep paths，semantic层在正确context
  生成`b`、错误branch不生成；v12重启恢复shared graph和生成能力。删除deep path edge
  会级联撤销instance，修改edge alternative并重算outer digest仍使整个fragment
  fail closed；primary graph非法sharing被拒绝。33项semantic/proposal定向测试、
  全量332项Python与4项subtest、C++ build、2项String lit及Z3/cvc5各6/6通过；
- 科研定位与边界：这是从独立parser消费的bounded SPPF projection，不是SymCC内部
  GLL/GLR parser，也不对被截断forest声称完整性。尚未实现nullable-cycle fixed point、
  packed-edge probability/inside-outside、跨多个nonterminal的同步substitution、
  增量parse cache或跨parser symbol calibration。公开benchmark必须报告forest
  truncation、shared-node ratio、deep-instance yield、invalid ratio、内存和
  coverage/CPU。参考：
  [SPPF transformation model](https://doi.org/10.14279/tuj.eceasst.73.1032)、
  [Lase/OOPSLA 2026](https://zbchen.github.io/files/oopsla2026.pdf)、
  [Cottontail/S&P 2026](https://haoxintu.github.io/files/sp2026-cottontail.pdf)、
  [Arvada/ASE 2021](https://arxiv.org/abs/2108.13340)。当前等级 I/T/E。

## 205. F210：Nullable SCC Least Fixed Point and Proof-Carrying Deletion（2026-07-28）

- 研究问题：F208只能从一个实际出现的零宽parse node学习epsilon，F209虽能表达共享
  forest，却有意保持node graph无环。现实CFG的可空性可通过`A -> B -> ... -> epsilon`
  传播，并可能穿过互递归SCC；把“位于循环中”直接等同于nullable会错误接受没有基例的
  `A -> B, B -> A`，而展开所有推导既不终止也无法形成可审计证据；
- V4协议：`symcc-parser-structural-trace-v4`保留v3的forward packed DAG，再附加最多
  32条`lhs -> rhs` nullable dependency rules；LHS/RHS元素都绑定bounded printable
  `(symbol,state)`，每个RHS最多8项。规则以parser、LHS和ordered RHS形成
  `symcc-parser-nullable-rule-v1` ID，因此不同parser/state不能无意合并；
- SCC与最小不动点：验证器在至多288个symbol/state节点上计算dependency reachability
  和强连通分量。空RHS给出depth 0基例；仅当一个rule的全部children已有证明时才给
  LHS生成`1 + max(child depth)`证明，并按`(depth, rule ID)`选择规范化最小证明。
  循环SCC有稳定`symcc-parser-nullable-scc-v1` identity，但SCC本身不提供可空性；
  纯循环证明集为空，有epsilon基例的互递归才收敛；
- Proof-carrying fragment：`symcc-parser-cfg-fragment-v5`同时携带排序后的rule、proof
  与cyclic SCC。Proposal manager保存每项计数并升级state v8。Semantic层不信任这些
  派生字段，而是重算完整certificate并要求逐项相等；修改proof depth后即使重算外层
  SHA-256也会整段fail closed；
- 增量全局语义：semantic state v13按parser合并至多4096条已验证规则，每次合入、
  production驱逐、instance驱逐或重启后重算全局least fixed point。持久文件中的proof/
  SCC只作审计输出，恢复权限完全由source rules重新推导，避免陈旧派生缓存继续授权；
- Context-safe执行：一个已存production只有在同parser的`(lhs,state)`进入nullable
  fixed point时，其shape才加入epsilon rule。生成仍要求source lexical context已由
  selected instance认证到同shape，随后还必须通过target replay、独立parser与AFL
  novelty。Packed graph仍是forward DAG；grammar-level SCC不会引入node cycle，也
  不能让非selected ambiguity evidence自行授权删除；
- 引用一致性修复：没有concrete epsilon instance的proof-backed shape可以在普通ECT
  instance淘汰后继续存在；其context alias和epsilon shape link由nullable certificate
  维持。状态加载延迟过滤shape alias，待productions、instances、rules全部恢复并重算
  fixed point后才移除真正悬空引用；
- 自动化证据：v4 subprocess给出`A -> B, B -> A, B -> epsilon`，验证v5 fragment含
  3 rules、2 proofs、1 SCC，深度分别为A=1/B=0；纯`A <-> B`保持0 proof/0 nullable
  shape/0 epsilon rule。Semantic集成证明正确context可删除、错误branch不可删除，
  proof depth篡改被拒绝，v8/v13重启及selected instance淘汰后能力仍一致。16项
  proposal、19项semantic聚焦测试、全量334项Python与4项subtest、原生build、2项
  String lit及Z3/cvc5各6/6通过；
- 科研定位与边界：这是由独立parser提供规则的bounded nullable certificate，不是
  SymCC内部的完整grammar recovery或增量GLR/GLL parser；当前证明只回答布尔可空性
  与最小rule depth，不计算推导数量、最小terminal cost或概率质量。下一阶段应实现
  多nonterminal同步substitution，再研究incremental parse cache和packed-edge
  inside/outside概率；公开实验需报告nullable proof命中、无效删除率、额外内存与
  coverage/CPU。参考：
  [SPPF transformation model](https://doi.org/10.14279/tuj.eceasst.73.1032)、
  [Lase/OOPSLA 2026](https://zbchen.github.io/files/oopsla2026.pdf)、
  [Cottontail/S&P 2026](https://haoxintu.github.io/files/sp2026-cottontail.pdf)。
  当前等级 I/T/E。

## 206. F211：Atomic Multi-Nonterminal ECT Transactions（2026-07-28）

- 研究问题：现有subtree rule只能替换一个已观察的完整yield，逐个替换parent的多个
  child slot则会把parser-invalid中间态送入queue；另一方面，对同shape child做无界
  Cartesian product会产生组合爆炸，也会把“结构相同”错误扩大成跨parent任意适配。
  F211目标是在一个candidate内原子改变至少两个nonterminal slot，并为组合来源提供
  可撤销的结构证书；
- 可信输入：不新增未经验证的parser hint，而是消费F209/F210已复检的parent
  production、alternative-0 packed edges、parent/child v2 instances和terminal gaps。
  Parent arity限定2--8；slot必须恰好为`0..arity-1`，每个child必须有同parser的primary
  production instance。先用`gap0 + child0 + ... + childN + gapN`重建source parent，
  与accepted parent yield逐byte相等后才进入组合搜索；
- Bounded synchronized search：建立一次性的`shape -> concrete yield -> canonical
  instance`索引。每槽最多保留2个不同accepted yield；一次transaction改变2--4槽，
  每个parent最多保留4项，全局最多4096项。结果超过256 bytes或已经是该parent shape
  的accepted yield会跳过，因此生成的是未观察组合而不是重复whole-subtree replay；
- Proof-carrying transaction：`symcc-parser-sync-transaction-v1`绑定parser、parent
  shape/production/instance、完整ordered edge sequence、每槽shape/source/target
  instance、changed bitmap、不变terminal gaps和result SHA-256。Transaction ID与
  `synchronized` rule一对多关联，同一结果可保留多个独立结构来源；
- 精确执行门：shape context仍是必要条件但不再充分。生成前还要求当前source token
  与certificate的source parent yield逐byte相等，因此一个为`a,c,e -> b,d,e`学习的
  两槽transaction不能套到`b,c,e`上退化为单槽变化。候选通过一次完整parent splice
  构造，没有可见中间态；随后仍经过target telemetry、独立parser和AFL全局novelty；
- 生命周期与状态：transaction是derived state。Semantic v14虽输出transaction用于
  审计，但加载时忽略该对象，从已复检graph重新计算；篡改持久化yield无效。Instance、
  edge、production或synchronized rule驱逐会级联重算/撤销引用。按shape/yield预索引
  避免每parent反复全图扫描；grammar容量淘汰同步删除transaction，不留悬空rule ID。
  Proposal state v9新增`grammar_sync_transaction_id`，只作为provenance而非parser
  acceptance替代物；
- 自动化证据：真实v3 parser subprocess分别接受`a,c,e`和`b,d,f`。三槽图导出未观察
  的`b,d,e`、`b,c,f`、`a,d,f`，每个candidate保持两个comma gap且相对其source精确
  改变两槽；错误branch/context不生成。测试复检slot edge/source/target identity、
  manager v9 provenance、parser replay、semantic v14重启、持久transaction篡改后
  重算，以及target child instance驱逐后对应transaction消失。16项proposal、20项
  semantic聚焦测试、全量335项Python与4项subtest、原生build、2项String lit及
  Z3/cvc5各6/6通过；
- 科研定位与边界：这是bounded CFG/ECT组合器，不是attribute grammar或一般
  context-sensitive compatibility solver。当前只保持concrete terminal gaps并依赖
  replay过滤跨slot语义相关性；未学习matching-tag/equality等relation，也不缓存
  candidate的incremental parse result。下一阶段是content-addressed incremental
  parse cache与局部forest invalidation，随后才适合做packed-edge inside/outside
  probability或relation-aware slot compatibility。参考：
  [Cottontail/S&P 2026](https://haoxintu.github.io/files/sp2026-cottontail.pdf)、
  [Lase/OOPSLA 2026](https://zbchen.github.io/files/oopsla2026.pdf)、
  [Arvada/ASE 2021](https://arxiv.org/abs/2108.13340)。当前等级 I/T/E。

## 207. F212：Content-Addressed Incremental Parser Cache Protocol（2026-07-28）

- 研究问题：F201--F211对每个grammar candidate都启动独立parser并重新解析完整输入；
  大部分transaction只改局部span，完整parse会重复处理稳定前后缀。Manager又不能把
  cached acceptance直接当作新candidate的acceptance，否则一次错误invalidation即可
  绕过语法门。F212因此把cache定义为parser性能输入，而非acceptance oracle；
- 协议接入：`SYMCC_PROPOSAL_PARSER`同时包含`{trace}`和`{cache}`时，manager为每次
  invocation写入`symcc-parser-incremental-cache-v1` manifest。Cold invocation仍
  传递明确mode；一个完整trace通过原有exit/verdict/tree/DAG/hash检查后，raw trace和
  candidate input才按SHA-256进入最多256项cache。Parser command完整tuple也进入cache
  identity，换parser实现或参数不会复用旧trace；
- Edit与失效：base由proposal `source_path`内容digest精确命中，不做相似hash猜测。
  Manager计算最长公共prefix/suffix，绑定offset/delete/insert bytes；delete+insert
  超过proposal patch budget即cold fallback。与edit或其两侧16-byte guard相交的node
  全部失效；完全位于公共prefix/suffix的node才映射新span，再逐byte验证base/candidate
  yield一致。最多提供512个reusable nodes和4096个invalidated indexes；
- 可复检receipt：parser仍必须输出完整v1--v4 trace，可选
  `symcc-parser-incremental-reuse-v1`只报告实际采用的`base_index -> candidate_index`。
  Manager复检manifest digest、索引唯一性、offered membership、symbol/state、
  mapped span、epsilon和candidate yield SHA-256。Receipt缺失表示full parse fallback，
  合法；错误digest或虚假node mapping使完整trace fail closed；
- 内容寻址与故障恢复：cache trace以`input_sha.trace.json`原子写入独立目录，state只
  保存path/digest/parser/schema/node count/last-used。每次reuse前重新读取并验证base
  input和trace digest；corrupt/missing entry被删除，本次自动转cold而非拒绝合法
  candidate。LRU-like `(last_used,digest)`确定性驱逐不触碰AFL corpus文件；
- 状态与遥测：proposal state升级v10并兼容v1--v9。每record记录manifest/base digest、
  offered invalidation数、verified reused node数和hit；snapshot汇总cache entries、
  requests、incremental offers、hits、reused与invalidated nodes。Retry前清零本次字段，
  防止旧receipt计数污染新的parser invocation；
- 自动化证据：64-byte v3 parser fixture将middle edit之外的left/right两node复用，
  验证cold首轮、2 reused/2 invalidated hit、state v10重启后再次hit。错误receipt
  digest在exit 0下仍被拒绝为`parser-trace-invalid`；手工破坏base trace后下一轮cold
  fallback仍通过完整parser并撤销坏entry。17项proposal、20项semantic聚焦测试、全量
  336项Python与4项subtest、原生build、2项String lit及Z3/cvc5各6/6通过；
- 科研定位与边界：F212实现的是parser-neutral incremental cache contract与verified
  reuse accounting，不是内置tree-sitter/GLR增量算法；fixture能证明协议真实触发，
  不能证明wall time下降。外部parser必须实际消费manifest才能获得性能收益。下一阶段
  可在该协议上加入packed-edge empirical probability与inside/outside调度，同时以
  parser CPU、reuse ratio、invalidated frontier、trace size和coverage/CPU做消融。
  参考：[Cottontail/S&P 2026](https://haoxintu.github.io/files/sp2026-cottontail.pdf)、
  [Tree-sitter incremental parsing](https://tree-sitter.github.io/tree-sitter/using-parsers/3-advanced-parsing.html)、
  [SPPF transformation model](https://doi.org/10.14279/tuj.eceasst.73.1032)。
  当前等级 I/T/E。

## 208. F213：Accepted-Forest PCFG Posterior and Inside/Outside Scheduling（2026-07-28）

- 研究问题：F209已经保存bounded shared packed DAG，但F206仍把所有已认证production
  视为等价的结构候选。直接按出现次数排序会永久压制稀有新规则；把低频规则剪掉又会
  破坏coverage exploration。F213需要从独立parser已经接受的concrete tree学习稳定
  概率，同时在完整packed alternatives上计算reachability mass，并且只改变预算顺序，
  不能把概率变成语法许可或拒绝条件；
- 可信观测：每个v4/v5 CFG fragment只沿`roots[0]`和alternative 0的完整edge groups
  计数。只有slot恰好为`0..|RHS|-1`、production/instance均已在semantic层重算通过的
  节点才能贡献一次观测。Fragment SHA-256是去重键；最多8192个键，达到上限后停止
  学习新计数而不驱逐旧键，因此已计数fragment不会因窗口轮换被重复计数。Non-primary
  ambiguity只参与后续动态规划，不伪装成实际接受样本；
- Bayesian PCFG：production family由`(parser,LHS,state)`规范化为
  `symcc-parser-production-family-v1`。对同family的shape使用Jeffreys型对称
  Dirichlet先验`alpha=0.5`：
  `P(r|D)=(count(r)+0.5)/(sum count+0.5*|R|)`。未观察但已由可信CFG发现的shape
  因此得到非零概率，而不是错误的0.5默认值；原始计数与fragment选择证据持久化，
  posterior始终重算；
- Canonical hyperedge：parser的alternative ordinal只在一棵forest内部有意义。
  F213把ordinal绑定到concrete ECT instance用于观测，却按
  `(node,production,ordered child IDs)`形成v2 probability hyperedge用于全局推断。
  这避免同一production在不同样本中从主分支变为备选分支时被后一次覆盖，也会合并
  仅ordinal不同但child derivation相同的重复边；
- Inside/outside：对forward DAG逆拓扑计算
  `inside(v)=sum_a P(rule_a)*product_c inside(c)`，再从显式root membership正拓扑传播
  outside contribution。Root身份单独持久化，因为内容寻址节点可能在一棵forest是根、
  在另一棵是内部节点；仅从全局union的incoming edges推断会漏失root mass。
  `symcc-parser-packed-root-evidence-v1`把accepted fragment digest、parser和root node
  绑定为规范ID；v15只从复检证据恢复，v14迁移才使用union frontier并标记
  `legacy-frontier`。所有derived mass限制在`[0,1]`并在edge/node/production驱逐或
  重启后重算，不信任状态文件中的派生表；
- 九维调度：F206的七维Pareto增加PCFG posterior likelihood与information/reachability
  两维。后者把`1/sqrt(1+count)`与outside influence组合，既保留高概率结构的有效预算，
  又给低样本但可从root到达的shape探索机会。概率只进入non-dominated ranking；任何
  候选仍必须经过target replay、独立parser acceptance和AFL novelty，低概率永不被
  soundness pruning；
- 生命周期与状态：semantic state升级v15并兼容v1--v14，保存bounded family/count/
  observation/root evidence。加载时重算family ID，只接受仍有已验证production的
  shape、正整数饱和计数和不超过计数的observation tally；负数/伪造shape被忽略。
  CFG驱逐会裁剪无活动family/shape但保留空fragment去重标记，长期内存仍受4096
  production与8192 observation预算约束；
- 自动化证据：真实v3 parser subprocess对`L0/L1/L2/R0`产生同一root的左右两条
  alternatives，并让接受分支在每个trace中成为alternative 0。3:1观测在
  `alpha=0.5`下精确得到0.7/0.3；4棵forest的root inside均为1，左右hyperedge
  outside分别为0.7/0.3。测试还覆盖未观察shape的0.125平滑、九维Pareto、重复fragment
  幂等、v15恢复、负计数/root-evidence篡改拒绝、v14迁移、root恢复和edge驱逐后的
  父/叶mass同步撤销。
  本轮静态审查还修复F210 nullable刷新中一个未定义`instance`变量；新增
  proof-backed nullable shape与concrete epsilon instance同时存在的组合回归，避免
  两条独立通过的路径在合并时才抛出`NameError`。21项semantic聚焦测试、全量337项
  Python与4项subtest通过；
- 科研定位与边界：这是accepted concrete-tree的监督计数，不是对未选择ambiguous
  derivation做inside-outside EM；当前family只条件化parser/LHS/state，也不能表达
  sibling relation、matching tag、跨字段相等或长程上下文。2026年的ExplainFuzz已
  展示概率电路相对普通PCFG捕获上下文依赖的潜力，因此下一阶段应先实现
  relation-aware slot compatibility，再研究conditional/hierarchical probability
  model和native incremental parser wall-time消融。参考：
  [Lari--Young inside-outside](https://www.cs.jhu.edu/~jason/600.665/lari-young.pdf)、
  [Feature Forest Models](https://aclanthology.org/anthology-files/pdf/J/J08/J08-1002.pdf)、
  [EvoGFuzz](https://arxiv.org/abs/2008.01150)、
  [ExplainFuzz 2026](https://arxiv.org/abs/2604.06559)。当前等级 I/T/E。

## 209. F214：Relation-Aware Synchronized Slots with Exploration Reserve（2026-07-28）

- 研究问题：F211能原子替换多个nonterminal，却把同shape的child yield做笛卡尔组合。
  对重复字段、长度头和成对标识符，这会把预算大量花在明显违背accepted-parent
  关系的组合上；反过来，若把少量观测学到的关系当成硬grammar constraint，又会永久
  排除能带来新coverage的反例。F214因此把slot relation定义为可撤销的调度证据，
  只重排和限额，不参与语法许可、soundness pruning或最终接受判断；
- 观测与关系族：系统只使用F211已经逐byte重建成功的alternative-0 parent。
  同一parent production shape至少有两个独立accepted concrete instance，且当前全部
  观测都满足时，才为slot pair保留一个最强关系。固定强度顺序是byte equality、
  canonical decimal integer equality、左整数等于右byte length、右整数等于左byte
  length、byte-length equality。十进制只接受1--20个ASCII digit并限制到uint64；
  因此前导零相等可区别于byte equality，域外数字不会静默截断；
- 可撤销证据：relation ID规范绑定parser、parent shape、ordered slot pair和kind，
  保存support、零violation以及最多64个parent-instance witness。所有relation和
  `parent_shape -> relation`索引在每次accepted graph变化、驱逐或重启时从已复检
  instance重建；一条新accepted反例会使旧relation降级到下一个仍被全部观测支持的
  kind，或完全撤销。状态文件中的relation/support/transaction仅用于审计，不能作为
  恢复权限；
- Relation-aware组合：每个parent仍只改变2--4个slot，每slot最多两个canonical
  accepted alternative；最多枚举256个candidate。排序首先最大化满足关系的比例和
  数量，再考虑较少变化槽、result bytes与instance identity。最多输出四个transaction：
  前三个取高分组合；若存在未满足至少一条关系的剩余组合，显式保留一个最低分
  exploration reserve。这样关系能集中预算，却不能把反例空间剪空；
- Proof-carrying transaction：transaction升级为
  `symcc-parser-sync-transaction-v2`，canonical identity额外绑定每条relation ID及
  satisfied bit，并记录`relation_score/matches/total/exploration`。候选执行仍要求
  parent shape、source parent bytes和完整slot assignment匹配，随后经过target replay、
  独立parser acceptance与AFL novelty；relation本身不能绕过任何验证门；
- 精确edge provenance：审查发现全局内容寻址node可能汇集不同forest的edge。
  Semantic schema v16因此让每个packed ECT instance保存其本地production alternative的
  ordered `child_edge_ids`。加载时要求该列表与RHS形成slot `0..arity-1`完整双射，
  edge的parent/alternative/child symbol/state全部匹配；缺边、乱序、跨parent引用均
  fail closed。Edge驱逐会先撤销显式引用它的instance，即使全局图中仍存在同
  parent-child的parallel edge。V15迁移可从唯一的旧alternative edge set保守推导，
  推导不完整或歧义则丢弃instance；
- 有界性与遥测：relation总量限制4096，transaction总量限制4096，单parent组合预算
  256。Grammar snapshot增加relation数、累计support、kind数、relation-conforming和
  exploration transaction数；保存文件输出relation与parent索引以便科研审计，但
  restore只采用重算结果；
- 自动化证据：真实parser subprocess依次接受`A|A|tail`、`BB|BB|z`和
  `CCC|CCC|qq`，学习support=3的slot0/1 byte equality。源parent精确保留三个
  ordered child edge；四个transaction中三个保持相等，一个exploration reserve故意
  不相等。测试覆盖v16重启、伪造relation kind/score不被信任、v15无
  `child_edge_ids`迁移、edge binding乱序/缺失拒绝，以及`D|EEEE|www`反例到达后
  relation撤销。22项semantic聚焦测试、全量338项Python与4项subtest、原生build、
  2项String lit及Z3/cvc5各6/6通过；
- 科研定位与边界：这是零反例的有限关系假设器，不是attribute grammar、SMT-backed
  semantic grammar或概率电路。当前不表达checksum、tag/value枚举映射、算术仿射关系、
  多slot联合relation和长程祖先依赖；support也尚未做time decay或Bayesian置信校准。
  下一阶段应先把同一可信边界推广到conditional/hierarchical model，并以
  relation precision、valid-candidate/CPU、coverage/CPU和exploration-reserve
  contribution做消融，再决定是否引入ExplainFuzz式probabilistic circuit。参考：
  [Lase/OOPSLA 2026](https://zbchen.github.io/files/oopsla2026.pdf)、
  [Cottontail/S&P 2026](https://haoxintu.github.io/files/sp2026-cottontail.pdf)、
  [ExplainFuzz 2026](https://arxiv.org/abs/2604.06559)。当前等级 I/T/E。

## 210. F215：Hierarchical Context-Conditioned PCFG and Context-State Forest Mass（2026-07-28）

- 研究问题：F213的`(parser,LHS,state)` family posterior无法区分同一nonterminal在
  不同parent production下的选择偏好；F214能识别少量pairwise byte/length relation，
  但不能给production choice分配条件概率。直接为每个上下文训练独立分布会在online
  小样本下过拟合，完整ExplainFuzz概率电路又需要给定CFG、离线训练、可分解结构和
  单独的条件查询接口。F215先落地一个可解释、bounded、可迁移的层次化中间层；
- 条件上下文：每个accepted concrete-tree node产生
  `symcc-parser-production-context-v1`，规范绑定parser、child family、
  parent production shape和RHS slot；root使用空parent与slot -1。上下文不依赖
  forest-local alternative ordinal，因此同一parent shape跨样本可聚合，而不同parent
  grammar structure不会混淆。最多保留8192个有观测context；
- 原子可信观测：F213计数路径已重构为root-0/alternative-0 BFS。每个node必须存在
  primary concrete instance，其local `child_edge_ids`必须与完整slot sequence一致；
  selected tree中出现重复primary parent、缺instance、缺slot或edge mismatch时，整个
  fragment不更新任何全局或条件count，只留下空SHA-256去重记录。全局与context
  selections由同一次闭合遍历原子产生，避免“半棵accepted tree”污染posterior；
- Hierarchical posterior：令F213全局posterior为`P0(r|family)`。Root context继续直接
  使用`P0`；非root context使用强度`beta=2.0`的经验Bayes收缩：
  `P(r|c,D)=(n(c,r)+beta*P0(r))/(N(c)+beta)`。无context观测时严格退化到`P0`；
  少样本偏好不会立刻变成0/1，known-but-unseen shape始终保留非零质量。该概率只用于
  调度，既不改变CFG membership，也不批准mutation；
- Context-state inside/outside：共享packed node在不同parent下可能需要不同posterior，
  因此F215不能复用单一`inside(node)`。系统建立最多32768个
  `(packed node, production context)`状态，逆拓扑计算
  `inside(v,c)=sum_r P(r|c)*product_i inside(child_i,(r,i))`，再从每个显式root的
  root-context正拓扑传播outside。每条
  `symcc-parser-context-alternative-v1`绑定context state与F213 canonical
  hyperedge，记录posterior/inside/outside；所有表在重启和graph驱逐后重算；
- 调度集成：F206/F213仍保持九维Pareto。Production likelihood与
  information/reachability目标同时查看无条件和context-state artifact，取可验证图中
  最强的条件信号；这对不同parent下的稀有/常见shape更敏感，但不增加hard-pruning
  维度。无条件PCFG、relation-disabled transaction和普通grammar proposal仍是回退；
- 状态与篡改边界：semantic state升级v17并兼容v1--v16。持久化context identity、
  正整数count和每fragment selections，不持久化派生mass。加载时重算family/context
  identity，检查parent shape/slot确实能产生child family，并要求context observation
  digest属于同一已接受PCFG observation集合。Count与fragment selections通过原子
  固定点对账：任一坏selection使整个fragment退出，受影响count再级联撤销，首次加载
  即达到稳定闭包；保存后再次加载不继续变化。V16迁移没有context evidence时使用
  `P0`，不从全局graph伪造历史条件count；
- 遥测：snapshot增加context数、context observation fragment数、selected production
  总数、context inside/outside state数、context alternative数和训练证据上的mean
  NLL bits。后者是在线诊断量，不是held-out perplexity或研究结论；
- 自动化证据：真实parser subprocess让两个record parent shapes共享
  `value -> x|y` family。八个accepted fragments使全局x/y为4:4，同时parent A为3:1、
  parent B为1:3；`beta=2`精确得到0.5全局与2/3、1/3条件posterior，contextual
  hyperedge同步采用该概率。测试覆盖duplicate幂等、v17恢复、伪造count的原子固定点
  拒绝及二次重启稳定、伪造context slot/ID拒绝，以及v16无条件0.5 fallback。
  23项semantic与5项packed/parser交叉测试、全量339项Python与4项subtest、
  原生build、2项String lit及Z3/cvc5各6/6通过；
- 科研定位与边界：F215是一级parent-conditioned hierarchical PCFG，不是ExplainFuzz
  的sum/product probabilistic circuit，也不是Goblin式带任意semantic constraint的
  input-generation language。它不建模grandparent/long-range dependency、多个slot
  联合条件、checksum、symbol table/type environment或用户查询条件；当前NLL使用训练
  证据，尚未做prequential/held-out校准。下一阶段应实现time-ordered prequential
  evaluation和bounded multi-context feature circuit，保留`P0`/pairwise relation/
  hierarchical PCFG三组消融，再决定是否接入完整概率电路。参考：
  [ExplainFuzz 2026](https://arxiv.org/abs/2604.06559)、
  [Lase/OOPSLA 2026](https://zbchen.github.io/files/oopsla2026.pdf)、
  [Goblin/ICSE 2026](https://conf.researchr.org/details/icse-2026/icse-2026-research-track/228/Parse-this-Summoning-Context-Sensitive-Inputs-with-Goblin)。
  当前等级 I/T/E。

## 211. F216：Prequential Context Calibration and Drift-Safe Global Fallback（2026-07-28）

- 研究问题：F215的`pcfg_context_mean_nll_bits`用最终count评价产生这些count的训练
  样本，必然存在look-ahead optimism；它能诊断拟合，却不能证明parent-conditioned
  posterior比F213全局PCFG预测得更好。若无条件启用context posterior，偶然的3:1小
  样本或分布漂移会长期误导packed-forest调度。F216把每次accepted selection改成
  test-then-train的prequential event，并以相对全局基线的历史proper log loss门控；
- Update-before receipt：在同一fragment的任何全局/context count增加之前，每个
  selected node生成`symcc-parser-pcfg-prequential-v1`。Canonical receipt绑定fragment、
  node、context/family、parent shape/slot、selected shape，以及预测所需的充分统计：
  global selected/total before、当时known-shape数、context selected/total before。
  Probability不持久化，而由这些整数和F213 `alpha=0.5`、F215 `beta=2`重算；同一
  fragment内的多个selection采用batch-before-update语义；
- 有界证据：最多保存32768个receipt，达到上限后饱和停止，不驱逐旧event或把同一
  fragment重复计入。Context/tree count仍按原8192 fragment预算继续学习，因此校准
  窗口饱和只冻结gate evidence，不阻断grammar learning；
- Prequential聚合：按receipt ID确定性累加每个context的global/context NLL bits、
  observation数、context probability高于global的事件数和
  `gain=global NLL-context NLL`。固定顺序消除重启时浮点加法次序差异。Root
  context的两个预测相同，不会凭空产生gain；
- 校准门：至少两个event且累计gain为正时，
  `w=min(1,n/8)*min(1,max(0,gain)/2)`；context-state forest实际使用
  `P_eff=P0+w*(P_context-P0)`，artifact同时保留raw posterior与weight。
  因此少量正证据只渐进偏离全局，零证据、负gain或后续drift自动令`w=0`并恢复
  `P0`。这只改变九维Pareto的概率/可达性输入，不改变CFG、relation或验证门；
- 状态与失败闭合：semantic state升级v18并兼容v1--v17。加载receipt时要求canonical
  ID、唯一`(fragment,node,context,shape)`event、有效context selection、匹配的
  family/parent/slot、有限整数范围，以及所有before-count严格早于最终已复检count。
  无效receipt被单独丢弃，PCFG/context counts不受影响；derived calibration统计和
  context-state mass全量重算。V17拥有context counts但没有update-before evidence，
  故raw posterior仍可审计，实际调度严格回退全局；
- 遥测：snapshot增加receipt数/容量/饱和、prequential observation数、global与
  context累计NLL、context gain、逐事件wins、非零校准context数和mean context
  weight。这些量可直接支持F213/F215/F216等CPU消融，且不混同训练内NLL；
- 自动化证据：F215八样本真实parser fixture产生40个node-selection receipts；
  receipt/count在v18重启后逐项相同，确定性校准统计完全相同。单receipt字段篡改只
  撤销该校准证据而保留context counts；v17迁移保留2/3与1/3 raw posterior但所有
  effective value选择回到0.5全局。独立drift测试先用四个context优胜event得到非零
  weight和`P_eff>P0`，再加入两个global正确/context错误event，使累计gain为负、
  weight精确归零且`P_eff=P0`。24项semantic与5项packed/parser交叉测试、静态检查
  通过；全量340项Python与4项subtest、原生build、2项String lit及Z3/cvc5各6/6
  通过；
- 科研定位与边界：这是prequential model-selection gate，不是完整online Bayesian
  change-point detector。当前receipt预算饱和后不滚动，gain对所有历史等权，没有
  exponential forgetting、ADWIN/CUSUM、per-target calibration或置信区间；canonical
  digest能发现普通损坏，但不是对恶意重写状态的签名。状态最多影响调度，永远不能
  授权candidate。下一步应实现bounded recency epochs和time-decayed regret，并在
  held-out/confirmatory corpus报告NLL、calibration、fallback rate、
  valid-candidate/CPU和coverage-AUC。参考：
  [Dawid prequential analysis](https://doi.org/10.1111/j.2517-6161.1984.tb01270.x)、
  [ExplainFuzz 2026](https://arxiv.org/abs/2604.06559)。
  当前等级 I/T/E。

## 212. F217：Recency-Window Calibration, Stale Detection and Recovery（2026-07-28）

- 研究问题：F216使用全历史累计regret。一个早期长期有效的context即使最近失准，
  也可能需要很多反例才把累计gain拉回零；反之，早期不稳定但新阶段已可靠的context
  可能长期被旧loss压制。Receipt容量饱和或近期没有该context时，继续沿用旧weight也
  不符合out-of-distribution保守回退。F217增加显式时间证据与fixed recency gate；
- 有序receipt：新`symcc-parser-pcfg-prequential-v2`在F216充分统计之外绑定
  `observation_index`，等于该fragment进入accepted PCFG observation stream前的长度。
  同一fragment全部node receipts共享index，不同fragment不能共享index。Index只给
  calibration排序/窗口定位，不参与grammar count或candidate authorization；
- 最近窗口：全局以最新accepted fragment位置推进16-fragment窗口，而非只看最后一张
  receipt；因此tree evidence为空、context未出现或receipt预算已经饱和时，时间仍会
  前进。每个context分别累计窗口内global/context NLL、gain、wins与selection数。
  一旦存在v2顺序证据，weight完全使用recent statistics；少于两个recent selection、
  recent gain非正或窗口内零event均令weight为0。后者额外标记`stale=1`；
- 漂移恢复：旧的positive cumulative gain不会覆盖recent negative gain；同样，旧的
  cumulative loss也不会阻止足够的新positive events重新启用context。F216的凸组合
  公式不变，所以disable/recovery连续落在`P0..P_context`之间，raw posterior与count
  均不因gate切换而丢失；
- 混合迁移：semantic state升级v19并兼容v1--v18。V18 v1 receipt没有时间序号，继续
  采用F216累计模式；加载v18后产生的新v2 receipt可与旧v1共存，该context一旦出现
  v2 evidence就进入recent mode。V19加载检查index范围、每fragment单index和
  index-to-fragment单射，再用v1/v2各自schema重算receipt ID；删除或修改index不能把
  v2静默降级成v1；
- 遥测：snapshot增加固定窗口长度、recency-mode context数、stale context数、
  recent selection数、recent global/context NLL、recent gain和recent wins。
  累计F216指标继续保留，便于量化“长期模型质量”与“当前调度gate”的差异；
- 自动化证据：F215 integration把40个v2 receipts在v19重启后逐项恢复；把它们按v1
  schema重新签名并降级为v18后，全部receipt保留但recency mode为0。独立阶段测试先
  用index 0--7建立positive recent gain，再在24--25注入recent adverse evidence使
  weight归零；其他context推进到40--41后原context成为stale；42--49的新positive
  evidence又恢复非零weight和`P_eff>P0`。25项semantic与5项packed/parser交叉测试、
  静态检查通过；全量341项Python与4项subtest、原生build、2项String lit及
  Z3/cvc5各6/6通过；
- 科研定位与边界：这是确定性的fixed sliding-window policy，不是ADWIN、CUSUM或
  Bayesian online change-point detection。16是工程预算，不具有自适应最优性或
  false-positive/negative bound；selection密集的context在同一fragment可贡献多个
  event。固定窗口便于可复现消融，却可能在gradual drift和稀疏context间产生
  bias。下一步应以receipt log-loss difference stream实现bounded adaptive-window
  certificate，并对fixed-16、cumulative、adaptive三者报告detection delay、false
  reset、fallback rate和coverage/CPU。参考：
  [ADWIN/SDM 2007](https://doi.org/10.1137/1.9781611972771.42)、
  [The Window Dilemma 2026](https://arxiv.org/abs/2602.06456)。
  当前等级 I/T/E。

## 213. F218：Bounded Adaptive Log-Loss Window and Verifiable Cut Certificate（2026-07-28）

- 研究问题：F217固定16-fragment窗口能快速回退，却把稀疏context与密集context置于
  同一时间尺度，也无法说明为什么在某一点丢弃历史。F218把v2 receipt流解释为
  `d=log2(P_context/P_global)`的prequential相对收益序列，在有界内存内在线重放
  change detection，并为每次截断输出可独立复算的阈值证书；
- 独立样本单位：同一accepted fragment可能包含多个同context node，直接把每张
  receipt当独立样本会伪造样本量。实现先按`observation_index`聚合，并以该fragment
  内receipt的平均收益作为一个检测样本。检测值裁剪到`[-4,4]` bits，最多重放最近
  64个context-bearing fragments，左右段各至少8个fragment；
- 统计门：对当前窗口的全部合法切点同时比较左右裁剪均值。若本轮有`m`个切点，
  使用`delta'=0.05/m`和有界两样本Hoeffding阈值
  `epsilon=4*sqrt(2*ln(2/delta')*(1/n_left+1/n_right))`。只接受
  `abs(mean_left-mean_right)>epsilon`，选择正margin最大的切点并丢弃左段；每个新
  fragment到达后重复，所以早期已确认的漂移不会被后续相反阶段在最终窗口中抵消；
- 调度统计：切点检测用裁剪收益，实际gate则在最后保留后缀上分别计算每fragment
  平均的未裁剪global/context NLL，再令
  `adaptive_gain=adaptive_global_nll-adaptive_context_nll`。F216的样本/gain凸混合
  公式保持不变，但样本量现在是独立fragment数而不是node receipt数。F217最近16个
  fragment的统计继续作为可消融基线，并且近期完全无该context时仍强制`stale`
  回退全局posterior；
- Proof-carrying cut：`symcc-parser-pcfg-adaptive-cut-v1`绑定context、窗口起止、
  retained suffix首index、两侧fragment/receipt数、均值、difference、epsilon、
  margin、clip bound、delta/多重检验数及有序receipt-ID摘要。Certificate ID对全部
  字段canonical hash。`verify_pcfg_adaptive_certificate`从当前canonical receipts
  重新计算概率、聚合、阈值、摘要与ID，任何字段篡改均失败；
- 状态与可信边界：semantic state升级v20并兼容v1--v19。Receipt仍是唯一校准证据；
  adaptive statistics和certificate均为derived audit artifact。状态文件写出证书便于
  实验归档，但恢复时完全忽略持久化副本并从已复检receipt重算，证书永远不能授权
  grammar candidate。最大64-fragment窗口、最小8+8切分和最多32768 receipts共同
  给出确定的CPU/内存上界；
- 遥测：snapshot增加adaptive最大/最小窗口、clip/delta、context/certificate数、
  retained fragment/receipt数、截断fragment数、后缀global/context NLL、gain和
  wins；累计F216与fixed-16 F217指标同时保留，支持三策略等预算消融；
- 自动化证据：平稳16-fragment强positive流保持零切点和非零weight；随后16个强
  adverse fragment生成有效证书、截断旧段并把weight归零；再加入16个positive
  fragment生成第二张证书并恢复weight。测试要求两张证书均可复算、阈值小于观测
  difference，篡改epsilon立即失败，并检查adaptive遥测。26项semantic测试与静态
  检查通过；全量342项Python与4项subtest、原生build、2项String lit及Z3/cvc5
  各6/6通过；
- 科研定位与边界：这是ADWIN-inspired bounded detector，不是完整ADWIN。Hoeffding
  界控制单次扫描内所有候选切点，在线反复扫描尚未使用anytime-valid alpha spending，
  因而不能声称无限时间horizon的全局5% false-alarm保证；clipping也只让检测统计
  有界，不证明原始log-loss分布无偏。后续实验必须报告fixed-16/cumulative/adaptive
  的false reset、detection delay、retained-window长度、fallback率、
  valid-candidate/CPU和coverage-AUC，并把adaptive gate作为multi-context
  probabilistic circuit的校准前置条件。参考：
  [ADWIN/SDM 2007](https://doi.org/10.1137/1.9781611972771.42)、
  [The Window Dilemma 2026](https://arxiv.org/abs/2602.06456)、
  [Dawid prequential analysis](https://doi.org/10.1111/j.2517-6161.1984.tb01270.x)。
  当前等级 I/T/E。

## 214. F219：Verifier-Gated Grandparent Multi-Context Probabilistic Circuit（2026-07-28）

- 研究问题：F215只按immediate parent shape/slot条件化。若相同parent production
  出现在两种外层record/document结构中，一级context会把两种相反的value分布合并，
  即使accepted tree已经提供无歧义的grandparent path。F219增加一个深度2 expert，
  并把global、parent、grandparent组合为有界、可校准的sum/product circuit；
- Context identity：`symcc-parser-production-circuit-context-v1`绑定parser、child
  family、parent shape/slot与grandparent shape/slot。它不含绝对offset或concrete
  bytes；只有完整alternative-0 primary tree的本地edge/instance闭包才能产生
  observation。相同shared packed node经不同grandparent到达时使用不同context-state
  v2 identity，避免在DAG上错误合并；
- Hierarchical posterior：parent raw posterior仍按F215以`beta=2`收缩到global。
  Grandparent raw posterior再以同一`beta=2`收缩到parent raw：
  `P2=(n2+2*P1)/(N2+2)`。因此无二级证据时严格等于P1，所有shape上的P2仍归一化；
- 双基线prequential gate：每个二级selection在任何count更新前生成
  `symcc-parser-pcfg-circuit-prequential-v1`，绑定global、parent与circuit三层
  selected/total充分统计、known-shape数、完整context path和observation index。
  Circuit event的robust gain定义为
  `min(NLL_global-NLL_circuit,NLL_parent-NLL_circuit)`；只有同时胜过global和parent
  才能获得正weight，防止更细模型仅利用parent已经解释的收益；
- Adaptive calibration：同fragment receipt先聚合为一个检测样本，robust gain裁剪
  到`[-4,4]` bits，并复用F218的64-fragment、最小8+8 Hoeffding detector。切点生成
  独立`symcc-parser-pcfg-circuit-cut-v1`，验证函数从circuit receipts重算三种概率、
  robust gain、阈值、证据摘要和certificate ID。Fixed-16无近期evidence仍触发
  stale fallback；
- Sum/product推断：context-state现在携带parent与可选circuit context。每条packed
  alternative的mass仍为`posterior * product(child inside)`，同state的alternative
  继续求和。若二级expert通过校准，
  `P_eff2=(1-w2)*P_eff1+w2*P2`；否则精确退化为F218的parent effective posterior。
  这是归一化凸组合，不做逐shape独立截断。Artifact同时公开parent raw、circuit raw、
  两层weight与最终posterior；
- 状态与失败闭合：semantic state升级v21并兼容v1--v20。分别持久化circuit context、
  count、fragment witness与update-before receipt；加载时重算context ID、验证两级
  production/RHS路径、对count和fragment selection做固定点对账，并要求receipt匹配
  parent context、最终三层count及fragment-index bijection。Derived circuit mass、
  calibration table和certificate不作为恢复权威。V20没有二级证据，严格保留parent
  模型；
- 有界性：最多8192个二级context、32768张circuit receipt，并共享32768个packed
  context-state上限。Receipt预算饱和只关闭新增二级校准证据；grammar candidate仍需
  concrete target replay、独立parser acceptance与AFL novelty；
- 遥测：snapshot增加circuit context/fragment/selection/receipt数、训练诊断NLL、
  校准context/平均weight/stale数、adaptive certificate/retained/truncated数，以及
  adaptive global/parent/circuit NLL和robust gain；
- 自动化证据：32个真实parser accepted fragments让唯一parent value context保持
  `x:y=16:16`，两个grandparent path分别得到`14:2`和`2:14`，P2为`5/6`与`1/6`，
  且两边weight均非零、packed artifact相对0.5向相反方向移动。V21重启逐项恢复
  counts/receipts/calibration；伪增count被固定点撤销，单receipt篡改只撤销该校准
  event，V20迁移不伪造circuit。独立48-event测试验证positive/adverse/recovery、
  双基线负gain、两张cut certificate与epsilon篡改拒绝。28项semantic与静态检查
  通过；
- 科研定位与边界：这是可解释的深度2 hierarchical mixture circuit，不是完整
  ExplainFuzz。尚未表达ordered sibling joint factor、任意ancestor depth、symbol
  table、checksum、query predicate或自动结构学习；per-scan Hoeffding界仍不是
  anytime-valid。下一步应实现有界sibling autoregressive factor，并用held-out
  prequential NLL、circuit sparsity、valid-candidate/CPU与coverage-AUC消融
  global/parent/grandparent/sibling各层。参考：
  [ExplainFuzz 2026](https://arxiv.org/abs/2604.06559)、
  [Lari--Young Inside-Outside](https://www.cs.jhu.edu/~jason/600.665/lari-young.pdf)、
  [ADWIN/SDM 2007](https://doi.org/10.1137/1.9781611972771.42)。
  28项semantic与静态检查通过；全量344项Python与4项subtest、原生build、2项
  String lit及Z3/cvc5各6/6通过。当前等级 I/T/E。

## 215. F220：Bounded Ordered-Sibling Autoregressive PCFG Factor（2026-07-28）

- 研究问题：F219的global、parent与grandparent expert都只描述一个node的祖先路径。
  对同一parent production内的有序字段，后一个child常由前一个child的产生式决定，
  例如tag选择不同value grammar，而parent/ancestor shape保持不变。把child inside
  独立相乘会把这种局部联合分布错误分解。F220增加一阶ordered-sibling factor，并
  保持无校准证据时严格退回F219；
- Context identity：`symcc-parser-production-sibling-context-v1`绑定parser、当前
  child family、parent production shape、当前slot和紧邻左兄弟的selected production
  shape。只从完整accepted alternative-0 primary tree提取；slot 0没有兄弟expert。
  Context不保存concrete bytes、offset或parser局部alternative ordinal，最多8192个
  sibling contexts；
- 层次posterior：兄弟raw posterior以`beta=2`收缩到当前可用的最细祖先raw先验。
  有grandparent path时
  `Ps=(ns+2*P2)/(Ns+2)`，否则使用
  `Ps=(ns+2*P1)/(Ns+2)`。最终调度分布为
  `P_eff_s=(1-ws)*P_eff_ancestor+ws*Ps`。由于两个分量分别归一化且`ws in [0,1]`，
  mixture在shape维保持归一化；无样本、负收益、stale或legacy状态令`ws=0`；
- 三基线prequential gate：每次selection在global、parent、circuit和sibling count
  全部更新前产生`symcc-parser-pcfg-sibling-prequential-v1`。Receipt绑定完整
  sibling/parent/optional-circuit path、四层selected/total统计、known-shape数与
  accepted-fragment index。Robust gain定义为
  `min(NLL_global-NLL_sibling, NLL_parent-NLL_sibling,
  NLL_circuit-NLL_sibling)`；没有circuit时第三个baseline精确等于parent。因此
  sibling expert只有在提供所有已有层之外的新信息时才获得正weight；
- 漂移与证书：同fragment的多个receipt先求平均，robust gain裁剪到`[-4,4]` bits，
  复用64-fragment、最小8+8的bounded Hoeffding detector。切点产生独立
  `symcc-parser-pcfg-sibling-cut-v1`，`verify_pcfg_sibling_certificate`从canonical
  receipts重算四种prequential概率、切点、阈值、receipt摘要和certificate ID。
  Persisted certificate仍仅是审计输出，不是恢复权威；
- 精确inside消息：packed context-state升级v3并携带可选sibling context。对一个有
  `k`个children的parent alternative，前向消息不是
  `product_i inside(child_i)`，而是按slot递推
  `F_{i+1}(s_i)=sum_{s_{i-1}} F_i(s_{i-1})
  sum_{a_i:shape(a_i)=s_i} inside(a_i|s_{i-1})`。
  Parent artifact mass为`posterior(parent)*sum_s F_k(s)`。每个factor step保存
  previous shape、selected shape、child context-state、child artifact与inside
  mass，形成可审计的规范化一阶链；
- 精确outside消息：对每个parent artifact从右向左计算suffix message。Child
  artifact的外部系数为
  `outside(parent artifact)*posterior(parent)*F_i(previous)*B_i(selected)`，
  明确排除该child自身inside mass。这样右侧后缀依赖不会被一个共享child-state标量
  错误折叠；artifact级outside是权威影响量，state outside只作为有界聚合遥测。
  计算复杂度对实际factor transitions线性，且共享32768个context-state硬上限；
- 状态与失败闭合：semantic state升级v22并兼容v1--v21。分别持久化sibling context、
  count、fragment witness和最多32768张update-before receipt。加载重算context ID，
  验证parent RHS当前slot及左slot production路径，对count/witness执行固定点对账，
  并要求receipt匹配parent、optional circuit、最终四层count和所有共享
  fragment-index双射。Derived weight、certificate、inside/outside与factor message
  全部从已复检证据重算。V21即使文件含未知sibling字段也不会猜测历史兄弟证据；
- 遥测：snapshot增加sibling context/fragment/selection/receipt数与容量、平均
  prequential sibling NLL、校准context/平均weight/stale数、adaptive certificate、
  retained/truncated fragments、四层adaptive NLL、robust gain，以及实际factor
  step/transition数；
- 自动化证据：32个真实parser accepted fragments保持value的global、parent和唯一
  grandparent circuit均为`x:y=16:16`；左tag node的两个内部production shape分别让
  sibling context得到`14:2`与`2:14`，raw posterior为`5/6`与`1/6`且两边weight均
  非零。测试逐步重算两slot前向质量，检查artifact posterior归一化与outside边界。
  V22重启逐项恢复counts/receipts/calibration；伪增count由固定点撤销，单receipt
  篡改只撤销该event，V21严格忽略sibling层。独立48-event测试验证相对三个baseline
  的positive/adverse/recovery、两张cut certificate和epsilon篡改拒绝；
- 验证结果：30项semantic测试通过；全量346项Python与4项subtest通过；
  `cmake --build build -j2`通过；2项String lit通过；真实Z3与cvc5 1.1.2均为6/6
  SAT且concrete-verified；Ruff、`py_compile`与差异空白检查通过；
- 科研定位与边界：这是有界一阶、左到右的autoregressive grammar factor，不是完整
  ExplainFuzz结构学习，也不表达非相邻/双向兄弟、任意ancestor depth、symbol table、
  checksum、semantic predicate或跨parent long-range dependency。Outside消息对当前
  有界packed forest精确，但容量饱和仍可能关闭更细context；Hoeffding界仍仅覆盖
  单次扫描。下一步应做global/parent/grandparent/sibling等预算消融，报告held-out
  prequential NLL、factor sparsity、detection delay、valid-candidate/CPU与
  coverage-AUC，再决定是否引入learned factor graph或symbol-table/checksum expert。
  参考：[ExplainFuzz 2026](https://arxiv.org/abs/2604.06559)、
  [Lari--Young Inside-Outside](https://www.cs.jhu.edu/~jason/600.665/lari-young.pdf)、
  [Dawid prequential analysis](https://doi.org/10.1111/j.2517-6161.1984.tb01270.x)、
  [ADWIN/SDM 2007](https://doi.org/10.1137/1.9781611972771.42)。
  当前等级 I/T/E。

## 216. F221：Portable SMT-LIB Signed-Integer Schedule Evidence（2026-07-28）

- 触发条件：安装cvc5 1.1.2后，F58 research-evidence的SC/TSO/RA公式在Z3中通过，
  但cvc5解析阶段拒绝reads-from初始写sentinel `-1`。SMT-LIB 2负整数不是原子
  numeral，规范形式是`(- 1)`；原实现依赖了Z3的宽松词法扩展，导致“后端可执行”
  被计入capacity后又以parse error使整个evidence manifest失效；
- 实现：`schedule_exploration.py`新增唯一整数常量序列化函数。SC/TSO read-from
  domain/implication、RA read-from/coherence、RMW初始源、seq_cst初始源和
  Query-IR byte-value bridge全部通过该函数输出负整数；非负event index保持原形式。
  `research_evidence.py`的store-buffering附加outcome也改用规范`(- 1)`，模型读取仍
  解析为Python整数`-1`，不改变RF语义或artifact schema；
- 失败闭合：这不是把cvc5 error从available backend集合中隐藏。Validator仍要求每个
  已安装backend返回预期SAT/UNSAT；修复目标是让同一QF_LIA obligation在不同solver
  family中可解析并保持oracle一致。若以后出现真正的语义分歧，evidence仍失败；
- 自动化证据：SC/TSO/RA base SMT逐项断言包含`(- 1)`且不含裸` -1`。真实cvc5对
  store-buffering SC返回UNSAT，对TSO/RA返回SAT；research-evidence的三项backend
  case同时报告Z3与cvc5两个family且expected oracle通过。Schedule与evidence定向
  63项通过；全量346项Python与4项subtest通过；
- 科研边界：该修复只建立当前schedule QF_LIA整数词法的跨solver可移植性，不代表
  完整SMT-LIB conformance，也不证明Z3/cvc5在更大公式上的独立实现一致性。后续若
  扩展Real、FP、quantifier或solver-specific option，应为各sort建立统一printer并
  将parse/status/stderr纳入版本化evidence。当前等级 I/T/E。

## 217. F222：Fail-Closed MPI Grammar-Hole QueryStore Wiring（2026-07-28）

- 缺陷：MPI master构造`SemanticProposalGenerator`时引用不存在的
  `query_store_dir`和`async_query_enabled`。只要启用semantic proposals就可能在
  初始化阶段触发`NameError`；该路径之前没有被全目录Ruff门禁捕获；
- 修复：master在异步服务分支前统一解析`SYMCC_QUERY_STORE`及默认路径。Grammar-hole
  generator只在`query_service_process`已成功启动且
  `SYMCC_QUERY_GRAMMAR_HOLES=1`时接收该store；workers为0、命令启动失败或功能关闭时
  显式传入`None`。这把“配置了路径”与“存在可消费该路径的query service”分开，
  避免半初始化store被误认为可用；
- 失败闭合：query service异常仍走现有stderr告警并降级，普通semantic grammar、
  parser replay、target validation与AFL novelty不受影响。该修复不让grammar-hole
  candidate绕过Query-IR evaluator，也不改变QueryStore schema；
- 静态加固：同轮删除确认无引用的局部变量/import，并把测试lambda改为具名函数，
  使`ruff check util test benchmark`首次在当前完整工作树上通过，而不是只对本轮
  文件做局部检查。所有受影响模块完成`py_compile`；
- 自动化证据：query/schedule/solution-generator/structural/path-cover/SMT-policy
  等受影响定向套件127项通过；全量346项Python与4项subtest通过。当前等级 I/T/E。

## 218. F223：Context-Wise Anytime-Valid PCFG Drift Certificates（2026-07-28）

- 研究问题：F218--F220的bounded Hoeffding cut只在一次扫描的候选切点之间分配
  `delta/m`。同一context在执行期间会被反复扫描，因此该界不能推出可选停止下的
  无限时域误报概率。简单再按扫描轮次做Bonferroni会使后期阈值迅速超过`[-4,4]`
  bits可观测差值，实际失去检测能力。F223将响应性调度cut和科研证书分成两层：
  原cut继续决定retained suffix；新证书只声明其严格成立的anytime审计保证；
- 构造：每个fragment级clipped gain经`x=(gain+4)/8`归一化到`[0,1]`。在context
  内第`j`个fragment启动一个forward CS，分配
  `alpha_j=delta*6/(pi^2*j^2)`；该CS第`k`次查看再分配
  `alpha_jk=alpha_j*6/(pi^2*k^2)`，用双侧Hoeffding半径
  `sqrt(log(2/alpha_jk)/(2k))`，并对所有历史查看区间取running intersection。
  当前端点若两个启动位置至少相隔8个fragment、两者各有至少8个样本且running
  intervals不相交，则产生证书。实现只保留最近64个launch，删除检验机会不会增加
  第一类错误；
- 保证与假设：在单个context内，若归一化gain有界且满足常条件均值
  `E[x_t|F_(t-1)]=mu`，Hoeffding--Azuma和两次union bound给出
  `sum_j sum_k alpha_jk <= delta=0.05`，因此任意扫描次数和data-dependent stopping
  下`P(false certified cut ever)<=0.05`。该声明不是跨所有context的全局FWER，
  也不覆盖条件均值本身随scheduler/admission策略变化的流。证书显式保存
  `guarantee`与`null_assumption`，避免把统计诊断误写成无条件正确性证明；
- 三层接入：parent、grandparent circuit和ordered sibling robust-gain流分别使用
  `symcc-parser-pcfg-{anytime,circuit-anytime,sibling-anytime}-cut-v1`。Sibling仍
  取相对global/parent/circuit三个baseline的最小收益，circuit仍取两个baseline的
  最小收益；因此anytime层没有放宽F219/F220的比较对象；
- Proof-carrying artifact：证书绑定context、窗口、全局launch ordinal、cut/detection
  index、双层预算、clipping区间、两条CS的样本均值/running interval/最终半径/
  tightening age、正separation gap和ordered receipt digest，再对canonical core
  哈希。三个公开verifier都从update-before receipts重算概率、robust gain、预算、
  区间和ID，字段篡改失败；
- 状态与迁移：semantic schema升级v23并接受v1--v22。Anytime表和证书均为derived
  audit state，持久化副本从不作为恢复权威；v22文件缺少新字段时，只能由通过既有
  count/witness/receipt固定点验证的证据重建。它不授权candidate，也不改变v20
  adaptive suffix、fixed-16 stale guard或PCFG mixture weight；
- 遥测：snapshot公开构造/保证名称、spending scale，以及parent/circuit/sibling的
  certified context和certificate数；per-context calibration保留cut index与
  normalized separation gap。Schema v23序列化三类derived certificate供实验归档；
- 自动化证据：三条64-fragment强漂移流均产生正gap证书并通过各自canonical verifier；
  证书预算、gap或区间篡改均被拒绝，双重逆平方预算的有限前缀严格小于1；v22迁移
  在删除所有新字段后仍恢复validated sibling receipts/counts。稳定和原有
  positive/adverse/recovery行为继续由同一30项semantic suite覆盖。全量346项
  Python与4项subtest、Ruff、`py_compile`、原生增量build、2项String lit、
  Z3/cvc5各6/6 concrete-verified conformance及双family research-evidence均通过；
- 科研依据与边界：构造采用confidence sequence的可选停止语义，并借鉴
  repeated-forward-CS change detector的逐时启动方式；与e-detector文献一致地把
  ARL/PFA和检测延迟分开。逆平方PFA版本对很晚的change point会有对数级延迟惩罚，
  因而当前不让它替代响应性gate。参考：
  [Howard et al., Annals of Statistics 2021](https://arxiv.org/abs/1810.08240)、
  [Shekhar--Ramdas repeated-FCS 2023](https://arxiv.org/abs/2309.09111)、
  [Shin--Ramdas--Rinaldo e-detectors 2024](https://arxiv.org/abs/2203.03532)、
  [Waudby-Smith--Ramdas bounded-mean betting 2024](https://arxiv.org/abs/2010.09686)。
  当前等级 I/T/E。

## 219. F224：Bounded Second-Order Sibling-History PCFG Factor（2026-07-28）

- 研究问题：F220只以紧邻左兄弟为条件，无法区分“相同bridge shape、不同更早
  anchor shape”导致的后续production选择。ExplainFuzz指出普通PCFG不能表达
  ancestor、sibling与long-range依赖；直接引入无界概率电路会使在线context、
  packed-state和证据空间失控。F224选择可审计的激进有界近似：对RHS slot `i>=2`
  学习`(shape[i-2],shape[i-1]) -> shape[i]`，显式检验在控制immediate sibling后
  非相邻兄弟是否仍有预测增益；
- 层次模型：history context由`parser/child family/parent shape/current slot/
  older shape/left shape`规范化哈希。Raw posterior以F220 immediate-sibling raw
  posterior为`beta=2`先验：
  `Ph=(nh+2*Ps)/(Nh+2)`。最终分布
  `P_eff_h=(1-wh)*P_eff_s+wh*Ph`是两个归一化分布的凸组合；因此无证据、stale、
  adverse或legacy状态令`wh=0`时精确恢复F220，而不是以零频shape做硬剪枝；
- 五基线update-before证据：每次完整accepted primary tree在任何count更新前生成
  `symcc-parser-pcfg-history-prequential-v1`，绑定fragment/node、完整两兄弟context、
  parent/optional circuit/sibling ID、shape、accepted-fragment index，以及global、
  parent、circuit、sibling、history五层selected/total充分统计。History robust gain
  是相对前四层NLL收益的最小值；只有history在同一证据上胜过所有已有expert时才能
  获得正weight；
- 漂移与无限时域审计：同fragment receipts先平均，gain裁剪到`[-4,4]` bits。
  响应性gate复用64-fragment、最小8+8的bounded Hoeffding detector并输出
  `symcc-parser-pcfg-history-cut-v1`；独立审计层复用F223双重逆平方alpha spending，
  输出`...history-anytime-cut-v1`。两个verifier均从canonical receipts重算五层
  概率、切点或running CS、预算、ordered evidence digest和certificate ID。F223的
  context-wise constant-conditional-mean/PFA边界原样适用，不扩张为跨context FWER；
- 精确order-2推断：context-state升级v4并可携带history context。Parent alternative
  的forward frontier由单shape变为最近最多两个shape的tuple；每个transition保存
  `previous_sibling_shape_ids`、selected shape、`next_sibling_shape_ids`、child
  state/artifact与inside mass。Inside对所有兼容tuple history derivation求和。
  Outside使用同一tuple state的forward prefix与backward suffix，将
  `outside(parent)*posterior(parent)*prefix*suffix`传给child artifact，明确排除
  child自身inside mass。因此结果对当前有界二阶链精确，而不是把history posterior
  近似乘进独立children；
- 有界资源与失败闭合：最多8192个history contexts、32768张history receipts，并与
  全部context states共享32768上限。Semantic schema升级v24且接受v1--v23。恢复时
  重算context ID，验证parent当前/前一/前二RHS spec与production shape，固定点对账
  count/witness，检查五层最终count、canonical receipt ID及global/parent/circuit/
  sibling/history fragment-index双射；derived weight、certificate与inside/outside
  全部重建。V23即使携带未知history字段也不会推断不存在的update-before证据；
- 确定性修复：在线dict最初按观测插入receipt，而序列化按receipt ID排序，导致重启
  后浮点NLL累加顺序变化。F224统一按receipt ID重放history events，使在线刷新与
  restore逐字段确定一致；这不是用近似浮点比较掩盖持久化差异；
- 遥测：snapshot增加history context/fragment/selection/receipt与容量、校准context、
  mean weight、stale、adaptive/anytime certificate及order-2 factor-state数；
  mapping持久化原始context/count/witness/receipt并导出derived certificate供实验审计；
- 自动化证据：真实parser fixture使用三child record和64个accepted fragments。
  Global、parent、grandparent均为`x:y=32:32`，每个immediate bridge context均为
  `16:16`；四个`(anchor,bridge)` history context分别为`14:2/2:14/2:14/14:2`，
  得到`5/6`或`1/6`且weight为正。测试重算tuple forward inside、posterior归一化与
  outside边界，逐项检查v24 restart、receipt/count篡改和v23 fail-closed fallback。
  独立64-event序列验证history相对四个baseline的responsive cut、anytime certificate
  与数值篡改拒绝。32项semantic、全量348项Python与4项subtest通过；Ruff、全目录
  `py_compile`、`git diff --check`、原生增量build与106项LLVM lit通过；真实Z3和
  cvc5 1.1.2 String/BV conformance均为6/6 SAT且concrete-verified。Research
  evidence v2的8项obligation通过，SC/TSO/RA在两个solver family上分别为
  UNSAT/SAT/SAT且无分歧；
- 科研定位与边界：这是ExplainFuzz动机下的bounded order-2 autoregressive factor，
  不是论文完整grammar-aware probabilistic circuit。它不表达任意距离、右向/双向、
  跨parent、symbol-table、checksum、semantic predicate或query-conditioned依赖；
  context cap可能使稀有组合回退。下一优先级是等CPU消融
  `global/parent/circuit/sibling/history`并报告held-out prequential NLL、fallback、
  states/transitions、parser CPU、valid-candidate/CPU和coverage-AUC；再依据残差研究
  bounded arbitrary-distance relation selector或native PC，而不是无证据扩大阶数。
  参考：[ExplainFuzz 2026](https://arxiv.org/abs/2604.06559)、
  [Lari--Young Inside-Outside](https://www.cs.jhu.edu/~jason/600.665/lari-young.pdf)、
  [Dawid prequential analysis](https://doi.org/10.1111/j.2517-6161.1984.tb01270.x)、
  [Howard et al. confidence sequences](https://arxiv.org/abs/1810.08240)。
  当前等级 I/T/E。

## 220. F225：Cross-Context Infinite-Horizon FWER Audit（2026-07-28）

- 研究问题：F223明确只控制单个context的首次certificate误报概率。系统同时学习
  parent、grandparent circuit、immediate sibling与history数千个context；若每个都
  以0.05解释为“系统显著”，至少一次误报概率可远高于0.05。F225把内部可选停止与
  外部online multiple testing组合，新增严格独立于调度gate的系统级审计层；
- 方法选择：Tian--Ramdas的online FWER工作说明alpha-spending在任意依赖p-value下
  控制更强的PFER并蕴含FWER；Online Fallback也允许任意依赖，但回收预算需要定义
  rejection序列和转移权重。ADDIS-Spending功效更高但依赖独立或局部依赖/保守null。
  Grammar contexts共享accepted fragments、生产式count和scheduler反馈，不满足这些
  额外条件，因此当前选择保守的不可回收alpha-spending，不以不可信独立性换功效；
- 三层预算：第`c`个首次注册context分配
  `delta_c=0.05*6/(pi^2*c^2)`；其第`j`个forward CS分配
  `delta_cj=delta_c*6/(pi^2*j^2)`；该CS第`k`次查看分配
  `delta_cjk=delta_cj*6/(pi^2*k^2)`。三次逆平方和各不超过1，所以所有context、
  launch和look的总预算不超过0.05。对每个真实null，若normalized gain在`[0,1]`
  且满足constant conditional mean，则union bound给出任意context间依赖、任意扫描
  次数和data-dependent stopping下的strong FWER上界；
- Append-only ledger：context注册顺序覆盖parent/circuit/sibling/history四类，
  同一accepted fragment内按固定kind和context ID排序；每项绑定kind、context ID、
  全局ordinal、first observation、global/context alpha、spending rule和
  `append-only-no-alpha-recycling` contract。最多32768项；context失活不释放ordinal，
  容量饱和后新context不再产生global certificate。Certificate绑定截至自身ordinal
  的allocation-ID prefix digest，所以未来append不会使旧artifact失效。为使外层
  alpha在被检验结果之前确定，注册context的首条observation只用于ledger，global
  CS从后续receipt开始；F223 local证书和运行gate仍可使用首条证据；
- 统一四模型重放：`_pcfg_global_anytime_units`分别从parent二层、circuit三层、
  sibling四层和history五层update-before receipts重算原有robust gain，再交给同一
  tuple-independent repeated-forward CS构造。全局证书schema为
  `symcc-parser-pcfg-global-anytime-cut-v1`，显式声明
  `cross-context-infinite-horizon-fwer`、outer allocation及
  `cross_context_dependence_assumption=none`。Verifier重算ledger prefix、context
  alpha、model-specific units、inner launch/look预算、running intervals与ID；
- 状态与失败闭合：semantic schema升级v25并接受v1--v24。V25加载要求allocation
  ordinal从1连续、ID/alpha/first-index规范、key唯一，并要求每个保留ordered receipt
  对应allocation且first index精确一致；任一缺失/重排/篡改令
  `pcfg_anytime_allocation_ledger_valid=0`并关闭全部global certificate，但不撤销
  grammar counts、不影响响应性cut或F223单context证书。V24及更早状态可从已经通过
  count/witness/index固定点的ordered receipts确定性建立初始ledger。Persisted global
  certificate仍是derived audit output；
- 自动化证据：parent、circuit、sibling、history四条64-fragment强漂移流分别以
  ordinal 1产生global certificate并通过统一verifier；prefix digest篡改拒绝。
  额外注册256个无证据context，验证ordinal严格为`1..257`且已分配alpha和小于0.05，
  无证据context不产生certificate。真实F224 parser状态逐项重启保持ledger；
  allocation ordinal篡改关闭global层，v24删除ledger字段后从validated history
  receipts恢复；32项semantic、全量348项Python与4项subtest、Ruff、全目录
  `py_compile`、`git diff --check`、原生build和106项LLVM lit通过；真实Z3与cvc5
  1.1.2 String/BV conformance均为6/6 SAT且concrete-verified，research evidence
  v2复检通过且SC/TSO/RA在两个solver family上无分歧；
- 保证边界：FWER family只包含获得ledger allocation且可能输出global certificate的
  contexts；容量之后不会检验新global hypothesis。证明假设不要求跨context独立，
  但要求各true-null context内部的bounded constant-conditional-mean条件，并要求
  append-only ledger完整。当前JSON文件不是外部透明日志；恶意重写整个ledger并重签
  所有派生artifact不在本地损坏模型内，科研归档应同时封存state/evidence digest。
  Global certificate只审计change claim，不授权grammar proposal、不调整PCFG weight；
- 后续实验：比较context-wise、global alpha-spending和不做统计证书三种报告层，
  记录certification delay、allocated/unused alpha、ledger saturation与false alarm。
  若真实context序列表现出可证明的局部依赖或conservative null，再研究
  ADDIS-Spending；在此之前不启用alpha recycling。参考：
  [Tian--Ramdas, Online control of the FWER](https://arxiv.org/abs/1910.04900)、
  [Howard et al., Confidence sequences](https://arxiv.org/abs/1810.08240)、
  [Shekhar--Ramdas, repeated FCS](https://arxiv.org/abs/2309.09111)。
  当前等级 I/T/E。

## 221. F226：Five-Level PCFG Confirmatory Ablation and Sealed Artifact（2026-07-28）

- 研究问题：F224/F225已经实现五层层次模型和全局统计审计，但此前没有一个能保证
  “只运行到指定层”的实验控制。仅把最终weight置零仍会支付高阶context、receipt、
  certificate和tuple-state成本，不能回答覆盖收益是否值得CPU/内存开销；只打印
  snapshot也无法把证据可靠绑定到随机区组、源代码和CPU预算。F226把机制消融和
  tamper-evident科研产物接入F67 sealed protocol；
- Cost-faithful阶数控制：`SYMCC_PCFG_CONTEXT_ORDER=0..4`或
  `global/parent/circuit/sibling/history`。`_observe_pcfg_fragment`只建立不高于所选
  层的context、update-before receipt和allocation；刷新只计算启用层的校准与证书。
  Level 0完全跳过contextual inside/outside，level 1只构造parent state，level 2加入
  circuit，level 3的factor frontier只记一个左shape，level 4才记两个shape并构造
  history。默认4保持F225行为；该运行配置写入mapping/snapshot但不改变v25 evidence
  schema。跨order恢复会清空全部PCFG evidence/ledger/derived mass并以
  `pcfg_state_order_mismatch_reset=1`记录，保留validated CFG/ECT，防止共享目录污染
  消融；同order resume与旧版本默认history迁移保持原语义；
- 确认性工件：MPI master在初始化、周期save和finally阶段原子写
  `symcc-pcfg-research-artifact-v1`。Canonical SHA-256覆盖semantic schema、所选
  层、protocol metadata和完整scalar grammar snapshot。新增snapshot字段包括五层
  自适应NLL/robust gain、每类anytime/global证书从cut到detection的平均fragment
  delay、已分配alpha，以及既有context/receipt/state/transition/capacity指标。
  Artifact不授权proposal，只是科研证据；
- Protocol闭环：`pcfg_context_ablation_configurations`从一条base command生成
  `pcfg-global`至`pcfg-history`五个同command/同核数/同grace配置，只改变阶数并强制
  工件。CLI spec可直接使用`pcfg_context_ablation`。Executor注入run directory、
  target、seed和CPU budget；成功却缺少、损坏或跨run/config/order的artifact会转为
  failed并保留stdout/stderr。Verifier同时检查artifact内部digest、schedule/protocol
  binding和完整artifact-tree digest；
- 统计接入：`analyze_ablation.py --pcfg-artifact PATH...`递归读取并验证工件，按
  protocol run ID把所有scalar `pcfg_*`指标连接到benchmark rows，因此同一paired
  framework可分析coverage AUC、prequential NLL、robust gain、certificate delay、
  alpha/state/receipt开销和失败。NLL/delay/memory/bytes/overhead自动按lower-is-better
  处理；确认性结论仍需至少20个paired repeats及Holm校正；
- 自动化证据：最小packed forest `root -> record -> (a,b,c)`在五档上验证非空状态
  精确为`{}`、parent、+circuit、+sibling、+history；context artifacts中的高阶ID和
  factor-state随档位严格出现。Artifact round-trip通过，指标篡改失败，非法order拒绝。
  Protocol测试验证100-cell五层确认性矩阵、CPU一致性、schedule/config/order绑定、
  digest篡改拒绝和missing-artifact失败保留；analysis测试验证artifact指标只按
  protocol run连接。定向semantic/protocol/analysis分别33/7/6项通过；全量351项
  Python与4项subtest、106项LLVM lit、原生build、Ruff、全目录`py_compile`和
  `git diff --check`通过。真实Z3与cvc5 1.1.2的String/BV/conversion conformance
  均为6/6 SAT且concrete-verified；research evidence v2重新生成并验签，8项
  obligation全部通过，SC/TSO/RA在两个solver family中一致为UNSAT/SAT/SAT；
- 科研边界：F226完成的是实验机制、证据schema和分析入口，不等于已经执行公开目标
  的20-repeat campaign，也不证明history优于低阶模型。各档必须使用隔离的新run
  directory；跨档复用同一semantic state会改变prequential问题。下一步应运行tuning
  后封存confirmatory manifest，同时报告coverage/CPU与结构指标；只有held-out residual
  在history档仍显著且可重复时，才进入任意距离/cross-parent factor研发。
  当前等级 I/T/E。

## 222. F227：Persistent Native Tree-sitter Incremental Parser（2026-07-28）

- 研究问题：F212已经定义content-addressed cache manifest和可复检reuse receipt，
  但测试parser只消费JSON协议，未调用真实增量解析API。每次proposal重新启动普通
  parser仍会丢失内存中的旧parse tree，因此不能声称native incremental parsing，
  也无法区分“span未变”与“解析器实际复用了该subtree”；
- 原生增量路径：新增`util/tree_sitter_incremental_parser.py`。`serve`进程加载官方
  `tree-sitter>=0.25`和目标language provider，在mode-0600 Unix socket后串行服务
  proposal master，并以input SHA-256保留最多256棵native `TSTree`。Manifest中的
  base digest和`offset/delete/insert_hex`必须能逐byte重建candidate；命中后复制
  base tree、以byte-accurate row/column调用`Tree.edit`，再执行
  `Parser.parse(candidate, old_tree)`。Base不存在、daemon重启或manifest不匹配时
  明确cold parse，不把协议命中伪装为性能复用；
- Node-ID proof：Tree-sitter官方API规定，基于old tree产生的新tree若复用旧node，
  两者node ID相同。服务在完整preorder v2 trace中保存base/candidate native ID映射，
  只为F212 manifest实际offered且在新tree中ID相同的节点输出
  `symcc-parser-incremental-reuse-v1`。现有`VerifiedProposalManager`不信任ID声明，
  继续独立检查manifest digest、base/candidate index唯一性、symbol、grammar/
  parse state、mapped span、epsilon和candidate yield SHA-256；receipt缺失是合法
  cold fallback，伪造或错配仍fail closed；
- 服务与资源边界：长度前缀RPC限制64 KiB，manifest/trace各限制1 MiB，input和node
  数有硬上限；trace使用临时文件、`fsync`和rename原子发布。Parser被单服务线程
  串行访问，避免共享state竞态；LRU-like确定性驱逐只删除内存TSTree，不触碰AFL
  corpus或manager的权威artifact。`ping`输出cold/incremental/reused/cache telemetry，
  `shutdown`清理socket；parser拒绝的error tree可输出审计trace但不会进入cache；
- 配置与依赖：`requirements.txt`加入`tree-sitter>=0.25,<0.27`和可执行conformance
  grammar `tree-sitter-json>=0.24,<0.26`。用户以
  `SYMCC_PROPOSAL_PARSER="python3 ... parse --input {input} --trace {trace} --cache {cache}"`
  接入现有MPI链，无需新增旁路acceptance gate。其他目标只需安装相应官方/兼容
  language provider；
- 自动化证据：纯Python fake native tree精确检查edit byte/point参数、左右node ID
  复用、坏edit cold fallback、error tree不缓存、node cap fail-closed、cache驱逐和
  RPC/manifest digest。真实Tree-sitter 0.25.2与tree-sitter-json 0.24.8进一步验证
  JSON局部数字替换保留多个native node ID；独立Unix daemon/client和完整
  `VerifiedProposalManager -> manifest -> native parse -> receipt -> manager
  revalidation`链路均命中。当前专项10项、受影响面60项、全量361项Python与4项
  subtest、107项LLVM lit、原生build、Ruff、全目录`py_compile`和
  `git diff --check`通过；Z3/cvc5各6/6 String/BV conformance通过，research
  evidence v2验签通过；
- 科研边界：Tree-sitter提供高性能concrete syntax tree和真实incremental reuse，
  但不导出全部歧义derivation的GLR/GLL SPPF。因此F227关闭“真实Tree-sitter增量API”
  差距，不把v2 concrete tree称为complete forest；v3/v4 packed alternatives、
  nullable proof和inside/outside仍依赖能导出SPPF的外部parser。下一步应把同一
  manifest/receipt接入至少一个native GLR/GLL complete-forest adapter，并在F226
  sealed protocol中报告parser wall time、native ID reuse、invalidated frontier、
  trace bytes、valid-candidate/CPU与coverage/CPU。参考：
  [Tree-sitter Advanced Parsing](https://tree-sitter.github.io/tree-sitter/using-parsers/3-advanced-parsing.html)、
  [py-tree-sitter Parser](https://tree-sitter.github.io/py-tree-sitter/classes/tree_sitter.Parser.html)、
  [py-tree-sitter Node identity](https://tree-sitter.github.io/py-tree-sitter/classes/tree_sitter.Node.html)。
  当前等级 I/T/E。

## 223. F228：Proof-Carrying Parser Telemetry and Sealed Cost Ablation（2026-07-28）

- 研究问题：F227证明native增量路径真实发生，但原proposal snapshot只按record最后
  状态统计cache hit/reused nodes，没有累计parser wall time、零复用receipt或proof
  类型。即使运行F226 sealed campaign，也无法回答节省的native parse time是否超过
  client process/RPC/trace开销，或cache offer有多少因daemon restart退化为cold；
- State schema 11：`VerifiedProposal`累计manager实测subprocess wall microseconds、
  服务报告的native parse microseconds、trace bytes、cache request/incremental
  offer、receipt、zero-reuse、Tree-sitter node-ID proof、reused/invalidated nodes。
  最新一次字段仍用于proposal诊断，累计字段用于科研聚合。V11读取v1--v10，旧state
  以最后观测作为保守初始total；恢复要求
  `proof <= receipt <= offer <= request <= validation`、zero-reuse不超过receipt、
  totals不小于latest且64-bit有界。所有字段只观测，不改变parser/target/AFL gate；
- Proof-carrying telemetry：F227 receipt新增
  `proof=tree-sitter-node-id-v1`。Manager只接受空proof或该规范值；若存在F227
  telemetry，必须满足schema、cold/incremental与receipt一致、reported node/reuse
  精确等于独立trace复检结果、cache entry有界。伪造incremental mode、node count、
  reuse count、proof或非有限/超时elapsed会使trace fail closed；
- Cost-faithful control：`SYMCC_PROPOSAL_PARSER_CACHE=0`使manager完全不创建manifest、
  不保留trace cache、不计request，但仍执行同一parser command和完整trace validation。
  `parser_incremental_ablation_configurations`从一条base生成`parser-cold`和
  `parser-incremental`，保持command、core和grace完全一致，只改变cache mode并要求
  artifact；
- Sealed artifact：MPI在初始化、周期save和finally原子写
  `symcc-parser-research-artifact-v1`。Canonical digest绑定proposal schema 11、
  cache mode、run/pair/config/seed/CPU metadata和全部scalar parser funnel/cost指标。
  Protocol verifier检查digest、counter lattice、schedule和configured mode；成功但
  artifact缺失/损坏/跨run会变failed，失败运行的原始artifact仍由artifact-tree
  digest保留。`analyze_ablation.py --parser-artifact`只连接验签后的
  `proposal_parser_*`指标；
- 指标解释：manager mean wall time是用户实际支付成本；reported parse time用于拆分
  native parser和RPC/process/JSON开销。Receipt rate、zero reuse、mean reused nodes、
  invalidated nodes和trace bytes用于解释机制；coverage AUC、valid-candidate/CPU和
  retained/CPU仍是最终效用，不能用高reuse rate替代；
- 自动化证据：cache-off配置仍接受完整trace且request/cache entry均为零；错误native
  telemetry被拒绝。真实Tree-sitter manager链检查wall/reported time、trace bytes、
  offer/receipt/proof并完成artifact round-trip/tamper。Protocol验证40-cell
  confirmatory cold/incremental矩阵、schedule/config/cache-mode binding与
  missing-artifact失败保留；analysis按protocol run ID连接parser标量。受影响面77项、
  全量365项Python与4项subtest、107项LLVM lit、原生build、Ruff、全目录
  `py_compile`和`git diff --check`通过；真实Z3/cvc5各6/6 String/BV conformance
  与research evidence v2验签通过；
- 科研边界：F228提供机制可辨识的实验面，不等于已经测得增量加速，也不证明JSON
  grammar可代表大型语言或binary formats。Tree-sitter daemon当前串行，适合作为
  proposal master的共享服务；跨node/跨主机部署需要独立排队与网络成本实验。
  Confirmatory campaign必须分别报告cold/incremental的parser输入大小、edit span、
  invalid/error比例和daemon restart。当前等级 I/T/E。

## 224. F229：Persistent Generalized Earley Complete-SPPF Adapter（2026-07-28）

- 研究问题：F209--F226已经能验证、学习和调度shared packed DAG，但真实parser路径
  只有F227 Tree-sitter selected CST，全部歧义来自手写fixture。把Tree-sitter内部
  GLR recovery路径或多个CST child误写成packed alternatives会制造不存在的grammar
  evidence。F229选择官方明确暴露SPPF的Lark Earley后端，为v3/v4提供第一个真实
  complete-forest producer；
- Parser构造：新增`util/lark_sppf_parser.py`与`lark>=1.3,<1.4`依赖。服务固定
  `parser=earley`、`ambiguity=forest`、`lexer=dynamic_complete`、
  `use_bytes=True`、`keep_all_tokens=True`、`ordered_sets=True`。前两项直接返回
  SPPF；dynamic-complete保留terminal内部备选；byte mode使Lark position与candidate
  byte offset一致，不以Unicode codepoint近似。Grammar限制1 MiB并绑定SHA-256和
  Lark版本；mode-0600 Unix daemon编译一次immutable grammar、串行处理请求；
- 无损有界编码：SPPF completed Symbol与LR(0) intermediate item各保留一个trace
  node，Token保留terminal node。每个PackedNode转为独立`@packed` wrapper，其state
  绑定origin、完整expansion、alias和SHA-256；父Symbol的每个alternative只指向对应
  wrapper，因此两个不同rule即使具有相同child indexes也不会被v3唯一性规则塌缩。
  Wrapper再指向原SPPF children，保留shared incoming edges与source span。拓扑排序
  确保所有边forward；Lark排序的首个Packed derivation作为alternative zero；
- Selected-tree不变量：完整SPPF是DAG，但manager要求root zero沿alternative zero
  形成一棵无多父树。编码器先检测循环，再仅对该primary projection中第二次出现的
  node复制其primary closure；其他alternative仍指向原node，所以歧义共享证据不被
  全树展开。复制仍受4096 node总上限，不能以隐藏指数展开换取acceptance；
- Nullable桥接：Lark SPPF合法保留`A -> B -> epsilon`零宽子图，而现有trace-v3
  明确要求epsilon node没有child。编码器从折叠前的全部零宽alternative导出不同
  `(symbol,state) -> RHS`依赖，把零宽节点规范化为叶并输出trace-v4。Manager随后
  独立重算nullable rule ID、依赖SCC和least fixed-point proof；超过32条rule或出现
  非nullable child时拒绝。这既满足现有schema，也没有把nullable链静默丢成一个
  无来源空节点；
- 完整性与资源边界：循环SPPF对应无限歧义，forward trace-v3/v4无法无损表达，故
  明确失败。节点4096、edge occurrence 16384、symbol alternatives 8、production
  children 64、nullable rules 32、input默认16 MiB、trace 1 MiB、RPC 64 KiB均是
  hard bound；超过任一上限不写部分trace。Syntax rejection写一个结构合法的negative
  trace并返回1；grammar/internal/bound/cycle失败返回2。`forest_telemetry.complete`
  仅在完整有界编码成功时为true；
- 主路径接入：CLI沿用`SYMCC_PROPOSAL_PARSER`的`{input}/{trace}`contract，不需要
  manager旁路。独立服务的`ping`暴露grammar digest、Lark版本、accepted/rejected/
  failure和Earley elapsed；`shutdown`清理socket。`{cache}`参数仅为命令兼容而被
  忽略，F229不声称incremental parse；
- 自动化证据：`test/test_lark_sppf_parser.py`用真实Lark验证`aaa`二叉歧义至少一个
  双alternative Symbol、非主路径shared incoming edge、manager完整v3复检；双
  epsilon文法验证v4 nullable certificate与manager least-fixed-point复检；原始
  `c3 a9`验证byte span为`[0,2)`；另覆盖syntax negative trace、非法grammar、
  无限歧义cycle、node cap、持久Unix RPC及完整
  `VerifiedProposalManager -> parser -> trace-v3 -> structural validation`链。
  当前8项专项、Ruff、`py_compile`和`git diff --check`通过；
- 科研定位与下一步：Lark官方文档明确Earley `ambiguity=forest`返回SPPF，
  Symbol的children是Packed derivations；因此F229是实际generalized Earley/SPPF
  integration，而不是显式树枚举。Lark是pure Python，且每个candidate重新parse；
  当前不能称native GLR/GLL或incremental SPPF。下一步先把complete/raw/encoded/
  clone/alternative/edge/nullable/time telemetry纳入sealed artifact并执行
  cross-parser acceptance/precision/cost calibration，再根据CPU结果决定接入原生
  或增量forest backend。参考：
  [Lark SPPF API](https://lark-parser.readthedocs.io/en/latest/forest.html)、
  [Lark parser algorithms](https://lark-parser.readthedocs.io/en/latest/parsers.html)。
  当前等级 I/T/E。

## 225. F230：Proof-Carrying Complete-Forest Telemetry and Calibration（2026-07-28）

- 研究问题：F229的结构trace由manager独立验证，但`forest_telemetry.complete`、
  raw node和parse time仍是provider自报字段。如果不核对这些字段，sealed artifact
  可以在结构有效时夸大complete rate、缩小forest cost或把Tree-sitter trace计为SPPF。
  F230把“语法授权”和“科研计量”继续分离：telemetry不授权candidate，但任何错误
  telemetry会使该trace不能进入研究状态；
- Proof contract：F229 trace新增`proof=lark-earley-complete-sppf-v1`、grammar
  SHA-256和Lark version。`VerifiedProposalManager._load_parser_trace`要求proof/
  provider identity规范，禁止与Tree-sitter incremental telemetry共存，并从规范化
  nodes重新计算encoded node、alternative和edge occurrence，从原v4 rules计算
  nullable count。`complete`必须等于parser accepted；raw、clone、encoded关系、
  elapsed、v3/v4和全部hard bound必须闭合。Syntax-negative trace保留proof但
  complete=false、raw=0；
- State v12：每个record累计forest trace、complete trace、proof、raw/encoded node、
  primary clone、packed alternative、edge、nullable rule和forest parse time。
  Snapshot提供全局和；research metrics另外给出complete rate、mean raw/encoded
  nodes、mean edges/alternatives/time。V12读取v1--v11；restore要求
  `complete <= proof <= trace <= validation`、encoded至少覆盖trace、raw至少覆盖
  complete、clone不超过encoded、nullable不超过`32*complete`、forest time不超过
  总reported parser time，所有累计量均限制signed 64-bit。同一record不得切换
  grammar digest；state顶层的sorted grammar identity集合必须覆盖每个forest record；
- Artifact闭环：`symcc-parser-research-artifact-v1`保持schema但绑定proposal state
  12及全部新scalar、规范化parser command SHA-256和实际grammar SHA-256集合。
  Manager与protocol verifier都复检forest counter/time lattice；artifact digest继续
  绑定run/pair/config/seed/CPU。MPI metadata新增
  `parser_forest_mode`；
- Cost-faithful calibration：新增
  `parser_forest_ablation_configurations`和CLI `parser_forest_ablation`。一条base
  展开`off/selected/complete`三档：off清空parser command，selected使用指定CST
  command，complete使用指定SPPF command。三档同command/cores/grace，统一
  `SYMCC_PROPOSAL_PARSER_CACHE=0`排除增量reuse，均要求parser artifact。Verifier
  要求metadata mode、parser command与configuration一致，complete实际grammar必须
  等于protocol预声明SHA-256，off/selected不得报告forest trace或grammar；
- 自动化证据：F229真实daemon/manager测试现检查state v12的trace/complete/proof/
  raw/encoded/alternative/edge/time，artifact round-trip和proof篡改，save/reload及
  state中`proof > trace`记录丢弃；独立trace edge篡改拒绝。Protocol测试验证
  20-repeat三档共60 cells、同CPU/cache-off、mode binding与错误mode拒绝，并通过
  CLI spec实际生成三档manifest。F228 Tree-sitter、proposal migration、analysis
  fixture同步升级state 12并保持通过。最终全量376项Python与4项subtest、108项
  LLVM lit、原生build、Ruff、全目录`py_compile`、`git diff --check`和权威文档
  相对链接检查通过；真实Z3与cvc5 1.1.2各6/6 String/BV case均SAT且
  concrete-verified，research evidence v2的8项obligation重新验签通过；
- 解释边界：off/selected/complete不是纯算法消融，因为Tree-sitter与Lark可能接受
  不同语言或选择不同concrete tree。实验必须报告acceptance confusion matrix、
  invalid ratio、trace规模、manager/parser CPU、valid-candidate/CPU和coverage AUC；
  不能把complete档单独更高的coverage直接归因于SPPF。F230也不实现incremental
  SPPF；它先提供决定该高成本研发是否值得的证据面。当前等级 I/T/E。

## 226. F231：Candidate-Paired Cross-Parser Calibration（2026-07-28）

- 研究问题：F230的`off/selected/complete`是独立fuzzing campaign。不同cell产生的
  candidate集合不同，所以三个aggregate acceptance rate不能恢复同一candidate上的
  `both/primary-only/secondary-only/neither`，文档要求的acceptance confusion
  matrix此前没有可执行证据。F231新增`util/cross_parser_oracle.py`，让complete-SPPF
  primary与selected-CST secondary并发解析同一不可变candidate；
- 无shell双执行：两个child command由`shlex.split`变成有界argv，必须把`{input}`和
  `{trace}`作为完整argument，禁止`{cache}`与相同命令对。两个subprocess用独立临时
  trace并发运行，stdin/stdout/stderr隔离，单个timeout限制为60秒；只有return code
  0/1分别表示accept/reject，timeout、exec失败、rc 2或无trace全部fail closed。
  Wrapper不把secondary变成授权oracle，最终退出码始终跟随primary；
- Proof envelope：primary保持原v1--v4顶层结构，secondary完整JSON嵌入
  `cross_parser_trace`。`symcc-cross-parser-telemetry-v1`绑定proof
  `paired-independent-trace-v1`、candidate SHA-256、两个规范化argv SHA-256、
  两个canonical trace SHA-256、parser name、return code、accept bit和各自elapsed。
  Child trace禁止递归携带cross receipt，合并后仍受1 MiB manager trace上限；
- 独立复检：Proposal manager不相信wrapper的secondary accept bit。它把嵌入trace
  canonical编码到mode-0600临时文件，并以`allow_cross=false`递归调用原有v1--v4
  validator；因此span/parent/packed DAG/nullable fixed point、Tree-sitter telemetry
  和Lark complete proof全部沿用同一验证面。随后复算两个trace digest、candidate
  digest、parser identity、rc/accept等价和elapsed bounds。任一字段篡改使整个
  primary trace无效；
- State v13与artifact：每个record累计paired trace、agreement、both-accept、
  primary-only、secondary-only、both-reject和两侧时间，并锁定一个有序command pair。
  Restore要求四格之和等于trace、agreement等于对角线、trace不超过parser validation、
  command pair完整且存在于顶层集合，所有时间在signed 64-bit内。Research artifact
  密封sorted pair集合和新scalar/rate；manager与protocol verifier重复检查恒等式；
- Sealed protocol：新增`parser_cross_calibration_configurations`与CLI
  `parser_cross_calibration`，从一条base生成同CPU的`selected/complete/paired`
  三档，统一关闭parser cache并要求artifact。Paired档仍标记forest complete，绑定
  wrapper command digest、预声明grammar digest及两个child digest，并要求
  `forest_traces == cross_traces`。独立档`SYMCC_PARSER_CROSS_MODE=off`不得报告pair；
- 自动化证据：真实Lark Unix daemon作为complete primary、独立v2 fixture作为selected
  secondary，分别覆盖both-accept与secondary-only；manager仍拒绝primary-negative
  candidate但保留校准象限。另覆盖secondary node篡改、相同child command拒绝、
  state save/reload、artifact round-trip、四格总和篡改、60-cell确认性矩阵与CLI
  expansion。新增3项parser测试和2项protocol测试后全量381项Python通过；109项
  LLVM lit、原生build、Ruff、全目录`py_compile`、`git diff --check`与9份权威文档
  相对链接检查通过。Z3和cvc5 1.1.2各6/6 String/BV case均SAT且
  concrete-verified，既有research evidence v2验签通过；
- 调研结论与边界：GNU Bison GLR官方实现会分裂/合并stack并延迟semantic action，
  但没有通用SPPF导出；Tree-sitter公开API提供incremental selected tree而非完整
  ambiguity forest；Iguana提供GLL+binarized SPPF，但当前项目环境无JVM，且未找到
  incremental forest update的官方承诺。因此F231不虚构“native incremental SPPF”
  已完成。它提供决定下一后端投资的同候选precision/cost证据；公开20-repeat campaign
  仍未执行。参考：
  [GNU Bison GLR](https://www.gnu.org/software/bison/manual/html_node/GLR-Parsers.html)、
  [Tree-sitter grammar conflicts](https://tree-sitter.github.io/tree-sitter/creating-parsers/2-the-grammar-dsl.html)、
  [Iguana GLL/SPPF](https://iguana-parser.github.io/getting_started.html)。
  当前等级 I/T/E。

## 227. F232：Parser-Neutral Structural Correspondence Certificate（2026-07-28）

- 研究问题：F231回答两个parser是否接受同一candidate，但`both-accept`仍可能掩盖
  完全不同的token boundary和constituent segmentation。直接比较symbol name也不
  科学：Lark grammar的Symbol/LR(0)/Packed label与Tree-sitter grammar node type
  不在同一ontology。F232先实现不依赖symbol命名的byte-yield结构校准；
- Selected projection：manager新增确定性selected-node提取。Trace v3/v4直接使用
  已验证的`primary_nodes`，即root alternative-zero闭包；v1/v2从所有root沿每个node
  的alternative zero遍历，没有显式alternative时沿parent tree全部direct child。
  因为计算发生在双trace独立验证之后，坏parent、坏alternative、循环或越界无法进入
  correspondence计数；
- 两层span证据：对primary分别收集alternative-zero与complete encoded forest中所有
  非epsilon `(start,end)`，对secondary收集selected-tree span。相同yield的Symbol、
  LR item和Packed wrapper只计一次，避免parser内部representation multiplicity放大
  precision；若存在非root span则去除`[0,input_size)`这个平凡共同root。另收集所有
  `0 < boundary < input_size`的内部start/end集合；
- State v14：仅`both-accept`生成structural pair，累计primary-selected、
  primary-forest、secondary、selected-shared、forest-shared、两种union，以及四类
  boundary计数。Restore与artifact verifier要求selected subset forest、
  intersection不超过任一集合、`union=left+right-intersection`、selected intersection
  不超过forest intersection，并要求structural pair恰等于both-accept。所有累计量
  继续受signed 64-bit界；v1--v13可读，v13旧pair保留象限但span计数为零，不伪造历史
  correspondence；
- 科研指标：artifact新增micro-averaged selected-span precision/recall/Jaccard、
  forest-span precision/recall/Jaccard和boundary Jaccard。Selected指标衡量两个
  concrete projection是否产生相同分段；forest precision衡量secondary span是否被
  complete forest支持；forest recall低可能只是完整歧义包含更多结构，不能单独解释
  为错误。Boundary Jaccard弱化层级差异，适合先定位lexer/terminal segmentation问题；
- 自动化证据：真实Lark `a+`与逐byte selected fixture在同一candidate上得到非零
  selected/forest shared span，验证selected subset、两类intersection和union恒等式；
  primary reject/secondary accept不产生structural pair。Protocol fixture封存一组
  非平凡span/boundary计数并拒绝union篡改；state save/reload与全部旧parser fixture
  已升级schema 14。最终381项Python、109项LLVM lit、原生build、Ruff、全目录
  `py_compile`、`git diff --check`和9份权威文档链接检查通过；Z3/cvc5各6/6
  String/BV conformance concrete-verified，research evidence v2验签通过；
- 边界与下一步：byte span correspondence不是symbol/production语义对齐，也不能说明
  哪个grammar更正确。下一步应在paired tuning中先检查acceptance四象限和boundary
  Jaccard，再对稳定的一对grammar建立显式symbol mapping/terminal taxonomy；只有
  span证据接近且Earley成本仍显著时，native GLL或增量SPPF性能工程才具有可解释性。
  当前等级 I/T/E。

## 228. F233：Independent GLR/SPPF Differential Oracle（2026-07-28）

- 研究问题：F229的complete forest来自单一Lark Earley实现。即使manager能验证DAG
  自洽，也无法发现provider对grammar conflict或packed sharing的系统性遗漏。F233
  选择Parglare 0.21.1：其论文与公开API明确实现Farshi/Rekers GLR，并把SPPF作为
  `Forest.result`的Parent/possibility共享图直接暴露；
- 真实forest而非树枚举：新增`util/parglare_sppf_parser.py`与
  `parglare>=0.21,<0.22`。`GLRParser`固定`build_tree=true`、关闭shift、
  shift-over-empty与lexical preference。编码只读取`Forest.result`，不访问
  `solutions`、`get_tree`或lazy tree iterator。Parent成为symbol node，每个
  NodeNonTerm production成为独立`@packed` wrapper，NodeTerm成为`@token` wrapper，
  child Parent以object identity intern，保留GSS/SPPF汇合后的sharing；
- 共用验证不变量：Parglare encoder复用F229已经测试的acyclic/reachable检查、
  zero-width nullable折叠、primary alternative-zero ownership clone、topological
  order及4096 node/16384 edge/8 alternative/64 child/32 nullable/1 MiB hard bounds。
  不同production即使child相同仍有不同wrapper。Cyclic SPPF表示无限歧义，不能无损
  进入forward trace v3/v4，故明确失败而非枚举或截断；
- Byte contract：candidate以Latin-1一对一解码，Parglare character position因此
  等于原始byte offset；grammar必须按byte alphabet描述非ASCII terminal。Grammar
  UTF-8文件限制1 MiB并绑定SHA-256。持久mode-0600 Unix daemon只构造一次grammar和
  LR table，仍对每个candidate完整GLR parse；
- Provider proof：新增`parglare-glr-complete-sppf-v1`与
  `symcc-parglare-glr-sppf-telemetry-v1`。Manager只在schema/proof/version/grammar
  配对正确时接受，并继续从规范化trace复算encoded/raw/clone、alternative、edge、
  nullable rule、accepted/complete和elapsed关系。Syntax error输出negative proof
  trace并返回1；grammar/internal/cycle/bound失败返回2；
- Differential composition：F231 wrapper可把Lark Earley作为primary、Parglare GLR
  作为secondary，或交换顺序。嵌套Parglare forest经过同一manager v1--v4 validator，
  F231四象限与F232 span/boundary指标因而能比较两个真正generalized parser，而不是
  只比较complete forest与selected CST；
- 自动化证据：7项新测试覆盖真实`S -> S S | a`二叉歧义、双alternative与shared
  incoming edge、nullable v4 fixed-point certificate、syntax-negative、无限循环、
  node bound、invalid grammar、proof篡改、持久RPC/manager/artifact，以及同时启动
  Lark和Parglare daemon的candidate-paired both-accept/structural-overlap链。初步
  专项全部通过。最终388项Python、110项LLVM lit、原生build、Ruff、全目录
  `py_compile`、`git diff --check`、依赖闭包与9份权威文档链接检查通过；
  Z3/cvc5各6/6 String/BV conformance concrete-verified，research evidence v2
  验签通过；
- 科研边界：Parglare论文明确其实现为pure Python，且当前adapter不做incremental
  parse。因此F233提供algorithmic differential oracle与第二个真实complete-SPPF
  producer，不关闭native/incremental forest性能缺口。参考：
  [Parglare parse forests](https://igordejanovic.net/parglare/stable/parse_forest_trees/)、
  [Parglare software paper](https://doi.org/10.1016/j.scico.2021.102734)。
  当前等级 I/T/E。

## 229. F234：Proof-Carrying Cross-Parser Grammar Correspondence（2026-07-28）

- 研究问题：F232只能说明两个parser在byte span和boundary上相似，不能回答
  `Lark.start`与`Parglare.S`、或两侧production在观测数据上是否承担相同结构角色。
  直接按名称匹配会把命名习惯误当语义；仅按span匹配又会在递归grammar的同区间
  unary chain上产生多解。F234实现保守、可复检的sample-conditioned correspondence；
- 透明结构摘要：manager只处理两份trace都独立验证且共同接受的alternative-zero
  projection。`@packed`、`@item`、`@token`等provider合成wrapper被透明展开，真实
  grammar symbol保留。每个节点以`(start,end,epsilon)`、相对child span和child递归
  摘要形成parser-neutral Merkle shape；实现使用显式栈，可处理1500层回归和最多
  4096 node边界，不受Python recursion limit影响；
- 唯一性门控：符号对应必须在双方同一个`span+shape`桶中各恰有一个节点。同span
  但同shape仍多解时记录`ambiguous_symbol_spans`并不猜测。产生式对应还要求双方
  去wrapper后的有序direct-child partition完全一致且非空；shape SHA-256、
  两侧symbol/state与observation count共同构成证据。该规则允许同span不同递归层级
  由shape区分，同时拒绝仅凭名称或遍历顺序配对；
- State v15：每个record保存canonical
  `symcc-parser-correspondence-v1` JSON及SHA-256，累计两侧semantic node、
  symbol correspondence、ambiguous span和production correspondence。重复验证以
  parser pair相同为前提合并规范计数；restore复算JSON canonical form、摘要、label/
  shape bounds、排序唯一性、observation sum及
  `production <= symbol <= min(primary,secondary)`。V1--v14继续可读，但旧state
  对应字段置零，不回填不存在的历史证据；
- Sealed artifact：输出按parser pair聚合、排序且无重复的完整symbol/production
  correspondence表，并绑定distinct mapping数与observation总数。Manager verifier
  和`benchmark/research_protocol.py`独立复检表结构、总和、排序、digest和集合上界；
  研究指标新增两侧symbol alignment rate及production/symbol alignment rate。
  映射count或artifact observation被篡改，即使攻击者重算顶层artifact摘要也会失败；
- 自动化证据：真实Lark与逐byte parser得到非零symbol mapping；真实Lark Earley和
  Parglare GLR在二叉歧义grammar上同时得到symbol与production mapping。另覆盖同
  span同shape多解拒绝、1500层显式栈、canonical state摘要篡改、artifact mapping
  count篡改、v14迁移、保存恢复和两套verifier。当前全量390项Python通过；LLVM lit、
  原生build、双solver与research evidence在最终门禁中复核；
- 学术定位与边界：该方法与grammar convergence中“先规范化、再建立结构关系”的
  思路一致，但这里只从已观测共同样本提取保守对应，不生成grammar transformation，
  不证明两个CFG语言等价，也不把低support mapping用于授权候选。正式研究必须报告
  support、歧义率、跨seed稳定性及holdout复现。Libmarpa官方bocage API虽为原生C
  紧凑forest，但公开accessor只有ambiguity/null指标，不能直接遍历packed graph，
  因而本轮不依赖其内部ABI。参考：
  [Recovering Grammar Relationships](https://ir.cwi.nl/pub/18063)、
  [Guided Grammar Convergence](https://arxiv.org/abs/1503.08476)、
  [Libmarpa bocage API](https://jeffreykegler.github.io/Marpa-web-site/libmarpa_api/latest/index.html)。
  当前等级 I/T/E。

## 230. F235：Bounded Exhaustive Parser-Language Differential Certificate（2026-07-28）

- 研究问题：F231--F234都由fuzzing实际产生的candidate采样，零disagreement仍不能
  排除未采样短串上的grammar差异。一般CFG等价不可判定；因此F235不声称解决无界
  等价，而是对研究者显式给出的有限byte alphabet和最大长度建立完整域证书；
- 实现：新增`util/parser_equivalence_audit.py`。Alphabet限制1--16个不同byte并
  canonical排序，枚举采用shortlex：先长度0，再按byte字典序。精确case数为
  `sum(|alphabet|^length, length=0..max_length)`，硬限制65536，避免把无法完成的
  天文域标为exhaustive。最大长度可到64，因此单byte alphabet仍可检查长链；
- 复用可信链：每个候选调用F231的无shell并发wrapper，随后把paired trace交给
  `VerifiedProposalManager._load_parser_trace`。两侧return code、accepted bit、
  candidate/command/trace digest、v1--v4结构、complete-SPPF provider proof和
  nullable certificate全部沿用既有复检。任一timeout、rc2、坏trace或manager拒绝
  使整个audit失败，不把未完成域写成complete；
- Artifact：`symcc-parser-bounded-equivalence-v1`携带proof
  `exhaustive-shortlex-byte-domain-v1`、规范alphabet、max length、case count、
  四象限、mismatch、命令摘要、全case transcript SHA-256、elapsed和最多256个
  shortlex反例。`minimal_counterexample`必须等于反例表首项；表截断显式记录。
  Artifact自带canonical SHA-256，独立`--verify`复检域基数、四格和、排序、反例
  域成员关系及`equivalent iff mismatches==0`；
- CLI语义：默认即使发现差异也成功写出研究工件；`--require-equivalent`在存在反例
  时返回1，内部/未完成错误返回2。这样CI可以把有限域一致作为gate，而探索性实验
  不会因发现有价值的反例丢失artifact；
- 自动化证据：fake parser在alphabet `{a,b}`、长度0--2的7个case上分别覆盖完全
  一致和5个secondary-only差异，验证空串为shortlex最小反例、截断、CLI 0/1/2、
  digest重算后的counter tamper、重复alphabet与超65536域拒绝。真实Lark Earley与
  Parglare GLR在`{a}^{0..3}`上完成4/4穷举，空串共同拒绝、其余3串共同接受；
- 顺带修复：Parglare 0.21.1在“不接受空输入”时，其错误消息构造会对空line list
  抛`IndexError`。Adapter仅对`candidate==b""`且精确异常文本执行已知兼容路径，
  输出普通negative proof trace；其他`IndexError`仍fail closed。新增empty-negative
  manager回归，避免掩盖一般内部错误；
- 学术定位：bounded equivalence、ambiguity与inclusion已有SAT-based研究；近期CFG
  (in)equivalence框架也明确一般问题不可判定，并组合canonization、理论子类和反例
  解释。F235当前是parser implementation级穷举，而不是grammar公式SAT编码；它适合
  CI小域和最短反例发现，正式语言等价仍需受支持grammar子类的证明器。参考：
  [Analyzing CFGs Using an Incremental SAT Solver](https://doi.org/10.1007/978-3-540-70583-3_34)、
  [Detecting and explaining CFG (in)equivalence](https://arxiv.org/abs/2407.18220)、
  [Comparison of CFGs from generated test data](https://ir.cwi.nl/pub/18555)。
  最终393项Python、111项LLVM lit、原生build、Ruff、全目录`py_compile`、
  `git diff --check`、依赖闭包和9份权威文档链接检查通过；Z3/cvc5各6/6
  String/BV conformance concrete-verified，research evidence v2验签通过。
  当前等级 I/T/E。

## 231. F236：Proof-Carrying Assumption-Conflict PSCache（2026-07-28）

- 研究问题：F32只持久化最终SAT model，F35只在helper内试探recent SAT assignment，
  尚未利用求解搜索中失败的输入赋值。PSCache原论文在CDCL冲突发生时把当前SAT
  assignment投影到已跟踪的输入bit，重建成bit-vector值，并将它附着到实际满足的
  path prefix或off-path branch。系统当前链接Ubuntu系统Z3 4.8.12，而不是仓库中的
  vendored Z3；直接修改私有SAT trail既不会进入当前binary，也会把实现绑定到不稳定
  ABI。因此F236实现backend-stable的assumption-conflict实例，并明确不把它称作原始
  CDCL trail hook；
- 冲突采集：persistent `symcc-query-solver`从当前concrete witness和未命中的cached
  assignment重建`input_offset == byte`假设，以`solver.check(assumptions)`检查完整
  prefix+target。只有结果为UNSAT且`solver.unsat_core()`包含至少一个输入假设时才
  产生`ConflictSolution`。公式本身UNSAT时，删除检查会把core降为空并丢弃，避免把
  assignment-independent矛盾伪装成输入冲突；
- Core证书：对Z3报告的assumption core执行受预算约束的deletion minimization。
  每次删除后仍UNSAT则永久删去该byte；SAT证明该byte在当前core中必要；unknown或预算
  耗尽保留byte但设置`core_minimal=false`。最终core必须再次返回UNSAT。Helper输出
  `symcc-solver-conflict-solution-v1`，包含完整输入投影、非空core投影、来源、
  `z3-assumption-unsat-core-v1`、proof check数和最小化状态；每请求最多64条；
- 输入重建与进程内复用：符号名继续沿用Query IR数字byte declaration，因而无需从
  私有bit-blast variable反查SMT AST。SAT model与冲突assignment统一进入有界、
  去重、move-to-front cache；后续命中仍必须在当前完整公式下由Z3返回SAT，任何
  conflict miss都不能推出新query UNSAT；
- Store二次验证：`QueryStore._validate_result()`严格检查schema、类型、offset
  canonical uniqueness、core非空、core为assignment同值子集、proof kind及
  `proof_verified=true`，并生成canonical certificate SHA-256。入库时再用源query
  的独立Query IR evaluator检查完整assignment确实使至少一个root为假；helper声称
  与Query IR求值不一致时拒绝写入。`proof_json`、provenance和source-verified bit
  随SQLite row持久化；
- Prefix/off-path索引：新增`query_literals`和`partial_solution_literals`。
  Query root被规范化为`(base expression hash, polarity)`；连续`lnot`通过翻转polarity
  消除，因此源query中不满足的正root可与后续query显式出现的反root共享identity。
  每个冲突assignment只连接它实际满足的signed literal；lookup先按literal overlap、
  再按旧clause overlap和recency排序。候选仍须满足目标query全部Query IR roots才写
  `async-partial-*`，manifest记录conflict provenance、source proof digest和两类
  overlap，不改变SAT/UNSAT result cache；
- 预算与遥测：新增`SYMCC_SOLVER_PSCACHE_CONFLICTS`、
  `CONFLICT_ASSIGNMENTS`、`CONFLICT_SOLUTIONS`、`CONFLICT_CORE_CHECKS`和
  `CONFLICT_TIMEOUT`。结果与QueryStore stats记录conflict checks、retained solutions、
  conflict partial rows和signed-literal links，可用于同CPU的Kp/core-budget消融；
- 自动化证据：真实系统Z3 helper测试证明`input[0]==0x42`在witness 0下得到单byte、
  deletion-minimal、两次复核的core，随后`0x40<=input[0]<=0x50`仍由cached 0x42
  命中；固有矛盾`input[0]==0x41 && input[0]==0x42`不会产生冲突记录。QueryStore
  测试证明冲突0可在另一个`input[0]==0`查询上经Query IR验证后物化，并拒绝core
  非子集、空core、未验证proof及canonical offset alias；
- 学术定位与边界：F236覆盖论文算法中的“冲突来源、输入值投影、prefix/off-path
  相关性、Kp式预算和快速验证”语义，并额外提供可复核core；但它观察的是显式输入
  assumptions导致的语义冲突，不是Z3 bit-blast CDCL每次BCP冲突时的内部
  `curModel`。因此可能收集更少、分布不同，仍需用公开benchmark比较命中率和
  coverage/CPU-hour。若未来构建自有Z3，应以版本化公开扩展接口接入SAT trail并保留
  F236为backend-neutral对照组。参考：
  [PSCache FSE 2024](https://doi.org/10.1145/3660817)、
  [公开论文PDF](https://zbchen.github.io/files/fse2024.pdf)、
  [Z3 solver assumptions/unsat-core API](https://z3prover.github.io/api/html/classz3_1_1solver.html)。
  当前等级 I/T/E。

## 232. F237：Proof-Carrying Backend-Neutral QF_BV Portfolio（2026-07-28）

- 研究问题：G06此前的`PortfolioSolver`能够并行运行多个helper并隔离SAT/UNSAT
  disagreement，但所有Query IR helper实际上仍是同一Z3实现或由使用者手写协议适配。
  这不足以证明cvc5/Bitwuzla等异构solver收到与Z3相同语义的公式，也没有在solver启动
  前声明operator/width/model/UNSAT能力。F237在QueryStore CAS边界实现独立QF_BV
  lowering和显式capability matrix，不复用`Z3_solver_to_string`产生的文本；
- Capability contract：新增`util/qf_bv_backend.py`和
  `symcc-qfbv-capability-v1`。合同规范化logic、38类Query IR operator、
  `max_bits/max_nodes/max_input_bytes`、`model_values`和`accept_unsat`，并绑定
  canonical SHA-256。未知operator、越界或非规范合同在启动外部进程前fail closed。
  `accept_unsat`默认false；未授权后端的UNSAT只作为`backend_status=unsat`遥测，
  顶层结果降为unknown，因此不能进入UNSAT subset cache；
- Sort/shape proof：content-addressed expression DAG由roots递归加载，lowerer拒绝cycle、
  missing node、错误arity、Bool/BV混用、宽度不匹配、越界extract、窄化extension、
  非8-bit input read和非Bool root。Concat/extract/extension、算术、signed/unsigned
  division/remainder/comparison、bitwise/logical、shift、ITE与variable rotate均直接
  降到标准QF_BV；rotate显式用`bvurem`规范化shift，不依赖solver私有扩展；
- Lowering certificate：`symcc-qfbv-lowering-v1`绑定query ID、root/reachable-node数、
  每operator精确计数、最大位宽、input-offset集合摘要、capability摘要、最终SMT-LIB
  摘要、sort验证bit和`get-value` model protocol。QueryStore重新计算两个证书摘要，
  检查operator计数和node总数、operator属于advertised set、所有计数/宽度落在合同
  上限内，并拒绝重算hash后的内部字段篡改；
- 模型可信链：`SmtLibQfbvSolver`对每个8-bit input symbol发出标准
  `(get-value (...))`，有界S-expression parser接受`#x/#b/(_ bvN 8)`三种标准值。
  缺失、重复域外值、响应过大、非法status或进程错误均不产生SAT。得到完整assignment
  后，adapter先patch当前witness并用Query IR evaluator检查全部prefix+target roots；
  `QueryStore.complete()`再从CAS独立加载表达式，对最多4096个source witness重复验证。
  只有两次都通过才允许`backend_model_verified=true`的SAT进入result/candidate cache；
- Portfolio接入：`SYMCC_QUERY_SOLVER_PORTFOLIO`新增
  `kind=smtlib-qfbv`，command支持`{query}`/`{timeout_ms}`内嵌placeholder。
  该kind固定one-shot；原有`kind=symcc-json`继续支持persistent prefix server。
  Attempt telemetry新增backend kind、capability status、model/UNSAT authorization、
  capability/lowering digest和bounded reason；原有disagreement=>unknown边界不变；
- 自动化证据：`test/test_qf_bv_backend.py`的7项测试覆盖canonical capability与
  S-expression model、缺失byte拒绝、pre-launch capability rejection、portfolio
  config、真实cvc5 1.1.2 SAT模型双验证、UNSAT未授权/授权差分、assignment篡改与
  重算certificate hash后的operator-count篡改。完整operator matrix在同一真实cvc5
  query中覆盖全部38类IR operator并得到`input[0]=0x42,input[1]=0x03`，随后由独立
  evaluator复检；
- 学术定位与边界：这完成了G06的backend-neutral QF_BV语义和capability基础层，
  不是完整SMTgazer。当前环境有cvc5 1.1.2但没有Bitwuzla executable，因此Bitwuzla
  仅有标准命令配置和未执行适配路径，不宣称实机conformance。外部UNSAT授权仍是
  experiment trust choice，不是proof object；未来应增加proof/checkable core或
  至少Z3/cvc5/Bitwuzla consensus实验。本阶段Backend为one-shot；F238--F242后来补
  persistent context、X-means/BIC、ensemble/BO及SAT-gated cancellation，但尚无
  native solver API interrupt或跨worker clause transport。参考：
  [SMTgazer ASE 2025](https://conf.researchr.org/details/ase-2025/ase-2025-papers/47/SMTgazer-Learning-to-Schedule-SMT-Algorithms-via-Bayesian-Optimization)、
  [SMT-LIB 2.7](https://smt-lib.org/papers/smt-lib-reference-v2.7-r2025-02-05.pdf)、
  [cvc5 CLI/SMT-LIB quickstart](https://cvc5.github.io/docs/latest/binary/quickstart.html)、
  [Bitwuzla CLI](https://bitwuzla.github.io/docs/binary.html)。
  最终402项Python、112项LLVM lit、原生build、Ruff、全目录`py_compile`、
  `git diff --check`和依赖闭包均通过；Z3/cvc5各6/6 String/BV conformance及
  research evidence验签保持通过。
  当前等级 I/T/E。

## 233. F238：Prefix-Keyed Persistent SMT-LIB QF_BV Contexts（2026-07-28）

- 研究问题：F237的一次性异构backend消除了Z3 printer依赖，但每个query仍重复启动
  solver、解析相同prefix。G01已有prefix key和Z3 helper push/pop复用；若cvc5路径
  不能共享相同语义单位，异构portfolio的进程开销会掩盖solver互补性。F238新增
  `PersistentSmtLibQfbvSolver`，在不依赖cvc5/Bitwuzla语言绑定的前提下使用标准
  interactive SMT-LIB增量命令；
- 精确context ownership：每个content-addressed `prefix_key`独占一个solver process，
  context记录规范prefix-term digest与已声明input offsets。首次请求声明当前完整
  input集合并永久assert prefix roots；后续同prefix target仅执行
  `push 1 -> assert target -> check-sat/get-value -> pop 1`。新target使用新offset时，
  declaration在push外增加，不改变prefix可满足语义。Prefix key与重新lower的term
  digest不一致时销毁context并返回error，不依赖hash名字猜测等价；
- 有界进程池：`prefix_cache`默认4、范围1--64，以LRU回收完整process而不是在一个
  solver中用`reset`伪造多context。这样每个prefix的assertion stack互不污染；
  telemetry沿用`prefix_cache_hit/entries`并新增
  `smtlib-prefix-process-push-pop-v1` context protocol。每个worker/backend持有独立
  pool，尚不做跨worker共享；
- Framing与恢复：每次请求附加唯一SMT-LIB `echo` marker，后台reader在8 MiB边界内
  读取到marker，故多行`get-value`和UNSAT后的error响应不会与下一请求串包。外部
  wall-clock deadline独立于solver方言；timeout会terminate/kill并移除单个prefix
  process。EOF、broken pipe、非法初始化响应和超大输出也销毁context；下一请求冷建，
  不复用可能已失步的solver；
- Capability与配置：`symcc-qfbv-capability-v1`新增canonical
  `incremental` Boolean，默认false。`persistent=true`必须同时声明
  `incremental=true`，且interactive command禁止`{query}/{timeout_ms}` placeholder。
  Query service用`ExitStack`保证worker退出时关闭全部process；one-shot F237路径保持
  不变。旧F237 v1 artifact缺少该可选字段时按false及其原始摘要验证，避免协议扩展
  破坏已有result store；
- 可信边界：F238从F237同一次strict lowering取得prefix/target terms，完整formula
  lowering certificate仍绑定所有roots和最终标准SMT-LIB。每个增量SAT继续执行adapter
  evaluator与QueryStore CAS evaluator两级模型复核；UNSAT仍受显式
  `accept_unsat`控制，portfolio disagreement仍降为unknown。Context cache只优化
  解析与prefix assertion，不提供新的证明权限；
- 自动化证据：真实cvc5 1.1.2在容量1的pool上依次运行`prefix=true,target=rol`
  的两个query，第二次精确命中并恢复`0x43`；切换到不同UNSAT prefix触发LRU驱逐，
  再切回原prefix的新target为cold miss并恢复`0x44`。独立fake interactive solver
  在首个check写marker后挂起，外部1 ms query budget触发kill和cache清空；同一lease
  第二次调用冷启成功并恢复`0x42`。定向文件现有9项测试，且ResourceWarning提升为
  error时仍无process/pipe泄漏；
- 学术定位与边界：该设计提供backend-neutral exact-prefix incremental baseline，
  但每个prefix一个OS process的内存成本高于原生API多context或可持久化clause数据库。
  它不迁移learned clauses，也不支持跨prefix solver state subsumption。F242后来
  补充process-group cancellation与cold context recovery，但不是native API
  interrupt。下一阶段应测量cache hit/RSS/CPU后决定
  是否实现单process replay stack、native cvc5/Bitwuzla API adapter或跨worker
  context transport。参考：
  [SMT-LIB 2.7](https://smt-lib.org/papers/smt-lib-reference-v2.7-r2025-02-05.pdf)、
  [cvc5 incremental quickstart](https://cvc5.github.io/docs/latest/binary/quickstart.html)。
  最终404项Python、112项LLVM lit、原生build、Ruff、全目录`py_compile`、
  `git diff --check`、依赖闭包和9份权威文档链接检查通过；Z3/cvc5各6/6
  String/BV conformance及research evidence验签保持通过。
  当前等级 I/T/E。

## 234. F239：Proof-Carrying X-means/BIC Censored Sequence Prior（2026-07-28）

- 研究问题：原`SMTAlgorithmScheduler`把“样本数至少16且最大轴方差超过阈值”称为
  online X-means-style，但它不保存实例、没有k-means refinement或BIC model
  selection，也只能按cluster/arm在线Thompson采样。`offline_policy.py`能够对全局
  constant action做SNIPS/DR门控，却不能学习context-specific solver sequence。
  F239把两条链分开：在线调度继续保持低开销，离线工具
  `util/smt_sequence_training.py`产生可复现、可独立复算的上下文先验；
- 统一特征合同：`symcc-smt-context-features-v1`与在线调度器使用相同9维有界向量：
  bias、`log1p(input_bytes)`、difficulty、timeout ratio、solver-unknown ratio、
  dependency ratio、data uncertainty、branch pressure和targeted bit。轨迹记录新增
  `solver_unknown_ratio/branch_pressure/timed_out`；旧JSONL缺字段时按保守默认值
  加载，schema 1保持兼容；
- 有界X-means/BIC：从单簇开始，对每个可分簇沿最大方差轴选择确定性极端种子，
  执行最多256轮Lloyd二均值；child均须达到`min_cluster_size`。Parent与two-child
  spherical-Gaussian mixture分别计算含mixing/variance/centroid参数罚项的BIC，
  仅当gain严格超过margin时接受全局最佳split，最多32簇。相同输入、参数和轨迹产生
  byte-identical artifact；退化同点簇不会被虚假拆分；
- 删失目标与保守门控：每条明确`timed_out`或`killed`记录按`2*assigned timeout`
  收取PAR-2（F240前的旧轨迹无stage budget时回退全局timeout），
  其他cost截断到同一上界；utility为interference-adjusted reward减去归一化log-cost。
  每个cluster/action使用有界inverse-propensity weights，计算ESS、局部utility、
  PAR-2均值与标准误，再以全局action estimate做经验Bayes shrinkage。只有raw
  samples、ESS和lower confidence bound同时达到门槛才输出sequence；无支持簇输出
  空建议，绝不强制一个未证实arm；
- Proof-carrying artifact：`symcc-smt-sequence-policy-v1`绑定完整trajectory的
  canonical摘要、action set、特征/目标/训练schema、训练参数、centroid/SSE/member
  digest、全部split trial与最终BIC。每个estimate封存weight sum/squared-weight、
  raw utility sum、加权utility一/二阶矩和加权PAR-2和。验证器独立重算BIC、ESS、
  局部/收缩utility、标准误、LCB、support bit、recommendation、cluster/global
  behavior与样本/删失总数；只改外层摘要或修改内部数值后重算摘要均不能绕过这些
  一致性检查。这是自洽计算证书和内容完整性，不是对训练数据来源的数字签名；
- 在线接入：`SYMCC_SMT_ALGORITHM_PRIOR=<artifact>`在scheduler启动时fail closed
  加载；action必须属于当前受限sequence space。若当前没有
  `OfflinePolicyController`显式建议，nearest verified centroid的supported sequence
  才成为原有90%利用/10%探索的偏好；活动中的多stage sequence不被中途改写。
  assignment记录artifact SHA-256、cluster和建议，state/benchmark记录建议数、
  实际命中数与match rate。更换artifact时历史prior计数不会错误继承；
- 自动化证据：7项新测试覆盖双峰轨迹稳定产生两个互补建议、同点BIC拒绝、
  killed记录精确收取`2T`、小样本不建议、摘要篡改和重哈希BIC篡改拒绝、verified
  prior仅作为在线偏好、损坏artifact忽略以及train/verify CLI。另以500条确定性
  随机轨迹构造8簇/28次split trial，制品通过全量独立复算。最终411项Python、
  113项LLVM lit、原生build、Ruff和定向`py_compile`通过；
- 学术定位与边界：F239实现了SMTgazer公开描述中的X-means实例分组、删失cost-aware
  sequence学习接口和保守online prior，但估计器是IPS+empirical-Bayes LCB，不是论文
  dataset-level Bayesian optimization，也没有boosting/bagging surrogate。Logging
  policy的残余confounding、cluster drift和跨benchmark迁移仍须以holdout和同CPU
  confirmatory campaign测量。F240已继续实现可消融的bagged/boosted surrogate与
  budgeted sequence optimizer；仍需fixed-version Bitwuzla conformance、
  Z3/cvc5/Bitwuzla equal-budget corpus。F241已继续实现schedule-level Bayesian
  acquisition，F242已实现SAT-gated running-attempt cancellation，但真实holdout
  效果仍待测量。参考：
  [SMTgazer ASE 2025](https://conf.researchr.org/details/ase-2025/ase-2025-papers/47/SMTgazer-Learning-to-Schedule-SMT-Algorithms-via-Bayesian-Optimization)、
  [X-means](https://www.cs.cmu.edu/~dpelleg/download/xmeans.pdf)、
  [PAR-2 in SAT competition evaluation](https://satcompetition.github.io/2024/rules.html)。
  当前等级 I/T/E；尚无覆盖率提升的R级声明。

## 235. F240：Bagged/Boosted Censored-Cost Budgeted Sequence Optimizer（2026-07-28）

- 研究问题：F239能为每个X-means context选择一个已有sequence，但SMTgazer的核心是
  把互补算法组织成共享预算内的sequential portfolio，并用bagging/boosting增强
  surrogate泛化。现有轨迹是带propensity的单action观察，不包含每个instance对所有
  action的完整反事实矩阵；直接把未观察结果当失败会产生选择偏差。F240新增
  `util/smt_sequence_optimizer.py`，明确采用受限监督surrogate，而不声称恢复了无偏
  virtual-best matrix；
- 三目标删失模型：每个action分别学习`completion`、`par2_ratio`和
  interference-adjusted `reward`。明确timeout/kill为completion 0；新轨迹还记录
  `solved`，旧轨迹缺失时仅以非删失作为兼容近似。F239的stage-aware objective现读取
  `budget_sec`：删失action按`2*stage_budget`计费，再相对全局campaign timeout
  归一化，避免15秒stage错误收取60秒PAR-2；
- 确定性ensemble：不新增NumPy/scikit-learn依赖。每个target训练3--32棵由稳定
  SHA-256 seed驱动的bootstrap shallow CART；每棵树在9维context上以weighted SSE
  选择至多32个确定性threshold。另以1--32轮residual tree和0.01--1.0 shrinkage做
  gradient boosting。两路预测等权融合；bag variance与boost residual RMSE构成
  uncertainty。树深最多5、每leaf最少2、action最多沿用F239的32类边界；
- 保守schedule评价：completion使用LCB，cost使用UCB，reward使用LCB。候选stage
  预算来自离散fraction并四舍五入为真实整数秒；同action不重复，总预算不超过全局
  `T`。期望PAR-2显式保留未解概率的`2T`尾罚，再与reward LCB形成可配置目标。
  `budgeted-sequence-beam-search-v1`最多8 stage、beam 4--1024；只有multi-action
  objective至少比最佳single改善门槛时才升级，否则保守退化为single；
- 全局与局部优化：同一ensemble同时在全部X-means centroid（按cluster样本加权）
  上生成dataset-level schedule，并为每个cluster单独生成localized schedule。模型
  样本不足的action不进入搜索。互补synthetic corpus中，两个action分别只解决一个
  context；优化器选择两个15秒stage，objective严格优于任一single。一个action不足
  门槛时只产生支持充分的single schedule；
- Sealed artifact与复算：`symcc-smt-sequence-ensemble-policy-v1`嵌入完整verified
  F239 base artifact，绑定trajectory/base摘要、配置、modeled action、所有CART/
  residual tree、cluster centroid和global/local schedule。验证器检查tree深度、
  node/sample守恒、boost root weight、target bounds、模型样本与F239 IPS weight，
  然后从sealed model和context重新运行全部beam search，逐字段复算candidate count、
  best-single、objective、PAR-2、reward、unsolved probability与最终schedule。
  它证明“所封模型推出所封schedule”，不证明模型等于未观察反事实；
- 可执行在线协议：同一`SYMCC_SMT_ALGORITHM_PRIOR`可加载F239或F240 schema。F240
  schedule绑定到seed replay；90/10探索若偏离建议则不推进，命中后推进到下一action。
  每个action内部原有multi-stage progression先完成，再进入schedule下一action。
  `SYMCC_ALGORITHM_BUDGET_SEC`由worker在1..global timeout内规范化后传给真实
  `ExecutorPortfolio.resolve()`，不是只写遥测。State/benchmark新增prior kind、
  budgeted assignment和schedule completion计数；
- 轨迹可辨识性：`OfflinePolicyController.observe()`新增bounded `instance_id`、
  `solved`和`budget_sec`。MPI使用输入content SHA-256作为instance ID，并修复此前
  semantic fallback过早`pop`该hash导致后续策略轨迹拿不到identity的问题。这为未来
  paired action matrix与doubly-robust sequence estimator提供稳定连接键；
- 自动化证据：`test/test_smt_sequence_optimizer.py`的5项测试覆盖确定性互补schedule、
  under-supported action排除、摘要/重哈希模型篡改、跨replay预算推进和CLI
  train/verify；`test_offline_policy.py`新增censor/instance/budget协议测试，F239
  PAR-2测试改为5秒stage在10秒全局预算下精确收取10秒。完整门禁为417项Python、
  114项LLVM lit、Z3/cvc5各6/6 concrete conformance、research evidence、Ruff、
  源码边界`py_compile`、pip和文档链接检查；
- 学术定位与边界：ASE 2025公开摘要明确SMTgazer使用dataset-level hyperparameter
  optimization、X-means及boosting/bagging surrogate；F240覆盖ensemble和可执行
  budgeted sequence search，但搜索器是确定性bounded beam search，不是论文的
  Bayesian acquisition loop。单臂logging仍可能有unmeasured confounding；executor
  route的额外timeout scale也需在实验manifest中固定。F241已继续实现
  expected-improvement式SMBO及exhaustive诊断，F242已补SAT-gated cancellation；
  下一步做cost-matched beam/SMBO holdout对拍、Bitwuzla和equal-CPU公开campaign。
  参考：
  [SMTgazer ASE 2025](https://conf.researchr.org/details/ase-2025/ase-2025-papers/47/SMTgazer-Learning-to-Schedule-SMT-Algorithms-via-Bayesian-Optimization)、
  [XGBoost](https://doi.org/10.1145/2939672.2939785)、
  [Random Forests](https://doi.org/10.1023/A:1010933404324)。
  当前等级 I/T/E；无R级效果声明。

## 236. F241：Bounded Expected-Improvement Schedule SMBO（2026-07-28）

- 研究问题：F240使用beam按当前surrogate objective直接排序，不能表达“在严格优化
  预算下优先评估不确定但可能改进的schedule”。F241新增
  `util/smt_schedule_smbo.py`，在封存的F240 global/per-cluster action模型上构造
  schedule-level sequential model-based optimization。该层研究优化器的样本效率，
  不把F240的观察性模型当作真实反事实oracle；
- 有界搜索空间：action顺序、整数秒预算和stage位置共同编码为
  `1 + L*(|A|+1)`维固定向量。候选池始终包含全部single-action/budget基线，枚举
  有序双action组合，并以稳定SHA-256 seed采样更长且不重复action的schedule；
  `max_candidates<=4096`、`max_schedule_length<=8`、总stage预算不超过campaign
  timeout。候选上限或评估预算无法容纳全部single基线时fail closed，防止基线被
  排序截断；
- Sequential acquisition：固定初始设计包含所有single基线及确定性hash选出的补充
  点。此后仅用已观测schedule训练3--16棵bootstrap shallow CART和1--16轮residual
  boosting；bag variance与residual RMSE合成预测标准差。最小化目标使用解析
  `EI=(f_best-mu-xi)Phi(z)+sigma*phi(z)`，每轮确定性选择最大EI并惰性调用一次
  sealed objective，最多512次selection evaluation。未选候选的目标在acquisition
  完成前不会计算或读取；
- 诊断隔离：选择结束后才对完整候选池计算post-hoc oracle，用于报告
  `simple_regret`。Artifact分别记录`evaluations`和
  `posthoc_oracle_evaluations`，因此oracle成本不会被伪装进优化预算，也不能影响
  acquisition trace。正式cost-matched实验应关闭或在两组都等价收取该诊断成本；
- Proof-carrying replay：`symcc-smt-schedule-smbo-policy-v1`嵌入完整verified F240
  artifact，绑定trajectory/ensemble摘要、候选池摘要、初始设计、逐轮预测均值、
  uncertainty、EI、incumbent转移、观测目标、global和每个X-means cluster的最终
  schedule。验证器先复核F240树和beam证书，再从封存模型、配置和稳定seed重放完整
  SMBO与post-hoc oracle；只改摘要或修改trace后重算外层摘要均被拒绝；
- 在线执行：scheduler在F239、F240 loader之后识别F241 schema，转换为同一
  `EnsembleSequencePrior`执行合同，但保留
  `prior_kind=smbo-expected-improvement-sequence`。nearest cluster schedule仍只占
  90% preference，跨seed replay推进，并通过F240已有
  `SYMCC_ALGORITHM_BUDGET_SEC`控制真实worker timeout；F241没有扩大UNSAT或模型信任
  权限；
- 自动化证据：5项专项测试覆盖二action且`max_schedule_length=3`的候选边界、严格
  6次评估/4点初始设计与确定性trace、EI的确定/不确定极限、摘要及重哈希trace篡改、
  online loader/budget/kind和train/verify CLI。F239/F240与scheduler定向回归保持
  通过；完整门禁为422项Python、115项LLVM lit、Z3/cvc5各6/6 concrete
  conformance、research evidence、Ruff、源码边界`py_compile`、依赖闭包、
  `git diff --check`和9份权威文档本地链接；
- 学术定位与边界：该实现落实SMTgazer公开描述中的dataset-level Bayesian
  optimization方向，但surrogate是确定性bagged/boosted CART近似，目标来自F240
  action surrogate，并非对真实solver schedule逐点昂贵采样；也不声称复现论文的
  私有搜索空间或训练代码。下一步必须在holdout query corpus上做beam与SMBO
  cost-matched simple-regret/PAR-2/CPU消融。F242已继续实现running-attempt
  cancellation；剩余fixed-version Bitwuzla对拍、feature schema v2和
  native/cross-worker context transport。参考：
  [SMTgazer ASE 2025](https://conf.researchr.org/details/ase-2025/ase-2025-papers/47/SMTgazer-Learning-to-Schedule-SMT-Algorithms-via-Bayesian-Optimization)、
  [Efficient Global Optimization](https://doi.org/10.1023/A:1008306431147)。
  当前等级 I/T/E；尚无R级solver或coverage效果声明。

## 237. F242：SAT-Gated Bounded-Consensus Portfolio Cancellation（2026-07-28）

- 研究问题：F34把同一query的solver attempts并行化，但`ThreadPoolExecutor`上下文
  会等待全部Future，所谓race没有winner早停；one-shot helper由`subprocess.run`
  隐藏进程句柄，persistent helper也没有query-scoped interrupt。尾部慢solver因此
  继续消耗CPU。直接在首个结果后全取消又会破坏现有SAT/UNSAT disagreement边界；
- 保守触发规则：F242新增显式
  `SYMCC_QUERY_SOLVER_PORTFOLIO_CANCEL_GRACE_MS=-1..60000`。默认`-1`完全保持旧的
  all-attempt collection；非负值仅在首个SAT后启动bounded consensus grace。
  UNSAT永不触发早停，仍等待全部attempt。Grace内出现SAT/UNSAT冲突仍返回unknown；
  grace结束后才取消未完成attempt。被早停SAT仍必须通过QueryStore的完整Query IR
  candidate复核，复核失败不会缓存模型，但可能损失一个较慢的有效fallback，这是
  明确的完整性/CPU权衡而非证明权限扩大；
- Future与进程两级取消：`PortfolioSolver`先取消尚未启动的Future，再对running
  backend的`cancel(lease)`协议发query-scoped interrupt。JSON和QF_BV one-shot
  backend均改为持有active `Popen`，使用独立process session并对整个process group
  先发SIGTERM、200 ms后升级SIGKILL，避免只杀wrapper而遗留solver child；
- Persistent恢复：persistent JSON server以I/O lock防止多service job交错line
  protocol，以独立state lock允许cancel线程在阻塞`readline`时终止process group；
  下一query检测dead server并cold respawn。Prefix-persistent QF_BV在每个framed
  `_request`登记active context，cancel使reader解阻、将该prefix context从LRU删除，
  下一次严格cold rebuild；不会把被中断的assertion stack继续复用；
- 可审计结果：portfolio attempt新增`cancelled/cancel_reason`，portfolio新增
  `cancellation_enabled/cancel_grace_ms/cancel_requested/cancelled_attempts/
  consensus_complete`。QueryStore stats新增`portfolio_cancel_requests`、
  `portfolio_cancelled_attempts`和`portfolio_incomplete_consensus`。`cancel_requested`
  与实际cancelled分开，因不支持cooperative cancel的自定义callable仍会被等待；
- 自动化证据：QueryStore新增3项测试覆盖真实5秒one-shot helper在1秒内被进程组
  中断、100 ms grace捕获快速SAT/UNSAT冲突、persistent JSON helper被取消后cold
  respawn；QF_BV新增2项测试覆盖one-shot interrupt及incremental prefix context
  drop/rebuild。所有测试以`ResourceWarning`为error，验证pipe/process回收；高并发
  lit曾触发process登记前cancel竞态，修复为query-level sticky cancellation并将两组
  进程测试各重复10次。最终427项Python、115项LLVM lit、Z3/cvc5各6/6、Ruff、
  `py_compile`、依赖闭包、research evidence、diff和9份文档链接门禁通过；
- 学术定位与边界：这是SAT-gated speculative portfolio early stopping和bounded
  cross-check window，不是完整solver consensus，也不是learned clause sharing。
  正式实验应对`-1/0/10/50/200 ms`报告wall time、solver CPU、cancel success、
  incomplete consensus、invalid SAT、disagreement、PAR-2和coverage/CPU-hour。
  下一步是fixed-version Bitwuzla实机对拍和context feature schema v2；只有同CPU
  结果支持时再投入native/cross-worker clause/context transport。当前等级 I/T/E。

## 238. F243：Query-IR Structural Context Feature Schema v2（2026-07-28）

- 研究问题：F239--F241此前只按输入长度、历史难度、timeout、unknown、dependency、
  data quality、branch pressure和target bit学习sequence。同为64-byte输入时，
  “线性byte equality”和“大型宽位非线性/shift/concat DAG”可能落入同一context，
  无法让SMTgazer式模型识别solver互补性。F243把已经存在于Query IR的结构信号接入
  实际runtime telemetry、MPI轨迹、在线cluster和全部离线artifact，而不是只在训练
  脚本中构造不可观测特征；
- 零额外遍历的数据生产：QSYM `Solver::exportQuery()`原本已经为序列化执行一次
  后序DAG遍历。F243在同一node loop内计算每个成功query的node count、不同
  `ReadExpr` input offset数、最大bit width，以及comparison、nonlinear arithmetic、
  bitwise/shift/rotate、structural/control四组operator count。只有Query IR临时文件
  原子rename成功后才提交执行级累积量；失败/过大/不可lower的export不会污染训练
  样本。`solver_telemetry.json`新增七个`query_ir_*`计数，Python
  `SolverTelemetry`自动做非负规范化并声明`query_ir_structure` capability；
- Schema v2：`symcc-smt-context-features-v2`在原9维prefix合同后追加7维，共16维：
  per-export mean node和input规模的`log1p/16`、最大width的`log2(bits+1)/16`，
  以及四个operator-group count除以总node count的比例，全部截断到`[0,1]`。
  用per-query均值避免一个执行导出更多branch query时仅因数量变大而改变结构规模；
  operator比例保留shape而不重复编码DAG大小。没有Query IR或未启用spool时追加维度
  全为0，旧engine仍能参与调度；
- 端到端传播：`OfflinePolicyController`把query数、node/input/width和四组直方图写入
  schema-1 trajectory context；`SMTAlgorithmScheduler.context()`使用同一
  `context_feature_vector()`实现，避免在线/离线公式漂移。完成一次seed replay后，
  16维结构context写入`seed_contexts`，用于该seed后续action选择；cold seed使用
  原9维默认值加7个0，不虚构尚未观察的query shape；
- 向后兼容迁移：artifact顶层policy schema保持不变，feature schema精确区分v1的
  9维和v2的16维。验证器只接受这两个完整的name/dimension/ordered-feature合同，
  从artifact自身维数重算centroid、SSE、每轮BIC、CART feature index和F240/F241
  schedule replay。旧v1 artifact摘要无需重写即可继续验证；新scheduler向旧prior
  传递context时确定性截取前9维。旧online state中的9维centroid/m2在加载时追加7个
  0；v2 prior遇到旧9维调用则补0。其他维数、乱序feature名、NaN或越界向量均
  fail closed；
- F240/F241合同：F240的base policy、ensemble feature schema和tree verifier必须
  三者维数一致；loader把受信dimension带入`EnsembleSequencePrior`。F241嵌入并
  复验F240 artifact，loader同样传播dimension/schema，因此既可执行历史9维
  SMBO制品，也可执行新16维制品，不把未知schema猜成当前版本；
- 自动化证据：新增/扩展测试覆盖16维数值公式与边界、真实9维F239 artifact的摘要
  验证及16→9在线投影、真实9维F240 ensemble的树复检/加载/调度、旧scheduler state
  的9→16迁移、runtime telemetry capability、离线轨迹字段和在线context。
  `test/query_ir.c`通过编译后的QSYM程序确认一个真实32-bit comparison query导出
  node/input/width/comparison计数；C++ runtime重新构建通过。专项Python共75项。
  最终434项Python、115项LLVM lit、Z3/cvc5各6/6 String/BV conformance、
  research evidence双family复检、Ruff、源码边界`py_compile`、依赖闭包、
  `git diff --check`和文档链接门禁通过；
- 学术定位与边界：四组histogram是有界、可解释的结构摘要，不是完整SMT AST
  embedding；它无法区分组内operator、DAG depth、shared-subterm topology或
  bit-blast clause规模。结构特征来自成功Query IR export，因此禁用query spool的
  campaign只有零值。下一步应在holdout query corpus做v1/v2 paired消融，报告
  cluster stability、action entropy、Brier/calibration、PAR-2、solver CPU和
  coverage/CPU-hour；在这些证据之前不声明调度性能提升。当前等级 I/T/E。

## 239. F244：Fixed-Version Bitwuzla QF_BV Conformance Evidence（2026-07-28）

- 研究问题：F237已经从CAS Query IR独立lower全部38类QF_BV operator，并由cvc5
  1.1.2完成模型双验证和UNSAT trust差分，但此前Bitwuzla只有未执行的配置示例。
  “命令格式看起来兼容”不能作为异构solver证据；版本漂移、不同二进制、模型parser
  差异或UNSAT默认授权都可能使portfolio的可信边界与文档不一致；
- 固定依赖身份：新增`benchmark/install_bitwuzla_0_9_1.sh`，固定官方Bitwuzla
  0.9.1 tag对应commit
  `8d1eb01093ae54d9b4586456b69c3bf31000a4c2`。脚本检查Meson/Ninja/pkg-config、
  GMP >= 6.3与MPFR >= 4.2.1，执行release/no-Python/no-testing构建，并在安装后
  精确检查`bitwuzla --version == 0.9.1`。本次实机构建使用CaDiCaL 2.1.2及
  upstream固定SymFPU commit `40bdec00...`；安装二进制SHA-256为
  `7a46a4be317a2df6d9a76b2c63971e02e25a868606a40b87e41454cccb5a48bc`；
- 单一规范矩阵：新增`util/qf_bv_conformance.py`，把原测试内的operator matrix
  提升为可复用生产构造器。公式同时包含`read/bool/constant`、结构、算术、signed/
  unsigned div/rem与比较、逻辑、shift/rotate、`ite`等全部38类当前operator，并有
  唯一期望input模型`{0:0x42,1:0x03}`。F237真实cvc5测试改用同一构造器，避免测试
  matrix和正式证据日后漂移；
- 三重可信探针：每个backend执行同一SAT matrix，并经过adapter的完整Query IR
  candidate validation与`QueryStore.complete()`从CAS进行第二次验证；随后对
  `x==0x42 && x==0x43`执行两次UNSAT。`accept_unsat=false`必须保留
  `backend_status=unsat`但对外返回`unknown`，`accept_unsat=true`才可返回
  authorized `unsat`。三项case都绑定完整capability和lowering certificate，
  verifier从规范envelope重建content-addressed query ID并重新lower，逐字段比较
  operator count、sort、input set、width、SMT-LIB与capability摘要；
- 版本化可重放证据：`symcc-qfbv-backend-conformance-v1`记录精确command、
  version command/output、期望/实际版本、解析后的绝对executable、二进制SHA-256、
  三项result、证书和store completion。`artifact_sha256`封存完整运行，
  `semantic_sha256`排除时间戳、elapsed和本机binary path/hash，用于不同运行环境的
  语义对拍。离线`--verify`不启动solver；`--replay`先验签原artifact，再按封存
  command重跑并要求语义摘要一致。未知版本、缺失binary、乱序/修改证书、模型或
  trust结果均fail closed；
- 实机结果：checked artifact
  `benchmark/evidence/qfbv_conformance_f244.json`最初绑定cvc5 1.1.2与Bitwuzla
  0.9.1；F245建立三solver campaign时又把系统Z3 CLI 4.8.12加入同一前置证书。
  三者均为38/38 operator、SAT模型双验证通过、未授权UNSAT=`unknown`、授权
  UNSAT=`unsat`。当前artifact摘要为
  `dfe1fff43ac2fc7b077a8e51bb7cdfb667e33bf25dce91e747d096093a0a830f`，
  跨运行语义摘要为
  `78e66d0aceb2038d54fe3b88348070c28bb3eea7f04a193d390d3179f34cb856`；
  5项新测试覆盖精确operator surface、配置约束、真实Bitwuzla、内层篡改后重哈希
  拒绝、语义重放和CLI离线验签；QF_BV两文件共16项专项测试通过。安装脚本另在
  `/tmp` clean prefix完成222步编译、安装、精确版本与相同binary SHA复核。最终
  439项Python、116项LLVM lit、Z3/cvc5各6/6 String/BV concrete conformance、
  cvc5/Bitwuzla QF_BV artifact及semantic replay、双family research evidence、
  原生build、Ruff、源码`py_compile`、依赖闭包、三层diff和文档链接门禁通过；
- 学术定位与边界：该证据证明固定版本Bitwuzla能执行当前Query IR lowering合同，
  不是Bitwuzla比cvc5/Z3更快，也不证明UNSAT跨solver consensus。正式性能结论仍需
  equal-CPU、disjoint holdout query corpus，比较单solver、顺序/并行portfolio、
  F240/F241 schedule与F242 cancellation，并报告PAR-2、solver CPU、invalid model、
  disagreement及coverage/CPU-hour。当前one-shot conformance也不替代native
  incremental API、proof-producing UNSAT或跨worker clause/context transport。
  参考官方
  [0.9.1 release/tag](https://github.com/bitwuzla/bitwuzla/releases/tag/0.9.1)、
  [安装要求](https://bitwuzla.github.io/docs/install.html)和
  [CLI合同](https://bitwuzla.github.io/docs/binary.html)。当前等级 I/T/E。

## 240. F245：Sealed Paired QF_BV Holdout Campaign（2026-07-28）

- 研究问题：F239--F243已经有sequence learner、SMBO和结构特征，F244也证明了
  backend adapter语义，但项目仍没有一个能把真实Query IR固定分成不相交train/
  holdout、逐query等资源执行多个solver并独立复核配对统计的工具。直接从日志挑
  “有趣query”或比较不等query数/timeout会造成selection bias；只记wall time又会
  隐藏多进程/二次确认的CPU成本；
- Sealed corpus：新增`util/qf_bv_campaign.py`及
  `symcc-qfbv-corpus-split-v1`。输入支持单JSON、JSON list/`queries` bundle、
  JSONL或目录中的`*.query.json`，最多4096 query/256 MiB。每个完整envelope被
  嵌入artifact并绑定SHA-256；QueryStore重新ingest得到content-addressed query ID，
  再用`accept_unsat=true`预lower并绑定certificate摘要。不允许重复query ID。
  `SHA256(split_seed:query_id) mod N`决定train/holdout，行按query ID排序；verifier
  从零重建CAS、lowering与split，修改envelope、membership或摘要后重哈希仍被拒绝；
- Solver identity gate：campaign必须嵌入一个通过F244 verifier的conformance
  artifact。运行前对选中backend重新解析version、resolve绝对binary并计算文件
  SHA-256，必须和conformance完全相同；因此同名但升级/替换的solver不能静默进入
  实验。离线`--verify`只验证封存身份，不要求本机安装solver；`--replay`才重新执行
  当前binary并再次检查身份；
- 公平执行与测量：每个holdout query、backend和repetition恰有一次任务，统一
  one-shot、统一wall timeout；顺序按
  `SHA256(order_seed:repetition:query:backend)`稳定随机化，缓解固定热身/时间趋势
  偏差。runner串行执行任务，使用`getrusage(RUSAGE_CHILDREN)`差分测量solver及
  必要子进程CPU；这让Z3的status-only rerun也进入成本，而不是被隐藏。成功的
  PAR-2为`min(elapsed, timeout)`，unknown/error/timeout收取`2T`。Artifact明确把
  资源合同命名为equal query count/equal wall timeout/measured child CPU，不把它
  错写成事先强制相等CPU；
- 配对结果：每backend聚合SAT/UNSAT/unknown/error、模型验证、authorized UNSAT、
  timeout、wall、child CPU、PAR-2；每pair按完全相同的
  `(repetition,query_id)`计算both/left-only/right-only/neither solved、
  SAT/UNSAT disagreement及paired PAR-2差值。全体再报告any-backend oracle solved，
  用于量化solver互补性上限；不从这个oracle反馈选择策略；
- 独立验证与重放：`symcc-qfbv-holdout-campaign-v1`封存corpus、conformance、
  protocol、binary identity、逐任务result与aggregate。Verifier重建每个Query IR和
  `accept_unsat=true` lowering certificate，检查任务笛卡尔积/随机顺序/资源字段/
  PAR-2，再将每个SAT assignment patch回封存witness并执行QueryStore evaluator；
  UNSAT必须带authorization。最后从逐行结果重算全部backend/pair aggregate。
  `campaign_sha256`绑定完整时间观测；`semantic_sha256`排除model选择和timing，只绑定
  query/backend/repetition/status/trust/certificate，允许合法不同模型的跨运行重放；
- Z3 interoperability修复：三solver前置验证发现Z3 4.8.12在UNSAT后的标准
  `get-value`输出`model is not available`并以code 1退出，旧adapter因此错误返回
  error。`SmtLibQfbvSolver`现在只在首轮非零退出且已经解析为UNSAT时，用原timeout
  剩余预算重跑移除`get-value`的status-only脚本；第二次正常退出且仍为UNSAT才交给
  原有capability gate，并记录`status-only-rerun-v1`。SAT、unknown、首轮parse错误
  或二次不一致仍fail closed；QueryStore result schema也只接受这个精确协议名；
- 功能证据：checked
  `benchmark/evidence/qfbv_holdout_f245_smoke.json`使用8个synthetic公式和
  `f245-smoke` hash split得到4 train/4 holdout；三solver共12次任务，holdout各为
  3 SAT/1 authorized UNSAT，全部模型复核通过、无disagreement/unknown/error，
  Z3记录一次status-only确认。Corpus/campaign/semantic摘要分别为
  `20e09efe13ee02b7e211219c02395611cb218eb4542d90d1466a02178f8d38f0`、
  `090e350e6e542f8dfe358e2595b2c254e3701a41bd282a8fa4897febe47c6559`、
  `f79661bf70a540dcf895d3dad148393fefbbf78e7a5e773f3358db8e5ba0cfb9`，
  semantic replay一致。5项测试覆盖split确定性/篡改、confirmatory阈值、真实三
  solver、无效模型内层篡改后重哈希拒绝及semantic replay。最终444项Python、
  117项LLVM lit、Z3/cvc5各6/6 String/BV concrete conformance、三solver F244
  conformance与F245 campaign真实重放、research evidence v2的8项obligation离线
  验签、QSYM原生build、Ruff、源码边界`py_compile`、依赖闭包、三层diff和权威
  文档链接门禁通过；
- 科研边界：synthetic smoke只有一次、4个holdout，时间数字只证明计量管线，不能
  排名solver。`--confirmatory`拒绝synthetic source、少于20 repetitions或没有
  disjoint train split；但source label仍由实验者提供，正式研究必须同时封存实际
  QSYM spool/campaign provenance，并报告不同随机seed/target。当前runner比较
  individual solver attempts；F246已补上F240/F241 sequence及F242 parallel
  cancellation arm，但仍没有真实公开corpus或coverage反馈。当前等级I/T/E，尚无
  R级性能或coverage声明。

## 241. F246：Leakage-Checked Solver-Strategy Holdout Campaign（2026-07-28）

- 研究问题：F245只比较单个solver，无法回答F240 beam、F241 EI/SMBO和F242
  cancellation在同一query/资源合同下是否优于单solver。更严重的是，如果policy
  artifact来自holdout或只按文件名宣称“train”，即使执行完全配对也会产生训练泄漏；
  并行portfolio若只记录winner，还会遗漏被取消或在grace内完成的内部结果；
- Train-only policy proof：新增`util/qf_bv_strategy_campaign.py`和
  `symcc-qfbv-policy-training-bundle-v1`。Bundle嵌入全部规范化
  `TrajectoryEvent`，每条必须携带属于F245 train split的content-addressed
  `query_id`；任一holdout ID立即拒绝。Verifier从事件重新运行F240
  `build_ensemble_sequence_policy`并要求artifact逐字段相等，再从该F240 artifact
  重新运行F241 `build_smbo_schedule_policy`。因此只修改trajectory、模型、cluster、
  schedule、EI trace或配置并重算外层SHA仍无法通过。F240/F241 modeled action必须
  完全等于F244已认证且本次选中的solver集合；
- Query-structural decision：每个holdout Query IR独立重算F243 context：witness
  长度、read offset、node/max-width及comparison/nonlinear/bitwise/structural
  operator组；再按policy封存的v1/v2 feature schema生成向量、选择最近cluster和
  stage schedule。Artifact记录feature vector、cluster和完整计划，离线verifier
  重算三者，不能用运行后状态改写选择；
- 六臂执行：同一稳定随机task manifest包含Z3/cvc5/Bitwuzla三个individual baseline、
  F240 beam、F241 SMBO及F242 parallel-cancellation。Sequence把artifact的秒级
  budget精确转换为毫秒，并要求stage budget之和不超过共同`T`；逐stage执行到首个
  SAT/UNSAT。Parallel臂同时启动全部backend，只有SAT开启grace/cancel，UNSAT等待
  完整收集。`RecordingSolver`在复用生产`PortfolioSolver`取消逻辑的同时保存每个
  已执行attempt的完整model/capability/lowering结果，未启动而取消的attempt也保留
  显式占位；
- 资源与统计合同：每个strategy获得相同logical query数和声明的shared wall budget，
  但并行臂可能消耗多倍CPU，故protocol明确写成
  `parallel-cpu-not-pre-equalized`。每行测量全策略wall和
  `RUSAGE_CHILDREN` user+system CPU，unknown/error按PAR-2 `2T`收费。Aggregate按
  strategy报告attempt、cancel request、实际取消、incomplete consensus、SAT/UNSAT、
  model/trust、wall/CPU/PAR-2，并对所有策略对重算solved四象限、结果分歧和paired
  PAR-2差；
- 独立验证与重放：`symcc-qfbv-strategy-campaign-v1`重新绑定F244 binary identity、
  F245 corpus、policy bundle、策略定义、task顺序、attempt和aggregate。Verifier对
  每个非取消attempt重建同一QF_BV lowering certificate；每个内部及winner SAT model
  都patch回封存witness执行QueryStore evaluator，UNSAT必须授权。它还复核
  winner/outer assignment、sequence prefix终止、parallel disagreement/cancel/
  consensus关系、timeout标志与PAR-2。完整摘要绑定观测时间；semantic摘要保留外层
  status/trust、确定性schedule与已观察终态集合，但排除合法model选择、winner竞态和
  timing，使并发重放可比较语义而非线程时序；
- 功能证据：checked
  `benchmark/evidence/qfbv_strategy_f246_smoke.json`复用F245的8-query 4/4 split，
  从train-only synthetic轨迹构建三backend F240/F241 policy，在4个holdout上执行
  6臂共24任务。各臂均3 SAT/1 authorized UNSAT、4/4 solved；F240/F241均实际选择
  两阶段计划但首阶段即求解。`grace=0`并行臂在3个SAT query发出取消请求并共取消
  6个attempt，UNSAT query收齐三后端。Bundle/beam/SMBO/campaign/semantic摘要为
  `3e62cd759adb4c023c91d8b23666cfd5728bb6b1446fc788dd9c0cdfc3d90180`、
  `5c166880747d56a320399050149981fa1611336e08e5763854497c27d13b5a2c`、
  `ade0fb8ea5e69c803c0597f7be38dac67b5c190898322965dc2ff9b4bd79e784`、
  `14aeecf6d18c4e1bbd6431f38ca1c0090fa07809edd5479ee6a453dbe76f4dcf`、
  `52cc64748dac7e9f381517539940fee7b09cfc69e9750aa803f622c72dd3c254`，
  真实重放semantic一致。5项新测试覆盖train泄漏、trajectory-policy精确重建、
  六臂资源/计划、重哈希schedule/winner/model篡改和并发语义重放；负CPU、证书、
  cancel count与policy timeout的额外变异均被拒绝。最终449项Python、118项LLVM
  lit、Z3/cvc5各6/6 String/BV concrete conformance、F244/F245/F246三份checked
  artifact离线验签、F246真实semantic replay、research evidence v2的8项
  obligation验签、QSYM原生build、Ruff、受控源码`py_compile`、依赖闭包、三层
  diff和权威文档链接门禁通过；
- 科研边界：该artifact的训练成功/失败标签是人为构造，holdout也只有4个微型公式，
  因而任何wall、CPU或PAR-2排序都无统计含义。`--confirmatory`拒绝synthetic
  corpus/policy和少于20 repetitions，但`source_kind`仍不是外部透明日志；正式实验
  必须从冻结QSYM spool及训练期solver trajectory生成bundle，并封存target、seed、
  binary、CPU affinity和source commit。F246保证共同声明wall budget并测量实际CPU，
  不保证并行臂预先等CPU；论文结论必须按CPU-hour归一化或用外层CPU配额重复实验。
  下一步是把query/result与seed replay的AFL edge/data coverage连接，完成F243
  v1/v2 calibration和coverage/CPU-hour分析；之后才根据真实prefix hit/RSS/cancel
  结果决定native context/clause transport。当前等级I/T/E。

## 242. F247：Sealed AFL Edge/Data Coverage Join 与 Feature Calibration（2026-07-28）

- 研究问题：F246已经在同一holdout上执行六种solver strategy，但其`coverage_delta`
  仍来自训练trajectory中的标签，不能证明solver生成的具体input实际增加AFL
  coverage，也不能校准F243结构特征。直接合并不同`afl-showmap`进程的bitmap还存在
  隐蔽错误：AFL++ PCGUARD按`__afl_final_loc`动态协商有效map，而旧data preload把
  内部`__AFL_MAP_SIZE`分配上限误当成有效范围；data byte可能写入共享内存却不被
  streaming/fuzzer扫描。PIE下用绝对return address作site ID也会随ASLR漂移；
- 原生map正确性修复：`util/afl_data_coverage_rt.c`现在用
  `dladdr(module basename,module-relative offset)`产生跨ASLR稳定site identity，
  并以thread-local 64-entry cache和递归guard约束hook开销。Preload constructor在
  PCGUARD目标自身constructor/forkserver启动前把`__afl_final_loc`低64 KiB保留为
  data namespace，后续edge guard ID从其后分配；data hash严格限制在该namespace，
  不再使用内部`__AFL_MAP_SIZE`。`SYMCC_AFL_DATA_MAP_SIZE`只可把hash范围收窄到
  1--65536，不能越过已预留区。边基线和combined oracle都加载同一preload以保持
  guard布局相同，仅通过`AFL_DATA_COVERAGE=0/1`关闭或开启写入；因此
  `combined-edge`才是可比较的data feature集合；
- Sealed target与真实采集：新增`util/qf_bv_coverage_join.py`及
  `symcc-afl-coverage-target-v1`。Target artifact要求命令恰有一个`@@`，绑定目标、
  `afl-showmap`和preload的绝对路径、文件SHA-256、showmap版本、timeout与paired
  preload协议。采集器实现AFL++ `-S -e` length-value streaming协议，复用持久
  forkserver；`map_repetitions`范围为1--100，confirmatory至少为2，多次观测时要求
  status和sparse bitmap完全稳定。Verifier还要求两种oracle status相同、edge集合
  为combined子集，且新增data ID只位于低64 KiB namespace；
- Query/seed/coverage join：工具从已验签F246 artifact重新materialize每个SAT
  assignment，并把candidate及每个原始witness按content SHA-256去重。每条六臂结果
  绑定query、strategy、repetition、solver status、witness/candidate hash、child
  CPU和PAR-2，再计算candidate相对其原witness的edge、combined和纯data新增ID。
  Strategy aggregate报告baseline/candidate union、gain、唯一candidate数、
  coverage/solver-child-CPU-second；所有strategy pair报告edge/data/combined
  shared、left/right-only与Jaccard，避免只比较最终总数；
- F243 v1/v2校准：从F246嵌入的train-only trajectory按backend训练确定性L2
  logistic模型，标签为训练期`coverage_delta>0`；只在individual-backend holdout
  行上评估，真实标签为replay得到的`edge_new_features>0`。Artifact同时封存模型、
  每行概率/标签以及Brier、log loss和5-bin ECE。Verifier从训练事件、holdout
  Query IR和coverage row完整重训/重算两个schema，策略arm不会被混入校准；
- 独立验证与重放：`symcc-qfbv-coverage-join-v1`封存完整F246 source artifact、
  target identity、协议、五个唯一input的双map观测、24条join、六臂aggregate及
  calibration。完整摘要绑定实测时间；semantic摘要排除采集成本和时间戳，但绑定
  sealed strategy语义、target、输入、status、bitmap、join和校准。离线`--verify`
  不启动目标，却会重建candidate、novelty、aggregate和模型；`--replay`先检查当前
  三个binary hash，再重跑目标并要求semantic摘要相等。Confirmatory coverage join
  必须继承F246 confirmatory source且至少双重map replay；
- 功能证据：`benchmark/qfbv_coverage_smoke.c`是匹配F245单字节Query IR的
  AFL-instrumented微型target，其中`0xbd`同时触发一个额外matched-prefix data
  feature。Checked
  `benchmark/evidence/qfbv_coverage_f247_smoke.json`从F246的24条结果得到5个唯一
  input和24条join；原witness union为6 edge/1 data。Bitwuzla、F240、F241和F242
  各新增4 edge，cvc5新增5 edge，Z3新增6 edge和1 data；相应solver child CPU均来自
  F246，不把showmap采集CPU混入solver分母。v1/v2 holdout各12行、6个正例，
  Brier分别为`0.280713505408219`和`0.281005485219151`。Campaign/semantic/target
  摘要分别为
  `03403e01f9d735506b921733c339ad43dcf9bc00d481450caeda6f1b9de68be6`、
  `703c2fa844978e67be65c7e93a757f7c79a2b49996fbb9024b8c04680911e166`、
  `c767fd1715f92c67b00a0f5de2f85198e466d83283685c80b11077f833995acd`，
  真实replay semantic一致。4项F247测试覆盖真实paired join、内层重哈希coverage/
  namespace篡改、binary漂移、confirmatory拒绝和semantic replay；data runtime的
  4项测试另覆盖exported map、SysV fallback、8进程PIE稳定性和真实streaming map。
  全量回归为455项Python、119项LLVM lit，全部通过；
- 科研边界：smoke只有4个holdout、一个原witness和人为训练标签，Brier/ECE及六臂
  coverage/CPU数值只证明管线，不支持策略优劣。正式R级结论仍须在多个公开target上
  冻结真实QSYM spool、train trajectory、target binary和seed provenance，至少20次
  paired randomized repetitions，并使用外层CPU quota或CPU-hour归一化；还要报告
  map collision、目标崩溃/timeout、coverage AUC、grace敏感性及置信区间。F247没有
  实现跨worker native solver context/clause transport，也不提供proof-producing
  UNSAT。当前等级I/T/E。

## 243. F248：Profile-Guided Hydra Control-Flow Melding 与 Original Replay（2026-07-29）

- 研究问题：F187 的 `targeted_transform` 仍只是输入字节变换，不能移除实际的昂贵
  symbolic branch。直接把 diamond 改为 `select` 还有两个跨层风险：一是 SymCC
  原本会把每个普通 `select` 再记录为路径选择，等价于重新引入被移除的 fork；二是
  Hydra 的激进 memory linearization 按论文定义只保证 failure-preserving，不保证
  semantics-preserving，变换程序独有的越界 load 等 failure 绝不能进入最终结果。
  本实现依据 OOPSLA 2026
  [Taming the Hydra](https://doi.org/10.1145/3798202) 的 complete alignment、
  extra instruction、read-back store 和 original replay 边界，在编译器与实验层建立
  可归因、可否决的完整闭环；
- Profile-guided single-site build：新增 `compiler/HydraTransformation.{h,cpp}`，
  在 live-continuation export 与常规 symbolization 之前运行独立 module pass。
  `util/hydra_transform.py profile`从 runtime `branch_trace`聚合稳定 branch site，
  把每次 execution 的 solver CPU 按完整 trace 等分归因，使用
  `observations + 4*interesting + 2*log1p(solver_us/1000)`排序。Compiler 接受该
  文本 profile、显式 site 或 denylist，每个 module 只选择最高分 eligible site；
  replay 进一步要求整个 manifest 恰有一条 record，避免多 TU/多站点构建造成
  spurious failure 归因歧义；
- CFG 与 alignment：只接受 single-entry、two-arm、single-exit 的严格 diamond，
  两臂必须唯一前驱、共同 merge 且 merge 恰有两个前驱；block address、escaping
  SSA、call/invoke、atomic/volatile 和未知 instruction fail closed。Pass 对两臂
  instruction sequence 求兼容 opcode/type LCS，把匹配 ALU 的相异 operand 变为
  条件 `select`；未匹配 ALU 使用 operation-aware extra operand 完成 alignment，
  integer div/rem 的额外 divisor 固定为 1，其他 first-class operand使用零值或
  原 pointer。原 LLVM opcode flags、poison/undef/freeze 语义不被静默清除；
- Failure-preserving memory mode：`SYMCC_HYDRA_MODE=aggressive`允许 simple
  load/store。相同地址 load 合并一次，不同地址 load 线性执行后选择结果；未匹配
  store 先从同一地址读取旧值，再执行
  `store(select(condition, original, old), address)`，因此未选路径只写回刚读取的
  值。相同地址的成对 store 选择原值后只写一次。该模式可能无条件执行原先受 guard
  保护的 load 并引入 transformed-only failure，manifest 因而强制
  `requires_original_replay=true`；safe 模式只接受 ALU/compare/cast/select/GEP/
  freeze，不接受 memory；
- SymCC fork-elision：所有由 melding 新增的 operand/output select 带
  `!symcc.hydra_select`。`Symbolizer::visitSelectInst`对这些节点只构建 ITE data
  expression，不调用 `_sym_push_path_constraint`；普通源程序 select 仍保持原行为。
  这使目标 CFG branch 及其生成的 operand selects 都不会重新形成 solver fork，
  同时后续 target 可以继续读取完整 ITE，复用现有 Backsolver/Query IR；
- Sealed original replay：`util/hydra_transform.py campaign`绑定 original/
  transformed executable SHA-256、单站点 compiler manifest、timeout 和嵌入式
  content-addressed input。每个候选始终先运行 transformed、再运行 original，
  分类为 `real-failure`、`spurious-transformed-failure`、
  `failure-preservation-violation`、`original-validated` 或 timeout。
  `accepted_failure_inputs`只能来自前两程序都失败的交集；transformed-only failure
  永不保留并把 site 写入下一轮 `SYMCC_HYDRA_DENYLIST`；若原程序失败而变换程序
  不失败，artifact 显式令 `failure_preservation_holds=false`，CLI 以 code 2
  fail closed。Offline verifier重算嵌入 input、分类、accepted set、denylist、
  semantic/full digest；replay重新执行两二进制并比较 semantic摘要；
- 功能与原生证据：`test/hydra_transform.ll`覆盖 safe LCS/extra ALU、profile选点、
  aggressive load/store readback、LLVM verifier、manifest 与 denylist不变换路径；
  `test/test_hydra_transform.py`覆盖 profile成本归因/篡改、真实/伪阳性/违例三种
  replay关系、accepted set、denylist、artifact篡改及semantic replay。
  `benchmark/hydra_replay_smoke.ll`构造一个受 branch 保护的无效 load：checked
  `benchmark/evidence/hydra_f248_smoke.json`中输入`A`只在 transformed程序失败，
  输入`B`在两程序都失败，得到1个real、1个spurious、denylist site `424248`，
  `failure_preservation_holds=true`。Campaign/semantic摘要分别为
  `650c350c6abc32fe07301741eaafe39586ddb3c04f16c0e12b8d5d1c9757206f`和
  `b9ed9cd1c835a8bdf5a4dc450e272359fbbed1e6b340a3a64486f2b9e18326b7`，
  native semantic replay一致；
- 科研边界：该 smoke 有意制造一个 invalid pointer，只证明 false-positive
  detector 和 failure-preservation oracle，不能证明 coverage/CPU 改善。当前 pass
  只实现论文的严格单块 diamond 子集，不支持 multi-block isomorphic region、
  multi-exit、loop、call/exception edge、atomic/volatile、alias-sensitive store
  reordering或动态 symbolic-address profitability proof；store readback 的中性结论
  限于无 data-race 的顺序语义。正式结论必须从真实 target profile 选择站点，报告
  fork/solver CPU、select/ITE规模、coverage AUC、spurious迭代次数和 denylist
  收敛，并对 safe/aggressive/original 做相同总 CPU 的至少20次配对实验。当前等级
  I/T/E，不声称完整复刻 Hydra 或通用 IFSS。

## 244. F249：Bounded Multi-Arm IFSS Region-State Worklist（2026-07-29）

- 研究问题：此前 compiler Backsolver 只能把二臂 PHI 和递归嵌套的二臂 PHI
  恢复为 ITE；一个由多层条件分支汇入同一 PHI 的三臂以上区域会丢失 implicit
  control dependence，因而目标比较只能看见当前 concrete PHI 值。F249在
  `compiler/Symbolizer.{h,cpp}`中加入独立的多臂 IFSS 子集，不改变原程序控制流，
  而是在 merge 点重建完整的符号 region state；
- Region discovery 与预算：候选 PHI 必须有3--8个唯一 incoming block，类型为
  integer/floating/pointer。实现从全部 incoming predecessor 求最近共同 dominator，
  要求 merge postdominate controller，且 root 是具有符号条件的二路 branch。
  两个入口 successor 都须通过现有 easy-region 校验：单出口、无环、最多32个
  basic block。显式 DFS worklist 最多枚举64条路径；只接受 branch-only corridor，
  拒绝 switch、loop、未知 terminator，以及 conditional edge 直接进入 PHI block
  的 edge-sensitive 歧义；
- Path relevance 与状态合并：worklist保存每一步
  `(BranchInst, takeTrue)`，并按最终 PHI predecessor 分组；发现的 predecessor
  集合必须与 PHI incoming 集合精确相等。每条路径把条件或其否定做 conjunction，
  同一 predecessor 的多条路径做 disjunction。incoming value复用有界
  `RegionValue` symbol substitution，可接受支配值、常量、受支持的无副作用 SSA、
  nested ITE，以及由 MemorySSA/AA 证明没有干扰写的 read-only load snapshot。
  最后从后向前构造 ITE worklist：
  `state_i = ite(relevance_i, value_i, state_{i+1})`，并用最终表达式替换原
  symbolic PHI；
- 完备默认臂与原子失败：路径枚举已证明 incoming 集合完备，所以最后一臂作为
  default state，不生成未被最终 ITE 使用的 predicate。早期版本为该默认臂留下
  `_sym_build_equal(expr, null)`孤立调用，原生 QSYM 在表达式表查询时抛出
  `std::out_of_range`；F249据 GDB 栈和生成 IR 定位后消除了该调用。更一般地，
  late synthesis failure现在从 merge 的原始 insertion point回滚全部临时 IR，
  确保不支持的 call/memory/shape只触发保守 fallback，不污染随后 instrumentation；
- 验证与结果：`test/backsolver_multiarm_ifss.ll`同时检查 NOT/AND/ITE IR，并运行
  原生QSYM Backsolver。输入`AX`使当前路径选择值10，而目标值20要求第一字节不再
  等于`A`且第二字节仍为`X`；实测
  `targets/attempts/sat=1/1/1`、direct `attempts/sat=4/1`，生成候选
  `00 58`满足该跨臂约束。`test/backsolver_multiarm_ifss_reject.ll`令最后一臂
  依赖side-effecting opaque call，证明在已合成前两臂之后的 late rejection仍经
  LLVM verifier，且输出中没有`ifss.*`、`_sym_build_ite`或
  `_sym_build_bool_xor`残留。两项定向lit均通过；
- 科研边界：这是显式 region-state/worklist、relevance predicate 和 symbol
  substitution 的 I/T 子集，不是任意 IFSS。它仍要求有界、无环、branch-only、
  single-exit region；不处理 switch edge、loop-carried state、multi-exit
  exit selector、side-effecting call、异常边、volatile/atomic、ambiguous alias
  或 general memory state。当前测试证明机制和一个 SAT witness，不证明公开
  target上的 coverage/CPU收益；正式R级证据仍需冻结真实站点与输入，在等总CPU下
  对 two-arm baseline、multi-arm IFSS 和关闭 IFSS 做至少20次配对实验，并报告
  ITE规模、候选有效率、coverage AUC、solver CPU和拒绝原因分布。当前等级I/T。

## 245. F250：MemorySSA/AA-Proven IFSS Memory-State Merge（2026-07-29）

- 研究问题：常规shadow memory只保留实际执行的store expression。即使两个分支
  都向同一地址写值，merge后的load也只能看见taken arm，F249的数据PHI worklist
  无法恢复这种经memory dependence传播的implicit flow。F250在
  `compiler/Symbolizer.{h,cpp}`中记录候选simple load，并在数据PHI完成后、统一
  short-circuit lowering之前恢复严格的双臂memory state；
- MemorySSA与AA前提：load必须是non-atomic/non-volatile supported scalar，且其
  直接defining access是load所在merge block的二输入`MemoryPhi`。每个incoming
  access必须是对应predecessor内最后一个simple `StoreInst`，store block以
  unconditional edge直接进入merge，stored type与load type完全相同。对
  `MemoryLocation::get(load/store)`的两个AA查询都必须得到`MustAlias`；NoAlias、
  PartialAlias和MayAlias一律拒绝；
- Region effect proof：两个store predecessor的最近共同dominator必须是symbolic
  conditional branch，merge必须postdominate controller，两个successor形成最多
  32 blocks的有界无环region。实现收集region内全部原始instruction；除两个候选
  store外，任何可能写内存的instruction都必须有MemorySSA access，且
  `AAResults::getModRefInfo(instruction, loadLocation)`不得包含Mod。这样不确定call、
  escaping alias、额外同址写、volatile/atomic均fail closed；
- State reconstruction：dominator关系唯一映射true/false store。两个stored value
  使用现有`RegionValue` substitution在load前合成，再建立
  `_sym_build_ite(controller, trueValue, falseValue)`；原`_sym_read_memory`
  expression仍可无副作用执行，但其所有下游use被新的memory-state ITE替换。
  生成call命名为`ifss.memory.state`，并附
  `!symcc.ifss_memory = !{!"must-alias-memoryssa-v1", load-site,
  controller-site, true-store-site, false-store-site}`，绑定稳定site形成可审计的
  编译期结构证书。该metadata不是独立solver proof，可信边界仍是LLVM
  MemorySSA/AA及pass verifier；
- 原子回滚与definedness：候选load在原有shadow-read之后记录rollback anchor；
  stored value的late synthesis若失败，删除anchor与load之间的全部新IR。共享
  `trySynthesizeRegionValue`入口同时改为递归拒绝`undef`和`poison`，避免把未定义
  concrete value包装成看似有效的QSYM constant；`freeze undef/poison`目前也保守
  fallback，不声称完整LLVM definedness modeling；
- 验证与结果：`test/backsolver_memory_state.ll`从输入`A`执行store 10，而target
  要求merge load为20；生成IR含绑定四个site的proof metadata，原生QSYM得到
  Backsolver `targets/attempts/sat=1/1/1`、direct `attempts/sat=2/1`，候选`00`
  成功选择未执行arm。`test/backsolver_memory_state_reject.ll`覆盖不同alloca的
  NoAlias store、已合成一臂后遇到readnone opaque return的late rollback，以及
  poison store；三者均经LLVM verifier且没有IFSS memory metadata/call残留。连同
  F249 multi-arm、nested Veritesting和read-only snapshot共6项定向lit全部通过；
- 科研边界：F250只处理双臂、single-exit、merge-local load和每臂最后一个直接
  MustAlias store；不沿MemorySSA def chain越过NoAlias defs，不合并3--8臂memory
  phi，不支持部分重叠/不同宽度、多个location、load/store排序、multi-exit、
  loop、异常、atomic或并发memory model。正向smoke只证明alternative memory state
  可到达，不证明coverage/CPU收益。R级评估需在公开target报告MemoryPhi候选/
  MustAlias接受/ModRef拒绝数量、ITE规模、Backsolver有效率、solver CPU和coverage
  AUC，并与shadow-memory baseline做至少20次等CPU配对。当前等级I/T。

## 246. F251：Bounded NoMod MemorySSA Def-Chain Recovery（2026-07-29）

- 研究问题：F250只查看MemoryPhi的直接incoming definition；若目标MustAlias store
  之后还有一个完全无关的store，MemorySSA仍会把后者作为incoming，导致明明可证明
  的memory state被拒绝。F251把每个incoming扩展为有界backward def-chain，同时
  不把MayAlias猜测成NoAlias；
- 追链算法：从每个MemoryPhi incoming开始，最多跳过8个`MemoryDef`。遇到simple、
  等宽且对load location为`MustAlias`的store即停止；候选store仍必须位于对应
  incoming predecessor，且该block直接无条件进入merge。其他definition只有在
  `AAResults::getModRefInfo(instruction, loadLocation)`不含Mod时才能跳过，顺序按
  nearest-to-farthest记录。遇到MemoryPhi/liveOnEntry、MayAlias/PartialAlias写、
  target上的不兼容store、第9个可跳过definition或未知Mod立即拒绝；
- 可观察内存边界：即使definition对目标location为NoMod，volatile store、
  atomic RMW、atomic cmpxchg和fence也不进入本子集，避免把并发/可观察顺序语义
  降格为普通NoAlias。Region effect scan仍会对全部其他原始写执行独立ModRef检查，
  所以chain proof与region proof是两层保守门禁；
- Chain certificate：没有跳过项时继续产生F250
  `must-alias-memoryssa-v1`。存在跳过项时改为
  `must-alias-memoryssa-chain-v1`，前四个site字段仍是
  load/controller/true-store/false-store，随后编码
  `true-skip-count, true-skipped-sites..., false-skip-count,
  false-skipped-sites...`。计数为i32，site为稳定target-width整数；它使接受路径和
  bounded proof chain可由生成IR审计，但仍不是独立重跑AA的proof object；
- 验证与结果：`test/backsolver_memory_def_chain.ll`在两个目标store之后各放一个
  独立alloca store，IR metadata准确给出`1 + 1`个跳过site；原生QSYM从`A`生成
  `00`，Backsolver `targets/attempts/sat=1/1/1`、direct
  `attempts/sat=2/1`。扩展的`test/backsolver_memory_state_reject.ll`证明两个
  pointer argument之间的MayAlias intervening store、第9个NoAlias definition和
  volatile NoAlias store均无chain metadata/IFSS memory call并通过LLVM verifier。
  F250完成时全量门禁为459/459 Python、125/125 lit；
- 科研边界：F251仍不跨nested MemoryPhi，不把store移出incoming predecessor，
  不处理multi-arm、partial overlap、不同width/endian、多个memory location、
  call summary proof、loop或multi-exit。固定8不是性能最优结论；公开target实验应
  报告chain length分布、0--8预算敏感性、AA rejection taxonomy、额外compile time、
  ITE规模、solver CPU和coverage收益，再决定是否引入MemorySSA walker缓存或
  proof-carrying ModRef artifact。当前等级I/T。

## 247. F252：Shared Multi-Arm IFSS Data/Memory Partition（2026-07-29）

- 研究问题：F249的数据PHI和F250/F251的MemoryPhi已经有相同的controller、
  postdom、path和endpoint声音性前提，但此前分别实现；继续直接复制会使block/path
  预算、conditional-edge拒绝和终点完备性逐渐分叉。F252在
  `compiler/Symbolizer.cpp`抽出`buildIFSSRegionPartition`，让data state与memory
  state消费同一份控制区域证明；
- 共享partition：输入为2--8个endpoint和一个merge。算法从全部endpoint求最近共同
  dominator，要求merge postdominate controller且controller是conditional branch；
  两个root successor的唯一basic block并集总计不超过32，而不是此前分别32；
  DFS全局最多64 paths，拒绝cycle、非branch terminator和conditional direct-to-merge
  edge。输出按predecessor分组的`(branch,takeTrue)`路径；endpoint必须唯一，枚举
  key集合必须与输入集合精确相等。F249 multi-arm data PHI改为直接使用该partition，
  保持既有行为；
- Multi-arm memory state：F250方法从固定二输入推广为2--8输入MemoryPhi。每个arm
  仍须由F251有界NoMod chain找到位于对应direct merge predecessor的simple、
  等宽MustAlias store。除这些store外的region写继续逐项通过MemorySSA/ModRef。
  对前`arms-1`个endpoint，路径literal做AND、同endpoint多路径做OR；最后arm是
  完备partition证明下的default，不生成孤立predicate。各stored value经
  `RegionValue`替换后从后向前形成`arms-1`层memory ITE；
- Metadata兼容与扩展：可直接映射root true/false的二臂case继续产生F250/F251
  `must-alias-memoryssa[-chain]-v1`，已有工件和测试不变。其余case产生
  `must-alias-memoryssa-multi-v1`：
  `load-site, controller-site, arm-count`之后，每臂编码
  `incoming-block-site, store-site, path-count, skip-count,
  skipped-definition-sites...`。最终ITE统一命名`ifss.memory.state`并携带该proof；
  任意arm晚失败仍通过load anchor原子回滚全部临时predicate/value/ITE；
- 验证与结果：`test/backsolver_multiarm_memory_state.ll`构造三臂nested branch，
  每臂先向同一slot写10/20/30，再写一个NoAlias噪声slot，使机制必须同时完成3-arm
  path partition、3条one-hop def chain和2层memory ITE。IR metadata报告3 arms，
  各`path-count=1, skip-count=1`；输入`AX`实际取10，而target要求20，原生QSYM
  得到Backsolver `targets/attempts/sat=1/1/1`、direct
  `attempts/sat=4/1`和候选`00 58`。Reject suite新增三臂中一个pointer-argument
  MayAlias store，证明整个merge拒绝且无multi metadata。F249--F252共6项定向lit
  全部通过；
- 科研边界：这是共享single-exit partition与multi-arm scalar memory state，不是
  general memory SSA interpreter。Store仍须位于direct merge predecessor；不处理
  nested MemoryPhi、同arm多个target store、partial overlap、不同width、多个location
  的联合state、switch、loop、exception、multi-exit或concurrency。Path predicate
  目前可能重复合成公共subexpression，虽无孤立调用但会放大ITE DAG；下一阶段应加
  per-partition condition cache/ownership，再以此作为exit-selector的control state。
  正式评估需报告arm/path/chain联合分布、expression DAG增量、compile/solver CPU、
  candidate validity和coverage AUC。当前等级I/T。

## 248. F253：Partition-Scoped Condition DAG Cache 与 Ownership（2026-07-29）

- 研究问题：F252共享了path partition，但每个non-default endpoint仍独立调用
  `trySynthesizeRegionValue`。四臂binary region中，前两个leaf共享同一内部branch
  condition，旧实现会复制concrete clone和QSYM expression，放大DAG；直接复用
  `RegionValue.computation`又会让同一instruction range被多次merge，违反
  `SymbolicComputation::merge`的时间顺序前提；
- 去重与确定性：data PHI和MemoryPhi在构造predicate前，按arm顺序、path顺序和
  branch-step顺序预扫描前`N-1`个endpoint，以原始LLVM condition `Value*`为key去重。
  每个唯一condition只合成一次，缓存保留`concreteValue/expressionValue`，清空
  `RegionValue.computation` ownership；后续literal、AND/OR和ITE只消费该缓存，
  不再次clone condition。默认arm仍不生成predicate；
- 两阶段ownership：首版把多个缓存condition合并为一个prefix computation，再与
  state computation合并。真实四臂IR证明这仍不正确：short-circuit只为整个range的
  最后结果建立出口PHI，较早condition和其concrete clone被困在slow path，产生
  “instruction does not dominate all uses”，原生QSYM最终在
  `_sym_build_bool_and`触发`map::at`。最终实现让**每个唯一condition各自成为一个
  独立`SymbolicComputation`**，成功构造整个partition后按定义顺序登记，再登记
  predicate/state computation。Short-circuit因而为每个缓存expression分别建立
  fast-null/slow-expression出口PHI，后续use均被其支配；
- 事务与输入边界：condition computations直到整个region成功前都不进入
  `expressionUses`，所以late rejection仍可安全删除全部IR而不留下dangling记录。
  若一个新condition computation没有任何可作为short-circuit判据的input，当前
  保守回滚；不把无输入的memory-derived expression错误地塞入需要非空input的
  lowering。每个真正合成的缓存call附
  `!symcc.ifss_condition = !{!"partition-condition-cache-v1", condition-site}`，
  便于静态计数和site归因；
- 验证与结果：`test/backsolver_ifss_condition_cache.ll`包含一个四臂data PHI和
  一个四臂MemoryPhi。每个partition有root、left、right三个condition；root已在
  merge可用，left被两个前置leaf共享，right被第三leaf使用，因此总计恰有4个
  cache call/metadata，而不是按leaf重复产生6个。测试强制LLVM verifier并运行
  原生QSYM：输入`AXY`取memory值10，target要求20，得到Backsolver
  `targets/attempts/sat=1/1/1`、direct `attempts/sat=5/1`和候选`41 00 59`。
  F253完成后全量compiler/lit为128/128；
- 科研边界：cache作用域是一次data或memory merge，不跨同函数的多个消费者共享，
  也不对两个不同condition内部的公共SSA子图做value numbering；缓存只减少构造
  重复，不改变path partition或solver语义。进一步跨partition DAG hash-consing
  必须具有显式dominance、lifetime和fast-path ownership证明，并测量表达式节点、
  compile time、solver serialization CPU与coverage收益；不能仅以IR变短宣称性能
  改善。当前等级I/T。

## 249. F254：Bounded Multi-Return Exit-State Lowering（2026-07-29）

- 研究问题：F249--F253只在一个既有merge中恢复data/memory state，源程序的多个
  `ret`没有共同consumer，因而callee只会把实际出口的return expression传给caller。
  F254新增预符号化module pass `IFSSExitLowering`，把可证明封闭的多返回区域归并成
  一个`ifss.exit.state` PHI和synthetic dispatch return，使既有IFSS region-state
  能在callee构造返回ITE，并通过`_sym_set/_get_return_expression`跨调用传播；
- 结构证明：只接受2--8个integer/floating/pointer同类型返回出口。DominatorTree
  求全部return block的最近共同dominator，并要求其为两个不同successor的conditional
  branch；从controller显式枚举全部路径，region必须single-entry、branch-only、
  acyclic、无address-taken/EH block，最多32个非controller block和64条路径，且
  实际到达的return集合与函数全部return精确相等。Switch、indirect/invoke、
  loop/backedge、unreachable额外return、九出口和无法封闭的路径均不修改IR；
- 值与ABI边界：拒绝void/aggregate/vector/token返回、直接undef/poison和函数内任意
  `musttail` call，避免破坏musttail紧邻return的IR约束。全部return operand为同一
  `Value*`时视为无收益归并而跳过。这个pass只重定向正常return edge，不线性执行
  arm内副作用；return value能否形成symbolic ITE仍由F249/F253的RegionValue、
  ownership和late rollback证明决定；
- 分析时序：pass位于Hydra、live-continuation export和常规symbolization之前，因此
  AA/MemorySSA在CFG归并后重新计算。候选收集阶段不写IR；只有至少一个region接受时
  才先冻结全模块原始`!symcc.site_id`，再执行任何CFG rewrite，避免后续函数site因
  前序变换漂移，也保证无候选时准确返回`PreservedAnalyses::all()`；
- Proof metadata：每条原return edge成为带
  `!symcc.ifss_exit_arm = !{!"bounded-return-exit-state-v1", ordinal,
  original-return-site}`的无条件branch。Return-state PHI绑定controller site、
  arm/block/path count以及按ordinal排列的全部return site；统一return携带相同核心
  counts。该metadata是结构分析证书和实验分层依据，不是独立可重放的CFG proof；
- 验证与结果：`test/backsolver_multi_exit_return.ll`包含三返回callee。输入`AX`
  实际从第一出口返回10，caller要求20；归并后IR有3-arm PHI与2层ITE，LLVM verifier
  通过，原生QSYM产生保持第二字节`X`且翻转根出口的候选，Backsolver
  targets/attempts/SAT及direct attempt/SAT均非零。测试同时验证flag关闭时保留三个
  `ret`。`backsolver_multi_exit_return_reject.ll`覆盖switch、可达loop、aggregate、
  poison、九出口和musttail，均无exit metadata且verifier-clean；F254完成后全量
  compiler/lit为130/130；
- 科研边界：这是normal-return这一类真正multi-exit的语义保持归并，不是任意
  continuation selector。尚未覆盖break/continue到不同continuation、多个live-out
  tuple、跨出口memory location、exception/coroutine/indirect exit、loop-carried
  state或general control effect。公开评估需分别报告结构候选/接受、symbolic-state
  接受、arms/blocks/paths、ITE/DAG节点、compile/solver CPU、跨调用validated yield
  和coverage AUC，并以`SYMCC_IFSS_EXIT_STATE=0/1`等CPU消融。当前等级I/T。

## 250. F255：Bounded Switch-to-IFSS Chain Lowering（2026-07-29）

- 研究问题：F252共享partition只接受`BranchInst`，而LLVM `switch`的case/default
  edge不能直接表示为`IFSSPathStep(branch,takeTrue)`；另写switch专用data/memory
  state会复制路径、condition ownership和MemorySSA声音性逻辑。F255新增
  `IFSSSwitchLowering` module pass，在symbolization前把严格有界switch转换成
  确定性equality branch chain，使F252/F253以及F250--F252 memory proof原样复用；
- 接受边界：switch须有2--8个**唯一**successor，每个case/default目标只由controller
  进入、非address-taken且非EH pad。所有arm要么都以unconditional branch进入同一
  exact-predecessor merge，要么都直接normal return。共享case destination、外部
  predecessor、conditional arm、混合exit、九臂和不能封闭的merge均保持原switch；
- Lowering语义：按LLVM case迭代顺序生成`icmp eq`测试；case为true进入原目标，
  false进入下一test，最后false进入default。Arm内指令和到merge/return的edge不移动，
  destination PHI的controller incoming block精确改写为对应test block。全部候选在
  写IR前验证，所以不存在中途部分lowering；至少一个候选时才冻结全模块原始site，
  并在F254之前执行，因而direct-return switch可进一步形成return exit state；
- 证书：每个生成comparison和conditional branch携
  `!symcc.ifss_switch = !{!"bounded-switch-chain-v1", original-switch-site,
  case-ordinal, arm-count, !"case", case-value}`；最后branch另携
  `symcc.ifss_switch_default`及default ordinal。F252 multi-arm memory metadata继续
  记录最终arm/path/store chain，F253只为不支配merge的内部case condition建立独立
  `partition-condition-cache-v1` computation；
- 验证与结果：`test/backsolver_switch_ifss.ll`同时包含三臂data PHI、三臂
  MemoryPhi和direct-return switch。纯lowering及switch→F254组合均经LLVM verifier；
  data/memory partition各恰有一个内部condition cache。原生memory test输入`A`
  实际写10、target要求case `B`的20，QSYM产生首字节`B`的validated Backsolver
  candidate，Backsolver/direct attempt与SAT均非零。Flag-off保留原switch。
  `backsolver_switch_ifss_reject.ll`覆盖shared destination、external predecessor、
  conditional arm、九臂和mixed exit，无schema残留；
- 科研边界：这是strict fanout的语义保持lowering，不是general switch lowering或
  jump-table优化。当前不保留原`branch_weights`的概率分解，也不处理多个case共享
  successor、critical-edge PHI multiplicity、range compression、bit-test tree、
  indirectbr/callbr或loop switch。公开评估应报告switch候选/接受、arms/cases、
  chain depth、condition cache与ITE节点、compile/solver CPU、candidate validity和
  coverage AUC，并对linear/order、balanced/profile-guided chain做等CPU消融。当前
  等级I/T。

## 251. F256：Unsigned Range-Balanced Switch Tree（2026-07-29）

- 研究问题：F255 linear chain对`C`个case只生成`C`次equality，总IR小，但最后case
  与default路径深度为`C`；在IFSS中这会同步放大path literal、branch constraint和
  Backsolver controller距离。F256增加`SYMCC_IFSS_SWITCH_MODE=balanced`，保留
  `linear`默认兼容模式，并用无符号range tree降低最坏路径深度；
- Tree构造：case按同位宽APInt unsigned值排序。递归节点以左半最后一个case作为
  upper bound，生成`icmp ule selector, bound`；叶节点再做精确`icmp eq`，false
  进入default。对`C=7`，root bound为2，共6个range和7个equality node，任一case/
  default路径最多3次range加1次equality，而linear最坏为7次equality。总comparison
  从`C`增至`2C-1`，因此这是depth/IR-size trade-off而非无条件性能提升；
- Default多路径SSA：每个leaf的非case值都可进入default，所以default从一个edge
  扩展为`C`个gap predecessor。Lowering先保存default目标每个PHI的原controller
  incoming value，删除原incoming，再为每个leaf复制同一value；case目标仍只有一个
  leaf predecessor。该重写保持edge-specific PHI语义，并使F252把default的多条
  path做OR而不是伪造一个谓词；
- 证书与声音性：balanced comparison/branch使用
  `bounded-switch-tree-v1`，节点kind为`unsigned-upper`或`case`；每个leaf branch
  还带default metadata。F255的unique successor、exact merge、2--8 arms和
  fail-closed边界不变。最大7 cases产生14条case/default逻辑路径和20个
  non-controller/arm block，仍在F252的64-path/32-block预算内；
- 验证与结果：`test/backsolver_switch_balanced.ll`同一8-arm IR分别执行linear和
  balanced。静态检查确认linear为7 eq，balanced为6 ule+7 eq、root bound=2，
  default edge-PHI incoming从1精确扩展为7；两者均经LLVM verifier。Symbolized
  balanced tree产生12个非支配condition-cache computation和7层state ITE。原生
  输入`00`实际选case0/value10，target为case6/value70，QSYM得到首字节`06`的
  validated Backsolver candidate，direct与fallback telemetry均通过；
- 科研边界：当前balanced按case数而非profile概率或value-domain gap质量切分，
  不保存原switch branch weights，也未实现optimal alphabetic tree、Huffman/
  Hu-Tucker、range compression或online mode selection。正式实验应同时报告
  comparisons、max/mean weighted depth、default path count、IR/condition DAG、
  compile/solver CPU和coverage，并在uniform/skewed profile上比较linear、
  balanced与未来profile-aware策略。当前等级I/T。

## 252. F257：Profile-Weighted Optimal Alphabetic Switch Tree（2026-07-29）

- 研究问题：F256只优化最坏深度，真实程序中的switch case频率通常高度偏斜。
  F257增加`SYMCC_IFSS_SWITCH_MODE=profile`及按stable switch site索引的外部观测
  profile，在不改变case的unsigned有序关系、leaf精确匹配和default语义的前提下，
  最小化case观测分布上的期望range判定成本。该设计是有序决策树而非Huffman树：
  每个内部节点仍是可直接lower到LLVM的`selector <= upper-bound`；
- 输入与选择：`SYMCC_IFSS_SWITCH_PROFILE=<path>`的每个非注释行严格为
  `<site> <unsigned-decimal-case|default> <positive-weight>`。每个被选择站点必须
  恰好提供全部case和一个default，case文本规范化前导零；重复键只使对应site
  invalid，无法解析的全局行使文件malformed。所有region在任何CFG变换前一次性
  读取和选择profile，保证多switch模块中前一个lowering不能改变后一个site映射；
- 最优树算法：将unsigned排序后的case权重记为`w_i`。区间动态规划使用
  `D[l,r] = W[l,r] + min_k(D[l,k] + D[k,r])`，`D[i,i+1]=0`，并以最小split作为
  相同成本的确定性tie-break。最终证书objective为
  `D[0,C] + sum_i(w_i)`，后一项表示每个case固定执行一次leaf equality。
  `C<=7`时构建时间`O(C^3)`、空间`O(C^2)`；所有加法饱和到`uint64_t`，不会因
  profile计数溢出改变为低成本树；
- 证明与回退：profile树节点使用`bounded-switch-profile-tree-v1`；
  root comparison和branch另携`profile-weighted-switch-v1`，记录site、完整64位
  内容指纹、default权重、objective、case数及有序`(case,weight)`。缺少路径、
  文件不可读、语法损坏、site缺失、重复键、case集合不符或不完整时不做部分
  profile变换，而是生成F256 balanced tree，并以
  `profile-switch-fallback-v1`记录精确原因。原switch site在删除前固化到
  lowering result，证明附着阶段不读取悬空Instruction；
- 验证与结果：`test/backsolver_switch_profile.ll`固定site 257257并给case0权重
  1000、其余case权重1。七case optimal tree的root由balanced的upper bound 2变为
  0，仍保持6个range、7个leaf equality、LLVM verifier和default PHI语义；
  incomplete、unreadable及duplicate profile分别产生可检查的balanced fallback
  reason。Symbolized树仍生成7层state ITE，原生输入`00`可得到case6的`06`
  validated Backsolver candidate，证明profile优化未破坏跨arm可达性；
- 科研边界：单一default计数无法说明其值落在哪个case gap，因此default weight
  当前只写入证明，**不参与split objective**；否则会凭空假设gap分布。当前也未
  导入LLVM `branch_weights`、在线衰减/置信区间、value-gap压缩、bit-test或
  profile/tree独立manifest。正式实验必须比较linear/balanced/profile三臂，
  报告profile采集与评估划分、weighted/max depth、objective重算、IR/DAG、
  compile/solver CPU、candidate validity和coverage AUC；当前等级I/T。

## 253. F258：Shared-Destination Switch Edge/PHI Multiplicity Proof（2026-07-29）

- 研究问题：LLVM允许switch的多个case/default edge指向同一destination，但PHI
  必须为每条重复edge保存一个incoming，且同一predecessor的这些incoming value
  必须相同。F255曾直接拒绝shared destination。F258将“逻辑switch edge”与
  “唯一IFSS endpoint”分离：仍限制2--8条case/default edge，但只要求至少两个
  unique destination，使共享case归入同一data/memory/return state；
- 接受与PHI重写：collector用`getUniquePredecessor`而非
  `getSinglePredecessor`，并验证每个destination的CFG predecessor edge数等于
  原switch multiplicity；其每个PHI必须有相同数量、相同Value identity的controller
  incoming。Lowering删除全部重复incoming，再为每个新test/range leaf edge复制
  原值。所有edge同一destination没有state收益，仍fail closed；外部predecessor、
  不等incoming、EH/address-taken及原有结构拒绝边界不变；
- 两种multiplicity语义：linear chain每个原case/default仍对应一条新edge，所以
  示例共享目标为`3→3`。Balanced/profile tree的default由每个case leaf miss进入，
  因此三case示例中共享目标的两个case edge加三个default miss形成`3→5`；这不是
  重复插入bug，而是F256精确default gap展开。root携
  `shared-switch-edge-split-v1`，记录site、original/lowered总edge数、unique
  destination数及逐destination `(ordinal, original, lowered)`；受影响PHI携
  `shared-switch-phi-multiplicity-v1`；
- Data正确性修复：共享目标可能使merge仍只有两个unique incoming。旧两臂IFSS
  shortcut仅按root successor dominance选值，会把“非首case”误当成另一arm。
  F258检测root的shared-edge证书后强制两臂PHI走F252完整partition，逐路径AND并对
  同destination做OR，再构造ITE。MemorySSA原本已走该通用partition，但proof
  classifier也改为`must-alias-memoryssa-multi-v1`，不再错误声明direct-root proof；
- Exit组合：switch chain最后可能出现true/false同destination。F254现允许这种
  内部conditional edge按两条逻辑路径枚举，根controller仍要求不同successor；
  因而共享case的两个unique return blocks可继续归并为certified exit-state PHI；
- 验证与结果：`test/backsolver_switch_shared.ll`用default/case A/case C共享
  destination、case B独立的四edge switch，显式包含三个相同controller incoming
  的PHI。Linear verifier确认`3→3`，balanced/profile确认`3→5`，weighted与shared
  root proof可共存；symbolized data和MustAlias memory各生成完整路径ITE，
  switch→F254形成两返回state。输入`A`经复杂OR谓词的Z3 fallback生成并验证`B`
  候选。负向测试把全边同目标保留为未转换switch；
- 科研边界：同predecessor重复PHI value在LLVM verifier层必须相同，因此本实现
  不声称支持edge-specific不同值；也未处理external predecessor、critical edge
  跨region、indirectbr/callbr或循环switch。公开评估应报告original/lowered edge
  multiplicity、unique endpoints、default gap放大、路径/condition DAG、direct与
  Z3 fallback率、compile/solver CPU、validated yield及coverage；当前等级I/T。

## 254. F259：LLVM Branch-Weight Import 与可重放 Switch Manifest（2026-07-29）

- 研究问题：F257只把profile proof留在变换后IR，无法独立枚举最终tree/destination
  mapping，也未利用Clang/LLVM已有的标准`!prof branch_weights`。F259把外部
  stable-site profile、LLVM metadata、tree shape、fallback和shared multiplicity
  归一化为同一proof-carrying JSONL artifact；
- 来源优先级：`profile` mode若指定外部文件，则该文件中的对应site优先。文件
  unreadable/malformed或site entry invalid/incomplete时fail closed到balanced，
  即使原switch另有`!prof`也不静默掩盖配置错误；仅当未指定文件或文件中没有该
  site时，才调用LLVM `extractBranchWeights`。Successor 0严格映射default，
  successor 1..C映射原case order，再按unsigned case value重排。权重数须等于
  `C+1`且全部非零；zero或invalid metadata产生分类fallback；
- Proof扩展：`profile-weighted-switch-v1`新增来源
  `external-stable-site`或`llvm-branch-weights`，profile指纹同时绑定source、
  stable site、有序case/value/weight及default weight。相同计数但不同来源不会
  被误认为同一证据；
- Manifest：`SYMCC_IFSS_SWITCH_MANIFEST_OUT=<path>`为每个接受switch追加一行
  `symcc-ifss-switch-tree-v1` JSON。记录module/source/function/site、
  requested/effective mode、node schema、logical/lowered edges、unique/shared
  destinations、逐destination original/lowered multiplicity、source-order case
  inventory、normalized weights、fallback、profile fingerprint/objective，以及
  完整preorder comparison tree。Site、case、weight与fingerprint均用规范十进制
  string保存，避免JSON consumer的64位精度损失；
- Tree身份：`tree_fingerprint`绑定site、effective mode、profile fingerprint、
  logical/lowered edge totals、default destination、逐destination multiplicity、
  每个case ordinal/value/destination和所有range split；因此相同comparison shape
  但不同state mapping也不能共享身份。所有manifest在CFG改写前构建、变换全部完成
  后一次追加，避免读取已删除switch；
- 独立验证：`util/verify_ifss_switch_manifest.py`不依赖LLVM，逐JSONL record重算
  FNV-style profile/tree fingerprint、饱和`uint64_t` interval DP及objective、
  linear顺序或balanced/profile split、preorder node坐标、default expansion和
  shared multiplicity。任何schema、weight、split、destination、objective或
  fingerprint不一致均非零退出；
- 验证与结果：`backsolver_switch_profile.ll`验证external与LLVM metadata均把
  七case root置于0、objective 2028，explicit incomplete external仍回退root 2；
  manifest经独立verifier，篡改root value被拒绝。
  `backsolver_switch_branch_weight_reject.ll`验证zero branch weight分类回退；
  `backsolver_switch_shared.ll`验证linear/balanced的多record manifest及`3→3`/
  `3→5` multiplicity可重算；
- 科研边界：聚合default weight没有value-gap分布，故range split仍只优化case
  weights，也**不**把推测概率写回生成branch的标准`!prof`；这样牺牲下游概率提示
  但避免伪造观测。当前append artifact没有跨进程锁/原子rename，也未绑定编译器
  binary hash、在线衰减或置信区间。公开实验应封存输入profile、IR、manifest和
  verifier版本，报告source覆盖/回退率、objective、weighted depth、compile/
  solver CPU与coverage AUC；当前等级I/T。

## 255. F260：Bounded Multi-Continuation Exit-ID/Live-Out Tuple（2026-07-29）

- 研究问题：F254只能把多个normal return归并成跨调用返回状态，不能表达
  `break`/早退分支继续到不同CFG continuation的控制身份。F260新增
  `IFSSContinuationLowering` module pass，把一个严格有界区域的多个逻辑出口编码为
  `ExitState { exit_id, scalar_live_outs[] }`。`exit_id`不是仅供审计的标签，而由
  synthetic dispatch branch chain实际消费；既有F252/F253随后为exit-id和每个
  live-out PHI恢复完整path partition与ITE；
- 结构证明：controller必须是两个不同successor的conditional branch。从controller
  做确定性DFS，只允许`BranchInst`、single-entry dominated、acyclic、非EH、
  非address-taken区域；遇到不再被controller支配或以PHI开头的block即视为边界。
  每个候选限制2--8条唯一CFG exit edge、至少两个continuation destination、
  最多32个区域block和64条枚举路径。每个函数只提交指令序中第一个完整候选，
  所有函数候选在任何CFG修改前收集；
- Tuple完备性：destination中的每个PHI都是一个live-out slot，整个region限制1--8
  个slot，只接受integer/floating/pointer。对每个region source predecessor，
  incoming数量必须与CFG edge multiplicity精确相等；LLVM重复edge要求相同
  `Value*`。直接`undef`/`poison`、vector/aggregate/token、缺失edge或超过slot预算
  会拒绝整个候选。Destination的外部incoming保持不变；本pass只替换来自已证明
  region的incoming；
- Lowering语义：每条原exit edge先进入独立capture block，再汇入dispatch。
  Dispatch含一个`i8 ifss.cont.exit_id` PHI和每slot一个live-out PHI。该slot所属
  destination的exit携真实incoming，其他exit携类型正确的零/null中性值；中性值
  只存在于不会消费该slot的continuation路径。Dispatch按exit ordinal比较
  `exit_id`，进入独立resume trampoline，再跳回原destination。Arm内计算、store和
  call均留在capture之前的原路径，不被线性执行或投机复制；
- SSA/edge正确性：原destination PHI删除所有region source incoming，再按逻辑exit
  逐一添加`(dispatch-liveout,resume)`；同predecessor双edge因两个capture/resume
  保持精确multiplicity。全部slot、edge和预算验证成功后才改IR。新dispatch比较及
  branch携`symcc.ifss_force_partition`，确保共享/非一一映射的两臂consumer不误用
  direct-root shortcut；`Symbolizer`的data和MemorySSA proof分类均识别该强制标记；
- Proof metadata：controller与dispatch状态携
  `bounded-continuation-tuple-v1`及controller site、exit/destination/slot/block/
  path count。Capture和resume edge记录exit ordinal、原terminator site、
  successor index和destination ordinal；每个dispatch/destination PHI绑定slot
  ordinal、destination ordinal与原PHI site。这是可静态审计的结构证书，不是独立
  CFG verifier或alias proof；
- 验证与结果：`test/backsolver_continuation_tuple.ll`覆盖3 exits、2 destinations、
  2 live-outs和真实两级exit-id consumer。纯lowering与symbolized IR均经LLVM
  verifier；F252/F253为exit-id及两slot生成6个ITE。输入`C`走第三出口，原生QSYM
  生成跨destination输入`B`，本次记录为Backsolver targets/attempts/SAT
  `3/3/2`、direct attempts/SAT `9/2`及一次Z3 fallback。
  `backsolver_continuation_shared.ll`证明同source双edge的`2→2` PHI multiplicity；
  `backsolver_continuation_tuple_reject.ll`覆盖单destination、vector、poison和cycle。
  Flag关闭保持原CFG。加入F260后全量compiler/lit为139/139，LLVM18 `-Werror`
  build通过；
- 科研边界：当前tuple只承载destination PHI可表示的scalar SSA live-out，不包含
  MemorySSA location、aggregate decomposition、exception/coroutine/indirect exit、
  loop-carried state或跨函数continuation。Neutral slot依赖“未选destination不消费”
  的控制证明，不能被当作全路径有效值。公开评估应报告候选/接受/拒绝taxonomy、
  exits/destinations/slots/paths、ITE/DAG和constraint增量、compile/solver CPU、
  validated cross-destination yield及coverage AUC，并做
  `SYMCC_IFSS_CONTINUATION_STATE=0/1`等CPU消融；当前等级I/T。

## 256. F261：Proof-Carrying Bounded Affine Natural-Loop Summary（2026-07-29）

- 研究问题：逐迭代concolic execution会为小符号trip loop重复构造相同branch与
  recurrence DAG；简单unroll又按bound复制IR。F261新增`IFSSLoopSummary` module
  pass，对一个可完整证明的自然循环执行闭式加速，把
  `x_{t+1}=x_t+c`归约为`x_exit=x_0+T*c (mod 2^w)`，使后续SymCC直接求解
  `mul/add`而不重放0--8次loop condition；
- 自然循环形状：使用LLVM `DominatorTree/LoopInfo`，只接受恰好两个block的
  canonical loop：唯一preheader无条件进入header，header是唯一exiting block，
  true edge进入唯一latch，false edge进入唯一exit，latch无条件回header，且只有
  一条backedge。四个边界block不得address-taken/EH；每个函数只提交preorder中
  第一个完整候选；
- Trip证明：header condition必须精确为unsigned
  `icmp ult %iv, %trip`，induction从0开始并由无`nuw/nsw`的普通`add %iv,1`
  更新。Trip必须loop-invariant，静态上界不超过8。当前上界解释器有界递归8层，
  支持integer width<=3、常量、`freeze`、到<=i3的`trunc`、`zext`、两臂
  `select`、constant-mask `and`及positive-constant `urem`；直接undef/poison、
  无法证明或上界>8均保持原loop。由`0<=T<=8`和unit step可知退出前induction不
  wrap，执行次数精确为T；
- State证明：除induction外要求1--8个integer header PHI。每个state必须有
  preheader initial和latch update `add phi, ConstantInt`，类型完全一致，且update
  无`nuw/nsw`。Header除PHI/condition/branch、latch除这些updates/branch外只允许
  debug intrinsic；因此load/store/call/fence/atomic、非仿射或交叉state recurrence
  全部拒绝。Initial direct undef/poison拒绝，且至少一个非induction state在loop外
  被观察；
- 模算术声音性：LLVM plain integer add是位向量模`2^w`运算，重复T次常量加法与
  `initial + trunc_or_zext(T)*step`在同一ring中等价；state宽度小于trip时先trunc
  仍保持该ring中的T同余类，宽度较大时zero-extend。原update若有`nuw/nsw`，重复
  执行可能产生poison而闭式flags条件不同，故不复制或弱化flags，而是整体拒绝；
- CFG与SSA事务：所有候选先收集并冻结原始site。每个state在preheader生成真实
  `mul/add`（即使operand为常量也禁止IRBuilder折叠），exit PHI先新增合法preheader
  incoming，外部state use改为summary，preheader再重定向到exit，最后由LLVM
  `DeleteDeadBlocks`删除header/latch并清理旧incoming。这一顺序避免瞬时PHI/
  predecessor不一致；loop内effects不存在，所以无操作被投机移动；
- Proof metadata：summary `mul/add`和重定向branch携
  `bounded-affine-loop-summary-v1`，绑定原header/condition-branch site、
  maximum trip、state count、state ordinal、原PHI/update site。Branch使用
  `stateOrdinal=stateCount`并绑定induction PHI/update。这是结构与闭式来源证书，
  尚不是独立重放的LoopInfo/SSA verifier；
- 验证与结果：`test/backsolver_loop_summary.ll`覆盖一状态i8和双状态
  i8-trip→i16-state、exit PHI清理及flag-off。原始/summary IR用`lli`对输入
  `0x00..0x1f`逐一差分，覆盖每个trip 0--7四次，return status全部相等；
  symbolized IR产生直接`_sym_build_mul/add`。输入`00`、target state 25时常规
  solver只用1 query/1 SAT生成精确候选`05`，Backsolver target为0符合闭式无ITE
  的预期。`backsolver_loop_summary_reject.ll`覆盖bound 15、store、乘法recurrence、
  signed condition、`add nuw`和poison trip，均无schema且verifier-clean。F261后
  全量compiler/lit为141/141，LLVM18 `-Werror` build通过；
- 科研边界：这不是通用loop invariant推断、polyhedral acceleration或loop
  invariant code motion。当前不支持多block body、多个exit、break/continue、
  affine matrix/variable step、signed/descending induction、memory recurrence、
  calls、exception、nested interaction或large/symbolically unbounded trip。
  删除loop也改变instrumented edge集合，因此公开评估必须以原程序replay coverage
  为权威，并报告候选/接受/拒绝、trip/state分布、IR/DAG缩减、compile/solver CPU、
  candidate validity和coverage AUC；做`SYMCC_IFSS_LOOP_SUMMARY=0/1`等CPU消融后
  才能声称收益。当前等级I/T。

## 257. F262：MemorySSA/AA-Proven Continuation Memory Tuple（2026-07-29）

- 研究问题：F260只把destination PHI表示的scalar SSA值放入continuation tuple。
  一个exit若通过store传递状态、而对应continuation再load该location，普通动态
  shadow memory只能观察已执行路径的store，无法为未执行exit构造隐式控制值。直接
  把load复制到capture同样只读取当前路径状态，不能形成完整候选空间。F262因此在
  F260之后、Symbolizer之前新增`IFSSContinuationMemory` Function pass，以LLVM
  MemorySSA定义状态、AliasAnalysis的MustAlias/ModRef结论和F260 edge证书共同构造
  显式per-exit memory live-out PHI；
- 结构绑定：候选必须是F260 destination中的有use simple scalar load，类型限
  integer/floating/pointer。其MemoryUse defining access必须是F260 dispatch中的
  MemoryPhi，MemoryPhi incoming数、dispatch capture predecessor和
  `bounded-continuation-tuple-v1` exit count必须一致。Destination全部predecessor
  必须是同一controller、同一destination ordinal的F260 resume edge，且集合与
  capture证书中的相关exit精确相等；external predecessor、缺失/重复ordinal和
  metadata不一致均拒绝；
- Memory proof：对每个会到达该destination的exit，从dispatch MemoryPhi对应
  capture incoming向后遍历最多8个MemoryDef。第一个对load location为MustAlias的
  writer必须是non-atomic/non-volatile、等宽simple store，stored value不能直接为
  undef/poison，且store/value都支配capture terminator。中间definition只有在
  MemorySSA存在且AA证明对该location为NoMod时才能跳过；MayAlias/Mod、MemoryPhi、
  atomic/fence、预算耗尽或没有覆盖store均使该location拒绝；
- Lowering语义：每个controller最多4个memory slots。全部候选先收集；超过预算时
  该controller不做部分提交。成功候选在dispatch增加
  `ifss.cont.memory` PHI：相关exit携其reaching store value，其他destination的
  exit携同类型zero/null。中性值只位于控制证明不会消费该slot的路径。Destination
  原load保留并继续执行，因此原有trap/访存时序不被删除；其数据uses改为MemorySSA
  已证明等价的dispatch value。Load之前若destination已有任何may-write操作则拒绝，
  防止把后续状态错误地前移；
- Symbolic composition：新PHI是普通scalar tuple state，F249/F252/F253按原
  controller路径构造完整ITE并复用condition ownership。原load标记
  `symcc.ifss_continuation_memory_source`，避免F250再次尝试同一dead symbolic merge。
  新PM自动顺序为switch、loop summary、return exit、F260 continuation、F262
  memory tuple、Hydra、live continuation和Symbolizer；legacy PM保持相同顺序；
- Proof metadata：`must-alias-continuation-memory-tuple-v1`绑定controller site、
  memory slot ordinal、destination ordinal、原load site、总exit/相关exit数，
  并为每个相关exit记录exit ordinal、MustAlias store site、按nearest-first顺序的
  skipped NoMod definition数量和site。该IR证书足以静态定位证明输入，但尚不是能在
  独立进程中重算AA/MemorySSA的sealed artifact；
- 验证与结果：`test/backsolver_continuation_memory.ll`覆盖3 exits、2
  destinations、两个不同location及每exit一项NoMod def-chain。Lowered与flag-off
  IR对全部256个一字节输入用`lli`差分一致；symbolized IR经LLVM verifier且两个
  memory slots都形成ITE。原生输入`C`生成跨destination的`B` backsolve witness；
  记录为Backsolver targets/attempts/SAT `3/3/2`、direct attempts/SAT `9/2`和一次
  Z3 fallback。`backsolver_continuation_memory_reject.ll`覆盖MayAlias干扰、相关
  exit缺store、volatile load、external predecessor、destination前缀写和第5个
  slot的controller级原子回退；
- 科研边界：F262处理完整等宽scalar MustAlias store，不做partial-overlap byte
  composition、initial-memory fallback、nested/cyclic MemoryPhi、symbolic alias、
  aggregate/vector、atomic/concurrent memory、destination内写后load或跨函数memory
  state。它是F250--F252 proof在multi-continuation上的有界组合，不是general
  MemorySSA/points-to或完整IFSS memory model。公开评估应报告候选location、相关
  exits、def-chain长度、拒绝taxonomy、tuple/ITE规模、compile/solver CPU、
  validated cross-destination yield和original-replay coverage AUC；当前等级I/T。

## 258. F263：Replay-Verifiable Continuation CFG/Tuple Manifest（2026-07-29）

- 研究问题：F260/F262的metadata能在IR中定位controller、exit、slot和MemoryDef
  chain，但缺少独立artifact时，实验脚本无法证明一个运行使用了哪组CFG/tuple，
  也不能检测序号、destination或chain在归档过程中的篡改。F263新增
  `SYMCC_IFSS_CONTINUATION_MANIFEST_OUT` JSONL和独立
  `util/verify_ifss_continuation_manifest.py`；
- 输出前重放：manifest不是把metadata直接转成JSON。F263在F262 Function pass的同一
  AA/MemorySSA分析时点重新收集dispatch capture，要求exit ordinal 0..N-1完备且
  `(original terminator site, successor index)`唯一；再扫描全部resume，要求每个
  exit恰好一个resume、source/successor/destination与capture proof一致，且每个
  destination至少一条edge。Scalar slots按ordinal重放原PHI site和destination；
- Memory proof二次验证：对每个`ifss.cont.memory` PHI，先由metadata取得slot、
  destination和原load site，再唯一定位仍保留的source load，重新调用F262
  `collectCandidate(requireUse=false)`。这会再次检查load MemoryUse→dispatch
  MemoryPhi、精确capture/resume集合、AA MustAlias、最多8项NoMod chain、
  store/value dominance和destination前缀无写。重算的每个exit/store/skipped site
  必须与metadata逐项相同，之后record才能标记
  `llvm-memoryssa-aa-revalidated-v1`；没有memory slot的F260结构record标记
  `structural-only-v1`；
- Artifact schema：`symcc-ifss-continuation-manifest-v1`保存module/function、
  controller site、exit/destination/scalar/memory/block/path count，规范exit表、
  destination→exit partition、scalar slot→original PHI以及memory
  slot→load→per-exit store/NoMod chain。64位site和fingerprint用规范十进制string
  保存，避免JSON number精度损失；
- 内容身份：`proof_fingerprint`使用与stable site相同的64位FNV-style mix，顺序
  绑定schema、module、function、所有预算、exit edge、scalar slot和memory
  load/store/skipped chain。字段顺序由ordinal规范化；相同CFG但不同memory writer
  或NoMod chain不会共享身份；
- 独立验证：Python verifier不加载LLVM。它重算canonical uint64、全部count/bound、
  edge唯一性、destination partition、slot ordinal、相关exit集合、NoMod长度<=8、
  site局部唯一性、analysis分类和完整fingerprint。它能验证artifact内部结构与
  内容身份；MemorySSA/AA语义重算已在compiler输出门完成，离线端不声称自己实现
  LLVM BasicAA；
- 验证与结果：`backsolver_continuation_memory.ll`现在生成memory-on和memory-off
  两个manifest，独立verifier分别接受`llvm-memoryssa-aa-revalidated-v1`和
  `structural-only-v1`。测试把exit destination、首个NoMod site和fingerprint各
  篡改一次，三者均非零拒绝；原有256输入差分、native `C→B` witness和LLVM
  verifier继续通过。Python脚本通过`py_compile`与Ruff，C++通过LLVM18 `-Werror`；
- 科研边界：输出是append-only，尚未做跨compiler process文件锁、atomic rename、
  compiler binary/LLVM build identity、输入IR cryptographic digest或artifact
  sealing。离线verifier重算结构和FNV内容身份，不从bitcode重跑MemorySSA/AA；因此
  公开实验应同时封存输入/输出IR、compiler identity和manifest，并在单build新文件
  上运行verifier。当前等级I/T/E。

## 259. F264：Atomic SHA-256 Continuation Artifact Seal（2026-07-29）

- 研究问题：F263 proof fingerprint能检测record内部变化，但64位FNV不是
  cryptographic identity，append manifest也没有绑定输入IR、最终lowered IR、
  compiler pass binary或LLVM tool。把这些hash放进Function pass仍不正确，因为
  pass运行时还看不到最终输出文件。F264新增build后独立工具
  `util/seal_ifss_continuation_artifact.py`，把结构证明与真实构建制品分层；
- Seal流程：`seal`子命令先调用F263独立verifier，读取全部非空record的
  `proof_fingerprint`并锁定顺序/数量。随后流式计算manifest、input IR、lowered
  IR、SymCC compiler module和实际LLVM tool五个文件的SHA-256与byte size；所有路径
  先`resolve(strict=True)`且目标必须为regular file。LLVM identity通过受5秒deadline
  和16 KiB上限约束的`<tool> --version`取得；
- Envelope：`symcc-ifss-continuation-seal-v1`保存record count、有序proof
  fingerprints、五个artifact的resolved basename/size/SHA-256以及完整LLVM identity。
  对不含`seal_sha256`的对象使用UTF-8/ASCII、sorted-key、无额外空白的canonical
  JSON，再计算外层SHA-256。时间戳、绝对路径和随机nonce不进入身份，因此相同输入
  可复算；
- 原子封存：输出旁路`.lock`使用`flock(LOCK_EX)`串行化竞争者；锁内要求seal path
  尚不存在，拒绝覆盖已有证据。同目录`mkstemp`写入后flush+file `fsync`，
  `os.replace`提交，再对目录`fsync`，从而避免部分JSON、跨文件系统rename和
  crash后目录项未落盘。失败路径清理临时文件；
- Verify流程：`verify`先检查schema与canonical lowercase 64-hex outer hash，再对
  去除hash的envelope重算SHA-256；随后重新验签manifest、重新hash所有文件、重取
  LLVM identity并要求完整对象相等。验证必须显式提供全部artifact路径，不允许
  仅凭seal自证；
- 验证与结果：`backsolver_continuation_memory.ll`在F263 record上完成seal/verify；
  同一output二次seal因fresh-output gate拒绝。把lowered IR追加一行注释后验证失败，
  修改sealed `record_count`但不更新outer hash也失败。脚本通过`py_compile`和Ruff，
  原有manifest tamper、256输入差分与native witness保持通过；
- 科研边界：F264绑定的是调用者提供的input/lowered IR和binary，不能证明这些文件
  一定来自同一个命令行，也没有签名密钥、远端透明日志、TPM attestation或
  content-addressed object store。`flock`只保证同一支持POSIX锁的文件系统；建议
  每个compile job使用独立seal path，再将verified envelope纳入F67实验manifest。
  当前等级I/T/E。

## 260. F265：Independent Bitcode MemorySSA/AA Proof Replay（2026-07-29）

- 研究问题：F264证明manifest和制品在seal之后没有改变，但完整性不等于语义有效性。
  攻击性较低但科研上同样危险的例子是：修改lowered IR中的alias关系，再用原manifest
  生成一个新的、内部完全一致的seal。单独SHA-256无法判断旧的MustAlias/NoMod chain
  是否仍适用于新IR。F265新增`util/replay_ifss_continuation_artifact.py`，把F263的
  compiler-time重放提升为sealed artifact上的独立LLVM进程重放；
- 身份门：replay首先完整调用F264 verify，重新验证outer hash、manifest、
  input/lowered IR、SymCC pass binary、LLVM tool及version identity。随后再次运行
  F263 verifier并读取规范JSON records；因此独立证明使用的IR、pass实现和`opt`
  executable均由同一envelope绑定，而不是从`PATH`隐式选择；
- 独立分析进程：工具在fresh temporary directory启动新的`opt` subprocess，只运行
  `-passes=ifss-continuation-memory`。环境强制
  `SYMCC_IFSS_CONTINUATION_MEMORY=0`和`SYMCC_IFSS_CONTINUATION_STATE=0`，禁止再次
  lowering，只通过`SYMCC_IFSS_CONTINUATION_MANIFEST_OUT`请求证明重建。进程有60秒
  deadline，错误输出截断为最后4 KiB，避免挂起或无界诊断污染实验控制面；
- 语义重建：sealed lowered IR中保留的F260/F262 proof metadata只用于定位
  controller/load/store sites；pass仍需从bitcode重新构造当前MemorySSA和AA结果，
  验证capture/resume partition、source load的MemoryUse、dispatch MemoryPhi、
  MustAlias writer、最多8项NoMod chain、dominance及destination前缀无写。新manifest
  必须先通过独立Python verifier，再与sealed原record做数量和JSON对象逐项完全相等
  比较；
- 验证与结果：正例对F262的3-exit/2-destination/2-location lowered IR完成seal、
  verify和新进程replay。反例把一条原先写`%noise`且被AA判为NoMod的store改为写
  `%slot_a`；修改后的IR仍通过LLVM verifier，也能使用原manifest生成一个新的有效
  SHA-256 seal，但F265独立replay非零拒绝。这明确区分了artifact integrity与
  proof semantic validity；两个continuation定向lit均通过；
- 科研边界：这是process-independent、artifact-bound的同实现重放，不是第二套AA
  算法或形式化证明检查器；compiler plugin bug可能在产生和重放阶段一致复现。
  subprocess尚未使用容器、seccomp或hermetic loader，也没有签名/透明日志。公开
  实验应保存seal、重放stdout/stderr摘要和返回码，并将“seal verified”与
  “MemorySSA/AA replayed”作为两个独立证据字段。当前等级I/T/E。

## 261. F266：Upper-Triangular Affine Loop Closed Form and Manifest（2026-07-29）

- 研究问题：F261只处理彼此独立的`state += constant`，不能摘要常见的归纳链，
  例如`x'=x+2y+3; y'=y+z; z'=z+1`。直接按`trip=0..7`生成每个候选状态和select
  虽然concrete等价，却会造成单块内数百条symbolic operation；早期原型实际触发
  Symbolizer反复split后的非法CFG。F266没有掩盖此失败，而改用unipotent
  upper-triangular matrix的紧凑闭式；
- 识别边界：沿用F261经LoopInfo证明的单preheader、header、latch、backedge、
  exiting header、单exit、恰好两loop blocks及`iv=0; iv<trip; iv++`、`trip<=8`。
  新路径接受2--4个统一整数位宽（最多4096 bit）的state PHI；update expression是
  最多32个latch指令组成的plain `add/sub`与常数`mul` affine DAG。矩阵对角必须全1，
  row `i`只能依赖column `i..N-1`且至少有一项cross-state coefficient。`nuw/nsw`、
  非常数乘法、逆三角依赖、非unit diagonal、跨位宽、额外指令和原有副作用边界均
  fail closed；F261独立更新仍走原schema和代码路径；
- 模位宽代数：编译器把update规范化为`x'=Ax+b`的APInt矩阵，在状态的
  \(\mathbb Z/2^w\mathbb Z\)环中计算。令`N=A-I`，upper-triangular与unit diagonal
  保证`N^state_count=0`，因此
  `A^T=sum C(T,k)N^k`，累计偏移为
  `sum C(T,k+1)N^k b`。`T<=8`时二项式系数在i16中用
  `C(T,k)=C(T,k-1)*(T-k+1)/k`精确递推，无符号减法在`T<k`时只与已经为0的前项相乘；
  随后系数截断到state width，保持LLVM plain integer的模位向量语义；
- IR事务：所有`N^k`与`N^k b`在compile time计算，preheader只生成共享binomial DAG
  和每state的仿射组合，不枚举trip select。生成值携
  `bounded-upper-triangular-loop-summary-v1`，绑定header/branch/state/update sites、
  bounds、width和recurrence fingerprint。Exit PHI、外部uses、preheader redirect
  与dead-block删除复用F261事务；任何收集失败都不改IR；
- 可验证证据：`SYMCC_IFSS_LOOP_MANIFEST_OUT`输出
  `symcc-ifss-loop-recurrence-manifest-v1` JSONL，保存module/function、sites、初值
  身份、规范`A,b`以及trip 0..maximum的全部`A^t`与累计offset。独立
  `util/verify_ifss_loop_recurrence_manifest.py`重算canonical uint、upper-triangular/
  diagonal/cross-state约束、每一项模矩阵乘法与offset recurrence，并重算绑定
  schema/module/function/sites/initial/A/b的64位内容指纹；
- 验证与结果：三状态链式回归经LLVM verifier，摘要前后对32个一字节输入用`lli`
  完全一致；symbolized闭式IR也通过verifier。从输入`00`求解`result==184`得到低
  三位为5的候选，telemetry为1 query/1 SAT、一次Z3 solve、约6.4 ms solver CPU。
  Manifest基矩阵、派生power和fingerprint三类独立篡改均拒绝。逆三角依赖、
  non-unit diagonal和cross-width coupling保持原循环；三项loop定向lit通过，
  Python通过`py_compile`和Ruff，C++通过LLVM18 `-Werror`；
- 科研边界：F266仍不处理multi-block/multi-exit、非unit diagonal一般矩阵、
  symbolic coefficient、非线性、memory recurrence、异常或unbounded loop。
  i16 binomial正确性依赖公开的`trip<=8`证明；manifest验证代数artifact，但尚未
  cryptographically seal input/output IR，也未独立解析bitcode重建update DAG。
  删除loop edge会改变instrumented coverage，公开实验必须original-authoritative
  replay并报告IR DAG规模、solver CPU和接受/拒绝taxonomy。当前等级I/T/E。

## 262. F267：Bounded Post-Update Break/Continue Exit Tuple（2026-07-29）

- 研究问题：F261/F266要求唯一exiting header，只能表达trip耗尽后的normal exit。
  真实循环常在完成本轮state update后根据归纳变量break；简单删除循环会混淆
  normal header state与break latch state。F267在不扩大loop body或break predicate
  语言的条件下，为这一canonical multi-exit形态建立显式exit identity和live-out
  证明；
- CFG/语义边界：仍要求两块natural loop、单preheader/header/latch/backedge、
  `iv=0; iv<trip; iv++`和`trip<=8`。Header false edge是normal exit；latch在完成
  已接受的F261/F266 recurrence后，只允许`icmp eq iv, break_at`，true edge到独立
  break exit，false edge继续header。`break_at`必须同位宽且loop invariant。
  `ne`、比较`iv_next`、反向successor polarity、相同exit、第三exit、loop-variant
  break value或任何既有副作用均fail closed；
- Closed form：对当前迭代索引进行后更新break时，
  `break_taken = ult(break_at, trip)`，
  `executions = select(break_taken, break_at + 1, trip)`。`trip=0`自然得到normal
  exit和0次迭代；`break_at<trip`保证被选择的加一值在0..8内。F261 independent
  closed form和F266 nilpotent/binomial closed form都改用`executions`，无需枚举
  每轮break条件；
- Live-out事务：normal exit的loop-owned PHI输入只能是header `iv/state`，break
  exit输入只能是latch `iv_next/state_next`；direct external use、错误phase value
  或缺失/重复source edge拒绝。Lowering在preheader生成共享state摘要和
  `break_taken`分支，为两组exit PHI分别增加同一preheader的正确summary输入，再
  删除header/latch。LLVM随后可折叠单入边PHI，但共同final PHI仍保留normal/break
  logical-edge multiplicity；生成值携`bounded-break-loop-exit-v1`并绑定
  header/condition/two-exit sites、bound和state count；
- 独立证据：`SYMCC_IFSS_LOOP_EXIT_MANIFEST_OUT`输出
  `symcc-ifss-loop-exit-manifest-v1` JSONL，绑定module/function、header/branch/
  break/normal/break sites、trip/break identities、induction/state PHI与update
  sites、state widths/steps或F266 recurrence fingerprint。Artifact还显式保存
  `trip=0..maximum × break_at=0..maximum`的完整
  `(break_taken, executions)` truth table。独立
  `util/verify_ifss_loop_exit_manifest.py`重算bounds、phase-specific live-out
  identity、truth table和完整64位fingerprint；
- 验证与结果：两字节正例分别控制trip和break_at，normal消费更新前state、break
  消费更新后state并加100 exit bias。摘要前后对8×8共64组输入的`lli`状态完全一致，
  lowered与symbolized IR均通过LLVM verifier。从`00 07`出发求解result 119，生成
  `break_at=2, trip>=3`候选；telemetry为5 queries、3 SAT、2 UNSAT，Backsolver
  1/1 SAT。Manifest execution row、break live-out site和fingerprint篡改均拒绝；
  四类定向fail-closed测试在已证明`trip<=7`后才触发各自边界；
- 科研边界：F267是单一post-update equality break与implicit continue，不处理
  pre-update break、`iv_next`语义、多个break/continue sites、break predicate DAG、
  multi-block body、side-effecting/memory recurrence、嵌套循环或异常edge。Exit
  manifest验证公式和身份但尚未seal IR/binary，也没有独立bitcode CFG replay。
  公开评估应区分normal/break候选、truth-table bound、removed loop branches、
  solver CPU和original replay coverage。当前等级I/T/E。

## 263. F268：Bounded Multi-Block Linear-Arm Hydra Alignment（2026-07-29）

- 研究问题：F248只接受每个分支各含一个basic block的strict diamond，因而不能处理
  编译器前端或轻量优化产生的线性多块arm。F268把同一profile-guided single-site
  Hydra事务扩展到有界线性region，同时保留F248的原程序权威重放、spurious failure
  denylist和failure-preservation边界；
- CFG边界：每侧arm必须由1--4个unique-predecessor basic block组成，内部块只有
  unconditional branch，两个arm块数相同并汇入同一恰有两个predecessor的merge。
  Arm内禁止PHI；既有call/invoke、atomic/volatile、block address、unsupported
  instruction和escaping SSA限制继续生效。跨块SSA use只允许留在同一arm，离开arm
  只能成为merge PHI从该arm tail输入。不同长度arm、内部条件分支、循环、异常edge
  或额外外部predecessor均fail closed；
- 扁平化对齐：编译器按CFG顺序收集每侧block和instruction，把每条arm压平为一个
  保持def-before-use的序列，再复用F248 compatible-operation LCS。Matched operation
  逐operand生成condition select并构造merged instruction；unmatched safe ALU仍按
  F248规则补齐。由于arm内SSA use可跨块，对齐与value map覆盖整个flattened region，
  而不是逐块局部匹配。Merge PHI从两个tail block读取，成功后一次性删除全部arm
  blocks；任何晚期失败不提交部分CFG；
- Proof metadata与artifact：变换后的branch携
  `bounded-multiblock-linear-hydra-v1`，绑定stable site、arm block count及两侧
  flattened instruction count。`symcc-hydra-transform-v1` manifest新增
  `region_schema`、`arm_blocks`、`multi_block`、左右有序block sites、逐slot
  instruction sites/opcodes、output PHI sites、
  `requires_original_coverage_replay=true`和64位`structure_fingerprint`。指纹按
  schema、controller、block序列、完整alignment与输出身份确定性混合，防止只篡改
  alignment描述而保留旧摘要；
- 独立验证与campaign gate：新增
  `util/verify_hydra_transform_manifest.py`，独立检查1--4块边界、左右site唯一且
  不相交、alignment ordinal、site/opcode同时出现、每条instruction只出现一次、
  matched opcode相同、aligned/output计数、mode/replay分类和完整结构指纹。
  `util/hydra_transform.py`在读取带`region_schema`的新record时强制调用该verifier，
  因而campaign不能消费结构篡改后的manifest；历史F248 checked artifact没有新字段，
  保持原验证路径兼容；
- 验证与结果：`test/hydra_multiblock.ll`构造2×2 block linear arms并验证lowered
  与symbolized IR。原始与变换IR对全部256个一字节输入用`lli`差分一致，SymCC输出
  通过LLVM verifier；block-site重叠、alignment opcode和fingerprint三类篡改均被
  独立verifier拒绝。2-block/1-block unequal-arm反例保持原CFG；F248原profile/safe/
  aggressive/denylist测试继续通过。Hydra三项定向lit、Python `py_compile`/Ruff和
  LLVM18 `-Werror`构建均通过；
- 科研边界：F268不是任意SESE region melding。它不对齐不同长度block chain，不
  处理arm内条件树、loop、exception、call或general memory dependence；aggressive
  store readback仍只有failure-preserving语义。Safe模式的concrete差分不等价于
  source-edge coverage等价，因此所有模式都显式要求original-authoritative
  coverage replay。公开实验需报告接受/拒绝region形状、LCS/edit规模、fork与solver
  CPU、transformed/original coverage AUC、spurious failure和denylist收敛，并在相同
  总CPU下至少20次配对重复。当前等级I/T/E。

## 264. F269：Partial Store/Live-on-Entry Continuation Memory Tuple（2026-07-29）

- 研究问题：F262要求一个destination的每条相关exit都沿MemorySSA链到达
  equal-width MustAlias store；只要一条路径保留进入函数时的内存值，整个location
  就会被拒绝。把缺store直接解释为零值不正确，而把load无条件前移到controller又会
  在其他destination不访问该地址的路径上引入额外fault。F269只接纳store与
  `MemoryLiveOnEntry`的proof-carrying部分重叠；
- 分层MemorySSA证明：每条相关dispatch incoming仍最多遍历8个MemoryDef，并只跳过
  AA证明对load location为NoMod的definition。链可终止于原F262的simple MustAlias
  store，或精确终止于当前Function MemorySSA的LiveOnEntry。LiveOnEntry路径要求原
  load pointer支配对应capture terminator；同一candidate至少有一条store路径，若
  所有相关exit都只是LiveOnEntry则无合并收益并保持原load。遇到nested/cyclic
  MemoryPhi、MayAlias/Mod、atomic/fence、超预算或不可前移pointer仍fail closed；
- 路径局部snapshot：对LiveOnEntry exit，pass在该exit独占的capture block、
  dispatch branch之前插入同类型、同alignment的simple load。它只在原本会resume到
  该destination并执行原load的路径上运行，且MemorySSA/NoMod证明保证capture处值与
  function-entry值相同；因此不会在无关destination上增加地址访问。Dispatch tuple
  对store exit携stored operand，对initial exit携snapshot，对其他destination仍携
  不可消费的typed zero/null；
- Proof schema与正确性加固：混合tuple使用
  `must-alias-or-live-on-entry-continuation-memory-tuple-v2`。每条相关exit显式记录
  `Store=0`或`LiveOnEntry=1`、store site或canonical zero以及完整NoMod chain；
  snapshot携同一proof node。F269同时修复F263/F265重放只核对metadata而未核对
  dispatch PHI实际incoming的缺口：现在重放要求每个predecessor恰有一个incoming，
  store路径必须等于原stored operand，initial路径必须是同capture、同pointer/type/
  alignment、到terminator之间无write且绑定同proof的load，无关路径必须为typed
  neutral。把tuple值改成另一合法LLVM value会被语义重放拒绝；
- Artifact与独立验证：outer manifest继续使用兼容的
  `symcc-ifss-continuation-manifest-v1`，但混合slot增加`state_schema`，每个state
  增加`state_kind`，analysis分类为
  `llvm-memoryssa-aa-live-on-entry-revalidated-v2`。FNV内容指纹在新slot中额外混合
  schema、kind与canonical source identity；Python verifier仍接受历史F262全store
  records，但要求v2 schema恰好包含至少一个LiveOnEntry state、initial state没有
  `store_site`，并重算新fingerprint；
- 验证与结果：三exit/两destination正例中，destination A的一条exit store 10，
  另一条经一项NoMod noise store到LiveOnEntry；caller用输入派生初值。Lowered与
  原始IR对256个输入完全一致，symbolized IR通过LLVM verifier。从输入`C`求解
  result 26得到跨partial-overlap路径的`B`候选，Backsolver target/attempt/SAT均
  非零。Manifest kind篡改拒绝；正例seal后独立bitcode replay成功。随后把合法IR中
  snapshot PHI incoming改成常量99并重新生成有效seal，F265 replay仍拒绝。部分
  initial路径上的MayAlias write、原有all-missing-store/volatile/external-prefix/
  budget反例均不生成memory tuple；三项continuation定向lit、LLVM18 `-Werror`、
  Python `py_compile`/Ruff和diff check通过；
- 科研边界：LiveOnEntry是函数级初始memory version，不是任意region-entry snapshot。
  F269尚不穿越nested MemoryPhi，不合并部分字节/不同宽度，不处理symbolic alias
  split、aggregate/vector、atomic/concurrent memory、跨函数MemorySSA或destination
  prefix write。Snapshot load保留原路径的顺序failure语义，但不构成异常/信号环境
  下的形式化等价。下一层应为有界acyclic nested MemoryPhi建立逐incoming provenance
  DAG与独立replay，再研究byte-lane partial overlap。当前等级I/T/E。

## 265. F270：Bounded Acyclic Nested-MemoryPhi Provenance Tree（2026-07-29）

- 研究问题：F269只能让每条dispatch incoming沿线性MemoryDef chain到达store或
  Function LiveOnEntry；若continuation之前已经发生控制流汇合，MemorySSA会以
  非dispatch `MemoryPhi`表示到达状态，线性证明会拒绝本可精确恢复的memory
  live-out。F270把每个相关exit的MemorySSA provenance递归展开成有界无环树，同时
  继续以F260 dispatch、capture/resume partition和destination load为证明根；
- 证明边界：递归节点只允许`Store=0`、`LiveOnEntry=1`和`MemoryPhi=2`。每个
  MemoryPhi必须支配下游capture或父phi incoming block，具有2--4个不同incoming
  block，且不能是F260 dispatch phi；每个exit最多4个nested phi、16个provenance
  nodes，每条边最多跳过8个经AA证明NoMod的MemoryDef。Active-set拒绝循环；simple
  equal-width MustAlias store仍需stored operand与store支配对应edge，LiveOnEntry
  pointer仍需支配路径局部snapshot。整个slot仍至少包含一条真实store路径；
  MayAlias/Mod、atomic/fence、5-arm phi、重复incoming、超预算、poison/undef或
  dominance失败均使整个candidate fail closed；
- IR物化：编译器按MemorySSA树自底向上，在每个原MemoryPhi block建立同类型scalar
  PHI，其incoming分别是原store operand、capture/edge-local initial snapshot或更深
  scalar PHI；所有节点携同一
  `symcc.ifss_continuation_memory_nested` proof。根值再进入F260 dispatch memory
  PHI，无关destination仍使用typed neutral。该方法不复制memory operation，也不
  把load提升到不访问原destination的路径；
- v3证据：proof schema为
  `bounded-acyclic-memoryphi-continuation-memory-tuple-v3`，每个相关exit按
  canonical preorder记录root、node ordinal/kind/source site、逐节点NoMod sites，
  以及每条incoming的block site和child ordinal。外层manifest保持v1兼容，增加
  `state_schema`、`root_node`、`provenance_nodes`，analysis分类为
  `llvm-memoryssa-aa-nested-phi-revalidated-v3`。内容指纹按相同树结构混合；
  Python verifier独立检查1--16节点、最多4 phi、2--4臂、唯一incoming block、
  child严格后置、除root外恰好一次引用、store/initial身份和完整指纹。独立LLVM
  replay重新构造MemorySSA/AA树，并递归核对实际nested/dispatch scalar PHI values；
- 通用正确性修复：两层正例发现region-value递归合成会先生成子runtime computation、
  后生成父concrete clone。Short-circuit分块可能把父clone前移到slow path之前，却
  越过仍位于其后的子clone，产生SSA dominance错误。`trySynthesizeRegionValue`
  现在对concrete operand closure做同block拓扑前移：先递归移动依赖，再移动父节点
  到最早symbolic computation之前。这个修复覆盖PHI select、binary/unary、
  comparison、cast、select和freeze，而不是为F270测试绕开符号化；
- 验证与结果：正例包含dispatch之外两层MemoryPhi，canonical provenance依次为
  `phi,phi,store,store,store`。Lowered与原始IR对256个selector乘4种内层控制值共
  1024组`lli`执行完全一致，lowered和symbolized IR均通过LLVM verifier；从
  `C 03`出发可生成`A`且低两位为0的Backsolver候选，target/attempt/SAT均非零。
  Manifest edge篡改被独立verifier拒绝；正向seal/replay通过，把最深scalar PHI的
  incoming从10改为99后，IR仍合法且可重新seal，但独立semantic replay拒绝。
  MayAlias inner arm和5-incoming nested phi均保持原load；v1/v2/v3四项continuation
  memory定向lit、LLVM18 `-Werror`、Python `py_compile`/Ruff和diff check通过；
- 科研边界：实现表示“将有界acyclic MemoryPhi DAG按使用路径展开成canonical
  provenance tree”，尚未共享同一DAG子节点，也不处理loop-carried/cyclic phi、
  byte-lane partial overlap、不同load/store width、symbolic alias split、
  aggregate/vector、atomic/concurrent memory、跨函数heap graph或异常语义。I/T/E
  证明机制正确和可重放，不代表公开target上的coverage/CPU收益；公开实验必须报告
  candidate/accept/reject taxonomy、树深/节点数、编译与solver CPU、候选有效率及
  original-authoritative coverage。当前等级I/T/E。

## 266. F271：Bounded Multi-Break Exit-Priority Circuit（2026-07-29）

- 研究问题：F267只能摘要latch上的单个post-update equality break。多个break site
  既不能简单OR，因为不同`break_at`命中不同迭代，也不能只取数值最小而忽略同一
  迭代的CFG先后顺序。F271为canonical post-update check chain构造显式优先级电路，
  将动态循环中的“最早迭代、同迭代最先site”语义变成有界closed form；
- CFG与拒绝边界：仍要求单preheader/header/backedge、`iv=0; iv<trip; iv++`、
  `trip<=8`和F261/F266 recurrence。Header true edge进入唯一update block；该block
  完成本轮所有state/induction update，随后可有2--3个线性check blocks。每个check
  仅允许`icmp eq iv, break_at[i]`和conditional branch，true进入唯一外部break
  exit，false进入下一check，最后false回header。`break_at`必须同位宽、无
  undef/poison且loop invariant。第四个break、`ne`、比较`iv_next`、true/false
  polarity反转、重复exit、额外block instruction、非唯一check predecessor、错误
  phase live-out、side effect或既有recurrence边界均fail closed；
- 优先级代数：令初始`winner_at=trip`。按CFG ordinal从0到B-1依次计算
  `better_i = break_at[i] < winner_at`，仅在strictly smaller时更新
  `winner_at`与`winner_ordinal`。因此较早ordinal在相等值上保持winner；值不小于
  trip的site从不eligible。最终
  `break_taken = winner_at < trip`，
  `executions = break_taken ? winner_at + 1 : trip`。F261 independent-add与F266
  nilpotent/binomial recurrence都消费同一个execution count；
- CFG事务与live-out：lowering在preheader计算winner circuit，再创建每break一个
  dispatch block。第i个block以
  `break_taken && winner_ordinal==i`进入对应break exit，否则继续下一dispatch；
  最后fallback到normal exit。Normal exit PHI只从最终dispatch消费header-phase
  summary；每个break exit PHI只从自己的dispatch消费post-update summary。
  原header/update/check blocks整体删除，late collection失败不修改IR。V1单break
  路径保持原branch形态与metadata，避免兼容性回归；
- Proof artifact：新IR使用`bounded-multi-break-loop-exit-v2` metadata，绑定
  header/branch/normal exit、bound/state/break count，以及有序condition/exit
  sites。Outer JSONL继续兼容
  `symcc-ifss-loop-exit-manifest-v1`，以
  `post-update-priority-equality-break-v2`区分语义；记录2--3个有序break的
  condition/exit/value identity、每state normal与全部break live-out sites、
  recurrence kind/fingerprint，并枚举
  `(trip, break_at[0..B-1])`完整有界truth table。最大B=3、bound=8时最多6561行；
  大于bound的值统一落入“不早于trip”的等价类；
- 独立验证：Python verifier保留F267 v1路径，并为v2独立检查break/site唯一性、
  state phase、2--3/1--8边界、lexicographic table顺序和每行winner/executions。
  Winner由最小`(break_at, ordinal)`重算，完整artifact以schema、CFG/state identities、
  recurrence和每行vector/taken/winner/executions计算64位内容指纹。Winner、condition
  site、break live-out和fingerprint四类独立篡改均拒绝；
- 验证与结果：2-break independent-add正例对8³=512组trip/break组合摘要前后
  `lli`完全一致，同值break由ordinal 0获胜；lowered/symbolized IR均通过LLVM
  verifier。从`00 07 07`求解break1-only结果219，生成`trip>=3, break0>2,
  break1=2`候选且solver query/SAT非零。3-break上限正例与F266两状态
  upper-triangular recurrence组合，recurrence/exit两个manifest均独立验签，
  对4⁴=256组输入差分一致并通过symbolized verifier。第四break、第二条件`ne`和
  第一check successor反向均保持原循环；8项loop定向lit、LLVM18 `-Werror`、
  Python `py_compile`/Ruff和diff check通过；
- 科研边界：F271只处理每轮update后的有序equality check chain，不处理pre-update
  break、任意predicate DAG、continue到非header位置、多个update phase、不同break
  对应不同recurrence、side-effecting/memory loop、nested loop、exception edge或
  unbounded trip。Truth table验证闭式和身份，尚未seal input/lowered IR，也未在
  独立bitcode进程重建原CFG。删除loop/check edges会改变instrumented bitmap，公开
  实验必须用原程序重放并报告break-count/priority taxonomy、removed dynamic
  checks、generated circuit/DAG、solver CPU、候选有效率和coverage/CPU。当前等级
  I/T/E。

## 267. F272：Proof-Carrying Unequal Linear-Arm Hydra Alignment（2026-07-29）

- 研究问题：F268已把single-block diamond推广到每侧1--4块的线性arm，但人为要求
  左右block count相等。Block boundary在该模型中只携无条件branch，现有变换又已经
  按CFG顺序flatten全部instruction并以全region value map维护跨块def-use，因此
  “块数相等”不是正确性条件，只会拒绝常见的front-end/optimization布局差异。
  F272移除这个伪边界，并把不同长度的edit alignment升级为可独立检查的v2 artifact；
- 接纳与预算：左右arm分别允许1--4个block，数量可以不同；每个非merge block仍需
  unique predecessor、无PHI、只有supported ALU或在aggressive mode允许的simple
  load/store，terminator必须unconditional。两侧必须到达同一恰有两个predecessor
  的merge，跨arm SSA禁止，escaping value只能成为merge PHI incoming。每侧新增
  64条flattened instruction硬预算。第5块、第65条instruction、内部条件分支、
  loop、exception/address-taken block、call、unsupported memory或错误external use
  仍fail closed；
- Edit alignment与lowering：确定性LCS继续用`compatible`（same operation/type/
  flags/address-space，store还要求同pointer）匹配，两种最优走法相等时固定消费左侧，
  形成`compatible-lcs-left-tie-v2`。Matched pair逐operand select后只执行一次；
  unmatched safe ALU用condition选择原operand或opcode-safe neutral operand，
  unmatched aggressive load/store沿F248 failure-preserving路径线性化。整个flattened
  序列共享左右value map，因此1×4跨四block依赖仍按def-before-use生成。Merge output
  PHI转为select，原branch变unconditional，左右所有block一次性删除；
- v1/v2兼容证据：等长arm仍输出字节兼容的
  `bounded-multiblock-linear-hydra-v1`。只有不同块数使用
  `bounded-unequal-linear-hydra-v2`，metadata分别记录left/right block count和
  instruction count。Manifest增加`left_arm_blocks`、`right_arm_blocks`、两侧
  instruction count、`edit_distance`、algorithm identity与
  `unequal_arm_blocks=true`；每个alignment slot增加左右block ordinal，缺失侧为
  -1。结构指纹混合v2 schema、独立块/指令数、edit distance、有序block sites、
  完整site/opcode/block-ordinal edit script和output PHI sites；
- 独立验证与campaign gate：verifier按schema分派，继续原样验证F268 v1。V2要求
  1--4且左右不等、最多64条instruction、site/opcode/ordinal presence一致、两侧
  instruction site各出现一次、block ordinal单调、matched opcode相同、one-sided
  slot数等于edit distance，并重算完整指纹。`hydra_transform.py` campaign的
  `_load_manifest`继续对任何带region schema的record强制调用该verifier，因此v2
  无旁路；ordinal篡改在执行候选前即被直接verifier和campaign gate共同拒绝；
- 验证与结果：2×1正例的flattened序列为左`add,mul`、右`add`，得到1 matched+
  1 deletion，edit distance 1；摘要前后对256个输入完全一致，lowered和symbolized
  IR通过LLVM verifier。Manifest ordinal与edit-distance篡改均拒绝，campaign可
  读取正例并拒绝tampered record。反向1×4正例把四个matched operation分布在右侧
  四块、左侧一块，block ordinal为`0,1,2,3`，再对256输入差分一致并通过符号化
  验证。1×5和internal conditional tree保持原CFG；F248/F268 safe/aggressive/
  denylist/v1 manifest回归、4项Hydra lit、LLVM18 `-Werror`、Python
  `py_compile`/Ruff和diff check通过；
- 科研边界：F272仍是两侧线性SESE arm，不处理internal branch tree、multiple
  merge、critical external predecessor、loop或exception。Verifier证明manifest
  edit script的有界规范与完整消费，但尚未独立解析bitcode重算LLVM
  `isSameOperationAs`兼容性或LCS最优性；这应由后续sealed independent replay补齐。
  Safe模式保持concrete语义不代表source-edge coverage不变，aggressive memory仍
  仅failure-preserving；所有公开评估必须original-authoritative replay并报告
  left/right block/instruction分布、edit distance、matched/extra ratio、compile/
  solver CPU、spurious failure和coverage/CPU。当前等级I/T/E。

## 268. F273：Proof-Carrying Bounded Internal-Tree Hydra Melding（2026-07-29）

- 研究问题：F272仍把每侧arm限制为无条件线性链，无法消除arm内部的昂贵symbolic
  branch。直接按basic-block顺序flatten内部树是不正确的：只在某条内部路径执行的
  instruction会被无条件求值，merge PHI也不再只有左右两个incoming。F273为无环
  branch tree显式构造路径谓词，并将operation alignment、路径ownership和多叶
  output恢复绑定到同一proof artifact；
- CFG接纳与预算：每侧最多7个tree block、3个internal conditional branch、4条到
  共同merge的leaf edge和64条非terminator instruction。根块必须由outer branch
  唯一进入；其余tree block必须有唯一parent，DFS preorder中每条child edge严格
  指向后续ordinal；树内不允许reconvergence、PHI、loop、call/invoke、EH/address-
  taken block或external predecessor。两侧所有leaf edge必须精确覆盖共同merge的
  predecessor集合。纯linear region仍保持F272的每侧4块上限；只有至少一侧含内部
  branch时启用7块tree预算。第4条内部branch、第5条leaf、tree内汇合、空alignment、
  proof identity碰撞和既有unsupported instruction均在修改IR前fail closed；
- Path-predicate lowering：outer true/false分别形成左右root guard。对child block
  递归生成`parent_guard && edge_condition`，对直接merge edge再合取terminator
  outcome，得到互斥且完备的leaf guard。Flattened compatible-LCS仍保持每侧DFS
  def-before-use顺序；matched ALU的每个operand由left guard、right guard和opcode-
  safe neutral三级select构造，extra ALU由自身block guard与neutral选择，从而不会
  在非活动路径消费潜在poison/div-zero/invalid shift operand。所有生成的select
  携`!symcc.hydra_select`，不重新产生独立path constraint；
- Memory与output语义：aggressive load仍可speculatively linearize，因此只具
  failure-preserving地位；store无论matched或extra都先读old value，再以精确block
  guard决定写入新值或old value。Matched同址tree store现显式计入
  `readback_stores`。每个merge PHI从typed zero开始，按左右canonical leaf顺序用
  leaf guard重建多路值；由于叶谓词互斥完备，恰有一个原incoming生效。最后outer
  branch改为unconditional，全部tree block一次性删除；
- v3证据：`bounded-internal-tree-hydra-v3`记录左右block/instruction/internal-
  branch/leaf数、`compatible-lcs-tree-preorder-left-tie-v3`、ordered block sites、
  alignment site/opcode/block ordinal，以及逐block的terminator site、parent、
  incoming edge、conditional/unconditional kind和block/merge successors；leaf数组
  绑定具体`(block ordinal, successor index)`。结构指纹混合上述拓扑、edit script
  与output PHI identity。独立verifier重建rooted-tree indegree/parent关系、preorder、
  branch/leaf预算和merge-edge集合，检查跨类别identity唯一、完整instruction消费、
  block单调性与fingerprint；campaign `_load_manifest`在执行候选前强制同一验签；
- 验证与结果：最小3×1树含1个内部condition与3路merge，lowered/original在256个
  输入上一致并通过symbolized verifier，parent和leaf篡改由direct verifier及
  campaign gate拒绝。最大7×7正例两侧各3个internal branch、4个leaf，8路PHI和4个
  aligned operation在256输入上一致；successor篡改拒绝。Aggressive双树在左右
  条件leaf执行同址matched store，guarded readback后对256输入一致，manifest正确
  标记original failure replay。第4 branch、empty alignment和tree内reconvergence
  保持原CFG。6项Hydra定向lit、LLVM18 `-Werror`、Python `py_compile`/Ruff与diff
  check通过；
- 科研边界：这是single-entry、共同single-merge的无汇合branch tree，不是任意
  acyclic SESE DAG；不支持tree-local PHI、critical external predecessor、multiple
  merge、loop、exception或call。Verifier独立验证manifest规范，但尚未从sealed
  input bitcode重建LLVM compatibility、DFS tree和实际rewrite；F274统一seal/replay
  将补齐该信任边界。Safe ALU只保证defined execution的concrete值，edge coverage
  仍必须由原程序测量；aggressive memory仍以原程序failure replay为唯一权威。
  当前等级I/T/E。

## 269. F274：Unified Sealed Independent Transformation Replay（2026-07-29）

- 研究问题：F264/F265只封存continuation，并从已经lowered的IR重做MemorySSA/AA
  语义证明；loop recurrence/exit与Hydra topology虽有独立manifest verifier，
  却没有统一绑定输入IR、实际lowered IR、pass binary和LLVM工具，更没有从原输入
  独立重跑完整变换。仅验证manifest会留下“证明记录正确但实际rewrite不同”的信任
  缺口。F274把continuation、loop和Hydra纳入同一write-once envelope，并把exact
  transformation replay作为共同验收条件；
- 统一schema与配置恢复：`symcc-transformation-seal-v1`按`continuation`、`loop`、
  `hydra`区分pipeline，`--manifest KIND=PATH`显式声明
  `continuation`、`loop-recurrence`、`loop-exit`或`hydra`。每份清单先调用其独立
  verifier，再绑定有序record数、`proof_fingerprint`或
  `structure_fingerprint`、文件size/SHA-256。Hydra从record恢复唯一site及
  safe/aggressive mode；loop恢复实际存在的recurrence/exit输出集合；
  continuation从analysis集合推导memory开关，全`structural-only-v1`精确重放
  memory-off，任一memory proof则重放memory-on；
- 原子封存：envelope同时绑定input IR、textual lowered IR、compiler plugin和
  `opt`的size/SHA-256，以及有界`opt --version`身份和canonical JSON SHA-256。
  Manifest在独立验签前后各取artifact快照，文件变化即拒绝。输出使用POSIX
  `flock`、fresh-output gate、同目录临时文件、file fsync、atomic rename和
  directory fsync；重复封存不会覆盖既有证据；
- 独立重放：`replay_transform_artifact.py`先完整重验seal，清除父进程遗留的全部
  `SYMCC_HYDRA*`、`SYMCC_IFSS_LOOP*`和`SYMCC_IFSS_CONTINUATION*`变量，再用seal绑定
  的`opt`与plugin从原input IR独立执行精确pass pipeline。新进程输出临时manifest
  与lowered textual IR；所有manifest重新独立验签并要求JSON record逐项完全相等，
  lowered IR要求size/SHA-256完全相等，且必须通过独立LLVM `verify`。结束前再次
  重验外部seal与制品，缩小重放期间TOCTOU窗口。子进程有120秒上限，失败输出限制为
  最后8 KiB；
- 验证与结果：continuation覆盖nested-MemoryPhi memory-on以及
  `structural-only-v1` memory-off；loop同时封存upper-triangular recurrence与
  three-break exit truth table；Hydra封存最大7×7 internal tree。三类正例均完成
  seal→verify→input-IR independent replay。每类又构造LLVM-verifier-clean的lowered
  IR语义篡改，给篡改产物重新生成合法seal后，仍因独立重跑结果不一致而拒绝；
  另覆盖seal字段篡改和重复output拒绝。4项定向lit、Python `py_compile`/Ruff与
  diff check通过；最终`ninja -C build check`为155/155通过（97.79秒）；
- 科研边界与暂停状态：这是确定性、同compiler/LLVM版本、local POSIX filesystem
  上的exact replay，不是数字签名、远端透明日志、可信执行环境或跨LLVM版本语义
  等价证明。当前输出固定为`opt -S` textual IR，因此编译命令、pass顺序和IR打印
  必须可重现；公开coverage仍以original binary为权威，公开等CPU多轮campaign尚未
  执行。按当前开发指令，F274完成验证与文档后暂停，不继续实现byte-lane alias
  partition、general-memory loop或general SESE DAG。当前等级I/T/E。
