flower
/
All briefs
complete draft note flower

Redesign /decisions feed to deliver decision context (project + links + what it's about)

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.

#98 done fresh flower · flower/216-decisions-feed-design
agent: claude
You are being dispatched from flower Brief #216: Redesign /decisions feed to deliver decision context (project + links + what it's about)

Recall pointer:
- Use recall_brief with id 216 for the full folder if you need provenance.

Target:
- project: flower (/Users/mikeferrara/Documents/code/flower)
- branch: flower/216-decisions-feed-design
- worktree: not specified
- kind: fresh

Current brief spec:
## Goal
Redesign the `/decisions` feed so every decision card **delivers its context inline** — project, originating brief/feedback provenance, and a plain-language "what this is about" — so a human (or agent) can answer well without leaving the page. High-leverage surface: real decisions get made in this feed.

## Operator decisions (2026-07-04)
- **Q51 — Design path:** **design-loop pass first** (produce a design doc + sequenced PR plan before building).
- **Q52 — Context source:** **structured data by default + an optional, on-demand AI summary button** (AI is not the always-on centerpiece).
- **Elaboration (event #10):** the AI button is **RAG-fed by flower's own recall** — assemble our findings (subject brief spec + recent related commits & their subjects + related sessions/segments + links) and prompt the model (deepseek via existing OpenRouter plumbing) with enough of that context that it **highlights what we should highlight**. It's a "brief me" over OUR assembled context, not a model fetching/guessing its own.

## Current state (grounded, Explore-confirmed)
- Context is ALREADY eager-loaded every board render (`app/Livewire/Decisions/Index.php:65`: `brief, subject, project, links.linkable, group, parentAnswer`), but the card face (`resources/views/components/decisions/card.blade.php`) shows only header + blocking badge + one-hop parent quote + question + affordance + "View more" flyout. Richer context (project, subject brief + spec, links, `assigned_to`/`asked_by`/type) is loaded but hidden in `detail.blade.php`.
- `DecisionAutoLinkService` (`:30`) auto-links only the subject brief — not session/feedback/commits (the polymorphic `decision_links` table supports them).
- Detail shows only brief title + 520-char spec excerpt — not the brief's own web (sessions/commits/trace/deps/participants/source-feedback/parent), which `resources/views/livewire/briefs/show.blade.php` already renders.

## Scope — three seams (for the design-loop to sequence)
1. **Display (promote):** card leads with a provenance header (project chip · "from brief #N / feedback #N / epic" · role-being-asked) + a one-glance "what this is about" (subject brief title + spec excerpt + top links) above the question + affordance. Reuse bloom `x-ui.card`/`badge` + the `briefs/show` provenance chips (`:66`/`:73`); `x-decisions.card` already supports `:view-more=false`.
2. **Capture (enrich):** extend `DecisionAutoLinkService` to link the originating session/segment, related commits, and feedback at ask time (or resolve them from the subject brief's own links) so the context list is actually populated.
3. **Depth + "Brief me" AI button:**
   - (a) extend the decision context serializer (`RecallService::decisionSummary()`, `:919`, beside `briefDetail`/`briefRelations`) to assemble the subject brief's web (sessions/commits/trace/deps/participants/source-feedback/parent) — structured, progressive (glance → expand).
   - (b) an **optional on-demand "Brief me" button** that builds a prompt from that assembled recall context (spec + recent related commits & subjects + related sessions + links) and calls the LLM (deepseek via existing OpenRouter/summarize plumbing) to HIGHLIGHT the salient points. Cache the result on the decision; surface a clear cost/latency signal; button, not auto. The LLM highlights over OUR recall — it does not fetch its own.

## What the design-loop should produce
- A design doc: redesigned card anatomy (glance state), expand/detail state, provenance-chip vocabulary, the "Brief me" button UX (loading, caching, cost signal), empty/standalone (no-subject) decision degradation, gated-set + blocking treatment, feed density.
- A sequenced PR plan across the 3 seams (Display first — highest value, mostly promoting already-loaded data; then Capture; then Depth + AI button).
- A reuse audit vs bloom UI + `briefs/show`; explicit "no regression to answer affordances."

## Acceptance
- Each card shows project + originating brief/feedback provenance + plain-language "what this is about" + role-being-asked BEFORE any click.
- "Brief me" produces a recall-grounded highlight on demand (RAG over flower's own findings), cached, with a clear cost/latency signal.
- Blocking + gated-set state obvious; deep context one expand away; answer affordances unregressed; standalone decisions degrade gracefully.

## Build path
Design-loop first (Q51). Refine stops at `planned`; the **orchestrator dispatches the design-loop** — a refine daemon does not run the multi-agent design-loop inline (it would block the heartbeat). Touch points: `Decisions\Index`, `components/decisions/{card,detail}.blade.php`, `DecisionAutoLinkService`, `RecallService::decisionSummary`/`briefDetail`/`briefRelations`, `briefs/show.blade.php`, bloom `components/ui/*`, OpenRouter/summarize plumbing (AI button). Cross-links: **#170** (dogfood decisions), **#87** (UI-feedback epic).

Recent/key trace events:
[1] participant_joined flower-refine: (no body)
[2] note_added flower-refine: Operator (2026-07-04): The **/decisions** feed presents decisions the operator must answer but delivers **no surrounding context** — it doesn't even show the **project**, let alone links to the brief / session / feedback the decision came from, or *what* the decision is asking / about / around. This feed is a **huge lever on the whole platform's usefulness** — real decisions get made here, in a feed. We should **DELIVER the context** the way an agent would brief a human (or another agent): use flower's own data + tools to surface, inline, what each decision is about — the originating brief and its spec, the project, related session/segment, feedback, the role being asked, prior answers/threads — instead of offering nothing. Goal: dramatically improve the /decisions UI/UX so a human can make each decision well without leaving the page. Refine into a concrete design direction + spec (candidate for a design-loop pass).
[3] status_change flower-refine: (no body)
[4] refinement flower-refine: **Refinement (flower-refine gen-5, 2026-07-04) — grounded current-state + design direction**

**Pivotal insight — the context is ALREADY loaded; the feed just doesn't show it.** `Decisions\Index` eager-loads `brief, subject, project, links.linkable, group, parentAnswer.decision` on every board render (`app/Livewire/Decisions/Index.php:65`), but the board **card face** (`resources/views/components/decisions/card.blade.php`) renders only: header, blocking badge, a one-hop parent quote, the question, the answer affordance, and a "View more" flyout. Everything richer — project, subject brief + spec excerpt, linked-context list, `assigned_to`/`asked_by`/type/timestamps — is loaded but hidden in the flyout (`components/decisions/detail.blade.php`) or the `/decisions/{id}` page. So a large share of the fix is **promoting already-loaded context onto the feed face**, not new plumbing.

**Two real capture/depth gaps beyond display:**
- **Capture:** `DecisionAutoLinkService` v1 (`app/Services/Briefs/DecisionAutoLinkService.php:30`) auto-links **only the subject brief** (as `reference`). It never links the originating **session/segment, commits, or feedback**, though the polymorphic `decision_links` table supports all of them. In practice the "linked context" list is empty or one row.
- **Depth:** the detail shows only the brief's **title + 520-char spec excerpt** (`detail.blade.php:103`) — not the brief's own context web (its linked sessions/commits/trace/dependencies/participants/**source feedback**/**parent epic**), which the **brief detail page already renders** (`resources/views/livewire/briefs/show.blade.php`). This is the richest untapped seam: "what the decision is about" ≈ the subject brief's provenance graph, surfaced inline.

**Context we can surface (all already modeled — Explore-confirmed):** project + room scope; subject brief (title/spec/status) + provenance chips ("from feedback #N", "epic · title" — already a pattern in `briefs/show` header, `:66`/`:73`); `decision_links` (session/segment, commits, scratchpads, feedback, related briefs); the role being asked (`assigned_to`) + asker (`asked_by`); `decision_type` + options (with `recommended`/`detail`); blocking; the answer thread (`parent_answer` → `decision_answers` chain → follow-ups); gated-set siblings + k/N.

**Proposed direction — three seams:**
1. **Display (promote):** redesign the decision card to lead with a **provenance header** (project chip · "from brief #N / feedback #N / epic" chip · role-being-asked) and a one-glance **"what this is about"** block (subject brief title + spec excerpt + top links) ABOVE the question + affordance — so the feed answers what/why/for-whom without a click. Reuse bloom `x-ui.card`/`badge` + the `briefs/show` provenance-chip pattern; `x-decisions.card` already supports embedding (`:view-more=false`).
2. **Capture (enrich auto-link):** extend `DecisionAutoLinkService` to link the originating **session/segment**, related **commits**, and **feedback** at ask time (or resolve them from the subject brief's own links), so the context list is actually populated.
3. **Depth (assemble the web):** extend the decision context serializer (`RecallService::decisionSummary()`, `:919`, beside `briefDetail`/`briefRelations`) to include the subject brief's linked sessions/commits/trace/deps/participants/source-feedback/parent — rendered progressively (glance on card → expand for full).

**Acceptance (draft):** each /decisions card shows project + originating brief/feedback provenance + a plain-language "what this is about" + the role being asked, before any click; blocking + gated-set state obvious; deep context one expand away; answer affordances unchanged/unregressed; empty/standalone (no-subject) decisions degrade gracefully.

**Build path:** strong candidate for a **design-loop pass** (writer↔reviewer → design doc + sequenced PR plan) given the UX ambition — recommend that before build. Two design decisions opened (below). Holding at `refining` pending operator direction.
[5] agent_question flower-refine: This is a UX-heavy redesign. Kick off a design-loop pass (writer↔reviewer → design doc + sequenced PR plan) before building, or go straight to a build-ready spec?
[6] agent_question flower-refine: How should each card's 'what this is about' be produced? Structured data we already have (brief spec excerpt, links, provenance chips) is instant and free; an LLM-synthesized brief-style summary reads more like an agent briefing you but adds cost/latency/staleness.
[7] participant_joined operator:mike: (no body)
[8] operator_answer operator:mike: {"choice":"Design-loop pass first (design doc + PR plan) — recommended"}
[9] operator_answer operator:mike: {"choice":"Structured + optional on-demand AI summary (button)"}
[10] note_added operator:mike: I like the idea of the button for a deepseek review/overview/summary but I'd also like to include things from our own recall-style findings - maybe that's exactly what deepseek can help highlight? Do we make sure to prompt out to deepseek with enough context and results from our recall that it can highlight what we should highlight? ie: The summary + list of recent related commits and their subject or whatever.
[11] plan_proposed flower-refine: ## Goal
Redesign the `/decisions` feed so every decision card **delivers its context inline** — project, originating brief/feedback provenance, and a plain-language "what this is about" — so a human (or agent) can answer well without leaving the page. High-leverage surface: real decisions get made in this feed.

## Operator decisions (2026-07-04)
- **Q51 — Design path:** **design-loop pass first** (produce a design doc + sequenced PR plan before building).
- **Q52 — Context source:** **structured data by default + an optional, on-demand AI summary button** (AI is not the always-on centerpiece).
- **Elaboration (event #10):** the AI button is **RAG-fed by flower's own recall** — assemble our findings (subject brief spec + recent related commits & their subjects + related sessions/segments + links) and prompt the model (deepseek via existing OpenRouter plumbing) with enough of that context that it **highlights what we should highlight**. It's a "brief me" over OUR assembled context, not a model fetching/guessing its own.

## Current state (grounded, Explore-confirmed)
- Context is ALREADY eager-loaded every board render (`app/Livewire/Decisions/Index.php:65`: `brief, subject, project, links.linkable, group, parentAnswer`), but the card face (`resources/views/components/decisions/card.blade.php`) shows only header + blocking badge + one-hop parent quote + question + affordance + "View more" flyout. Richer context (project, subject brief + spec, links, `assigned_to`/`asked_by`/type) is loaded but hidden in `detail.blade.php`.
- `DecisionAutoLinkService` (`:30`) auto-links only the subject brief — not session/feedback/commits (the polymorphic `decision_links` table supports them).
- Detail shows only brief title + 520-char spec excerpt — not the brief's own web (sessions/commits/trace/deps/participants/source-feedback/parent), which `resources/views/livewire/briefs/show.blade.php` already renders.

## Scope — three seams (for the design-loop to sequence)
1. **Display (promote):** card leads with a provenance header (project chip · "from brief #N / feedback #N / epic" · role-being-asked) + a one-glance "what this is about" (subject brief title + spec excerpt + top links) above the question + affordance. Reuse bloom `x-ui.card`/`badge` + the `briefs/show` provenance chips (`:66`/`:73`); `x-decisions.card` already supports `:view-more=false`.
2. **Capture (enrich):** extend `DecisionAutoLinkService` to link the originating session/segment, related commits, and feedback at ask time (or resolve them from the subject brief's own links) so the context list is actually populated.
3. **Depth + "Brief me" AI button:**
   - (a) extend the decision context serializer (`RecallService::decisionSummary()`, `:919`, beside `briefDetail`/`briefRelations`) to assemble the subject brief's web (sessions/commits/trace/deps/participants/source-feedback/parent) — structured, progressive (glance → expand).
   - (b) an **optional on-demand "Brief me" button** that builds a prompt from that assembled recall context (spec + recent related commits & subjects + related sessions + links) and calls the LLM (deepseek via existing OpenRouter/summarize plumbing) to HIGHLIGHT the salient points. Cache the result on the decision; surface a clear cost/latency signal; button, not auto. The LLM highlights over OUR recall — it does not fetch its own.

## What the design-loop should produce
- A design doc: redesigned card anatomy (glance state), expand/detail state, provenance-chip vocabulary, the "Brief me" button UX (loading, caching, cost signal), empty/standalone (no-subject) decision degradation, gated-set + blocking treatment, feed density.
- A sequenced PR plan across the 3 seams (Display first — highest value, mostly promoting already-loaded data; then Capture; then Depth + AI button).
- A reuse audit vs bloom UI + `briefs/show`; explicit "no regression to answer affordances."

## Acceptance
- Each card shows project + originating brief/feedback provenance + plain-language "what this is about" + role-being-asked BEFORE any click.
- "Brief me" produces a recall-grounded highlight on demand (RAG over flower's own findings), cached, with a clear cost/latency signal.
- Blocking + gated-set state obvious; deep context one expand away; answer affordances unregressed; standalone decisions degrade gracefully.

## Build path
Design-loop first (Q51). Refine stops at `planned`; the **orchestrator dispatches the design-loop** — a refine daemon does not run the multi-agent design-loop inline (it would block the heartbeat). Touch points: `Decisions\Index`, `components/decisions/{card,detail}.blade.php`, `DecisionAutoLinkService`, `RecallService::decisionSummary`/`briefDetail`/`briefRelations`, `briefs/show.blade.php`, bloom `components/ui/*`, OpenRouter/summarize plumbing (AI button). Cross-links: **#170** (dogfood decisions), **#87** (UI-feedback epic).
[12] status_change flower-refine: (no body)

Recommended linked context:
{
    "todos": [],
    "scratchpads": []
}

Execution notes:
- Treat the brief as the source of truth.
- Keep work scoped to this dispatch request.
- Use brief_append / brief_update_status when reporting material progress; as your final dispatched-worker step, call brief_dispatch_complete with dispatch_request_id (or brief_id) and actor_ref.
- Codex workers should verify mutating Flower tools with tool_search query `brief_append brief_dispatch_complete flower_feedback` (limit 20) when tool availability is in doubt; report raw SEE/LOAD vs NOT visible instead of silently using local fallbacks.
- Add a git commit trailer `Brief: #216` to every commit for this brief so flower can exact-link commits back to the brief.

provenance · append-only

Trace

live
or paste a screenshot uploading…
  1. link added 1d ago
    agent · system:commit-trailer
  2. participant joined 1d ago
    system · system:commit-trailer
  3. merged 1d ago

    Design-loop pass merged to master as 1d73036 (doc commit c30010e): docs/design/216-decisions-feed-redesign.md (613 lines, 4-round writer↔reviewer consensus grounded in frontend-design). Produced 4 dependency-chained child build briefs: #220 PR-1 Display (dispatchable first, no deps) → #221 PR-2 Capture + #222 PR-3a Depth (both blocked on #220) → #223 PR-3b "Brief me" AI button (blocked on #222). Design-loop caught + resolved real blockers (provenance-chip N+1 → eager-load; subject-title over-weighting; oversized PR-3 split into 3a/3b; unscoped wire:loading on 30s poll → action-scoped wire:target; ai-brief DOM-id collision → :surface prop). #216 stays as the parent epic (status complete = design deliverable done; the 4 children track the remaining build work). Doc-only merge (no code/migration/suite/reload). Dispatching #220 next.

    agent · flower-orchestrator
  4. status change 1d ago
    agent · flower-216-worker
  5. dispatched 1d ago

    Dispatch request #98 marked done.

    agent · flower-216-worker
  6. note added 1d ago

    **Design-loop pass COMPLETE (flower-216-worker, dispatch #98).** Deliverable = design doc + sequenced PR plan, no code build (Q51 path). **Design doc:** `docs/design/216-decisions-feed-redesign.md` (613 lines), committed as **c30010e** on branch `flower/216-decisions-feed-design` (off master 8346129). Not pushed. **Process:** ran the `design-loop` skill — writer↔reviewer subagents (both grounded in `frontend-design`), 4 rounds to CONSENSUS. Blockers caught & resolved across rounds: (1) provenance chips' hidden N+1 — the feedback/epic origin variants read `brief.feedback`/`brief.parent` which `Index.php:65/:89` don't eager-load → folded into PR-1 as one eager-load extension; (2) subject title out-weighting the question → subordinated to `text-fg-muted` normal-weight with an explicit stated rank (header > question > subject > provenance); (3) oversized PR-3 → split into PR-3a (structured, no AI) + PR-3b (Brief me); (4) unscoped `wire:loading` would flip every card's Brief-me button every 30s poll → action-scoped `wire:target`; (5) cluster banner can't reuse the single-decision provenance partial → `:context` prop; (6) `ai-brief` DOM id collided between glance card + in-DOM flyout → `:surface`-suffixed id. Only a copy nit left (cached-button label). **Doc covers:** card anatomy (glance + expand), provenance-chip vocab (reusing briefs/show patterns), the "Brief me" button UX (loading/caching/cost+latency signal, RAG-over-OUR-recall prompt shape assembling `decisionSummary` + `briefFolder` → deepseek highlights, never fetches its own — Q52), standalone/no-subject + non-Brief degradation, gated-set + blocking treatment, feed density/progressive disclosure, a bloom + briefs/show reuse audit (no invented primitives), and an explicit frozen answer path (`x-decisions.affordance` + `AnswersDecisions` untouched; Brief me lives in a new sibling `BriefsDecisionsWithAi` concern). **Sequenced PR plan → child briefs (parented to #216, dependency-chained):** - **#220 PR-1 — Display (promote):** provenance/subject-brief/trace-summary partials onto the card face + one eager-load extension. Tracer bullet, dispatchable first (no blockers). - **#221 PR-2 — Capture:** extend `DecisionAutoLinkService` to link sessions/commits/feedback/parent + backfill. Depends on #220. - **#222 PR-3a — Depth (structured, no AI):** `decisionSummary` brief-web sub-object + `DecisionBriefContext` assembler + grouped linked-context in detail. Depends on #220. - **#223 PR-3b — "Brief me" AI button:** `ai_brief*` columns + `BriefDecision` queued job + `DecisionBriefed` event/listener + `x-decisions.ai-brief` panel + `BriefsDecisionsWithAi` concern. Depends on #222. Ready for the orchestrator to dispatch the children (start with #220).

    agent · flower-216-worker
  7. participant joined 1d ago
    system · flower-216-worker
  8. dispatched 1d ago

    Dispatch request #98 queued for flower.

    agent · flower-orchestrator
  9. status change 1d ago
    agent · flower-orchestrator
  10. participant joined 1d ago
    system · flower-orchestrator
  11. status change 1d ago
    agent · flower-refine
  12. plan proposed 1d ago

    ## Goal Redesign the `/decisions` feed so every decision card **delivers its context inline** — project, originating brief/feedback provenance, and a plain-language "what this is about" — so a human (or agent) can answer well without leaving the page. High-leverage surface: real decisions get made in this feed. ## Operator decisions (2026-07-04) - **Q51 — Design path:** **design-loop pass first** (produce a design doc + sequenced PR plan before building). - **Q52 — Context source:** **structured data by default + an optional, on-demand AI summary button** (AI is not the always-on centerpiece). - **Elaboration (event #10):** the AI button is **RAG-fed by flower's own recall** — assemble our findings (subject brief spec + recent related commits & their subjects + related sessions/segments + links) and prompt the model (deepseek via existing OpenRouter plumbing) with enough of that context that it **highlights what we should highlight**. It's a "brief me" over OUR assembled context, not a model fetching/guessing its own. ## Current state (grounded, Explore-confirmed) - Context is ALREADY eager-loaded every board render (`app/Livewire/Decisions/Index.php:65`: `brief, subject, project, links.linkable, group, parentAnswer`), but the card face (`resources/views/components/decisions/card.blade.php`) shows only header + blocking badge + one-hop parent quote + question + affordance + "View more" flyout. Richer context (project, subject brief + spec, links, `assigned_to`/`asked_by`/type) is loaded but hidden in `detail.blade.php`. - `DecisionAutoLinkService` (`:30`) auto-links only the subject brief — not session/feedback/commits (the polymorphic `decision_links` table supports them). - Detail shows only brief title + 520-char spec excerpt — not the brief's own web (sessions/commits/trace/deps/participants/source-feedback/parent), which `resources/views/livewire/briefs/show.blade.php` already renders. ## Scope — three seams (for the design-loop to sequence) 1. **Display (promote):** card leads with a provenance header (project chip · "from brief #N / feedback #N / epic" · role-being-asked) + a one-glance "what this is about" (subject brief title + spec excerpt + top links) above the question + affordance. Reuse bloom `x-ui.card`/`badge` + the `briefs/show` provenance chips (`:66`/`:73`); `x-decisions.card` already supports `:view-more=false`. 2. **Capture (enrich):** extend `DecisionAutoLinkService` to link the originating session/segment, related commits, and feedback at ask time (or resolve them from the subject brief's own links) so the context list is actually populated. 3. **Depth + "Brief me" AI button:** - (a) extend the decision context serializer (`RecallService::decisionSummary()`, `:919`, beside `briefDetail`/`briefRelations`) to assemble the subject brief's web (sessions/commits/trace/deps/participants/source-feedback/parent) — structured, progressive (glance → expand). - (b) an **optional on-demand "Brief me" button** that builds a prompt from that assembled recall context (spec + recent related commits & subjects + related sessions + links) and calls the LLM (deepseek via existing OpenRouter/summarize plumbing) to HIGHLIGHT the salient points. Cache the result on the decision; surface a clear cost/latency signal; button, not auto. The LLM highlights over OUR recall — it does not fetch its own. ## What the design-loop should produce - A design doc: redesigned card anatomy (glance state), expand/detail state, provenance-chip vocabulary, the "Brief me" button UX (loading, caching, cost signal), empty/standalone (no-subject) decision degradation, gated-set + blocking treatment, feed density. - A sequenced PR plan across the 3 seams (Display first — highest value, mostly promoting already-loaded data; then Capture; then Depth + AI button). - A reuse audit vs bloom UI + `briefs/show`; explicit "no regression to answer affordances." ## Acceptance - Each card shows project + originating brief/feedback provenance + plain-language "what this is about" + role-being-asked BEFORE any click. - "Brief me" produces a recall-grounded highlight on demand (RAG over flower's own findings), cached, with a clear cost/latency signal. - Blocking + gated-set state obvious; deep context one expand away; answer affordances unregressed; standalone decisions degrade gracefully. ## Build path Design-loop first (Q51). Refine stops at `planned`; the **orchestrator dispatches the design-loop** — a refine daemon does not run the multi-agent design-loop inline (it would block the heartbeat). Touch points: `Decisions\Index`, `components/decisions/{card,detail}.blade.php`, `DecisionAutoLinkService`, `RecallService::decisionSummary`/`briefDetail`/`briefRelations`, `briefs/show.blade.php`, bloom `components/ui/*`, OpenRouter/summarize plumbing (AI button). Cross-links: **#170** (dogfood decisions), **#87** (UI-feedback epic).

    agent · flower-refine
  13. note added 1d ago

    I like the idea of the button for a deepseek review/overview/summary but I'd also like to include things from our own recall-style findings - maybe that's exactly what deepseek can help highlight? Do we make sure to prompt out to deepseek with enough context and results from our recall that it can highlight what we should highlight? ie: The summary + list of recent related commits and their subject or whatever.

    operator · operator:mike
  14. operator answer 1d ago

    {"choice":"Structured + optional on-demand AI summary (button)"}

    operator · operator:mike
  15. operator answer 1d ago

    {"choice":"Design-loop pass first (design doc + PR plan) — recommended"}

    operator · operator:mike
  16. participant joined 1d ago
    system · operator:mike
  17. agent question 1d ago

    How should each card's 'what this is about' be produced? Structured data we already have (brief spec excerpt, links, provenance chips) is instant and free; an LLM-synthesized brief-style summary reads more like an agent briefing you but adds cost/latency/staleness.

    agent · flower-refine
  18. agent question 1d ago

    This is a UX-heavy redesign. Kick off a design-loop pass (writer↔reviewer → design doc + sequenced PR plan) before building, or go straight to a build-ready spec?

    agent · flower-refine
  19. refinement 1d ago

    **Refinement (flower-refine gen-5, 2026-07-04) — grounded current-state + design direction** **Pivotal insight — the context is ALREADY loaded; the feed just doesn't show it.** `Decisions\Index` eager-loads `brief, subject, project, links.linkable, group, parentAnswer.decision` on every board render (`app/Livewire/Decisions/Index.php:65`), but the board **card face** (`resources/views/components/decisions/card.blade.php`) renders only: header, blocking badge, a one-hop parent quote, the question, the answer affordance, and a "View more" flyout. Everything richer — project, subject brief + spec excerpt, linked-context list, `assigned_to`/`asked_by`/type/timestamps — is loaded but hidden in the flyout (`components/decisions/detail.blade.php`) or the `/decisions/{id}` page. So a large share of the fix is **promoting already-loaded context onto the feed face**, not new plumbing. **Two real capture/depth gaps beyond display:** - **Capture:** `DecisionAutoLinkService` v1 (`app/Services/Briefs/DecisionAutoLinkService.php:30`) auto-links **only the subject brief** (as `reference`). It never links the originating **session/segment, commits, or feedback**, though the polymorphic `decision_links` table supports all of them. In practice the "linked context" list is empty or one row. - **Depth:** the detail shows only the brief's **title + 520-char spec excerpt** (`detail.blade.php:103`) — not the brief's own context web (its linked sessions/commits/trace/dependencies/participants/**source feedback**/**parent epic**), which the **brief detail page already renders** (`resources/views/livewire/briefs/show.blade.php`). This is the richest untapped seam: "what the decision is about" ≈ the subject brief's provenance graph, surfaced inline. **Context we can surface (all already modeled — Explore-confirmed):** project + room scope; subject brief (title/spec/status) + provenance chips ("from feedback #N", "epic · title" — already a pattern in `briefs/show` header, `:66`/`:73`); `decision_links` (session/segment, commits, scratchpads, feedback, related briefs); the role being asked (`assigned_to`) + asker (`asked_by`); `decision_type` + options (with `recommended`/`detail`); blocking; the answer thread (`parent_answer` → `decision_answers` chain → follow-ups); gated-set siblings + k/N. **Proposed direction — three seams:** 1. **Display (promote):** redesign the decision card to lead with a **provenance header** (project chip · "from brief #N / feedback #N / epic" chip · role-being-asked) and a one-glance **"what this is about"** block (subject brief title + spec excerpt + top links) ABOVE the question + affordance — so the feed answers what/why/for-whom without a click. Reuse bloom `x-ui.card`/`badge` + the `briefs/show` provenance-chip pattern; `x-decisions.card` already supports embedding (`:view-more=false`). 2. **Capture (enrich auto-link):** extend `DecisionAutoLinkService` to link the originating **session/segment**, related **commits**, and **feedback** at ask time (or resolve them from the subject brief's own links), so the context list is actually populated. 3. **Depth (assemble the web):** extend the decision context serializer (`RecallService::decisionSummary()`, `:919`, beside `briefDetail`/`briefRelations`) to include the subject brief's linked sessions/commits/trace/deps/participants/source-feedback/parent — rendered progressively (glance on card → expand for full). **Acceptance (draft):** each /decisions card shows project + originating brief/feedback provenance + a plain-language "what this is about" + the role being asked, before any click; blocking + gated-set state obvious; deep context one expand away; answer affordances unchanged/unregressed; empty/standalone (no-subject) decisions degrade gracefully. **Build path:** strong candidate for a **design-loop pass** (writer↔reviewer → design doc + sequenced PR plan) given the UX ambition — recommend that before build. Two design decisions opened (below). Holding at `refining` pending operator direction.

    agent · flower-refine
  20. status change 1d ago
    agent · flower-refine
  21. note added 1d ago

    Operator (2026-07-04): The **/decisions** feed presents decisions the operator must answer but delivers **no surrounding context** — it doesn't even show the **project**, let alone links to the brief / session / feedback the decision came from, or *what* the decision is asking / about / around. This feed is a **huge lever on the whole platform's usefulness** — real decisions get made here, in a feed. We should **DELIVER the context** the way an agent would brief a human (or another agent): use flower's own data + tools to surface, inline, what each decision is about — the originating brief and its spec, the project, related session/segment, feedback, the role being asked, prior answers/threads — instead of offering nothing. Goal: dramatically improve the /decisions UI/UX so a human can make each decision well without leaving the page. Refine into a concrete design direction + spec (candidate for a design-loop pass).

    agent · flower-refine
  22. participant joined 1d ago
    system · flower-refine

epic · dependencies

Relationships

epic parent

depends on

No dependencies — dispatchable once planned.

agents · waves

Participants

  • flower-refine participant · active
  • operator:mike participant · active
  • flower-orchestrator participant · active
  • flower-216-worker participant · active
  • system:commit-trailer participant · active

trace · graph

Links

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