Skip to content

[Windows 11] Post-0.7.1 follow-up: in-app update daemon restart loop, stale GOA session check, and blank Chat view on agent switch #49

Closed

Description

@sicknewbie

Context

Following up on the 0.7.1 release notes ("Not verified on Windows, where all three were reported, nor with a real OpenCode 1.18"), here is the verification report from Windows 11 with OpenCode 1.18.35.

We encountered three interconnected issues during and after the update:


Issue 1: Updater leaves previous version running, causing daemon restart ping-pong (0.7.0 <-> 0.7.1)

Symptoms

Immediately after accepting the in-app update from 0.7.0 to 0.7.1, the UI cycled indefinitely between:

  • "Connecting to this PC: Restarting the daemon (0.7.0 -> 0.7.1)..."
  • "Disconnected from this PC. Its sessions keep running; connecting again in 8s..."

Root Cause

The Windows updater extracted v0.7.1 and launched it, but the existing v0.7.0 client instances (enowX.exe) were not terminated and remained in memory (two zombie processes found). Both versions competed over ~/.enowx-app/enowxd.sock:

  • The 0.7.0 client saw a 0.7.1 daemon and downgraded/restarted it to 0.7.0.
  • The 0.7.1 client saw a 0.7.0 daemon and upgraded/restarted it back to 0.7.1.

Log Evidence (enowxd.log)

2026-11-06T13:22:43+07:00 daemon.start version=0.7.1 pid=46476
2026-11-06T13:23:15+07:00 daemon.start version=0.7.0 pid=10400
2026-11-06T13:23:31+07:00 daemon.start version=0.7.1 pid=15528
2026-11-06T13:24:15+07:00 daemon.start version=0.7.0 pid=48244

Mitigation: Required manual taskkill /f /im enowX.exe /im enowx-daemon.exe before v0.7.1 could connect stably.


Issue 2: session create rejects new GOA if an exited session still has goa: true

Symptoms

When attempting to start GOD of Agents afresh via the modal ("Start GOD of Agents" -> OpenCode -> Start), the daemon threw:
session create: goa: GOD of Agents already runs on this host: session <old-id>

Root Cause

In ~/.enowx-app/sessions.json, a previous session from the day before was marked "goa": true with "exited": true. The daemon enforces single-GOA-per-host by checking the existence of goa: true, but does not verify whether that session has already exited (!session.Exited()).

Mitigation: The dead session had to be manually closed via enowx-app close <old-id> --yes.


Issue 3: Switching GOA from Claude to OpenCode leaves view trapped in blank Chat mode

Symptoms

After switching GOA to OpenCode, opening the GOD of Agents page showed a completely black/blank terminal area. Normal worker sessions (opened from the side panel) rendered their terminals correctly, but the GOA tab remained black.

Root Cause

  1. When GOA previously ran on Claude Code, the session view was set to Chat. This persisted in ~/.enowx-app/app.json:
    "chats": { "<goa-session-id>": true }
  2. When switching the session agent to OpenCode (goa switch --agent opencode), OpenCode does not have a native Chat view (it is terminal-only).
  3. The UI correctly hid the [Chat | Terminal] toggle button from the header because OpenCode lacks chat capability.
  4. However, the view renderer still evaluated chats[sessionId] === true and attempted to render the Chat view component instead of falling back to Terminal.
  5. The user was left trapped on a black screen with no visible UI toggle to switch back.

Mitigation: Pressing Ctrl+K and running "Show the terminal" called showView(Terminal), which cleared the chats entry in app.json and immediately restored the OpenCode TUI.


Suggested Fixes

  1. Updater process cleanup (Windows): Ensure the updater aggressively terminates all running enowX.exe processes before launching the new version, preventing socket conflicts.
  2. GOA uniqueness check: In session.create, ignore or auto-prune sessions where exited === true when enforcing single-GOA constraints.
  3. View capability fallback: When rendering a session, if chats[id] === true but !agent.hasChat, automatically reset the view to Terminal rather than rendering an empty chat component.
  4. Switch cleanup: In goa.switch, clear capability-specific view states (like chats) if the target agent does not support them.

Environment

  • enowX: 0.7.0 -> 0.7.1
  • OS: Windows 11 Pro (amd64)
  • Agent tested: OpenCode 1.18.35

Activity

  1. sicknewbie commented on Nov 6, 2026

    @sicknewbie
    Author

    Follow-up: OpenCode as GOA on Windows fails to receive worker completion reports & causes stall warning flood

    During further testing of OpenCode 1.18.35 running as GOA on Windows 11 (tested with wz/deepseek-v4.1-flash), we identified an auto-wake/injection failure and a cascading stall spam issue:


    1. Worker completion reports are trapped in goa-tell.json (OpenCode never wakes up)

    Observed Behavior

    1. OpenCode GOA delegated task tf0604f1a to worker session d1c3fbb64d3b and stated: "Saya kabari begitu selesai" (I'll update you once finished).
    2. The worker completed its work and invoked:
      "$ENOWX_BIN" goa report --outcome done "Perubahan rasio thumbnail kamera..."
      The daemon accepted the report with Done..
    3. The report was correctly appended to ~/.enowx-app/goa-tell.json.
    4. However, OpenCode GOA stayed completely idle at its input prompt and never woke up to inform the user.

    Root Cause

    • Unlike Claude Code which has asyncRewake hooks, OpenCode relies on daemon/goa_inject.go typing into an idle composer when sure it is empty.
    • On Windows, OpenCode renders a full-screen TUI (alternate screen buffer, input border box, and footer status bar Goa · wz/deepseek-v4.1-flash).
    • The daemon's screen scraper on Windows cannot reliably distinguish OpenCode's empty input placeholder from a draft, so it treats it as an active draft.
    • As documented in goa.md ("A prompt the screen can't be sure of counts as a draft, so the line goes on waiting"), the report stays trapped in goa-tell.json.
    • The notification only flushes into OpenCode if the user manually presses Enter or sends a new prompt.

    2. Cascading Bug: Watchdog stall spam floods goa-tell.json

    Because OpenCode never receives the report, the task is never settled (goa task <id> --status done).

    The stall watchdog then observes an unsettled task on an idle session and repeatedly logs stall warnings every few minutes.
    In our ~/.enowx-app/goa-tell.json, 156 out of 174 entries were identical duplicate stall warnings for the same task (t64ea68d8):

    {"text":"[enowX GOA] Task t64ea68d8 \"Fitur Switch Dark/Light Mode Admin CCTVKU\" (session 5d866d3e5f17) isn't moving: idle: its agent isn't working on it, for 22h24m8s..."}

    Because goa-tell.json caps at 200 lines, this flood risks dropping or crowding out actual task reports.


    Suggested Fixes

    1. OpenCode TUI composer detection on Windows: Tailor the empty-prompt regex/heuristic for OpenCode's Windows TUI layout so the daemon can inject lines into stdin when idle. Alternatively, leverage the connected enowX MCP server (⊙ 1 MCP /status already runs in OpenCode) to push turn completion events directly.
    2. Deduplicate stall notifications: Avoid appending repeated stall warnings for the same task into goa-tell.json if a turn report for that task is already pending.

    Testing Request for Non-Claude Models

    Could the team please verify and test GOA with models below Claude (e.g. DeepSeek V3/V4, Gemini 2.5/3.8 Flash, GLM, GPT-4o-mini) running under OpenCode? Many workflows rely on lightweight/cost-effective models for GOA delegation and coordination; ensuring that autonomous worker-to-GOA handoffs work cleanly outside Claude Code on Windows would make GOA truly reliable across all supported providers.

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

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions