flower
/
All briefs
in progress note flower

Operator → orchestrator inbox: project-scoped, MCP-interactive, reassignable async notes

Dispatch

canonical · plan

Spec

markdown

hand-off · dispatch

Dispatch

Auto-dispatch

when it reaches planned

Design-loop

design pass before build

kind

No dispatch requests yet — dispatch above to generate a copy-paste packet.

provenance · append-only

Trace

live
or paste a screenshot uploading…
  1. link added 1h ago
    agent · flower-orchestrator
  2. link added 10h ago
    agent · flower-orchestrator
  3. link added 1d ago
    agent · flower-orchestrator
  4. link added 1d ago
    agent · flower-orchestrator
  5. link added 2d ago
    agent · flower-orchestrator
  6. link added 2d ago
    agent · flower-orchestrator
  7. link added 2d ago
    agent · flower-orchestrator
  8. comment 4d ago

    ## A3 DONE (design, proc 973) — inbox UI, branch `flower/inbox-ui` @ 79b0436, ready for merge Built the UI half on top of 981's merged A2 backend (`OperatorNote` + `OperatorInboxService` + note_* MCP tools). **Shipped:** - **New `/inbox` page** (`App\Livewire\Inbox\Index`): a **"note the orchestrator"** composer (body + target-project select; blank = unassigned), a **status filter ribbon** (open/acknowledged/handled/dismissed + live counts), a **project scope** filter, and the notes list. - **Per-note controls:** color-coded **status pill**, body, `created_by`/`handled_by`/when footer, a **status select** (advance lifecycle), a **reassign select** (→ another project), and a **conditional unassign button** (only when assigned). - **Reads** the `OperatorNote` model; **every mutation** (create/status/reassign/unassign) goes through **`OperatorInboxService`** so the UI shares the MCP write path's audit trail. Scoped view = the project's own notes **+ unassigned** (mirrors `OperatorInboxService::inbox`). - **Global affordances:** an **"Inbox"** nav item (manage group) + a header **"Note"** button (→ `#compose`). - Composer target-project **defaults to the current inbox scope** (`?project=…`). **Notes for merge:** - Reassign select uses the `$wire`-call-then-blank-`$el.value` pattern (returns to "reassign →" placeholder). Action ids are Blade literals so `int` hints are safe under `declare(strict_types=1)`; select-sourced values (status/projectRef) stay strings. - No new migration (A2's `operator_notes` already in the shared DB). CSS rebuilt locally (gitignored; MAIN rebuilds on deploy). **Verification:** 8 new tests (submit assigned/unassigned/blank, status advance + `handled_by` stamp on terminal, reassign→unassign, project-scope+unassigned visibility, status filter, composer default). Full suite **302 green, pint clean**. Verified live on flower-design.test: create → reassign(→flower) → handled (handled_by stamped) → unassign, with pills, counts, and select-reset all correct. Test note cleaned up (inbox left at 0). Standing by for **A5 (daemon roster UI)** — A4 backend is merged per the operator.

    agent · flower-other
  9. participant joined 4d ago
    system · flower-other
  10. participant joined 4d ago
    system · agent:flower-foundation-981
  11. status change 4d ago
    agent · flower-orchestrator
  12. comment 4d ago

    Build phases A2 (inbox backend + MCP) and A3 (inbox UI) — full decomposition lives in brief #11's build-decomposition note. A2 is a 'ready now' backend slice; A3 follows for design.

    agent · flower-orchestrator
  13. plan proposed 4d ago

    ## Spec: Operator → orchestrator inbox **Goal:** a lightweight, NON-interrupting async channel. The operator drops a note → it queues → the target project's orchestrator picks it up on its next loop cycle. Keeps "handle later" (inbox) separate from "interrupt now" (a direct message). Not feedback (bugs), not a brief (work items) — its own input type. ### Project-scoped / scopable (Mike) - Each note targets a **project** so it reaches the right project's orchestrator. - A note can be **reassigned to another project** or have its **project assignment removed** (unassigned) — for passing to another project, or when it was sent to the wrong one. Unassigned notes are visible to any orchestrator / the operator until claimed/assigned. ### MCP-interactive (Mike) - Agents interact via MCP: read the inbox, **set status** (e.g. open → acknowledged → handled / dismissed), **reassign** to another project, **unassign** (remove project). Plus operator-create from the UI. - Suggested tools: `recall_inbox(project?)` (read), `inbox_note(id)` (read); `note_create(project?, body)`, `note_update_status(id, status)`, `note_reassign(id, project)`, `note_unassign(id)` (write, actor_ref → audit). ### Data model - `operator_notes`: id, `project_id?` (nullable = unassigned), `body`, `status` (open|acknowledged|handled|dismissed), `created_by`, `handled_by?`, `meta`, timestamps. (Mirror the feedback table's shape/conventions.) ### UI (bloom) - A persistent "note the orchestrator" composer (global affordance) + a per-project inbox view; reassign/unassign controls; status pills. ### Mechanics - The orchestrator, now a looping daemon, drains its project's open inbox notes each cycle and acts (or escalates). This is one of the orchestrator's standing loop responsibilities (alongside the dispatch queue + roster check).

    agent · flower-orchestrator
  14. participant joined 4d ago
    system · flower-orchestrator
  15. note added 4d ago

    Mike's idea (2026-06-30): a NON-interrupting async channel so the operator can drop a note/message/issue for the orchestrator to handle later (vs interrupting with a direct message). Project-scoped so notes reach the right project's orchestrator.

    agent · operator:mike
  16. participant joined 4d ago
    system · operator:mike

epic · dependencies

Relationships

epic parent

depends on

No dependencies — dispatchable once planned.

agents · waves

Participants

  • flower-orchestrator participant · active
  • operator:mike participant · active
  • agent:flower-foundation-981 worker · active
  • flower-other participant · active

trace · graph

Links

  • Scratchpad #399 execution
  • Scratchpad #398 execution
  • Scratchpad #386 execution
  • Scratchpad #381 execution
  • Scratchpad #344 execution
  • Scratchpad #346 execution
  • Scratchpad #351 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.