Skip to content
Open
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 closed type union + EL §1.2.1 (list nesting max 2; LIST[LIST[LIST[INT]]] forbidden). Single defect; accept partner is mainline 2.16--list-list-int-param.yaml. New axis (nesting-depth rejection).

Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Section 2: the list parameter types are exactly LIST[STRING], LIST[PATH],
# LIST[INT], LIST[FLOAT], LIST[BOOL], and LIST[LIST[INT]]. Deeper nesting
# such as LIST[LIST[LIST[INT]]] is not a valid type and must be rejected.
specificationVersion: jobtemplate-2023-09
extensions:
- EXPR
name: TestJob
parameterDefinitions:
- name: Cube
type: "LIST[LIST[LIST[INT]]]"
default: [[[1]]]
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 (4/5) — spec: §2 intro / RFC 0007 (type names fully case-insensitive under EXPR, incl. inside LIST[...] brackets). Nits (coverage): marginal over mainline 2--type-case-insensitive.yaml (a case-folder passes both, a fixed-set matcher fails both), and it drops scalar PATH, the one type the sibling covers.

Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
# With EXPR enabled, job parameter type names are case-insensitive.
# 2--type-case-insensitive.yaml tests one spelling per type; this fixture
# tests adversarial mixed-case spellings that an implementation matching on
# a fixed set of spellings (rather than case-folding) would reject.
specificationVersion: jobtemplate-2023-09
extensions:
- EXPR
name: TestJob
parameterDefinitions:
- name: MyInt
type: iNt
- name: MyFloat
type: fLoAt
- name: MyString
type: sTrInG
- name: MyPath
type: PaTh
- name: MyBool
type: bOoL
default: true
- name: MyRangeExpr
type: rAnGe_ExPr
default: "1-10"
- name: MyListInt
type: "LiSt[iNt]"
default: [1, 2]
- name: MyListString
type: "lIsT[StRiNg]"
default: ["a"]
- name: MyListFloat
type: "LisT[fLOat]"
default: [1.5]
- name: MyListPath
type: "liST[paTH]"
default: ["/tmp/a"]
- name: MyListBool
type: "lIsT[bOoL]"
default: [true, false]
- name: MyListListInt
type: "LiSt[lIsT[iNt]]"
default: [[1], [2, 3]]
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 (4/5) — spec: §2.10 (default must be a valid IntRangeExpr) + EL §1.2.1 (int64). Uses exactly 2^63 — correct invalid value. Nits: (1) the header cites boundary pair 2.10--range-expr-endpoint-int64-max.yaml which is not on this branch — it's parked in PR #166's proposed/ (openjd-rs false-rejects it); say so, else the reference dangles; (2) the int64 bound comes from EL §1.2.1, not §3.4.1.1.1 (whose grammar says <Int> is "any integer value"); (3) until the accept twin is live, an int32-capped implementation passes this negative for the wrong reason.

Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# Section 2.10 + Expression Language 1.2.1 (int is 64-bit signed; the
# 3.4.1.1.1 grammar itself says "any integer value" — the bound comes from
# the EXPR type table): 9223372036854775808 is 2^63, one past the int64
# maximum, so a range expression containing it as an endpoint must be
# rejected. Its accept-side boundary pair
# (2.10--range-expr-endpoint-int64-max.yaml) is parked in the
# expected-failures PR's proposed/ directory because openjd-rs currently
# false-rejects endpoints >= 2^62; until that lands, an int32/int62-capped
# implementation passes this negative for the wrong reason.
specificationVersion: jobtemplate-2023-09
extensions:
- EXPR
name: TestJob
parameterDefinitions:
- name: Frames
type: RANGE_EXPR
default: "1-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) — spec: §2.11 (default items are <string>; the dual int/intstring form is granted only to INT per §2.3). STRING was the only list type missing a wrong-item-type negative. Mirrors the existing 2.12 precedent.

Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Section 2.11: a LIST[STRING] default is a list of <string>. A numeric
# element is the wrong item type and must be rejected. Counterpart of the
# wrong-item-type negatives that exist for the other list types.
specificationVersion: jobtemplate-2023-09
extensions:
- EXPR
name: TestJob
parameterDefinitions:
- name: Items
type: LIST[STRING]
default: [123, 456]
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) — spec: §2.12 item.allowedValues (accept side; default ⊆ allowedValues). item.allowedValues for LIST[PATH] was wholly untested on mainline; pair complete intra-PR.

Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Section 2.12: item.allowedValues constrains each path element to the given
# values. Positive pair for 2.12--list-path-item-not-in-allowed.invalid.yaml.
specificationVersion: jobtemplate-2023-09
extensions:
- EXPR
name: TestJob
parameterDefinitions:
- name: Scenes
type: LIST[PATH]
default: ["/assets/a.blend", "/assets/b.blend"]
item:
allowedValues: ["/assets/a.blend", "/assets/b.blend", "/assets/c.blend"]
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) — spec: §2.12 item.allowedValues (reject side). Minimal one-element delta from its positive pair — good design; the only defect is the out-of-list element.

Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Section 2.12: item.allowedValues is "An array of the values that each item
# is allowed to be". A default element outside the list must be rejected.
# Differs from 2.12--list-path-item-allowed-values.yaml only in the
# out-of-list element.
specificationVersion: jobtemplate-2023-09
extensions:
- EXPR
name: TestJob
parameterDefinitions:
- name: Scenes
type: LIST[PATH]
default: ["/assets/a.blend", "/assets/z.blend"]
item:
allowedValues: ["/assets/a.blend", "/assets/b.blend", "/assets/c.blend"]
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 (4/5) — spec: §2.13 + EL §1.2.1 (element at exactly 2^63-1 accepted; pins full int64 range against int32 narrowing). Reject partner confirmed in PR #166 proposed/. Nits: only fixture in the set with no header comment (int64 fixtures particularly need one since the bound comes from the EL spec, not §2.13); "item-" in the name suggests an item: constraint block that isn't present.

Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# Section 2.13 + Expression Language 1.2.1: a LIST[INT] default element at
# exactly 2^63-1 (the int64 maximum — the bound comes from the EXPR type
# table, not 2.13 itself) must be ACCEPTED. Pins the full int64 element
# range against int32-narrowed or float64-backed parsing. The reject twin
# (element at 2^63) is parked in the expected-failures PR's proposed/
# because both implementations currently accept it. Note: this tests the
# element VALUE range, not an `item:` constraint block (LIST[INT] has one,
# but it is not exercised here).
specificationVersion: jobtemplate-2023-09
extensions:
- EXPR
name: TestJob
parameterDefinitions:
- name: Values
type: LIST[INT]
default: [1, 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 (5/5) — spec: §2.15 schema deliberately has no item property (parallel to §2.9's no-allowedValues note). Declaring item.allowedValues is the sole defect. Distinct validation path from the structural 2.15 negatives on mainline.

Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Section 2.15: the LIST[BOOL] schema has no "item" property (unlike the
# other list types), so declaring item constraints must be rejected.
specificationVersion: jobtemplate-2023-09
extensions:
- EXPR
name: TestJob
parameterDefinitions:
- name: Flags
type: LIST[BOOL]
default: [true, false]
item:
allowedValues: [true, false]
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 (4/5) — spec: §2.16 + EL §1.2.1 (inner elements at 2^63-1 / 2^63-2). Partner in PR #166. Same nits as the 2.13 sibling: no header comment; "inner-item" naming implies an item.item: block that isn't exercised; mechanical duplication of the 2.13 boundary (kept because nested-list is a declared defect axis).

Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# Section 2.16 + Expression Language 1.2.1: an inner element of a
# LIST[LIST[INT]] default at exactly 2^63-1 must be ACCEPTED — the int64
# bound (from the EXPR type table) applies one container level deeper than
# 2.13's flat-list case, guarding nested validation paths. The reject twin
# (inner element at 2^63) is parked in the expected-failures PR's
# proposed/. Note: this tests the inner element VALUE range, not the
# nested `item.item:` constraint block.
specificationVersion: jobtemplate-2023-09
extensions:
- EXPR
name: TestJob
parameterDefinitions:
- name: Matrix
type: LIST[LIST[INT]]
default: [[1, 9223372036854775807], [9223372036854775806]]
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) — spec: §2.9 note ("BOOL does not support allowedValues"). Comment quotes the normative text; sole defect is the property. Mainline 2.9 negatives were all wrong-default-type — unknown-property rejection is new coverage.

Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Section 2.9: "BOOL does not support allowedValues". The property is not in
# the BOOL schema, so declaring it must be rejected.
specificationVersion: jobtemplate-2023-09
extensions:
- EXPR
name: TestJob
parameterDefinitions:
- name: Flag
type: BOOL
default: true
allowedValues: [true]
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 (4/5; 1 dissent NOT-GOOD) — spec: §2.12 Param.<name>[i] returns path + EL §2.3.1 properties; expected values verified against pathlib semantics. Dissent finding (real, cheap to fix): expected substring STEM0:alpha is contained in STEM0:alpha.exr, so an implementation whose .stem wrongly returns .name passes the whole fixture. Add a terminator (e.g. STEM0:alpha:END) or trailing sentinel to the STEM lines.

Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
# Section 2.12 / Expression Language section 2.3.1: path properties must be
# reachable through a subscripted list element (Param.Paths[0].stem), not
# only through a scalar path binding like Task.Param.Path.stem.
template:
specificationVersion: jobtemplate-2023-09
extensions:
- EXPR
name: TestJob
parameterDefinitions:
- name: Paths
type: LIST[PATH]
default: ["renders/alpha.exr", "renders/beta.png"]
steps:
- name: Step1
script:
actions:
onRun:
command: python
args:
- -c
- |
print(r'STEM0:{{ Param.Paths[0].stem }}:END')
print(r'STEM1:{{ Param.Paths[1].stem }}:END')
print(r'SUFFIX0:{{ Param.Paths[0].suffix }}:END')
print(r'NAME1:{{ Param.Paths[1].name }}:END')
# The :END terminators make each assertion exact: without them,
# "STEM0:alpha" is a substring of the wrong answer "STEM0:alpha.exr", so
# an implementation whose .stem returns .name would pass.
expected:
output:
- STEM0:alpha:END
- STEM1:beta:END
- SUFFIX0:.exr:END
- NAME1:beta.png:END

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.15 accepted item spellings + EL §1.3.2 embedded interpolation (list → its string representation). Coercions correct. Nit (service-compat): pins [true, false, true] with ", " spacing — the spec's only spacing evidence is the §1.3.2 example; a compact-JSON implementation would fail on formatting alone. Coverage nit: overlaps the runtime sibling; could have merged.

Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# LIST[BOOL] interpolation: a bool list embedded in surrounding text renders
# as a list literal with lowercase true/false elements, with string/int
# spellings in the default already coerced to bool.
template:
specificationVersion: jobtemplate-2023-09
extensions:
- EXPR
name: TestJob
parameterDefinitions:
- name: Flags
type: LIST[BOOL]
default: [true, "no", 1]
steps:
- name: Step1
script:
actions:
onRun:
command: python
args:
- -c
- |
print(r'FLAGS:{{ Param.Flags }}')
# anyOf: the spec pins lowercase JSON booleans but shows list rendering
# with ", " separators only by example (EL 1.3.2); a compact-JSON
# implementation is not plausibly non-conformant, so both spacings pass.
expected:
output:
- anyOf:
- "FLAGS:[true, false, true]"
- "FLAGS:[true,false,true]"

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 comment nit) — spec: §2.15 (all six supplied spellings coerce per the §2.9 value table; element access, len, not). Fills the only missing per-type runtime fixture (2.9-2.14 and 2.16 all have one). Nit: the header claims coverage of "each of the admitted element spellings" but float 1.0/0.0 and several string forms are untested — trim the claim.

Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
# LIST[BOOL] runtime: element values must reach the task coerced to bool.
# Exercises a representative sample of the section 2.9/2.15 admitted
# spellings (bool literal, "false", "yes", "off", "1", int 0); the float
# 1.0/0.0 forms and the remaining string spellings are not covered here.
template:
specificationVersion: jobtemplate-2023-09
extensions:
- EXPR
name: TestJob
parameterDefinitions:
- name: Flags
type: LIST[BOOL]
default: [true, "false", "yes", "off", "1", 0]
steps:
- name: Step1
script:
actions:
onRun:
command: python
args:
- -c
- |
print(r'LEN:{{ len(Param.Flags) }}')
print(r'F0:{{ Param.Flags[0] }}')
print(r'F1:{{ Param.Flags[1] }}')
print(r'F2:{{ Param.Flags[2] }}')
print(r'F3:{{ Param.Flags[3] }}')
print(r'F4:{{ Param.Flags[4] }}')
print(r'F5:{{ Param.Flags[5] }}')
print(r'NOT0:{{ not Param.Flags[0] }}')
expected:
output:
- LEN:6
- F0:true
- F1:false
- F2:true
- F3:false
- F4:true
- F5:false
- NOT0:false
Loading