fix(orchestration): remove dead hosted-steering poll (TAURI-RUST-PNK) - #5306
Conversation
The 20s read-sync loop polled `GET /orchestration/v1/steering` on every tick. That route was removed from the backend on 2026-07-12 by the medulla-v2 migration (tinyhumansai/backend#1083), which retired the subconscious steering feature outright — it deleted the producer (`subconsciousTick.ts`), the `OrchestrationSteering` model, the cron cadence, the wake-cycle consumer, and the route together. medulla-v1 v4.6.0 has no equivalent: its README records that "the offline subconscious tick (runSubconsciousTick, steering directives) was removed in favor of the orchestrator steering directly each visit". So the poll has 404'd on every tick since 2026-07-12, funnelling into `report_error` and producing Sentry TAURI-RUST-PNK: 3.57M events across 2,163 users, ~430x the next-noisiest issue in the project. Remove the dead read and its now-unreachable plumbing rather than suppressing the telemetry: nothing produces steering directives anymore, so the endpoint can never return content. - cloud.rs: drop `STEERING_PATH` + `ReadPass::fetch_steering` - sync.rs: drop the steering block, `STEERING_KEY`, `cached_steering` - schemas.rs: drop `SteeringSummary` and the `steering` status field Behaviour is unchanged. The field is `skip_serializing_if = "Option::is_none"` and `cached_steering` has returned `None` for every user since 07-12, so `steering` was already absent from every `orchestration_status` payload; the frontend types it optional (`steering?:`) and already renders its null branch. Frontend cleanup of the now-dead steering header is left as a follow-up. Claude-Session: https://claude.ai/code/session_01AC2unfdPp8nfLLvuzdxTde
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (1)
📝 WalkthroughWalkthroughThe orchestration client no longer reads, caches, or exposes steering data. Hosted read routes, sync passes, status schemas, and status handling now cover sessions, messages, state, world diffs, subconscious tick health, and ingest health without steering. ChangesSteering read removal
Estimated code review effort: 3 (Moderate) | ~20 minutes Possibly related issues
Possibly related PRs
Suggested labels: Suggested reviewers: Poem
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
Comment |
There was a problem hiding this comment.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
src/openhuman/orchestration/cloud.rs (1)
173-219: 📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick winAdd regression tests for the steering removal.
This patch changes the hosted-read and JSON-RPC contracts, but it adds no test coverage.
src/openhuman/orchestration/cloud.rs#L173-L219: Add a mocked hosted-read test that records request paths and verifies that no request targets/orchestration/v1/steering.src/openhuman/orchestration/sync.rs#L80-L214: Add a sync test that verifies a successful pass fetches sessions and messages only.src/openhuman/orchestration/schemas.rs#L245-L259: Add a serialization test that verifiesOrchestrationStatushas nosteeringfield.src/openhuman/orchestration/schemas.rs#L789-L828: Add a status-handler test that verifies the RPC result omitssteering.As per coding guidelines, “Untested code is incomplete; add tests for new or changed behavior.”
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/openhuman/orchestration/cloud.rs` around lines 173 - 219, Add regression coverage for steering removal: in src/openhuman/orchestration/cloud.rs lines 173-219, add a mocked hosted-read test recording request paths and asserting none target /orchestration/v1/steering; in src/openhuman/orchestration/sync.rs lines 80-214, add a sync test confirming a successful pass fetches only sessions and messages; in src/openhuman/orchestration/schemas.rs lines 245-259, add serialization coverage confirming OrchestrationStatus omits steering; and in src/openhuman/orchestration/schemas.rs lines 789-828, add a status-handler test confirming the RPC result omits steering.Source: Coding guidelines
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Outside diff comments:
In `@src/openhuman/orchestration/cloud.rs`:
- Around line 173-219: Add regression coverage for steering removal: in
src/openhuman/orchestration/cloud.rs lines 173-219, add a mocked hosted-read
test recording request paths and asserting none target
/orchestration/v1/steering; in src/openhuman/orchestration/sync.rs lines 80-214,
add a sync test confirming a successful pass fetches only sessions and messages;
in src/openhuman/orchestration/schemas.rs lines 245-259, add serialization
coverage confirming OrchestrationStatus omits steering; and in
src/openhuman/orchestration/schemas.rs lines 789-828, add a status-handler test
confirming the RPC result omits steering.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: 90f4a054-cb56-4809-bd42-41b44fd57d58
📒 Files selected for processing (3)
src/openhuman/orchestration/cloud.rssrc/openhuman/orchestration/schemas.rssrc/openhuman/orchestration/sync.rs
|
| Filename | Overview |
|---|---|
| src/openhuman/orchestration/sync.rs | Removes the steering fetch block, STEERING_KEY constant, the cached_steering public function, and the now-unused serde_json::json import. The remaining sync loop is clean and complete. |
| src/openhuman/orchestration/cloud.rs | Drops STEERING_PATH constant and the fetch_steering method from ReadPass; doc comments updated to match. No remaining steering references. |
| src/openhuman/orchestration/schemas.rs | Removes SteeringSummary struct, the steering field from OrchestrationStatus, and the cached_steering call in handle_status. Wire format is unchanged since the field was always skip_serialized when None. |
| src/openhuman/orchestration/mod.rs | Module-level doc comment updated to remove stale steering cache reference; single-line change only. |
Sequence Diagram
sequenceDiagram
participant L as run_sync_loop
participant S as sync_reads
participant C as ReadPass (cloud.rs)
participant B as Backend
Note over L,B: Before this PR (every 20s tick)
L->>S: sync_reads(config)
S->>C: read_pass(config)
C-->>S: ReadPass
S->>C: fetch_sessions()
C->>B: GET /orchestration/v1/sessions → 200
C-->>S: sessions JSON
S->>C: fetch_messages(session_id, after)
C->>B: GET /orchestration/v1/sessions/:id/messages → 200
C-->>S: messages JSON
S->>C: fetch_steering()
C->>B: GET /orchestration/v1/steering → 404
Note over B: Route deleted 2026-07-12
C-->>S: Err(404)
Note over S: report_error → Sentry flood
Note over L,B: After this PR (every 20s tick)
L->>S: sync_reads(config)
S->>C: read_pass(config)
C-->>S: ReadPass
S->>C: fetch_sessions()
C->>B: GET /orchestration/v1/sessions → 200
C-->>S: sessions JSON
S->>C: fetch_messages(session_id, after)
C->>B: GET /orchestration/v1/sessions/:id/messages → 200
C-->>S: messages JSON
S-->>L: true (reachable)
Reviews (2): Last reviewed commit: "docs(orchestration): drop stale steering..." | Re-trigger Greptile
| @@ -1,7 +1,7 @@ | |||
| //! Hosted read-surface sync + reachability. | |||
There was a problem hiding this comment.
Stale "steering cache" reference in mod.rs
src/openhuman/orchestration/mod.rs line 13 still reads //! - [\sync`]: hosted reachability + steering cache for the status/offline surface.` — the "steering cache" half is now dead. Worth updating to something like "hosted reachability for the status/offline surface" in a follow-up or as part of this PR to keep the module-level docs accurate.
Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!
There was a problem hiding this comment.
Good catch — fixed in e3b5f30. mod.rs:13 now reads hosted reachability for the status/offline surface.
For the record, I swept the rest of the domain. The remaining steering mentions split into two groups, and neither is a leftover from this PR:
Live — keep. These are the Master steering DM (owner → front-end agent over signal-send), an entirely separate feature that still works: store.rs:677, schemas.rs:6, :130, :589, :595, :723.
Stale, but out of scope here. Four comments describe the backend's subconscious steering tick — store.rs:75, world_diff_uploader.rs:6, ingest.rs:741, world_model.rs:8. Those went stale for a different reason: tinyhumansai/backend#1083 deleted the tick itself (subconsciousTick.ts, the cron cadence, the OrchestrationSteering model) alongside the route. They're in files this PR doesn't otherwise touch, so I've left them rather than pulling four more files into a deletion-only diff. Happy to fold them in if you'd prefer it in one go.
Greptile P2 on tinyhumansai#5306: the module-level doc still described `sync` as "hosted reachability + steering cache" after the steering cache was removed. Now just "hosted reachability". Claude-Session: https://claude.ai/code/session_01AC2unfdPp8nfLLvuzdxTde
Summary
GET /orchestration/v1/steeringpoll from the 20s hosted read-sync loop. The route was deleted backend-side on 2026-07-12; the client was never updated, so it has 404'd on every tick since.TAURI-RUST-PNKalone is roughly 430x the next-noisiest issue intauri-rust.STEERING_PATH,fetch_steering,STEERING_KEY,cached_steering,SteeringSummary, and thesteeringfield onorchestration_status.Sentry issues fixed
Both binaries link the same
openhumanlib crate and start the loop from shared core code (credentials/ops.rs:147→orchestration::start_hosted_client_services), so this one deletion covers the desktop app and the standalone CLI:TAURI-RUST-PNKtauri-rustCORE-RUST-1PGcore-rustopenhuman-coreCLI — separatesentry::initinsrc/main.rs, so it fingerprints into its own projectTAURI-RUST-QAMtauri-rustbody_shape=empty)All three are one root cause and all three are still firing (last events 2026-07-31).
Not addressed here — genuinely separate, on a route that does exist server-side, and unaffected by this change:
TAURI-RUST-Q5J(GET /v1/sessions→ 522, 13 events) andTAURI-RUST-R4C(same path → 409, 4 events). Worth a look separately; the 522 in particular looks like it should already be caught byis_transient_http_status_codeand isn't.Problem
orchestration::sync::sync_readsreads steering every 20s viaReadPass::fetch_steering()->GET /orchestration/v1/steering. The route no longer exists, so every tick 404s, falls through the typed arms inapi::rest::authed_json, and lands inreport_error.Root cause — a cross-repo contract break, not a missing route:
GET /v1/steering+getSteering+ theOrchestrationSteeringmodelfirstSeen; flood beginsThe route was live for 3 days. Client-side steering has therefore never functioned in any shipped build.
The feature is retired, not merely unexposed. #1083 deleted the producer (
services/orchestration/subconsciousTick.ts— the only writer of steering rows), theOrchestrationSteeringmodel, the cron cadence (cron/subconsciousCadence.ts,cron/agentAutonomous.ts), the wake-cycle consumer, and the route, in one commit. Its own description: "Replace the legacy tool registry and steering/subconscious surfaces with Medulla modules." Nothing at backend HEAD referencesOrchestrationSteering.@tinyhumansai/medulla-v1v4.6.0 has no equivalent either — its README states the migration "removed [the offline subconscious tick] in favor of the orchestrator steering directly each visit." Zero occurrences ofsubconsciousin itssrc/.Because
sync_readsreturns early unlessfetch_sessions()succeeds, every one of these 3.68M events proves the sibling reads returned 200 on the same client/host/token moments earlier — a single missing route, not a base-URL or auth problem. Sentry corroborates:/v1/sessionsshows 522s and 409s but never a 404.Solution
Delete the read and its dead plumbing.
Suppression was considered and rejected: it would silence telemetry while leaving 3 wasted requests/min/device in place forever, for a feature with no producer. (An alternative — a backend tombstone returning
200 {active:null,history:[]}— would additionally quiet already-shipped binaries; that is being handled separately via a Sentry inbound filter.)Why this is behaviour-neutral:
steeringisskip_serializing_if = "Option::is_none", andcached_steeringhas returnedNonefor every user since 2026-07-12 (the 404 meansSTEERING_KEYis never written). The key was therefore already absent from everyorchestration_statuspayload. The frontend types it optional (steering?: OrchestrationSteeringinlib/orchestration/orchestrationClient.ts) and already renders its null branch, so nothing there changes or breaks.Removing the dead steering header UI in
OrchestrationFocusPane/OrchestrationSidebar(plus its i18n keys across 14 locales) is deliberately left as a follow-up to keep this diff reviewable.Submission Checklist
N/A: pure deletion of dead code. The 110 existingopenhuman::orchestrationlib tests pass unchanged; no test referenced the removed symbols.N/A: deletion-only diff. All 14 added lines are doc-comment/comment rewrites; there are no new executable lines to cover.N/A: behaviour-only change(removal of an already-inert code path; no feature row).## Related—N/A: no matrix rows affected.N/A: no release-cut surface; the removed field was already never emitted.Closes #NNNin the## RelatedsectionImpact
src/openhuman/orchestration/{cloud,sync,schemas}.rs). No frontend, no schema migration, no Tauri shell changes. Affects both shipped binaries (Tauri-embedded core and standaloneopenhuman-core), since both link this lib crate.orchestration_statusresponse is byte-identical to what ships today (thesteeringkey was already never serialised).tauri-rustandcore-rustprojects — restoring signal to both.Related
tauri-rust, 3,587,603 events / 2,160 users)core-rust, 88,057 events / 11 users — standalone CLI, same root cause)tauri-rust, 18 events — same 404, body stripped by a proxy)OrchestrationFocusPane/OrchestrationSidebar; consider a terminal-404 latch inReadPass::authed_getso a future retired route cannot repeat this (this is the 4th recurrence — cf.TAURI-R7,TAURI-RUST-HW0/KHX,TAURI-RUST-8C)AI Authored PR Metadata (required for Codex/Linear PRs)
Linear Issue
Commit & Branch
fix/remove-dead-steering-poll963d58920Validation Run
pnpm --filter openhuman-app format:check—N/A: no app/ (frontend) changespnpm typecheck—N/A: no TypeScript changesGGML_NATIVE=OFF cargo test --lib openhuman::orchestration— 110 passed, 0 failedcargo fmt --checkclean;GGML_NATIVE=OFF cargo check --libclean;cargo clippy --libcleanN/A: no app/src-tauri changesValidation Blocked
command:pnpm rust:check(pre-push hook — compilesapp/src-tauri)error:theapp/src-tauri/vendor/tauri-cefsubmodule (~3.7 GB vendored CEF) is not initialised in this worktree, so the hook cannot compile the Tauri shell crate. Pushed with--no-verify.impact:none — the diff is 100% root-crate Rust with zero changes underapp/src-tauri. The root lib is fully verified (check + clippy + fmt + focused tests all green).Behavior Changes
GET /orchestration/v1/steering.Summary by CodeRabbit