Skip to content

fix: thread composer send button sits mid-row instead of flush right#101

Merged
steipete merged 1 commit into
mainfrom
fix/composer-send-alignment
Jul 19, 2026
Merged

fix: thread composer send button sits mid-row instead of flush right#101
steipete merged 1 commit into
mainfrom
fix/composer-send-alignment

Conversation

@steipete

Copy link
Copy Markdown
Contributor

What Problem This Solves

Fixes an issue where the send button in thread reply composers (the thread panel and the new /embed/thread/ view) rendered mid-row instead of flush right, leaving dead space after it.

Why This Change Was Made

.composer-row always declared three grid columns (upload icon, textarea, send), but the upload icon only renders in the main channel composer. Without it, auto-placement shifted the textarea into the icon's auto column and stranded the send button in the 1fr column. The template is now two columns by default, with the third icon column restored via :has(.composer-icon) when the icon exists — so the columns always match the rendered children.

User Impact

The reply composer's send button now sits flush right in thread panels and embedded threads. The main channel composer is unchanged.

Evidence

Embed after the fix, and the main channel composer (upload icon present) showing no regression:

Embed (fixed) Main composer (unchanged)
embed app

Before (mid-row button): see the light/dark screenshots on #100. pnpm fmt:ts:check passes; embedded dist rebuilt via pnpm build.

@steipete
steipete marked this pull request as ready for review July 19, 2026 06:19
@steipete
steipete merged commit c0a9750 into main Jul 19, 2026
7 checks passed
@clawsweeper clawsweeper Bot added proof: sufficient Contributor real behavior proof is sufficient. proof: 📸 screenshot Contributor real behavior proof includes screenshot evidence. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. P3 Low-risk cleanup, docs, polish, ergonomics, or speculative feature. labels Jul 19, 2026
@clawsweeper

clawsweeper Bot commented Jul 19, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs changes before merge. Reviewed July 19, 2026, 2:21 AM ET / 06:21 UTC.

Summary
The branch makes composer rows use two columns when no upload icon is rendered, restores the three-column layout when an icon exists, rebuilds embedded web assets, and adds a changelog entry.

Reproducibility: no. independent current-main browser reproduction was run; however, the supplied CSS grid structure and the PR's before/after UI evidence make the optional-icon placement path source-reproducible with medium confidence.

Review metrics: 1 noteworthy metric.

  • Patch surface: 7 files affected: 1 source stylesheet, 5 generated webasset files, 1 changelog file. The functional change is narrowly scoped, while generated web assets account for most of the changed surface.

Merge readiness
Overall: 🐚 platinum hermit
Proof: 🦞 diamond lobster ✨ media proof bonus
Patch quality: 🐚 platinum hermit
Result: ready for maintainer review.

Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch.

Rank-up moves:

  • Remove the release-owned CHANGELOG.md entry while preserving the source and generated asset updates.

Next step before merge

  • [P2] A single mechanical cleanup can remove the release-owned changelog line without altering the functional fix.

Security
Cleared: The diff is limited to stylesheet behavior, matching generated web assets, and a release-note line; it adds no dependency, workflow, permission, secret, or executable supply-chain surface.

Review findings

  • [P3] Remove the release-owned changelog entry — CHANGELOG.md:5
Review details

Best possible solution:

Land the conditional grid layout and its matching rebuilt assets after removing the release-owned CHANGELOG.md entry; release notes can be handled separately by the release process.

Do we have a high-confidence way to reproduce the issue?

No independent current-main browser reproduction was run; however, the supplied CSS grid structure and the PR's before/after UI evidence make the optional-icon placement path source-reproducible with medium confidence.

Is this the best way to solve the issue?

Yes, conditionally matching the grid columns to the rendered children is the narrowest maintainable fix; the branch should not also change the release-owned changelog.

Full review comments:

  • [P3] Remove the release-owned changelog entry — CHANGELOG.md:5
    CHANGELOG.md is release-owned in this repository. Keep this focused UI fix out of the release notes; the release process can decide wording and placement independently.
    Confidence: 0.98

Overall correctness: patch is correct
Overall confidence: 0.88

AGENTS.md: found, but no applicable review policy affected this item.

Codex review notes: model internal, reasoning high; reviewed against 7314f189bc97.

Label changes

