Found while #307 was staged on 2026-10-06, measured on @objectstack/spec 17.7.0, the npm latest. It belongs to the same family as #301 and #307: a reader who copies one of these samples gets a schema error. Priority: P2.
Findings
| Page |
Sample |
What 17.7.0 says |
build/automation/workflows.mdx:104 |
defineFlow |
refused: label missing on the flow, and on nodes.0 and nodes.3 |
build/automation/approvals.mdx:216 |
defineFlow |
refused: nodes.0.label and nodes.4.label missing |
build/interface/actions.mdx:119 |
defineView |
refused: unrecognized key actions |
build/interface/actions.mdx:63, :127-133 |
old { type: 'action', action, inputs, record } step |
the pre-nodes/edges flow shape that #307 retired |
reference/cel.mdx |
the "Flow guard" { when: … } step |
the same retired step shape |
Method: #307's, in scratchpad/issue-307/spec-check/scripts/{extract,flows-check,views-check,controls}.mjs on the seat's box. Extract each published fenced block, strip only TS syntax, wrap it minimally, parse it, and run refusal controls. Builtin nodes are also checked against getBuiltinNodeConfigContracts.
Done looks like
Order
After #307 lands. It may be split into two PRs, the page fixes and then the gate, if that is smaller to review.
Generated by Claude Code
Found while #307 was staged on 2026-10-06, measured on
@objectstack/spec17.7.0, the npmlatest. It belongs to the same family as #301 and #307: a reader who copies one of these samples gets a schema error. Priority: P2.Findings
build/automation/workflows.mdx:104defineFlowlabelmissing on the flow, and onnodes.0andnodes.3build/automation/approvals.mdx:216defineFlownodes.0.labelandnodes.4.labelmissingbuild/interface/actions.mdx:119defineViewactionsbuild/interface/actions.mdx:63,:127-133{ type: 'action', action, inputs, record }stepnodes/edgesflow shape that #307 retiredreference/cel.mdx{ when: … }stepMethod: #307's, in
scratchpad/issue-307/spec-check/scripts/{extract,flows-check,views-check,controls}.mjson the seat's box. Extract each published fenced block, strip only TS syntax, wrap it minimally, parse it, and run refusal controls. Builtin nodes are also checked againstgetBuiltinNodeConfigContracts.Done looks like
@objectstack/spec. A deliberately partial fragment says in a comment what it omits.tsandjsblocks fromcontent/docs/**/*.mdx(English only), wraps them as Docs code samples the current @objectstack/spec refuses: the remaining view fragments in build/interface/views.mdx and the send_email flow action in build/automation/flows.mdx #307 does, and fails on a refused sample. A per-block opt-out marker is allowed for intentionally invalid examples. Pin the spec version the way the repo pins its other tools, and say how it is bumped. Show it red onmainbefore the fixes and green after.Order
After #307 lands. It may be split into two PRs, the page fixes and then the gate, if that is smaller to review.
Generated by Claude Code