Skip to content

fix(orchestration): remove dead hosted-steering poll (TAURI-RUST-PNK) - #5306

Merged
M3gA-Mind merged 2 commits into
tinyhumansai:mainfrom
sanil-23:fix/remove-dead-steering-poll
Jul 31, 2026
Merged

fix(orchestration): remove dead hosted-steering poll (TAURI-RUST-PNK)#5306
M3gA-Mind merged 2 commits into
tinyhumansai:mainfrom
sanil-23:fix/remove-dead-steering-poll

Conversation

@sanil-23

@sanil-23 sanil-23 commented Jul 31, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • Removes the dead GET /orchestration/v1/steering poll 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.
  • Kills the flood at source across two Sentry projects — 3,675,678 events / ~2,170 users since 2026-07-14. TAURI-RUST-PNK alone is roughly 430x the next-noisiest issue in tauri-rust.
  • Deletes rather than suppresses: the steering feature was retired outright, so the endpoint can never return content again.
  • Drops the now-unreachable plumbing: STEERING_PATH, fetch_steering, STEERING_KEY, cached_steering, SteeringSummary, and the steering field on orchestration_status.
  • No behaviour change — that field has been absent from every payload since 2026-07-12 (details below).

Sentry issues fixed

Both binaries link the same openhuman lib crate and start the loop from shared core code (credentials/ops.rs:147orchestration::start_hosted_client_services), so this one deletion covers the desktop app and the standalone CLI:

Issue Project Events Users Note
TAURI-RUST-PNK tauri-rust 3,587,603 2,160 desktop app
CORE-RUST-1PG core-rust 88,057 11 standalone openhuman-core CLI — separate sentry::init in src/main.rs, so it fingerprints into its own project
TAURI-RUST-QAM tauri-rust 18 1 same 404 behind a proxy that strips the body (body_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) and TAURI-RUST-R4C (same path → 409, 4 events). Worth a look separately; the 522 in particular looks like it should already be caught by is_transient_http_status_code and isn't.

Problem

orchestration::sync::sync_reads reads steering every 20s via ReadPass::fetch_steering() -> GET /orchestration/v1/steering. The route no longer exists, so every tick 404s, falls through the typed arms in api::rest::authed_json, and lands in report_error.

Root cause — a cross-repo contract break, not a missing route:

When Repo What
2026-07-09 backend #1073 adds GET /v1/steering + getSteering + the OrchestrationSteering model
2026-07-09 openhuman #4738 adds this client caller — contract valid
2026-07-12 backend #1083 (medulla-v2 migration) deletes the route and the whole feature
2026-07-14 0.58.18 rollout; Sentry firstSeen; flood begins

The 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), the OrchestrationSteering model, 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 references OrchestrationSteering.

@tinyhumansai/medulla-v1 v4.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 of subconscious in its src/.

