@ai-matrx/records 0.54.0 → 0.56.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,83 @@
1
1
  # Changelog — @ai-matrx/records
2
2
 
3
+ ## 0.56.0
4
+
5
+ **A Person or File column takes an id** (lane RELATION-TARGETS): `coerceTypedAnswer`'s member and
6
+ attachment arms pass a member's user id, an uploaded file's id or the kernel record's own id
7
+ through as the value, because the store resolves it to the Person / File record at every write
8
+ door; a typed NAME is still refused, with the control that holds it.
9
+
10
+ **And the grid's store primitives** (lane GRID-PRIMITIVES), below. Published by PUBLISH-SWEEP-4.
11
+
12
+ ### The grid's store primitives
13
+
14
+ **Everything the /data grid rebuild needs from the store, as typed calls** (`src/grid.ts`):
15
+ `tableDecorate` / `tableDecorations` (row color by a choice column, ordered color rules, hand
16
+ highlights on rows, cells and columns — Fields and records by id), `gridLayout` (platform →
17
+ organization knob `custom/grid_layout` → the saved view's own `definition.layout`, each choice
18
+ saying where it came from), `formulaParse` (the older grid's formula text → the store's
19
+ expression), `actionDeclare` / `rowActions` / `actionRun` (a row action on a whole selection in
20
+ ONE transaction; `actionRefusals(error)` lists every record and field that refused),
21
+ `tableWebhookDeclare` / `tableWebhooks` / `tableWebhookArchive` (every record change out to a
22
+ signed webhook), `tableFromExample` (one real use case of `./use-cases`, built whole),
23
+ `autonumberBackfill`, `ioExport` and `exportXlsx` (the export door's own page as an .xlsx, a
24
+ withheld column named on its own sheet). `AggregateOperation` gains `median`, `filled`, `empty`,
25
+ `unique`.
26
+
27
+ **Consumer action:** none until the chair applies the five `gridprim_*` migrations to the main
28
+ database (01:00–04:00 PT) and `pnpm records:generate` lists the doors in `STORE_DOORS`. Until
29
+ then every new method answers `door_absent` naming GRID-PRIMITIVES — never a guess, never an
30
+ empty answer.
31
+
32
+ ## 0.55.1
33
+
34
+ **0.55.0, actually published.** The tag `npm/records/v0.55.0` never reached the registry: its
35
+ publish gate failed on `pnpm typecheck` (OLD-TABLES-2's relation-words suite had four type
36
+ errors vitest never reads) and then on two `real-doors` clauses that still asserted the record
37
+ store OFF after STORE-ON's owner ruling made it ON by default. Both are fixed in the suites; no
38
+ runtime byte differs from what 0.55.0 describes below. The version moved rather than the tag
39
+ because a published tag is never rewritten. (lane PUBLISH-SWEEP-4.)
40
+
41
+ ## 0.55.0
42
+
43
+ **Three things that were already in the source and had never reached a consumer.** (published
44
+ by lane PUBLISH-SWEEP-4; built by STORE-TXN, OLD-TABLES-2 and ORG-CLEANUP-2, each of which
45
+ landed its work marked "source only, not published".)
46
+
47
+ * **`recordWriteGraph`** — the typed client over `custom.record_write_graph` (lane STORE-TXN).
48
+ A parent, the edges it stands on and the rows that belong to it in ONE transaction, with one
49
+ op id for the whole graph. `recordWrite` and `recordWriteMany` are each one statement, so a
50
+ caller needing a parent and its children to land together had no door: a loop is N
51
+ transactions and a failure on child nineteen leaves a parent standing without the lines it
52
+ promised. Not a second write path — the door calls `custom.record_write_many`,
53
+ `public.assoc_add` and `platform.relation_set`, so every guard and trigger runs once as
54
+ before. `RecordGraphWritten` counts the two edge writers apart (`edge_ids` / `relations`)
55
+ instead of making a caller subtract.
56
+ * **`relationWordsMany` dispatches by store** (lane OLD-TABLES-2). A relation cell holds an id
57
+ and a screen shows words, and there are two stores holding such cells: `custom.record` and
58
+ the pre-doctrine `workbench.udt_*` tables, where most people's data actually sits. ONE client
59
+ primitive now reads both, discriminated by an optional `store` — and **a caller that names
60
+ none reaches exactly the door and the arguments it reached before**, so the thirteen live
61
+ screens on `custom._words_for` change not one line. The older arm goes to
62
+ `workbench.udt_row_words_many` through `WORKBENCH_DOORS` / `WORKBENCH_SCHEMA`, named by hand
63
+ for the same reason `TRUST_DOORS` is (`records:generate` reads `custom` and only `custom`).
64
+ The arms are asymmetric on purpose: the unified arm takes the FIELD because that is where the
65
+ display spec is declared and judged; the older store has no declare-time judge, so its arm
66
+ carries the spec. An id the door answered nothing for stays ABSENT from the map either way —
67
+ inventing "Untitled" would erase the difference between a cell pointing at nothing and a row
68
+ that was refused. New types: `RelationStore`, `RelationDisplaySpec`, `RelationWordsManyArgs`.
69
+ * **The `throwaway` placeholder pattern** (lane ORG-CLEANUP-2) — after 48 organizations named
70
+ "Throwaway Dash 3fee58c2" walked back onto the owner's organization picker overnight and
71
+ `PLACEHOLDER_PATTERNS` could not see one of them: 28 of the 48 carried no `zz` at all. It
72
+ now catches "throwaway", "disposable org", "safe to delete" and "test only", and mirrors
73
+ `iam.placeholder_in_a_name` on the platform database — a pattern added to one belongs in the
74
+ other.
75
+
76
+ Also regenerated `store.generated.ts`, which was stale (`real-doors.test.ts` was red on main
77
+ claiming `record_write_graph` absent while it exists). Proof: `src/__tests__/relation-words-by-store.test.ts`
78
+ goes RED on 3 of 5 clauses with one line of the dispatch reversed. Suite at publish: 105/105
79
+ across 9 files.
80
+
3
81
  ## 0.54.0
4
82
 
5
83
  **A formula can be re-aimed through a typed door.** (lane STORE-TAILS-2's ask, published by