Commit 8a483b3
docs(spec): the residual broken-sweep mentions in automation are a first FILTER, and the misspelled-effect sentences state the measured direction (#13096)
#12685 measured that `selected > 0 AND acted = 0 AND unmeasured = 0` cannot
separate a healthy idempotent sweep from a dead gate. #12721, #12722, #12900 and
#13068 each rewrote the surfaces that stated it as a detector, and each was
fenced to the doc blocks its dispatch named -- so three mentions inside
`packages/spec/src/automation` were left standing rather than corrected in
passing. One of them ships in `.d.ts` and is what a platform author reads.
Reworded to the shape the sibling surfaces now agree on: the predicate is the
FIRST FILTER and not a verdict, the per-node fold (`FlowRunSummary.nodes[]` /
`gates[]`) is the discriminator, and each clause keeps its own true point.
1. `execution.zod.ts` -- the `unmeasuredEffect` rationale no longer says an
understated `0` "fires the broken-sweep alert on a healthy run until
operators learn to ignore it". That muting is not peculiar to an understated
`0`: after #12685 the filter selects every healthy idempotent sweep. The
block now states what a fabricated count really costs -- an understated `0`
puts a run that DID act inside the filter, an overstated `1` keeps a run that
acted on nothing outside it, and a faked `acted` is a fact the per-node fold
can only repeat rather than settle.
2. `execution.test.ts` -- the comment no longer says "the broken-sweep query has
to be able to tell". The assertion under it is unchanged and still correct:
it pins that `unmeasured` is carried distinctly from `acted`.
3. `flow-function.test.ts` -- the comment mirroring the source sentence #13068
reworded now matches it again.
CAUSAL DIRECTION, measured rather than ruled. The card's second half asked
whether the "stays silent on the one flow that needed it" sentences state their
direction backwards. They do. Read forward: a lost `effect: 'writes'`
declaration means the `script` executor reports no `unmeasuredEffect`
(`screen-nodes.ts`: `const unmeasured = registration.effect === 'writes'`), so
the run folds to `selected > 0, acted 0, unmeasured 0` -- which SATISFIES the
three-clause filter. The run lands INSIDE the candidate set reading exactly like
a dead sweep, rather than escaping it. The same file's `@module` block already
said so ("which reads exactly like the broken sweep #4354 exists to detect"),
and `packages/qa/dogfood/test/flow-function-effect.dogfood.test.ts` asserts both
legs end to end: declared writer -> `unmeasured: 1` (filter does not match),
pure -> `unmeasured: 0` with the filter "free to fire on this run".
The card's alternative reading -- a flow whose only work is inside the function,
so `selected` stays 0 -- is disposed of by the same measurement: there the
filter is quiet with OR without the declaration, which makes the sentence
vacuous rather than correct.
Bounded in-place: `flow-function.zod.ts` is one file outside the three-mention
surface, carrying the two source sentences that mention 3 mirrors. Fixing the
mirror while leaving its source backwards would manufacture exactly the
disagreement this card exists to remove, so both are corrected here -- the
`FlowFunctionDeclarationSchema` TSDoc and the author-facing `history` string in
its unknown-key message.
Prose and one error-message string only -- no behaviour, no schema, no
accept-set change. `check:generated` reports all 14 artifacts up to date, so
nothing regenerated.
Claude-Session: https://claude.ai/code/session_01LpRNHxWZgSUgVnFT9mQQo4
Co-authored-by: Claude <noreply@anthropic.com>1 parent 4d94823 commit 8a483b3
5 files changed
Lines changed: 68 additions & 10 deletions
File tree
- .changeset
- packages/spec/src/automation
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
208 | 208 | | |
209 | 209 | | |
210 | 210 | | |
211 | | - | |
212 | | - | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
213 | 218 | | |
214 | 219 | | |
215 | 220 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
55 | 55 | | |
56 | 56 | | |
57 | 57 | | |
58 | | - | |
59 | | - | |
60 | | - | |
61 | | - | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
62 | 71 | | |
63 | 72 | | |
64 | 73 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
191 | 191 | | |
192 | 192 | | |
193 | 193 | | |
194 | | - | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
195 | 199 | | |
196 | 200 | | |
197 | 201 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
141 | 141 | | |
142 | 142 | | |
143 | 143 | | |
144 | | - | |
145 | | - | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
146 | 150 | | |
147 | 151 | | |
148 | 152 | | |
| |||
173 | 177 | | |
174 | 178 | | |
175 | 179 | | |
176 | | - | |
| 180 | + | |
| 181 | + | |
177 | 182 | | |
178 | 183 | | |
179 | 184 | | |
| |||
0 commit comments