The overflow sheet behind the ··· on a step. The app shipped an undesigned legacy version — two dead taps and a doctrine violation — and this board replaces it. The whole stance in one sentence: a sheet earns its rows. Every row does one real thing; a menu item that does nothing when tapped is worse than its absence. Below: your own step, someone else's step, the delete confirm, what was cut, and the bright lines that keep the tray honest.
The sheet on a regular step you posted. Three rows, three real actions: Share, Mark as milestone (with its ruled footnote), and Delete step in danger ink. No filler — nothing is here to look complete.
Share posts the system share sheet with the step's public URL — and since sharing is one of the three step-with actions, it also counts, not just a courtesy row. Mark as milestone flips to Remove milestone with a filled diamond once the step is already marked, carrying the same quiet footnote both ways.
The same sheet dressing on a step that isn't yours. Only two rows survive: Share and Report step. Reporting is protection, not danger, so it stays ink — and its own flow takes over once tapped.
No “turn on notifications for this step” — the notification spec has no per-step subscriptions and never will; notifications announce people, not mechanics. No mute. No block here either — blocking lives on the profile, where the whole relationship is. Tapping Report hands off to the report flow's own sheet.
Delete is destructive, so it asks once — with an honest sentence and a styled, labeled primary. The destructive action is the button that looks like the action, not a link hiding beside a big Cancel.
Never a link hiding beside a big Cancel. The legacy sheet inverted exactly this — its primary button said “Cancel” and Delete hung off a plain text button, training the thumb to fear the wrong control. Here the danger CTA is labeled with the real verb and “Keep it” is the quiet way out.
The shipped legacy sheet, drawn small — every one of these five rows was live UI in the app. Two are struck through: they did nothing, or they broke doctrine. The three that stayed each still earn their place.
Edit step went nowhere — no designed edit flow exists, so it's parked for its own future ruling before anyone re-adds it. “Turn on notifications for this step” was both a dead tap and a doctrine violation: a borrowed social-app pattern with no per-step subscription behind it, and none is coming.
The rules that keep the tray a tool tray. Break one and the sheet starts growing rows to look feature-rich instead of doing work.
The sheet is a tool tray, not a feature list.
report.html / report-crisis.html, the milestone
footnote and its “Reached with …” memory line live on milestones-board.html,
and the seven notification switches live on settings-notifications.html.
Source of truth: DESIGN.md “Step sheet board (2026-07-13).” Danger ink is
--danger #B3322E and appears on exactly two elements across the whole board:
the Delete row and the Delete CTA.