feat(scheduler): add Trae App heartbeat host - #4271
Conversation
ff4402b to
8e5bcdc
Compare
8e5bcdc to
5f4e9db
Compare
cocolord
left a comment
There was a problem hiding this comment.
Request changes conclusion (author-owned PR; GitHub blocks formal self-review)
Reviewed exact head 5f4e9dbcf652014e946f7645a319be19b2ae3507 against origin/main@18fda32fda59e1ed1101c723eb3bfbc981b74bfd. Because this is an author-owned PR, this is posted as a COMMENTED review; the technical verdict is REQUEST_CHANGES and does not grant merge authority.
动机 / Motivation
这个 PR 解决的是一个真实且高频的连续执行缺口:Trae App 中一个 bounded turn 完成后,LoopX 没有 host-owned successor wake,剩余目标会停住,直到用户再次手动输入。补充独立的 trae_app host/runtime/state identity,并保留现有 traex-cli /goal 路径,是合理且必要的。
This PR addresses a real liveness gap: after a bounded Trae App turn settles, LoopX has no host-owned successor wake, so unfinished goal work can remain stranded until the user prompts again. Adding a distinct trae_app host/runtime/state identity while preserving the existing traex-cli /goal path is justified.
改动思路 / Approach
整体方向正确:复用现有 App cadence/backoff/ACK/liveness 算法,只在 host identity、thread binding、activation effect、scheduler-state surface 和 Codex-only local-store authority 上分流。这样避免实现第二套 scheduler,同时确保 Trae 不会读取或修改 Codex automation store。显式选择 trae_app 才会激活该路径,现有 Codex、generic CLI 和 traex-cli 默认行为保持隔离。
The overall design is sound: reuse the existing App cadence/backoff/ACK/liveness algorithm, while separating host identity, thread binding, activation effects, scheduler-state scope, and Codex-only local-store authority. This avoids a second scheduler implementation and keeps Trae away from the Codex automation store. The path is explicitly opt-in through trae_app; existing Codex, generic CLI, and traex-cli defaults remain isolated.
具体改动 / Changes
SchedulerExecutionContext.app_automation_applicableandapply_scheduler_execution_contextadmit the new hosted App profile._SchedulerHintBuilder.buildemits Trae-scoped host facts and runnable ACK/failure commands without the Codex local fallback._trae_app_activationcreates the host-owned Trae automation activation packet.scheduler_ack._scheduler_packetreads the cadence packet and commits receipts undersurface=trae_app.
The implementation threads the identity through guided start/onboarding, heartbeat prompt regeneration, quota decisions, state persistence, ACK/failure handling, ambient TRAECLI_THREAD_ID, documentation, and focused parity/isolation tests. The scope is broad but proportionate to the end-to-end host contract.
对主干的风险 / Main risk
[P1][blocking] trae_app 的公开 cadence packet 身份和 applicability 自相矛盾。
触发条件:以 runtime_profile=trae_app / --trae_app 执行 quota should-run,且存在需要 apply 或 ACK 的 App cadence transition。
路径:SchedulerExecutionContext.projection → apply_scheduler_execution_context → scheduler_hint.codex_app → scheduler_ack._scheduler_packet。首个矛盾可见于 loopx/control_plane/scheduler/execution_context.py:185。
同一个公开 packet 一方面声明 host_surface=trae_app 且 codex_app_applicability=not_applicable,另一方面又把 scheduler_hint.codex_app.applicability 标成 applicable,并继续使用 codex_app_* schema ids 和 scheduler_hint.codex_app.stateful_backoff。scheduler_ack._scheduler_packet 还显式把 trae_app 映射回 codex_app packet key。
结果是:按 execution context 行事的 consumer 可能因为 Codex 不适用而跳过 Trae 必须执行的 cadence update;按 packet key 行事的 consumer 又会把 Trae authority 误认为 Codex。当前测试 test_trae_app_runtime_profile_preserves_host_backoff_and_identity 先断言 Codex 不适用,再读取 hint["codex_app"],因此把矛盾编码成了期望,而不是独立检出它。
Minimum repair: make the shared public cadence/applicability contract provider-neutral (for example, app_automation plus provider/host_surface) or emit a distinct trae_app packet. Update ACK/failure lookup, compact/effect consumers, and docs together; retain a bounded codex_app compatibility path only for actual Codex requests. Add a real quota-CLI regression that requires one self-consistent Trae packet identity and verifies that generated ACK/failure commands read and write only trae_app state.
Validation evidence:
- Real generated Trae ACK and failure commands both returned successfully, persisted under
surface=trae_app, and failure replay producedhost_update_failure_suppressed; no Codex local-store dependency was observed. - The public-packet negative case failed as described above and is the blocking result.
- Exact-head CI run
34678346611has 25/27 checks passing. The Windows failure and downstream merge-gate failure reproduce onorigin/mainrun34674379627, so they are baseline-equivalent rather than introduced by this diff. - The focused suite passed 461/461 with the repository's venv interpreter available to subprocess tests. A later clean rerun reported 451 passed / 10 failed because the restricted child environment could not resolve that interpreter; all 10 are existing
traex-clisubprocess cases, not changed-branch failures. - No live Trae App automation was mutated during review. An external
automation_update/readback integration remains residual validation after the protocol repair.
我的整体评价 / Overall assessment
REQUEST_CHANGES. 这项改动对 Trae App 明显是正向的:补齐了 successor heartbeat,边界选择合理,状态与 Codex local authority 也已隔离;代码量与问题规模相称。当前唯一确认的 blocker 是新公开协议把独立的 trae_app authority 装进 Codex-specific container,违反了本 PR 自己建立的一等身份。由于这条 API 尚未发布,现在修正成本最低。修复 packet identity、补齐真实 CLI contract test 并重跑风险对应验证后,我预期可以进入下一轮 approval review。
The change is directionally strong and proportionate: it closes the successor-heartbeat gap, preserves the existing scheduler owner, and isolates Trae state from Codex local authority. The single confirmed blocker is that the new public protocol puts first-class trae_app authority inside a Codex-specific container. This is the least expensive point to correct that API. After repairing the packet identity, adding the real CLI contract regression, and rerunning the risk-matched checks, I expect the PR to be ready for an approval pass.
373e305 to
94b8761
Compare
cocolord
left a comment
There was a problem hiding this comment.
Approval conclusion (author-owned PR; GitHub blocks formal self-approval)
动机
Trae App 中的 LoopX goal 在完成一个有界阶段后,可能因缺少 host-owned successor wake 而停在非终态,表现为“只完成一部分、没有后续心跳推进”。主干此前只有 Codex App 的自动化路径和 traex-cli 的可见 /goal 路径,没有独立、可持久化且可回读的 trae_app host identity。
改动思路
把 trae_app 建模为独立的 typed host/runtime/state identity,同时复用现有 provider-neutral App automation 的 cadence、backoff、ACK、failure 和 liveness 规则。Canonical 协议统一为 scheduler_hint.app_automation;Codex 仅保留 lossless scheduler_hint.codex_app compatibility projection。Trae 不读取或写入 Codex 本地 automation store,也不接收 Codex alias/fallback。
具体改动
- 增加
HostSurface.TRAE_APP、SchedulerRuntimeProfile.TRAE_APP、--trae_app和TRAECLI_THREAD_ID的完整入口与线程绑定。 - 将非终态 settled heartbeat 保持为 active,使 host 能创建下一轮;仅 terminal outcome 停止。
- 将 scheduler packet、state key、ACK/failure command 和 TypeScript persistence 按 surface 绑定;surface/state/operation 冲突时 fail closed。
- 保留
traex-cli及其/goal路径,不把 Trae 冒充为 Codex。 - 保留 Codex v0 packet/reset-token compatibility,并用真实 CLI-to-TypeScript follow-up、compact envelope equality、fixed reset oracle 和 onboarding smoke 覆盖回归。
对主干的风险
主要风险是跨 host identity、scheduler state、compact envelope 与 compatibility projection 的联动回归。审查逐项核对了 typed state rules、domain neutrality、behavior-change disclosure 和 guidance-vs-obligation:没有 substring/prose-only 状态分类,没有把产品特定措辞放进通用控制面,也没有静默改变既有 host 的默认行为。trae_app 仅在显式选择时启用,Codex、SSH、generic CLI、goal runtime 与 traex-cli 维持原路径。
剩余边界是本次 review 没有实际修改用户的 live Trae automation;仓库内已覆盖生成命令、ACK/failure receipt 和持久化 readback。Premerge 的两个非 feature 失败已界定:install smoke 命中固定 120 秒超时,而 exact-head installed-package CI 通过;hot-path budget 的 18930 > 18500 在 exact base 上完全相同,不是本 PR 引入。
我的整体评价
对 exact base f88aae3a63c9a88fb2ddd3477f5b8dc3a05c2e0f 到 exact head 94b87611c1d41f9ac5a119a886e1ab46b11813b7 的 Standards 与 Spec 双轴审查均未发现可归因于本 PR 的 finding。结构化 review policy revision 3 一致性校验通过,结论为 APPROVE。由于作者不能在 GitHub 对自己的 PR 提交正式 approval,本 review 以 COMMENTED 发布;它不是合并动作。
验证证据:715 个相关 Python tests 通过;TypeScript control-plane 1235 passed、1 skipped;typecheck、repository-configured mypy(22 files)、CI-scope Ruff、diff hygiene、DCO、private/credential scans 和三个 focused smokes 通过。Exact-head GitHub workflow 已 completed/success,所有执行步骤成功;GitHub check-run projection 仍将已完成的 merge-gate 显示为 in_progress,属于远端展示状态漂移。
English verdict:
APPROVE for exact base f88aae3a63c9a88fb2ddd3477f5b8dc3a05c2e0f and exact head 94b87611c1d41f9ac5a119a886e1ab46b11813b7. The implementation gives Trae App a first-class trae_app host/runtime/state identity, reuses the provider-neutral App automation policy, preserves Codex compatibility without leaking Codex authority or storage into Trae, and keeps traex-cli separate.
Independent Standards and Spec reviews found no attributable issues. Typed state classification, domain-neutral control-plane wording, explicit behavior disclosure, and machine-enforced obligations were all checked. The relevant Python, TypeScript, type, lint, smoke, boundary, and exact-head CI evidence passed, subject only to the documented base-equivalent/local-timeout premerge exceptions. The GitHub workflow itself concluded successfully; the lingering merge-gate in-progress label is a stale check-run projection after all of its steps completed successfully.
This is an author-owned PR, so GitHub does not permit formal self-approval. I am therefore recording the approval conclusion as a COMMENTED review. No merge is performed by this review.
huangruiteng
left a comment
There was a problem hiding this comment.
动机
该 PR 为 Trae App 增加一等 heartbeat automation host,并把调度、ACK/failure、Turn receipt 和状态存储从 Codex 专属命名抽象为 provider-neutral 的 App automation,同时保持 Codex 兼容投影。目标是让 Trae 使用独立的 host/state identity,而不是误写 Codex 本地自动化存储。
改动思路
通过 HostSurface.TRAE_APP、SchedulerRuntimeProfile.TRAE_APP 和 APP_HEARTBEAT_SETTLEMENT_RUNTIME_PROFILES 建立类型化边界;scheduler_hint 生成 app_automation canonical packet,Codex 再由兼容层投影旧 codex_app 形状。CLI、heartbeat follow-up、onboarding 与 start-goal 复用同一 execution context,并在 host facts 中绑定 surface/state/reset identity。Trae 走 --trae_app 和独立 state key,Codex fallback 仅在 Codex host 上投影。
具体改动
关键代码讲解
execution_context.py:新增 Trae host/profile、host automation applicability 和 guided-start/settlement 集合。scheduler_hint.py:统一构造 App cadence/backoff/ACK/failure;仅 Codex 通过app_automation_compat.py生成 legacycodex_app,Trae 不生成 Codex fallback。bootstrap_prompt.py与heartbeat_followup_cli.ts:支持--trae_app,校验 host-facts 的 surface/state/RRULE 一致性,并拒绝 Trae 使用 Codex RRULE 别名。accountable_settlement.py:将 Codex/Trae 共同纳入 hosted-App settlement,保持 Turn receipt 与 quota settlement 绑定。
对主干的风险
发现两个合并前阻塞,均由真实 git merge-tree --write-tree origin/main origin/pr-4271-new 复现:loopx/control_plane/heartbeat/bootstrap_prompt.py 和 docs/reference/contracts/interface-budget-contract.md 均发生内容冲突。前者是 heartbeat prompt 的生成/解析入口,后者同时被 interface-budget smoke 和 host/capability 契约引用;直接选一侧会丢失另一侧的 bootstrap/Trae 参数或造成文档与 smoke 不一致。GitHub 当前也报告 mergeStateStatus=DIRTY,因此 exact head 不能安全合并。
验证方面,exact head 的 Trae/Codex scheduler Python focused subset 为 88 passed、128 deselected,六个变更相关 TypeScript suites 为 60 passed;更大 Python 集合在 342 个通过后因长时间等待手动中断。请先 rebase 当前 main,保留 canonical heartbeat/bootstrap 与接口预算契约,再重跑 host activation/onboarding、scheduler、interface-budget 及 packaged-surface smokes。
我的整体评价
Trae/Codex 隔离和 provider-neutral scheduler 方向正确,且 focused tests 支持主要路径;但冲突落在 prompt 生成器和接口预算这两个行为/验证入口,当前不能批准。请提交干净 rebase,确认 --trae_app prompt 可 round-trip、旧 Codex projection 不变,并完成上述风险对应验证后请求 re-review。当前结论:需要修改。
English verdict:
REQUEST_CHANGES: The Trae App boundary and Codex compatibility projection are coherent; 88 focused Python tests and 60 changed TypeScript tests pass. However, exact head 94b87611c1d41f9ac5a119a886e1ab46b11813b7 is DIRTY against current main, with real conflicts in loopx/control_plane/heartbeat/bootstrap_prompt.py and docs/reference/contracts/interface-budget-contract.md. Rebase, reconcile both canonical contracts, rerun host/bootstrap/interface-budget and packaged-surface smokes, then request re-review.
huangruiteng
left a comment
There was a problem hiding this comment.
动机
该 PR 为 Trae App 增加一等 heartbeat automation host,并把调度、ACK/failure、Turn receipt 和状态存储从 Codex 专属命名抽象为 provider-neutral 的 App automation,同时保持 Codex 兼容投影。目标是让 Trae 使用独立的 host/state identity,而不是误写 Codex 本地自动化存储。
改动思路
通过 HostSurface.TRAE_APP、SchedulerRuntimeProfile.TRAE_APP 和 APP_HEARTBEAT_SETTLEMENT_RUNTIME_PROFILES 建立类型化边界;scheduler_hint 生成 app_automation canonical packet,Codex 再由兼容层投影旧 codex_app 形状。CLI、heartbeat follow-up、onboarding 与 start-goal 复用同一 execution context,并在 host facts 中绑定 surface/state/reset identity。Trae 走 --trae_app 和独立 state key,Codex fallback 仅在 Codex host 上投影。
具体改动
关键代码讲解
execution_context.py:新增 Trae host/profile、host automation applicability 和 guided-start/settlement 集合。scheduler_hint.py:统一构造 App cadence/backoff/ACK/failure;仅 Codex 通过app_automation_compat.py生成 legacycodex_app,Trae 不生成 Codex fallback。bootstrap_prompt.py与heartbeat_followup_cli.ts:支持--trae_app,校验 host-facts 的 surface/state/RRULE 一致性,并拒绝 Trae 使用 Codex RRULE 别名。accountable_settlement.py:将 Codex/Trae 共同纳入 hosted-App settlement,保持 Turn receipt 与 quota settlement 绑定。
对主干的风险
发现两个合并前阻塞,均由真实 git merge-tree --write-tree origin/main origin/pr-4271-new 复现:loopx/control_plane/heartbeat/bootstrap_prompt.py 和 docs/reference/contracts/interface-budget-contract.md 均发生内容冲突。前者是 heartbeat prompt 的生成/解析入口,后者同时被 interface-budget smoke 和 host/capability 契约引用;直接选一侧会丢失另一侧的 bootstrap/Trae 参数或造成文档与 smoke 不一致。GitHub 当前也报告 mergeStateStatus=DIRTY,因此 exact head 不能安全合并。
验证方面,exact head 的 Trae/Codex scheduler Python focused subset 为 88 passed、128 deselected,六个变更相关 TypeScript suites 为 60 passed;更大 Python 集合在 342 个通过后因长时间等待手动中断。请先 rebase 当前 main,保留 canonical heartbeat/bootstrap 与接口预算契约,再重跑 host activation/onboarding、scheduler、interface-budget 及 packaged-surface smokes。
我的整体评价
Trae/Codex 隔离和 provider-neutral scheduler 方向正确,且 focused tests 支持主要路径;但冲突落在 prompt 生成器和接口预算这两个行为/验证入口,当前不能批准。请提交干净 rebase,确认 --trae_app prompt 可 round-trip、旧 Codex projection 不变,并完成上述风险对应验证后请求 re-review。当前结论:需要修改。
English verdict:
REQUEST_CHANGES: The Trae App boundary and Codex compatibility projection are coherent; 88 focused Python tests and 60 changed TypeScript tests pass. However, exact head 94b87611c1d41f9ac5a119a886e1ab46b11813b7 is DIRTY against current main, with real conflicts in loopx/control_plane/heartbeat/bootstrap_prompt.py and docs/reference/contracts/interface-budget-contract.md. Rebase, reconcile both canonical contracts, rerun host/bootstrap/interface-budget and packaged-surface smokes, then request re-review.
huangruiteng
left a comment
There was a problem hiding this comment.
动机
该 PR 为 Trae App 增加一等 heartbeat automation host,并把调度、ACK/failure、Turn receipt 和状态存储从 Codex 专属命名抽象为 provider-neutral 的 App automation,同时保持 Codex 兼容投影。目标是让 Trae 使用独立的 host/state identity,而不是误写 Codex 本地自动化存储。
改动思路
通过 HostSurface.TRAE_APP、SchedulerRuntimeProfile.TRAE_APP 和 APP_HEARTBEAT_SETTLEMENT_RUNTIME_PROFILES 建立类型化边界;scheduler_hint 生成 app_automation canonical packet,Codex 再由兼容层投影旧 codex_app 形状。CLI、heartbeat follow-up、onboarding 与 start-goal 复用同一 execution context,并在 host facts 中绑定 surface/state/reset identity。Trae 走 --trae_app 和独立 state key,Codex fallback 仅在 Codex host 上投影。
具体改动
关键代码讲解
execution_context.py:新增 Trae host/profile、host automation applicability 和 guided-start/settlement 集合。scheduler_hint.py:统一构造 App cadence/backoff/ACK/failure;仅 Codex 通过app_automation_compat.py生成 legacycodex_app,Trae 不生成 Codex fallback。bootstrap_prompt.py与heartbeat_followup_cli.ts:支持--trae_app,校验 host-facts 的 surface/state/RRULE 一致性,并拒绝 Trae 使用 Codex RRULE 别名。accountable_settlement.py:将 Codex/Trae 共同纳入 hosted-App settlement,保持 Turn receipt 与 quota settlement 绑定。
对主干的风险
发现两个合并前阻塞,均由真实 git merge-tree --write-tree origin/main origin/pr-4271-new 复现:loopx/control_plane/heartbeat/bootstrap_prompt.py 和 docs/reference/contracts/interface-budget-contract.md 均发生内容冲突。前者是 heartbeat prompt 的生成/解析入口,后者同时被 interface-budget smoke 和 host/capability 契约引用;直接选一侧会丢失另一侧的 bootstrap/Trae 参数或造成文档与 smoke 不一致。GitHub 当前也报告 mergeStateStatus=DIRTY,因此 exact head 不能安全合并。
验证方面,exact head 的 Trae/Codex scheduler Python focused subset 为 88 passed、128 deselected,六个变更相关 TypeScript suites 为 60 passed;更大 Python 集合在 342 个通过后因长时间等待手动中断。请先 rebase 当前 main,保留 canonical heartbeat/bootstrap 与接口预算契约,再重跑 host activation/onboarding、scheduler、interface-budget 及 packaged-surface smokes。
我的整体评价
Trae/Codex 隔离和 provider-neutral scheduler 方向正确,且 focused tests 支持主要路径;但冲突落在 prompt 生成器和接口预算这两个行为/验证入口,当前不能批准。请提交干净 rebase,确认 --trae_app prompt 可 round-trip、旧 Codex projection 不变,并完成上述风险对应验证后请求 re-review。当前结论:需要修改。
English verdict: REQUEST_CHANGES: The Trae App boundary and Codex compatibility projection are coherent; 88 focused Python tests and 60 changed TypeScript tests pass. However, exact head 94b87611c1d41f9ac5a119a886e1ab46b11813b7 is DIRTY against current main, with real conflicts in loopx/control_plane/heartbeat/bootstrap_prompt.py and docs/reference/contracts/interface-budget-contract.md. Rebase, reconcile both canonical contracts, rerun host/bootstrap/interface-budget and packaged-surface smokes, then request re-review.
94b8761 to
2852542
Compare
Signed-off-by: lusendong.6789 <lusendong.6789@bytedance.com> Co-authored-by: TRAE CLI <traecli@bytedance.com>
Signed-off-by: lusendong.6789 <lusendong.6789@bytedance.com> Co-authored-by: TRAE CLI <traecli@bytedance.com>
Signed-off-by: lusendong.6789 <lusendong.6789@bytedance.com> Co-authored-by: TRAE CLI <traecli@bytedance.com>
Signed-off-by: lusendong.6789 <lusendong.6789@bytedance.com> Co-authored-by: TRAE CLI <traecli@bytedance.com>
Signed-off-by: lusendong.6789 <lusendong.6789@bytedance.com> Co-authored-by: TRAE CLI <traecli@bytedance.com>
Signed-off-by: lusendong.6789 <lusendong.6789@bytedance.com> Co-authored-by: TRAE CLI <traecli@bytedance.com>
Signed-off-by: lusendong.6789 <lusendong.6789@bytedance.com> Co-authored-by: TRAE CLI <traecli@bytedance.com>
Signed-off-by: lusendong.6789 <lusendong.6789@bytedance.com> Co-authored-by: TRAE CLI <traecli@bytedance.com>
Signed-off-by: lusendong.6789 <lusendong.6789@bytedance.com> Co-authored-by: TRAE CLI <traecli@bytedance.com>
Signed-off-by: lusendong.6789 <lusendong.6789@bytedance.com> Co-authored-by: TRAE CLI <traecli@bytedance.com>
Signed-off-by: lusendong.6789 <lusendong.6789@bytedance.com> Co-authored-by: TRAE CLI <traecli@bytedance.com>
Signed-off-by: huangruiteng <14976749+huangruiteng@users.noreply.github.com>
Signed-off-by: huangruiteng <14976749+huangruiteng@users.noreply.github.com>
2852542 to
4344a1b
Compare
|
Rebased and repaired against current 本轮处理:
Validation:
冲突入口与 Trae/Codex identity 已完成收敛,旧 Codex projection 与 |
huangruiteng
left a comment
There was a problem hiding this comment.
Approved for exact head 4344a1b886208c6e391b71564ede02becce8e752 against current main a371a30bf5071ac7a1bd43d8d0a050406bd44de5.
The requested rebase conflicts in the canonical heartbeat bootstrap and interface-budget contract are resolved. The Trae App bootstrap now round-trips its explicit host identity while preserving the current v2 Codex compatibility path; the quota budget contract matches the provider-neutral packet and current main dashboard ceiling.
Evidence: all GitHub required checks passed, including Sign-off, dependency review, build, kernel static checks, Node minimum/forward compatibility, dashboard acceptance, Windows PowerShell, four test shards, stage2c e2e/installed/mutants/correctness, pytest, and merge-gate. Local focused host/scheduler Python (372 passed before the final main fast-forward; 12 passed on the final head), TypeScript (61 passed), interface-budget, onboarding/heartbeat/scheduler smokes, changed-file Ruff, and install/update package smokes passed. The standalone install-local smoke timeout is a known environment/baseline hold and is not a GitHub check failure.
No live Trae automation was mutated. Ready to merge.
Summary
trae_apphost surface, scheduler runtime profile, agent type, and--trae_appCLI pathtraex-cliand its existing visible/goalpath as a separate hostscheduler_hint.app_automationthe canonical App protocolValidation
python -m mypy: passed (22 source files)tests,loopx/canary,loopx/control_plane,loopx/domain_packs,loopx/presentation): passedloopx check: public/private boundary clean for all candidate filesPre-merge canary notes
loopx canary premerge --from-git-diff --git-diff-base origin/mainselected 18 checks. Sixteen passed. The two remaining failures are non-feature gate issues:examples/control_plane/hot-path-interface-budget-smoke.pyreportsdashboard_status_jsonat 18,930 chars versus an 18,500 budget. Clean detached worktrees at both the earlier base and currentorigin/mainproduce the identical failure and size, confirming a baseline failure rather than a branch regression.examples/install-local-smoke.pyreached the gate's fixed 120-second timeout. The exact-head GitHubstage2c (installed 0)job passed, so the install path is covered by the repository CI runner.Exact-head GitHub CI completed successfully: DCO, dependency review, release/frontstage builds, dashboard acceptance, kernel static checks, Node minimum/forward compatibility, all four Python shards, installed-package, e2e, mutants, Windows, aggregate pytest, and Sonar passed. The Python Tests workflow concluded
success; GitHub's check-run projection still displayed the already-completedmerge-gatejob asin_progress, although every job step, including the qualification rejection step, completed successfully.Review notes
Changed surfaces: host activation/onboarding, scheduler execution context and hints, heartbeat prompt/liveness projection, quota ACK/failure state scoping, public protocol docs, and focused validation.
Only the real
codex_apphost may read the Codex local automation store.trae_appremains a distinct identity and state scope; it shares only the provider-neutral scheduler behavior. No benchmark jobs, scoring behavior, permission boundary changes, private state, raw logs, or generated evidence are included.The bounded future-facing pass was applied at the existing typed App automation boundary; no second Trae-specific scheduler authority was introduced. Independent review is requested; this PR is not intended for self-merge.