fix(jobs): apply §4h's rulings to the job card #224
No reviewers
Labels
No labels
adr
android
area/calendar
area/design-system
area/i18n
area/jobs
area/offline
area/server
area/testing
bug
ci
duplicate
enhancement
help wanted
invalid
notifications
question
reliability
security
severity/low
severity/medium
tracking
web
wontfix
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
eagraiclainne/app!224
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/job-card-4h"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes what §4h settled, and the four defects it recorded without needing a
ruling.
The ladder has four rungs and rung three widened.
ALL TICKEDfills the gapfor a job whose sub-jobs are all done, reader-keyed: the owner reads
Nothing left but finishing it.with a filledDone ✓, everyone else reads<Owner> can finish it now.with no primary. Dropping the ownership clause fromWAITING ONgives a non-owner on the Everyone board the waiting panel back.That widening had a consequence worth naming:
waitingGroupskeyed on theowner, so a non-owner card would have counted people the line then refused
to name. It keys on the reader now.
The panel stops stretching. A floor and no ceiling, with the card's surplus
in a spacer between panel and meta row. Measured across 15 fixture cases: the
card holds 312 / 359 / 415 at the three text scales while the panel varies from
75 to 163 — which is the ruling working.
The waiting card's
⋯is a 48px square again, not a full-width bar. Itsprimary slot takes an unfilled, non-button
Nothing for you to do yet, holdingthe row's height so nothing shifts when #217 turns that line into
Nudge everyone.The meta row truncates instead of wrapping. This reverses the earlier fix's
choice to degrade by stacking — the review said "truncates before it wraps" and
§4h ruled the row is one line, never split. The guarantees that survived: a
phrase still never breaks mid-word and the separator still cannot orphan.
Only the due half goes amber on a late card; the points stay muted.
Names drop whole and count the rest —
4 to do with Ali, Sam +1, neverIseult Dal…. §4h's example shows one name plus a count; this ships two, tomatch the avatar stack's own cap so the line and the faces name the same people.
Flagged as a judgment call rather than buried.
One contradiction found and reported rather than guessed at: README §4c says
the waiting panel replaces the progress block, while reference panels
3band9bshow both. §4h rules on neither, so nothing changed — but the widened rungthree now puts non-owner cards into that state, and under §4c's reading they
lose their progress bar.
One honest gap: item 3.3 (points staying muted) has no code-level Android test —
colour is not in the semantics tree and the capture paths do not work under that
Robolectric rule. It is carried by Roborazzi goldens that do fail first, and the
reasoning sits in the test file where the test would have gone.
🤖 Generated with Claude Code
The board asked for rulings and §4h gave them; six of them land here, across both surfaces and one shared fixture. The panel ladder gains a fourth rung. A job whose sub-jobs are all ticked had no filler at all, so the slot came up empty on the one state the caption most needs explaining — ALL TICKED now says what is left to DO rather than repeating the "3 of 3 done" above it, and says it to the reader: the owner reads "Nothing left but finishing it." beside a filled Done ✓, anyone else reads "<Owner> can finish it now." beside no primary. WIDENING (AGENTS.md "Widening cites the design"): rung three drops "and the reader owns the job", cited to spec-4h-rulings.md §1 — the clause was describing the owner's case, not restricting the filler — and to README §4g's table, which carries the rung with no ownership condition. A non-owner on Everyone watching other people's open sub-jobs gets the waiting panel back. waitingGroups follows the panel and keys on the READER rather than the owner: on someone else's job the owner may hold an open sub-job, and the old key would have left the count naming people it refused to name. The panel stops stretching. It is content-height with the design's floor and never grows to fill the card; the surplus goes to a flexible spacer between the panel and the meta row (panel 9c), which is why the panels no longer carry the 0.8rem gap themselves — that number is now the spacer's floor. A one-line description can no longer inflate its panel into a cavern, and a card with no progress block gets a taller spacer rather than a bigger panel. 312px stays the shared height at all three text scales. Four defects with no ruling needed. The ⋯ stopped stretching to full width — it is a 48px square everywhere, because a full-width one reads as the primary with its label missing — and the empty primary slot takes an unfilled, non-button line ("Nothing for you to do yet"), the pattern §5's detail footer already uses and the shape #217 will fill with the outline Nudge everyone without moving anything else. The meta row stops splitting onto two lines: this overturns the earlier fix, which degraded by STACKING the two phrases, in favour of TRUNCATING the due half, per build-review-01 — the phrase-grouping that keeps the separator with its points and forbids a mid-word break survives untouched, only the degradation changed. Late recolours the due half alone; the points are what the job is still worth in full, and the product does not dock for lateness. And the waiting panel's names drop WHOLE with the rest counted, at the avatar stack's own cap of two, so the line and the faces above it name the same people — never "Iseult Dal…". Sweep (form fragments, both surfaces, files touched): no bare input / OutlinedTextField / BasicTextField, no type="number", no (optional) label, no Save on a blur-committing surface, no form fragment, no delete — right as they are, a card is not a list of rows. btn-done / AppButton / AppSaveButton are the card's mandated primary (§4, build-review-01), not a verb loose among rows — right as it is. The one disabled control is Take this job while the write is in flight, which the rule allows explicitly — right as it is. The two label= hits are an icon's and a button's accessible names, not field-row labels — right as it is. New this change: the empty primary slot is deliberately NOT a button. Goldens: the three new fixture cases ride with the code; every re-recorded existing case follows in its own commit.Test report
Coverage: 27.0%
Updated by the check workflow · commit
385107afb0Android test report
Coverage:
Updated by the android workflow · commit
385107afb089309e5b19385107afb0