|
| 1 | +--- |
| 2 | +title: "Concurrent agent searches queue into a search-results column — fire many, deal with them as they come" |
| 3 | +lede: "Agent searches take minutes, and today each one hijacks a single column the operator must babysit. Wanted: a search-results microfrontend on the far right — every fired search appends a collapsed card with status, progress, and expected wait; a signal fires when results land; expand to act, mark complete to clear. Run several at once, triage on arrival." |
| 4 | +date_created: 2026-07-24 |
| 5 | +date_modified: 2026-07-24 |
| 6 | +authors: |
| 7 | + - Michael Staton |
| 8 | +augmented_with: |
| 9 | + - Claude Code on Claude Fable 5 |
| 10 | +semantic_version: 0.0.0.1 |
| 11 | +tags: |
| 12 | + - Issue |
| 13 | + - Usability |
| 14 | + - Augment-It |
| 15 | + - Didi-Crawl |
| 16 | + - Search-And-Add |
| 17 | + - Microfrontends |
| 18 | + - Concurrency |
| 19 | +status: Open · Jotted |
| 20 | +--- |
| 21 | + |
| 22 | +# The search-results queue |
| 23 | + |
| 24 | +## The two-part observation (operator, 2026-07-24 evening) |
| 25 | + |
| 26 | +1. **Waiting is blind.** Crawls run 60–210s with one frozen status line — |
| 27 | + no liveness, no progress, no expected wait. Already flagged |
| 28 | + ([[Crawl-Progress-Is-A-Black-Box-Needs-Traces-The-Operator-Can-Watch]]), |
| 29 | + but the deeper problem is the interaction model, not just the missing |
| 30 | + spinner detail: |
| 31 | +2. **One search monopolizes the surface.** The operator should click agent |
| 32 | + search in several places — links here, streams there, a team crawl on a |
| 33 | + third org — and have each land in the **furthest-right column** as its |
| 34 | + own entry, running simultaneously. Serial babysitting of a minutes-long |
| 35 | + operation is the real usability failure. |
| 36 | + |
| 37 | +## The design (operator-specified) |
| 38 | + |
| 39 | +- **Its own microfrontend — `search-results`** — the rightmost column: a |
| 40 | + queue of search cards, newest appended as fired, from ANY door (the 🤖 |
| 41 | + buttons, 🔍 manual searches eventually, chat-fired crawls). |
| 42 | +- **Collapsed by default.** Each card/row shows: what's searching (target · |
| 43 | + org), **status** (queued / running / done / failed), **progress**, and |
| 44 | + **how long the wait might be** (live timings exist: links ~90s, team |
| 45 | + 147–211s observed — show elapsed vs. typical). |
| 46 | +- **Arrival signal.** When results land, the card signals (badge / pulse / |
| 47 | + count) — the operator notices without polling it. |
| 48 | +- **Expand to act.** Toggling a card open reveals the results and their |
| 49 | + actions — the per-row ➕ accepts for links/streams, the staged-people |
| 50 | + accept gates for team crawls. |
| 51 | +- **Mark complete.** An explicit done action clears the card. The queue is |
| 52 | + the operator's worklist; cards persist until dismissed, so nothing |
| 53 | + silently vanishes and nothing stale masquerades as current. |
| 54 | + |
| 55 | +## What this absorbs and builds on |
| 56 | + |
| 57 | +- **Supersedes [[Search-Column-Holds-Stale-Results-New-Agent-Searches-Dont-Reload-It]]** |
| 58 | + (#36): the reload-vs-stale question dissolves — every search is its own |
| 59 | + card with its own provenance; there is no single column to go stale. |
| 60 | +- **Gives #35's progress traces their home**: the per-card progress line is |
| 61 | + where `organization.crawl.progress` frames render. |
| 62 | +- **Enabled by the claim protocol** (#41): concurrent minutes-long invokes |
| 63 | + surviving reconnects is the substrate that makes a queue of them viable. |
| 64 | +- **Feeds #22** (component library): search cards, result rows, and accept |
| 65 | + gates shared across targets is exactly the component-extraction case. |
| 66 | + |
| 67 | +## Open questions |
| 68 | + |
| 69 | +- [ ] Where does queue state live — the new remote's own runes state |
| 70 | + (lost on remount), localStorage, or workspace frames (survives)? Lean |
| 71 | + workspace-backed: the queue IS operator state worth surviving a refresh. |
| 72 | +- [ ] Does the team crawl's staged-people flow move INTO the expanded card, |
| 73 | + or stay on the workbench People section with the card deep-linking to it? |
| 74 | +- [ ] Do manual 🔍 searches join the queue too (unifying all search into |
| 75 | + one surface), or only agent searches in v1? |
| 76 | +- [ ] Wait estimates: hardcode from observed timings per target, or track a |
| 77 | + rolling per-target average server-side? |
0 commit comments