Commit 52dcd64
feat(spec): reject script actions with no executable binding + showcase execution tests
Prevents the class of bug fixed in #2169, where `showcase_mark_done` declared
`type: 'script'` but carried neither a `body` nor a `target`. AppPlugin only
registers an engine handler for actions with a runnable binding, so the action
fell through to the `'*'` wildcard lookup and failed at invocation with
`Action '<name>' on object '*' not found` — a soft failure that build- and
shape-level tests never caught.
Two complementary layers:
1. Author/compile-time guard (root cause): `ActionSchema` now requires
`body || target` when `type === 'script'` (a `superRefine`, mirroring the
existing "non-script types require `target`" rule). `os build` / `defineAction`
now reject the broken shape immediately, for every bundle. Verified against
the full monorepo build — every shipped bundle still compiles, so this only
rejects configurations that were already non-functional at runtime. Existing
spec fixtures that relied on the looser rule were updated.
2. Execution-path test (catch-net): examples/app-showcase/test/actions.test.ts
drives the real `actionBodyRunnerFactory` + QuickJS sandbox against the
shipped actions — asserting Mark Done produces a handler and writes
`{ done: true, progress: 100 }`. The prior coverage test only checked that
each ActionType *appeared* in the bundle, which is what let #2169 ship.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>1 parent 3d89caa commit 52dcd64
5 files changed
Lines changed: 188 additions & 19 deletions
File tree
- .changeset
- examples/app-showcase/test
- packages/spec/src
- ui
| 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 | + | |
| 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 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
728 | 728 | | |
729 | 729 | | |
730 | 730 | | |
| 731 | + | |
731 | 732 | | |
732 | 733 | | |
733 | 734 | | |
| |||
1062 | 1063 | | |
1063 | 1064 | | |
1064 | 1065 | | |
1065 | | - | |
| 1066 | + | |
1066 | 1067 | | |
1067 | 1068 | | |
1068 | 1069 | | |
| |||
1078 | 1079 | | |
1079 | 1080 | | |
1080 | 1081 | | |
1081 | | - | |
1082 | | - | |
| 1082 | + | |
| 1083 | + | |
1083 | 1084 | | |
1084 | 1085 | | |
1085 | 1086 | | |
| |||
1096 | 1097 | | |
1097 | 1098 | | |
1098 | 1099 | | |
1099 | | - | |
1100 | | - | |
| 1100 | + | |
| 1101 | + | |
1101 | 1102 | | |
1102 | 1103 | | |
1103 | 1104 | | |
| |||
1115 | 1116 | | |
1116 | 1117 | | |
1117 | 1118 | | |
1118 | | - | |
| 1119 | + | |
1119 | 1120 | | |
1120 | 1121 | | |
1121 | 1122 | | |
| |||
1130 | 1131 | | |
1131 | 1132 | | |
1132 | 1133 | | |
1133 | | - | |
1134 | | - | |
| 1134 | + | |
| 1135 | + | |
1135 | 1136 | | |
1136 | 1137 | | |
1137 | 1138 | | |
| |||
1149 | 1150 | | |
1150 | 1151 | | |
1151 | 1152 | | |
1152 | | - | |
| 1153 | + | |
1153 | 1154 | | |
1154 | 1155 | | |
1155 | 1156 | | |
1156 | | - | |
| 1157 | + | |
1157 | 1158 | | |
1158 | 1159 | | |
1159 | 1160 | | |
| |||
1170 | 1171 | | |
1171 | 1172 | | |
1172 | 1173 | | |
1173 | | - | |
| 1174 | + | |
1174 | 1175 | | |
1175 | 1176 | | |
1176 | 1177 | | |
| |||
1186 | 1187 | | |
1187 | 1188 | | |
1188 | 1189 | | |
1189 | | - | |
| 1190 | + | |
1190 | 1191 | | |
1191 | 1192 | | |
1192 | 1193 | | |
| |||
1198 | 1199 | | |
1199 | 1200 | | |
1200 | 1201 | | |
1201 | | - | |
| 1202 | + | |
1202 | 1203 | | |
1203 | 1204 | | |
1204 | 1205 | | |
| |||
0 commit comments