@ai-matrx/records-ui 0.48.0 → 0.50.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,70 @@
1
1
  # Changelog — @ai-matrx/records-ui
2
2
 
3
+ ## 0.50.0
4
+
5
+ **Rules for entering this stage — the screen that writes a gate.**
6
+
7
+ A board could enforce a rule and nobody could write one: gates arrived through
8
+ `custom.pipeline_declare`, which is a person at a terminal, an agent, or the
9
+ `pipeline_propose` verb. The homeowner this was built against told her partner
10
+ her rule out loud — "nothing over $5,000 gets approved on a single bid" — and
11
+ there was nowhere to type it.
12
+
13
+ `StageRulesSection` is a fourth section of the table settings rail, drawn only on
14
+ a table that is a board. One row of header: the heading, which stage, how many
15
+ rules, and Add a rule.
16
+
17
+ Four things it has to get right, each of which is a defect if it does not:
18
+
19
+ - **It opens the rule that is there.** `PipelineRule` now carries the gate's own
20
+ `when` and `demands`, so the editor shows "When Quote amount is more than 5000,
21
+ it cannot get here unless…" instead of a blank condition it would overwrite on
22
+ Save. A gate the store never kept the words for says exactly that, with its
23
+ sentence, rather than being drawn as an empty condition somebody saves over.
24
+ - **It says what the rule would do today**, in cards and by name, while she is
25
+ still typing — "3 of 13 quotes would be refused today — Primary Bathroom,
26
+ Primary Bathroom, Guest Bathroom". The old way to find out was to drag a card
27
+ and be refused.
28
+ - **Its third answer is the organization's, not the rule's.** A gate chooses
29
+ between turning a card away and asking for approval. Whether a refusal is
30
+ softened to a warning is one switch for the whole organization, so the screen
31
+ SAYS which mode it is in instead of offering a third option that quietly means
32
+ something else.
33
+ - **It will not save a refusal with no words.** The button is absent with a
34
+ sentence saying what is missing, never present and dead.
35
+
36
+ **There is still exactly one condition builder.** The form builder's private
37
+ `Condition` moved to `./Condition` as `ConditionRow` and both screens mount it —
38
+ a second one would be a second dialect of the store's one Rule language. Moving
39
+ it found a defect: the value was written as a STRING always, so
40
+ `{"op":"gt","args":[…,{"const":"5000"}]}` compared a number column against text.
41
+ A value that is a number is now written as a number, which is the difference
42
+ between "nothing over $5,000" working and not.
43
+
44
+ ## 0.49.0
45
+
46
+ **"Add field" said it worked and the column was not there.**
47
+
48
+ A trip planner loading the fifty-one US National Parks — name, state, date
49
+ established, area — so she could sort a road trip by region. Crew C, driving the
50
+ real screens on 2026-09-21: *"Every 'Add field' attempt appeared to succeed on
51
+ screen (no error text), but a direct fields() read afterward showed only the
52
+ table's default Title column — none of the 5 fields actually persisted."* The grid
53
+ then drew "This table has no columns yet" over fifty-one real, complete rows.
54
+
55
+ The panel closed on the DOOR'S answer. **Success is a read-back now**: after the
56
+ declare it asks the table for its columns and looks for the one it just made, BY
57
+ ID. If it is not there the panel stays open and says so — what is true, that no
58
+ record value was lost, and what to do — instead of reporting a success it has not
59
+ confirmed, which is the one thing a person cannot recover from, because they move
60
+ on.
61
+
62
+ The store's own cause was fixed by lane LIMITS-FIX the same day. This is the half
63
+ that means the SCREEN can never claim it again, whatever the store does next.
64
+ `src/add-field-readback.test.tsx`, three clauses.
65
+
66
+ **Consumer action:** none.
67
+
3
68
  ## 0.48.0
4
69
 
5
70
  **The record panel says when it could not read the footnote.**