@ai-matrx/records 0.72.7 → 0.72.11

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,29 @@
1
1
  # Changelog — @ai-matrx/records
2
2
 
3
+ ## 0.72.11
4
+
5
+ Automatic changed-only republish (docs/metadata drift since the last tag — see
6
+ `git diff npm/records/v0.72.10..npm/records/v0.72.11 -- apps/shared/records`).
7
+ No source changes intended and no consumer action required.
8
+
9
+ ## 0.72.10
10
+
11
+ Automatic changed-only republish (docs/metadata drift since the last tag — see
12
+ `git diff npm/records/v0.72.7..npm/records/v0.72.10 -- apps/shared/records`).
13
+ No source changes intended and no consumer action required.
14
+
15
+ ## 0.72.9
16
+
17
+ Automatic changed-only republish (docs/metadata drift since the last tag — see
18
+ `git diff npm/records/v0.72.7..npm/records/v0.72.9 -- apps/shared/records`).
19
+ No source changes intended and no consumer action required.
20
+
21
+ ## 0.72.8
22
+
23
+ Automatic changed-only republish (docs/metadata drift since the last tag — see
24
+ `git diff npm/records/v0.72.7..npm/records/v0.72.8 -- apps/shared/records`).
25
+ No source changes intended and no consumer action required.
26
+
3
27
  ## 0.72.7
4
28
 
5
29
  Automatic changed-only republish (docs/metadata drift since the last tag — see
@@ -3604,6 +3604,20 @@ function validateTemplate(raw, options = {}) {
3604
3604
  const tz = raw.business?.timezone || "UTC";
3605
3605
  const tablesRaw = allTables(raw);
3606
3606
  const ISO_DAY = /\b\d{4}-\d{2}-\d{2}\b/;
3607
+ for (const table of tablesRaw) {
3608
+ for (const f of table.fields) {
3609
+ for (const rule of f.rules ?? []) {
3610
+ if (rule.kind !== "pattern" || typeof rule.value !== "string" || typeof rule.example !== "string") continue;
3611
+ let re = null;
3612
+ try {
3613
+ re = new RegExp(rule.value);
3614
+ } catch {
3615
+ continue;
3616
+ }
3617
+ if (!re.test(rule.example)) say(`tables (${table.token}).fields (${f.key}).rules`, `"${f.label}" shows "${rule.example}" as the way to write it, and its own pattern refuses that. Make the example match the pattern.`);
3618
+ }
3619
+ }
3620
+ }
3607
3621
  const EMAIL_SHAPE = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
3608
3622
  for (const table of tablesRaw) {
3609
3623
  for (const f of table.fields.filter((x) => x.parityType === "email" || x.format === "email")) {
@@ -5693,7 +5707,7 @@ ${e.body}`.matchAll(MERGE_TOKEN)].map((m) => m[1]));
5693
5707
  }
5694
5708
  }
5695
5709
  }
5696
- if (/report_due|reporting_due/.test(f.key)) {
5710
+ if (/report_due|reporting_due/.test(f.key) && /grant|award|funder|funding/i.test(`${t.token} ${t.name} ${t.labelSingular}`)) {
5697
5711
  const st = t.fields.find((x) => isChoice(x) && /status|stage/.test(x.key));
5698
5712
  if (!st) continue;
5699
5713
  for (const r of t.rows) {
@@ -6200,7 +6214,8 @@ function compileInstallPlan(written) {
6200
6214
  const documentRefs = Object.fromEntries(
6201
6215
  spec.extras.filter((e) => e.kind === "document").map((e) => [e.token, ref(`documents.${e.token}`)])
6202
6216
  );
6203
- for (const e of spec.extras) {
6217
+ const extrasInOrder = [...spec.extras.filter((e) => e.kind === "document"), ...spec.extras.filter((e) => e.kind !== "document")];
6218
+ for (const e of extrasInOrder) {
6204
6219
  switch (e.kind) {
6205
6220
  case "booking":
6206
6221
  steps.push({