Send button misstyled on report feedback window - #114
Merged
Conversation
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.
Resolves danthebaker/gatewaze-roadmap#31
Gates
Spec
Found a directly related spec (issue #27, same SE module). Let me read it.The prior spec (issue-27) touches the same widget and confirms module conventions. Now let me explore the actual code to ground issue #31 and resolve every review objection. Let me read the key files.The root cause is clear. Now I must nail the test-harness objection precisely. Let me read the test that documents the heroicons peer blocker, the stubs, and the vitest config.Now let me confirm the admin
Button(Radix wrapper), the<Theme>scope, the second usage site, and the module's vitest env.Let me confirm the module's vitest env and test command, plus check how@/and heroicons resolve (host-provided peers).I have everything confirmed. Let me verify one more thing — that no other in-app native primary style should be preferred, then write the spec.All confirmed. The RadixButtonis used across many module components, but onlyTriageCopilotrenders in the detached root — so the fix is narrowly scoped to its Send button. Writing the spec now.Now let me log the spec to project memory underspecs/so future runs can build on it.There's no wiki-write tool exposed in this session (onlywiki_search/wiki_read) — spec logging to project memory is handled by the run harness, so I've searched, built on the prior spec, and written the deliverable to the workspace root. Done.Spec drafted →
SPEC-issue-31.mdPrior-memory check: No prior spec targets #31. Found and built on
specs/issue-27(same widget/component, establishes the module's two governing conventions) and notedspecs/issue-13(same design system). No contradiction.Root cause (confirmed in code): The "Send" button is
TriageCopilot.tsx:110—<Button size="sm">from@/components/ui, which wraps@radix-ui/themesRadixButton(gatewaze/…/Button/index.tsx:3,97). Radix Themes buttons draw all sizing/radius/accent from CSS vars scoped to<Theme>. Butadmin/index.ts:16-24self-mountsReportFeedbackWidgetinto a detached root ondocument.body, outside the app's<Theme>(App.tsx:22 → RadixThemeBridge). No theme vars → grey background + collapsed (tall/narrow) geometry. Matches the report exactly, and it surfaces on/people/:id/profilebecause the widget floats on every admin page.Approach: Swap the Radix
<Button>for a native Tailwind<button>(scope-independent), matching the widget's own primary "Create issue" button (bg-blue-600 … text-white). Can't wrap the root in<Theme>— that needs@radix-ui/themesin a module file, which every CLAUDE.md prohibits.Writable repo:
gatewaze-modulesonly (SE module). NewtriageButtonStyles.ts, editTriageCopilot.tsx, new test.Every BLOCKED-review objection resolved
Buttonis Radix-wrapped; detached-root mount is root cause; dual usage (ReportFeedbackWidget.tsx:119+SoftwareEngineerTab.tsx:707);@radix-ui/themesprohibition; native-swap + R1 note sound.vitest.config.ts:environment: 'node'(no jsdom), aliases stub only@gatewaze/shared/modulesandexpress. ImportingTriageCopilotpulls@heroicons/react/24/outline(line 16, kept) and@/lib/supabase(line 14) — neither resolves, so the module throws at import time, before anyrenderToStaticMarkupruns. heroicons isn't in the module's deps (host-provided peer), exactly asprojectAvatarUtils.ts:9/project-avatar.test.ts:6-8document; test globs are.test.tsonly (no JSX lane). The spec discards the render-markup approach and instead follows the module's proven convention: extract the class string into a pure.tshelper and unit-test it (mirroringproject-avatar.test.ts). No silent omission of the heroicons peer — it's named as the decisive blocker.The spec includes test plan, R1–R4 risks, security/CI note, and out-of-scope. No code was implemented.