flower
/
All briefs
complete draft note flower

Let's add an auto-dispatch toggle to the brief rows on /briefs for bri

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.

#116 done fresh flower · flower/230-auto-dispatch-toggle
agent: claude
You are being dispatched from flower Brief #230: Let's add an auto-dispatch toggle to the brief rows on /briefs for bri

Recall pointer:
- Use recall_brief with id 230 for the full folder if you need provenance.

Target:
- project: flower (/Users/mikeferrara/Documents/code/flower)
- branch: flower/230-auto-dispatch-toggle
- worktree: not specified
- kind: fresh

Current brief spec:
# Auto-dispatch toggle on /briefs list rows

## Problem / operator intent (2026-07-04)
The `auto_dispatch_on_planned` flag is today only toggleable from a brief's **detail** view. The operator wants to flip it **inline on the `/briefs` list rows** for planned briefs — flipping the switch where appropriate without opening each brief's detail.

## Scope
- Add an **auto-dispatch toggle** to each brief **row** on the `/briefs` list (the Briefs index Livewire component + its row partial), shown for **planned** briefs.
- The toggle reads + writes `briefs.auto_dispatch_on_planned`, **mirroring the existing detail-view control** — reuse the SAME service/action + guards the detail toggle calls (do NOT duplicate the flip logic). Flipping ON a planned + dispatchable brief must follow the SAME path as the detail toggle (enqueue the `auto_dispatch` daemon signal; the `flower:reconcile-auto-dispatch` sweep backstops), so behavior is identical regardless of surface.
- Inline/optimistic Livewire update; reuse the existing bloom toggle/switch component; respect the acting actor.

## Design note (sensible default — flag if you disagree)
- **Which rows show it:** show on **planned** briefs. The flag is `auto_dispatch_on_planned`, so it's meaningful for any planned brief — a planned-but-blocked brief can carry the flag; it simply won't fire until unblocked (existing signal guards handle that). Non-planned briefs (idea/refining/…) don't show the toggle.
- The detail-view toggle stays as-is; this is an additional surface over the same flag.

## Acceptance
- `/briefs` rows for planned briefs show a working auto-dispatch toggle reflecting `auto_dispatch_on_planned`; flipping it persists and behaves identically to the detail toggle (incl. enqueuing the signal when appropriate).
- No logic duplication (shared service/action path). `php artisan test` green + `./vendor/bin/pint`. `Brief: #230` trailer. Worktree-pinned; never edit MAIN.

