flower
/
All briefs
complete draft note flower queued for loop

Explore clickable/slug references for briefs, feedback, projects, sessions (session-nav UX)

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.

#51 done fresh flower · flower/78-discovery
agent: codex 2 scratchpads
You are being dispatched from flower Brief #78: Explore clickable/slug references for briefs, feedback, projects, sessions (session-nav UX)

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

Target:
- project: flower (/Users/mikeferrara/Documents/code/flower)
- branch: flower/78-discovery
- worktree: not specified
- kind: fresh

Current brief spec:
## Objective
Discovery + recommendation (NOT implementation): define a canonical way for agents and the UI to **reference and open** flower entities (briefs, feedback, projects, sessions, roster daemons) instead of bare numbers, and propose a small change set. The deliverable is a recommendation to **discuss before any build**.

## Problem
In multi-agent sessions, flower items are referenced by bare numbers everywhere (`#67`, `feedback #49`, `proj 16`, `session 0410d7d4…`). With many items in flight this is hard to track, and there is no easy way to open the referenced item. Operator pain raised 2026-07-02.

## Discovery questions (answer each with a recommendation)
1. **Reference / linking scheme.** Weigh: (a) http deep links to the item page (e.g. `https://flower.test/briefs/{id-or-slug}`, `/feedback/{id}`, `/projects/{slug}`, a session view); (b) Solo's `solo://` deep-link scheme — determine whether it can address flower entities at all, or only Solo projects/scratchpads/todos (investigate; cf. `solo://proj/49/scratchpad/…`); (c) both, and when to use which. **Recommend one canonical scheme.**
2. **Slug vs numeric id as the PRIMARY human reference.** Briefs already have slugs (more memorable/greppable); numbers are terser. Recommend a convention per entity type (briefs, feedback, projects, sessions, daemons) — and note which entities even have slugs today.
3. **Inline-link emission policy for agents.** When should an agent emit a link when it references an item? Tradeoff: navigability vs message verbosity. **Hard constraint: the operator does NOT want every reference bloated with links.** Candidate policies to weigh: link only on first reference per turn; only in summaries/checkpoints; or a "resolve these ids" affordance instead of always inlining. **Recommend a default.**
4. **UI affordances.** Which of: clickable ids in `/briefs`, `/feedback`, `/roster`; a copy-link action; human-facing cross-links between related briefs/feedback (briefs already auto-link participants/commits — extend to human-facing anchors). **Recommend a minimal high-value set.**

## Investigation scope (keep it light — discovery, not a build)
- Existing routes / Livewire pages and their URL shape (what resolves by id vs slug today).
- Which entities have slugs now (briefs do; feedback / projects / sessions / daemons?).
- Whether `solo://` can target flower entities (vs only Solo projects/scratchpads/todos).
- Current agent reference conventions in charters/playbooks (bare numbers everywhere).

## Deliverable
A concise recommendation covering **(reference format, http vs `solo://` vs both, slug-vs-number per entity, inline-link policy)** PLUS a **small proposed UI + agent-convention change set** (sized as thin slices). Written up for operator discussion. NOT an implementation.

## Constraints / non-goals
- Do NOT over-build; this is a discovery brief.
- Do NOT bloat every reference with links (hard operator constraint).
- Implementation of the linking scheme / UI is **out of scope here** — it becomes separate follow-up brief(s) AFTER the recommendation is discussed ("to discuss before building").

## Definition of done
Recommendation written up (as a brief note or linked doc) and posted for operator discussion; brief ready to hand back to the operator/orchestrator for the build decision.

