Skip to content

[CI/CD] Smoke-test the packaged desktop launch, health, and native bridge - #251

Closed
fettpl wants to merge 1323 commits into
sybil-solutions:mainfrom
fettpl:p1/issue-232-desktop-package-smoke
Closed

[CI/CD] Smoke-test the packaged desktop launch, health, and native bridge#251
fettpl wants to merge 1323 commits into
sybil-solutions:mainfrom
fettpl:p1/issue-232-desktop-package-smoke

Conversation

@fettpl

@fettpl fettpl commented Jul 18, 2026

Copy link
Copy Markdown

Summary

  • Add a bounded production-bundle smoke test that launches the actual unpacked Electron app in isolated state.
  • Verify the embedded frontend health endpoint and packaged preload/native PTY bridge.
  • Fail closed on unsafe inherited process settings, bound diagnostics, and clean the complete process tree and temporary state on every path.
  • Install controller contracts on clean CI runners before the desktop smoke job and keep release publication dependent on that job.

Closes #232

Design

This branch is stacked on #244 and #248 and should merge after them. The smoke harness uses a scrubbed environment, isolated user data, one abortable lifecycle deadline, exact architecture checks, bounded redacted diagnostics, ownership-aware cleanup, and deadline-bounded preload readiness polling. The release workflow cannot publish until the packaged desktop smoke succeeds for the tested revision.

Validation

  • Exact reviewed head: 353b789ab5b8ba0e0bd53a821fc032aa61043bdf.
  • Independent P0/P1 review: approved with no blockers.
  • Desktop smoke unit suite: 47/47 passed.
  • Workflow-policy suite: 74/74 passed.
  • npm --prefix frontend run check:quality: passed.
  • npm run check: passed.
  • npm --prefix frontend run test: passed.
  • npm run test:integration: passed.
  • Clean npm --prefix frontend ci --legacy-peer-deps --install-links: passed and materialized local package dependencies inside the frontend package boundary.
  • npm --prefix frontend run desktop:smoke:pack: passed.
  • Three consecutive npm --prefix frontend run desktop:smoke launches passed with health=200 and nativePty=true.
  • npm --prefix frontend run desktop:dist: passed and produced DMG, ZIP, and unpacked app artifacts; signing was skipped because no valid signing identity was available.
  • The exact build was installed at /Applications/Local Studio.app; GET /api/desktop-health returned HTTP 200 with ok: true.
  • Normal pre-push frontend quality/build hook: passed.
  • Exact-head GitHub CI and Security runs are action_required with zero executable jobs, pending upstream workflow approval; no genuine CI failure is present.

UI changes

None. This adds packaging, CI, and launch-health coverage only.

Risks and rollout

0xSero and others added 30 commits July 8, 2026 11:10
…e guard

- navigate-to-session: the window.location.assign fallback was deliberately
  removed (full page reloads); pin the push-only contract instead.
- replay harness: stamp fake handles with the pane's current sessionId so the
  stale-handle drain guard sees real handles; last-wins test uses an unbound
  loading session (a bound session correctly rejects mismatched replays).
- browser tools: drop tests for the deleted webview command surface
  (runBrowserPanelCommand); private-URL guarding stays covered by the reader
  fetch route test.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…gation

Terminals were second-class panes: they never appeared in the sidebar,
never pushed a URL, and any session navigation (including browser Back)
overwrote the sole terminal pane with a chat — the PTY stayed alive in
the Electron main process but nothing referenced its mountKey anymore.

- Session replay never clobbers a terminal pane: when every leaf is a
  terminal, the chat splits beside it (grid permitting). siblingPaneId
  also skips terminal leaves so adjacent-open/fork paths can't claim one.
- Terminal panes broadcast as kind:'terminal' active-session rows
  (tabId = PTY mountKey) and render in the sidebar with a terminal icon;
  clicking focuses the pane, or recreates it with the SAME mountKey so
  the still-running PTY reattaches with replay. Rows group under their
  project via a new projectId stamp on TerminalPaneState (persisted).
- /agent?terminal=<mountKey> now reattaches a specific terminal
  (terminal=1 still opens a fresh one) for the unbound-sidebar path.
- Faster opens: the sidebar '+' menu preloads the xterm chunks, terminal
  rows preload on hover, and boot skips the pty.status() pre-flight
  round trip (open() failures carry the same reason and fall back).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Entering /agent blocked the sidebar AND any ?project=…&new=/terminal=
