Repository navigation
Commit 1872e52
fix(spec): the edge-condition upgrade entry and its pending changeset name
Fixes #19966
Clause-②: no
## What this changes
The ADR-0087 D3 entry
`flow-edge-condition-evaluated-slot-source-required` (landed,
unreleased, protocol step 18) and the pending changeset for the same
change named `POST /flows` as a door a flow definition is authored
through. No such route is mounted. This PR replaces it with the door a
flow definition is actually created through on a composed runtime, `POST
/api/v1/automation`, measured below.
| File | Where | Before | After |
|---|---|---|---|
|
`packages/spec/src/migrations/entries/semantic/18.flow-edge-condition-evaluated-slot-source-required.ts`
| `surface` (`:21`) | `a POST /flows body` | `a POST /api/v1/automation
body` |
| same | `acceptanceCriteria` (`:63`) | `` `POST /flows` bodies `` | ``
`POST /api/v1/automation` bodies `` |
| `packages/spec/src/migrations/registry.ts` | generated mirror
(`:9068`, `:9110`) | regenerated with `pnpm --filter @objectstack/spec
gen:migration-registry` | |
| `.changeset/flow-edge-condition-evaluated-slot.md` | `:86` | ``
`objectstack validate` / `POST /flows` `` | `` `objectstack validate` /
`POST /api/v1/automation` `` |
| same | `:63`–`:67` (PM patch round) | the whitespace-only
`config.condition` ruling "is untouched." | "is untouched by this
change, but it does not survive the release that carries it", pointing
at the two sibling notes that refuse the value |
| same | `:109`–`:115` (PM patch round) | the start node's producer-side
gate "is the structural refusal above" | the structural pass at
`registerFlow` and `objectstack validate`: the shape refusal, then the
blank-source check running `EvaluatedExpressionInputSchema` |
Text only. No runtime, schema or export change.
### The pending changeset: a DELIBERATE CORRECTION, not a collision
`.changeset/flow-edge-condition-evaluated-slot.md` belongs to another
card's PR (#15807). This PR corrects three sentences in it, each of
which reads false in the release it ships in:
1. **The route.** In "The paragraph above is the author's remedy, at
`objectstack validate` / `POST /flows`; a stored row has no author in
front of it.", the route now reads `POST /api/v1/automation`.
2. **The whitespace-only `config.condition` ruling** (PM patch round).
The note said the #15662 ruling "is untouched". That is true of #15807's
own diff, but two sibling notes in the same pending release refuse the
value: #17322 (`@objectstack/service-automation`,
`.changeset/blank-node-condition-refused-at-registration.md`) at
`registerFlow`, and #17495 (`@objectstack/lint`,
`.changeset/validate-refuses-blank-structural-condition.md`) at
`objectstack validate`. The sentence now keeps the first half and points
at those two notes by card and package, without restating their rule. It
names packages rather than `.changeset/` paths because `changeset
version` deletes those files, so a path would dangle in the published
CHANGELOG. Measured at `66417af31f`:
`service-automation/src/engine.ts:9480` sends a node's
`config.condition` to `checkStructuralCondition`, whose second gate
(`:9460`) is `evaluatedSourceRefusal` (`:9437`–`:9451`), and that runs
`EvaluatedExpressionInputSchema.safeParse` on the source (`:9448`). The
engine reaches this from `registerFlow` (`:4107` →
`validateFlowExpressions`, `:4134`). The lint pass does the same:
`lint/src/validate-expressions.ts:1368` → `:1349` →
`evaluatedSourceRefusal`, `:966`–`:972` (`safeParse` at `:969`). All
three notes are pending: none of #15807, #17322 or #17495 appears in the
spec, service-automation or lint `CHANGELOG.md`.
3. **The start node's producer-side gate** (PM patch round). The note
said the gate "is the structural refusal above". It now names the
structural pass at both doors: the shape refusal, then the blank-source
check running `EvaluatedExpressionInputSchema` on the condition's
`source`, added by #17322 at `registerFlow` and by #17495 at
`objectstack validate` (the same file:line readings as item 2). "Has no
Zod schema to narrow (the start node's `config` is an open record)" is
kept because it is still true. `FlowNodeSchema.config` is
`z.record(z.string(), z.unknown())`
(`spec/src/automation/flow.zod.ts:488`). The only per-type config parse
on the node contract is for `end` (`parseEndNodeConfig`, `:439`–`:449`),
and no start-node config schema exists in `packages/spec/src`.
Nothing else in that note changed. No new changeset is added, and
`skip-changeset` is deliberately not applied: the note being corrected
is itself the release input.
POST /api/v1/automation, not the nonexistent POST /flows (#20031)1 parent 6aa3188 commit 1872e52
3 files changed
Lines changed: 15 additions & 8 deletions
File tree
- .changeset
- packages/spec/src/migrations
- entries/semantic
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
61 | 61 | | |
62 | 62 | | |
63 | 63 | | |
64 | | - | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
65 | 68 | | |
66 | 69 | | |
67 | 70 | | |
| |||
80 | 83 | | |
81 | 84 | | |
82 | 85 | | |
83 | | - | |
| 86 | + | |
84 | 87 | | |
85 | 88 | | |
86 | 89 | | |
| |||
104 | 107 | | |
105 | 108 | | |
106 | 109 | | |
107 | | - | |
108 | | - | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
Lines changed: 2 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
18 | 18 | | |
19 | 19 | | |
20 | 20 | | |
21 | | - | |
| 21 | + | |
22 | 22 | | |
23 | 23 | | |
24 | 24 | | |
| |||
60 | 60 | | |
61 | 61 | | |
62 | 62 | | |
63 | | - | |
| 63 | + | |
64 | 64 | | |
65 | 65 | | |
66 | 66 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
9187 | 9187 | | |
9188 | 9188 | | |
9189 | 9189 | | |
9190 | | - | |
| 9190 | + | |
9191 | 9191 | | |
9192 | 9192 | | |
9193 | 9193 | | |
| |||
9229 | 9229 | | |
9230 | 9230 | | |
9231 | 9231 | | |
9232 | | - | |
| 9232 | + | |
9233 | 9233 | | |
9234 | 9234 | | |
9235 | 9235 | | |
| |||
0 commit comments