Skip to content

tui-capture: --tui-config overlay is shadowed by same-ID global plugin; add isolated config mode #34712

Closed

Description

@marcusquinn

What

opencode-test-helper.sh tui-capture --tui-config <overlay> cannot verify a worktree copy of the aidevops V1 TUI plugin. OpenCode merges OPENCODE_TUI_CONFIG with the global ~/.config/opencode/tui.json. Both entries register plugin ID aidevops-tui, so the deployed copy wins and the capture renders the old sidebar without any error.

Evidence (GH#34684 / PR #34689)

  • With an overlay listing only the worktree v1-tui/tui.tsx, the capture rendered the deployed footer and MCP section but not the new Prompts section: --expect Prompts failed.
  • Rerunning with env XDG_CONFIG_HOME=<temp dir containing opencode/tui.json> rendered ▼ Prompts and passed.

Files

  • .agents/scripts/opencode-tui-capture.py:93-94 sets OPENCODE_TUI_CONFIG. Option A: add --isolated-config, which writes the overlay as <temp>/opencode/tui.json and sets XDG_CONFIG_HOME for the child only.
  • .agents/tools/terminal/terminal-title.md:88 (Live-verifying TUI plugin changes) should state that same-ID plugins in the global config shadow overlay entries, and document the isolated route.
  • Also note there: project data DBs can be very large (one was 84 GB), and the read-only snapshot step then exceeds a 120 s budget. Prefer a small project data dir via --cwd/--data-dir.

Verification

opencode-test-helper.sh tui-capture with the isolated option, run against a worktree plugin whose visible text differs from the deployed copy, passes --expect <new text>. The existing overlay mode is unchanged.


aidevops.sh v3.39.31 plugin for OpenCode v1.19.0 with claude-opus-5-5 spent 1h 43m and 135,996 tokens on this with the user in an interactive session.

Files Scope

  • .agents/scripts/opencode-tui-capture.py
  • .agents/scripts/opencode-test-helper.sh
  • .agents/tools/terminal/terminal-title.md

The shell helper forwards capture options unchanged; update its help for discoverability. Verify with Python syntax/static checks, ShellCheck, and a bounded OpenCode 1.19.0 capture using a small temporary session database and an absolute worktree plugin path. Preserve the existing overlay mode.

Activity

  1. Repository owner locked as resolved and limited conversation to collaborators on Oct 14, 2026
  2. added
    bugSomething isn't working
    auto-dispatchEligible for automated worker dispatch
    tier:standardStandard workload: implementation, bug fixes, refactors
    on Oct 14, 2026
  3. alex-solovyev commented on Oct 14, 2026

    @alex-solovyev
    Collaborator

    DISPATCH_CLAIM nonce=daf9696ca4d134c323649da2708bcb63 runner=alex-solovyev ts=2026-10-14T23:32:56Z max_age_s=1800 version=3.39.31 opencode_version=1.18.34 lease_token=daf9696ca4d134c323649da2708bcb63 device=device-1783824075-2103358-6141 session=issue-34712 phase=prelaunch expires_at=1792020901


    aidevops.sh v3.39.31 plugin for OpenCode v1.18.34

  4. vladimirdulov commented on Oct 14, 2026

    @vladimirdulov
    Collaborator

    DISPATCH_CLAIM nonce=9216b61297c2118e2fc6180c1edba37d runner=vladimirdulov ts=2026-10-14T23:37:40Z max_age_s=1800 version=3.39.31 opencode_version=1.19.0 lease_token=9216b61297c2118e2fc6180c1edba37d device=device-1791387943-2519751-22989 session=issue-34712 phase=prelaunch expires_at=1792021180

  5. vladimirdulov commented on Oct 14, 2026

    @vladimirdulov
    Collaborator

    DISPATCH_LEASE phase=prelaunch lease_token=9216b61297c2118e2fc6180c1edba37d device=device-1791387943-2519751-22989 session=issue-34712 expires_at=1792021522 ts=2026-10-14T23:37:52Z attempt_id=attempt:acdc7cbd-1dac-4c87-a6cb-54b444949dbb

  6. added
    status:queuedWorker dispatched, not yet started
    and removed
    status:queuedWorker dispatched, not yet started
    on Oct 14, 2026
  7. vladimirdulov commented on Oct 14, 2026

    @vladimirdulov
    Collaborator

    Dispatching worker (deterministic).

  8. vladimirdulov commented on Oct 14, 2026

    @vladimirdulov
    Collaborator

    DISPATCH_LEASE phase=ready lease_token=9216b61297c2118e2fc6180c1edba37d device=device-1791387943-2519751-22989 session=issue-34712 expires_at=1792028299 ts=2026-10-14T23:38:19Z attempt_id=attempt:acdc7cbd-1dac-4c87-a6cb-54b444949dbb


    aidevops.sh v3.39.31 automated scan.

  9. vladimirdulov commented on Oct 14, 2026

    @vladimirdulov
    Collaborator

    CLAIM_RELEASED reason=worker_complete runner=vladimirdulov ts=2026-10-14T23:47:15Z aidevops_version=3.39.31 opencode_version=1.15.10


    aidevops.sh v3.39.31 plugin for OpenCode v1.15.10

  10. vladimirdulov commented on Oct 14, 2026

    @vladimirdulov
    Collaborator

    DISPATCH_LEASE phase=terminal lease_token=9216b61297c2118e2fc6180c1edba37d device=device-1791387943-2519751-22989 session=issue-34712 expires_at=0 ts=2026-10-14T23:48:13Z attempt_id=attempt:acdc7cbd-1dac-4c87-a6cb-54b444949dbb


    aidevops.sh v3.39.31 automated scan.

  11. alex-solovyev commented on Oct 15, 2026

    @alex-solovyev
    Collaborator

    Summary

    Resolves #34712. Added opt-in child-only isolated TUI configuration so a global same-ID plugin cannot shadow a worktree plugin. Updated CLI help and documented isolation boundaries, absolute plugin paths and large SQLite snapshot budgets.

    Verification

    Exact head: 0d1391e88a1ab36ff8d61be77a46de1bc08a5d7d.

    Runtime-verified on OpenCode 1.19.0: controlled same-ID global plugin renders in normal overlay mode; isolated mode renders Prompts and AIDevOps from the actual worktree plugin; inherited overlay mode also passes. Missing-overlay isolation validation exits 2. Python/Bash syntax, ShellCheck, diff whitespace, pre-commit and push-time Bun typecheck passed. Temporary test DB/config only; no live global config/session data edited.

    Decisions

    Isolation is opt-in and child-only. Copied overlays require absolute plugin paths; project config and other inherited overrides remain active. No dependencies, release or publication changes.


    aidevops.sh v3.39.31 plugin for OpenCode v1.19.0 with gpt-6.1-sol spent 6m and 82,513 tokens on this as a headless worker.


    Merged via PR #34716 to main.
    Merged by deterministic merge pass (pulse-wrapper.sh).

  12. added
    solved:workerTask was solved by a headless worker
    and removed
    auto-dispatchEligible for automated worker dispatch
    on Oct 15, 2026
  13. Repository owner unlocked this conversation on Oct 15, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

bugSomething isn't workingorigin:interactiveCreated by interactive user sessionsolved:workerTask was solved by a headless workerstatus:doneTask is completetier:standardStandard workload: implementation, bug fixes, refactors

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions