@ai-matrx/records 0.71.3 → 0.72.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,19 @@
|
|
|
1
1
|
# Changelog — @ai-matrx/records
|
|
2
2
|
|
|
3
|
+
## 0.72.0
|
|
4
|
+
|
|
5
|
+
`footprintOf` counts every agent an install copies — the template's own plus `extraAgents` — and the
|
|
6
|
+
workflows it creates (`TemplateFootprint.workflows`, new). The card line now says "4 agents · 1 workflow"
|
|
7
|
+
where it said "1 agent" for a template that made four.
|
|
8
|
+
Consumer action: a gallery that lists footprint parts may show `workflows` (matrx-frontend
|
|
9
|
+
`features/make/gallery/catalogue.ts` does). Declared cards on live were recomputed 2026-10-05.
|
|
10
|
+
|
|
11
|
+
## 0.71.4
|
|
12
|
+
|
|
13
|
+
Automatic changed-only republish (docs/metadata drift since the last tag — see
|
|
14
|
+
`git diff npm/records/v0.71.3..npm/records/v0.71.4 -- apps/shared/records`).
|
|
15
|
+
No source changes intended and no consumer action required.
|
|
16
|
+
|
|
3
17
|
## 0.71.3
|
|
4
18
|
|
|
5
19
|
Automatic changed-only republish (docs/metadata drift since the last tag — see
|
|
@@ -8,10 +22,14 @@ No source changes intended and no consumer action required.
|
|
|
8
22
|
|
|
9
23
|
## 0.71.2
|
|
10
24
|
|
|
11
|
-
The value-access refusal mirror (`core/validation.ts`)
|
|
12
|
-
access
|
|
25
|
+
The value-access refusal mirror (`core/validation.ts`) and the live store (`custom.value_envelope_refusal`,
|
|
26
|
+
migration `t13_value_envelope_refusal_says_access`) both say "access belongs to a Field and to a Record…"
|
|
27
|
+
(T-13 wording); this drift and a template name clash kept 0.71.1 off npm.
|
|
13
28
|
Template validator: cross-file text rule indexed once per template (library check ~36 s), a walk's
|
|
14
29
|
submitted form row takes column defaults, a list link may hold no more records than the store allows.
|
|
30
|
+
G1 gate: a published template is held against the other published templates only, so a new draft that
|
|
31
|
+
reuses a published template's person or words is reported on the draft (and refused by
|
|
32
|
+
`templates:publish verify`) instead of turning the published one red and holding the release.
|
|
15
33
|
No consumer action.
|
|
16
34
|
|
|
17
35
|
## 0.71.1
|
package/dist/templates/index.cjs
CHANGED
|
@@ -444,8 +444,10 @@ function footprintOf(spec) {
|
|
|
444
444
|
...dimensions ? [counted(dimensions, ["dimension set", "dimension sets"])] : [],
|
|
445
445
|
...TEMPLATE_EXTRA_KINDS.filter((k) => extras[k]).map((k) => counted(extras[k] ?? 0, EXTRA_WORDS[k]))
|
|
446
446
|
];
|
|
447
|
-
const agents = spec.agent ? 1 : 0;
|
|
448
|
-
if (agents) parts.push("
|
|
447
|
+
const agents = (spec.agent ? 1 : 0) + (spec.extraAgents?.length ?? 0);
|
|
448
|
+
if (agents) parts.push(counted(agents, ["agent", "agents"]));
|
|
449
|
+
const workflows = spec.workflows?.length ?? 0;
|
|
450
|
+
if (workflows) parts.push(counted(workflows, ["workflow", "workflows"]));
|
|
449
451
|
return {
|
|
450
452
|
tables,
|
|
451
453
|
sharedBlocks: spec.sharedBlocks?.length ?? 0,
|
|
@@ -454,6 +456,7 @@ function footprintOf(spec) {
|
|
|
454
456
|
dimensions,
|
|
455
457
|
extras,
|
|
456
458
|
agents,
|
|
459
|
+
workflows,
|
|
457
460
|
opensOutsideSignIn: (extras.portal ?? 0) > 0,
|
|
458
461
|
line: parts.join(" \xB7 ")
|
|
459
462
|
};
|
|
@@ -3597,6 +3600,10 @@ function validateTemplate(raw, options = {}) {
|
|
|
3597
3600
|
const tz = raw.business?.timezone || "UTC";
|
|
3598
3601
|
const tablesRaw = allTables(raw);
|
|
3599
3602
|
const ISO_DAY = /\b\d{4}-\d{2}-\d{2}\b/;
|
|
3603
|
+
for (const table of tablesRaw) {
|
|
3604
|
+
const tf = table.fields.find((f) => f.key === table.titleField);
|
|
3605
|
+
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.`);
|
|
3606
|
+
}
|
|
3600
3607
|
for (const table of tablesRaw) {
|
|
3601
3608
|
for (const f of table.fields.filter((x) => isRelation(x) && x.parityType !== "attachment")) {
|
|
3602
3609
|
const max = f.relationMax ?? (f.multi ? STORE_LIST_RELATION_MAX : 1);
|