@ai-matrx/records-ui 0.79.0 → 0.82.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,101 @@
1
1
  # Changelog — @ai-matrx/records-ui
2
2
 
3
+ ## 0.82.0
4
+
5
+ **A link can open a table's Forms, Notifications, Portals or Share — and the thing inside
6
+ it.** (lane HUB-FIX, VERIFIER-14 item 2.)
7
+
8
+ The organization hub lists every form, digest, portal and outside share an organization has,
9
+ and every one of those rows opened the table's GRID: `TablePage` could be addressed down to
10
+ its layout (`?view=`) and no further, because its rails were component state with no prop
11
+ and no spelling in the address. A person clicking "Spring drain-cleaning intake" on the hub
12
+ landed on four hundred jobs and had to find the Forms button, then the form.
13
+
14
+ * `TablePage` takes `activeRail` (the raw `?rail=` word: `forms`, `bookings`, `checklists`,
15
+ `notifications`/`digests`, `portals`, `settings`, `import`, `inbox`, `share`) and
16
+ `activeItemId` (the thing inside it). A later link moves the page, like `?view=`. A record
17
+ still outranks a rail. `share` opens the share dialog over the page.
18
+ * The rail opens ON the item: `FormsPanel` gains `activeFormId` (marked, scrolled to, and its
19
+ builder open for somebody who may build); `PortalsPanel` gains `activePortalId` (its card
20
+ open); `SubscriptionsPanel` gains `activeRuleId` (marked and scrolled to); `ShareControl`
21
+ gains `initiallyOpen`.
22
+ * NOTHING IS SILENT. A rail word this page has no rail for says `unknownRailLine`; an item a
23
+ rail does not hold says `FORM_NOT_HERE_LINE` / `PORTAL_NOT_HERE_LINE` /
24
+ `RULE_NOT_HERE_LINE` — never the first row in its place; a share link for somebody who may
25
+ not share says `SHARE_NOT_YOURS_LINE` (or the no-port reason) instead of landing on a grid.
26
+ * New exports: `railFromParam`, `unknownRailLine`, `SHARE_NOT_YOURS_LINE`, `LinkRail`,
27
+ `FORM_NOT_HERE_LINE`, `PORTAL_NOT_HERE_LINE`, `RULE_NOT_HERE_LINE`. `openingRail` takes an
28
+ optional second argument; its one-argument meaning is unchanged.
29
+ * Test: `src/rail-deep-link.test.tsx` (7 cases).
30
+
31
+ **Consumer action (matrx-frontend):** in `app/(core)/data-v2/[tableId]/page.tsx` read
32
+ `searchParams.get("rail")` and `searchParams.get("item")` and pass them as `activeRail` /
33
+ `activeItemId`; in `features/unified-data/hub/capabilities.ts` point the Forms, Digests,
34
+ Portals and Shared-outside rows at `/data-v2/<table>?rail=forms&item=<form_id>`,
35
+ `?rail=notifications&item=<rule_id>`, `?rail=portals&item=<portal_id>` and `?rail=share`.
36
+
37
+ ## 0.81.0
38
+
39
+ **The relation picker stops cutting a customer's name in half, and a grid mount stops
40
+ screaming at the console.** (lane FIX-14, from FIX-13's "named, not fixed" list.)
41
+
42
+ **1. `Create “Marisol Okonkwo — 418 Calle Pu`.** The picker pasted a per-surface `w-64`
43
+ over the design system's popover, and the Create offer had no truncation of its own, so the
44
+ one control that exists to show the name you are about to create cut it mid-word. Fixed
45
+ where it belongs: `@ai-matrx/design-system` 0.35.0 gained `sizing="content"` and decides
46
+ the width; this package sets no width at all. The offer and every candidate row truncate
47
+ with a real ellipsis and carry the whole name as a `title`, and `RecordChip` does the same
48
+ everywhere it is drawn. Measured headlessly against the live store: 408px showing the whole
49
+ name at 1600×1000, 343px with a real `text-overflow: ellipsis` at 375 wide, inside the
50
+ viewport both times, 0 page errors.
51
+
52
+ **2. `custom.enrich_cells … does not exist` on every grid mount.** The DOOR was never
53
+ missing — `custom.enrich_cells(uuid, uuid, text[], uuid[])` is live, granted to
54
+ `authenticated`, and answers 320 rows for a real organization from the seat. `demo/branch-server.ts`
55
+ formatted every non-scalar argument as `'<json>'::jsonb`, because `typeof [] === "object"`,
56
+ so no door with a Postgres array parameter could ever be matched; that 42883 was recorded
57
+ into `demo/fixtures/doors.json` and replayed on every mount. The seam now asks `pg_proc`
58
+ what each parameter is declared as and formats by that — the class, not the instance — and
59
+ an array whose type it cannot read is named loudly instead of quietly re-sent as jsonb.
60
+
61
+ * New guard `demo/a-grid-mount-logs-no-console-error.test.tsx`: mounts `Grid` against the
62
+ LIVE store and fails on ANY `console.error`, with one named exclusion (React's jsdom-only
63
+ `act()` warning). RED on the pre-fix bytes with exactly the 42883 above, GREEN on these.
64
+ * The demo harness seeds a PLAIN relation column ("Related proposal", a self-relation on
65
+ Northbay Commercial Solar's proposals table) — until now every relation it seeded carried
66
+ `parity: "member"` and routed to `PersonPicker`, so `RelationPicker` had no browser
67
+ surface at all and its only coverage was jsdom, which has no geometry.
68
+
69
+ Suite: 51 files / 319 tests green, `tsc --noEmit` clean.
70
+
71
+ ## 0.80.0
72
+
73
+ **An import's report outlives the run, and its refusals outlive the panel.** (lane FIX-12,
74
+ finding F2 from VERIFIER-12; published by PUBLISH-SWEEP-2, aidream `675cc61fe8`.)
75
+
76
+ VERIFIER-12 watched a 40-row file land 28 rows and refuse 12 against the live store and saw
77
+ NOTHING on screen: no summary, no refusal list, and afterwards nothing on any of that
78
+ table's screens naming the twelve rows. The store had been right the whole time — the
79
+ ledger said seen 40 / written 28 / refusals 12, and every refused row was kept with a
80
+ sentence a person understands. The report was not the defect. `importFinish` called
81
+ `onDone`, every host wires `onDone` to close the rail, and a run that fits in ONE call
82
+ finishes between two paints — so the report was destroyed in the tick it became true. A long
83
+ file only looked better because there was time to read the progress.
84
+
85
+ * The wizard tells the host `onWrote` when rows land; `onDone` is now the person pressing
86
+ **Done** on the report, and nothing else closes the panel.
87
+ * The report says where the refused rows now live.
88
+ * **"Imports into this table"** — every run this table has had, newest first, off
89
+ `custom.io_imports`; a run with refusals opens them off `custom.io_import_report`, with
90
+ the store's own reason and the line of the file. Both doors have existed since lane
91
+ IMPORT; no screen had ever asked.
92
+ * Guard: two clauses in `src/import-wizard.test.tsx`, mounted the way a HOST mounts the
93
+ wizard (closing on `onDone`). RED on the old bytes ("expected 'the import is closed' not
94
+ to contain 'the import is closed'"; the past run never on screen), GREEN on these.
95
+
96
+ Built against `@ai-matrx/records@0.54.0`. Suite at publish: 317/317 across 50 files,
97
+ including `demo/live-smoke.test.tsx`, this package's blocking live publish gate.
98
+
3
99
  ## 0.79.0
4
100
 
5
101
  **A joined column says what joins it.** (lane STORE-TAILS-2, VERIFIER-11 finding F5.)