16e49024da
* fix(examples): restore flexDirection column on basic-template A past restyle (#137) replaced the root Box's `flexDirection="column" :paddingX="1"` with `backgroundColor/borderStyle/width="20"` and dropped the column direction. With the Ink-aligned default (row) and a fixed `width="20"`, the six children pack into ~3-char columns and the title interleaves illegibly. Restore `flexDirection="column"` so the example renders as the intended bordered card. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * test(runtime-tests): PTY smoke suite guarding the examples launch+paint (#212) #212's `Calling \`require\` for "node:module"` crash came from the old @vue-tui/cli bundledDev step. The @vue-tui/vite plugin (#215) removed it, but nothing exercised the shipped examples end to end, so a future regression could break "the examples run" silently. Add a node-pty smoke suite that launches basic-template and basic-jsx through both the dev server (`vite`) and the production build (`node dist/main.js`) under a real TTY and waits for the frame to paint; coding-agent (needs an LLM key to run) gets a key-free build guard. A static `CJS_REQUIRE_SHIM` assertion on the built bundle locks the #212 invariant directly, and `[vue-tui] failed to launch` / process-exit signals fail a broken launch fast instead of burning the render timeout. Wired in as the `ci:test:examples` branch of the CI graph. Verified RED->GREEN: injecting a bare `require()` into an entry reproduces #212 exactly and the guard catches it (statically and at runtime); a non-module throw is caught via the dev launch-failure signal. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * refactor(runtime-tests): simplify the examples smoke harness Cleanup pass on the new #212 smoke suite (no behavior change): - use the `strip-ansi` package instead of a hand-rolled CSI regex (already a devDep here and used across the suite; strips OSC too, drops the eslint no-control-regex suppression); - drop the onExitWaiters wake-up set — the 100ms poll already observes the exit flag, so onExit only needs to record the code; - fold the three reject sites into one `fail()` helper; - give the #212 bundle-shim invariant a single home: move CJS_REQUIRE_SHIM next to the builder and factor `buildAndExpectNoCjsRequire`, shared by the runnable apps and the coding-agent build guard; - drop dead exports (repoRoot, CRASH_SIGNATURE). Re-verified RED->GREEN (bundled require still caught) and all 5 tests green. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * test(runtime-tests): serialize the examples suite files (match #222) Adversarial review flagged the examples config's parallel-safety comment as imprecise: PTY-process isolation does NOT isolate on-disk state. Each launched example writes its optimizeDeps cache (examples/<name>/node_modules/.vite) and bundle (examples/<name>/dist), so two test files launching the SAME example at once would race that shared dir — the exact #222 failure the sibling @vue-tui/vite suite just fixed with fileParallelism:false. It can't happen today (one serial file, per-example caches), but set fileParallelism:false to match #222 and keep it safe as the suite grows, and correct the comment to state the real guarantee. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>