Skip to content

Show slot values without labels on the Responses tab - #541

Merged
richshaw merged 6 commits into
mainfrom
claude/issue-411-slot-values
Oct 22, 2026
Merged

richshaw merged 6 commits into
mainfrom
claude/issue-411-slot-values

Conversation

@richshaw

Copy link
Copy Markdown
Owner

Fixes #411.

The problem

The Responses tab's Slot column put each field's label in front of its value: "Job: Set up tables · Date: Sat, Nov 14". The column is already headed Slot, so the labels repeated the heading and made every cell about twice as long. On a phone, where each row is a card, they made the line wrap. The Remove question on the same tab already reads the slot without labels ("Remove Alex Example from Set up tables · Sat, Nov 14?"), so one page showed a slot two ways.

The fix

  • src/app/app/(chrome)/signups/[id]/responses/page.tsx: the Slot cell uses summarizeSlotValues, worked out once per row, and Remove's name and question reuse it. The fallback to the slot's ref when no field has a value is unchanged.
  • src/lib/slot-summary.ts: summarizeSlot (the labelled form) had no other caller, so it's removed. Its doc comment moves onto summarizeSlotValues, which now names the responses table among its users.
  • The issue's one choice: all labels are dropped, number fields included, which is the issue's default. That matches the email subject line and the Remove question.
  • Emails (Label: value lines, on purpose) and the CSV export (a column per field) are unchanged.
  • CLAUDE.md's Email section no longer names summarizeSlot.
  • CHANGELOG: one line under Changed.
  • Help: affected-articles.mjs names no article. "Take someone off a slot" has one picture, of the confirmation dialog, which already read the slot without labels, so no screenshots need re-taking.

Tests

  • src/lib/slot-summary.test.ts: the summarizeSlot cases (absent, null, empty values, field order, numbers, dates, unknown keys) now run against summarizeSlotValues with the unlabelled results, so no coverage is lost.
  • tests/e2e/responses.spec.ts: the phone-card test found the slot cell by /^What: /. It now finds it by the exact slot text ("Fruit and water"), which also checks that no label is shown.

Run in this session:

  • pnpm lint && pnpm typecheck && pnpm knip && pnpm test: 1287 passed
  • pnpm build && pnpm budgets: every page is under budget
  • playwright test with the container config on tests/e2e/responses.spec.ts and tests/e2e/help/take-someone-off-a-slot.spec.ts: all 7 chromium tests passed. The mobile-safari project couldn't launch WebKit in this container, so none of its test bodies ran. CI runs chromium.

Generated by Claude Code

The Slot column already says what the cell holds, so "Job: Set up tables ·
Date: Sat, Nov 14" becomes "Set up tables · Sat, Nov 14", the way the Remove
question on the same tab reads it. summarizeSlot had no other caller and goes.

Fixes #411.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DPsfxBKNtSsSaLiSKJ1eUk
@richshaw richshaw added pipeline:ux Changes what a person using OpenSignup sees or does pipeline:working A session is working on it right now labels Oct 21, 2026 — with Claude
@richshaw
richshaw requested a balanced review from Copilot October 21, 2026 10:01

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@richshaw richshaw added pipeline:tophat pipeline:working A session is working on it right now and removed pipeline:working A session is working on it right now labels Oct 21, 2026 — with Claude

Copy link
Copy Markdown
Owner Author

Tophat: passed

I ran 2eb44af locally with pnpm dev, Postgres 16, and Chromium at 1280×900 and 390×844. I didn't run the worker, because nothing here touches jobs or email. The signup was "Snack duty — Spring season", with What, Date and a Number field, Hours (unit hrs). It had three slots: Fruit and water (Apr 6, 2 hours), Orange slices (Apr 13, 1 hour), and a slot with no values. Sam, Lee and Kim (…@example.com) each signed up for one through the public sign-up API. I ran the same database on the base (8600bed) first, then on the PR.

Check Result What I saw
The labels on the base (8600bed) ✅ reproduced The Slot cell read "What: Orange slices · Date: Sat, Apr 13 · Hours: 1". On the phone card it wrapped onto two lines (541-base-responses-desktop, 541-base-responses-phone).
Slot cell without labels (desktop) ✅ "Fruit and water · Sat, Apr 6 · 2" and "Orange slices · Sat, Apr 13 · 1", in field order (541-after-responses-desktop).
Phone cards ✅ Each slot fits on one line, and the cards are shorter. The page is 390 px wide with no sideways scroll (541-after-responses-phone).
A slot with no values ✅ It still falls back to the slot's ref (slot-…-1), the same as on the base.
Remove: name and question ✅ Each Remove button's accessible name is "Remove Lee Example from Orange slices · Sat, Apr 13 · 1", matching the cell. The dialog asks "Remove Lee Example from Orange slices · Sat, Apr 13 · 1? Their spot opens up for someone else…" (541-after-remove-dialog-desktop).
Remove still works ✅ Yes, remove set Lee's row to "removed", with the slot text unchanged (541-after-removed-desktop).
CSV export ✅ The downloaded file is byte-identical on the base and the PR (a column per field).
Console and server logs ✅ No browser console errors. The only server warnings were the health check's pgboss query, because the worker wasn't running.

