* chore(core): upgrade scriptc to 0.0.33
- Pin scriptc 0.0.33 across Native packages and refresh compiler surface and calibration artifacts.
- Require Node 24 and route check/build tooling through scriptc's published compile-cache bootstrap.
- Enable and verify dev/release library profiles with synchronized docs, tests, and package mirrors.
* fix(ci): use Node 24 for TypeScript builds
* Carry the transpiler's TypeScript toolchain as exactly-pinned CLI dependencies
- @native-sdk/cli gains @typescript/typescript6 6.0.2 and @typescript/old npm:typescript@6.0.3 as regular dependencies, so npm installs the whole toolchain (the wrapper AND the real compiler it re-exports) in the same transaction as the CLI
- packages/core pins the same two exact versions as devDependencies (replacing the ^6.0.2 range) and its lockfile follows
- check-version-sync asserts both pins string-equal across the two manifests and shape-exact: X.Y.Z for the wrapper, npm:typescript@X.Y.Z for the alias
* Gate TS verbs and direct zig build on toolchain resolution, teach per layout
- transpilerResolves walks node's ancestor node_modules from packages/core and requires the wrapper's manifest + entrypoint AND the aliased real compiler resolving from the wrapper's own directory (nested, hoisted, and global layouts alike); partial extractions read as unresolved
- the gate runs before any zig spawn (check, dev --core, build-graph verbs) and never runs npm: checkouts (the packages/core/test signal) are taught the one npm ci --include=dev against a resolved absolute path, npm layouts are taught the reinstall (BrokenToolchainInstall)
- build/app.zig carries the twin predicate for direct zig build and fails configure with a clean teaching instead of a panic; test-ts-toolchain-twins pins the twins' alias probes and teachings in lockstep
* Add the toolchain-as-dependency changelog fragment
- first TS-verb use needs no network, no install step, and never runs npm
- repo checkouts are taught the one npm ci command; direct zig build teaches instead of panicking
* Exit quietly on the broken-install teaching
- BrokenToolchainInstall already prints its reinstall guidance; list it in failVerb's expected-error switch so the CLI exits without a Zig error-return trace.
* Scope the pre-spawn TS toolchain gate to CLI-generated graphs
- Ejected apps pin their own SDK in build.zig.zon, so gating the CLI's
resolved SDK false-failed healthy apps whose direct zig build works;
they now flow to the spawn, where build/app.zig's tsCoreStage teaching
names the app's actual dependency SDK.
- Name the one generated-vs-ejected decision (isEjectedAt) so the
preflight and the argv assembly share a single predicate, and keep
check/dev --core gated: they always transpile against the CLI's SDK.
- Cover both paths in a verbs test: an ejected-shaped TS layout skips
the gate against a toolchain-less SDK; the generated layout still
teaches, and passes once the toolchain resolves.
* Raise the TypeScript-tier node floor to 22.15 with a fail-fast teaching
- ts_run.mjs now teaches "upgrade to Node.js 22.15+" and exits before importing a node_modules-resident target when module.registerHooks is missing, instead of dying inside node with the raw ERR_UNSUPPORTED_NODE_MODULES_TYPE_STRIPPING; repo-checkout targets keep running natively on any Node 22.
- Every "Node.js 22+" surface (nodeMissing teaching, build/app.zig panic, scaffold README, quick-start docs, changelog fragment) now names 22.15.
- packages/core/test/ts_run.test.ts pins both tiers by spawning the runner with a --import preload that deletes module.registerHooks, plus the real hook-stripping path against the package's own toolchain install.
* Strip every .ts through the runner hook and pin-check the resolved compiler
- build/ts_run.mjs now strips ALL .ts modules (node's default stripping is 22.18+, so the 22.15-22.17 checkout fall-through died raw); hooks-absent teaches for any .ts target, and the hook requires @typescript/old directly with a sane direct-run teaching when the dev install is missing
- typed_ast.ts imports @typescript/old instead of the wrapper, so a consumer tree's conflicting hoisted copy can never shadow the SDK's exact pin (the wrapper stays the declared dependency)
- both resolution twins (ts_core.zig transpilerResolution, build/app.zig tsToolchainResolution) read the resolved @typescript/old version and hold it against the npm:typescript@X.Y.Z pin parsed from packages/core/package.json, teaching resolved-vs-pinned on mismatch; fixtures gain version/pin manifests and mismatch tests cover both layouts
* Validate the compiler from the packages/core origin runtime resolves from
- Both resolution twins now walk @typescript/old from packages/core — the origin typed_ast.ts and ts_run.mjs actually load from — instead of holding the wrapper's origin against the pin, which false-rejected npm's own conflict shape (consumer's hoisted compiler + our exact pin nested under the CLI); the unused @typescript/typescript6 wrapper is no longer probed at all, though it stays a declared dependency.
- Make the node requirement branch-aware everywhere it is taught (22.15+ admits 23.0-23.4 numerically, but registerHooks only landed in 22.15 and 23.5): one phrasing across ts_run.mjs, both gate teachings, the templates README, the quick-start docs, and the changelog fragment.
- Correct the changelog fragment's claim that repo checkouts run on any Node 22: every .ts module rides the same registerHooks stripping, so the floor is uniform across layouts.