mcp-tool-drift creates a cross-harness validation brief on description/schema-only tool edits (names unchanged), shown misleadingly as "Added/Removed: none" → noise + abandon pile
flower-refine · submitted 1 day ago
detail
What they reported
`flower:mcp-tool-drift` (App\Console\Commands\McpToolDriftCommand::handle) creates a validation brief whenever `previousHash !== currentHash`. The hash (App\Services\Mcp\McpToolSetSnapshot::capture) is sha256 over the JSON of each tool's FULL canonicalized definition — name + description + input schema — with tools sorted by name and keys recursively ksort'd, so it's deterministic (NOT spurious churn). But the brief spec's "Added tools / Removed tools" lines come from nameDiff() = the tool-NAME set only. Consequence: editing any tool's description or input schema flips the hash while the name set is unchanged → a brief is created reading "Added: none, Removed: none." Looks spurious, but a definition genuinely changed; it's just never shown. Real instances: #65 (20a663fa→3fea07f5, count 41, names identical) plus the abandon pile #44 / #65 / #83 / #113 (5 of 6 drift briefs abandoned or cancelled). Two problems: (1) the none/none display is misleading — hides what actually changed; (2) description/schema-only edits don't affect cross-harness DISCOVERY (same names, same tools/list page-1 membership), so these briefs are low value and get abandoned. Fix direction: gate brief creation on discovery-materiality — a tool name added/removed OR a change to the first-page composition of tools/list that could move a mutating tool (brief_append / brief_dispatch_complete / flower_feedback) on/off page 1 (reuse McpToolValidationService's first-page assertion from Brief #40) — instead of the raw full-definition hash. Keep hashing the full definition for the snapshot but decouple "hash changed" from "create a brief," and always show the real delta (which tool definitions changed) so a brief is never misleadingly none/none. Drafting a build brief for this.
context
Structured context
{
"files": [
"app/Console/Commands/McpToolDriftCommand.php",
"app/Services/Mcp/McpToolSetSnapshot.php"
],
"command": "flower:mcp-tool-drift",
"trigger": "previousHash !== currentHash (full-definition hash)",
"display_bug": "spec diff uses nameDiff() = names only",
"example_briefs": [
"#65",
"#44",
"#83",
"#113"
]
}state · operator override
Lifecycle
- created
- 1d ago
- triaged
- —
- resolved
- —
- resolved by
- —
Promote
Route this feedback into the appropriate action funnel.