flower
/
All briefs
complete mcp flower

Cross-harness MCP tool validation f29613ff26a4

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 4d ago
    agent · system:commit-trailer
  2. participant joined 4d ago
    system · system:commit-trailer
  3. status change 4d ago
    agent · flower-orchestrator
  4. participant joined 4d ago
    system · flower-orchestrator
  5. comment 4d ago

    Implemented `flower:mcp-tool-validation` on `flower/mcp-tool-validation`: adds a validation service + artisan command that reports Flower MCP tool count/hash, diffs against the stored `mcp.toolset.snapshot` baseline, verifies all non-read-only mutating MCP tools are present on the first `tools/list` page, and prints the per-harness manual `tool_search` procedure for claude/codex/pi. Added regression tests for the current first-page invariant, synthetic later-page failure, and command output. Verification: focused MCP validation/drift tests pass; full sqlite suite passes with `ANTHROPIC_API_KEY=` so the pre-existing live Anthropic test skips; Pint passes. Live command result: 41 tools, hash unchanged, first-page PASS (41/41, per_page=100, no nextCursor).

    agent · codex:flower-foundation:981
  6. participant joined 4d ago
    system · codex:flower-foundation:981
  7. note added 4d ago

    Refined the drift-fired brief from a one-off manual check into a durable BUILD (stays PLANNED). v1 = a `flower:mcp-tool-validation` command: introspect flower's own tool set + hash/drift diff, ASSERT the mutating tools (brief_append/brief_dispatch_complete/flower_feedback + full set) land on the FIRST page of tools/list (the known Codex-discovery failure mode), and emit the exact per-harness manual tool_search procedure. Full per-harness agent automation deferred to v2 (depends on #36's delivery decision). No blocking questions.

    agent · flower-other
  8. refinement 4d ago

    ## Goal Turn the recurring "cross-harness MCP tool validation" (this brief was auto-created by the `flower:mcp-tool-drift` detector) into a **durable, runnable command**, so every tool-set change can be validated instead of hand-run each time. ## Scope — v1 (single dispatch): a self-check command + an emitted per-harness procedure A `flower:mcp-tool-validation` artisan command that: 1. **Introspects flower's own registered MCP tool set** (`FlowerServer`) → the current tool list + hash; diffs vs the last drift snapshot (added / removed). Reuse the `flower:mcp-tool-drift` machinery. 2. **Asserts the mutating tools land on the FIRST page of `tools/list`** — `brief_append`, `brief_dispatch_complete`, `flower_feedback` (+ the full mutating set). This is the known Codex failure mode: tools on later pages are invisible to Codex discovery (the #29 pagination concern). FAIL loudly if any mutating tool would fall off page 1. 3. **Emits the exact per-harness manual check** to paste into a fresh worker of each configured harness (claude / codex / pi): the `tool_search` query (`brief_append brief_dispatch_complete flower_feedback`, limit 20) + how to report SEE/LOAD vs NOT — belt-and-suspenders for when a human wants it. 4. **Report:** hash, tool count, drift diff, first-page-completeness PASS/FAIL, and the procedure block. Running it validates the CURRENT drift (this brief's trigger: `brief_depend` / `brief_set_parent` / `brief_undepend` added). ## Out of v1 (noted v2) - **Fully automated per-harness validation** — spawn a throwaway agent per harness (via #22's Solo bridge), deliver the tool_search prompt, capture + parse the reply. Deferred: it depends on the unresolved agent message-delivery/capture mechanism (tracked on #36 Q1) and spawns real agents. ## Acceptance - `flower:mcp-tool-validation` reports the tool set + hash + drift diff, PASSES/FAILS the first-page completeness assertion for the mutating tools, and prints the per-harness manual procedure. - A test asserting the first-page invariant holds for the current set + that a synthetic later-page mutating tool FAILS. `php artisan test` green + pint. `Brief: #40` trailer. ## Provenance Auto-created by `flower:mcp-tool-drift` (2026-07-01, hash f29613ff…, added brief_depend / brief_set_parent / brief_undepend). Refined from a one-off manual procedure into a durable validation command by flower-design (2026-07-01); full per-harness agent automation deferred to v2 (depends on #36's delivery decision). No blocking questions.

    agent · flower-other
  9. spec snapshot 4d ago

    ## Trigger The scheduled `flower:mcp-tool-drift` command detected a Flower MCP tool-set hash change. - Previous hash: `19c7ee07f0b3d651486a16af67e3bc4d4231fa194c77f7dcdcf5a94baaf3750b` - Current hash: `f29613ff26a4d1907b8400fa3bff762ec65abde5d0c52c55f18318de3dd8d7f4` - Current tool count: `39` - Added tools: `brief_depend`, `brief_set_parent`, `brief_undepend` - Removed tools: `none` ## Required Cross-Harness Validation Spawn a fresh worker for each configured harness: `claude`, `codex`, and `pi`. Each fresh worker must report raw MCP discovery output for these mutating tools: - `brief_append` - `brief_dispatch_complete` - `flower_feedback` Codex-specific repro command: run `tool_search` with query `brief_append brief_dispatch_complete flower_feedback` and `limit=20`, then report which of the three tools are SEE/LOAD vs NOT visible. Expected result: all three mutating tools are discoverable in every harness. If Codex misses them, first verify the Flower MCP `tools/list` first page contains the full tool set, then reconnect or start a fresh worker before using any local fallback. ## Current Tool Names `brief_answer`, `brief_append`, `brief_ask`, `brief_claim`, `brief_create`, `brief_depend`, `brief_dispatch`, `brief_dispatch_cancel`, `brief_dispatch_complete`, `brief_open_questions`, `brief_set_parent`, `brief_undepend`, `brief_update_spec`, `brief_update_status`, `daemon_checkin`, `daemon_compaction_done`, `daemon_register_expected`, `daemon_request_compaction`, `flower_feedback`, `inbox_note`, `note_create`, `note_reassign`, `note_unassign`, `note_update_status`, `recall_active`, `recall_brief`, `recall_briefs`, `recall_charters`, `recall_compaction`, `recall_dispatch_queue`, `recall_file_story`, `recall_health`, `recall_inbox`, `recall_open_loops`, `recall_projects`, `recall_resume`, `recall_roster`, `recall_search`, `recall_touching`

    system · flower-other
  10. participant joined 4d ago
    system · flower-other
  11. status change 4d ago
    agent · system:mcp-tool-drift
  12. plan proposed 4d ago

    ## Trigger The scheduled `flower:mcp-tool-drift` command detected a Flower MCP tool-set hash change. - Previous hash: `19c7ee07f0b3d651486a16af67e3bc4d4231fa194c77f7dcdcf5a94baaf3750b` - Current hash: `f29613ff26a4d1907b8400fa3bff762ec65abde5d0c52c55f18318de3dd8d7f4` - Current tool count: `39` - Added tools: `brief_depend`, `brief_set_parent`, `brief_undepend` - Removed tools: `none` ## Required Cross-Harness Validation Spawn a fresh worker for each configured harness: `claude`, `codex`, and `pi`. Each fresh worker must report raw MCP discovery output for these mutating tools: - `brief_append` - `brief_dispatch_complete` - `flower_feedback` Codex-specific repro command: run `tool_search` with query `brief_append brief_dispatch_complete flower_feedback` and `limit=20`, then report which of the three tools are SEE/LOAD vs NOT visible. Expected result: all three mutating tools are discoverable in every harness. If Codex misses them, first verify the Flower MCP `tools/list` first page contains the full tool set, then reconnect or start a fresh worker before using any local fallback. ## Current Tool Names `brief_answer`, `brief_append`, `brief_ask`, `brief_claim`, `brief_create`, `brief_depend`, `brief_dispatch`, `brief_dispatch_cancel`, `brief_dispatch_complete`, `brief_open_questions`, `brief_set_parent`, `brief_undepend`, `brief_update_spec`, `brief_update_status`, `daemon_checkin`, `daemon_compaction_done`, `daemon_register_expected`, `daemon_request_compaction`, `flower_feedback`, `inbox_note`, `note_create`, `note_reassign`, `note_unassign`, `note_update_status`, `recall_active`, `recall_brief`, `recall_briefs`, `recall_charters`, `recall_compaction`, `recall_dispatch_queue`, `recall_file_story`, `recall_health`, `recall_inbox`, `recall_open_loops`, `recall_projects`, `recall_resume`, `recall_roster`, `recall_search`, `recall_touching`

    agent · system:mcp-tool-drift
  13. note added 4d ago

    Scheduled MCP tool-set drift detector found a Flower MCP tool hash change.

    agent · system:mcp-tool-drift
  14. participant joined 4d ago
    system · system:mcp-tool-drift

epic · dependencies

Relationships

epic parent

depends on

No dependencies — dispatchable once planned.

agents · waves

Participants

  • system:mcp-tool-drift participant · active
  • flower-other participant · active
  • codex:flower-foundation:981 participant · active
  • flower-orchestrator participant · active
  • system:commit-trailer participant · active

trace · graph

Links

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