Skip to content

docs(runner-ui): ADR-0006 accepted — PySide6 desktop cockpit, phased (#263) - #271

Merged
dngioidev merged 1 commit into
mainfrom
docs/263-adr-0006-accepted
Jul 24, 2026
Merged

docs(runner-ui): ADR-0006 accepted — PySide6 desktop cockpit, phased (#263)#271
dngioidev merged 1 commit into
mainfrom
docs/263-adr-0006-accepted

Conversation

@dngioidev

Copy link
Copy Markdown
Owner

Closes #263

Owner signed off epic #262 AC1 on 2026-07-24. This flips ADR-0006 from Proposed to Accepted, recording the owner's six FINAL decisions (the spike's localhost-web-app recommendation is overridden):

  1. UI -> native Python desktop app on PySide6 (Qt) — QtCharts (usage/cost) + embedded ConPTY terminal (pywinpty) in one native "cockpit" window; web app rejected.
  2. Charter EXPANDED to a Claude Code cockpit: runner fleet control + embedded terminal + live monitoring + Claude usage/pricing/tokens (grounded in local ~/.claude/projects/**/*.jsonl transcripts x published rates — no external API, no invented data).
  3. Stack -> CPython >= 3.12 + uv (committed uv.lock); deps PySide6 / pywinpty / psutil (+ stdlib subprocess); fastapi/uvicorn dropped. Python-on-Windows provisioning is a build prerequisite.
  4. Control -> shell-out only + WSL2 two-way interop + PAT-free read-only default (proven, unchanged); per-action UAC elevation (ShellExecute runas) for Windows NSSM mutations.
  5. Code home -> in-repo tools/runner-ui/.
  6. Phasing -> Wave 1 shell+fleet / Wave 2 usage-cost-token / Wave 3 terminal.

Preserved verbatim: the Context/grounded-facts and the AC2 cross-platform probe output. Security invariant intact: cockpit reads service state only, never ~/.forge/runner.env, never surfaces the PAT.

Also removes the throwaway tools/runner-ui/spike/ proof code (it had been carried onto main by an earlier squash) — spike code never merges; its output survives verbatim in the ADR Evidence section. Main now carries only the ADR .md.

Verification

Docs-only change (one ADR .md edited; throwaway spike proof deleted). No runtime surface to exercise. ASCII-safe (no smart quotes / em-dashes) so PowerShell 5.1 readers are fine. No tokens/PATs pasted anywhere — nothing for secret-scan to trip on. CI on self-hosted runners: actionlint / plugin-validate / test / secret-scan.

🤖 Generated with Claude Code

…263)

Owner signed off AC1 of epic #262 on 2026-07-24, overriding the spike's
localhost-web-app recommendation. ADR-0006 flips Proposed -> Accepted with
the owner's six decisions:

1. UI: native Python desktop app on PySide6 (Qt) — QtCharts + embedded
   ConPTY terminal in one native window; web app rejected.
2. Charter expanded to a Claude Code "cockpit": runner fleet control +
   embedded terminal + live monitoring + usage/pricing/tokens (grounded in
   local ~/.claude/projects/**/*.jsonl transcripts, no external API).
3. Stack: CPython >=3.12 + uv (committed uv.lock); deps PySide6/pywinpty/
   psutil (+ stdlib subprocess); fastapi/uvicorn dropped.
4. Control: shell-out only + WSL2 two-way interop + PAT-free read-only
   default (proven); per-action UAC elevation for Windows NSSM mutations.
5. Code home: in-repo tools/runner-ui/.
6. Phasing: Wave1 shell+fleet / Wave2 usage-cost-token / Wave3 terminal.

Context/grounded-facts and the verbatim AC2 cross-platform proof are kept.
The throwaway spike proof (tools/runner-ui/spike/) is removed — spike code
never merges; its output survives verbatim in the ADR Evidence section.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SATRHKa6mDHDuirhP6QuwL
@dngioidev
dngioidev merged commit 3ecf647 into main Jul 24, 2026
5 checks passed
@dngioidev
dngioidev deleted the docs/263-adr-0006-accepted branch July 24, 2026 13:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Runner UI — spike: UI approach, Python stack, cross-platform control, code home (ADR)

1 participant