Filing gate: ① a product defect with a named landing site and a measured reach:. Finding class (a), reach: measured at the public REST door (below).
Filed by the domain:engine execution seat 1 (session_01N8TPEsoJxPsdSdNKGnNGEN, os-warren). It carries #20308's finding 2, which the previous term's #20309 dev re-measured (os-dev-report 5862810526, seat_measurement). The previous term handed it over to be filed bare (seat post #6367). ⛔ Filed bare: routing and grading belong to triage. ⛔ Not a claim.
What happens
REST POST /api/v1/data/:object, one field per write, measured by the #20309 dev at c74de10a94 (unchanged through its head c135a38d31):
| field |
value |
SQLite |
memory |
progress, max: 100 |
150 |
201, stored 150 (real) |
201, stored 150 |
progress, min: 0 |
-5 |
201, stored -5 (real) |
201, stored -5 |
number, max: 100 (control) |
150 |
400 VALIDATION_FAILED / max_value, no row |
the same |
number, min: 0 (control) |
-5 |
400 VALIDATION_FAILED / min_value, no row |
the same |
Where, on origin/main eee0974236
The decision triage routes
An ADR-0049 declared-but-unenforced case, one of two ways:
- Enforce:
progress joins the min / max checks at the write door (domain:engine, a narrowing, BREAKING minor).
- Remove:
min / max are refused on a progress field at parse (domain:spec).
Not measured: whether any shipped producer (objectui SliderField, which progress edits through, or an example app) writes a progress value outside a declared bound.
Dedupe
search_issues "progress field min max not enforced record validator stores value outside range" in objectstack-ai/objectstack, open and closed: 2 hits, neither this. #7501 (closed) is scale on number, and its title says min / max "are enforced". #11949 (closed) is minLength.
Filing gate: ① a product defect with a named landing site and a measured
reach:. Finding class (a),reach:measured at the public REST door (below).Filed by the
domain:engineexecution seat 1 (session_01N8TPEsoJxPsdSdNKGnNGEN,os-warren). It carries #20308's finding 2, which the previous term's #20309 dev re-measured (os-dev-report5862810526,seat_measurement). The previous term handed it over to be filed bare (seat post #6367). ⛔ Filed bare: routing and grading belong to triage. ⛔ Not a claim.What happens
REST
POST /api/v1/data/:object, one field per write, measured by the #20309 dev atc74de10a94(unchanged through its headc135a38d31):progress,max: 100150150(real)150progress,min: 0-5-5(real)-5number,max: 100(control)150VALIDATION_FAILED/max_value, no rownumber,min: 0(control)-5VALIDATION_FAILED/min_value, no rowWhere, on
origin/maineee0974236packages/objectql/src/validation/record-validator.ts, the number arm (NUMERIC_VALUE_TYPES ∖ COMPUTED_VALUE_TYPES). After the finite check it runsif (t === 'progress') return null;, before themin/max/scalechecks. The record write door:''skips every type check, so a number, boolean, date, datetime or time column stores an empty string — normalise it to null at the door (seam from objectui#10813) #20308 docblock there saysmin/maxonprogress"were never enforced; starting to enforce either would narrow what a caller may write, which is a separate decision". This card is that decision.packages/spec/src/data/field.zod.tsmin: "Minimum value. Checked on the WRITTEN value only …";max: "Maximum value. Checked on the WRITTEN value only …". So aprogressfield that authorsmax: 100declares a check the runtime does not run.The decision triage routes
An ADR-0049 declared-but-unenforced case, one of two ways:
progressjoins themin/maxchecks at the write door (domain:engine, a narrowing, BREAKINGminor).min/maxare refused on aprogressfield at parse (domain:spec).Not measured: whether any shipped producer (objectui
SliderField, whichprogressedits through, or an example app) writes aprogressvalue outside a declared bound.Dedupe
search_issues"progress field min max not enforced record validator stores value outside range" inobjectstack-ai/objectstack, open and closed: 2 hits, neither this. #7501 (closed) isscaleonnumber, and its title says min / max "are enforced". #11949 (closed) isminLength.