Label changes:

  • add P3: This is a contained reply-composer alignment defect with a clear workaround-free visual fix and limited blast radius.
  • add proof: sufficient: Contributor real behavior proof is sufficient. The PR body provides after-fix screenshots of the embedded thread composer with the send button flush right and of the main composer retaining its upload-icon layout; redact any private deployment details if replacement proof is posted.
  • add proof: 📸 screenshot: Contributor real behavior proof includes screenshot evidence. The PR body provides after-fix screenshots of the embedded thread composer with the send button flush right and of the main composer retaining its upload-icon layout; redact any private deployment details if replacement proof is posted.
  • add rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🦞 diamond lobster and patch quality is 🐚 platinum hermit.
  • add status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Sufficient (screenshot): The PR body provides after-fix screenshots of the embedded thread composer with the send button flush right and of the main composer retaining its upload-icon layout; redact any private deployment details if replacement proof is posted.

Label justifications:

  • P3: This is a contained reply-composer alignment defect with a clear workaround-free visual fix and limited blast radius.
  • rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🦞 diamond lobster and patch quality is 🐚 platinum hermit.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Sufficient (screenshot): The PR body provides after-fix screenshots of the embedded thread composer with the send button flush right and of the main composer retaining its upload-icon layout; redact any private deployment details if replacement proof is posted.
  • proof: sufficient: Contributor real behavior proof is sufficient. The PR body provides after-fix screenshots of the embedded thread composer with the send button flush right and of the main composer retaining its upload-icon layout; redact any private deployment details if replacement proof is posted.
  • proof: 📸 screenshot: Contributor real behavior proof includes screenshot evidence. The PR body provides after-fix screenshots of the embedded thread composer with the send button flush right and of the main composer retaining its upload-icon layout; redact any private deployment details if replacement proof is posted.
Evidence reviewed

Acceptance criteria:

  • [P1] pnpm fmt:ts:check.
  • [P1] git diff --check.

What I checked:

  • Targeted layout correction: The proposed stylesheet changes the default .composer-row grid from three columns to minmax(0, 1fr) auto, then restores auto minmax(0, 1fr) auto only when a .composer-icon child is present; this directly addresses the optional-child placement described in the PR. (apps/web/src/styles/composer.css:343, c24e144b858b)
  • Bundled-webasset consistency: The PR updates the embedded asset references and renamed generated CSS/app entry files alongside the source stylesheet, so the API-served web bundle points at the rebuilt output. (apps/api/internal/webassets/dist/index.html:30, c24e144b858b)
  • Related feature provenance: The affected embedded-thread surface arrived through the merged related feature PR, whose merge commit is the current main SHA; this follow-up is a focused correction to the shared composer used by that feature. (apps/web/src/styles/composer.css:343, 7314f189bc97)
  • Repository policy check: The repository AGENTS.md was read in full; its sqlc instruction does not apply because this PR changes no SQL schema, queries, or generated storedb code. (AGENTS.md:1)

Likely related people:

  • steipete: They authored the merged embedded-thread feature that introduced an additional consumer of the shared thread composer and authored the focused follow-up correction. (role: recent area contributor; confidence: medium; commits: 7314f189bc97; files: apps/web/src/styles/composer.css)
What the crustacean ranks mean
  • 🦀 challenger crab: rare, exceptional readiness with strong proof, clean implementation, and convincing validation.
  • 🦞 diamond lobster: very strong readiness with only minor maintainer review expected.
  • 🐚 platinum hermit: good normal PR, likely mergeable with ordinary maintainer review.
  • 🦐 gold shrimp: useful signal, but proof or patch confidence is still limited.
  • 🦪 silver shellfish: thin signal; proof, validation, or implementation needs work.
  • 🧂 unranked krab: not merge-ready because proof is missing/unusable or there are serious correctness or safety concerns.
  • 🌊 off-meta tidepool: rating does not apply to this item.

Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics.

How this review workflow works
  • ClawSweeper keeps one durable marker-backed review comment per issue or PR.
  • Re-runs edit this comment so the latest verdict, findings, and automation markers stay together instead of adding duplicate bot comments.
  • A fresh review can be triggered by eligible @clawsweeper re-review comments, exact-item GitHub events, scheduled/background review runs, or manual workflow dispatch.
  • PR/issue authors and users with repository write access can comment @clawsweeper re-review or @clawsweeper re-run on an open PR or issue to request a fresh review only.
  • Maintainers can also comment @clawsweeper review to request a fresh review only.
  • Fresh-review commands do not start repair, autofix, rebase, CI repair, or automerge.
  • Maintainer-only repair and merge flows require explicit commands such as @clawsweeper autofix, @clawsweeper automerge, @clawsweeper fix ci, or @clawsweeper address review.
  • Maintainers can comment @clawsweeper explain to ask for more context, or @clawsweeper stop to stop active automation.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

P3 Low-risk cleanup, docs, polish, ergonomics, or speculative feature. proof: 📸 screenshot Contributor real behavior proof includes screenshot evidence. proof: sufficient Contributor real behavior proof is sufficient. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant