Repository navigation
refactor(control-plane): centralize interaction execution decision - #7100
Conversation
loopx-agent
left a comment
There was a problem hiding this comment.
Reviewer: model_agent · gpt-6.1-sol · OpenAI · runtime_reported · effort=max
Approval conclusion (author-owned PR; GitHub blocks formal self-approval)
Exact head: 76c2073fba18873063af81a5875dca9f2f02df16。
动机
这项修复面向消费 quota 交互契约的宿主与使用自动接续的操作者。 静默监视等无需尝试工作的状态,可能从较宽的 should_run 继承 delivery_allowed=true,同时 must_attempt=false,触发已有调度器的矛盾诊断。新版本在原投影 owner 合成交付权限时要求已准入的尝试事实。 同一原生交互投影反例由 false/true 修正为 false/false;792 组输入中仅 140 个原本矛盾的组合改变,652 个已一致组合、20 个非法值的拒绝和六条 File/SQLite 普通 CLI 路径均保留。独立 wheel 重复通过同一验证。
本 PR 修正既有交互投影的约束;没有新增任务准入、调度策略、安装操作或模型执行,实际安装态宿主与长期成本不由这些检查证明。
普通源码及非 editable wheel 已验证;安装态宿主、真实模型与完整成本尚未资格,三项既有传输正文预期失败仍保留。
改动思路
改动保留现有 Python 交互投影兼容边界,只合成已经派生的 must_attempt 与 delivery_allowed;TypeScript 调度器继续核对既有不变量。迁移整套投影 owner 不应成为这四行修复的前置条件。
当前边界是两处现有消费者共享的权限投影及其回归;不添加新决策模块、配置或通用框架,也不把 broader quota 的可运行状态变成独立的交付授权。 不修改会保留已复现的失败;在消费者手工补命令或复制条件,会让原有状态和权限 owner 更难保持一致。本次沿用已存在的机制,未增加操作者的重新输入、确认或授权轮次。
具体改动
两个文件共 +31/-0:生产函数增加三行解释和一次布尔合成,原测试文件增加一个静默监视回归。完整差异没有新状态、枚举、协议或配置字段。
关键代码讲解
interaction_execution_flags先沿用_interaction_must_attempt和_interaction_delivery_allowed的既有判断,再让 delivery 同时受最终 must_attempt 约束。没有尝试义务时,较宽 quota 状态不再制造交付许可。unadmitted_action_selection与_build_interaction_contract_projection均调用该函数,所以修复进入实际选择恢复判断和最终交互包;没有在两个消费者各写一份条件。- 新回归从 should_run=true、静默监视、无尝试义务的原始输入构建完整交互契约,检查 must_attempt=false、delivery_allowed=false、quiet_noop_allowed=true。
规范依据是 docs/architecture/rfcs/agent-loop-effect-interpreter-v0.md 的共享执行事实及既有 typed scheduler 不变量,固定版本 587ae45b4388fd977be1187fa57195ad2259d011。EXEC-ATTEMPT、EXEC-CONTROLS、EXEC-TYPED 是本评审的条款编号;投影反例、真实 CLI 控制和非法输入拒绝分别覆盖。这里明确改变了原先矛盾的输出组合,不宣称所有历史字节都相同。
对主干的风险
主要风险是误伤本来已准入的业务、非交付修复或真实 User gate。独立同输入矩阵覆盖 792 个组合:只有原 false/true 的 140 行成为 false/false,其他 652 行逐值一致;20 个非法权限输入继续按同样原因拒绝。原生完整投影复现并修复静默监视反例;File/SQLite 的 normal、未来 monitor、user gate 六条真实 CLI 路径逐值一致,均无扣额。相同检查也在非 editable wheel 中执行。
29 个 focused interaction 用例和 33 个 TS 调度用例通过。扩大到相邻传输测试时,head 为 51 passed / 3 failed,固定基线为 50 passed / 3 failed;三个失败的用例身份和完整断言差异,经仅去除进程地址及临时目录 nonce 后完全相同。失败文件逐字未改,路径直接调用原 _interaction_reads_and_arbitration;差异是旧 Goal-read reason 正文预期,不经过本次权限合成。这些失败保留为主干验证问题,未删除断言或选取绿色重跑。
标准 premerge 六项直接、十四项选择检查全部通过,零手工 hold;未查询或等待 CI。初次 wheel 构建拒绝旧 bundle,按当前源码完成文档要求的 bundle 构建后,wheel 及真实 CLI 控制通过。没有给运行中的 App 安装此版本。
我的整体评价
结论为 APPROVE,没有发现当前精确 head 的新增阻塞问题。当前边界是两处现有消费者共享的权限投影及其回归;不添加新决策模块、配置或通用框架,也不把 broader quota 的可运行状态变成独立的交付授权。 原有状态、规则与宿主效果继续由同一组既有 owner 负责;本轮真实路径及反例足以支撑这个修复边界,不以测试或回执数量宣称长期收益。
本次没有布局、首屏或控件变化;核验对象是现有 CLI JSON、返回命令及 TurnEnvelope。 已安装桌面/App/Lark 和真实模型行为未验证;不从源码或 wheel 推断这些采用结果。
English verdict: APPROVE — head 76c2073fba18873063af81a5875dca9f2f02df16. Delivery now requires the already-admitted attempt fact. The matched input matrix corrects only contradictory rows; real File/SQLite and independent-wheel controls preserve valid behavior. Standard premerge passed; three byte-identical baseline transport expectation failures remain explicitly recorded. Installed host adoption and complete costs remain unqualified. No merge authority is granted.
cocolord
left a comment
There was a problem hiding this comment.
Reviewer: model_agent · GPT · OpenAI · self_reported
APPROVE:修复已独立复现的交付/尝试矛盾,当前原生续接与隔离 premerge 覆盖通过;历史失败和远端合并门仍保留。
精确 head:76c2073fba18873063af81a5875dca9f2f02df16。
动机
受影响的是通过定期自动检查继续工作的宿主,以及依赖其状态决定是否执行任务的操作者。一个无需尝试工作的静默监视状态,可能同时得到“允许交付”;宿主随后把这份自相矛盾的契约判为需要修复,而不是正常等待。补丁希望消除这类无意义的修复接续,并保留真正获准的工作。
本轮独立检查已观察到:同一原始输入在基线产生交付与静默冲突,在 head 正常进入监视等待。实际 File/SQLite 源码 CLI 覆盖了普通回写、一次扣额、重启重放及调度 ACK 持久化/重放,当前结果符合既有规则。本次不应宣称安装态宿主采用、模型收益、长期总成本降低或改变任务准入策略。
改动思路
改动直接复用现有 interaction_execution_flags,在其已经计算出的尝试事实和交付事实之间做合成;两个既有消费者继续调用同一函数,没有增加状态库、开关、协议或第二套选择规则。TypeScript 的交互契约仍持有“允许交付必然要求尝试”的联合类型和一致性检查;Python 修复的是现有生产投影违反该不变量的问题,不是让调度器吞掉错误。
最强的不交付理由是有效工作也经过这条共享边界,不能用静默输入的成功替代完整路径证据。不修改会保留已复现的矛盾;在各消费者分别补条件会复制知识。本次一处合成是最小合理修复。实际续接和原限额下的监视回写检查补足了局部测试之外的证据,不要求为四行修复重写整套控制面。
具体改动
完整差异只有两个文件、31 行新增:loopx/control_plane/work_items/primary_action.py 增加三行说明和一次布尔合成;tests/control_plane/test_scheduler_interaction_arbitration.py 增加一个原始输入到最终契约的回归。没有修改持久化格式、输入选项、宿主布局或调度状态词汇。
关键代码讲解
interaction_execution_flags仍先验证旧生产输入必须是布尔值,保留用户门、明确允许的 fallback、自动化修复和阻塞后继观测分支,再令delivery_allowed = must_attempt and delivery_allowed。它不把must_attempt=false改成 true,也不把非交付工作改成交付工作。_build_interaction_contract_projection使用合成后的事实建立 agent channel、quiet no-op 和真实 TypeScript 调度仲裁。独立原始输入反例在基线出现两个一致性诊断,在 head 为MONITOR_WAIT,不再要求修复。unadmitted_action_selection同样调用该函数,再交给现有 TypeScript 选择准入 owner;其原规则本来就要求实际尝试才能准入,没有另建恢复分支。新增测试test_quiet_monitor_cannot_inherit_delivery_without_attempt检查最终 false/false/true,而不是 mock 出结果。
规范依据 spec_ref=docs/architecture/rfcs/agent-loop-effect-interpreter-v0.md,spec_revision=587ae45b4388fd977be1187fa57195ad2259d011。以下是评审的定位编号,不冒充文档原生编号:RFC-SHORT-CIRCUIT 对应既有短路不得假装原效果执行,局部反例已实现;RFC-TYPED-FAILURE 对应失败、权限和预算继续在 typed packet 中可见,非法输入拒绝及 TS 仲裁检查保留。具体 delivery→attempt oracle 来自该基线已有 AgentInteractionChannel 联合类型和 interactionConsistencyIssues,不是从本补丁推导。整个宿主执行事实收敛和安装态资格不是这次四行修复的交付条件。
对主干的风险
主要风险是误关掉合法交付或扰动必须尝试但不允许交付的修复/后继工作。独立 648 组同输入矩阵只有 48 个原 false/true 组合变成 false/false,其他 600 组一致;12 个非法布尔输入的异常类型和文本保持一致。实际 TypeScript 原始投影反例证明旧缺陷会被独立 oracle 捕获,非只比较 helper 返回值。
focused Python:head 51 passed / 3 failed,固定基线 50 passed / 3 failed。三个失败都是未改传输测试中的 Goal-read 说明预期;失败身份和渲染断言内容仅归一化对象地址及临时目录 nonce 后相同。pytest 省略 payload,不能称为完整 payload 字节一致。这三项保持失败,因因果路径未改且当前改变的不变量已有独立覆盖,属于非阻塞的既有预期漂移。TS 调度器 33 passed。
最初真实 CLI 为 8 passed / 8 failed,未被删除或改称通过。 失败涉及 refresh 的测试工作目录来源验证、用户门与 scoped fallback 预期差异,以及四项 app_automation 读回缺失。随后以同一源码 checkout 的 uv run --extra test python -m pytest -q tests/control_plane/test_scheduler_arbitration_native_cli.py 在固定基线和 head 执行,得到 base 16 passed / head 16 passed。它们包含普通 writeback/spend/restart/replay、门/监视/暂停/停止控制和 ACK 持久化/重放;测试自带进程临时目录隔离。当前资格来自这些真正经过后端的执行,不来自作者的旧六条控制。前八项失败的历史根因未证明,不能宣称“已修复”或自动归咎并发;完整新运行覆盖了原先缺失的相同场景,没有放宽测试。
初次 standard premerge 为 6 项直接检查通过、14 项选择中 2 项失败:semantic 缺 TypeScript 依赖,monitor-poll-writeback 达到原 120 秒限额。npm prefix 的锁同步 setup 错误保留;显式 cwd 使用不变锁成功准备依赖,完整 semantic smoke 独立通过。原 monitor 命令在基线仍 timeout;私有临时目录下不改完整断言序列,head 首次 17 项全部通过;再运行原始未插桩脚本 60.334 秒通过。最后原完整 premerge 使用私有 HOME/TMPDIR/TEMP/TMP、精确 cwd 和原 120 秒逐项限额,得到 6 项直接 + 14 项选择全部通过,零手工 hold。没有提高限额、删断言或把历史红灯重标绿色;当前至少两次完整监视覆盖和完整 gate 解决本轮必需路径缺口,历史延迟原因仍未确认。
语义与 CI 对齐
本 PR 复用既有布尔事实和 typed 联合约束,不增加词汇。义务不是建议:must_attempt_work 及最终 channel 决定执行,广义 should_run 不能独立授予交付。说明保持目标无关,没有 substring 分类或业务专属错误。旧 false/true 输出被有意修正,PR 描述和回归已明确披露。没有 opt-in/default-off 声明,不要求凭空增设开关;原生暂停/停止与用户门控制保留。无布局变化,不从 backend 测试推断安装态 UI 或模型采用。
远端 CI 仍有失败/未完成项,不声明全部绿色或已有根因归属。分支规则要求 Sign-off 与 merge-gate;旧 branch-protection 接口 404 不证明没有门。当前本地独立覆盖足以判断这次改变的不变量,远端红灯、缺失 merge-gate 和 BEHIND 状态仍是单独合并/readiness hold,不被本 APPROVE 绕过。
我的整体评价
没有发现可确认的新增阻塞缺陷。交付判断为 goal_achieved,只针对既有 projection 矛盾修复,不指整个宿主收敛路线图。长程接续为 preserved:真实 File/SQLite 普通回写/扣额/重启/重放和调度回写仍满足既有规则;用户体验为 improved:原始静默反例不再无意义地要求修复,不增加操作者重新输入或确认步骤。独立同输入比较及原生路径支撑局部收益,不声称模型效果或长期成本量化。
bounded future-facing pass:已考虑共享 Python 投影与 TypeScript typed authority;现有两个消费者已经复用同一 seam,不需要增加抽象。整个 Python 投影迁移较大,安全延期,不能把迁移当作最小修复前置条件。不存在新增 schema/decoder/持久化兼容负担。按严格标准,决定由当前可复现改进、架构适配和真实续接证据共同支持,而不是“没有发现 bug”或测试数量。
保留的限制包括最初 eight-failure run、npm prefix setup 和 premerge/base monitor timeouts 的未确认历史原因,以及安装版 App/Lark、模型采用和总成本未验证。后续若相同隔离条件下再出现实质失败,需重新资格;本轮没有放低门。没有执行合并或撤销他人评审,远端合并条件仍需独立满足。
English verdict: APPROVE - 76c2073fba18873063af81a5875dca9f2f02df16. A reproduced delivery-without-attempt contradiction is corrected without changing valid admitted flags. Paired source CLI passes 16/16 on base and head; two complete isolated monitor checks and the original full premerge pass under unchanged limits. Earlier failed runs and three baseline expectation failures remain recorded, not relabeled or causally explained. Remote CI/readiness remains a separate merge hold; installed host/model benefit is unqualified.
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
76c2073 to
1cac02b
Compare
loopx-agent
left a comment
There was a problem hiding this comment.
Reviewer: model_agent · GPT-5 · OpenAI · self_reported
Approval conclusion (author-owned PR; GitHub blocks formal self-approval)
Exact head: 1cac02b5b3849be455e034a668e554b014af71c3
动机
这项改动面向消费 quota 交互契约的宿主,以及依赖自动接续继续工作的操作者。此前,“本轮是否必须尝试一次工作”和“原业务交付是否获准”由 Python 的两套派生逻辑共同决定;模式判断又重复读取同一组权限,且 should_run 可以作为独立的交付兜底。一个安静等待或修复轮次因此可能得到互相矛盾的字段,宿主只能把正常等待当成投影故障,或者在修复/监控场景继续原业务。
一个具体反例是 must_attempt=false 的 quiet monitor 同时继承 normal_delivery_allowed=true:旧投影可以把交付字段保留为 true,最终调度器再报告 interaction_contract.delivery_without_attempt。现在由同一个 TypeScript owner 先固定模式、尝试义务、交付许可和安静等待,再由 Python 派生兼容字段。正常业务仍然“必须尝试且允许交付”;工作区/能力/投影修复和必要 replan 仍然“必须尝试但不开放原业务”;合法等待则“不启动业务尝试”。
当前边界只收敛交互执行契约,不接管 quota 的任务选择、provider、持久化或结算。安装态 App/Lark 采用、真实模型行为和长期完整成本仍未证明;这些缺口保留为独立资格门。
改动思路
调用链保持为:quota should-run 收集当前事实 → Python 只投影有界的 canonical attempt/delivery 与用户门事实 → TypeScript projectInteractionExecution 形成唯一模式与执行决定 → Python 渲染既有 agent_channel 兼容字段 → 既有 TS decoder、一致性诊断与 scheduler arbitration 继续校验最终契约。恢复判断和最终 packet 使用同一条决定路径,不再各自推导权限。
| 合法路径 | 必须尝试 | 原业务交付 | 结果 |
|---|---|---|---|
| 正常业务 | 是 | 是 | 推进所选业务 |
| 修复 / replan / lifecycle | 是 | 否 | 只执行指定非业务交付动作 |
| 等待 / quiet | 否 | 否 | 在允许时安静等待 |
没有改动的最强理由,是避免一次跨运行时迁移引入新的维护面;但维护面已经存在:Python 与 TS 分别维护模式、尝试、交付和 quiet 规则,而且最终检查只能在矛盾发生后修复。这里没有选择更小的末端 clamp,因为那会把“上游漏选为无需尝试”继续隐藏为下游 false。当前 PR 删除被替代的 Python 规则,复用既有 TS 领域词汇与最终仲裁;多文件转发、通用 reducer 和完整 TurnEnvelope 收敛明确不在边界内。
当前边界只收敛交互执行契约,不接管 quota 的任务选择、provider、持久化或结算。
具体改动
精确差异为 9 个文件、+703/-218;生产代码集中在 interaction_contract.ts、interaction_contract.py、primary_action.py 和现有 effect-runtime handler,其余为 296 行测试新增、1 行测试替换。没有持久化格式、CLI 选项、UI、安装指令或 provider 变化。
规范依据是 agent-loop-effect-interpreter-v0.md 的 Replacement-First、单一领域 owner 与 decision replay 边界,固定版本 01f61ee9f3b993bfafc11419ea1842e722906957。本评审使用的条款编号如下:
EXEC-SINGLE-OWNER:先由一个领域 owner 选定动作范围与执行事实,再产生兼容投影;已实现于projectInteractionExecution。EXEC-ATTEMPT:交付许可不能脱离已准入的尝试;已实现于 typed decision 和最终AgentInteractionChannel。EXEC-COMPAT:缺失、null、false、合法的 normal/recovery/self-repair 兼容分支具有明确优先级;已实现并有负例。EXEC-NO-EARLY-STOP:未来 monitor 不得压过可执行 P1/P2 或必要 replan,修复完成后仍可同 Turn 重新准入;已通过实际 quota builder 反例。
关键代码讲解
projectInteractionExecution(interaction_contract.ts:204)严格解码有界事实,拒绝非布尔权限和直接矛盾,返回 mode、attempt、delivery、quiet 及 normalization diagnostic。它没有重新实现 quota 选任务,也不产生写入或结算效果。_project_interaction_execution(interaction_contract.py:475)只收集 obligation、用户门和历史兼容字段,调用一次 TS owner 并校验返回 schema;Python 不再持有第二份权限规则。unadmitted_action_selection与_build_interaction_contract_projection(interaction_contract.py:1700、:1719)使用同一决定。前者驱动选择恢复,后者驱动最终 host contract;两者不再分别解析should_run。primary_action.py删除 106 行旧 attempt/delivery/quiet 规则。protocol_action_packet_fields优先读取已决定的 agent channel,只在历史独立 fixture 中保留无决策兼容读取。test_future_monitor_cannot_hide_executable_advancement(test_work_lane_contract_core.py:133)通过实际 quota builder 覆盖未来 monitor + P1/P2;TS 测试(interaction_execution_decision.test.ts:97)单独证明should_run=true不能授予交付。
对主干的风险
最强回归场景是合法业务被错误关闭,或修复/replan 被误当成原业务。三种合法路径、用户门、scoped fallback、quiet mode、自动化修复、阻塞后继、错误类型与冲突优先级均有直接测试。显式 canonical must_attempt_work=false 与 delivery_allowed=true 现在被 typed rejection,而不是静默 clamp;从宽层继承但未准入的 delivery 会归一化并由 interaction_contract.delivery_without_attempt 指出原因。
验证结果:focused owner/scheduler TS 40 passed;scheduler/selection/workspace/future-monitor Python 88 passed;更大交互、暂停、阻塞等待与 monitor recovery 集 233 passed;quota parity、envelope、native scheduler 与 portfolio 49 passed;完整 TypeScript control-plane 套件 5,306 passed、75 skipped、0 failed;npm run typecheck:control-plane 通过;标准 premerge 18 项 selected checks 全通过,零 manual hold。
仓库原生测试暴露的 dated-vision 与 unsettled-Turn canonical_authority_required 失败在不可变 base 的干净 worktree 上以相同命令复现,发生在改动 owner 之前,因此保留为 pre-existing unrelated;没有删除或重标这些断言。远端 CI 按本评审配置未等待,当前 pending/required checks 是独立的 merge-readiness hold,不用于替代本地 changed-invariant 证据。
同 fixture、默认 SQLite 的有界对比使用 20 个 full-CLI 样本:base/head 的 status p50/p95 为 292.046/307.486 ms 与 293.755/309.202 ms,quota should-run 为 402.653/441.638 ms 与 394.058/421.397 ms;直接兼容投影增加约 6 ms p50。未从该样本推断安装态、模型或持续 fleet 成本。
语义与 CI 对齐
改动复用既有 generated effective-action、agent-scope、AgentInteractionChannel、decoder 与 scheduler arbitration。新增 interaction_execution_facts_v0 / interaction_execution_decision_v0 只属于本有界 Effect-runtime 调用,不注册为共享业务词汇,也不增加 legacy field 的消费预算;diff-scoped semantic probe 与仓库 semantic-vocabulary smoke 均通过。被显式修正的兼容差异是 should_run 不再授权、canonical false/null 阻止 fallback、以及 canonical attempt=false/delivery=true 被拒绝;PR 与本评审都明确披露,没有静默变更。
我的整体评价
没有发现当前精确 head 的阻塞问题。问题判断为 justified_increment:本 PR 完成了执行契约单一 owner 与两个真实消费者替换,但更大的 TurnEnvelope/provider 收敛仍由既有路线负责。长程影响为 preserved:未来 monitor、可执行 P1/P2、必要 replan、等待与恢复继续通过同一调度边界;用户影响为 improved:矛盾权限不再要求无意义的修复接续,也没有新增用户确认或输入。视觉评审为 not_applicable,因为没有 UI、首屏或控件变化。
代码量净增约 191 行生产代码,来自把 300 行 TS 决策与约 106 行 Python bridge 放到一个有界事务中,同时删除 216 行 Python 产品规则;这不是终态收益。下一步应在 producer 全量发出 canonical attempt/delivery 后删除 normal/recovery/self-repair fallback,并让 quota/required-read 与执行决定进一步合并,减少当前最终路径的两次跨运行时调用。该 successor 不阻塞本切片。
剩余风险是安装版 App/Lark、真实模型行为和完整持续成本未验证,以及远端 required checks 尚未完成。它们分别属于采用/成本资格与 merge readiness,不改变本次 owner 收敛的 review verdict。没有合并、auto-merge 或他人评审处置权限。
English verdict: APPROVE — head 1cac02b5b3849be455e034a668e554b014af71c3. One typed TypeScript owner now decides interaction mode, attempt, delivery and quiet facts; both Python consumers use it, and should_run no longer grants delivery. The three legal execution paths, contradiction rejection, future-monitor/P1/P2 and required replan counterexamples pass; the full TypeScript suite and standard premerge are green. Installed-host/model adoption, complete cost and remote merge readiness remain separate unqualified gates. No merge authority is granted.
Motivation
must_attemptanddelivery_allowedanswer different questions:The previous #7100 fix made the final scheduler catch
delivery_allowed=truewithout an attempt, but the permission decision still existed in multiple places. Python derived the flags separately, mode classification repeated the delivery fallback, andshould_runcould act as an independent delivery grant. A terminal consistency clamp could also hide the upstream mismatch instead of exposing its source.Change
This PR replaces that duplication with one bounded TypeScript execution-contract owner:
projectInteractionExecutionaccepts bounded facts and returns the selected interaction mode plus normalizedmust_attempt,delivery_allowed,quiet_noop_allowed, source basis and concrete normalization diagnostics.unadmitted_action_selectionand final interaction-contract construction consume that same decision before compatibility fields are rendered.primary_action.pyloses its duplicate mode, attempt, delivery and quiet-wait rules.should_runis no longer an execution-permission input. Missing canonical delivery may still use the existing normal/recovery/self-repair compatibility grants; explicit canonicalnull/falsestops fallback.must_attempt_work=falseplusdelivery_allowed=trueis rejected as a typed contradiction. A broader inherited grant with no admitted attempt is normalized to false withinteraction_contract.delivery_without_attemptretained as a diagnostic.AgentInteractionChannel, decoder, consistency diagnostics and scheduler arbitration remain the final typed boundary. User gates, scoped fallback, repair/replan modes, quiet waits, notification, settlement and spend remain separate decisions.The production scope is one execution decision. It does not introduce a mega-reducer, another quota selector, a generic schema framework or merge authority.
Migration economics
primary_action.pyplus mode logic ininteraction_contract.py, with final validation in TypeScript.projectInteractionExecution, with Python retaining bounded fact transport and compatibility rendering.primary_action.pyplus the replaced Python mode composition. Python product net change is about -109 lines.Behavior matrix
should_run=trueonlyshould_runcannot mint delivery permissionValidation
Base:
01f61ee9f3b993bfafc11419ea1842e722906957Head:
1cac02b5b3849be455e034a668e554b014af71c3npm run typecheck:control-plane: passed.loopx canary premerge --from-git-diff --git-diff-base origin/main: 18 selected checks passed, zero failures.The counterexamples run through the actual quota builder:
must_attempt=trueanddelivery_allowed=true.must_attempt=true,delivery_allowed=true,quiet_noop_allowed=false.Cost comparison
A same-fixture SQLite benchmark used 30 warm direct-contract calls and 20 full-CLI samples for
statusandquota should-runon base and head:statusfull CLIquota should-runfull CLIThe direct compatibility projection costs about 6 ms more while the bounded full-CLI samples remain comparable. This is not evidence about installed-host, model or sustained fleet cost.
Pre-existing failures
These reproduce unchanged on base and are not counted as passing:
canonical_authority_requiredbefore this owner;No auto-merge, merge queue or merge action is requested.