[retro 2026-10-12] Atlas / Datagrid 2 / watch-mode traps that cost fix rounds in all three apps #282
Copy link
Copy link
Closed
Description
Info for research (no PR requested)
Pattern: the Atlas / Datagrid 2 / watch-mode traps below each cost one or more fix rounds in at least one of three apps. Most are one-line facts a skill could hold.
Evidence (2026-10-12/13)
- A
--watchrun that sees an SCSS edit dropsdeployment/web/dist/pages, so every page returns 404 until restart. Hit in 3 tasks of one app and 2 of another, plus one crash during a base e2e run. Counts: 15 NEEDS_RESTART events across the three lanes' ledger. - New calculated attributes added while the app runs read empty until restart (4 attributes blank in one screenshot).
- Datagrid 2: rows are
display: contents, so an outline on a row draws nothing, andscrollIntoViewon a row scrolls nothing (hit 3 times in two film takes; paint or scroll the first cell). A listview inside a column shows its own "Load more" and "No items found". Columns whose content walks 2 or more associations write a null attribute reference. A manual column width stored in the model did not change the rendered grid template. Setting a width through ALTER PAGE on an existing column gave CE0463. A right-aligned column aligns only its header unless the value is wrapped in a container. A sort arrow on a right-aligned header lands at the cell's far left. - Atlas text inputs are flex items: a
widthis ignored, even with !important, unlessflex: 0 0 autois set. - A dynamic text cannot carry an inline Style (crashes the build); wrap it in a container.
- A snippet's top-level text has no context object; wrap it in a dataview on the parameter.
- Trial licence session cap: scripts and retry loops that log in without logging out make later logins hang (HTTP 560). 2 of 3 apps; one incident left 6 shells hung for 3 to 7 hours.
- Reported by one session, not independently verified here: some Atlas spacing classes render nothing, so a 48px gap came from stacked layout-grid padding plus a spacing class.
What worked: a DOM probe per screenshot (focused element, outline, scroll width, grid template) found most of these in one pass; recording the cause in FINDINGS the same day.
What to research: a "known widget traps" skill, loaded for any page task, keyed by widget; a runner helper that logs out in a finally block; mxcli run --watch either rebuilding dist on SCSS change or warning.
🤖 Generated with Claude Code
Metadata
Metadata
Assignees
Labels
No labels
Activity
Lint Batch 3: TXT001 build words, TXT002 non-ISO dates, UI001 widget …
MendixMau commentedon Oct 19, 2026
Status after 1.0 (v2026.10.19): the Datagrid 2 and Atlas input traps are now lint rule UI001 (#305). Still open: confirming the SCSS and watch-mode facts all sit in a skill.
AlvinnYeo commentedon Oct 22, 2026
One more trap for this list, from a Nova-themed app (Mendix 11.14, Atlas Core 4.5, File Uploader widget 2.5.0):
The Nova theme's
css-mappings.scsssets the file uploader's icon variables to images under/resources/images/:Nothing ships those three files: not Nova's own
public/images, not Atlas Core, not the File Uploader.mpk(its assets are namedfile-icon.svg,remove-icon.svgand so on). The uploader thereforerenders with blank icon slots, and the browser logs three 404s. No build step, lint or design-audit rung notices,
because the CSS compiles and the widget renders.
Fix we used: put SVGs taken from the uploader widget's own assets into the app's
theme/web/resources/images/under the three names Nova expects. Overriding the three variables in the app's owntheme file to point at shipped images works too.
Two possible toolkit follow-ups, for whoever picks this list up:
theme/web/resources/images/holdsIconCmdUpload.svg, cmdCaution16.svg and cmdClose12.svg."
check-design-reaches-app.sh(or the design audit) could resolve everyurl(/resources/…)inthe compiled theme CSS against what the app serves and list the ones that 404. That catches this class of
defect for any theme.
Bug sweep 2026-10-26: gates, runners, doctor, lint receipt, git hooks…
MendixMau commentedon Oct 26, 2026
The last two unpromoted traps landed in #578 (squash a088b4e):
The rest was already covered.
Generated by Claude Code