## Provenance
Operator note 2026-07-04. (Once shipped, the operator can flip auto-dispatch on the freshly-planned #226/#170/#228 straight from the list.)

**Disposition:** `planned` — small, mechanical UI; no design-loop. Orchestrator owns dispatch.

Recent/key trace events:
[1] participant_joined operator:mike: (no body)
[2] note_added operator:mike: Let's add an auto-dispatch toggle to the brief rows on /briefs for briefs that are planned/dispatchable so I can just flip that switch where appropriate without having to open each briefs detail view to do so
[3] status_change operator:mike: (no body)
[4] participant_joined flower-refine: (no body)
[5] spec_snapshot flower-refine: Let's add an auto-dispatch toggle to the brief rows on /briefs for briefs that are planned/dispatchable so I can just flip that switch where appropriate without having to open each briefs detail view to do so
[6] refinement flower-refine: # Auto-dispatch toggle on /briefs list rows

## Problem / operator intent (2026-07-04)
The `auto_dispatch_on_planned` flag is today only toggleable from a brief's **detail** view. The operator wants to flip it **inline on the `/briefs` list rows** for planned briefs — flipping the switch where appropriate without opening each brief's detail.

## Scope
- Add an **auto-dispatch toggle** to each brief **row** on the `/briefs` list (the Briefs index Livewire component + its row partial), shown for **planned** briefs.
- The toggle reads + writes `briefs.auto_dispatch_on_planned`, **mirroring the existing detail-view control** — reuse the SAME service/action + guards the detail toggle calls (do NOT duplicate the flip logic). Flipping ON a planned + dispatchable brief must follow the SAME path as the detail toggle (enqueue the `auto_dispatch` daemon signal; the `flower:reconcile-auto-dispatch` sweep backstops), so behavior is identical regardless of surface.
- Inline/optimistic Livewire update; reuse the existing bloom toggle/switch component; respect the acting actor.

## Design note (sensible default — flag if you disagree)
- **Which rows show it:** show on **planned** briefs. The flag is `auto_dispatch_on_planned`, so it's meaningful for any planned brief — a planned-but-blocked brief can carry the flag; it simply won't fire until unblocked (existing signal guards handle that). Non-planned briefs (idea/refining/…) don't show the toggle.
- The detail-view toggle stays as-is; this is an additional surface over the same flag.

## Acceptance
- `/briefs` rows for planned briefs show a working auto-dispatch toggle reflecting `auto_dispatch_on_planned`; flipping it persists and behaves identically to the detail toggle (incl. enqueuing the signal when appropriate).
- No logic duplication (shared service/action path). `php artisan test` green + `./vendor/bin/pint`. `Brief: #230` trailer. Worktree-pinned; never edit MAIN.

## Provenance
Operator note 2026-07-04. (Once shipped, the operator can flip auto-dispatch on the freshly-planned #226/#170/#228 straight from the list.)

**Disposition:** `planned` — small, mechanical UI; no design-loop. Orchestrator owns dispatch.
[7] status_change flower-refine: (no body)

Recommended linked context:
{
    "todos": [],
    "scratchpads": []
}

Execution notes:
- Treat the brief as the source of truth.
- Keep work scoped to this dispatch request.
- Use brief_append / brief_update_status when reporting material progress; as your final dispatched-worker step, call brief_dispatch_complete with dispatch_request_id (or brief_id) and actor_ref.
- Codex workers should verify mutating Flower tools with tool_search query `brief_append brief_dispatch_complete flower_feedback` (limit 20) when tool availability is in doubt; report raw SEE/LOAD vs NOT visible instead of silently using local fallbacks.
- Add a git commit trailer `Brief: #230` to every commit for this brief so flower can exact-link commits back to the brief.

provenance · append-only

Trace

live
or paste a screenshot uploading…
  1. link added 22h ago
    agent · system:commit-trailer
  2. participant joined 22h ago
    system · system:commit-trailer
  3. merged 22h ago

    Merged flower/230-auto-dispatch-toggle to master by flower-orchestrator (daemon 40). Combined post-merge suite green: 1180 tests / 1178 passed / 2 skipped / 0 failures. pint clean.

    agent · flower-orchestrator
  4. status change 23h ago
    agent · flower-230-worker
  5. dispatched 23h ago

    Dispatch request #116 marked done.

    agent · flower-230-worker
  6. note added 23h ago

    Built on branch flower/230-auto-dispatch-toggle (worktree wt2), commit 97de7ab. What landed: - AutoDispatchService::toggleFlag(Brief): bool — extracted the single flip path; Show::toggleAutoDispatch now delegates to it so the detail-view control and the new list-row toggle share one source of truth (no duplicated flip logic). It intentionally does NOT enqueue a signal directly — same as the detail toggle — so the status-transition path + flower:reconcile-auto-dispatch sweep backfill a flag flipped after planned, identically across surfaces. - Index::toggleAutoDispatch($briefId) reuses that shared path (mirrors the existing dispatchInline row action). relationMeta now exposes is_planned; the row gates the toggle on planned (incl. blocked/approval-gated planned briefs — signal guards hold it), not on is_dispatchable. - resources/views/livewire/briefs/index.blade.php: bloom x-ui.toggle in the row action bar, server-rendered state (wire:click re-render flips it), title-case "Auto-dispatch" label to avoid colliding with the lowercase badge token. Tests/lint: 2 new IndexTest cases (flips flag both ways via the shared service; renders only on planned rows). Full suite MEILISEARCH_KEY=LARAVEL-HERD ~/bin/php artisan test → 1148 tests, 1146 passed, 2 skipped, 0 failures. pint clean. Built assets are gitignored (/public/build) + only pre-existing Tailwind classes used, so no asset commit needed. Did NOT merge — orchestrator owns the merge to master.

    agent · flower-230-worker
  7. participant joined 23h ago
    system · flower-230-worker
  8. dispatched 23h ago

    Dispatch request #116 queued for flower.

    agent · flower-orchestrator
  9. status change 23h ago
    agent · flower-orchestrator
  10. participant joined 23h ago
    system · flower-orchestrator
  11. status change 1d ago
    agent · flower-refine
  12. refinement 1d ago

    # Auto-dispatch toggle on /briefs list rows ## Problem / operator intent (2026-07-04) The `auto_dispatch_on_planned` flag is today only toggleable from a brief's **detail** view. The operator wants to flip it **inline on the `/briefs` list rows** for planned briefs — flipping the switch where appropriate without opening each brief's detail. ## Scope - Add an **auto-dispatch toggle** to each brief **row** on the `/briefs` list (the Briefs index Livewire component + its row partial), shown for **planned** briefs. - The toggle reads + writes `briefs.auto_dispatch_on_planned`, **mirroring the existing detail-view control** — reuse the SAME service/action + guards the detail toggle calls (do NOT duplicate the flip logic). Flipping ON a planned + dispatchable brief must follow the SAME path as the detail toggle (enqueue the `auto_dispatch` daemon signal; the `flower:reconcile-auto-dispatch` sweep backstops), so behavior is identical regardless of surface. - Inline/optimistic Livewire update; reuse the existing bloom toggle/switch component; respect the acting actor. ## Design note (sensible default — flag if you disagree) - **Which rows show it:** show on **planned** briefs. The flag is `auto_dispatch_on_planned`, so it's meaningful for any planned brief — a planned-but-blocked brief can carry the flag; it simply won't fire until unblocked (existing signal guards handle that). Non-planned briefs (idea/refining/…) don't show the toggle. - The detail-view toggle stays as-is; this is an additional surface over the same flag. ## Acceptance - `/briefs` rows for planned briefs show a working auto-dispatch toggle reflecting `auto_dispatch_on_planned`; flipping it persists and behaves identically to the detail toggle (incl. enqueuing the signal when appropriate). - No logic duplication (shared service/action path). `php artisan test` green + `./vendor/bin/pint`. `Brief: #230` trailer. Worktree-pinned; never edit MAIN. ## Provenance Operator note 2026-07-04. (Once shipped, the operator can flip auto-dispatch on the freshly-planned #226/#170/#228 straight from the list.) **Disposition:** `planned` — small, mechanical UI; no design-loop. Orchestrator owns dispatch.

    agent · flower-refine
  13. spec snapshot 1d ago

    Let's add an auto-dispatch toggle to the brief rows on /briefs for briefs that are planned/dispatchable so I can just flip that switch where appropriate without having to open each briefs detail view to do so

    system · flower-refine
  14. participant joined 1d ago
    system · flower-refine
  15. status change 1d ago
    agent · operator:mike
  16. note added 1d ago

    Let's add an auto-dispatch toggle to the brief rows on /briefs for briefs that are planned/dispatchable so I can just flip that switch where appropriate without having to open each briefs detail view to do so

    operator · operator:mike
  17. participant joined 1d ago
    system · operator:mike

epic · dependencies

Relationships

epic parent

depends on

No dependencies — dispatchable once planned.

agents · waves

Participants

  • operator:mike participant · active
  • flower-refine participant · active
  • flower-orchestrator participant · active
  • flower-230-worker participant · active
  • system:commit-trailer participant · active

trace · graph

Links

  • Commit #4028 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.