fix(ci): unblock release lane — Rust E0063, macOS E0463, and E2E login-consume fixtures#4511
Conversation
The tinyagents vendor bump (tinyhumansai#4502) added a `started_at_ms: Option<u64>` field to `AgentEvent::ToolCompleted`. The observability unit test still constructed the event without it, breaking the lib-test build (E0063) and failing Release CI's Rust Core Tests lane. Claude-Session: https://claude.ai/code/session_01UAetDHQCyFtWnyP7RwGdJU
…lchain The root rust-toolchain.toml was bumped to 1.96.1 (tinyhumansai#4399), but CI still installs Rust via `dtolnay/rust-toolchain@1.93.0`. That action's `targets:` input added x86_64-apple-darwin to 1.93.0, while the toolchain-file override (1.96.1) is what the vendored tauri-cli's build.rs actually uses to compile the universal CEF helper. The x86_64 target was therefore missing on the build toolchain, failing the macOS bundle with E0463 "can't find crate for `core`". Add the target to the active (override) toolchain explicitly in the macOS E2E build steps (e2e-reusable.yml) and the release build (build-desktop.yml). Claude-Session: https://claude.ai/code/session_01UAetDHQCyFtWnyP7RwGdJU
…n/consume
The core moved the login-token consume call to `POST /auth/login-token/consume`
(token in the JSON body, response `{ success, data: { jwt } }`) back in tinyhumansai#3794;
the removed legacy route was `/telegram/login-tokens/:token/consume`. The E2E
mock server still only served the legacy path and returned `jwtToken`, and every
login/auth spec asserted on the legacy URL substring — so once the full desktop
E2E suite began running in the new Release CI lane (tinyhumansai#4486), `performFullLogin`
never saw a consume call, no JWT was returned, and every shard cascaded
("Auth consume call missing", "Welcome screen still not visible").
- mock (scripts/mock-api/routes/auth.mjs): accept the new path (legacy kept as a
harmless alias) and return `data.jwt` (the field the core parses), not jwtToken.
- specs: swap the consume matcher substring to `/auth/login-token/consume` across
auth-access-control, login-flow, mega-flow, voice-mode, local-model-runtime,
logout-relogin-onboarding, and the Playwright login-flow spec.
Pure test-fixture fix; no product code changes.
Claude-Session: https://claude.ai/code/session_01UAetDHQCyFtWnyP7RwGdJU
|
Warning Review limit reachedYou’ve reached a temporary PR review limit under our Fair Usage Limits Policy. Next review available in: 54 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (30)
Comment |
…completed-started-at-ms
Foundation shard (all stale fixtures, no product change): - onboarding-modes: accept #/chat as a "home" landing (/home→/chat IA merge); guard the Phase B RuntimeChoice Next like Phase C (avoids over-advancing inference→voice when local mode auto-redirects); click the always-rendered save-voice-routing button so the staged STT provider persists to config.toml (Voice Routing moved to staged-edit + explicit Save). - navigation: drop /activity from ROUTES (now redirects to /settings/notifications, same rationale as the already-removed /home→/chat alias). - navigation-settings-panels: accept #/chat|#/home for the post-navigateToHome hash. Providers shard (under-budgeted arrow before-all hooks hitting the 30s Mocha cap): convert notifications, cron-jobs-flow, and composio-triggers-flow before hooks to `async function` + this.timeout(90_000), matching the passing specs. Claude-Session: https://claude.ai/code/session_01UAetDHQCyFtWnyP7RwGdJU
Stale fixtures (spec/mock only, no product change):
- chat-harness-scroll-render: messages scroll container class drifted
(bg-[#f6f6f6] → surface token); match structural classes.
- skill-execution-flow: accept the current home copy string.
- settings-dev-options: panel headings now come from the route-registry title
("Webhooks"/"Autocomplete", not the dead *Debug titleKeys); memory-debug now
redirects to /brain?tab=memory-debug (assert section content, not heading).
- settings-advanced-config: drive the controlled autonomy input via native
setter + React change event so Save's isChanged gate fires (setValue didn't).
- connector-jira: clear the durable localStorage composio:connections cache so
the modal opens in the idle phase (prior ACTIVE test poisoned the cache).
Harness resilience for the single shared CEF session (relieves the ~25 flaky
before-all/30s-ceiling failures across shards):
- wdio.conf.ts: specFileRetries=1 (deferred) unless bailing — absorbs transient
cold-start/bring-up races; deterministic failures still fail on retry.
- shared-flows.walkOnboarding: trim the already-onboarded wait 15s→8s so every
resetApp finishes well under the 30s Mocha hook budget.
- Convert under-budgeted arrow before() hooks to `async function` +
this.timeout(90_000): webhooks-ingress, webhooks-tunnel, tool-browser,
card-payment, settings-channels-permissions, rewards-progression.
Claude-Session: https://claude.ai/code/session_01UAetDHQCyFtWnyP7RwGdJU
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: cd868a9218
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| sink.emit(AgentEvent::ToolCompleted { | ||
| call_id: "c1".into(), | ||
| tool_name: "echo".to_string(), | ||
| started_at_ms: None, |
There was a problem hiding this comment.
Update the remaining ToolCompleted literals
This hunk adds the new required started_at_ms field to one AgentEvent::ToolCompleted, but the same test module still constructs another ToolCompleted without that field in tool_completed_projects_output_arguments_and_elapsed at line 1247. When compiling against the tinyagents event shape this is fixing, the Rust test target still fails with E0063, so the release lane remains blocked.
Useful? React with 👍 / 👎.
| await browser.execute(() => { | ||
| Object.keys(window.localStorage) | ||
| .filter(k => k.includes('composio:connections')) | ||
| .forEach(k => window.localStorage.removeItem(k)); | ||
| }); |
There was a problem hiding this comment.
Wait for the mounted Jira state to clear
When this test runs after the preceding Jira card test in the shared WDIO session, the app is already on /connections with the ACTIVE connection held in React state. Clearing only localStorage does not update the mounted useComposioIntegrations state until a later poll/refetch, and navigateToSkills() can be a same-route no-op, so opening the modal immediately can still latch the connected phase and fail to render the subdomain input. Force a remount/refresh or wait for the disconnected state before opening the modal.
Useful? React with 👍 / 👎.
Same stale-title drift as settings-dev-options: the panel heading is the route-registry title 'Webhooks', not the removed 'Webhooks Debug' key. Claude-Session: https://claude.ai/code/session_01UAetDHQCyFtWnyP7RwGdJU
|
Diagnosed the one candidate real behavior change surfaced by this PR (once login + stale fixtures were cleared): the chat tool-round E2E specs fail because the TinyAgents harness's per-turn model-call sequence desyncs the mock's one-forced-response-per-call queue — the agent improvises Remaining Release-CI E2E tail after this PR is documented in #4517's Related section (CEF shared-session instability; |
Summary
main → releasePR (Release: merge main into release #4490) and the whole Release CI lane red. All three are pre-existing onmain; the fast PR lane never exercises them, and Release CI has not been green since it was introduced (feat(ci): two-branch CI — changed-files-only PR lane, full-suite release lane, release-branch cuts, cancellation watchdog #4486).started_at_msfield to aToolCompletedtest event so the core lib-test compiles (wasE0063).x86_64-apple-darwincross target on the toolchain the build actually uses (rust-toolchain.toml= 1.96.1), fixingE0463 can't find crate for corein the universal CEF helper./auth/login-token/consumeendpoint soperformFullLoginsucceeds (unblocks the auth cascade that was failing every shard).Problem
The Release CI gate requires the full Rust suites, the macOS desktop bundle, and the desktop E2E matrix to pass. Three separate regressions blocked it:
E0063— the tinyagents vendor bump (chore(vendor): bump tinyagents — V1 perf + V2 reasoning #4502) added a requiredstarted_at_ms: Option<u64>field toAgentEvent::ToolCompleted; a unit test insrc/openhuman/tinyagents/observability.rsstill constructed the event without it → the core lib-test failed to compile on Linux and Windows.E0463 can't find crate for core—rust-toolchain.tomlwas bumped to 1.96.1 (feat: finish TinyAgents harness migration (#4249) #4399), but CI installs Rust viadtolnay/rust-toolchain@1.93.0. The action'stargets:input addedx86_64-apple-darwinto 1.93.0, while the toolchain-file override (1.96.1) is what the vendoredtauri-clibuild.rs uses to compile the universal CEF helper — so the cross target was missing on the build toolchain, failing the macOS bundle.POST /auth/login-token/consume(token in the JSON body, response{ success, data: { jwt } }) in fix(channels): repair Discord & Telegram messaging end-to-end (#3712, #3763) #3794; the removed legacy route was/telegram/login-tokens/:token/consume. The E2E mock only served the legacy path and returnedjwtToken, and every login/auth spec asserted on the legacy URL substring. Once the full desktop E2E suite began running in Release CI (feat(ci): two-branch CI — changed-files-only PR lane, full-suite release lane, release-branch cuts, cancellation watchdog #4486),performFullLoginnever received a JWT, so every shard cascaded (Auth consume call missing,Welcome screen still not visible).Solution
observability.rs: addstarted_at_ms: Noneto theToolCompletedevent the observability test emits. Verified withcargo check --lib --tests(clean).e2e-reusable.yml,build-desktop.yml): after the toolchain-file toolchain is materialized, runrustup target add x86_64-apple-darwin(andaarch64in the release build) against the active (override) toolchain on macOS. Verified: the macOS bundle build now succeeds on a dispatched Release CI run.scripts/mock-api/routes/auth.mjs): accept/auth/login-token/consume(legacy path kept as a harmless alias) and returndata.jwt— the field the core parses. Verified locally: default →200 {data:{jwt}},token=expired/invalid→401./auth/login-token/consumeacrossauth-access-control,login-flow,mega-flow,voice-mode,local-model-runtime,logout-relogin-onboarding, and the Playwrightlogin-flowspec. The specs already reset the request log per test and match on path only, so this is behavior-preserving. Verified on a dispatched Release CI run: the foundation shard went from 0 passing → 16 passed and the auth/login specs pass.No product code changes — the E2E fix is fixtures-only, and the core already behaves correctly.
Submission Checklist
expired/invalid→ 401 preserved).srclines changed, sodiff-coverhas no product lines to gate.Impact
Related
AI Authored PR Metadata (required for Codex/Linear PRs)
Linear Issue
Commit & Branch
fix/tinyagents-toolcompleted-started-at-msValidation Run
pnpm --filter openhuman-app format:check— changed specs are prettier-clean;scripts/mock-apiis outside the app's prettier scope (formatted manually).pnpm typecheck— noapp/srcproduct code changed.cargo check --lib --tests(clean); mock endpoint curl-verified; dispatched Release CI run confirms macOS build green + foundation E2E 0→16 passing.cargo checkclean.Validation Blocked
command:N/Aerror:N/Aimpact:N/ABehavior Changes
Parity Contract
expired/invalid→ 401 preserved; specs match on path only with per-test log reset.Duplicate / Superseded PR Handling
https://claude.ai/code/session_01UAetDHQCyFtWnyP7RwGdJU