From 4fc0e0b226cd40edddf18413e9f9e4841993c8a8 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 21 Nov 2025 19:44:48 +0000 Subject: [PATCH 1/7] Initial plan From bd436ca9720d267408fb1b3011033d23f0df3ae3 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 21 Nov 2025 19:48:51 +0000 Subject: [PATCH 2/7] Clarify step notation syntax requirements in OCPS 1.0 Co-authored-by: Hexagon <419737+Hexagon@users.noreply.github.com> --- specifications/OCPS-1.0.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/specifications/OCPS-1.0.md b/specifications/OCPS-1.0.md index 9cd25bb..a647d7b 100644 --- a/specifications/OCPS-1.0.md +++ b/specifications/OCPS-1.0.md @@ -89,7 +89,7 @@ After converting any textual representations (e.g., `JAN`, `SUN`) to their numer | `*` | Wildcard | `* * * * *` | Matches every allowed value for the field. | | `,` | List Separator | `0,15,30,45` | Specifies a list of individual values. | | `-` | Range | `9-17` | Specifies an inclusive range of values. | -| `/` | Step | `5-59/15` | Specifies an interval. The step operates on the range it modifies, yielding `5,20,35,50` for this example. | +| `/` | Step | `*/15` or `5-59/15` | Specifies an interval. The step MUST be preceded by either a wildcard (`*`) or a range (`A-B`). The step operates on the preceding range, yielding values at regular intervals. | ### 5.1. Combining Special Characters @@ -97,7 +97,7 @@ In OCPS 1.0, the special characters are combined within a single field to create 1. **List Separation (`,`)**: The comma is the top-level separator. It breaks a field into a list of independent sub-expressions. The final set of values for the field is the union (logical `OR`) of the results of each sub-expression. 2. **Range (`-`) or Wildcard (`*`)**: Within each sub-expression, a range (`10-20`) or a wildcard (`*`) defines the initial set of numbers. A wildcard is equivalent to the full possible range for that field (e.g., `0-59` for minutes). -3. **Step (`/`)**: The step is an operator that filters the set generated by a range or wildcard. The resulting set includes the lowest value of the range, plus every S-th value after that which also falls within the range. +3. **Step (`/`)**: The step is an operator that MUST follow either a wildcard (`*`) or a range (`A-B`). It filters the set generated by that wildcard or range. The resulting set includes the lowest value of the range, plus every S-th value after that which also falls within the range. For example, `*/15` in the minute field yields `0,15,30,45`, and `10-40/10` yields `10,20,30,40`. --- ## 6. Operational Semantics @@ -115,8 +115,10 @@ A parser MUST reject a pattern if any numeric value falls outside the allowed ra #### Invalid Ranges A range `A-B` where `A` is greater than `B` is invalid. A parser MUST treat this as a parsing error. -#### Invalid Step Values -A step value of `0` has no logical definition and is invalid. A parser MUST reject any field containing `/0` as a parsing error. +#### Invalid Step Syntax +A parser MUST reject the following step-related patterns as parsing errors: +* A step value of `0` (e.g., `*/0`), as it has no logical definition. +* A step operator without a preceding wildcard or range (e.g., `/30`). The `/` character MUST be preceded by either `*` or a range in the form `A-B`. #### Impossible Date Combinations A pattern containing a valid but impossible date (e.g., `* * 31 2 *` for February 31st) MUST be considered syntactically valid and MUST NOT cause a parsing error. From d45b473cb2c40426c226e62cb73c339e64da5292 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 21 Nov 2025 19:50:22 +0000 Subject: [PATCH 3/7] Improve clarity of step notation descriptions Co-authored-by: Hexagon <419737+Hexagon@users.noreply.github.com> --- specifications/OCPS-1.0.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/specifications/OCPS-1.0.md b/specifications/OCPS-1.0.md index a647d7b..17409d1 100644 --- a/specifications/OCPS-1.0.md +++ b/specifications/OCPS-1.0.md @@ -89,7 +89,7 @@ After converting any textual representations (e.g., `JAN`, `SUN`) to their numer | `*` | Wildcard | `* * * * *` | Matches every allowed value for the field. | | `,` | List Separator | `0,15,30,45` | Specifies a list of individual values. | | `-` | Range | `9-17` | Specifies an inclusive range of values. | -| `/` | Step | `*/15` or `5-59/15` | Specifies an interval. The step MUST be preceded by either a wildcard (`*`) or a range (`A-B`). The step operates on the preceding range, yielding values at regular intervals. | +| `/` | Step | `*/15` or `5-59/15` | Specifies an interval. The step MUST be preceded by either a wildcard (`*`) or a range (`A-B`). The step operates on the preceding range, yielding values at regular intervals. For example, `*/15` yields `0,15,30,45` and `5-59/15` yields `5,20,35,50`. | ### 5.1. Combining Special Characters @@ -97,7 +97,7 @@ In OCPS 1.0, the special characters are combined within a single field to create 1. **List Separation (`,`)**: The comma is the top-level separator. It breaks a field into a list of independent sub-expressions. The final set of values for the field is the union (logical `OR`) of the results of each sub-expression. 2. **Range (`-`) or Wildcard (`*`)**: Within each sub-expression, a range (`10-20`) or a wildcard (`*`) defines the initial set of numbers. A wildcard is equivalent to the full possible range for that field (e.g., `0-59` for minutes). -3. **Step (`/`)**: The step is an operator that MUST follow either a wildcard (`*`) or a range (`A-B`). It filters the set generated by that wildcard or range. The resulting set includes the lowest value of the range, plus every S-th value after that which also falls within the range. For example, `*/15` in the minute field yields `0,15,30,45`, and `10-40/10` yields `10,20,30,40`. +3. **Step (`/`)**: The step is an operator that MUST follow either a wildcard (`*`) or a range (`A-B`). It filters the set generated by that wildcard or range. The resulting set includes the lowest value of the range, plus every N-th value after that (where N is the step value) which also falls within the range. For example, `*/15` in the minute field yields `0,15,30,45`, and `10-40/10` yields `10,20,30,40`. --- ## 6. Operational Semantics From d5b6de3e848ccf4e57dc91fdecd27ec719c26551 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 21 Nov 2025 20:08:16 +0000 Subject: [PATCH 4/7] Bump OCPS 1.0 revision to 2 and update revision history Co-authored-by: Hexagon <419737+Hexagon@users.noreply.github.com> --- specifications/OCPS-1.0.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/specifications/OCPS-1.0.md b/specifications/OCPS-1.0.md index 17409d1..c05988c 100644 --- a/specifications/OCPS-1.0.md +++ b/specifications/OCPS-1.0.md @@ -1,8 +1,8 @@ # OCPS 1.0: The Baseline **Status:** FINAL -**Revision:** 1 -**Date:** 2025-10-28 +**Revision:** 2 +**Date:** 2025-11-21 ## 1. Introduction @@ -142,4 +142,5 @@ A compliant parser or scheduler MUST interpret the pattern against the implement | Revision | Date | Author(s) | Description of Changes | | :--- | :--- | :--- | :--- | +| 2 | 2025-11-21 | The OCPS Authors | Clarified step notation syntax requirements: step operator (`/`) must be preceded by either wildcard (`*`) or range (`A-B`). Added explicit parsing error for invalid syntax like `/30`. | | 1 | 2025-10-28 | The OCPS Authors | Initial publication of the 1.0 specification. | From 29104ea5a1d2c57f66eb2a0bf40c17beac52314f Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 21 Nov 2025 21:02:39 +0000 Subject: [PATCH 5/7] Tone down step notation description changes, keep invalid syntax rule Co-authored-by: Hexagon <419737+Hexagon@users.noreply.github.com> --- specifications/OCPS-1.0.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/specifications/OCPS-1.0.md b/specifications/OCPS-1.0.md index c05988c..a2e21a8 100644 --- a/specifications/OCPS-1.0.md +++ b/specifications/OCPS-1.0.md @@ -89,7 +89,7 @@ After converting any textual representations (e.g., `JAN`, `SUN`) to their numer | `*` | Wildcard | `* * * * *` | Matches every allowed value for the field. | | `,` | List Separator | `0,15,30,45` | Specifies a list of individual values. | | `-` | Range | `9-17` | Specifies an inclusive range of values. | -| `/` | Step | `*/15` or `5-59/15` | Specifies an interval. The step MUST be preceded by either a wildcard (`*`) or a range (`A-B`). The step operates on the preceding range, yielding values at regular intervals. For example, `*/15` yields `0,15,30,45` and `5-59/15` yields `5,20,35,50`. | +| `/` | Step | `5-59/15` | Specifies an interval. The step operates on the range it modifies, yielding `5,20,35,50` for this example. | ### 5.1. Combining Special Characters @@ -97,7 +97,7 @@ In OCPS 1.0, the special characters are combined within a single field to create 1. **List Separation (`,`)**: The comma is the top-level separator. It breaks a field into a list of independent sub-expressions. The final set of values for the field is the union (logical `OR`) of the results of each sub-expression. 2. **Range (`-`) or Wildcard (`*`)**: Within each sub-expression, a range (`10-20`) or a wildcard (`*`) defines the initial set of numbers. A wildcard is equivalent to the full possible range for that field (e.g., `0-59` for minutes). -3. **Step (`/`)**: The step is an operator that MUST follow either a wildcard (`*`) or a range (`A-B`). It filters the set generated by that wildcard or range. The resulting set includes the lowest value of the range, plus every N-th value after that (where N is the step value) which also falls within the range. For example, `*/15` in the minute field yields `0,15,30,45`, and `10-40/10` yields `10,20,30,40`. +3. **Step (`/`)**: The step is an operator that filters the set generated by a range or wildcard. The resulting set includes the lowest value of the range, plus every N-th value after that (where N is the step value) which also falls within the range. --- ## 6. Operational Semantics From ebf99e771853d747e8ae65c0a62c0f82481d7227 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 21 Nov 2025 21:12:16 +0000 Subject: [PATCH 6/7] Clarify that single-value step notation like 10/10 is invalid Co-authored-by: Hexagon <419737+Hexagon@users.noreply.github.com> --- specifications/OCPS-1.0.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/specifications/OCPS-1.0.md b/specifications/OCPS-1.0.md index a2e21a8..7afa495 100644 --- a/specifications/OCPS-1.0.md +++ b/specifications/OCPS-1.0.md @@ -118,7 +118,7 @@ A range `A-B` where `A` is greater than `B` is invalid. A parser MUST treat this #### Invalid Step Syntax A parser MUST reject the following step-related patterns as parsing errors: * A step value of `0` (e.g., `*/0`), as it has no logical definition. -* A step operator without a preceding wildcard or range (e.g., `/30`). The `/` character MUST be preceded by either `*` or a range in the form `A-B`. +* A step operator without a preceding wildcard or range (e.g., `/30` or `10/10`). The `/` character MUST be preceded by either `*` or a range in the form `A-B` where A and B are both specified (e.g., `*/30` or `10-50/10` are valid, but `/30` or `10/10` are not). #### Impossible Date Combinations A pattern containing a valid but impossible date (e.g., `* * 31 2 *` for February 31st) MUST be considered syntactically valid and MUST NOT cause a parsing error. From ad96a83bf152429b558eff3a18787a8136be0e41 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 21 Nov 2025 21:26:38 +0000 Subject: [PATCH 7/7] Clarify that 0/15 single-value step notation is also invalid Co-authored-by: Hexagon <419737+Hexagon@users.noreply.github.com> --- specifications/OCPS-1.0.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/specifications/OCPS-1.0.md b/specifications/OCPS-1.0.md index 7afa495..a076699 100644 --- a/specifications/OCPS-1.0.md +++ b/specifications/OCPS-1.0.md @@ -118,7 +118,7 @@ A range `A-B` where `A` is greater than `B` is invalid. A parser MUST treat this #### Invalid Step Syntax A parser MUST reject the following step-related patterns as parsing errors: * A step value of `0` (e.g., `*/0`), as it has no logical definition. -* A step operator without a preceding wildcard or range (e.g., `/30` or `10/10`). The `/` character MUST be preceded by either `*` or a range in the form `A-B` where A and B are both specified (e.g., `*/30` or `10-50/10` are valid, but `/30` or `10/10` are not). +* A step operator without a preceding wildcard or range (e.g., `/30`, `0/15`, or `10/10`). The `/` character MUST be preceded by either `*` or a range in the form `A-B` where both A and B are specified (e.g., `*/30` or `10-50/10` are valid, but `/30`, `0/15`, or `10/10` are not). #### Impossible Date Combinations A pattern containing a valid but impossible date (e.g., `* * 31 2 *` for February 31st) MUST be considered syntactically valid and MUST NOT cause a parsing error.