@ai-matrx/records 0.58.6 → 0.58.8

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,40 @@
1
1
  # Changelog — @ai-matrx/records
2
2
 
3
+ ## 0.58.8 (2026-09-25 — published by PUBLISH-SWEEP-5)
4
+
5
+ Carries UI-FIX-19's `TableHomeDestination.slug` (`461302fbf7`), which records-ui 0.85.10 reads to tell
6
+ two same-named organizations apart in the move list, so it publishes first.
7
+
8
+ ### Also in this release
9
+
10
+ ### Lane UI-FIX-19 (2026-09-24)
11
+
12
+ * **A move destination carries its web address.** `TableHomeDestination.slug` (`string | null`),
13
+ read by `parseTableHome` from `custom.table_home`'s destinations (store file
14
+ `uifix19_a_destination_carries_its_address.sql`, applied). A screen draws it beside a name
15
+ another destination also carries, so two organizations with one name can be told apart
16
+ (VERIFIER-19 #9). **Consumer action:** a host that builds `TableHomeDestination` by hand adds
17
+ `slug`.
18
+
19
+ ## 0.58.7
20
+
21
+ Automatic changed-only republish (docs/metadata drift since the last tag — see
22
+ `git diff npm/records/v0.58.6..npm/records/v0.58.7 -- apps/shared/records`).
23
+ No source changes intended and no consumer action required.
24
+
25
+ ## Unreleased — lane SOURCE-KEY (2026-09-25)
26
+
27
+ * **A record-store table's event-source key is `record:<table id>`** (was `custom_record:<table id>`,
28
+ the retired tier-2 table's word). `recordChangeTrigger(tableId)` now writes it; new
29
+ `recordSourceKey(tableId)` is the one builder, and `recordSourceTable(key)` reads the table back
30
+ from either key (rows saved before the move). The store moved first (lane SOURCE-KEY, applied to
31
+ production 2026-09-25 03:29 UTC): `custom.record_change_actions`, `custom.table_webhook_declare`
32
+ and the row-change producer write `record:<table id>`, read both, and turn an older client's
33
+ `custom_record:` key into the new one on the way in, so a schedule saved by an older release
34
+ still fires until the store refuses the old key (the next step, once this release is installed).
35
+ **Consumer action:** anything that compares a trigger's or webhook's key to the literal
36
+ `custom_record:` must use `recordSourceTable(key)`.
37
+
3
38
  ## 0.58.6 (2026-09-24 — published by PUBLISH-SWEEP-5)
4
39
 
5
40
  0.58.5 (the release run's automatic tag, run 36082256533) never reached npm: the live census found
@@ -2332,6 +2332,8 @@ __export(core_exports, {
2332
2332
  predictWriteRefusals: () => predictWriteRefusals,
2333
2333
  publicFormPath: () => publicFormPath,
2334
2334
  recordChangeTrigger: () => recordChangeTrigger,
2335
+ recordSourceKey: () => recordSourceKey,
2336
+ recordSourceTable: () => recordSourceTable,
2335
2337
  rememberedOpCount: () => rememberedOpCount,
2336
2338
  sameDocument: () => sameDocument,
2337
2339
  scopeChip: () => scopeChip,
@@ -2902,10 +2904,18 @@ async function exportPageXlsx(page, labels = {}, sheetLabel = "Records") {
2902
2904
  }
2903
2905
  return XLSX.write(workbook, { type: "array", bookType: "xlsx", compression: true });
2904
2906
  }
2907
+ function recordSourceKey(tableId) {
2908
+ return `record:${tableId}`;
2909
+ }
2910
+ var SOURCE_KEY = /^(record|custom_record):([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/;
2911
+ function recordSourceTable(key) {
2912
+ const m = key ? SOURCE_KEY.exec(key) : null;
2913
+ return m ? m[2] : null;
2914
+ }
2905
2915
  function recordChangeTrigger(tableId, options = {}) {
2906
2916
  return {
2907
2917
  type: "event",
2908
- entity_type: `custom_record:${tableId}`,
2918
+ entity_type: recordSourceKey(tableId),
2909
2919
  table_id: tableId,
2910
2920
  ...options.actions && options.actions.length > 0 ? { actions: options.actions } : {},
2911
2921
  ...options.changedFields && options.changedFields.length > 0 ? { changed_fields: options.changedFields } : {}
@@ -3029,6 +3039,7 @@ function parseTableHome(raw) {
3029
3039
  destinations: destinations.filter((d) => !!d && typeof d === "object" && !!wordsOf(d.id)).map((d) => ({
3030
3040
  id: String(d.id),
3031
3041
  name: wordsOf(d.name) ?? "An organization",
3042
+ slug: wordsOf(d.slug),
3032
3043
  role: wordsOf(d.role) ?? "member",
3033
3044
  ok: d.ok === true,
3034
3045
  why: wordsOf(d.why)