@praxisui/cron-builder 10.0.0-rc.43 → 10.0.0-rc.45

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.
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "schemaVersion": "1.0.0",
3
- "generatedAt": "2026-11-01T16:17:35.480Z",
3
+ "generatedAt": "2026-11-14T23:14:13.846Z",
4
4
  "packageName": "@praxisui/cron-builder",
5
- "packageVersion": "10.0.0-rc.43",
5
+ "packageVersion": "10.0.0-rc.45",
6
6
  "sourceRegistry": "praxis-component-registry-ingestion",
7
7
  "sourceRegistryVersion": "1.0.0",
8
8
  "componentCount": 1,
@@ -695,31 +695,95 @@
695
695
  {
696
696
  "kind": "expression",
697
697
  "resolver": "schedule-expression",
698
+ "resolutionSpec": {
699
+ "strategy": "root-path",
700
+ "paths": [
701
+ "schedule.expression",
702
+ "value",
703
+ "schedule"
704
+ ],
705
+ "allowIndex": false
706
+ },
698
707
  "description": "Canonical CRON expression under schedule.expression or legacy value."
699
708
  },
700
709
  {
701
710
  "kind": "frequency",
702
711
  "resolver": "schedule-kind-and-recurrence",
712
+ "resolutionSpec": {
713
+ "strategy": "root-path",
714
+ "paths": [
715
+ "schedule.recurrence",
716
+ "schedule.kind",
717
+ "schedule"
718
+ ],
719
+ "allowIndex": false
720
+ },
703
721
  "description": "Business recurrence intent compiled into a canonical expression."
704
722
  },
705
723
  {
706
724
  "kind": "timezone",
707
725
  "resolver": "schedule-timezone",
726
+ "resolutionSpec": {
727
+ "strategy": "root-path",
728
+ "paths": [
729
+ "schedule.timezone",
730
+ "metadata.timezone",
731
+ "schedule",
732
+ "metadata"
733
+ ],
734
+ "allowIndex": false
735
+ },
708
736
  "description": "IANA timezone used for preview and schedule metadata."
709
737
  },
710
738
  {
711
739
  "kind": "preview",
712
740
  "resolver": "schedule-preview-config",
741
+ "resolutionSpec": {
742
+ "strategy": "root-path",
743
+ "paths": [
744
+ "preview",
745
+ "metadata",
746
+ "schedule"
747
+ ],
748
+ "allowIndex": false
749
+ },
713
750
  "description": "Read-only preview generation request for next occurrences."
714
751
  },
715
752
  {
716
753
  "kind": "validation",
717
754
  "resolver": "schedule-validation-request",
755
+ "resolutionSpec": {
756
+ "strategy": "root-path",
757
+ "paths": [
758
+ "diagnostics",
759
+ "schedule",
760
+ "value"
761
+ ],
762
+ "allowIndex": false
763
+ },
718
764
  "description": "Read-only validation diagnostics request for expression or schedule config."
719
765
  },
720
766
  {
721
767
  "kind": "preset",
722
768
  "resolver": "cron-preset-by-label-or-expression",
769
+ "resolutionSpec": {
770
+ "strategy": "array-match",
771
+ "paths": [
772
+ "metadata.presets",
773
+ "presets"
774
+ ],
775
+ "matchFields": [
776
+ "label",
777
+ "cron",
778
+ "id"
779
+ ],
780
+ "inputMatchFields": [
781
+ "labelOrCron",
782
+ "label",
783
+ "cron"
784
+ ],
785
+ "allowIndex": false
786
+ },
723
787
  "description": "Preset entry in metadata.presets[] or top-level presets[]."
724
788
  }
725
789
  ],
@@ -732,6 +796,15 @@
732
796
  "target": {
733
797
  "kind": "expression",
734
798
  "resolver": "schedule-expression",
799
+ "resolutionSpec": {
800
+ "strategy": "root-path",
801
+ "paths": [
802
+ "schedule.expression",
803
+ "value",
804
+ "schedule"
805
+ ],
806
+ "allowIndex": false
807
+ },
735
808
  "ambiguityPolicy": "fail",
736
809
  "required": false
737
810
  },
@@ -842,6 +915,15 @@
842
915
  "target": {
843
916
  "kind": "frequency",
844
917
  "resolver": "schedule-kind-and-recurrence",
918
+ "resolutionSpec": {
919
+ "strategy": "root-path",
920
+ "paths": [
921
+ "schedule.recurrence",
922
+ "schedule.kind",
923
+ "schedule"
924
+ ],
925
+ "allowIndex": false
926
+ },
845
927
  "ambiguityPolicy": "fail",
846
928
  "required": false
847
929
  },
@@ -965,6 +1047,16 @@
965
1047
  "target": {
966
1048
  "kind": "timezone",
967
1049
  "resolver": "schedule-timezone",
1050
+ "resolutionSpec": {
1051
+ "strategy": "root-path",
1052
+ "paths": [
1053
+ "schedule.timezone",
1054
+ "metadata.timezone",
1055
+ "schedule",
1056
+ "metadata"
1057
+ ],
1058
+ "allowIndex": false
1059
+ },
968
1060
  "ambiguityPolicy": "fail",
969
1061
  "required": false
970
1062
  },
@@ -1048,6 +1140,24 @@
1048
1140
  "target": {
1049
1141
  "kind": "preset",
1050
1142
  "resolver": "cron-preset-by-label-or-expression",
1143
+ "resolutionSpec": {
1144
+ "strategy": "array-match",
1145
+ "paths": [
1146
+ "metadata.presets",
1147
+ "presets"
1148
+ ],
1149
+ "matchFields": [
1150
+ "label",
1151
+ "cron",
1152
+ "id"
1153
+ ],
1154
+ "inputMatchFields": [
1155
+ "labelOrCron",
1156
+ "label",
1157
+ "cron"
1158
+ ],
1159
+ "allowIndex": false
1160
+ },
1051
1161
  "ambiguityPolicy": "fail",
1052
1162
  "required": true
1053
1163
  },
