@ai-matrx/records 0.5.1 → 0.7.2
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 +133 -0
- package/dist/core/index.cjs +201 -46
- package/dist/core/index.cjs.map +1 -1
- package/dist/core/index.d.cts +47 -3
- package/dist/core/index.d.ts +47 -3
- package/dist/core/index.js +201 -46
- package/dist/core/index.js.map +1 -1
- package/dist/index.cjs +144 -46
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +451 -47
- package/dist/index.d.ts +451 -47
- package/dist/index.js +144 -46
- package/dist/index.js.map +1 -1
- package/dist/react/index.cjs +263 -46
- package/dist/react/index.cjs.map +1 -1
- package/dist/react/index.d.cts +537 -47
- package/dist/react/index.d.ts +537 -47
- package/dist/react/index.js +263 -46
- package/dist/react/index.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,138 @@
|
|
|
1
1
|
# Changelog — @ai-matrx/records
|
|
2
2
|
|
|
3
|
+
## 0.7.2
|
|
4
|
+
|
|
5
|
+
**The door catalogue, regenerated while the store was still growing.** 0.7.1
|
|
6
|
+
mirrored 300 doors and the gate, running twelve minutes later, counted 301 —
|
|
7
|
+
another lane shipped one in the window. Regenerated: 301 doors. Nothing else
|
|
8
|
+
changed.
|
|
9
|
+
|
|
10
|
+
## 0.7.1
|
|
11
|
+
|
|
12
|
+
**The live suite opens the switch the way the store resolves it.**
|
|
13
|
+
|
|
14
|
+
0.7.0's release gate failed four clauses against the live store and none of them
|
|
15
|
+
was about this package's code. `platform.knob_resolve` reads an organization's
|
|
16
|
+
own override ABOVE the base knob row, and Test's Org gained one
|
|
17
|
+
(`custom/system_enabled` = false, written through the ramp screen's own writer)
|
|
18
|
+
— so the suite's in-transaction `update platform.feature_knob` stopped opening
|
|
19
|
+
anything and three cases met the store's switched-off refusal. Both rungs are
|
|
20
|
+
set inside the transaction now, for the member's organization and for the
|
|
21
|
+
stranger organization the membership wall case names, and the `rollback` still
|
|
22
|
+
puts both back.
|
|
23
|
+
|
|
24
|
+
The fourth was the door catalogue: 293 mirrored names against 300 live doors,
|
|
25
|
+
because other lanes added seven. `src/store.generated.ts` is regenerated from
|
|
26
|
+
the live store — 300 doors, 35 knobs, 1020 entity tokens — which is the file's
|
|
27
|
+
whole contract: nothing in it is typed by a person.
|
|
28
|
+
|
|
29
|
+
## 0.7.0
|
|
30
|
+
|
|
31
|
+
**A screen can ask what this person may do, before it offers it.**
|
|
32
|
+
|
|
33
|
+
The 19–20 September verdict (sixth pass) watched a colleague who had been shared
|
|
34
|
+
a table at Viewer double-click a cell, get a live editor, type a value and press
|
|
35
|
+
Enter — and only then be told she may not write. "The permission is right; the
|
|
36
|
+
screen told her she could." No screen could have done better: the store answers
|
|
37
|
+
"what may this person do to this thing?" in exactly one place,
|
|
38
|
+
`custom.effective_level`, which has no grant to `authenticated` and no decision
|
|
39
|
+
of its own — it takes ANY principal and ANY subject, so granting it to clients
|
|
40
|
+
would be handing out a visibility probe.
|
|
41
|
+
|
|
42
|
+
- **`client.myLevels({ ids })`** — the new `custom.my_levels` door. What level
|
|
43
|
+
the CALLER holds on the subjects they name, with no principal argument: the
|
|
44
|
+
person is resolved from the session, so you can ask about your own access and
|
|
45
|
+
about nobody else's. It takes a LIST so a page of fifty rows is one call, and
|
|
46
|
+
**every id asked about gets a row** — `null` included, because a missing row
|
|
47
|
+
and "no access" would be the same thing to the screen that asked and one of
|
|
48
|
+
them is a silence. `null` for an id that does not exist is the same answer, so
|
|
49
|
+
it is not an existence oracle.
|
|
50
|
+
- **`useMyLevel(id)` / `useMyLevels(ids)`** in `/react`.
|
|
51
|
+
- **`level.ts`**: `PermissionLevel`, `PERMISSION_LEVELS`, `atLeast`,
|
|
52
|
+
`asPermissionLevel`, `highestLevel`. The ladder a screen compares with is the
|
|
53
|
+
ladder the door compares with; two orderings would be two answers to one
|
|
54
|
+
question and the second is always wrong.
|
|
55
|
+
|
|
56
|
+
**What this release deliberately does NOT do.** A `Table.your_level` carried off
|
|
57
|
+
the read door looked free and was wrong: `tableList` reads the Table KERNEL, so
|
|
58
|
+
`read_records`'s `level` there is the caller's level on the kernel — viewer, for
|
|
59
|
+
everybody — and not on the table that row describes. It was written, measured
|
|
60
|
+
wrong within the hour (a table's own owner came back `viewer`), and removed; the
|
|
61
|
+
reason is in `core/client.ts` where the next person will reach for it. A table
|
|
62
|
+
is a record, and its level is asked for like any other record's.
|
|
63
|
+
|
|
64
|
+
### Consumer action
|
|
65
|
+
|
|
66
|
+
None required. `custom.my_levels` is live on the main database (lane UI-HONEST,
|
|
67
|
+
`uihonest_a_screen_can_ask_what_it_may_offer.sql` +
|
|
68
|
+
`uihonest_the_level_door_takes_a_json_list.sql`), so `myLevels` answers as soon
|
|
69
|
+
as this version is installed.
|
|
70
|
+
|
|
71
|
+
## 0.6.2
|
|
72
|
+
|
|
73
|
+
The generated store contract, regenerated at 279 doors. 0.6.1's gate was red on
|
|
74
|
+
nothing but the count: the door catalogue is asserted EQUAL to the live store's,
|
|
75
|
+
and other lanes landed a door in the ten minutes between the regeneration and
|
|
76
|
+
the publish. No source change and no consumer action.
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
## 0.6.1
|
|
80
|
+
|
|
81
|
+
0.6.0's release gate caught four things the live store had changed since the
|
|
82
|
+
contract was generated, and this is all four.
|
|
83
|
+
|
|
84
|
+
- **`54001` is a refusal class this package now knows.** `custom.record_delete`
|
|
85
|
+
stops a cascade that nests past sixty-four levels of containment — a loop
|
|
86
|
+
somebody built rather than a hierarchy — and it is a `store_limit`.
|
|
87
|
+
- **The generated contract is regenerated at 278 doors.**
|
|
88
|
+
- **The signed-out reach assertion excludes trigger functions**, for the reason
|
|
89
|
+
`platform.reopen_declared_doors` excludes them: they have no direct call
|
|
90
|
+
surface, so a grant on one says nothing about who can reach the store. Two
|
|
91
|
+
store triggers another lane landed turned it red while nothing about the
|
|
92
|
+
store's reach had changed.
|
|
93
|
+
- **The read door decides the organization WALL before the switch.** It opens
|
|
94
|
+
with `custom.assert_may_know_table`, so a person outside an organization is
|
|
95
|
+
told they are not a member and is never told whether the store is on for it.
|
|
96
|
+
The adapter suite accepts both of the store's own sentences and no third one.
|
|
97
|
+
|
|
98
|
+
### Consumer action
|
|
99
|
+
|
|
100
|
+
None.
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
## 0.6.0
|
|
104
|
+
|
|
105
|
+
**A column can be added.** The store grew the three doors a Field always needed
|
|
106
|
+
and this package carries them.
|
|
107
|
+
|
|
108
|
+
- **`fieldDeclare`, `fieldUpdate`, `fieldRetire`** on the client, and
|
|
109
|
+
`useFieldMutation()` in `/react`. Until now a Field was written with
|
|
110
|
+
`recordWrite` into the field kernel, and that could never work: the one write
|
|
111
|
+
door writes `data_class = 'record'` and cannot ALSO add the key to the Table
|
|
112
|
+
record's `fields` array, which the store's field guard requires before it
|
|
113
|
+
accepts any definition at all. Every screen that tried ended on *"the table
|
|
114
|
+
does not declare a field called … — declare it there first"*.
|
|
115
|
+
- **`NewFieldDeclaration`** — what a PERSON says when they add a column: a
|
|
116
|
+
parity type, a name, and for a choice list the choices themselves. The store
|
|
117
|
+
turns that into the behaviour, modifiers, format, unit, relation target,
|
|
118
|
+
relation maximum, compute_on and attached Rules its own guards demand, so a
|
|
119
|
+
client states an intention and never re-derives thirteen types of its own.
|
|
120
|
+
- **`FieldPatch`** — a field's own settings. What a field HOLDS is a conversion
|
|
121
|
+
and the door refuses it here by name.
|
|
122
|
+
- The generated store contract is refreshed to the live 260-door registry.
|
|
123
|
+
|
|
124
|
+
### Consumer action
|
|
125
|
+
|
|
126
|
+
Nothing breaks. A host that writes Fields with `recordWrite` should move to
|
|
127
|
+
`useFieldMutation().declare` — the old path is the defect, not a deprecation.
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
## 0.5.2
|
|
131
|
+
|
|
132
|
+
Automatic changed-only republish (docs/metadata drift since the last tag — see
|
|
133
|
+
`git diff npm/records/v0.5.1..npm/records/v0.5.2 -- apps/shared/records`).
|
|
134
|
+
No source changes intended and no consumer action required.
|
|
135
|
+
|
|
3
136
|
## 0.5.1
|
|
4
137
|
|
|
5
138
|
Refreshes the generated store contract to the live 240-door registry caught by
|