Jobs: retire the 'step' noun and settle the unassigned names #179

Closed
opened 2026-08-23 19:46:06 +00:00 by nalum · 0 comments
Owner

Part of the jobs flow redesign. The design handoff (design_handoff_jobs_flow, held outside the repo) is the source; the facts it depends on are repeated here so this issue stands alone.

The interface is to use no noun for a sub-job. Headings and counts carry it instead: To do, 7 left, 1 of 3 ticked, Add another, Break this up, 4 to do with Ali, Sam, Jo, Delete this and the 12 under it?. Engineering keeps saying sub-task and step; the user interface says neither.

That is about 21 msgids in the web app alone (Add a step, Steps, {stepsDone}/{0} steps, Whose step is it?, and more), across six locales, plus the Android strings. Server-side domain error text is in scope too — for example "steps only go under an open standalone job" reaches the reader, because a failure names its reason.

The unassigned state has the same problem in reverse: the app already ships two names and the design was adding a third. One name per position:

  • the value, in a row or a picker — Anyone
  • the board filter and pool heading — Up for grabs
  • the act of taking one — Take this job / Taking..., the strings already shipped

Not assigned yet is retired, and it has nine call sites, three outside the jobs surface (Rewards.tsx:303,598, Calendar.tsx:1169, and the MemberSelect sentinel). Sweep them all in one pass; a jobs-only sweep leaves the app with two names anyway.


Update — retire Overdue in the same pass

The word goes with the noun. Late replaces it: six letters, legible in a
dense row, and what a family says out loud. Irish needs its own pass, not a
literal translation.

The ladder, five bands, one sentence each, never a bare stamp:

When Copy
Late, same day, deadline had a time Late — was due 09:45
Late, yesterday Late — was due yesterday
2-6 days 4 days late
7 days or more Late — was due 14 August
Row scale, any dense list the amber time plus the word late

What moves, and what must not:

Site Action
Card, sheet and board copy, web and Android retire, use the ladder
notify.job_overdue in internal/notify/locales/*.json, six locales retire — server strings reach readers under the failure-honesty rule
Web preference label A job of mine is overdue (messages.po:476) retire — the sixth site, easily missed
NOTIFICATION_KIND_JOB_OVERDUE = 13 do not touch. Stored in User.push_disabled_kinds and on notification rows; ADR-0035 forbids renaming an enum value, and a strict unmarshal would orphan every stored preference. Copy changes, the wire name does not.
CLI not a site. The only occurrence is seed text (cmd/seed/data.go:340).
Calendar.tsx in the blast radius for the string sweep; the calendar's own design is out of scope here.

The label helper is shared, so web and Android move together. The marketing
site (eagraiclainne/website) is a separate repo this repo's i18n gate cannot
enforce — a follow-on, not an acceptance criterion.


Two requirements added after #213 shipped

The job sheet went out to the family's cluster three times before it was right.
Seven visual defects, none caught by a suite: pickers that unfolded forms
instead of opening, three Save buttons on a commit-on-blur screen, (optional)
labels, a reward's name used as a field label, an unstyled add row, checkboxes
with a ghosted tick, and a create form with a browser spinner. Every one had to
be found by a person looking at a screen.

What this means here

This ticket rewords rather than builds, so the goldens it touches are
re-recorded existing cases: they go in their own commit, and the code and
fixture changes go in another. AGENTS.md has the rule.

It also inherits half of the form-styling sweep. (optional) is copy, and #213
removed three instances from the job sheet — but the pattern lives on wherever
the shipped forms do. While you are sweeping step and Overdue, note (do not
necessarily fix) any (optional) label, any Save changes on a
commit-on-blur surface, and any disabled-and-grey control you pass, and list
them so they can be ticketed.

Part of the jobs flow redesign. The design handoff (`design_handoff_jobs_flow`, held outside the repo) is the source; the facts it depends on are repeated here so this issue stands alone. The interface is to use no noun for a sub-job. Headings and counts carry it instead: `To do`, `7 left`, `1 of 3 ticked`, `Add another`, `Break this up`, `4 to do with Ali, Sam, Jo`, `Delete this and the 12 under it?`. Engineering keeps saying sub-task and step; the user interface says neither. That is about 21 msgids in the web app alone (*Add a step*, *Steps*, *{stepsDone}/{0} steps*, *Whose step is it?*, and more), across six locales, plus the Android strings. **Server-side domain error text is in scope too** — for example "steps only go under an open standalone job" reaches the reader, because a failure names its reason. The unassigned state has the same problem in reverse: the app already ships two names and the design was adding a third. One name per position: - the value, in a row or a picker — `Anyone` - the board filter and pool heading — `Up for grabs` - the act of taking one — `Take this job` / `Taking...`, the strings already shipped *Not assigned yet* is retired, and it has nine call sites, three outside the jobs surface (`Rewards.tsx:303,598`, `Calendar.tsx:1169`, and the `MemberSelect` sentinel). Sweep them all in one pass; a jobs-only sweep leaves the app with two names anyway. --- ## Update — retire `Overdue` in the same pass The word goes with the noun. `Late` replaces it: six letters, legible in a dense row, and what a family says out loud. Irish needs its own pass, not a literal translation. The ladder, five bands, one sentence each, never a bare stamp: | When | Copy | |---|---| | Late, same day, deadline had a time | `Late — was due 09:45` | | Late, yesterday | `Late — was due yesterday` | | 2-6 days | `4 days late` | | 7 days or more | `Late — was due 14 August` | | Row scale, any dense list | the amber time plus the word `late` | What moves, and what must not: | Site | Action | |---|---| | Card, sheet and board copy, web and Android | retire, use the ladder | | `notify.job_overdue` in `internal/notify/locales/*.json`, six locales | retire — server strings reach readers under the failure-honesty rule | | Web preference label *A job of mine is overdue* (`messages.po:476`) | retire — the sixth site, easily missed | | `NOTIFICATION_KIND_JOB_OVERDUE = 13` | **do not touch.** Stored in `User.push_disabled_kinds` and on notification rows; ADR-0035 forbids renaming an enum value, and a strict unmarshal would orphan every stored preference. Copy changes, the wire name does not. | | CLI | not a site. The only occurrence is seed text (`cmd/seed/data.go:340`). | | `Calendar.tsx` | in the blast radius for the string sweep; the calendar's own design is out of scope here. | The label helper is shared, so web and Android move together. The marketing site (`eagraiclainne/website`) is a separate repo this repo's i18n gate cannot enforce — a follow-on, not an acceptance criterion. --- ## Two requirements added after #213 shipped The job sheet went out to the family's cluster three times before it was right. Seven visual defects, none caught by a suite: pickers that unfolded forms instead of opening, three Save buttons on a commit-on-blur screen, `(optional)` labels, a reward's name used as a field label, an unstyled add row, checkboxes with a ghosted tick, and a create form with a browser spinner. Every one had to be found by a person looking at a screen. ### What this means here This ticket rewords rather than builds, so the goldens it touches are **re-recorded existing** cases: they go in their own commit, and the code and fixture changes go in another. AGENTS.md has the rule. It also inherits half of the form-styling sweep. `(optional)` is copy, and #213 removed three instances from the job sheet — but the pattern lives on wherever the shipped forms do. While you are sweeping `step` and `Overdue`, note (do not necessarily fix) any `(optional)` label, any `Save changes` on a commit-on-blur surface, and any disabled-and-grey control you pass, and list them so they can be ticketed.
nalum closed this issue 2026-08-26 18:35:28 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
eagraiclainne/app#179
No description provided.