Repository navigation
Redesign step 3 and the Actions panel, and match every export - #23
Merged
Merged
Conversation
The mitigations table had three columns with the two questions only in a sticky header, so by the third risk people had lost track of which column meant what, and the risk column wasted a third of the width. Each risk is now a full-width heading with both questions repeated under it, side by side from sm up and stacked below that. Empty lines get a dashed outline and an always-visible "Add an idea" box appears once every line has text, so an unanswered question visibly asks for input.
Tier, risk, prompt and mitigation each had their own border and
background, so four levels of lines competed for attention. Now each
level gets exactly one treatment:
- Tier: colored label text on a neutral background
- Risk: a white card with a tier-colored left stripe and bold text
- Prompt: small muted text
- Mitigation: plain text, editable affordance only on hover and focus
Adds rm-{tier}-text tokens (AA on surface and well in both themes) and
an rm-well token for the recessed area the cards sit on.
Step 3:
- Starring an idea moves it to the bottom of the starred block at the
top of its list; unstarring drops it just below the block. The data
is reordered, not just the display, so arrow keys and Enter still
match what's on screen. Splitting a starred line puts the new line
after the block rather than inside it.
- The two questions now share subgrid rows, so when one wraps to two
lines both lists still start at the same height.
Actions panel:
- Rows show only the action. The truncated risk chip under each one is
gone; the risk can still be traced back from step 3.
- Actions are grouped under their tier ("For highest risks" and so on)
in a card with the tier's stripe, matching step 3. Other actions get
their own neutral group.
- Rows drop their resting border and bold weight, like step 3 lines.
Removes GROUP_HEADER_CLASS, which nothing uses any more.
Each mitigation line gets a grip (shown on hover on pointer devices, faintly always on touch). Dragging uses the same feel as dragging risks: tilted preview, dimmed source, insertion bar. - A line can move within its list, to the other question on the same risk, or to any other risk, including one in a different tier. - It keeps its star wherever it goes, and the drop is clamped so it never lands across the destination's starred block: starred lines stay at the top of every list. - The insertion bar shows for every valid target, including a drop that leaves the line where it is, so when the clamp stops a starred line from going lower you can see where it will actually land. Pure pieces live in dropPosition.ts (clampStarredBeforeId, insertionEdge, now shared with dropIndicatorFor) and the pointer handling in useMitigationDrag.ts.
Actions, in every format: listed without the source risk or its type,
grouped by tier ("For highest risks" and so on) like the Actions panel,
with other actions last under "Other".
Step 3:
- PDF: tier label in its color, then each risk as a white card with a
tier stripe and its two questions side by side over their lists.
- Rich text: the same per-risk layout. The stripe is a filled table
cell because Docs and Word keep cell backgrounds but drop borders.
- Worksheet CSV: each risk on its own row, its two questions under it,
then its ideas, instead of a three-column table.
- Markdown: grouped by tier like the app, with the questions as labels.
- Flat CSV stays a sortable table; its types now read "Reduce
likelihood" and "Limit harm".
Shared sources so the formats can't drift: actionGroups.ts derives and
groups actions for the panel and every export (replacing three copies
of the derivation), and exportColors.ts holds the light-theme tier
colors for the PDF and clipboard HTML.
Adds an AGENTS.md section listing every export format and its file, the shared sources to read from, and how to check a real PDF render.
nimble-turtle
enabled auto-merge (squash)
October 18, 2026 22:28
|
Note Currently processing new changes in this PR. This may take a few minutes, please wait... ⚙️ Run configuration
📒 Files selected for processing: 37
✨ Finishing Touches
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
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.
What changed
Step 3 was a three-column table with the questions only in a header, and four header levels (tier, risk, question, idea) all competing with borders and fills. The Actions panel repeated a truncated risk chip under every action. This reworks both and brings every export along.
Step 3
Actions panel
Exports
actionGroups.tsis now the single source for which mitigations are actions and how they group;exportColors.tsholds the tier colors for the PDF and clipboard HTML.Tokens
rm-{tier}-text(AA on surface and well in both themes) andrm-well.Verification
yarn lint,yarn typecheck,yarn test(637 tests) pass.After merge
WEBCAT-sign from
main(yarn webcat:sign, or accept the pre-push prompt).🤖 Generated with Claude Code