@ai-matrx/records-ui 0.95.3 → 0.95.10

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,7 +1,128 @@
1
1
  # Changelog — @ai-matrx/records-ui
2
2
 
3
+ ## 0.95.10
4
+
5
+ Automatic changed-only republish (docs/metadata drift since the last tag — see
6
+ `git diff npm/records-ui/v0.95.4..npm/records-ui/v0.95.10 -- apps/shared/records-ui`).
7
+ No source changes intended and no consumer action required.
8
+
9
+ ## 0.95.9
10
+
11
+ Automatic changed-only republish (docs/metadata drift since the last tag — see
12
+ `git diff npm/records-ui/v0.95.4..npm/records-ui/v0.95.9 -- apps/shared/records-ui`).
13
+ No source changes intended and no consumer action required.
14
+
15
+ ## 0.95.8
16
+
17
+ Automatic changed-only republish (docs/metadata drift since the last tag — see
18
+ `git diff npm/records-ui/v0.95.4..npm/records-ui/v0.95.8 -- apps/shared/records-ui`).
19
+ No source changes intended and no consumer action required.
20
+
21
+ ## 0.95.7
22
+
23
+ Automatic changed-only republish (docs/metadata drift since the last tag — see
24
+ `git diff npm/records-ui/v0.95.4..npm/records-ui/v0.95.7 -- apps/shared/records-ui`).
25
+ No source changes intended and no consumer action required.
26
+
27
+ ## 0.95.6
28
+ ### (lane CHAIR-STORE-PERF — a door the clock cut off says try again)
29
+
30
+ - **The `timed_out` remedy is one that is true of every door**: "Nothing was changed. Try again in a
31
+ moment." The store cancels the whole statement at its clock, so a timed-out create, column add or
32
+ page read wrote nothing; the old table sentence ("Try a smaller page, or…") was written for the page
33
+ read and was printed to a person adding one row to a three-row table. A door whose page can shrink
34
+ says so in its own hint, which still wins (`a-door-the-clock-cut-off-says-try-again.test.tsx`).
35
+
36
+ ### (lane CHAIR-REACH — Ask a table in one line; the condition builder's pickers)
37
+
38
+ - **An Ask box in the table page's own header bar** (`TableAsk`, first of the page actions
39
+ `TablePage` hands the host's header — or its own toolbar row). One line in ("count where
40
+ status is open by unit", "sum of copay where status is completed by month"), read by
41
+ `questionFromWords` (`askWords.ts`) into the Question builder's own `QuestionSpec`, answered by
42
+ its own runner (`askQuestion` → `custom.record_aggregate`) and drawn by its own answer view
43
+ (`QuestionAnswerView`, now exported), so the number is the one Questions gives. The line as it
44
+ was understood is printed over the answer; a word that names no column is said back
45
+ ("No column named “flavour”"), never dropped. A value on a choice column is matched to the
46
+ column's choice whatever its capitals. **Open in Questions** opens that question in the builder
47
+ (`QuestionPanel` prop `draft`). Exported: `TableAsk`, `askExampleFor`, `questionFromWords`,
48
+ `ASK_EXAMPLE`, `QuestionAnswerView`. Guard: `a-table-is-asked-in-one-line.test.tsx` (the
49
+ probe's truths: $147, 9, the four statuses).
50
+ - **The condition builder draws no native `<select>`**: the column, the comparison and the
51
+ group joiner are `PickOne` (`Condition.tsx` leaves the native-select allowlist; each picker
52
+ carries `data-condition="field|comparison|joiner"`). Tests drive them through
53
+ `testkit/pickOne`.
54
+
55
+ Consumer action: none. A host header receives Ask inside `actions` as before.
56
+
57
+ ### (lane CHAIR-REACH — "Link a record…" on every store record's menu)
58
+
59
+ - **A record's one action list gains `link-record`** ("Link a record…", after Merge with…): a
60
+ card's ⋯ and right-click (Gallery, Kanban, Pipeline) and the grid row's right-click (`row-link`).
61
+ The package draws only the entry; the HOST opens its one record picker and writes the link
62
+ through its own reference door — new optional port `RecordsUiHost.linkRecord({ tableId,
63
+ recordId, name })` (`RecordActionHost.link`, `GridMenuActions.linkRow`). Reading the record is
64
+ enough to link to it. Unbound, the entry says "Not available here".
65
+ Guard: `one-record-action-list-every-card-menu-draws-the-same.test.tsx` (THE_ORDER).
66
+
67
+ Consumer action: bind `linkRecord` on `<RecordsUiProvider>` (matrx-frontend binds it in
68
+ `recordsUiHostFor`; a build before the port ignores the key).
69
+ ## 0.95.5
70
+
71
+ Automatic changed-only republish (docs/metadata drift since the last tag — see
72
+ `git diff npm/records-ui/v0.95.4..npm/records-ui/v0.95.5 -- apps/shared/records-ui`).
73
+ No source changes intended and no consumer action required.
74
+
75
+ ## 0.95.4
76
+ ### (VISION-REACH lane 5 — an import never drops a row quietly)
77
+
78
+ - **Rows that share a name are combined, by default, before the write** (`ImportWizard`, persona
79
+ P03's families file: one row per student). The panel says "Family repeats: 140 names on 173
80
+ rows", opens on *are one record; other columns keep every value* when another column pins the
81
+ rows to one record (`sameRecordLikely`), lists the columns that became lists, and sets "Same row
82
+ means the same" to the name column. Every other column keeps every distinct value ("Zoe; Max");
83
+ a few-words column that became a list is made as Text, never a dropdown. `combineRows`,
84
+ `titleRepeats`, `sameRecordLikely` are exported (`importCombine`).
85
+ - **The name column is never a date or a number.** `obviousTitleColumn` skips columns whose values
86
+ are mostly numbers, read as dates or are blank on most rows, and when the only column of words
87
+ points at another table (a pledge's Family) it names the record AND keeps the link: the rows
88
+ carry the words a second time under `TITLE_COPY` (`__name__`), mapped to the title column.
89
+ - **The relation ask runs for a relation column the import is about to make** ("Create and
90
+ import"), not only for one the table already has — and its ambiguous choice gains *combine the
91
+ duplicates in <table>* (`client.migrateMerge`, then the names are read again).
92
+ - **Refusals are loud and persistent.** After the write: "43 of 220 rows were not added." with the
93
+ reasons grouped (`groupReasons`) and *Download the rows not added* (`refusedRowsCsv`). The table
94
+ page mounts `ImportNotice` above the data: the newest finished run that refused rows, the same
95
+ grouping and file, *Open import*, and *Dismiss* (this viewer's, kept in the browser). Exported:
96
+ `ImportNotice`, `runToNotice`, `groupReasons`, `refusedRowsCsv`, `refusedFileName`.
97
+ Guards: `an-import-never-doubles-a-family-or-drops-its-pledges.test.tsx`,
98
+ `a-table-says-its-last-import-left-rows-out.test.tsx`, `import-refusals-and-combine.test.tsx`.
99
+
100
+ Consumer action: none (TablePage carries the notice). Hosts mounting `ImportWizard` alone may mount
101
+ `ImportNotice` beside their table.
102
+
103
+ ### (wave 5)
104
+
105
+ - Structural verbs a person can reach (TABLE-ACTIONS wave 5, item 24):
106
+ - A record's menu carries **Merge with…** (`recordActions`, id `merge`, icon `git-merge`, after
107
+ Duplicate; needs write). `MergeRecordDialog` picks another record of the table, says what will
108
+ happen, merges into the record the menu was opened on (`client.migrateMerge`) and announces it
109
+ through `notify.reversible` (verb `merge`) with Undo (`client.migrateUndo`). Cards' ⋯ and
110
+ right-click open it; the grid's row right-click has it too (`row-merge`).
111
+ - A column's header menu carries **Change type…** (`col-retype`), opening the column's
112
+ `FieldRetype` in a dialog. A change made through `migrate_retype` is announced with Undo (verb
113
+ `change`), which puts its Migration back.
114
+ Guards: `two-records-merge-into-the-one-you-opened.test.tsx`,
115
+ `a-column-changes-type-and-a-row-merges-from-their-menus.test.tsx`, the Undo case in
116
+ `the-field-panel-changes-what-a-column-holds.test.tsx`.
117
+
118
+ Consumer action: a renderer that maps `ObjectActionIcon` exhaustively maps `git-merge`.
119
+
3
120
  ## 0.95.3
4
121
 
122
+ - Table chord labels speak the platform's words through the design system's `formatShortcut`:
123
+ "⌥⇧S" on a Mac, "Alt+Shift+S" on Windows and Linux (Archive: "⌥⇧Backspace" / "Alt+Shift+Backspace").
124
+ `TABLE_ACTION_CHORDS` holds the chord specs; `TABLE_ACTION_KEYS` the labels. Consumer action: none.
125
+
5
126
  Automatic changed-only republish (docs/metadata drift since the last tag — see
6
127
  `git diff npm/records-ui/v0.95.2..npm/records-ui/v0.95.3 -- apps/shared/records-ui`).
7
128
  No source changes intended and no consumer action required.
@@ -20,6 +141,12 @@ No source changes intended and no consumer action required.
20
141
 
21
142
  ## Unreleased
22
143
 
144
+ - Speed (T5.3 / PROOF-BOOK 1.18): a merged-grid open asks the store 11 times in the clinic bench
145
+ (was 16): the table's own version is read only when a write needs it (two controls each read it on
146
+ every open: 2 × `record_headers` + 2 × `io_revisions`), and the colours are not read again when
147
+ the Field list first arrives. A cell write on a LIVE page no longer re-reads the whole page — its
148
+ realtime notice re-reads the written row. Guard: `a-table-load-asks-the-store-within-its-budget.test.tsx`.
149
+ - One undo stack (PROOF-BOOK 1.5): a record added from the grid is an undo step (Undo archives it).
23
150
  - `QuestionPanel`: a date column's groups read as the grid prints the date (Sep 28, 2026, never the
24
151
  stored 2026-09-28; the key stays on the row's `data-group`), and the Sort row wraps on a phone
25
152
  instead of pushing "Show" onto two lines. Guard: `a-saved-question-opens-for-a-second-member.test.tsx`.