@ai-matrx/records-ui 0.85.13 → 0.85.16
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 +113 -0
- package/dist/index.cjs +2071 -1698
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +55 -2
- package/dist/index.d.ts +55 -2
- package/dist/index.js +2073 -1699
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,118 @@
|
|
|
1
1
|
# Changelog — @ai-matrx/records-ui
|
|
2
2
|
|
|
3
|
+
## 0.85.16
|
|
4
|
+
|
|
5
|
+
Automatic changed-only republish (docs/metadata drift since the last tag — see
|
|
6
|
+
`git diff npm/records-ui/v0.85.15..npm/records-ui/v0.85.16 -- apps/shared/records-ui`).
|
|
7
|
+
No source changes intended and no consumer action required.
|
|
8
|
+
|
|
9
|
+
## Unreleased — lane VIEW-STATE-PERSONAL (2026-09-25)
|
|
10
|
+
|
|
11
|
+
Needs `@ai-matrx/records` with `viewLookRead` / `viewLookSet` (Unreleased) and the store doors
|
|
12
|
+
`custom.view_look_read` / `custom.view_look_set` (live on production, 2026-09-25 19:19Z).
|
|
13
|
+
|
|
14
|
+
### A look at a view is yours until you save it (VERIFIER-23 item 1)
|
|
15
|
+
|
|
16
|
+
* **Every view-configuration change a person makes while looking is HER look, not the view's.** On
|
|
17
|
+
production the owner's *Group by → Status* on a board became the tenant liaison's board the next
|
|
18
|
+
time she opened it: `TablePage` merged every pick onto the shared view (`view_declare`). Now a
|
|
19
|
+
pick of the board's grouping, the calendar's date field, a sort, a filter, a hidden column, a
|
|
20
|
+
width, a colour or the layout is kept for that person through `custom.view_look_set` and laid
|
|
21
|
+
over the view (`applyLook`); a reload keeps it; nobody else sees it. The view row is never
|
|
22
|
+
written by a pick. (Airtable and Notion's rule; Notion's "Save for everyone" / "Reset".)
|
|
23
|
+
* **One line says so, with its doors** (`[data-view-look]`): *"You changed how this view looks. Only
|
|
24
|
+
you see it."* · **Save to view** (someone who may edit the table; the one `view_declare`, and the
|
|
25
|
+
default view's layout stays the person's look — "Make … the default" is that door) · **Save as
|
|
26
|
+
new view** (editor; the look becomes a view of its own) · **Reset to view** (everyone; the look is
|
|
27
|
+
archived). A viewer never sees Save to view or Save as new view — absent, not dead.
|
|
28
|
+
* **Reorder is offered only to someone who may edit the table**: a hand-set order is the view's
|
|
29
|
+
sort for everybody (`view_record_order_set` now needs editor; the store refuses it otherwise).
|
|
30
|
+
* New module `viewLook.ts` (exported): `ViewLook`, `lookPart`, `lookDocument`, `lookFromDocument`,
|
|
31
|
+
`applyLook`, `lookDiffers`, `saveToViewPlan`, `readLooks`, `keepLook`, `LOOK_WORDS`.
|
|
32
|
+
* Suite `a-look-at-a-view-is-yours-until-you-save-it.test.tsx`: RED 4/6 on the prior `TablePage` /
|
|
33
|
+
`ViewSwitcher` (the pick sent `view_declare`; no look, no Save / Reset) → GREEN 6/6.
|
|
34
|
+
|
|
35
|
+
## 0.85.15 (2026-09-25 — published by PUBLISH-SWEEP-7)
|
|
36
|
+
|
|
37
|
+
The tagged 0.85.14 never reached npm: its deterministic gate failed on `NeverRecorded … custom.field_declare` (fixture recorded against records 0.58.11). The fixture is re-recorded (below); everything 0.85.14 carried ships here. Needs `@ai-matrx/records` >= 0.58.13 (`viewDesignate` / `custom.view_designate`).
|
|
38
|
+
|
|
39
|
+
### A held decision survives a reload (GATES-TAIL, VERIFIER-21 #3r, 2026-09-25)
|
|
40
|
+
|
|
41
|
+
* **`ActionInbox` keeps every open Undo hold in the browser until the decide door answers for it**
|
|
42
|
+
(`localStorage` `records-ui:held-decisions`, one entry per approval). A reload during the
|
|
43
|
+
five-second hold used to kill the made-on-pagehide request with the page, and the reloaded inbox
|
|
44
|
+
showed the approval pending with no word, though the screen had said "Declined". Now the
|
|
45
|
+
reloaded inbox shows it still held ("Declined · Undo") for the rest of its window, then makes it;
|
|
46
|
+
past its window it is made at once and says so. Undo forgets it; an approval the store no longer
|
|
47
|
+
lists as waiting on this person is forgotten. The store keeps no pending-decision state, so this is
|
|
48
|
+
a browser-side promise; the store still decides who may decide. Suite RED 2/2 → GREEN 7/7.
|
|
49
|
+
|
|
50
|
+
### Gate recording is re-runnable and leaves nothing behind (2026-09-25)
|
|
51
|
+
|
|
52
|
+
* **The deterministic suite is re-recorded against `@ai-matrx/records` 0.58.12** (demo only; no
|
|
53
|
+
shipped code changed). The publish of 0.85.14 failed on `NeverRecorded … custom.field_declare`
|
|
54
|
+
because 0.58.12 sends a column's word as `type`; `demo/fixtures/doors.json` is re-recorded.
|
|
55
|
+
* **Why re-recording kept failing.** Not a name collision — every recording already names its tables
|
|
56
|
+
with a per-run stamp saved in the fixture. The first-time walk asserted a freshly declared table
|
|
57
|
+
had NO columns, which the store stopped producing on 2026-09-21 (a declared name is a Field) and
|
|
58
|
+
cannot produce at all now (`custom.field_retire` refuses a table's title column, REC-2). The walk
|
|
59
|
+
now asserts what the store makes, as `live-smoke` already did: the declared column, drawn, and no
|
|
60
|
+
"no columns yet" sentence over it.
|
|
61
|
+
* **A failed recording never overwrites the fixture, and every run archives what it made.** The
|
|
62
|
+
recording seam keeps a ledger of every record a creating door returned; `afterAll` soft-deletes
|
|
63
|
+
exactly those, newest first, whatever happened (`recorded-doors.ts`, `deterministic.test.tsx`).
|
|
64
|
+
* **`live-smoke` takes back its package table's Home** (read from the Table's `parent_id`). Every gate
|
|
65
|
+
run used to leave one "<name> views Home" in the test organization; 144 stray walk records in
|
|
66
|
+
Test's Org (test@test.com) were archived through `custom.record_delete`.
|
|
67
|
+
|
|
68
|
+
### Lane VIEW-SWITCH-NOT-DESIGNATION (2026-09-25)
|
|
69
|
+
|
|
70
|
+
* **A look at a table never changes how it opens** (`TablePage.tsx`, `views.ts`; VERIFIER-21).
|
|
71
|
+
Pressing Kanban or Calendar saved `layout` onto the table's DEFAULT view, so the next person to
|
|
72
|
+
open the table landed in the last look anybody took. A press on the default view now carries
|
|
73
|
+
every other key it changed (a board's grouping, a calendar's date, a colour) and never `layout` or
|
|
74
|
+
`isDefault` (`viewPatchFor`); the store refuses them through `view_declare` by name. The one way to
|
|
75
|
+
change how a table opens is the menu's **"Make <layout> the default"** — offered only to someone
|
|
76
|
+
who may edit the table and only when what is showing is not already how it opens — sent through
|
|
77
|
+
`designateView` → `custom.view_designate` (editor). New exports: `viewPatchFor`,
|
|
78
|
+
`openingLayoutOf`, `makeDefaultLabel`, `designateView`. Test:
|
|
79
|
+
`a-look-at-a-table-never-changes-how-it-opens.test.tsx` (RED on the prior `TablePage`: two layout
|
|
80
|
+
writes onto the default view and no designate control; GREEN 6/6).
|
|
81
|
+
* **A date stays a date on a board card** (`CardDates.tsx`, `ViewSwitcher.tsx`, `Pipeline.tsx`;
|
|
82
|
+
VERIFIER-21 item 5). Kanban and pipeline cards carry the table's date columns under the title,
|
|
83
|
+
drawn by the one value renderer (`RecordValue`), so "Mar 1, 2026" reads the same on the card as
|
|
84
|
+
in the Sheet, the Grid, the record panel and the Calendar; a blank date draws nothing and a
|
|
85
|
+
withheld one says so. Test: `a-board-card-shows-its-date.test.tsx` (RED: the card read only
|
|
86
|
+
"INV-20417"; GREEN, also under `TZ=America/Los_Angeles`).
|
|
87
|
+
|
|
88
|
+
### Lane BIG-VALUES-READERS (2026-09-25)
|
|
89
|
+
|
|
90
|
+
* **A row read through the matching door opens its whole text** (`values.tsx`): every store read
|
|
91
|
+
door (`custom.read_records_matching` — the grid's — `read_record`, `read_records`,
|
|
92
|
+
`read_records_by_ids`, `read_records_archived`) now carries a value-kept-as-a-file's pointer
|
|
93
|
+
(`_values.<key>.src` -> `_sources.<ptr>`, file fields only), so `wholeValueOf` finds it and the
|
|
94
|
+
grid cell shows "Open the whole text" on every read path. `ProvenanceBadge` now draws nothing for
|
|
95
|
+
such a pointer (the cell already says the text is in a file) instead of the pointer's raw fields.
|
|
96
|
+
Test `a-row-read-through-the-matching-door-opens-its-whole-text.test.tsx` (RED 1/3 -> GREEN 3/3).
|
|
97
|
+
Consumer action: none.
|
|
98
|
+
|
|
99
|
+
### Lane RC-B2b (2026-09-25)
|
|
100
|
+
|
|
101
|
+
* **Authored form text reads the way it was written** (`host.tsx`, `FormRunner.tsx`): new optional
|
|
102
|
+
host port `RecordsUiHost.renderText(text, where)` with `RenderTextSlot`
|
|
103
|
+
(`"form-intro" | "form-help" | "form-thank-you"`). A form's intro, a question's help and the
|
|
104
|
+
thank-you body go through it, so the host's one markdown renderer draws `**bold**`, math and
|
|
105
|
+
links; unbound, the text shows exactly as written. Suite
|
|
106
|
+
`authored-form-text-reads-through-the-host.test.tsx`: RED with the port ignored, GREEN 2/2.
|
|
107
|
+
**Consumer action:** matrx-frontend wraps `/f/[formId]`'s `FormRunner` in
|
|
108
|
+
`RecordsUiProvider value={{ renderText }}` returning `RichContentInline` (phrasing, valid in `<p>`).
|
|
109
|
+
|
|
110
|
+
## 0.85.14 (tagged by the auto release; never published, see 0.85.15)
|
|
111
|
+
|
|
112
|
+
Automatic changed-only republish (docs/metadata drift since the last tag — see
|
|
113
|
+
`git diff npm/records-ui/v0.85.13..npm/records-ui/v0.85.14 -- apps/shared/records-ui`).
|
|
114
|
+
No source changes intended and no consumer action required.
|
|
115
|
+
|
|
3
116
|
## 0.85.13 (2026-09-25 — published by PUBLISH-SWEEP-6)
|
|
4
117
|
|
|
5
118
|
**Needs `@ai-matrx/records` 0.58.11.** 0.85.12 was tagged but never reached npm: its packed-consumer
|