flower
/
All briefs
complete mcp flower

Precise brief↔commit auto-linking: commit trailers + session attribution (retire the time-window heuristic)

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. note added 4d ago

    Progress from flower-wt1: implemented Brief #15 backfill completion on branch flower/commit-trailer-autolink. Added shared commit trailer parser, dry-run/default flower:backfill-brief-commit-links --force command path, duplicate guard for existing commit/brief links across relations, and feature coverage. Verification: focused Brief/Ingest tests passed; full php artisan test passed (462 tests, 461 passed, 1 skipped). Commit: 0d8045a Backfill brief links from commit trailers.

    agent · flower-wt1
  5. participant joined 4d ago
    system · flower-wt1
  6. status change 4d ago
    agent · flower-orchestrator
  7. refinement 4d ago

    ## Problem `BriefAutoLinkService` links briefs↔commits using a TIME-WINDOW heuristic (commits near a participant session's activity), which is imprecise — it misses or mis-attributes commits. We now have a precise signal: every dispatched worker commits with a `Brief: #N` trailer (enforced in dispatch conventions), and commits carry session attribution. ## Fix 1. **Trailer-based linking (authoritative):** parse the `Brief: #N` trailer from commit messages during commit ingest (CommitIngestService / wherever commits are ingested) and create an exact brief↔commit link (brief_links polymorphic) keyed on the trailer. 2. **Session-attribution (secondary):** a commit authored within a session that is a brief participant → link. 3. **Retire the time-window heuristic:** demote to last-resort fallback, or remove if trailer+session cover it. Never double-link the same commit↔brief. 4. **Backfill command:** scan existing commits for `Brief: #N` trailers and create missing links; idempotent, dry-run default + `--force`. ## Acceptance - Commits with a `Brief: #N` trailer link to that brief exactly, at ingest time. - Time-window heuristic no longer produces spurious links (fallback-only or removed). - Backfill command links historical trailered commits (dry-run + force). Tests; suite green. `Brief: #15` trailer. ## Notes Disjoint from current lanes (#22 roster / #42 feedback / #32 relations). Additive + test-covered — safe for unattended build. No Horizon-job changes expected. ## Provenance Brief #15 (mcp origin). Refined by orchestrator 2026-07-01 now that dispatch enforces `Brief:#N` trailers → the precise signal exists.

    agent · flower-orchestrator
  8. spec snapshot 4d ago

    ## Spec: Precise brief↔commit auto-linking **Problem (Mike, 2026-07-01):** #22 broadened auto-link to project + participant + time-window because off-branch execution work missed the old branch key. That window is arbitrary — it can over- and under-link. The agents ARE committing; we should link the *actual* commits. Root cause: flower's commit ingest captures only the git **author** (every agent commits under Mike's identity; at most a generic `Co-Authored-By: Claude`) — there is no per-agent-session or per-brief stamp on a commit, so "which commits belong to THIS brief's agent" isn't answerable from commit data today. ### Fix — give commits a real brief-scoped key (two levers, combined) 1. **Commit trailer → EXACT link (primary, forward-looking):** - `CommitIngestService` parses git trailers `Brief: #N` / `Brief-Id: N` / `Refs: brief-N` (case-insensitive) → resolves the Brief → exact `brief_links` (Commit↔Brief) via BriefService. Branch- and time-independent. Reuse the polymorphic `brief_links` table (no new column). - `DispatchService`'s dispatch packet INSTRUCTS the dispatched agent to add the `Brief: #N` trailer to its commits — so future dispatched work self-links exactly. (Git-native version of "bake progress-posting into the charter.") 2. **Session→commit attribution (retroactive fallback):** - `BriefAutoLinkService`: prefer trailer links; where absent, attribute commits to a brief's **participant sessions** by (session project/cwd + git author + commit ts within that session's active window) rather than a project-wide bucket. Precisely links a participant's real commits. - Keep the pure project+time-window as last-resort only (or drop it). Bounded + idempotent (the #22 discipline — no over-linking). ### Status - **DISPATCHED** to the foundation worktree (branch `flower/commit-trailer-autolink`) 2026-07-01.

    system · flower-orchestrator
  9. participant joined 4d ago
    system · flower-orchestrator
  10. plan proposed 4d ago

    ## Spec: Precise brief↔commit auto-linking **Problem (Mike, 2026-07-01):** #22 broadened auto-link to project + participant + time-window because off-branch execution work missed the old branch key. That window is arbitrary — it can over- and under-link. The agents ARE committing; we should link the *actual* commits. Root cause: flower's commit ingest captures only the git **author** (every agent commits under Mike's identity; at most a generic `Co-Authored-By: Claude`) — there is no per-agent-session or per-brief stamp on a commit, so "which commits belong to THIS brief's agent" isn't answerable from commit data today. ### Fix — give commits a real brief-scoped key (two levers, combined) 1. **Commit trailer → EXACT link (primary, forward-looking):** - `CommitIngestService` parses git trailers `Brief: #N` / `Brief-Id: N` / `Refs: brief-N` (case-insensitive) → resolves the Brief → exact `brief_links` (Commit↔Brief) via BriefService. Branch- and time-independent. Reuse the polymorphic `brief_links` table (no new column). - `DispatchService`'s dispatch packet INSTRUCTS the dispatched agent to add the `Brief: #N` trailer to its commits — so future dispatched work self-links exactly. (Git-native version of "bake progress-posting into the charter.") 2. **Session→commit attribution (retroactive fallback):** - `BriefAutoLinkService`: prefer trailer links; where absent, attribute commits to a brief's **participant sessions** by (session project/cwd + git author + commit ts within that session's active window) rather than a project-wide bucket. Precisely links a participant's real commits. - Keep the pure project+time-window as last-resort only (or drop it). Bounded + idempotent (the #22 discipline — no over-linking). ### Status - **DISPATCHED** to the foundation worktree (branch `flower/commit-trailer-autolink`) 2026-07-01.

    agent · flower-orchestrator
  11. note added 4d ago

    Mike flagged (2026-07-01) that #22's project+time-window auto-link is an arbitrary proxy — agents ARE committing, so we should link the actual commits. Today commits carry only the git author (all 'Mike Ferrara'), with no per-session/per-brief key, which is WHY the branch-independent fallback was a time window.

    agent · flower-orchestrator
  12. participant joined 4d ago
    system · flower-orchestrator

epic · dependencies

Relationships

epic parent

depends on

No dependencies — dispatchable once planned.

agents · waves

Participants

  • flower-orchestrator participant · active
  • flower-wt1 participant · active
  • system:commit-trailer participant · active

trace · graph

Links

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