Skip to content

feat: productionization stack + host path/auth gates - #1

Open
jtmilan wants to merge 3 commits into
mainfrom
feat/productionization-host-gates
Open

feat: productionization stack + host path/auth gates#1
jtmilan wants to merge 3 commits into
mainfrom
feat/productionization-host-gates

Conversation

@jtmilan

@jtmilan jtmilan commented Aug 12, 2026

Copy link
Copy Markdown
Owner

Why

Ships the 2026-08-06 productionization work that was sitting uncommitted on main, then closes the blockers a 5-lane polyglot-broker review found before this could go public.

Repo path reviewed: ~/Personal/agent-commandcenter (the Grok workspace folder is not this git tree).

Review lanes (/polyglot-broker)

pane role tag verdict
rust-host reviewer rust BLOCK → path/root gates fixed
ts-ui reviewer typescript BLOCK → demo/wizard/confirm/wrap wired
arch reviewer architecture BLOCK → docs made honest; persona no longer mints bearer
sec reviewer security BLOCK → path, spawn, entitlements defaults
qa tester testing BLOCK → unskipped fail-closed canUse

Gated/skipped panes: none (no db-migration / coordinator / bash harness).

What landed

  • Tauri PTY host: registered-root allowlist, lexical .. collapse, refuse rm -rf of the workspace root, harness basename allowlist, unique job ids, RunEvent::Exit kill-all
  • Auth/billing: no hardcoded preview secret, no client HMAC, persona is view-only, unsigned/missing cache is free not Pro
  • UI: lazy xterm TerminalView (SSR-safe), settings store, wizard Browse toasts, demo fleet confirm + killAllJobs + MCP fields
  • Tests: vitest 126 passed, 4 new Rust path tests, playwright smoke listed
  • Hygiene: .envrc, src-tauri/target/, clipboard dumps not committed

Gates run

command result
npm run typecheck pass
npm run lint 0 errors (pre-existing warnings)
npm test 126 passed
cd src-tauri && cargo test --lib 4 passed
npm run build:web pass (no db:migrate)

Still follow-up (not this PR)

  • Rotate the leaked GROK_AUTH_CLIENT_SECRET / preview client in the broker — value is still in git history on main
  • Migrations 0002–0007 are schema only; packaged Tauri does not persist fleet state yet
  • Real MCP server-def resolution (host writes intent, does not clobber .mcp.json)
  • Process-group kill for harness grandchildren
  • e2e smoke needs npx playwright install chromium locally
  • Admin tab is still a persona-gated shell; API authz must come from ade-api /me

Do not merge if

You have not rotated the broker preview secret. The constant is gone from this tree; history is not.

Lands the 2026-08-06 productionization work (PTY host, tests, fail-closed
entitlements, PGlite dataDir, settings) plus a second-pass PR gate:

- Register host-owned workspace roots; reject spawn/destroy outside them
- Collapse `..` before path prefix checks; refuse rm -rf of the repo root
- Persona no longer mints an API bearer; unsigned cache falls back to free
- Ignore .envrc, Tauri target, and clipboard dumps
- Unskip the fail-closed canUse pin

Rotate the leaked GROK preview client secret in the broker — it remains
in git history on main.
Adversarial pass after rebasing onto main's desktop-dist/preflight:

- Do not default Authorization to Bearer operator
- Demo fleet worktrees are in-repo children, not /tmp
- Drop client HMAC from .env.example and protocol docs
- Allow packaged webview to reach local ade-api in CSP
@jtmilan

jtmilan commented Aug 12, 2026

Copy link
Copy Markdown
Owner Author

Rebased onto origin/main (077f938) and ran an adversarial reviewer.

Conflict resolution: kept main's preflight + dist-desktop packaging; kept this PR's CSP, tests, and host path/auth gates. build-desktop-dist.mjs now calls build:web so desktop builds do not run db:migrate.

Reviewer blockers fixed in the follow-up commit:

  • getBearer() no longer defaults to operator
  • Demo /tmp/rebrand-lane* worktrees moved under .agent-teams-worktrees/
  • Entitlements docs/.env.example no longer teach client HMAC
  • CSP connect-src includes local ade-api (:8787)

Still follow-up (not blocking this rebase): real Claude .mcp.json bind, live pane-count canUse, Admin gated on session role, Settings account bound to entitlements.

Gates after rebase: typecheck pass, npm test 127 passed, cargo test --lib 4 passed.

@jtmilan
jtmilan force-pushed the feat/productionization-host-gates branch from 91be02b to a59675c Compare August 12, 2026 20:54
@cursor

cursor Bot commented Aug 12, 2026

Copy link
Copy Markdown

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

Returning a fresh object from getServerSnapshot trips React 19's
infinite-loop guard on every SSR/hydration read.
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.

2 participants