@@ -1138,6 +1248,15 @@
1138
1248
  "target": {
1139
1249
  "kind": "validation",
1140
1250
  "resolver": "schedule-validation-request",
1251
+ "resolutionSpec": {
1252
+ "strategy": "root-path",
1253
+ "paths": [
1254
+ "diagnostics",
1255
+ "schedule",
1256
+ "value"
1257
+ ],
1258
+ "allowIndex": false
1259
+ },
1141
1260
  "ambiguityPolicy": "fail",
1142
1261
  "required": false
1143
1262
  },
@@ -1238,6 +1357,15 @@
1238
1357
  "target": {
1239
1358
  "kind": "preview",
1240
1359
  "resolver": "schedule-preview-config",
1360
+ "resolutionSpec": {
1361
+ "strategy": "root-path",
1362
+ "paths": [
1363
+ "preview",
1364
+ "metadata",
1365
+ "schedule"
1366
+ ],
1367
+ "allowIndex": false
1368
+ },
1241
1369
  "ambiguityPolicy": "fail",
1242
1370
  "required": false
1243
1371
  },
@@ -1633,9 +1761,9 @@
1633
1761
  {
1634
1762
  "chunkIndex": 11,
1635
1763
  "chunkKind": "authoring_manifest",
1636
- "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"pdx-cron-builder\",\"ownerPackage\":\"@praxisui/cron-builder\",\"configSchemaId\":\"CronBuilderMetadata\",\"chunkSection\":\"editableTargets\",\"editableTargets\":[{\"kind\":\"expression\",\"resolver\":\"schedule-expression\",\"description\":\"Canonical CRON expression under schedule.expression or legacy value.\"},{\"kind\":\"frequency\",\"resolver\":\"schedule-kind-and-recurrence\",\"description\":\"Business recurrence intent compiled into a canonical expression.\"},{\"kind\":\"timezone\",\"resolver\":\"schedule-timezone\",\"description\":\"IANA timezone used for preview and schedule metadata.\"},{\"kind\":\"preview\",\"resolver\":\"schedule-preview-config\",\"description\":\"Read-only preview generation request for next occurrences.\"},{\"kind\":\"validation\",\"resolver\":\"schedule-validation-request\",\"description\":\"Read-only validation diagnostics request for expression or schedule config.\"},{\"kind\":\"preset\",\"resolver\":\"cron-preset-by-label-or-expression\",\"description\":\"Preset entry in metadata.presets[] or top-level presets[].\"}]}",
1764
+ "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"pdx-cron-builder\",\"ownerPackage\":\"@praxisui/cron-builder\",\"configSchemaId\":\"CronBuilderMetadata\",\"chunkSection\":\"editableTargets\",\"editableTargets\":[{\"kind\":\"expression\",\"resolver\":\"schedule-expression\",\"resolutionSpec\":{\"strategy\":\"root-path\",\"paths\":[\"schedule.expression\",\"value\",\"schedule\"],\"allowIndex\":false},\"description\":\"Canonical CRON expression under schedule.expression or legacy value.\"},{\"kind\":\"frequency\",\"resolver\":\"schedule-kind-and-recurrence\",\"resolutionSpec\":{\"strategy\":\"root-path\",\"paths\":[\"schedule.recurrence\",\"schedule.kind\",\"schedule\"],\"allowIndex\":false},\"description\":\"Business recurrence intent compiled into a canonical expression.\"},{\"kind\":\"timezone\",\"resolver\":\"schedule-timezone\",\"resolutionSpec\":{\"strategy\":\"root-path\",\"paths\":[\"schedule.timezone\",\"metadata.timezone\",\"schedule\",\"metadata\"],\"allowIndex\":false},\"description\":\"IANA timezone used for preview and schedule metadata.\"},{\"kind\":\"preview\",\"resolver\":\"schedule-preview-config\",\"resolutionSpec\":{\"strategy\":\"root-path\",\"paths\":[\"preview\",\"metadata\",\"schedule\"],\"allowIndex\":false},\"description\":\"Read-only preview generation request for next occurrences.\"},{\"kind\":\"validation\",\"resolver\":\"schedule-validation-request\",\"resolutionSpec\":{\"strategy\":\"root-path\",\"paths\":[\"diagnostics\",\"schedule\",\"value\"],\"allowIndex\":false},\"description\":\"Read-only validation diagnostics request for expression or schedule config.\"},{\"kind\":\"preset\",\"resolver\":\"cron-preset-by-label-or-expression\",\"resolutionSpec\":{\"strategy\":\"array-match\",\"paths\":[\"metadata.presets\",\"presets\"],\"matchFields\":[\"label\",\"cron\",\"id\"],\"inputMatchFields\":[\"labelOrCron\",\"label\",\"cron\"],\"allowIndex\":false},\"description\":\"Preset entry in metadata.presets[] or top-level presets[].\"}]}",
1637
1765
  "sourcePointer": "projects/praxis-cron-builder/src/lib/ai/praxis-cron-builder-authoring-manifest.ts",
1638
- "contentHash": "8f10562e6b45133a9138f9612a39e24bcd520fb6687594732b46e7db468914e8",
1766
+ "contentHash": "09a3be8fe4c432a36b3d046a622216f0fffe80b7991dab68d6c00a2607a4175b",
1639
1767
  "sourceKind": "component_definition",
1640
1768
  "sourceId": "pdx-cron-builder",
1641
1769
  "corpusVersion": "1.0.0"
@@ -1643,9 +1771,9 @@
1643
1771
  {
1644
1772
  "chunkIndex": 12,
1645
1773
  "chunkKind": "authoring_manifest",
1646
- "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"pdx-cron-builder\",\"ownerPackage\":\"@praxisui/cron-builder\",\"configSchemaId\":\"CronBuilderMetadata\",\"chunkSection\":\"operations\",\"operations\":[{\"operationId\":\"cron.expression.set\",\"title\":\"Set CRON expression\",\"scope\":\"global\",\"targetKind\":\"expression\",\"target\":{\"kind\":\"expression\",\"resolver\":\"schedule-expression\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"required\":[\"cron\"],\"properties\":{\"cron\":{\"type\":\"string\"},\"dialect\":{\"enum\":[\"unix\",\"quartz\",\"aws-eventbridge\",\"kubernetes\",\"github-actions\",\"gcp-scheduler\"]},\"seconds\":{\"type\":\"boolean\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"cron-expression-set\",\"handlerContract\":{\"reads\":[\"schedule.expression\",\"schedule.timezone\",\"metadata.timezone\",\"value\"],\"writes\":[\"schedule.kind\",\"schedule.expression\",\"value\",\"diagnostics\"],\"identityKeys\":[\"schedule.expression.cron\",\"schedule.expression.dialect\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"cron\"],\"properties\":{\"cron\":{\"type\":\"string\"},\"dialect\":{\"enum\":[\"unix\",\"quartz\",\"aws-eventbridge\",\"kubernetes\",\"github-actions\",\"gcp-scheduler\"]},\"seconds\":{\"type\":\"boolean\"}}},\"failureModes\":[\"invalid-expression\",\"invalid-dialect\",\"seconds-field-mismatch\"],\"description\":\"Validates and normalizes an explicit CRON expression before writing schedule.expression and the compatibility value.\"}}],\"destructive\":false,\"requiresConfirmation\":false,\"validators\":[\"cron-expression-valid\",\"cron-dialect-compatible\",\"editor-runtime-round-trip\"],\"affectedPaths\":[\"schedule.kind\",\"schedule.expression\",\"schedule.expression.cron\",\"schedule.expression.dialect\",\"schedule.expression.seconds\",\"value\",\"diagnostics\"],\"submissionImpact\":\"affects-submission\",\"preconditions\":[\"config-initialized\"]},{\"operationId\":\"cron.frequency.set\",\"title\":\"Set schedule frequency\",\"scope\":\"global\",\"targetKind\":\"frequency\",\"target\":{\"kind\":\"frequency\",\"resolver\":\"schedule-kind-and-recurrence\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"required\":[\"kind\",\"recurrence\"],\"properties\":{\"kind\":{\"enum\":[\"once\",\"interval\",\"daily\",\"weekly\",\"monthly\",\"customCron\"]},\"recurrence\":{\"type\":\"object\"},\"dialect\":{\"enum\":[\"unix\",\"quartz\",\"aws-eventbridge\",\"kubernetes\",\"github-actions\",\"gcp-scheduler\"]}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"cron-frequency-to-expression\",\"handlerContract\":{\"reads\":[\"schedule.kind\",\"schedule.recurrence\",\"schedule.timezone\",\"schedule.expression.dialect\"],\"writes\":[\"schedule.kind\",\"schedule.recurrence\",\"schedule.expression\",\"value\"],\"identityKeys\":[\"schedule.kind\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"kind\",\"recurrence\"],\"properties\":{\"kind\":{\"enum\":[\"once\",\"interval\",\"daily\",\"weekly\",\"monthly\",\"customCron\"]},\"recurrence\":{\"type\":\"object\"},\"dialect\":{\"enum\":[\"unix\",\"quartz\",\"aws-eventbridge\",\"kubernetes\",\"github-actions\",\"gcp-scheduler\"]}}},\"failureModes\":[\"unsupported-kind\",\"non-portable-frequency\",\"invalid-recurrence\",\"cron-compile-failed\"],\"description\":\"Compiles structured recurrence intent through compileScheduleExpression and updates the canonical schedule expression only when diagnostics have no errors.\"}}],\"destructive\":false,\"requiresConfirmation\":false,\"validators\":[\"frequency-maps-to-canonical-expression\",\"cron-expression-valid\",\"diagnostics-before-patch\"],\"affectedPaths\":[\"schedule.kind\",\"schedule.recurrence\",\"schedule.expression\",\"value\"],\"submissionImpact\":\"affects-submission\",\"preconditions\":[\"config-initialized\"]},{\"operationId\":\"cron.timezone.set\",\"title\":\"Set schedule timezone\",\"scope\":\"global\",\"targetKind\":\"timezone\",\"target\":{\"kind\":\"timezone\",\"resolver\":\"schedule-timezone\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"required\":[\"timezone\"],\"properties\":{\"timezone\":{\"type\":\"string\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"cron-timezone-set\",\"handlerContract\":{\"reads\":[\"value\",\"schedule\",\"metadata.timezone\",\"metadata.previewOccurrences\",\"metadata.previewFrom\",\"metadata.locale\"],\"writes\":[\"schedule.timezone\",\"metadata.timezone\",\"preview\",\"diagnostics\"],\"identityKeys\":[\"schedule.expression.cron\",\"schedule.timezone\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"timezone\"],\"properties\":{\"timezone\":{\"type\":\"string\"}}},\"failureModes\":[\"invalid-timezone\",\"invalid-expression\",\"preview-generation-failed\"],\"description\":\"Sets the IANA timezone used by schedule and metadata, then regenerates preview/diagnostics from the same expression.\"}}],\"destructive\":false,\"requiresConfirmation\":false,\"validators\":[\"timezone-valid\",\"preview-matches-expression\",\"editor-runtime-round-trip\"],\"affectedPaths\":[\"schedule.timezone\",\"metadata.timezone\",\"preview\",\"diagnostics\"],\"submissionImpact\":\"affects-submission\",\"preconditions\":[\"config-initialized\"]},{\"operationId\":\"cron.preset.apply\",\"title\":\"Apply CRON preset\",\"scope\":\"meta\",\"targetKind\":\"preset\",\"target\":{\"kind\":\"preset\",\"resolver\":\"cron-preset-by-label-or-expression\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"labelOrCron\"],\"properties\":{\"labelOrCron\":{\"type\":\"string\"},\"timezone\":{\"type\":\"string\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"cron-preset-apply\",\"handlerContract\":{\"reads\":[\"metadata.presets[]\",\"presets[]\",\"schedule.timezone\",\"metadata.timezone\"],\"writes\":[\"schedule.kind\",\"schedule.expression\",\"schedule.timezone\",\"value\"],\"identityKeys\":[\"metadata.presets[].label\",\"metadata.presets[].cron\",\"presets[].label\",\"presets[].cron\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"labelOrCron\"],\"properties\":{\"labelOrCron\":{\"type\":\"string\"},\"timezone\":{\"type\":\"string\"}}},\"failureModes\":[\"preset-not-found\",\"preset-cron-invalid\",\"timezone-invalid\"],\"description\":\"Resolves a preset by label or cron, validates it through normalizeScheduleValue/createSchedulePreview, then applies the canonical expression.\"}}],\"destructive\":false,\"requiresConfirmation\":false,\"validators\":[\"preset-exists\",\"preset-maps-to-canonical-expression\",\"cron-expression-valid\"],\"affectedPaths\":[\"schedule.kind\",\"schedule.expression\",\"schedule.timezone\",\"value\"],\"submissionImpact\":\"affects-submission\",\"preconditions\":[\"config-initialized\",\"target-preset-exists\"]},{\"operationId\":\"cron.validate\",\"title\":\"Validate schedule\",\"scope\":\"global\",\"targetKind\":\"validation\",\"target\":{\"kind\":\"validation\",\"resolver\":\"schedule-validation-request\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"properties\":{\"cron\":{\"type\":\"string\"},\"schedule\":{\"type\":\"object\"},\"timezone\":{\"type\":\"string\"},\"dialect\":{\"enum\":[\"unix\",\"quartz\",\"aws-eventbridge\",\"kubernetes\",\"github-actions\",\"gcp-scheduler\"]}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"cron-validation-diagnostics\",\"handlerContract\":{\"reads\":[\"value\",\"schedule\",\"metadata.timezone\"],\"writes\":[\"diagnostics\"],\"identityKeys\":[\"schedule.expression.cron\",\"schedule.timezone\"],\"inputSchema\":{\"type\":\"object\",\"properties\":{\"cron\":{\"type\":\"string\"},\"schedule\":{\"type\":\"object\"},\"timezone\":{\"type\":\"string\"},\"dialect\":{\"enum\":[\"unix\",\"quartz\",\"aws-eventbridge\",\"kubernetes\",\"github-actions\",\"gcp-scheduler\"]}}},\"failureModes\":[\"invalid-expression\",\"invalid-timezone\",\"invalid-recurrence\"],\"description\":\"Runs normalizeScheduleValue and validateScheduleAuthoringConfig and returns diagnostics without mutating schedule/value paths.\"}}],\"destructive\":false,\"requiresConfirmation\":false,\"validators\":[\"invalid-schedules-return-diagnostics\",\"cron-expression-valid\",\"timezone-valid\"],\"affectedPaths\":[\"diagnostics\"],\"submissionImpact\":\"none\",\"preconditions\":[\"config-initialized\"]}]}",
1774
+ "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"pdx-cron-builder\",\"ownerPackage\":\"@praxisui/cron-builder\",\"configSchemaId\":\"CronBuilderMetadata\",\"chunkSection\":\"operations\",\"operations\":[{\"operationId\":\"cron.expression.set\",\"title\":\"Set CRON expression\",\"scope\":\"global\",\"targetKind\":\"expression\",\"target\":{\"kind\":\"expression\",\"resolver\":\"schedule-expression\",\"resolutionSpec\":{\"strategy\":\"root-path\",\"paths\":[\"schedule.expression\",\"value\",\"schedule\"],\"allowIndex\":false},\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"required\":[\"cron\"],\"properties\":{\"cron\":{\"type\":\"string\"},\"dialect\":{\"enum\":[\"unix\",\"quartz\",\"aws-eventbridge\",\"kubernetes\",\"github-actions\",\"gcp-scheduler\"]},\"seconds\":{\"type\":\"boolean\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"cron-expression-set\",\"handlerContract\":{\"reads\":[\"schedule.expression\",\"schedule.timezone\",\"metadata.timezone\",\"value\"],\"writes\":[\"schedule.kind\",\"schedule.expression\",\"value\",\"diagnostics\"],\"identityKeys\":[\"schedule.expression.cron\",\"schedule.expression.dialect\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"cron\"],\"properties\":{\"cron\":{\"type\":\"string\"},\"dialect\":{\"enum\":[\"unix\",\"quartz\",\"aws-eventbridge\",\"kubernetes\",\"github-actions\",\"gcp-scheduler\"]},\"seconds\":{\"type\":\"boolean\"}}},\"failureModes\":[\"invalid-expression\",\"invalid-dialect\",\"seconds-field-mismatch\"],\"description\":\"Validates and normalizes an explicit CRON expression before writing schedule.expression and the compatibility value.\"}}],\"destructive\":false,\"requiresConfirmation\":false,\"validators\":[\"cron-expression-valid\",\"cron-dialect-compatible\",\"editor-runtime-round-trip\"],\"affectedPaths\":[\"schedule.kind\",\"schedule.expression\",\"schedule.expression.cron\",\"schedule.expression.dialect\",\"schedule.expression.seconds\",\"value\",\"diagnostics\"],\"submissionImpact\":\"affects-submission\",\"preconditions\":[\"config-initialized\"]},{\"operationId\":\"cron.frequency.set\",\"title\":\"Set schedule frequency\",\"scope\":\"global\",\"targetKind\":\"frequency\",\"target\":{\"kind\":\"frequency\",\"resolver\":\"schedule-kind-and-recurrence\",\"resolutionSpec\":{\"strategy\":\"root-path\",\"paths\":[\"schedule.recurrence\",\"schedule.kind\",\"schedule\"],\"allowIndex\":false},\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"required\":[\"kind\",\"recurrence\"],\"properties\":{\"kind\":{\"enum\":[\"once\",\"interval\",\"daily\",\"weekly\",\"monthly\",\"customCron\"]},\"recurrence\":{\"type\":\"object\"},\"dialect\":{\"enum\":[\"unix\",\"quartz\",\"aws-eventbridge\",\"kubernetes\",\"github-actions\",\"gcp-scheduler\"]}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"cron-frequency-to-expression\",\"handlerContract\":{\"reads\":[\"schedule.kind\",\"schedule.recurrence\",\"schedule.timezone\",\"schedule.expression.dialect\"],\"writes\":[\"schedule.kind\",\"schedule.recurrence\",\"schedule.expression\",\"value\"],\"identityKeys\":[\"schedule.kind\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"kind\",\"recurrence\"],\"properties\":{\"kind\":{\"enum\":[\"once\",\"interval\",\"daily\",\"weekly\",\"monthly\",\"customCron\"]},\"recurrence\":{\"type\":\"object\"},\"dialect\":{\"enum\":[\"unix\",\"quartz\",\"aws-eventbridge\",\"kubernetes\",\"github-actions\",\"gcp-scheduler\"]}}},\"failureModes\":[\"unsupported-kind\",\"non-portable-frequency\",\"invalid-recurrence\",\"cron-compile-failed\"],\"description\":\"Compiles structured recurrence intent through compileScheduleExpression and updates the canonical schedule expression only when diagnostics have no errors.\"}}],\"destructive\":false,\"requiresConfirmation\":false,\"validators\":[\"frequency-maps-to-canonical-expression\",\"cron-expression-valid\",\"diagnostics-before-patch\"],\"affectedPaths\":[\"schedule.kind\",\"schedule.recurrence\",\"schedule.expression\",\"value\"],\"submissionImpact\":\"affects-submission\",\"preconditions\":[\"config-initialized\"]},{\"operationId\":\"cron.timezone.set\",\"title\":\"Set schedule timezone\",\"scope\":\"global\",\"targetKind\":\"timezone\",\"target\":{\"kind\":\"timezone\",\"resolver\":\"schedule-timezone\",\"resolutionSpec\":{\"strategy\":\"root-path\",\"paths\":[\"schedule.timezone\",\"metadata.timezone\",\"schedule\",\"metadata\"],\"allowIndex\":false},\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"required\":[\"timezone\"],\"properties\":{\"timezone\":{\"type\":\"string\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"cron-timezone-set\",\"handlerContract\":{\"reads\":[\"value\",\"schedule\",\"metadata.timezone\",\"metadata.previewOccurrences\",\"metadata.previewFrom\",\"metadata.locale\"],\"writes\":[\"schedule.timezone\",\"metadata.timezone\",\"preview\",\"diagnostics\"],\"identityKeys\":[\"schedule.expression.cron\",\"schedule.timezone\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"timezone\"],\"properties\":{\"timezone\":{\"type\":\"string\"}}},\"failureModes\":[\"invalid-timezone\",\"invalid-expression\",\"preview-generation-failed\"],\"description\":\"Sets the IANA timezone used by schedule and metadata, then regenerates preview/diagnostics from the same expression.\"}}],\"destructive\":false,\"requiresConfirmation\":false,\"validators\":[\"timezone-valid\",\"preview-matches-expression\",\"editor-runtime-round-trip\"],\"affectedPaths\":[\"schedule.timezone\",\"metadata.timezone\",\"preview\",\"diagnostics\"],\"submissionImpact\":\"affects-submission\",\"preconditions\":[\"config-initialized\"]},{\"operationId\":\"cron.preset.apply\",\"title\":\"Apply CRON preset\",\"scope\":\"meta\",\"targetKind\":\"preset\",\"target\":{\"kind\":\"preset\",\"resolver\":\"cron-preset-by-label-or-expression\",\"resolutionSpec\":{\"strategy\":\"array-match\",\"paths\":[\"metadata.presets\",\"presets\"],\"matchFields\":[\"label\",\"cron\",\"id\"],\"inputMatchFields\":[\"labelOrCron\",\"label\",\"cron\"],\"allowIndex\":false},\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"labelOrCron\"],\"properties\":{\"labelOrCron\":{\"type\":\"string\"},\"timezone\":{\"type\":\"string\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"cron-preset-apply\",\"handlerContract\":{\"reads\":[\"metadata.presets[]\",\"presets[]\",\"schedule.timezone\",\"metadata.timezone\"],\"writes\":[\"schedule.kind\",\"schedule.expression\",\"schedule.timezone\",\"value\"],\"identityKeys\":[\"metadata.presets[].label\",\"metadata.presets[].cron\",\"presets[].label\",\"presets[].cron\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"labelOrCron\"],\"properties\":{\"labelOrCron\":{\"type\":\"string\"},\"timezone\":{\"type\":\"string\"}}},\"failureModes\":[\"preset-not-found\",\"preset-cron-invalid\",\"timezone-invalid\"],\"description\":\"Resolves a preset by label or cron, validates it through normalizeScheduleValue/createSchedulePreview, then applies the canonical expression.\"}}],\"destructive\":false,\"requiresConfirmation\":false,\"validators\":[\"preset-exists\",\"preset-maps-to-canonical-expression\",\"cron-expression-valid\"],\"affectedPaths\":[\"schedule.kind\",\"schedule.expression\",\"schedule.timezone\",\"value\"],\"submissionImpact\":\"affects-submission\",\"preconditions\":[\"config-initialized\",\"target-preset-exists\"]}]}",
1647
1775
  "sourcePointer": "projects/praxis-cron-builder/src/lib/ai/praxis-cron-builder-authoring-manifest.ts",
1648
- "contentHash": "5094fa50447e85bdfd42baa413f8dd551d6841e35949f6e11ee2a6b3b42eb40e",
1776
+ "contentHash": "cdbb883989a4450f2c2cfaaf724b5506e6f54cd4f549a82cbbb4275f101548bf",
1649
1777
  "sourceKind": "component_definition",
1650
1778
  "sourceId": "pdx-cron-builder",
1651
1779
  "corpusVersion": "1.0.0"
@@ -1653,9 +1781,9 @@
1653
1781
  {
1654
1782
  "chunkIndex": 13,
1655
1783
  "chunkKind": "authoring_manifest",
1656
- "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"pdx-cron-builder\",\"ownerPackage\":\"@praxisui/cron-builder\",\"configSchemaId\":\"CronBuilderMetadata\",\"chunkSection\":\"operations\",\"operations\":[{\"operationId\":\"cron.preview.generate\",\"title\":\"Generate schedule preview\",\"scope\":\"global\",\"targetKind\":\"preview\",\"target\":{\"kind\":\"preview\",\"resolver\":\"schedule-preview-config\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"properties\":{\"occurrences\":{\"type\":\"number\"},\"from\":{\"type\":\"string\"},\"timezone\":{\"type\":\"string\"},\"locale\":{\"type\":\"string\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"cron-preview-generate\",\"handlerContract\":{\"reads\":[\"value\",\"schedule\",\"metadata.previewOccurrences\",\"metadata.previewFrom\",\"metadata.timezone\",\"metadata.locale\"],\"writes\":[\"preview\",\"diagnostics\"],\"identityKeys\":[\"schedule.expression.cron\",\"schedule.timezone\",\"metadata.previewFrom\"],\"inputSchema\":{\"type\":\"object\",\"properties\":{\"occurrences\":{\"type\":\"number\"},\"from\":{\"type\":\"string\"},\"timezone\":{\"type\":\"string\"},\"locale\":{\"type\":\"string\"}}},\"failureModes\":[\"invalid-expression\",\"invalid-timezone\",\"preview-empty\",\"diagnostics-contain-errors\"],\"description\":\"Runs createSchedulePreview and returns read-only preview occurrences plus diagnostics; it does not patch the schedule when validation fails.\"}}],\"destructive\":false,\"requiresConfirmation\":false,\"validators\":[\"preview-matches-expression\",\"timezone-valid\",\"invalid-schedules-return-diagnostics\"],\"affectedPaths\":[\"preview\",\"diagnostics\"],\"submissionImpact\":\"none\",\"preconditions\":[\"config-initialized\"]}]}",
1784
+ "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"pdx-cron-builder\",\"ownerPackage\":\"@praxisui/cron-builder\",\"configSchemaId\":\"CronBuilderMetadata\",\"chunkSection\":\"operations\",\"operations\":[{\"operationId\":\"cron.validate\",\"title\":\"Validate schedule\",\"scope\":\"global\",\"targetKind\":\"validation\",\"target\":{\"kind\":\"validation\",\"resolver\":\"schedule-validation-request\",\"resolutionSpec\":{\"strategy\":\"root-path\",\"paths\":[\"diagnostics\",\"schedule\",\"value\"],\"allowIndex\":false},\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"properties\":{\"cron\":{\"type\":\"string\"},\"schedule\":{\"type\":\"object\"},\"timezone\":{\"type\":\"string\"},\"dialect\":{\"enum\":[\"unix\",\"quartz\",\"aws-eventbridge\",\"kubernetes\",\"github-actions\",\"gcp-scheduler\"]}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"cron-validation-diagnostics\",\"handlerContract\":{\"reads\":[\"value\",\"schedule\",\"metadata.timezone\"],\"writes\":[\"diagnostics\"],\"identityKeys\":[\"schedule.expression.cron\",\"schedule.timezone\"],\"inputSchema\":{\"type\":\"object\",\"properties\":{\"cron\":{\"type\":\"string\"},\"schedule\":{\"type\":\"object\"},\"timezone\":{\"type\":\"string\"},\"dialect\":{\"enum\":[\"unix\",\"quartz\",\"aws-eventbridge\",\"kubernetes\",\"github-actions\",\"gcp-scheduler\"]}}},\"failureModes\":[\"invalid-expression\",\"invalid-timezone\",\"invalid-recurrence\"],\"description\":\"Runs normalizeScheduleValue and validateScheduleAuthoringConfig and returns diagnostics without mutating schedule/value paths.\"}}],\"destructive\":false,\"requiresConfirmation\":false,\"validators\":[\"invalid-schedules-return-diagnostics\",\"cron-expression-valid\",\"timezone-valid\"],\"affectedPaths\":[\"diagnostics\"],\"submissionImpact\":\"none\",\"preconditions\":[\"config-initialized\"]},{\"operationId\":\"cron.preview.generate\",\"title\":\"Generate schedule preview\",\"scope\":\"global\",\"targetKind\":\"preview\",\"target\":{\"kind\":\"preview\",\"resolver\":\"schedule-preview-config\",\"resolutionSpec\":{\"strategy\":\"root-path\",\"paths\":[\"preview\",\"metadata\",\"schedule\"],\"allowIndex\":false},\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"properties\":{\"occurrences\":{\"type\":\"number\"},\"from\":{\"type\":\"string\"},\"timezone\":{\"type\":\"string\"},\"locale\":{\"type\":\"string\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"cron-preview-generate\",\"handlerContract\":{\"reads\":[\"value\",\"schedule\",\"metadata.previewOccurrences\",\"metadata.previewFrom\",\"metadata.timezone\",\"metadata.locale\"],\"writes\":[\"preview\",\"diagnostics\"],\"identityKeys\":[\"schedule.expression.cron\",\"schedule.timezone\",\"metadata.previewFrom\"],\"inputSchema\":{\"type\":\"object\",\"properties\":{\"occurrences\":{\"type\":\"number\"},\"from\":{\"type\":\"string\"},\"timezone\":{\"type\":\"string\"},\"locale\":{\"type\":\"string\"}}},\"failureModes\":[\"invalid-expression\",\"invalid-timezone\",\"preview-empty\",\"diagnostics-contain-errors\"],\"description\":\"Runs createSchedulePreview and returns read-only preview occurrences plus diagnostics; it does not patch the schedule when validation fails.\"}}],\"destructive\":false,\"requiresConfirmation\":false,\"validators\":[\"preview-matches-expression\",\"timezone-valid\",\"invalid-schedules-return-diagnostics\"],\"affectedPaths\":[\"preview\",\"diagnostics\"],\"submissionImpact\":\"none\",\"preconditions\":[\"config-initialized\"]}]}",
1657
1785
  "sourcePointer": "projects/praxis-cron-builder/src/lib/ai/praxis-cron-builder-authoring-manifest.ts",
1658
- "contentHash": "3ec65ef1ec816f60eeadfbc01e268eab0c01b67870adbcd7d576e4375993b9c0",
1786
+ "contentHash": "1ee6bd1415f90e936613b08e033c187d855722336312e0f9e575a7f8e5f32577",
1659
1787
  "sourceKind": "component_definition",
1660
1788
  "sourceId": "pdx-cron-builder",
1661
1789
  "corpusVersion": "1.0.0"
@@ -1353,6 +1353,38 @@ const CRON_BUILDER_AI_CAPABILITIES = {
1353
1353
  ],
1354
1354
  };
1355
1355
 
1356
+ const cronExpressionResolutionSpec = {
1357
+ strategy: 'root-path',
1358
+ paths: ['schedule.expression', 'value', 'schedule'],
1359
+ allowIndex: false,
1360
+ };
1361
+ const cronFrequencyResolutionSpec = {
1362
+ strategy: 'root-path',
1363
+ paths: ['schedule.recurrence', 'schedule.kind', 'schedule'],
1364
+ allowIndex: false,
1365
+ };
1366
+ const cronTimezoneResolutionSpec = {
1367
+ strategy: 'root-path',
1368
+ paths: ['schedule.timezone', 'metadata.timezone', 'schedule', 'metadata'],
1369
+ allowIndex: false,
1370
+ };
1371
+ const cronPreviewResolutionSpec = {
1372
+ strategy: 'root-path',
1373
+ paths: ['preview', 'metadata', 'schedule'],
1374
+ allowIndex: false,
1375
+ };
1376
+ const cronValidationResolutionSpec = {
1377
+ strategy: 'root-path',
1378
+ paths: ['diagnostics', 'schedule', 'value'],
1379
+ allowIndex: false,
1380
+ };
1381
+ const cronPresetResolutionSpec = {
1382
+ strategy: 'array-match',
1383
+ paths: ['metadata.presets', 'presets'],
1384
+ matchFields: ['label', 'cron', 'id'],
1385
+ inputMatchFields: ['labelOrCron', 'label', 'cron'],
1386
+ allowIndex: false,
1387
+ };
1356
1388
  const PRAXIS_CRON_BUILDER_AUTHORING_MANIFEST = {
1357
1389
  schemaVersion: '1.0.0',
1358
1390
  componentId: 'pdx-cron-builder',
@@ -1365,12 +1397,12 @@ const PRAXIS_CRON_BUILDER_AUTHORING_MANIFEST = {
1365
1397
  { name: 'disabled', type: 'boolean', description: 'ControlValueAccessor disabled state.' },
1366
1398
  ],
1367
1399
  editableTargets: [
1368
- { kind: 'expression', resolver: 'schedule-expression', description: 'Canonical CRON expression under schedule.expression or legacy value.' },
1369
- { kind: 'frequency', resolver: 'schedule-kind-and-recurrence', description: 'Business recurrence intent compiled into a canonical expression.' },
1370
- { kind: 'timezone', resolver: 'schedule-timezone', description: 'IANA timezone used for preview and schedule metadata.' },
1371
- { kind: 'preview', resolver: 'schedule-preview-config', description: 'Read-only preview generation request for next occurrences.' },
1372
- { kind: 'validation', resolver: 'schedule-validation-request', description: 'Read-only validation diagnostics request for expression or schedule config.' },
1373
- { kind: 'preset', resolver: 'cron-preset-by-label-or-expression', description: 'Preset entry in metadata.presets[] or top-level presets[].' },
1400
+ { kind: 'expression', resolver: 'schedule-expression', resolutionSpec: cronExpressionResolutionSpec, description: 'Canonical CRON expression under schedule.expression or legacy value.' },
1401
+ { kind: 'frequency', resolver: 'schedule-kind-and-recurrence', resolutionSpec: cronFrequencyResolutionSpec, description: 'Business recurrence intent compiled into a canonical expression.' },
1402
+ { kind: 'timezone', resolver: 'schedule-timezone', resolutionSpec: cronTimezoneResolutionSpec, description: 'IANA timezone used for preview and schedule metadata.' },
1403
+ { kind: 'preview', resolver: 'schedule-preview-config', resolutionSpec: cronPreviewResolutionSpec, description: 'Read-only preview generation request for next occurrences.' },
1404
+ { kind: 'validation', resolver: 'schedule-validation-request', resolutionSpec: cronValidationResolutionSpec, description: 'Read-only validation diagnostics request for expression or schedule config.' },
1405
+ { kind: 'preset', resolver: 'cron-preset-by-label-or-expression', resolutionSpec: cronPresetResolutionSpec, description: 'Preset entry in metadata.presets[] or top-level presets[].' },
1374
1406
  ],
1375
1407
  operations: [
1376
1408
  {
@@ -1378,7 +1410,7 @@ const PRAXIS_CRON_BUILDER_AUTHORING_MANIFEST = {
1378
1410
  title: 'Set CRON expression',
1379
1411
  scope: 'global',
1380
1412
  targetKind: 'expression',
1381
- target: { kind: 'expression', resolver: 'schedule-expression', ambiguityPolicy: 'fail', required: false },
1413
+ target: { kind: 'expression', resolver: 'schedule-expression', resolutionSpec: cronExpressionResolutionSpec, ambiguityPolicy: 'fail', required: false },
1382
1414
  inputSchema: {
1383
1415
  type: 'object',
1384
1416
  required: ['cron'],
@@ -1420,7 +1452,7 @@ const PRAXIS_CRON_BUILDER_AUTHORING_MANIFEST = {
1420
1452
  title: 'Set schedule frequency',
1421
1453
  scope: 'global',
1422
1454
  targetKind: 'frequency',
1423
- target: { kind: 'frequency', resolver: 'schedule-kind-and-recurrence', ambiguityPolicy: 'fail', required: false },
1455
+ target: { kind: 'frequency', resolver: 'schedule-kind-and-recurrence', resolutionSpec: cronFrequencyResolutionSpec, ambiguityPolicy: 'fail', required: false },
1424
1456
  inputSchema: {
1425
1457
  type: 'object',
1426
1458
  required: ['kind', 'recurrence'],
@@ -1462,7 +1494,7 @@ const PRAXIS_CRON_BUILDER_AUTHORING_MANIFEST = {
1462
1494
  title: 'Set schedule timezone',
1463
1495
  scope: 'global',
1464
1496
  targetKind: 'timezone',
1465
- target: { kind: 'timezone', resolver: 'schedule-timezone', ambiguityPolicy: 'fail', required: false },
1497
+ target: { kind: 'timezone', resolver: 'schedule-timezone', resolutionSpec: cronTimezoneResolutionSpec, ambiguityPolicy: 'fail', required: false },
1466
1498
  inputSchema: { type: 'object', required: ['timezone'], properties: { timezone: { type: 'string' } } },
1467
1499
  effects: [{
1468
1500
  kind: 'compile-domain-patch',
@@ -1488,7 +1520,7 @@ const PRAXIS_CRON_BUILDER_AUTHORING_MANIFEST = {
1488
1520
  title: 'Apply CRON preset',
1489
1521
  scope: 'meta',
1490
1522
  targetKind: 'preset',
1491
- target: { kind: 'preset', resolver: 'cron-preset-by-label-or-expression', ambiguityPolicy: 'fail', required: true },
1523
+ target: { kind: 'preset', resolver: 'cron-preset-by-label-or-expression', resolutionSpec: cronPresetResolutionSpec, ambiguityPolicy: 'fail', required: true },
1492
1524
  inputSchema: {
1493
1525
  type: 'object',
1494
1526
  required: ['labelOrCron'],
@@ -1528,7 +1560,7 @@ const PRAXIS_CRON_BUILDER_AUTHORING_MANIFEST = {
1528
1560
  title: 'Validate schedule',
1529
1561
  scope: 'global',
1530
1562
  targetKind: 'validation',
1531
- target: { kind: 'validation', resolver: 'schedule-validation-request', ambiguityPolicy: 'fail', required: false },
1563
+ target: { kind: 'validation', resolver: 'schedule-validation-request', resolutionSpec: cronValidationResolutionSpec, ambiguityPolicy: 'fail', required: false },
1532
1564
  inputSchema: {
1533
1565
  type: 'object',
1534
1566
  properties: {
@@ -1570,7 +1602,7 @@ const PRAXIS_CRON_BUILDER_AUTHORING_MANIFEST = {
1570
1602
  title: 'Generate schedule preview',
1571
1603
  scope: 'global',
1572
1604
  targetKind: 'preview',
1573
- target: { kind: 'preview', resolver: 'schedule-preview-config', ambiguityPolicy: 'fail', required: false },
1605
+ target: { kind: 'preview', resolver: 'schedule-preview-config', resolutionSpec: cronPreviewResolutionSpec, ambiguityPolicy: 'fail', required: false },
1574
1606
  inputSchema: {
1575
1607
  type: 'object',
1576
1608
  properties: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@praxisui/cron-builder",
3
- "version": "10.0.0-rc.43",
3
+ "version": "10.0.0-rc.45",
4
4
  "description": "Cron expression builder utilities and components for Praxis UI.",
5
5
  "peerDependencies": {
6
6
  "@angular/common": "^21.0.0",
@@ -8,8 +8,8 @@
8
8
  "@angular/forms": "^21.0.0",
9
9
  "@angular/cdk": "^21.0.0",
10
10
  "@angular/material": "^21.0.0",
11
- "@praxisui/core": "^10.0.0-rc.43",
12
- "@praxisui/ai": "^10.0.0-rc.43",
11
+ "@praxisui/core": "^10.0.0-rc.45",
12
+ "@praxisui/ai": "^10.0.0-rc.45",
13
13
  "rxjs": "~7.8.0"
14
14
  },
15
15
  "dependencies": {