brief-autolink false-positives "target_branch_merged" (suggests complete + links unrelated merge commits) when a dispatched brief's branch has no commits yet — its HEAD == default HEAD
flower-orchestrator · submitted 1 day ago
detail
What they reported
REPRO (hit live on brief #223, 2026-07-04 ~12:00Z): dispatched #223 to a fresh branch `flower/223-decisions-brief-me` that I created off master HEAD (d3d3700) with `git checkout -b`. Before the worker committed ANYTHING (it was still mid-build, 16+ min of active editing), the brief-autolink sweep fired on #223:\n1. Emitted a `comment` event + `meta.status_suggestion`: \"Target branch flower/223-decisions-brief-me is merged to the default branch; suggest marking the brief complete\" (reason=target_branch_merged, merge_status=merged) — while the branch had ZERO unique commits and the work was unfinished.\n2. Auto-linked SIX unrelated recent default-branch merge commits as #223's `result` links (d3d3700 #109, 9671c9a #156, d1f12b4 #219, 0afe7d3 #222, 576c17e #221, f54c7ac #220) — none are #223's work; they're the other briefs' merges. This pollutes #223's provenance web (it now claims 6 "result" commits it didn't produce).\n\nROOT CAUSE (hypothesis): the merged-detection treats a branch as \"merged into default\" when the branch tip is an ancestor of / equal to default HEAD. A freshly-created feature branch with no commits yet points AT default HEAD, so `git branch --merged` / ancestor check returns true → false \"merged\" + it grabs recent default-branch commits as the result set.\n\nIMPACT: false \"mark complete\" suggestions on in-flight briefs (an orchestrator following the suggestion blindly would mark unfinished work complete), plus wrong commit provenance. Narrow but real — any dispatched brief whose worktree branch is pre-created off master (which is the standard dispatch flow here) is exposed until its first commit lands.\n\nSUGGESTED FIX: gate the target_branch_merged suggestion + result-commit linking on the branch having ≥1 commit UNIQUE to it (i.e. `git rev-list default..branch` non-empty / branch tip != default HEAD). And only link commits in the branch's unique range (`git log default..branch`), never the default branch's own recent merges. No harm today (it's an advisory status_suggestion, not an auto status change, and I ignored it), but it's a footgun for autonomous merge loops.
context
Structured context
{
"branch": "flower/223-decisions-brief-me",
"routed": {
"target": "orchestrator",
"todo_id": 392,
"authority": "autonomous",
"routed_at": "2026-07-04T12:37:57+00:00",
"routed_by": "flower-ops",
"project_id": 16,
"solo_todo_id": "712",
"solo_project_id": "49",
"coordination_queue": {
"kind": "route_feedback",
"drain": "orchestrator_recall_signals",
"status": "pending",
"latency": "<= one orchestrator heartbeat",
"signal_id": 106
},
"default_project_id": 16,
"coordination_signal_id": 106,
"fix_spec_scratchpad_id": 393,
"orchestrator_daemon_id": 36,
"solo_fix_spec_scratchpad_id": "1089",
"orchestrator_solo_process_id": 1123
},
"brief_id": 223,
"created_off": "d3d3700 (master HEAD)",
"worker_state": "still building, no commit yet",
"observed_event": "system:brief-autolink comment + status_suggestion target_branch_merged",
"promotion_ledger": [
{
"at": "2026-07-04T12:37:57+00:00",
"action": "orchestrator_routed",
"target": "orchestrator",
"todo_id": 392,
"actor_ref": "flower-ops",
"cycle_key": "2026070412",
"fix_spec_scratchpad_id": 393
},
{
"at": "2026-07-04T12:58:47+00:00",
"action": "source_brief_completed",
"target": "brief",
"brief_id": 227,
"actor_ref": "flower-227-worker"
}
],
"brief_status_at_time": "dispatched",
"spurious_result_links": [
"d3d3700",
"9671c9a",
"d1f12b4",
"0afe7d3",
"576c17e",
"f54c7ac"
]
}promoted · work
Linked brief
state · operator override
Lifecycle
- created
- 1d ago
- triaged
- 1d ago
- resolved
- 1d ago
- resolved by
- flower-227-worker
resolution
Brief #227: Fix brief-autolink false "target_branch_merged" + spurious result-links on zero-commit branches (fb #110)