flower
/
All briefs
complete draft note flower

Wire "Confirm & Spawn" in /roster + remove blockActiveOperatorSessions() guard

canonical · plan

Spec

markdown

hand-off · dispatch

Dispatch

Auto-dispatch

when it reaches planned

Design-loop

design pass before build

This brief is complete — dispatch is closed.

provenance · append-only

Trace

live
or paste a screenshot uploading…
  1. link added 3d ago
    agent · system:commit-trailer
  2. participant joined 3d ago
    system · system:commit-trailer
  3. status change 3d ago
    agent · flower-orchestrator
  4. status change 3d ago
    agent · flower-orchestrator
  5. note added 3d ago

    ## Goal (operator-directed 2026-07-02) Make one-click daemon spawn actually work from /roster, and remove the active-operator-session block (operator: "no idea what that was ever supposed to stop/solve"). ## Part 1 — wire "Confirm & Spawn" in the roster UI The full live-spawn path ALREADY EXISTS and works: `Roster/Index::confirmSpawn()` → `SpawnDaemonBridge::spawn()` → `SoloClient::spawnAgent()` → `solo-cli spawn` (daemon starts on HOLD, self-registers via daemon_checkin). It's just NOT bound to any control — `resources/views/livewire/roster/index.blade.php` only wires `planSpawn` (Plan = render packet + pre-flight) + `toggleSpawn`. - Add a **"Confirm & Spawn"** control to the roster blade that calls the existing `confirmSpawn()`, shown AFTER a successful `planSpawn` (operator reviews the packet + pre-flight, then confirms). - Include a lightweight confirmation affordance (two-click confirm, or an "are you sure — this starts a live daemon" step) since it's a mutating action. - Surface `spawnResult` (success) + `spawnNotice` (blocked/error) in the view. - Keep the confirmSpawn() method + all remaining backend guards intact (explicit `confirmed:true`, name-collision, safety pre-flight, actor_ref, agent-tool resolution). ## Part 2 — remove blockActiveOperatorSessions() In `app/Services/Daemons/SpawnDaemonBridge.php`, remove the active-operator-session BLOCK: - Delete the `blockActiveOperatorSessions()` method + the blocker it appends (`"Active operator/manual Solo sessions are running in the target project."`) + the `if ($this->blockActiveOperatorSessions() && $activeOperatorProcesses !== [])` branch. - Remove the config key behind it (grep `blockActiveOperatorSessions` / `block_active_operator_sessions` in config/flower.php) and the `blocks_active_operator_sessions` field in the safety payload. - The `active_operator_processes` detection: if it ONLY fed the block, remove it; if it's surfaced purely informationally and harmless, it may remain non-blocking — but nothing should block a spawn on it anymore. - KEEP the other guards (name-collision, safety pre-flight, actor_ref, explicit confirmation) fully intact. ## Acceptance - /roster: after Plan, a "Confirm & Spawn" control fires `confirmSpawn()` → a live daemon spawns via the Solo bridge (faked in tests); result surfaced. Spawning into a project that has a live operator session is NO LONGER blocked. - `blockActiveOperatorSessions` + its blocker + config key + `blocks_active_operator_sessions` payload field removed; other guards still fire (name-collision, pre-flight). - Tests (sqlite, faked Solo seam): confirmSpawn spawns successfully; the operator-session block no longer fires; remaining guards still block appropriately; update/remove the old operator-session-block test. Suite green; pint. - `Brief:` trailer with this id. No Horizon reload (request-time + Livewire); config change → orchestrator runs config:clear on MAIN. ## Guardrails ⚠️ sqlite tests ONLY with a FAKED Solo seam — do NOT run a live solo-cli spawn from the worktree (it would start a real Solo process). Match the bloom design system for the button + confirmation. ## Provenance Operator-directed 2026-07-02. Backend spawn path shipped via #22 (bridge) / #34 (harness) / #18 (default destinations); this exposes the live-spawn control + drops the operator-session block. Unblocks spawning a refine daemon (#27) from /roster. Operator→daemon messaging remains separate (#61/#36).

    agent · flower-orchestrator
  6. participant joined 3d ago
    system · flower-orchestrator

epic · dependencies

Relationships

epic parent

depends on

No dependencies — dispatchable once planned.

agents · waves

Participants

  • flower-orchestrator participant · active
  • system:commit-trailer participant · active

trace · graph

Links

  • Commit #1588 execution

scope

Projects

  • flower · primary

dogfood · read-only

Agent’s-eye view

The literal recall_brief payload an agent gets — same service path as the MCP tool.