Because sync_reads returns early unless fetch_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/sessions shows 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: steering is skip_serializing_if = "Option::is_none", and cached_steering has returned None for every user since 2026-07-12 (the 404 means STEERING_KEY is never written). The key was therefore already absent from every orchestration_status payload. The frontend types it optional (steering?: OrchestrationSteering in lib/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

  • Tests added or updated — N/A: pure deletion of dead code. The 110 existing openhuman::orchestration lib tests pass unchanged; no test referenced the removed symbols.
  • Diff coverage ≥ 80%N/A: deletion-only diff. All 14 added lines are doc-comment/comment rewrites; there are no new executable lines to cover.
  • Coverage matrix updated — N/A: behaviour-only change (removal of an already-inert code path; no feature row).
  • All affected feature IDs from the matrix are listed under ## RelatedN/A: no matrix rows affected.
  • No new external network dependencies introduced — this removes a network call.
  • Manual smoke checklist updated if this touches release-cut surfaces — N/A: no release-cut surface; the removed field was already never emitted.
  • Linked issue closed via Closes #NNN in the ## Related section

Impact

  • Platform: desktop/CLI Rust core only (src/openhuman/orchestration/{cloud,sync,schemas}.rs). No frontend, no schema migration, no Tauri shell changes. Affects both shipped binaries (Tauri-embedded core and standalone openhuman-core), since both link this lib crate.
  • Behaviour: one fewer HTTP GET per 20s sync tick. The orchestration_status response is byte-identical to what ships today (the steering key was already never serialised).
  • Telemetry: removes ~3.68M Sentry events/period once released, across the tauri-rust and core-rust projects — restoring signal to both.
  • Perf: eliminates 3 wasted authed requests/min per signed-in device.
  • Note: already-shipped 0.61.x/0.63.x binaries keep polling until users upgrade — that residue is being handled with a Sentry inbound filter.

Related

  • Closes: orchestration steering read floods Sentry: GET /orchestration/v1/steering 404s every 20s (TAURI-RUST-PNK) #5149
  • Closes: TAURI-RUST-PNK (tauri-rust, 3,587,603 events / 2,160 users)
  • Closes: CORE-RUST-1PG (core-rust, 88,057 events / 11 users — standalone CLI, same root cause)
  • Closes: TAURI-RUST-QAM (tauri-rust, 18 events — same 404, body stripped by a proxy)
  • Supersedes: fix(api): suppress orchestration steering 404 flood (TAURI-RUST-PNK) (#5149) #5182 (client-side 404 suppression; deletion subsumes it — its matcher would guard a request that no longer exists)
  • Backend context: tinyhumansai/backend#1136 (proposed restoring the route; not viable — the model, its writer, and its scheduler were all deleted by tinyhumansai/backend#1083)
  • Follow-up PR(s)/TODOs: remove the dead steering header UI + i18n keys from OrchestrationFocusPane / OrchestrationSidebar; consider a terminal-404 latch in ReadPass::authed_get so 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

  • Key: N/A
  • URL: N/A

Commit & Branch

  • Branch: fix/remove-dead-steering-poll
  • Commit SHA: 963d58920

Validation Run

  • pnpm --filter openhuman-app format:checkN/A: no app/ (frontend) changes
  • pnpm typecheckN/A: no TypeScript changes
  • Focused tests: GGML_NATIVE=OFF cargo test --lib openhuman::orchestration110 passed, 0 failed
  • Rust fmt/check (if changed): cargo fmt --check clean; GGML_NATIVE=OFF cargo check --lib clean; cargo clippy --lib clean
  • Tauri fmt/check (if changed): N/A: no app/src-tauri changes

Validation Blocked

  • command: pnpm rust:check (pre-push hook — compiles app/src-tauri)
  • error: the app/src-tauri/vendor/tauri-cef submodule (~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 under app/src-tauri. The root lib is fully verified (check + clippy + fmt + focused tests all green).

Behavior Changes

  • Intended behavior change: the 20s orchestration sync no longer issues GET /orchestration/v1/steering.
  • User-visible effect: none. The steering status header has rendered its empty state for all users since 2026-07-12; this only stops the request and the Sentry noise behind it.

Summary by CodeRabbit

  • Changes
    • Removed steering data from orchestration status, cloud reads, and synchronization flows.
    • Status information now focuses on subconscious tick and ingest health.
    • Synchronization documentation and available read endpoints now cover sessions and messages, alongside related state and world-diff data.

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
@coderabbitai

coderabbitai Bot commented Jul 31, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: c1626246-0dd5-4a3a-a97a-6326c6184b51

📥 Commits

Reviewing files that changed from the base of the PR and between 963d589 and e3b5f30.

📒 Files selected for processing (1)
  • src/openhuman/orchestration/mod.rs

📝 Walkthrough

Walkthrough

The 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.

Changes

Steering read removal

Layer / File(s) Summary
Remove steering from hosted reads and sync
src/openhuman/orchestration/cloud.rs, src/openhuman/orchestration/sync.rs, src/openhuman/orchestration/mod.rs
The hosted read pass no longer declares or fetches steering. Sync no longer updates steering cache data or exposes cached_steering. Module documentation describes hosted reachability without a steering cache.
Reduce orchestration status
src/openhuman/orchestration/schemas.rs
OrchestrationStatus and its handler no longer define, read, or serialize steering data.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Possibly related issues

  • tinyhumansai/backend#1136 — Removes the client steering read that depended on the missing backend route.

Possibly related PRs

Suggested labels: rust-core, agent, bug

Suggested reviewers: yellowsnnowmann

Poem

A rabbit saw the steering route close,
No more failed reads disturb repose.
Sessions and messages hop along,
Health reports remain precise and strong.
The cache grows quiet in its den.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Linked Issues check ⚠️ Warning The pull request stops repeated steering requests but does not implement the linked issue's required 404 suppression and graceful error handling in rest.rs. Add steering-specific 404 suppression and a unit test in rest.rs, or update the linked issue to approve removal of the polling path as the replacement fix.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly identifies removal of the obsolete hosted-steering poll, which is the main change in the pull request.
Out of Scope Changes check ✅ Passed The changes remove steering polling and its unreachable plumbing, update related documentation, and remain within the stated orchestration cleanup scope.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot added the rust-core Core Rust runtime in src/: CLI, core_server, shared infrastructure. label Jul 31, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

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 win

Add 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 verifies OrchestrationStatus has no steering field.
  • src/openhuman/orchestration/schemas.rs#L789-L828: Add a status-handler test that verifies the RPC result omits steering.

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

📥 Commits

Reviewing files that changed from the base of the PR and between 068ae45 and 963d589.

📒 Files selected for processing (3)
  • src/openhuman/orchestration/cloud.rs
  • src/openhuman/orchestration/schemas.rs
  • src/openhuman/orchestration/sync.rs

coderabbitai[bot]
coderabbitai Bot previously approved these changes Jul 31, 2026
@greptile-apps

greptile-apps Bot commented Jul 31, 2026

Copy link
Copy Markdown

Greptile Summary

Removes the dead GET /orchestration/v1/steering call from the 20-second hosted read-sync loop. The backend route was deleted on 2026-07-12, causing ~3.68M Sentry 404 errors across two projects since the 0.58.18 rollout.

  • sync.rs: Deletes the fetch_steering call and STEERING_KEY kv write from sync_reads; removes the now-unused use serde_json::json import and the cached_steering public helper.
  • cloud.rs: Drops STEERING_PATH, the fetch_steering method on ReadPass, and updates doc comments accordingly.
  • schemas.rs: Removes the SteeringSummary struct, the steering field from OrchestrationStatus, and the cached_steering call from handle_status. The field was already skip_serializing_if = "Option::is_none" and was never populated in any shipped build, so the wire format is unchanged.
  • mod.rs: Updates the module-level doc comment to drop the stale "steering cache" reference.

Confidence Score: 5/5

Safe to merge — pure deletion of a dead network call with no behavioral impact on any shipped payload.

Every removed symbol (STEERING_PATH, fetch_steering, STEERING_KEY, cached_steering, SteeringSummary, and the steering field on OrchestrationStatus) is confirmed absent from the rest of the codebase via grep. The deleted steering field was skip_serializing_if = Option::is_none and was never populated since the backend route was removed, so the wire format shipped to callers is byte-identical before and after. The remaining sync loop compiles cleanly and all 110 existing orchestration lib tests pass unchanged.

Files Needing Attention: No files require special attention — the deletion is complete and consistent across all four changed files.

Important Files Changed

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)
Loading

Reviews (2): Last reviewed commit: "docs(orchestration): drop stale steering..." | Re-trigger Greptile

@@ -1,7 +1,7 @@
//! Hosted read-surface sync + reachability.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 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!

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

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
@coderabbitai coderabbitai Bot added agent Built-in agents, prompts, orchestration, and agent runtime in src/openhuman/agent/. bug labels Jul 31, 2026
@M3gA-Mind
M3gA-Mind merged commit 1f79cc4 into tinyhumansai:main Jul 31, 2026
22 of 25 checks passed
@github-project-automation github-project-automation Bot moved this from Todo to Done in Team Openhuman Jul 31, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

agent Built-in agents, prompts, orchestration, and agent runtime in src/openhuman/agent/. bug rust-core Core Rust runtime in src/: CLI, core_server, shared infrastructure.

Projects

Archived in project

Development

Successfully merging this pull request may close these issues.

orchestration steering read floods Sentry: GET /orchestration/v1/steering 404s every 20s (TAURI-RUST-PNK)

2 participants