Skip to content

[Bug]: OMP 18.5 startup still times out in 1.4.219 before managed idle title is published #25052

Open

Description

@nnnnoel

Summary

On macOS arm64 with Orca 1.4.219 and OMP 18.5.0, orca orchestration worker-start --agent omp can still fail at agent_readiness while the OMP composer is visibly idle. The initial task is never delivered.

Related history: #24068 (closed), #24295 (merged). #24196 is an open related status/readiness change. This report isolates the managed titlebar extension's initial idle publication and does not propose treating a completed turn as process exit or relaxing readiness gates.

Environment

  • Orca 1.4.219, installed build commit d3e592365ef90c668a301c631ec7bbd397b850a4
  • OMP 18.5.0, macOS arm64
  • Fresh existing Git worktree, project-configured OMP model/thinking unchanged

Reproduction

  1. Use an existing worktree and its normal OMP project configuration.
  2. Run orca orchestration worker-start --task <task-id> --worktree <exact-selector> --agent omp --json.
  3. OMP initializes and displays its input composer. No initial user turn has run yet.
  4. Orca waits for tui-idle and eventually returns failedStage: agent_readiness, lastError: timeout without delivering the task.

The terminal-create/attach path also reproduced the failure. A 60-second wait and a 120-second wait both failed. A real startup probe confirmed ctx.agent.kind === 'main', ctx.hasUI === true, and ctx.isIdle() === true.

Cause and narrow local mitigation

The generated orca-titlebar-spinner.ts handler currently does this on session_start:

on('session_start', async () => {
  clearOwnedTimers()
  resetPromptState()
})

It never paints the existing rest title (π - …). The same extension paints that title through stopAnimation(ctx) only after turn settlement/shutdown. Orca's strong idle-title consumer recognizes that rest marker, but the fresh OMP default title does not satisfy the installed readiness path. Waiting longer cannot create the missing initial transition.

The local mitigation preserves all existing turn/completion handling and reports only genuine root/UI idle startup:

on('session_start', async (_event, ctx) => {
  if (ctx.hasUI === false || ctx.agent?.kind === 'sub') return
  clearOwnedTimers()
  resetPromptState()
  if (ctx.isIdle()) stopAnimation(ctx)
})

After this change, a new supervised worker reached ready / input_accepted in 6.36 seconds and executed real commands in the assigned worktree. No timeout, permission, model/thinking, or readiness safety gate was changed. Boundary checks confirmed no startup idle-title paint for a busy main session, an RPC/no-UI session, or a subagent.

A session_start status-hook-only change was tested and reverted: the Pi-compatible event normalizer intentionally does not create an activity/completion status row for that event. The retained mitigation is the title lifecycle change only.

Expected behavior

A UI-bearing main OMP session that is genuinely idle should publish readiness at startup, before a first task needs to be delivered. Busy/reloaded sessions and nested/RPC sessions must not create false readiness or completion signals.

The local extension is temporarily user-owned to prevent regenerated installation overwriting the fix. An upstream change is needed so users can return to managed updates.

Activity

  1. nnnnoel commented on Oct 4, 2026

    @nnnnoel
    Author

    Fix PR: #25145

    The generator now publishes its existing idle/rest title only for an affirmatively idle main UI session at startup; no-UI/subagent startup is excluded. Two-file change, 88 targeted tests passed, node typecheck and changed-file lint passed. Actual isolated OMP18.5 startup with generated before/after snapshots logged main/hasUI/idle=true in both cases, no rest title before vs π - omp-startup-idle-title after. Independent source review found no actionable correctness defect in this producer fix.

    An additional observed submission boundary is deliberately not claimed fixed: a later supervised review worker returned ready/input_accepted but retained the task as a collapsed composer draft; one explicit Enter submitted it and started work. Exact published OMP18.5 source has key/submit handlers and composer startup before session_start, but no paste/Enter timing trace was captured to establish the cause. The PR documents that gap, rather than equating accepted input with an observed first turn. The existing installed temporary workaround remains separate from the upstream source change.

  2. nnnnoel commented on Oct 18, 2026

    @nnnnoel
    Author

    @nwparker Could you take a look at this when you have a moment? OMP workers still fail at agent_readiness while the composer is idle, so the initial task is never delivered. The proposed fix is in #25145 (open, mergeable, checks passing, no review yet). Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions