Repository navigation
fix(ci): restore the Lark human-gate full-public smoke - #6891
Conversation
The managed Codex adapter now names a new thread with thread/name/set before publishing the binding. The Lark human-gate public smoke's fake app-server did not answer that request, so it waited for the 30-second response timeout and surfaced steward_notice_unavailable, turning the daily full-public release qualification red. Acknowledge the request with its exact parameters and fail fast on future unknown requests so protocol drift cannot masquerade as a delivery outage. Signed-off-by: JasonBuildAI <jasonbuildai@gmail.com>
loopx-agent
left a comment
There was a problem hiding this comment.
Reviewer: model_agent · gpt-6.1-sol · OpenAI · runtime_reported · reasoning_effort=max
动机
执行发布资格检查的维护者。
原测试启动合成 Codex 会话时,没有回应已经上线的线程命名请求,通知流程因此超时;补齐回应后,同一个测试能继续验证发送、读回和重复抑制。
当前精确提交的既有通知 smoke 已跑通 File 和 SQLite 两条真实控制面路径,错误线程和未知请求仍失败。
本 PR 只修复现有测试替身,不修改真实飞书消息、生产权限、模型策略或通知功能。
改动思路
生产适配器已经会发送线程命名请求,错误在于现有测试替身未实现这条协议。直接补齐该替身,比关闭生产命名、扩大超时或重建通知测试更符合职责边界。命名回应保留原请求 id;已有发送、持久收据和重复抑制流程继续由真实控制面负责。未新增用户操作轮次。
具体改动
精确 head:5e172a7fcc86dc65215303e010c1559a3ed78fed,相对当前主干 4810c4b8b6fca99f625558ccf76212d663aeebba 仍只有一个文件 +9/-1。依据 #6887 ,spec_revision=issue-6887-at-review,验收项 restore-human-gate-delivery 已实现:恢复原场景,同时保留通知发送、读回和重复抑制断言。
关键内容讲解
write_fake_lark_cli 生成的 app-server 遇到 thread/name/set 时,先检查固定合成 threadId 与 LoopX Chat 名称,再以相同 id 返回空结果。没有 id 的通知保留原忽略行为;其它带 id 的未知请求改为立即失败,避免以后协议漂移又消耗整段请求超时。生产模块、持久格式与权限没有改变。
对主干的风险
更新前的不可变 base 764b989dce88ef43ade5aba5af4958ee2cf3a821 和旧 head 4d84a5c5150c46ffd2728fba3341c207d4c5c9a8 都触发同一个既有语义预算失败:44 个维护副本、上限 43。已独立确认当前主干修复该问题,再正常合入主干;当前精确 head 的标准 premerge、双语 RFC、公开边界和 change-quality 均通过,预算与超时保持原值。
原 head 的两组 steward 测试共 70 项通过;当前集成 head 再跑原始 File/SQLite 通知场景及完整定向 premerge。另执行真实生成的 fake 进行反例检查:正确命名返回原 id;错误线程和未知方法均非零退出。新增处理分支在合主干前后逐字节相同。合成 Codex/IM 只能验证本地协议与控制面路径,不能证明真实远端服务可用。本次遵守 wait_for_ci=false,未查询、轮询或等待 CI。
我的整体评价
APPROVE,限 5e172a7fcc86dc65215303e010c1559a3ed78fed。 该测试维护任务已完成;long_horizon=preserved,通知持久化与后续抑制语义未变;user_experience=preserved,没有新增配置、确认或真实消息发送。复用既有 smoke,未增加重复场景和生产抽象;相邻 #6849 也是修复已有替身,并无批量堆砌测试的证据。保留原失败记录,当前验收依据为更新后的精确提交。
English verdict: APPROVE — 5e172a7fcc86dc65215303e010c1559a3ed78fed. The existing fake now acknowledges the shipped naming request with an exact target/name check and fails fast on unknown requests. The original File/SQLite delivery scenario and current native premerge pass without relaxed limits. Production authority, persistence and remote-provider behavior are unchanged.
Goal And Delivered Outcome
examples/lark-goal-channel-human-gate-delivery-smoke.pyuses a fake Codex app-server that does not answer thethread/name/setrequest introduced by fix(chat): preserve empty managed Codex conversations across restart #6793. Managed Codex startup waits 30 seconds, closes the session, and the Lark gate reportsgate_selection (steward_notice_unavailable). The preceding scheduled run passed the same check, so this is fixture drift rather than a production Lark outage.dc9fdbb51withduration_seconds: 33.44andsteward_notice_unavailable; locally the adapted exact smoke failed ona72dcb21aand on current main764b989dc. After this fixture acknowledgement, the same smoke passes for bothfileandsqliteon tested revision4d84a5c51.loopx-project/loopx:main.Relationship: fixture follow-up to #6793; the same protocol acknowledgement was already applied in #6849 for
tests/test_chat_manager_inspection.py.This is the latest recurrence in the same full-public release-readiness problem area repaired by #6740 and the catalog-contract repair in #6801; the current failure is protocol-fixture drift, not a duplicate.
Author Declaration
Implemented against
loopx/capabilities/native_chat/codex_adapter.py:99(4d84a5c51).thread/name/setrequest with the exact thread id and name.write_fake_lark_cliinexamples/lark-goal-channel-human-gate-delivery-smoke.pyokforfileandsqliteSystemExitsteward_notice_unavailableon current main, then reran the adapted exact smoke after the patch. No production code changed: fix(chat): preserve empty managed Codex conversations across restart #6793's request is the expected contract and test(chat): acknowledge named manager threads in the real fixture #6849 already repaired the same acknowledgement in another fixture. Left the test-only fixture change at one file.Scope And Continuation
Validation
4d84a5c51finishedsyntheticstaticpassedruff checkandpy_compileon the changed smoke;git diff --check upstream/main...HEADunitpassedpytest -q tests/extensions/test_lark_steward_goal_notice.py tests/control_plane/test_steward_goal_notice_integration.py: 70 passedunitpassedregression_paritypasseda72dcb21awith the 30-secondsteward_notice_unavailablepath; passed forfileandsqliteon4d84a5c51integrationblockedstaticpassedscripts/generate_semantic_inventory.py --changed-from HEAD: no supported new vocabulary carriersmanualfailedloopx canary premerge --from-git-diff --git-diff-base upstream/main: direct checks 5/5 passed and public boundary 1/1 passed; catalog canaries 4/6 passed. The canonical smoke hit the Windows extensionless-launcher limitation, andsemantic-vocabulary-drift-smoke.pyrequiresnpm ci --ignore-scripts. Both reproduce on latest main.refresh-stateentrypoint with real CLI subprocesses, synthetic Lark transport and both authority providers, and verifies delivery, deduplication, readback and public-packet redaction. The hosted full-public workflow cannot be dispatched from a fork branch; its exact-source Linux run remains the maintainer's release qualification step.Frontend / Visual Evidence
Type of Change
LoopX Area
Technical Direction
Shared-authority RFC fixture impact
Boundary Checklist
.loopx/,.codex/goals/, and liveACTIVE_GOAL_STATE.md).python3 scripts/check_rfc_bilingual.py --base origin/main --head HEADpasses, or no paired RFC changed.none.Signed-off-bytrailer (git commit -s).AI disclosure: this change was drafted with AI assistance at my request, under my direction and review.