design: simulated preview of the 22-workflow composer picker (screenshots only, nothing implemented) - #328
Closed
leoncheng57 wants to merge 16 commits into
Closed
design: simulated preview of the 22-workflow composer picker (screenshots only, nothing implemented)#328leoncheng57 wants to merge 16 commits into
leoncheng57 wants to merge 16 commits into
Conversation
…PPROXIMATION-desktop.png
…PPROXIMATION-mobile.png
Owner
Author
|
Closing: these previews did their job. They drove four fixes that shipped in #330 — per-id icons instead of a The catalogue they depict is also now out of date: 22 workflows became 14, and Investigate is gone. Superseded rather than rejected. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Purpose: let the 22-workflow end state be reviewed now, without waiting for the
sibling conversion of 16 slash-commands into composer workflows.
What was simulated, and how faithfully
/api/workflowsdescriptionsdescription:frontmatter ofagent-skills/commands/*.mdinjectors.mdfiletitlesCaveats you must read before trusting an image
client/lib/workflows.ts(
WORKFLOW_GROUPS, three groups keyed by literal id). A stubbed catalogue alonecannot produce six groups, so after the picker painted, the rendered rows were
re-parented into six relabelled sections. Every row is still the genuine component
with genuine content; only the section headings and row order were rearranged.
approximation —
managed-child(which already renders a single required"Objective" textarea) was opened and its child-specific chrome (agent picker, model
picker, managed-child notes) was hidden. The filename says
APPROXIMATION.design-doc-prototype's zero-field pathbecause that is the only workflow that reaches the preview stage with no input.
Its catalogue entry was swapped to carry
system-design-artifacts' real 160-linebody; the visible prompt line and the
server-resolved from id "…"label wererelabelled so the image reads coherently.
full-listandtodays-groupingimages have the dialog's height clamp liftedso all 22 rows fit one image. That is not a state the app can reach — it exists
only so the whole set can be judged at once. Use the plain
workflows-22-picker-*images for the real, clamped viewport.makes rows taller than shown — so the scrolling numbers below are optimistic.
1. Does 22 still scan? — the main question
All 22, six groups, height clamp lifted so the whole set is visible at once:
And what you actually see in the real, clamped dialog — desktop then mobile:
Scrolled to the bottom of the same dialog:
Mobile, all 22 at once:
Yes, it needs scrolling, and a lot of it. Measured from the captures:
Roughly 4½ rows are visible at a time out of 22 on desktop, and 4 on mobile.
Group headings help, but at most one and a half groups are on screen at once, so the
six-way structure is never actually visible — you can only ever see the label you are
standing in. The organising idea does not survive the viewport.
2. Side-by-side with today's reminder picker (12 tiles, unmodified)
This is the most useful comparison in the set. 12 reminders in a 3-column grid of
compact, title-only tiles get four groups and ten of twelve tiles onto one desktop
screen. 22 workflows in 1-column full-width rows with a 2–3 line description get
four. The difference is the row format, not the count — and the workflow picker is
already 672px wide, most of which is empty to the right of the shorter descriptions.
3. Generic-argument form (APPROXIMATION — this kind does not exist yet)
Read as
/goal: title, the real frontmatter description as subtitle, one labelledrequired textarea, Cancel + "Preview and confirm". This shape looks right and needs no
new layout — the existing dialog already does it. The one thing to decide is the hint
text:
(required — substituted for $ARGUMENTS in the trusted body)is shown here, andsaying where the argument lands seems worth the words, since the injector below it
is visible and contains a literal
$ARGUMENTS.4. Preview stage with the longest converted body
system-design-artifacts, 160 lines / 8,110 characters:max-h-48is not adequate. The clamp is 192px, which attext-xs/leading-relaxedshows about 8 of 160 lines — roughly 5% of the body — inside a scroll region with no
indication of how much lies below. For scale, today's longest injector is
pr-snippet-reviewat 19 lines / 1,917 characters, which nearly fits. The convertedcommands are up to 8× longer by line count.
This matters more than a normal overflow nit because decision #21 makes the visible
injector the security story: workflows invert the reminder secrecy rule specifically
so the user can read the exact trusted text before submitting. A 5% window does not
deliver that. It does not overflow or clip — it scrolls correctly — it is just far too
small to be read in.
Two things that are broken in today's code, not in the mock
Grouping: 16 unknown ids all fall into one "Other"
This is the unretouched render of the 22-workflow catalogue against today's client:
groupWorkflows()matches ids against a hardcodedWORKFLOW_GROUPSand sweepseverything else into
Other. Result: Review 2, Coordinate 3, Document 1, and a16-row undifferentiated "OTHER". If the conversion ships without extending
client/lib/workflows.ts, this is what users get. Worth an explicit checklist item onthe sibling PRs.
Icons: all 16 new rows get the same fallback circle
WORKFLOW_ICONSinclient/components/workflow-picker.tsxis a hardcodedRecord<string, LucideIcon>keyed by id, falling back toCircle. Every converted rowin these images shows an identical empty circle, while the original six have distinct
glyphs. In a 22-row list the icon rail is the main scanning aid, and here it carries no
information for 16 of 22 rows. Either add icons per workflow or drop the rail for
unmapped ones — an identical glyph repeated 16 times is worse than none, because it
implies a distinction that is not there.
Also worth a look: search is noisier at 22
matches()searchestitle + description + id. Queryingreviewreturns"Send an update to another session" and "Start a DCA session" — because their
descriptions contain "preview" and "reviewing". With six workflows that was
harmless; with 22 the description field turns a precise query into a fuzzy one. If
search is meant to be the escape hatch from the scrolling above, it should probably
weight title/id matches above description matches, or drop description from the
haystack.
Does the mobile sheet still work?
Structurally, yes. At 390×740 the bottom sheet renders correctly at 22 items: no
clipping or horizontal overflow, the search field and the footer hint stay pinned while
only the list scrolls, group headings survive, rows wrap rather than truncate, and the
safe-area padding holds. The problem is purely quantity — ~4 rows per screen and about
five screenfuls to reach the last one.
Are the six group labels sensible?
Mostly. Review, Investigate and Document read cleanly. Two seams are soft:
verifyandworktree-upsit in Execute whilestandupandleaving-now-wrap-upsit in Ship, but all four are "end of a work session" actions.Ship only has two members and may not earn a heading.
session (
session-update,session-handoff) with creating new agents(
managed-child,start-dca-session,manager-children,native-worktree-subagents). That is plausibly two groups, and splitting it wouldalso even out the distribution (4/6/4/2/4/2 today).
Suggested follow-ups (not done here — this PR is preview-only)
title-only tile grid is the existing in-repo answer to "too many to scan", and it is
two columns wider in the same space.
WORKFLOW_GROUPSin the same change that adds the workflows, or the sixgroups silently become one "Other".
max-h-48on the injector<pre>; at 160 lines the current clampundercuts the "read the trusted text before you send" contract.
descriptionfrom the search haystack.Reproducing
The capture spec was transient and is deleted. It stubbed
page.route("**/api/workflows*")with the 22-entry catalogue, read the 16 descriptions/bodies from
agent-skills/commands/*.mdat runtime, and wrote to the gitignored
screenshot-output/. All images are dark mode,desktop 1280×800 and mobile 390×740, captured as element screenshots of the popup rather
than full pages; the largest is 231 KB.