@ai-matrx/records 0.71.3 → 0.71.4

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,11 @@
1
1
  # Changelog — @ai-matrx/records
2
2
 
3
+ ## 0.71.4
4
+
5
+ Automatic changed-only republish (docs/metadata drift since the last tag — see
6
+ `git diff npm/records/v0.71.3..npm/records/v0.71.4 -- apps/shared/records`).
7
+ No source changes intended and no consumer action required.
8
+
3
9
  ## 0.71.3
4
10
 
5
11
  Automatic changed-only republish (docs/metadata drift since the last tag — see
@@ -8,10 +14,14 @@ No source changes intended and no consumer action required.
8
14
 
9
15
  ## 0.71.2
10
16
 
11
- The value-access refusal mirror (`core/validation.ts`) says what the live store says ("visibility and
12
- access belong to a Field and to a Record…"); this drift and a template name clash kept 0.71.1 off npm.
17
+ The value-access refusal mirror (`core/validation.ts`) and the live store (`custom.value_envelope_refusal`,
18
+ migration `t13_value_envelope_refusal_says_access`) both say "access belongs to a Field and to a Record…"
19
+ (T-13 wording); this drift and a template name clash kept 0.71.1 off npm.
13
20
  Template validator: cross-file text rule indexed once per template (library check ~36 s), a walk's
14
21
  submitted form row takes column defaults, a list link may hold no more records than the store allows.
22
+ G1 gate: a published template is held against the other published templates only, so a new draft that
23
+ reuses a published template's person or words is reported on the draft (and refused by
24
+ `templates:publish verify`) instead of turning the published one red and holding the release.
15
25
  No consumer action.
16
26
 
17
27
  ## 0.71.1
@@ -3597,6 +3597,10 @@ function validateTemplate(raw, options = {}) {
3597
3597
  const tz = raw.business?.timezone || "UTC";
3598
3598
  const tablesRaw = allTables(raw);
3599
3599
  const ISO_DAY = /\b\d{4}-\d{2}-\d{2}\b/;
3600
+ for (const table of tablesRaw) {
3601
+ const tf = table.fields.find((f) => f.key === table.titleField);
3602
+ if (tf && tf.default !== void 0) say(`tables (${table.token}).fields (${tf.key})`, `"${tf.label}" names each ${table.labelSingular.toLowerCase()}, so it takes no default; ask it on the form instead.`);
3603
+ }
3600
3604
  for (const table of tablesRaw) {
3601
3605
  for (const f of table.fields.filter((x) => isRelation(x) && x.parityType !== "attachment")) {
3602
3606
  const max = f.relationMax ?? (f.multi ? STORE_LIST_RELATION_MAX : 1);