P5.8: add a macOS .app bundle smoke test to the corpus (closes the no-bundler-coverage gap)
The corpus had ZERO bundler coverage (the stream's named top risk). Add a `.build` `bundle` directive to the corpus runner: after a successful `aot` build it asserts each `expect` entry exists under the produced `.app` (repo-relative), then `rm -rf`s it. macOS-host only — the `.app` + codesign are Apple-specific, so the example is skipped on other hosts. `examples/1665-platform-macos-bundle-smoke.sx` sets `bundle_path`/`bundle_id` via a `#run` config; `default_pipeline` auto-bundles (build.sx imports the bundler, no explicit `on_build` needed). The directive asserts `Contents/MacOS`, `Contents/Info.plist`, `Contents/_CodeSignature`. Verified: passes on BOTH gates (the bundler runs on the legacy interp AND the VM), the `.app` is cleaned up, and a bad `expect` entry correctly fails (the check is not vacuous). Unit test + CLAUDE.md `.build`-directive docs updated. 706/0 both gates.
This commit is contained in:
@@ -484,6 +484,12 @@ The optional `<name>.build` JSON sidecar carries per-example directives
|
||||
in ir-only mode (its absence is a loud failure). This is how arch-pinned
|
||||
examples (e.g. x86_64 inline-asm) are tested on a non-matching dev host while
|
||||
still running end-to-end on a matching CI runner.
|
||||
- `"bundle": { "app": "<rel .app path>", "expect": ["Contents/MacOS", ...] }` —
|
||||
bundle smoke test (requires `"aot": true`). After the `sx build` (which runs the
|
||||
sx bundler via `default_pipeline`) the runner asserts each `expect` entry exists
|
||||
under `app` (repo-relative), then `rm -rf`s the `app`. **macOS-host ONLY** — on any
|
||||
other host the example is SKIPPED (the `.app` + `codesign` are Apple-specific).
|
||||
Example: `examples/1665-platform-macos-bundle-smoke.sx`.
|
||||
|
||||
### Snapshot integrity
|
||||
|
||||
|
||||
Reference in New Issue
Block a user