@ai-matrx/records-ui 0.38.0 → 0.40.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,63 @@
1
1
  # Changelog — @ai-matrx/records-ui
2
2
 
3
+ ## 0.40.0
4
+
5
+ **Pressing "Settings" on a table crashed the whole page, and had since the
6
+ enrichment panel was added.**
7
+
8
+ Lane LAND-SCREENS pressed it in a production build of the app, signed in as the
9
+ admin who owns the table, and the route went to the application's global error
10
+ boundary with React #310 — *"Rendered more hooks than during the previous render."*
11
+ Everything on that panel went with it: rename the table, add a column, take one
12
+ off, reorder, delete the table, and the enrichment panel itself, which lives behind
13
+ a column's own row and was therefore unreachable in the shipped build.
14
+
15
+ **The cause, and why no suite saw it.** `TableSettings` declared `useState` for the
16
+ enrichment panel BELOW three early returns, one of which fires on the FIRST render
17
+ of every real mount: a host that lets the store decide rights binds no `rights`
18
+ port, so `useTableRights(table.data)` answers `NO_RIGHTS` until `useTable` and
19
+ `custom.my_level` come back. Render one ran eight hooks and returned the "you may
20
+ not change the structure" line; render two, a moment later, ran nine. Every test in
21
+ this package binds `rights: () => tableRightsAt("admin")`, which never takes that
22
+ return — so the panel was only ever rendered with nine hooks and the order never
23
+ changed.
24
+
25
+ `src/TableSettings.hooks.test.tsx` mounts the panel with NO rights port, which is
26
+ the seat the product actually uses, and fails with that exact error on the previous
27
+ hook order.
28
+
29
+ Also: `src/form-publish.test.tsx` had two TS7006 implicit-`any` parameters that had
30
+ `tsc --noEmit` red on this package on `main`. Typed; the package typechecks clean.
31
+
32
+ ## 0.39.0
33
+
34
+ **The kanban view becomes the board, with the store judging every drag.**
35
+
36
+ `PipelineBoard` renders THROUGH the view that already exists — `ViewSwitcher`'s
37
+ kanban layout — rather than beside it. It draws the very same rows the view holds;
38
+ what it adds is the store's judgement.
39
+
40
+ * **Drag between columns.** A drop asks `custom.pipeline_transition_refusal` first
41
+ and either writes the move or leaves the card exactly where it was, carrying the
42
+ store's own sentence, verbatim. Nothing is written on a refusal, so there is no
43
+ snap-back to animate — the card never moved.
44
+ * **A stage's demands, prompted on the way in.** When the refusal names the columns
45
+ a stage needs, they appear on the card with a field each and one button, so the
46
+ person finishes the move instead of being sent away from it. Until every demand is
47
+ answered there is no button to press, rather than one that looks live.
48
+ * **Column headings carry the store's numbers** — the count, the chosen measure's
49
+ total, and the column's limit — over every record this person may see, not over
50
+ the page the screen happened to load. Which column is totalled is a fact about the
51
+ VIEW, saved on it like its colours.
52
+ * **A work-in-progress limit shows on the column it belongs to**, and a column over
53
+ its limit says so in a sentence rather than only turning red.
54
+ * **A viewer's card has no drag handle at all.** Absent rather than dead.
55
+
56
+ A table that is not a pipeline draws the plain kanban exactly as before; the
57
+ decision is the Table's own `stage_field`, asked once, never guessed from the shape
58
+ of a Choice column.
59
+
60
+
3
61
 
4
62
 
5
63
  ## 0.38.0 — 2026-09-20