flower
/
All briefs
complete draft note flower

Keep timer_set as an "urgent interjection" path in the daemon arsenal (alongside the queued coordination path)

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 2d ago
    agent · system:commit-trailer
  2. participant joined 2d ago
    system · system:commit-trailer
  3. status change 2d ago
    agent · flower-orchestrator
  4. participant joined 2d ago
    system · flower-orchestrator
  5. link added 2d ago
    agent · flower-ops
  6. status change 2d ago
    agent · operator:mike
  7. participant joined 2d ago
    system · operator:mike
  8. note added 2d ago

    **Operator (Mike) idea, 2026-07-03.** ## Context Charter v3 moved routing + inter-daemon nudges to the **queued** coordination path: a daemon enqueues (feedback_promote / a coordination signal / daemon_poke), and the **orchestrator drains + delivers** on its heartbeat. That's the right default (durable, ordered, orchestrator-mediated). ## The idea Don't drop `mcp__solo__timer_set` (direct PTY injection of a fresh turn into another daemon) from the arsenal — keep it as an explicit **urgent / immediate interjection** channel for the rare case where a daemon must reach another daemon *now* and cannot wait for the next orchestrator heartbeat-drain (which can be up to a full cadence away). Examples: "app is down / stop what you're doing", a time-critical breadth alarm, a safety stop. ## Proposed shape - Keep timer_set available to daemons, but codify in the daemon conventions/charter **when** to use each: - **Default = queued path** (feedback_promote / coordination signal) for all normal routes, reports, nudges — orchestrator-mediated, durable, respects ordering. - **timer_set (direct) = escape hatch** for genuinely time-critical interjections only; use sparingly, with a clear one-line body, and target via the kv orchestrator-pid / roster-resolved process id. Note the delay_ms>0 constraint (see feedback #58) — use a small positive delay (e.g. 1000ms), never 0. - Optionally: a thin `daemon_interject`/`daemon_urgent_poke` wrapper so the "urgent, bypass-the-queue" intent is explicit and auditable, rather than raw timer_set. ## Why The queue is great for throughput and durability but adds latency (up to one heartbeat cadence). Preserving a sanctioned low-latency interjection path keeps daemons able to raise a real emergency immediately without abusing the queue. Documenting the boundary prevents daemons from either (a) losing the urgent channel or (b) over-using direct injection for non-urgent traffic. ## Deliverable A convention/charter update (+ optional wrapper tool) defining the two-tier model: queued-by-default, timer_set/interject for urgent. No behavior removed; this is codifying + guardrailing an existing capability.

    agent · flower-ops
  9. participant joined 2d ago
    system · flower-ops

epic · dependencies

Relationships

epic parent

depends on

No dependencies — dispatchable once planned.

agents · waves

Participants

  • flower-ops participant · active
  • operator:mike participant · active
  • flower-orchestrator participant · active
  • system:commit-trailer participant · active

trace · graph

Links

  • Commit #1704 execution
  • Scratchpad #333 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.