zernie
1df264ce6b
feat(cli)!: load specs in a vigiles-owned spec host, not a two-loader guess ( #178 )
...
Replaces the native-import/npx-tsx pair with ONE loader: a child process that
registers vigiles' own module hooks and streams results as NDJSON.
The measured bug: a consuming repo without tsx installed, where `npx tsx` went
to the registry — >60s against a 15s budget, so all 50 specs failed at once with
advice to run `npm run build`, a step that does not exist in a consumer install.
Why a redesign and not more guards: the seam between two loaders cannot be made
correct. The fallthrough guard had to answer "did the module body already run?"
and Node does not expose that bit — ERR_MODULE_NOT_FOUND and SyntaxError each
occur both before and during evaluation. The native path also had no time bound,
and an in-flight evaluation cannot be cancelled.
Three facts made it cheap: typescript is already a runtime dependency and
already used at runtime; specs already round-trip through JSON (the old tsx path
did exactly that); and the .js -> .ts rewrite is a rule to define, not inherit.
Fixes at once: no npx and no network; a stalled spec is killed and NAMED; double
evaluation is impossible by construction; resolution no longer varies by Node
version or by which loader won; the Windows quoting bug dies with `npx -e`.
Nine review findings closed — six by fixes, three by removing the seam.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_014LVXMw2PJtPPtV8BoTANAd
2026-08-31 13:52:56 +05:00
..
2026-08-23 18:08:17 +05:00
2026-08-31 04:10:05 +05:00
2026-07-15 05:38:20 +05:00
2026-06-11 22:50:45 +05:00
2026-06-24 19:47:06 +07:00
2026-06-15 03:30:43 +05:00
2026-08-21 07:54:51 +05:00
2026-07-01 01:55:49 +05:00
2026-07-21 07:05:41 +05:00
2026-07-21 07:05:41 +05:00
2026-06-14 18:14:44 +05:00
2026-06-28 02:34:50 +05:00
2026-06-28 02:34:50 +05:00
2026-08-07 10:31:06 +05:00
2026-06-18 12:17:34 +07:00
2026-08-08 14:30:39 +05:00
2026-06-29 14:48:10 +05:00
2026-06-28 02:34:50 +05:00
2026-06-28 02:34:50 +05:00
2026-08-08 14:30:39 +05:00
2026-08-08 14:30:39 +05:00
2026-08-31 04:10:05 +05:00
2026-08-31 04:10:05 +05:00
2026-06-29 14:48:10 +05:00
2026-06-29 14:48:10 +05:00
2026-08-31 04:10:05 +05:00
2026-07-22 18:25:57 +05:00
2026-08-21 07:54:51 +05:00
2026-08-16 22:46:26 +05:00
2026-06-21 03:09:32 +07:00
2026-08-13 00:19:30 +05:00
2026-08-21 00:25:43 +05:00
2026-08-21 07:54:51 +05:00
2026-07-23 07:43:31 +05:00
2026-08-21 07:54:51 +05:00
2026-07-02 23:18:27 +05:00
2026-08-21 07:54:51 +05:00
2026-08-08 14:30:39 +05:00
2026-08-08 14:30:39 +05:00
2026-06-15 09:13:07 +05:00
2026-06-15 03:30:43 +05:00
2026-08-13 00:19:30 +05:00
2026-08-19 14:02:16 +05:00
2026-08-16 22:46:26 +05:00
2026-08-13 00:19:30 +05:00
2026-08-13 00:19:30 +05:00
2026-08-23 18:08:17 +05:00
2026-08-31 13:52:56 +05:00
2026-08-16 22:46:26 +05:00
2026-08-18 20:10:09 +05:00
2026-06-14 18:14:44 +05:00
2026-06-14 18:14:44 +05:00
2026-08-13 00:19:30 +05:00
2026-08-18 20:10:09 +05:00
2026-08-18 20:13:34 +05:00
2026-08-13 00:19:30 +05:00
2026-08-18 20:10:09 +05:00
2026-08-18 20:21:51 +05:00
2026-07-20 21:43:05 +05:00
2026-07-01 15:49:43 +05:00
2026-07-01 15:49:43 +05:00
2026-08-13 00:19:30 +05:00
2026-08-13 00:19:30 +05:00
2026-08-21 00:25:43 +05:00
2026-06-15 19:34:08 +05:00
2026-06-15 19:34:08 +05:00
2026-06-15 19:34:08 +05:00
2026-07-21 04:33:23 +00:00
2026-06-18 12:17:34 +07:00
2026-06-15 19:34:08 +05:00
2026-06-18 12:17:34 +07:00
2026-07-01 01:55:49 +05:00
2026-07-01 15:49:43 +05:00
2026-07-09 02:31:19 +05:00
2026-08-18 20:34:40 +05:00
2026-08-18 20:34:40 +05:00
2026-08-18 20:34:40 +05:00
2026-08-18 20:34:40 +05:00
2026-08-18 20:34:40 +05:00
2026-08-13 00:19:30 +05:00
2026-07-01 01:55:49 +05:00
2026-07-01 01:55:49 +05:00
2026-08-13 00:19:30 +05:00
2026-08-13 00:19:30 +05:00
2026-08-21 07:54:51 +05:00
2026-08-14 15:37:54 +05:00
2026-08-18 20:34:40 +05:00
2026-08-21 07:54:51 +05:00
2026-07-08 05:03:57 +05:00
2026-08-23 18:08:17 +05:00
2026-08-19 15:44:40 +05:00
2026-08-13 00:19:30 +05:00
2026-08-13 00:19:30 +05:00
2026-06-23 05:43:10 +07:00
2026-08-25 03:36:12 +05:00
2026-08-23 18:08:17 +05:00
2026-08-21 07:54:51 +05:00
2026-08-13 09:06:18 +05:00
2026-08-13 09:06:18 +05:00
2026-06-24 19:47:06 +07:00
2026-08-21 03:41:46 +05:00
2026-08-21 03:41:46 +05:00
2026-08-21 07:54:51 +05:00
2026-06-24 19:47:06 +07:00
2026-08-21 07:54:51 +05:00
2026-08-21 07:54:51 +05:00
2026-08-25 03:36:12 +05:00
2026-07-16 01:57:55 +05:00
2026-07-16 01:57:55 +05:00
2026-06-16 21:29:30 +07:00
2026-06-15 19:34:08 +05:00
2026-08-18 20:34:40 +05:00
2026-08-13 00:19:30 +05:00
2026-08-13 00:19:30 +05:00
2026-08-23 18:08:17 +05:00
2026-08-21 07:54:51 +05:00
2026-08-21 07:54:51 +05:00
2026-08-21 07:54:51 +05:00
2026-06-15 19:34:08 +05:00
2026-08-13 09:06:18 +05:00
2026-08-13 09:06:18 +05:00
2026-08-13 00:19:30 +05:00
2026-08-13 00:19:30 +05:00
2026-08-13 00:19:30 +05:00
2026-08-18 20:21:51 +05:00
2026-07-22 04:07:14 +05:00
2026-08-08 14:30:39 +05:00
2026-08-08 14:30:39 +05:00
2026-08-19 22:48:28 +05:00
2026-07-22 04:07:14 +05:00
2026-07-01 15:49:43 +05:00
2026-07-15 18:24:30 +05:00
2026-07-14 05:10:06 +05:00
2026-07-16 01:57:55 +05:00
2026-07-16 01:57:55 +05:00
2026-07-16 01:57:55 +05:00
2026-07-15 18:24:30 +05:00
2026-07-16 01:57:55 +05:00
2026-07-16 01:57:55 +05:00
2026-08-16 22:46:26 +05:00
2026-08-13 09:06:18 +05:00
2026-08-16 22:46:26 +05:00
2026-08-08 14:30:39 +05:00
2026-08-13 00:19:30 +05:00
2026-08-13 09:06:18 +05:00
2026-07-21 04:33:23 +00:00
2026-08-23 18:08:17 +05:00
2026-08-23 18:08:17 +05:00
2026-07-20 23:20:24 +05:00
2026-08-18 20:34:40 +05:00
2026-08-23 18:08:17 +05:00
2026-08-19 22:48:28 +05:00
2026-08-19 22:48:28 +05:00
2026-08-19 22:48:28 +05:00
2026-08-16 22:46:26 +05:00
2026-08-16 22:46:26 +05:00
2026-08-19 22:48:28 +05:00
2026-08-19 22:48:28 +05:00
2026-08-19 22:48:28 +05:00
2026-08-31 04:10:05 +05:00
2026-08-18 20:21:51 +05:00
2026-08-19 22:48:28 +05:00
2026-07-16 01:57:55 +05:00
2026-07-23 07:43:31 +05:00
2026-06-26 05:58:23 +07:00
2026-06-24 19:47:06 +07:00
2026-08-21 07:54:51 +05:00
2026-07-08 05:03:57 +05:00
2026-08-16 22:36:58 +05:00
2026-08-21 07:54:51 +05:00
2026-06-25 14:27:10 +07:00
2026-06-21 03:09:32 +07:00
2026-07-23 07:43:31 +05:00
2026-08-21 00:25:43 +05:00
2026-07-23 07:43:31 +05:00
2026-07-23 07:43:31 +05:00
2026-08-13 00:19:30 +05:00
2026-08-13 00:19:30 +05:00
2026-08-21 07:54:51 +05:00
2026-06-17 02:03:39 +07:00
2026-08-08 14:30:39 +05:00
2026-08-08 14:30:39 +05:00
2026-08-13 00:19:30 +05:00
2026-08-13 00:19:30 +05:00
2026-06-14 18:14:44 +05:00
2026-08-16 22:36:58 +05:00
2026-08-31 13:52:56 +05:00
2026-08-31 13:52:56 +05:00
2026-08-31 13:52:56 +05:00
2026-06-18 12:17:34 +07:00
2026-06-15 19:34:08 +05:00
2026-08-25 03:36:12 +05:00
2026-08-18 22:22:05 +05:00
2026-08-18 20:34:40 +05:00
2026-08-18 22:22:05 +05:00
2026-08-21 07:54:51 +05:00
2026-08-13 00:19:30 +05:00
2026-06-24 19:47:06 +07:00
2026-06-24 19:47:06 +07:00
2026-06-18 12:17:34 +07:00
2026-06-18 12:17:34 +07:00
2026-08-13 00:19:30 +05:00
2026-08-13 00:19:30 +05:00
2026-08-13 00:19:30 +05:00
2026-06-16 21:29:30 +07:00