Recent/key trace events:
[1] participant_joined flower-orchestrator: (no body)
[2] note_added flower-orchestrator: Operator pain (raised 2026-07-02): in these multi-agent sessions we refer to briefs/feedback/projects/sessions by BARE NUMBERS everywhere (#67, feedback #49, proj 16, session 0410d7d4…). With many items in flight it's hard to track what's what, and there's no easy way to open the referenced item. Explore + recommend (discovery brief, don't over-build):
1. A canonical linking scheme for referencing flower items — options: (a) http deep links to the item page (e.g. https://flower.test/briefs/{id-or-slug}, /feedback, /projects/{slug}, session view), (b) Solo's `solo://` deep-link scheme (does it cover flower entities, or only Solo projects/scratchpads/todos? — investigate), (c) both.
2. Slugs vs numeric ids as the PRIMARY human reference for briefs (briefs already have slugs). More memorable/greppable; but numbers are terser. Recommend a convention.
3. Whether/when agents should EMIT links inline when they reference an item — tradeoff: navigability vs. message verbosity. Maybe: emit a link the first time an item is referenced in a turn, or only in summaries/checkpoints, or provide a "resolve these ids" affordance rather than always inlining. Operator explicitly does NOT want every reference bloated with links if that's the only option.
4. UI affordances: clickable ids in /briefs, /feedback, /roster; a copy-link action; cross-links between related briefs/feedback (briefs already auto-link participants/commits — extend to human-facing anchors).
Deliverable: a recommendation on (reference format, http vs solo://, slug-vs-number, inline-link policy) + a small proposed UI/agent-convention change set. To discuss before building.
[3] participant_joined operator:mike: (no body)
[4] status_change operator:mike: (no body)
[5] link_added flower-orchestrator: (no body)
[6] participant_joined flower-refine: (no body)
[7] plan_proposed flower-refine: ## Objective
Discovery + recommendation (NOT implementation): define a canonical way for agents and the UI to **reference and open** flower entities (briefs, feedback, projects, sessions, roster daemons) instead of bare numbers, and propose a small change set. The deliverable is a recommendation to **discuss before any build**.

## Problem
In multi-agent sessions, flower items are referenced by bare numbers everywhere (`#67`, `feedback #49`, `proj 16`, `session 0410d7d4…`). With many items in flight this is hard to track, and there is no easy way to open the referenced item. Operator pain raised 2026-07-02.

## Discovery questions (answer each with a recommendation)
1. **Reference / linking scheme.** Weigh: (a) http deep links to the item page (e.g. `https://flower.test/briefs/{id-or-slug}`, `/feedback/{id}`, `/projects/{slug}`, a session view); (b) Solo's `solo://` deep-link scheme — determine whether it can address flower entities at all, or only Solo projects/scratchpads/todos (investigate; cf. `solo://proj/49/scratchpad/…`); (c) both, and when to use which. **Recommend one canonical scheme.**
2. **Slug vs numeric id as the PRIMARY human reference.** Briefs already have slugs (more memorable/greppable); numbers are terser. Recommend a convention per entity type (briefs, feedback, projects, sessions, daemons) — and note which entities even have slugs today.
3. **Inline-link emission policy for agents.** When should an agent emit a link when it references an item? Tradeoff: navigability vs message verbosity. **Hard constraint: the operator does NOT want every reference bloated with links.** Candidate policies to weigh: link only on first reference per turn; only in summaries/checkpoints; or a "resolve these ids" affordance instead of always inlining. **Recommend a default.**
4. **UI affordances.** Which of: clickable ids in `/briefs`, `/feedback`, `/roster`; a copy-link action; human-facing cross-links between related briefs/feedback (briefs already auto-link participants/commits — extend to human-facing anchors). **Recommend a minimal high-value set.**

## Investigation scope (keep it light — discovery, not a build)
- Existing routes / Livewire pages and their URL shape (what resolves by id vs slug today).
- Which entities have slugs now (briefs do; feedback / projects / sessions / daemons?).
- Whether `solo://` can target flower entities (vs only Solo projects/scratchpads/todos).
- Current agent reference conventions in charters/playbooks (bare numbers everywhere).

## Deliverable
A concise recommendation covering **(reference format, http vs `solo://` vs both, slug-vs-number per entity, inline-link policy)** PLUS a **small proposed UI + agent-convention change set** (sized as thin slices). Written up for operator discussion. NOT an implementation.

## Constraints / non-goals
- Do NOT over-build; this is a discovery brief.
- Do NOT bloat every reference with links (hard operator constraint).
- Implementation of the linking scheme / UI is **out of scope here** — it becomes separate follow-up brief(s) AFTER the recommendation is discussed ("to discuss before building").

## Definition of done
Recommendation written up (as a brief note or linked doc) and posted for operator discussion; brief ready to hand back to the operator/orchestrator for the build decision.
[8] status_change flower-refine: (no body)
[9] refinement flower-refine: ⚠️ GROUNDING REVIEW (2026-07-03) — factual correction for the recommendation (brief stays planned; this sharpens Q2/Q1):

"Briefs already have slugs" is true at the DATA layer but MISLEADING at the URL layer. `briefs.slug` is a unique auto-generated column (`BriefService::uniqueSlug()`), BUT the route `/briefs/{brief}` uses default primary-key binding — NO model overrides `getRouteKeyName` anywhere — so brief pages are reachable only by NUMERIC ID today. Making a brief slug-openable is a small net change (`getRouteKeyName` or `{brief:slug}`).

Accurate slug/route inventory: only `Project` resolves by slug in routes (`/projects/{project:slug}`); `Brief` is slug-capable-but-id-routed; `Feedback`, `Session`, `DaemonAgent` have NO slug + no override → id-only (sessions also carry a `session_id` string but the route binds by pk). So the honest answer to Q2 (slug vs number per entity) = projects: slug (canonical); briefs: slug-capable but id-routed; feedback/sessions/daemons: id-only.

`solo://` is neither emitted nor consumed anywhere in flower (the app talks to Solo via solo-cli only), so "can solo:// target flower entities" (Q1) is genuine EXTERNAL investigation, correctly scoped as discovery.

Precedent to cite: `/roster/{daemon}` detail already exists (its route comment calls it the concrete instance of this clickable-refs idea), and briefs already auto-link participants/commits via `BriefAutoLinkService` — real substrate for "extend auto-links to human-facing anchors".
[10] link_added flower-refine: (no body)

Recommended linked context:
{
    "todos": [],
    "scratchpads": [
        {
            "id": 346,
            "solo_scratchpad_id": "1026",
            "name": "Orchestrator HANDOFF — flower build (live state)",
            "archived": false,
            "revision": 93
        },
        {
            "id": 375,
            "solo_scratchpad_id": "1067",
            "name": "flower-refine — reset handoff (2026-07-03 #2)",
            "archived": false,
            "revision": 2
        }
    ]
}

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: #78` 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. status change 2d ago
    agent · flower-78-worker
  2. dispatched 2d ago

    Dispatch request #51 marked done.

    agent · flower-78-worker
  3. refinement 2d ago

    ## Discovery recommendation — references + clickable opens Verified current state: - Routes: `/projects/{project:slug}` is the only slug-bound target route. `/briefs/{brief}`, `/feedback/{feedback}`, `/sessions/{session}/segments`, and `/roster/{daemon}` are id-bound today. `/roster/{daemon}` already exists and is explicitly documented as a concrete instance of this clickable-refs idea. - Models/migrations: `projects.slug` and `briefs.slug` exist. No relevant target model overrides `getRouteKeyName()`. Feedback has no slug. Session has `external_session_id`, but the page route binds by internal `sessions.id`. DaemonAgent has `actor_ref`, `solo_process_id`, and `session_id`, but no slug. - Solo: the Solo app registers the `solo` URL scheme, and flower charter defaults cite `solo://proj/49/scratchpad/...`; the local Solo discovery endpoints cover Solo projects/processes/scratchpads/todos, not flower briefs/feedback/sessions/roster. I found no evidence that `solo://` can address flower entities. ### 1. Canonical reference / open scheme Recommend APP_URL-generated flower HTTP links as canonical for flower entities. Use absolute links when copying into agent/operator text, relative links inside the UI: - Brief: `/briefs/{id}` today. - Feedback: `/feedback/{id}`. - Project: `/projects/{slug}`. - Session: `/sessions/{db_id}/segments` today. - Daemon: `/roster/{daemon_id}`. Use `solo://...` only for native Solo resources (Solo project/process/scratchpad/todo) and only as a secondary/context link. Do not invent `solo://brief/...` unless Solo explicitly adds a bridge for flower entities. ### 2. Slug vs numeric id as primary human reference - Projects: slug primary. Use `project flower`, URL `/projects/flower`; numeric id is internal/supporting. - Briefs: numeric id primary for now: `Brief #78`. Keep slug/title as secondary display/copy metadata because slugs are searchable but long, while MCP tools, dispatch packets, commit trailers, and current routes are id-based. Follow-up should make brief slugs openable via `/briefs/{slug}` or a resolver, but keep `#id` visible. - Feedback: numeric id primary: `feedback #49`, URL `/feedback/49`; no slug today. - Sessions: external session id prefix primary in conversation (`session 0410d7d4...`), but copied/open links must carry internal route id `/sessions/{id}/segments` until a session-prefix resolver exists. - Daemons: operator-facing ref should be actor/proc-oriented when available (`flower-refine`, `proc 1050`); open link is `/roster/{daemon_agents.id}`. Fall back to `daemon #id` when there is no proc/actor context. ### 3. Agent inline-link emission policy Default to compact plain refs in running text. Do not auto-link every repeated reference. Emit links only when they materially help navigation: - first mention of the primary object in a final/checkpoint/handoff, - a small `Refs:` block when multiple items matter, - or an explicit operator request to open/resolve items. Preferred pattern: `Brief #78 — http://flower.test/briefs/78` once, then `#78` thereafter. For routine prose, keep `Brief #78`, `feedback #49`, `project flower`, `session <prefix>`, `proc 1050` unexpanded. ### 4. Minimal high-value UI affordances Thin slice A: add a shared copy-reference action to detail headers and key rows for briefs, feedback, projects, session rows, and roster daemon rows. Copy compact label + HTTP URL, e.g. `Brief #78 — <title> — http://flower.test/briefs/78`. Thin slice B: make existing id/slug labels visibly clickable where row-click already exists: brief `#id`, feedback `#id`, project slug, session id prefix, roster proc/session labels. Thin slice C: expose human-facing linked context on brief detail as anchors using existing linked data: feedback, sessions, commits, scratchpads/todos, participants. Do not add broad new auto-linking yet; first make existing links visible and copyable. Thin slice D, optional next: add a small resolver/search grammar for `B78`, `brief 78`, `feedback 49`, `project flower`, `session <prefix>`, and `proc 1050` that routes to the canonical HTTP page. ### Proposed follow-up change set 1. Brief slug-open support/resolver without replacing numeric ids. 2. Shared copy-reference UI component and per-entity reference formatter. 3. Dispatch/daemon prompt variables for `flower_base_url`, `brief_url`, and `project_url`. 4. AgentConventions / dispatch-packet text update with the concise link policy above.

    agent · flower-78-worker
  4. participant joined 2d ago
    system · flower-78-worker
  5. dispatched 2d ago

    Dispatch request #51 queued for flower.

    agent · flower-orchestrator
  6. status change 2d ago
    agent · flower-orchestrator
  7. link added 2d ago
    agent · flower-refine
  8. refinement 2d ago

    ⚠️ GROUNDING REVIEW (2026-07-03) — factual correction for the recommendation (brief stays planned; this sharpens Q2/Q1): "Briefs already have slugs" is true at the DATA layer but MISLEADING at the URL layer. `briefs.slug` is a unique auto-generated column (`BriefService::uniqueSlug()`), BUT the route `/briefs/{brief}` uses default primary-key binding — NO model overrides `getRouteKeyName` anywhere — so brief pages are reachable only by NUMERIC ID today. Making a brief slug-openable is a small net change (`getRouteKeyName` or `{brief:slug}`). Accurate slug/route inventory: only `Project` resolves by slug in routes (`/projects/{project:slug}`); `Brief` is slug-capable-but-id-routed; `Feedback`, `Session`, `DaemonAgent` have NO slug + no override → id-only (sessions also carry a `session_id` string but the route binds by pk). So the honest answer to Q2 (slug vs number per entity) = projects: slug (canonical); briefs: slug-capable but id-routed; feedback/sessions/daemons: id-only. `solo://` is neither emitted nor consumed anywhere in flower (the app talks to Solo via solo-cli only), so "can solo:// target flower entities" (Q1) is genuine EXTERNAL investigation, correctly scoped as discovery. Precedent to cite: `/roster/{daemon}` detail already exists (its route comment calls it the concrete instance of this clickable-refs idea), and briefs already auto-link participants/commits via `BriefAutoLinkService` — real substrate for "extend auto-links to human-facing anchors".

    agent · flower-refine
  9. status change 2d ago
    agent · flower-refine
  10. plan proposed 2d ago

    ## Objective Discovery + recommendation (NOT implementation): define a canonical way for agents and the UI to **reference and open** flower entities (briefs, feedback, projects, sessions, roster daemons) instead of bare numbers, and propose a small change set. The deliverable is a recommendation to **discuss before any build**. ## Problem In multi-agent sessions, flower items are referenced by bare numbers everywhere (`#67`, `feedback #49`, `proj 16`, `session 0410d7d4…`). With many items in flight this is hard to track, and there is no easy way to open the referenced item. Operator pain raised 2026-07-02. ## Discovery questions (answer each with a recommendation) 1. **Reference / linking scheme.** Weigh: (a) http deep links to the item page (e.g. `https://flower.test/briefs/{id-or-slug}`, `/feedback/{id}`, `/projects/{slug}`, a session view); (b) Solo's `solo://` deep-link scheme — determine whether it can address flower entities at all, or only Solo projects/scratchpads/todos (investigate; cf. `solo://proj/49/scratchpad/…`); (c) both, and when to use which. **Recommend one canonical scheme.** 2. **Slug vs numeric id as the PRIMARY human reference.** Briefs already have slugs (more memorable/greppable); numbers are terser. Recommend a convention per entity type (briefs, feedback, projects, sessions, daemons) — and note which entities even have slugs today. 3. **Inline-link emission policy for agents.** When should an agent emit a link when it references an item? Tradeoff: navigability vs message verbosity. **Hard constraint: the operator does NOT want every reference bloated with links.** Candidate policies to weigh: link only on first reference per turn; only in summaries/checkpoints; or a "resolve these ids" affordance instead of always inlining. **Recommend a default.** 4. **UI affordances.** Which of: clickable ids in `/briefs`, `/feedback`, `/roster`; a copy-link action; human-facing cross-links between related briefs/feedback (briefs already auto-link participants/commits — extend to human-facing anchors). **Recommend a minimal high-value set.** ## Investigation scope (keep it light — discovery, not a build) - Existing routes / Livewire pages and their URL shape (what resolves by id vs slug today). - Which entities have slugs now (briefs do; feedback / projects / sessions / daemons?). - Whether `solo://` can target flower entities (vs only Solo projects/scratchpads/todos). - Current agent reference conventions in charters/playbooks (bare numbers everywhere). ## Deliverable A concise recommendation covering **(reference format, http vs `solo://` vs both, slug-vs-number per entity, inline-link policy)** PLUS a **small proposed UI + agent-convention change set** (sized as thin slices). Written up for operator discussion. NOT an implementation. ## Constraints / non-goals - Do NOT over-build; this is a discovery brief. - Do NOT bloat every reference with links (hard operator constraint). - Implementation of the linking scheme / UI is **out of scope here** — it becomes separate follow-up brief(s) AFTER the recommendation is discussed ("to discuss before building"). ## Definition of done Recommendation written up (as a brief note or linked doc) and posted for operator discussion; brief ready to hand back to the operator/orchestrator for the build decision.

    agent · flower-refine
  11. participant joined 2d ago
    system · flower-refine
  12. link added 2d ago
    agent · flower-orchestrator
  13. status change 2d ago
    agent · operator:mike
  14. participant joined 2d ago
    system · operator:mike
  15. note added 2d ago

    Operator pain (raised 2026-07-02): in these multi-agent sessions we refer to briefs/feedback/projects/sessions by BARE NUMBERS everywhere (#67, feedback #49, proj 16, session 0410d7d4…). With many items in flight it's hard to track what's what, and there's no easy way to open the referenced item. Explore + recommend (discovery brief, don't over-build): 1. A canonical linking scheme for referencing flower items — options: (a) http deep links to the item page (e.g. https://flower.test/briefs/{id-or-slug}, /feedback, /projects/{slug}, session view), (b) Solo's `solo://` deep-link scheme (does it cover flower entities, or only Solo projects/scratchpads/todos? — investigate), (c) both. 2. Slugs vs numeric ids as the PRIMARY human reference for briefs (briefs already have slugs). More memorable/greppable; but numbers are terser. Recommend a convention. 3. Whether/when agents should EMIT links inline when they reference an item — tradeoff: navigability vs. message verbosity. Maybe: emit a link the first time an item is referenced in a turn, or only in summaries/checkpoints, or provide a "resolve these ids" affordance rather than always inlining. Operator explicitly does NOT want every reference bloated with links if that's the only option. 4. UI affordances: clickable ids in /briefs, /feedback, /roster; a copy-link action; cross-links between related briefs/feedback (briefs already auto-link participants/commits — extend to human-facing anchors). Deliverable: a recommendation on (reference format, http vs solo://, slug-vs-number, inline-link policy) + a small proposed UI/agent-convention change set. To discuss before building.

    agent · flower-orchestrator
  16. participant joined 2d ago
    system · flower-orchestrator

epic · dependencies

Relationships

epic parent

depends on

No dependencies — dispatchable once planned.

agents · waves

Participants

  • flower-orchestrator participant · active
  • operator:mike participant · active
  • flower-refine participant · active
  • flower-78-worker participant · active

trace · graph

Links

  • Scratchpad #375 execution
  • Scratchpad #346 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.