For the owner (UX): the Responses tab's Slot column now shows just the slot's values, like "Orange slices · Sat, Apr 13 · 1", instead of "What: Orange slices · Date: Sat, Apr 13 · Hours: 1". On a phone, each card's slot line no longer wraps. The Remove question already read this way, so the cell and the question now match. One thing to look at: a Number field's value now shows as a bare number ("· 2"), and the field's unit (hrs) isn't printed either here or on main. The issue chose to drop all labels, numbers included. Compare 541-base-responses-phone with 541-after-responses-phone, and the two desktop shots.

Screenshots are in https://claude.ai/code/session_013ymWVB5TYmhd3Wwbtvrxsi.


Generated by Claude Code

@richshaw richshaw added pipeline:review pipeline:working A session is working on it right now and removed pipeline:tophat pipeline:working A session is working on it right now labels Oct 21, 2026 — with Claude

@richshaw richshaw left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review: passed (round 1)

The PR does what #411 asks. The Responses tab's Slot cell now uses summarizeSlotValues, worked out once per row, and Remove's name and question reuse that same string, so the cell and the question can't disagree. The fallbacks are unchanged: the cell still falls back to the slot's ref and then "—", and Remove to the ref and then "this slot", exactly as on main. summarizeSlot is gone, and nothing on the branch still references it (src, tests, docs, scripts, .claude). Its unit tests now run against summarizeSlotValues with the unlabelled results, so the absent/null/empty, order, number, date and unknown-key cases are all still covered. The e2e phone-card test now finds the slot cell by its exact text, which also proves no label is shown. Each "Done when" item holds: values only, matching the Remove question; emails (slotDetails → SlotDetailsText) and the CSV export aren't touched (the tophat found the CSV byte-identical); CI ran lint, types, knip and the tests. The issue's one choice, dropping all labels with numbers included, follows the issue's default.

Blocking (0)

Optional (3):

  • src/lib/slot-summary.ts:13-15: the doc comment now names the responses table as a caller, but still says "Callers fall back to the signup title, never to slots.ref". The responses table does fall back to slots.ref, as it did on main. That's fine on an organizer-only page, but the sentence could say it's about what participants see.
  • A Number field now shows as a bare number ("· 2"), and its unit isn't printed here or on main. The tophat flagged it, and it's the choice the issue made. If it reads badly in practice, printing the unit is a separate change.
  • responses/page.tsx:48,52 and tests/e2e/responses.spec.ts:247 carry formatter-only changes (Tailwind class order, line wrapping) on lines the PR doesn't otherwise touch. Harmless, and format:check passes.

Earlier threads: none. Copilot couldn't review (quota used up).
Checks: CI is green on 2eb44af (lint-type-test, e2e, CodeQL). Locally I grepped the branch for summarizeSlot and ran affected-articles.mjs: its only article hits come from CLAUDE.md wording, and "Take someone off a slot"'s one picture is the Remove dialog, which already read the slot without labels. The tophat passed on this exact SHA (desktop and phone), so no runtime code has changed since. Nothing on the review checklist applies: no service, policy guard, schema, public route, MCP or legal page is touched, and there's a CHANGELOG line.

Why the owner: pipeline:ux. The Slot column on the Responses tab reads "Orange slices · Sat, Apr 13 · 1" instead of "What: Orange slices · Date: Sat, Apr 13 · Hours: 1", and on a phone the slot line no longer wraps. Compare the tophat's 541-base-responses-phone with 541-after-responses-phone, and the two desktop shots. Check whether the bare number ("· 1") reads well enough for you.

https://claude.ai/code/session_016Z17JPdZ7KkiPAM4wTZBdf


Generated by Claude Code

@richshaw richshaw added pipeline:owner Passed; waits for the owner (UX or high-risk) and removed pipeline:review pipeline:working A session is working on it right now labels Oct 21, 2026 — with Claude
@richshaw richshaw added pipeline:merge and removed pipeline:owner Passed; waits for the owner (UX or high-risk) labels Oct 21, 2026

Copy link
Copy Markdown
Owner Author

Approved by the owner at 2eb44af.

https://claude.ai/code/session_01DXydxGNyVt8sXcDp4XzG84


Generated by Claude Code

@richshaw richshaw added the pipeline:working A session is working on it right now label Oct 21, 2026 — with Claude
@richshaw richshaw removed the pipeline:working A session is working on it right now label Oct 21, 2026 — with Claude
@richshaw richshaw added the pipeline:working A session is working on it right now label Oct 22, 2026 — with Claude
@richshaw
richshaw merged commit 77b64f5 into main Oct 22, 2026
5 checks passed
@richshaw
richshaw deleted the claude/issue-411-slot-values branch October 22, 2026 02:06
@richshaw richshaw removed pipeline:merge pipeline:ux Changes what a person using OpenSignup sees or does pipeline:working A session is working on it right now labels Oct 22, 2026 — with Claude
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Slot labels on the Responses tab repeat the column heading and double each cell's length

3 participants