navigation on the /api/agent/projects fetch — requestWorkspaceUrlNavigation
bails while findById(projectId) is empty, so a sidebar '+ New chat/terminal'
from another page sat on a blank workspace until the network round trip
finished. Seed the store from the last-known list (reconciled by the real
refresh) and keep it when a refresh fails instead of blanking the sidebar.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
0xSero and others added 3 commits July 19, 2026 18:33
Brings the full 2026-07-19 line onto main: exact Codex composer/chat
design parity with themes and appearance controls, the model provider
hub (OAuth + API-key sign-in through pi), goals with the continuation
driver, scheduled automations with headless runs, subagent orchestration
with chips, the codex-clean navbar with profile footer and phone entry,
and the v2.1.0 release prep.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
rigs.ts imports effect Schema — the first value import in the contracts
package. Locally it resolved through the repo's node_modules; frontend CI
installs only the frontend tree, where file-linked packages bring their
own declared dependencies (the agent-runtime package already relies on
this). Declare effect so the production quality gate resolves it.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@fettpl
fettpl force-pushed the p1/issue-232-desktop-package-smoke branch from 76f25c3 to 0a521bf Compare July 20, 2026 08:59
0xSero and others added 21 commits July 23, 2026 00:10
…turn dispatch (sybil-solutions#261)

* feat(agent): add secure Litter bridge contract

* feat(agent): add secure Litter controller gateway

* fix(desktop): repair standalone dependency links

* fix(desktop): share the live projects registry

* feat(agent-runtime): export canonical litter sessions

* fix(desktop): restore agent controls and layout

* feat: refine agent drawers and profile controls

* feat: move profile pairing into settings

* feat(agent-runtime): add signed session discovery

* fix(agent-runtime): narrow snapshot capability claims

* fix(agent-runtime): bind litter mutation idempotency

* fix(agent-runtime): authenticate litter controller snapshots

* fix(agent-runtime): mark missing litter sections stale

* feat(agent-runtime): define litter turn acknowledgements

* feat(agent-runtime): persist litter mutation reservations

* feat(agent-runtime): expose prompt preflight controls

* feat(agent-runtime): dispatch signed litter prompts

* test(agent-runtime): cover litter ledger failures

* fix(agent-runtime): make litter turns crash durable

* feat(studio): improve model picks and agent sessions

* fix(usage): show proxied activity only

* feat(agent): refine goal composer

* feat(studio): refine model catalog and goal composer

* feat(desktop): copy KittyLitter pairing JSON

* fix(studio): align composer controls and catalog

* fix(settings): support controller pairing QR codes

* fix(desktop): copy pairing JSON through Electron

* fix(proxy): stop withholding streamed content for engine-parsed reasoning models

* fix(desktop): grant sanitized clipboard writes to the app main frame

* feat(settings): guide KittyLitter beta pairing

* fix(agent-runtime): harden litter turn recovery and release gates

* fix(agent-runtime): clarify reconcile conflicts and pin release gates

* ci(agent-runtime): link root modules for shared imports

* build(shared): declare effect dependency for contract package

* fix(desktop): tolerate cold-start pairing latency

* fix(desktop): retry cold-start pairing with effect schedule

* feat(settings): add pairing retry action

* fix(settings): keep primary link text visible

* feat(agent): make workbench Pi-native

* feat(agent): gate non-controller models

* feat(composer): chatgpt-style project drawer, drop tool-access toggle, responsive actions

* feat(ops): stage glm52 vision graft

* fix(composer): reset drawer goal state across session switches

* fix(agent): restore session switching

* fix(files): restore syntax highlighting
Restore cached Pi session titles during persisted workbench hydration and add regression coverage.
@fettpl
fettpl force-pushed the p1/issue-232-desktop-package-smoke branch from 0a521bf to 353b789 Compare July 23, 2026 10:17
@0xSero

0xSero commented Aug 4, 2026

Copy link
Copy Markdown
Collaborator

Closing as superseded. Current desktop-package CI already runs the packaged smoke surface before exact-SHA release; the latest main job passed.

@0xSero 0xSero closed this Aug 4, 2026
@fettpl
fettpl deleted the p1/issue-232-desktop-package-smoke branch August 7, 2026 18:01
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.

[CI/CD] Smoke-test the packaged desktop launch, health, and native bridge

5 participants