Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Quorum verdict: GOOD (5/5) — spec: §2.10 + §3.4.1.1.1 + EL §1.2.1 (2^63-1 endpoints must validate). Pins openjd-rs's undocumented 2^62 endpoint cap (rs-only per sweep); fix widens acceptance only. The README's note that the companion negative (PR #158's 2.10--range-expr-endpoint-int64-overflow) passes for the wrong reason until this accept is green is exactly right — promote as a pair. Nit: the quoted validation error looks pydantic-style (Python) for an rs-attributed bug — double-check which CLI produced it, and state that Python passes.

Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# Section 2.10 / 3.4.1.1.1: RANGE_EXPR endpoints at the int64 boundary.
# 9223372036854775807 is 2^63-1, the largest representable endpoint.
specificationVersion: jobtemplate-2023-09
extensions:
- EXPR
name: TestJob
parameterDefinitions:
- name: Frames
type: RANGE_EXPR
default: "9223372036854775806-9223372036854775807"
steps:
- name: Step1
script:
actions:
onRun:
command: python
args:
- "-c"
- "print()"

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Quorum verdict: GOOD-WITH-NITS — spec: §2.13 + EL §1.2.1 (LIST[INT] element bound). Matches sweep (fails BOTH — say so; README says 'the current openjd CLI' without attribution). Nits: only fixture family in the five PRs without in-file header comments — add one (the bound comes from the EL type table, not §2.13); carry the same 'pending restoration of the RFC 0005 overflow text' hedge the expr-lang README uses for the identical bound. Accept twin: PR #158's 2.13--list-int-item-int64-max.

Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# PARKED (see README-param-types.md): a LIST[INT] default element of
# 9223372036854775808 (2^63) exceeds the int64 range (Expression Language
# 1.2.1 — the bound comes from the EXPR type table, not section 2.13
# itself) and must be rejected. Both implementations currently accept it.
# Accept twin at 2^63-1: 2.13--list-int-item-int64-max.yaml
# (param-types-gaps PR).
specificationVersion: jobtemplate-2023-09
extensions:
- EXPR
name: TestJob
parameterDefinitions:
- name: Values
type: LIST[INT]
default: [9223372036854775808]
steps:
- name: Step1
script:
actions:
onRun:
command: python
args:
- "-c"
- "print()"

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Quorum verdict: GOOD-WITH-NITS — spec: §2.16 (inner element, one container deeper — a declared sweep axis, kept despite likely sharing 2.13's recursive code path). Same nits as 2.13: no header comment, no per-implementation attribution, needs the spec-restoration hedge. Accept twin: PR #158's 2.16--list-list-int-inner-item-int64-max.

Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# PARKED (see README-param-types.md): a LIST[LIST[INT]] inner element of
# 9223372036854775808 (2^63) exceeds the int64 range (Expression Language
# 1.2.1) — the same int64-in-data defect as 2.13, one container level
# deeper, guarding nested validation paths. Both implementations currently
# accept it. Accept twin: 2.16--list-list-int-inner-item-int64-max.yaml
# (param-types-gaps PR).
specificationVersion: jobtemplate-2023-09
extensions:
- EXPR
name: TestJob
parameterDefinitions:
- name: Matrix
type: LIST[LIST[INT]]
default: [[9223372036854775808]]
steps:
- name: Step1
script:
actions:
onRun:
command: python
args:
- "-c"
- "print()"

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Quorum verdict: GOOD (5/5, one attribution fix) — spec: §2 intro (with EXPR, job AND task parameter type names are case-insensitive — the sentence explicitly covers task types). Acceptance-widening only; queue environments unaffected (they carry job params). Promotion-ready. Fix: the README quotes a serde/Rust-style error and diagnoses rs-specifically, but the sweep shows BOTH implementations fail — add Python's observation. Inventory note: the reject twin (task-param lowercase WITHOUT EXPR) doesn't exist anywhere — consider adding it.

Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# With EXPR enabled, task parameter type names are case-insensitive
# (Template Schemas section 2: "job parameter and task parameter type names
# become case-insensitive"). Task parameter types are INT, FLOAT, STRING,
# and PATH (section 3.4.1); LIST forms are not task parameter types.
specificationVersion: jobtemplate-2023-09
extensions:
- EXPR
name: TestJob
steps:
- name: Step1
parameterSpace:
taskParameterDefinitions:
- name: Frame
type: int
range: "1-3"
- name: Scale
type: Float
range: ["1.0", "2.0"]
- name: Layer
type: sTrInG
range: ["fg", "bg"]
- name: Scene
type: pAtH
range: ["/tmp/a.blend", "/tmp/b.blend"]
script:
actions:
onRun:
command: python
args:
- "-c"
- "print()"
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
# Proposed fixtures (extended parameter types) — job_templates

These fixtures are believed spec-correct but fail against at least one
current reference implementation. Placement is kind-level
(`<component>/<kind>/proposed/`): the runner does not scan `proposed/`, and
promotion is a move up one directory unchanged. This README is named per
fixture family (`README-param-types.md`) because other expected-failures
PRs park fixtures in this same directory with their own READMEs.

Observations are per-implementation (`rs` = openjd-rs, `py` = the Python
openjd CLI); dual results from the 2026-08-12 sweep, rs re-verified against
the current upstream/main build.

## 2.13--list-int-item-int64-overflow.invalid.yaml
## 2.16--list-list-int-inner-item-int64-overflow.invalid.yaml

Both must be rejected: a `LIST[INT]` element / `LIST[LIST[INT]]` inner element
of `9223372036854775808` (2^63) exceeds the int64 range that governs `int`
values (Expression Language §1.2.1 "64-bit signed integer"; the EXPR literal
fixtures `expr2.1.1--int64-overflow-*` pin the same bound for literals).
Observed — accepted by **BOTH rs and py**:

```
$ openjd check 2.13--list-int-item-int64-overflow.invalid.yaml
Template ... passes validation checks.
$ openjd check 2.16--list-list-int-inner-item-int64-overflow.invalid.yaml
Template ... passes validation checks.
```

Classification: implementation bug in both, the known int64-in-data bug
class (scalar INT parameter defaults have the same defect) one container
deeper. The implementations validate int64 bounds for expression literals
and arithmetic but not for values arriving as YAML data in list defaults.
Same caveat as the expr-lang family: the explicit overflow-is-error text
was dropped from the published spec (only the §1.2.1 type-table row
remains), so promotion is additionally gated on restoring that text.
Accept twins at 2^63-1: `2.13--list-int-item-int64-max.yaml` /
`2.16--list-list-int-inner-item-int64-max.yaml` in the param-types-gaps PR.

## 2.10--range-expr-endpoint-int64-max.yaml

Must be accepted: Template Schemas §3.4.1.1.1 defines `<Int>` as "Any integer
value (positive, negative, or zero)", and §2.10 requires only that a
RANGE_EXPR default be a valid `<IntRangeExpr>`. Observed:

```
$ openjd check 2.10--range-expr-endpoint-int64-max.yaml
ERROR: Model validation error: 1 validation error for JobTemplate
parameterDefinitions[0]:
Parameter 'Frames': default '9223372036854775806-9223372036854775807' is not a valid range expression.
```

Probing shows the implementation accepts endpoints up to 2^62-1
(4611686018427387903) and rejects 2^62 (4611686018427387904) and above.
This is **rs-only** — py accepts the valid endpoints (the quoted error is
rs output; openjd-rs uses the same "Model validation error" format as
pydantic, re-verified against the current upstream/main build).
Classification: openjd-rs implementation bug (undocumented 2^62 endpoint
cap; the spec grammar admits any int64 endpoint). Note: the companion
negative `2.10--range-expr-endpoint-int64-overflow.invalid.yaml` (in the
parent directory, param-types-gaps PR) currently passes on rs because of
this same over-rejection, so its rejection reason is wrong until this
positive is green — promote as a pair.

## 3.4.1--task-param-type-case-insensitive.yaml

Must be accepted: Template Schemas §2 states that with EXPR enabled "job
parameter and task parameter type names become case-insensitive". Observed:

```
$ openjd check 3.4.1--task-param-type-case-insensitive.yaml
ERROR: Validation error: 'jobtemplate-2023-09' failed checks: unknown variant `int`, expected one of `INT`, `FLOAT`, `STRING`, `PATH`, `CHUNK[INT]`
```

Classification: implementation bug in **BOTH** implementations (2026-08-12
sweep; the quoted serde-style error is rs — py fails with its own message).
Task parameter type names are matched exactly; case-insensitivity is
implemented for job parameter types only. Missing reject twin worth adding
separately: task-param lowercase type WITHOUT EXPR (nothing pins that gate
anywhere in the suite).

## Dropped: 2--type-lowercase-string.invalid.yaml

An identical base type-lowercase pin also exists on the base
expected-failures PR (`base/job_templates/proposed/2--type-lowercase
.invalid.yaml`). This PR's copy was dropped to avoid promoting the same
pin twice; that branch's copy is the single source.
Loading