Skip to content

fix(ci): restore the Lark human-gate full-public smoke - #6891

Merged
loopx-agent merged 2 commits into
loopx-project:mainfrom
JasonBuildAI:codex/agent-r9t3
Oct 19, 2026
Merged

loopx-agent merged 2 commits into
loopx-project:mainfrom
JasonBuildAI:codex/agent-r9t3

Conversation

@JasonBuildAI

@JasonBuildAI JasonBuildAI commented Oct 19, 2026 •

Copy link
Copy Markdown
Contributor

Goal And Delivered Outcome

  • Outcome basis / optional anchor: Fixes [Bug]: Lark human-gate full-public smoke times out and blocks release qualification on main #6887. Release qualification blocker: the daily Full Public Smokes sweep cannot return a green readback on current main, so release candidates cannot clear the documented manual full-public qualification step.
  • Goal/source and gap: examples/lark-goal-channel-human-gate-delivery-smoke.py uses a fake Codex app-server that does not answer the thread/name/set request 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 reports gate_selection (steward_notice_unavailable). The preceding scheduled run passed the same check, so this is fixture drift rather than a production Lark outage.
  • Observable before → after, with the validation row that proves it: before, hosted check 25 failed in shard 3 of run 39165718889 at dc9fdbb51 with duration_seconds: 33.44 and steward_notice_unavailable; locally the adapted exact smoke failed on a72dcb21a and on current main 764b989dc. After this fixture acknowledgement, the same smoke passes for both file and sqlite on tested revision 4d84a5c51.
  • Issue/task and intended base: [Bug]: Lark human-gate full-public smoke times out and blocks release qualification on main #6887; 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

  • Written by: model_agent (OpenAI Codex), under human-set constraints and human review.

Implemented against

Criterion (spec clause) Disposition Symbol / path Test or command
The fake app-server must acknowledge the production thread/name/set request with the exact thread id and name. implemented write_fake_lark_cli in examples/lark-goal-channel-human-gate-delivery-smoke.py adapted smoke, both providers
The smoke must still complete the gate delivery, deduplication and readback assertions. implemented same file adapted smoke prints ok for file and sqlite
Future protocol drift should fail immediately instead of masquerading as a 30-second IM outage. implemented unknown-request branch in the fake app-server adapted smoke; unknown requests raise SystemExit

Scope And Continuation

  • Completed scope and remaining work: complete within this scope; the deterministic release-qualification check is repaired.
  • Slice boundary / successor: N/A; no successor is needed for this fixture acknowledgement.

Validation

  • Tested revision: 4d84a5c51
  • Run state: finished
  • Input classes: synthetic
Check kind Result Public-safe evidence / limitation
static passed ruff check and py_compile on the changed smoke; git diff --check upstream/main...HEAD
unit passed pytest -q tests/extensions/test_lark_steward_goal_notice.py tests/control_plane/test_steward_goal_notice_integration.py: 70 passed
unit passed Focused managed-thread naming and history tests: 9 passed
regression_parity passed Adapted exact smoke failed on baseline a72dcb21a with the 30-second steward_notice_unavailable path; passed for file and sqlite on 4d84a5c51
integration blocked The canonical smoke uses extensionless fake CLIs, which this Windows host cannot execute; hosted Linux is the canonical path and the before-failure is public CI. The adapted copy changes launcher packaging only, not runtime calls or assertions.
static passed scripts/generate_semantic_inventory.py --changed-from HEAD: no supported new vocabulary carriers
manual failed loopx 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, and semantic-vocabulary-drift-smoke.py requires npm ci --ignore-scripts. Both reproduce on latest main.
  • Coverage and gaps: The change is confined to the fake app-server in one public smoke. The adapted smoke exercises the public refresh-state entrypoint 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

  • UI impact: none
  • Before: N/A
  • After: N/A
  • First viewport and preview: N/A; no UI change
  • States and viewports shown: N/A
  • Source data: synthetic
  • Attention review: N/A; no UI change
  • Craft review: N/A; no UI change

Type of Change

  • Bug fix
  • New feature
  • Breaking change
  • Refactoring (no functional changes)
  • Documentation update
  • Test update

LoopX Area

  • Control plane (goals, todos, quota, scheduler, registry, runtime)
  • Benchmark boundary (adapters, runners, verifiers, scoring, evidence)
  • Capability or extension (providers, adapters, skills)
  • Public docs or presentation surface (README, protocols, dashboard)
  • Build, packaging, installer, or CI
  • Host or runtime integration

Technical Direction

Shared-authority RFC fixture impact

  • Production-scale fixture schema: N/A
  • Semantic dimensions changed, or reviewed no-impact rationale: N/A; no production contract changed
  • Provider conformance arms run: N/A
  • Read-only legacy/file/PostgreSQL three-arm rehearsal (required for promotion, runtime-routing, or compatibility-projection changes): N/A

Boundary Checklist

  • Neither the diff nor this PR body/comments/attachments disclose private state, credentials, raw traces or verifier output, internal links, or local machine paths (including .loopx/, .codex/goals/, and live ACTIVE_GOAL_STATE.md).
  • I did not duplicate maintainer-owned benchmark work unless a maintainer split out a public issue for it.
  • I kept the change scoped to the linked issue/task.
  • Existing English/Chinese RFC pairs (including ledger entries) both have a diff, and the local premerge check python3 scripts/check_rfc_bilingual.py --base origin/main --head HEAD passes, or no paired RFC changed.
  • I completed the visual evidence section for UI changes, or marked UI impact none.
  • Every commit includes a DCO Signed-off-by trailer (git commit -s).

AI disclosure: this change was drafted with AI assistance at my request, under my direction and review.

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 loopx-agent left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

@loopx-agent
loopx-agent merged commit 0b3426a into loopx-project:main Oct 19, 2026
6 of 7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: Lark human-gate full-public smoke times out and blocks release qualification on main

2 participants