@ai-matrx/records 0.81.1 → 0.81.2

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,14 @@
1
1
  # Changelog — @ai-matrx/records
2
2
 
3
+ ## 0.81.2
4
+ ### lane DESCRIBE-INSTALL: a form the box builds works the moment it is built
5
+
6
+ - `/templates`: the install plan now ends every `form_declare` step with an `anon_publish` step, so a form a template installs (a describe run's included) is PUBLISHED, not a draft whose link does not answer. NEW template knob `publishForms` (default true; `false` leaves the forms as drafts). `anon_publish` joins `TEMPLATE_PLAN_DOORS`; the server's closed list `custom._template_doors()` carries it (migration `describe_install_a_forms_a_template_installs_are_live`). The in-memory world marks the form `published`.
7
+ - The server now archives a Table's forms, inbound addresses, saved views and portals whenever the Table record is archived by any door (`custom.record_delete`), not only by `custom.table_archive`; 13 stranded forms were archived.
8
+ - `custom.templates` takes `installed_one_offs: true` with `installed_in`: the describe one-offs an organization installed and has not removed.
9
+
10
+ **Consumer action:** none (a host that lists installed one-offs passes `installed_one_offs`).
11
+
3
12
  ## 0.81.1
4
13
  ### lane SORT-REACTS
5
14
 
@@ -893,7 +893,32 @@ function readTypedDate(raw, opts = {}) {
893
893
  let month = null;
894
894
  let day = null;
895
895
  const numeric = /^(\d{1,4})[/.\-](\d{1,2})[/.\-](\d{1,4})$/.exec(dateText);
896
- if (numeric) {
896
+ const compact = /^(\d{8}|\d{6})$/.exec(dateText);
897
+ if (compact) {
898
+ const digits = compact[1];
899
+ const order = localeDateOrder(opts.locale);
900
+ const first2 = Number(digits.slice(0, 2));
901
+ const mid2 = Number(digits.slice(2, 4));
902
+ if (digits.length === 6) {
903
+ year = twoDigitYear(Number(digits.slice(4)));
904
+ if (order === "dmy") {
905
+ day = first2;
906
+ month = mid2;
907
+ } else {
908
+ month = first2;
909
+ day = mid2;
910
+ }
911
+ } else {
912
+ const yearLast = Number(digits.slice(4));
913
+ const yearFirst = Number(digits.slice(0, 4));
914
+ const localeReading = () => order === "dmy" ? [yearLast, mid2, first2] : [yearLast, first2, mid2];
915
+ const [ly, lm, ld] = localeReading();
916
+ const isoReading = [yearFirst, Number(digits.slice(4, 6)), Number(digits.slice(6))];
917
+ const fits = (y, m, d) => checkDay(y, m, d, raw) === null;
918
+ const useIso = order === "ymd" || !fits(ly, lm, ld) && fits(...isoReading);
919
+ [year, month, day] = useIso ? isoReading : [ly, lm, ld];
920
+ }
921
+ } else if (numeric) {
897
922
  const [a, b, c] = [numeric[1], numeric[2], numeric[3]];
898
923
  if (a.length === 4) {
899
924
  year = Number(a);