@ai-matrx/records-ui 0.63.0 → 0.66.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 +114 -0
- package/dist/index.cjs +398 -307
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +213 -17
- package/dist/index.d.ts +213 -17
- package/dist/index.js +392 -295
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,119 @@
|
|
|
1
1
|
# Changelog — @ai-matrx/records-ui
|
|
2
2
|
|
|
3
|
+
## 0.66.0
|
|
4
|
+
|
|
5
|
+
**A screen stops talking to a developer.** (lane TAILS-6.)
|
|
6
|
+
|
|
7
|
+
Two sightings on ONE table's rail, watched from the admin seat by the GUIDE lane on 2026-09-21:
|
|
8
|
+
|
|
9
|
+
> Checklists — "Something went wrong at our end" ·
|
|
10
|
+
> `@ai-matrx/records did not recognise SQLSTATE from checklistTemplates`
|
|
11
|
+
>
|
|
12
|
+
> Dashboards — "… bind `openRecords` on `<RecordsUiProvider>` …"
|
|
13
|
+
|
|
14
|
+
Both are the same defect in two coats: a sentence written for whoever maintains the code,
|
|
15
|
+
printed to the person who owns the business.
|
|
16
|
+
|
|
17
|
+
* **`refusalForAPerson` no longer promotes an engineer's hint to the person's remedy.** It
|
|
18
|
+
prefers the door's own hint over its table, which is right — but it assumed every hint came
|
|
19
|
+
from the store, and the machine-identity filter only catches a five-character SQLSTATE.
|
|
20
|
+
New `isEngineerText` / `ENGINEER_TEXT` judge a sentence by SHAPE — a package name, the word
|
|
21
|
+
SQLSTATE, a `<Component>`, a camelCase identifier, a backticked token, "bind X on …" — and
|
|
22
|
+
send it to `forEngineers` wherever it came from. `error.diagnostic` from
|
|
23
|
+
`@ai-matrx/records` 0.47.0 joins the same line.
|
|
24
|
+
* **Titles and remedies for `unreachable`, `needs_approval`, `stale_read` and `timed_out`,**
|
|
25
|
+
which had none and fell through to "Something went wrong at our end". A call that never
|
|
26
|
+
reached the store now says so and says nothing was changed.
|
|
27
|
+
* **Every unbound-port sentence rewritten for the person it is shown to** — the nine of them,
|
|
28
|
+
not the two that were caught: `NO_OPEN_RECORDS_REASON`, `NO_REASK_REASON`,
|
|
29
|
+
`NO_SAVED_VIEWS_REASON`, `NO_MEMBERS_REASON`, `NO_SHARE_REASON`, `NO_UPLOAD_REASON`,
|
|
30
|
+
`NO_CHAT_REASON`, `NO_ENRICH_REASON`, `IN_MEMORY_QUEUE_REASON`. Each still says what is
|
|
31
|
+
missing and now says what to do instead; the instruction for whoever maintains the app moved
|
|
32
|
+
into the TSDoc above it, where it always belonged.
|
|
33
|
+
* **`TablePage` gains `activeGroupField` and `cameFrom`,** so a host CAN bind `openRecords`.
|
|
34
|
+
The store has no door that returns the rows behind an aggregate filter, so a click cannot
|
|
35
|
+
promise a narrowed list — what it can do is open this table's board with its columns set to
|
|
36
|
+
the field the chart grouped by, and `cameFromLine` says plainly that this is every record
|
|
37
|
+
grouped that way rather than only the ones the number counted.
|
|
38
|
+
* **Guard:** `src/no-developer-sentences.test.tsx` — shown failing on the pre-fix bytes with
|
|
39
|
+
the exact sentence the GUIDE lane read, then passing. It needs no server.
|
|
40
|
+
|
|
41
|
+
**Consumer action:** bind `openRecords` on your `RecordsUiProvider` and pass `activeGroupField`
|
|
42
|
+
/ `cameFrom` through from the address, or leave it unbound and the canvas says so in plain
|
|
43
|
+
English. `matrx-frontend`'s `/data-v2/[tableId]` route is the worked example.
|
|
44
|
+
|
|
45
|
+
## 0.65.0
|
|
46
|
+
|
|
47
|
+
**A condition about a relation column stops asking a person to type a uuid.**
|
|
48
|
+
(lane RELATION-DISPLAY-2.)
|
|
49
|
+
|
|
50
|
+
* **`ConditionField` carried no type, so the ONE condition builder could not know a
|
|
51
|
+
column points at another record.** It drew the same plain text box every other
|
|
52
|
+
clause gets — and a relation's stored value is the other record's id (FLD-6 /
|
|
53
|
+
REL-1), so the only way to write a true clause was to find and TYPE a uuid. The
|
|
54
|
+
dispatcher's actual house rule, *"a job for Harborview Property Group cannot
|
|
55
|
+
leave Scheduled without a purchase order"*, was unwritable by exactly the person
|
|
56
|
+
the builder exists for. A box that accepts anything and can only produce a rule
|
|
57
|
+
matching nothing is law 4's dead control.
|
|
58
|
+
* `ConditionField` now carries an OPTIONAL `field`. When it is a relation, the value
|
|
59
|
+
control is **`RelationPicker`** — the same picker the cell uses, on the same
|
|
60
|
+
`relation_words_many` the cell reads — so a filter offers the column's own joined
|
|
61
|
+
words ("Harborview Property Group, Carpinteria") and writes the ID. A filter and
|
|
62
|
+
the column it filters can no longer disagree about what a record is called.
|
|
63
|
+
* It is asked for ONE record even when the column holds several: a clause compares
|
|
64
|
+
against one value, and a picker that let somebody choose three would write an
|
|
65
|
+
expression this row cannot draw back.
|
|
66
|
+
* Both callers in this package already held the whole `Field` and were throwing it
|
|
67
|
+
away one line before handing it over — `StageRules` and `FormBuilder`. In the form
|
|
68
|
+
builder this is the OWNER's screen; a stranger is still never asked a relation
|
|
69
|
+
question (`publicQuestions.ts` is untouched).
|
|
70
|
+
|
|
71
|
+
**Consumer action:** none — `field` is optional and a caller passing only
|
|
72
|
+
`{id, key, label}` gets exactly the old behaviour, which has its own clause. A host
|
|
73
|
+
that wants the picker passes the `Field` it already has.
|
|
74
|
+
|
|
75
|
+
*Numbered 0.65.0, not 0.64.0: a peer lane claimed 0.64.0 for the coercion primitive
|
|
76
|
+
while this work was in flight and tagged it first. Two lanes bumping one package in
|
|
77
|
+
one afternoon is the cost of a shared checkout; the fix is to move, never to take a
|
|
78
|
+
version somebody else's tag already names.*
|
|
79
|
+
|
|
80
|
+
## 0.64.0
|
|
81
|
+
|
|
82
|
+
> 🚨 **0.64.0 NEVER PUBLISHED, AND EVERYTHING IN IT SHIPPED INSIDE 0.65.0.** Its publish run
|
|
83
|
+
> (35638062219) was **cancelled — not failed** — because `npm/records/*` and `npm/records-ui/*`
|
|
84
|
+
> share ONE concurrency slot that keeps only the newest pending run, and `npm/records-ui/v0.65.0`
|
|
85
|
+
> displaced it. Nothing was lost: 0.65.0 is built from `origin/main`, which contains this
|
|
86
|
+
> commit, and the tarball carries `fieldKindFor`, `coerceTypedAnswer`, `valueFromPastedText`
|
|
87
|
+
> and `enumLabels` — verified by `npm pack`, not by version number. `npm view` goes
|
|
88
|
+
> 0.63.0 → 0.65.0 with no 0.64.0 in between. The entry is kept as written so the work is
|
|
89
|
+
> still findable by what it did. *(Recorded by lane RELATION-DISPLAY-2, whose tag did the
|
|
90
|
+
> displacing.)*
|
|
91
|
+
|
|
92
|
+
**The paste and the editor stop owning their own opinion of a column, and the capture sheet
|
|
93
|
+
stops minting NaN.**
|
|
94
|
+
|
|
95
|
+
- **`editorKindFor` is `fieldKindFor`** (`@ai-matrx/records` 0.45.0) with this package's
|
|
96
|
+
kernel File/Person ids bound. The classifier body lived here and was the only one.
|
|
97
|
+
- **`valueFromPastedText` is one call to `coerceTypedAnswer`**, keeping this package's label
|
|
98
|
+
so a refusal names the column the way the grid's header does. Its 150-line body WAS the
|
|
99
|
+
coercion — and while it sat here, the public booking page was unbookable over any table
|
|
100
|
+
with a number field.
|
|
101
|
+
- **`ChoiceOptions`** is re-exported from the core instead of declared twice.
|
|
102
|
+
- **`CaptureRun`** used `Number(raw)`, which answers NaN for "about twelve" — and a NaN
|
|
103
|
+
becomes null on the wire, so a reading taken in a yard could silently record nothing. It
|
|
104
|
+
coerces through the one body now and KEEPS the typed text when the value is refused.
|
|
105
|
+
- **`ViewSwitcher`**'s calendar offer tested `kind === "datetime" || kind === "date"`. FLD-11
|
|
106
|
+
has no "date" kind; it compiled only because the old `EditorKind` union carried two words
|
|
107
|
+
nothing produced.
|
|
108
|
+
- **`BuildOrAsk`** (landed 0.63.x→here): "Ask an agent" is ABSENT when `mayBuild` is false —
|
|
109
|
+
asking an agent is the same act as building by hand, through the same doors.
|
|
110
|
+
- **One label map per enum** (`enumLabels.ts`): no panel keeps its own copy, and the
|
|
111
|
+
"Done"/"Finished" split between `ChecklistRunner` and `ActionInbox` is gone.
|
|
112
|
+
|
|
113
|
+
*Consumer action:* none. `EditorKind` is now an alias of `FieldKind`; a host that compared a
|
|
114
|
+
kind against `"date"` or `"boolean"` was comparing against a value the classifier never
|
|
115
|
+
returned.
|
|
116
|
+
|
|
3
117
|
## 0.63.0
|
|
4
118
|
|
|
5
119
|
**A relation cell finally SHOWS what its column was configured to show, and the
|