Filing gate: ① a product defect with a measured reach:. Finding class (c): the runtime refuses what the authoring check passes.
reach: os validate (the CLI built at PR #20886's head 075a46340). The #20807 dev measured it (os-dev-report 5914264898 on #20807, out_of_scope_findings[1], fixture readings 26-os-validate-dim and 26-os-validate-ctrl). The readings are the dev's, and this seat did not re-run them.
Filed by the domain:services execution seat (#6021, session_01XY5uCwTjZj7884yYtyur4H). ⛔ Filed bare: routing and grading belong to triage. ⛔ Not a claim.
What happens
The measure refusal has both legs: the dataset compiler and lint's validate-dataset-measure-aggregates. The dimension refusal has only the runtime leg. An author, or an AI writing the stack, learns about the mistake at query time instead of at validation.
Scope for whoever takes it (⛔ not a ruling)
Reader who acts
Triage. The rule is lint's (packages/lint, which the anchoring rule puts in domain:spec); triage routes it and grades it, including whether it is an extension of the measure rule's check.
Dedupe
mcp__github__search_issues, repo-scoped, open and closed, in the act that filed this card:
Dedupe words: dataset dimension json field os validate · authoring rule dimension structured json · lint dataset dimension field type
Generated by Claude Code
Filing gate: ① a product defect with a measured
reach:. Finding class (c): the runtime refuses what the authoring check passes.reach:os validate(the CLI built at PR #20886's head075a46340). The #20807 dev measured it (os-dev-report5914264898on #20807,out_of_scope_findings[1], fixture readings26-os-validate-dimand26-os-validate-ctrl). The readings are the dev's, and this seat did not re-run them.Filed by the
domain:servicesexecution seat (#6021,session_01XY5uCwTjZj7884yYtyur4H). ⛔ Filed bare: routing and grading belong to triage. ⛔ Not a claim.What happens
os validatepasses a stack whose dataset declares a dimension over ajsonfield (exit 0, "Validation passed").jsonfield, compiled by NativeSQLStrategy, answers one group per serialized document on SQLite and 500 on PostgreSQL; the engine door #20783 closes does not see it #20807) lands, the runtime refuses that same dimension with400 INVALID_FIELD.avgover that field is refused bymeasure-aggregate-field-type-refused(exit 1). Soos validatedoes judge dataset members against their declared types, but only for measures.The measure refusal has both legs: the dataset compiler and lint's
validate-dataset-measure-aggregates. The dimension refusal has only the runtime leg. An author, or an AI writing the stack, learns about the mistake at query time instead of at validation.Scope for whoever takes it (⛔ not a ruling)
os validate. It uses the same class the runtime door uses:STRUCTURED_JSON_TYPESfrom@objectstack/spec/data.jsondimension fixture is refused at validation, with atextdimension as the control.Reader who acts
Triage. The rule is lint's (
packages/lint, which the anchoring rule puts indomain:spec); triage routes it and grades it, including whether it is an extension of the measure rule's check.Dedupe
mcp__github__search_issues, repo-scoped, open and closed, in the act that filed this card:objectstack validateandbuildaccept a dataset whose base object,includepath and dimension/measurefieldpaths all name nothing — the same walker already resolves date-macro tokens on the identical node #14105 (closed; dataset paths that name nothing). It is not a dimension's declared type.Dedupe words:
dataset dimension json field os validate·authoring rule dimension structured json·lint dataset dimension field typeGenerated by Claude Code