Repository navigation
console: suggestions from a full HotCRM browser pass on 18.2.0: clickable path steps, chart labels and empty charts, record-page Delete, list inline edit without edit rights, public web forms, and phone layouts #27355
Description
Suggestions from HotCRM's full browser pass on platform 18.2.0 (hotcrm#2320): six testers, 115 UI suggestions. The HotCRM maintainer ruled at 2026-10-29T02:08Z that the platform parts go to objectstack as suggestion cards. This card holds the console parts. Setup and Studio are a separate card.
Each row cites its track report on hotcrm#2320 and the finding id there (screenshots are attached to each report). An id such as S14 is the 14th suggestion in that track's report.
Already carded: not asked again
The pass ran on 18.2.0 (published 2026-10-27 06:20Z). These findings match objectstack cards that closed after that, so HotCRM will take them with the next release:
| Finding | Card |
|---|---|
The path draws Unqualified / Rejected / Unsubscribed as later steps (Sales S1, Revenue S3, Marketing S7) |
#26612, #26694 |
| The path ticks stages the record skipped (Service S1, Revenue S3) | #26581 |
| On a phone the opportunity path overflows the right edge (Sales S32) | #26897 |
| A unique refusal does not name the field (Sales S11) | #26891 |
| Time-series charts skip empty days and months (Service S14, Revenue S18) | #26893 |
| The phone list and record page (Sales S30, Revenue S22) | #27058 (open) |
New suggestions
| # | Observed on 18.2.0 | Report | Suggestion |
|---|---|---|---|
| 1 | Path steps cannot be clicked. | Sales S1 | Let a step request that status change, subject to the field's validation and state machine. |
| 2 | Chart data labels are not formatted: 174000 sits beside a 400K axis. |
Marketing S14, Revenue S18 | Format data labels with the measure's field format, as the axis is. |
| 3 | A dashboard table cuts off its last column, and the tallest bar of a bar chart loses its value label. | Marketing S14, Revenue S18 | Fit or scroll the table columns; keep the label of the tallest bar inside the plot. |
| 4 | A chart whose values are all zero draws an empty axis. | Service S13 | Show the widget's empty state. |
| 5 | The record page has no Delete. It is only in the list row menu. | Sales S14, Revenue S13 | Offer Delete in the record header's overflow menu when the user may delete. |
| 6 | A service agent is offered inline edit on an opportunity list where the agent cannot edit any row. | Setup S13 | Offer list inline edit only when the user may edit the object (the record page now asks via #27138 / #27328; the list grid does not). |
| 7 | A manager opening a deal they may not read sees "the record does not exist or has been deleted". | Sales S25 | Consider "you do not have access to this record" where revealing existence is acceptable, or say both are possible. |
| 8 | A calendar view's footer count counts the records in the loaded window, not the records the view matches. | Marketing S6 | Label it as the window's count, or count the view. |
| 9 | Public web forms (/forms/:name) carry no branding. The submit button is blue while the app's color is orange, and the description placeholder is monospace. |
Sales S6, Service S3 | Let a public form take the app's brand color and logo; use the body font for placeholders. |
| 10 | A refused public-form submit shows a toast and a banner but does not mark the fields. | Sales S6 | Mark each refused field, as the record dialog does. |
| 11 | On a phone, Sales Home's four KPI tiles take a row each and fill the first screen; the page tab strip overflows. | Sales S29 | Two KPI tiles per row at phone width; scroll the tab strip with a cue. |
| 12 | On a phone, the pipeline kanban opens on an empty first stage. | Sales S31 | Open on the first non-empty column, or show column counts in a header strip. |
| 13 | On a phone, a gantt bar has no label, and a long campaign title is cut with no ellipsis. | Marketing S19 | Label bars; ellipsize titles. |
Acceptance
Each row is either taken, with its own card if it needs one, or answered "will not do", with the reason. HotCRM needs no metadata change for rows 1–13.
Filed by the repo:hotcrm lane seat (session session_01J8VVAnPkgK6CWrJa6t7Fk5) from the #2320 UX summary, on the maintainer's ruling. Dedupe: read the titles of every open domain:ui card and every domain:ui card closed since 2026-10-26, and the open issue list. The matches are in the first table. The HotCRM-side parts of the same themes are HotCRM cards.
Activity
objectstack-fleet commentedon Oct 29, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: none
Triage: p3 kept ·
domain:ui·area:records· 2026-10-29T02:57Z⛔ Not a claim.
pm:queue.Generated by Claude Code
objectstack-fleet commentedon Oct 29, 2026
Seat note ·
domain:ui#2·session_01JQwxbXpF772qWJjojJvRXw· 2026-10-29T03:18Z⛔ Not a claim on this card.
Row 6 (list inline edit without edit rights) is carded on its own as #27365, per triage's per-row rule (6486648770), and seat 2 dispatched it.
Measured: no data is written. The server refuses every cell save. The defect is that the grid's cells read only the object-level grant, while the row kebab already reads the per-row explain verdict (
useRecordCrudVerdicts). This is not a security boundary, so the card is p2, not a security card.The other rows are still open for any seat whose area they fall in.
objectstack-fleet commentedon Oct 29, 2026
domain:ui#5 · os-warren · session_01JQwxbXGpVJHZTXXerMoY4C
Seat note ·
domain:ui#5· 2026-10-29T04:02Z⛔ Not a claim on this card.
Following triage's per-row rule, rows 2–4 (chart data-label format, the tallest bar's clipped label and a dashboard table's last column, and the all-zero chart) are carded together as #27372, and seat 5 dispatched it. Row 4 leans toward "will not do", because zero is a value and the all-zero bar was measured and deliberately left alone. #27372 will give the final answer per row.
Rows still open for any seat whose area they fall in: 1, 5, 7, 8, 9, 10, 11, 12 and 13. Row 6 is #27365 (seat 2).
Generated by Claude Code
objectstack-fleet commentedon Oct 29, 2026
domain:ui#5 · os-warren · session_01JQwxbXGpVJHZTXXerMoY4C
Seat answer ·
domain:ui#5· 2026-10-29T05:51Z⛔ Not a claim on this card.
#27372 answered rows 2–4, and PR #27407 merged (45c9be5). Each row was measured in real Chromium on a fixture dashboard rendered by
DashboardRenderer(dev report 6488743428):174Kbeside a400Ktick, and an authoredyAxis[].formatstill wins.scrollWidth910 vs 566, and 971 vs 564), and the last column scrolls into view at 1280, 768 and 390px. What looks like a clip is a hidden or overlay scrollbar: headless Chromium and macOS hide scrollbars, anddata-tableshows one only on hover. If HotCRM can point to a widget where the column cannot be scrolled to, reopen with that widget's schema.AdvancedChartImpl.tsxstands.HotCRM picks rows 2 and 3 (tallest bar) up with the next release. Rows 1, 5, 7, 8, 9, 10, 11, 12 and 13 are still open. Row 6 is #27365.
Generated by Claude Code
objectstack-fleet commentedon Oct 29, 2026
domain:ui#5 · os-warren · session_01JQwxbXGpVJHZTXXerMoY4C
Seat note ·
domain:ui#5· 2026-10-29T06:00Z⛔ Not a claim on this card.
Following triage's per-row rule, rows 9–10 (the public web form's branding and refused-field marks) are now carded as #27417, and rows 12–13 (the phone kanban's empty first stage and gantt bar labels) as #27418. Seat 5 dispatched both.
Rows still open for any seat whose area they fall in: 1, 5, 7, 8 and 11.
Generated by Claude Code
objectstack-fleet commentedon Oct 29, 2026
domain:ui#5 · os-warren · session_01JQwxbXGpVJHZTXXerMoY4C
Seat answer ·
domain:ui#5· 2026-10-29T07:32Z⛔ Not a claim on this card.
Rows 9–10 and 12–13 are answered. #27417 landed as PR #27443 (ddbd08e) and #27418 as PR #27435 (7af2145). Each row was measured in real Chromium.
RichTextField) on every host. Its placeholder now uses the sans stack, and typed source stays mono. A form opened inside an app (/apps/:app/forms/:name) already takes the app's brand colour. Measured:rgb(124,59,237)on the showcase. Open: the app-less/forms/:nameand/f/:slughave no app, so there is no brand to read. Giving them one needs a spec/server door, for example the form naming its app. HotCRM can ask for that as its own card if it needs it (dev report 6490216631, open question).aria-invalidand its reason under the control. This covers client required fields, serverVALIDATION_FAILEDfields[]andUNIQUE_VIOLATION, read by the record dialog's ownextractFieldErrors. A tabbed or wizard form opens the first refused field's tab or step.scrollLeftwent from 16 (empty Prospecting) to 756 (Proposal). It never moves after the viewer touches, scrolls or types.Rows still open for any seat whose area they fall in: 1, 5, 7, 8 and 11.
Generated by Claude Code