Evaluation

Battle tested: an independent compiler contract, not a self-authored happy path.

tscc is tested in layers because no single oracle is enough. Parser/unit tests isolate compiler internals; runtime differentials compare emitted behavior; project/module tests exercise graphs; and an independent compiler-agnostic regression suite arbitrates syntax against TypeScript itself.

Current hardening + compatibility baseline:

CP71-73 now cover deterministic mutation fuzzing, a generated 250-file project using incremental/source-map/declaration paths, ASan/UBSan lifetime/project workloads, RSS soaks and strict real-binary Valgrind integration. CP74-75 closed the JSX correctness defects exposed during that validation. These results are retained evidence for CP75, not a promise that future compiler changes inherit safety automatically. The refreshed external suite now adds a 33-area compatibility matrix, 12/12 multi-file/project gate and nine classified real-package probes.

618

independent TS→JS regression cases in the current checkpoint.

600 / 0 / 18

pass / current-scope fail / semantic-only skip.

6 gates

parser, runtime, project, TSX, CommonJS and independent regression layers.

Compiler-lifetime Checkpoint 5 is complete: sanitizer lifetime pressure, repeated project/module success/failure/recovery, settled native RSS evidence and independent Valgrind confirmation are all retained. The later preview candidate adds ASan/UBSan, 400 deterministic mutations, frozen positive/negative projects, reproducible archives and a 7/7 Node/JS++ runtime intersection.

Memory evidence has its own living record.

The Memory & resource safety page retains the completed lifetime baseline separately from syntax and semantic correctness. CP73 has now independently repeated and broadened the candidate-era leak check on the Linux validation host.

The independent regression suite

The suite is intentionally kept compiler-agnostic. Cases describe source, expected category, emitted constraints and/or runtime output. tsc --noCheck establishes syntax validity; full tsc distinguishes semantic-checker-only failures; Node validates executable output where appropriate.

Why the semantic-only skips matter

Those 24 cases are not swept under the rug. They explicitly mark programs whose syntax can be emitted but whose type correctness lies beyond the current checker slice. Supported semantic cases now cover bounded primitives, unions/narrowing, structural objects, callable/contextual expressions, index and call signatures, arrays, tuples and relative cross-module type propagation.

Compiler-preview candidate gate

TCP5 rebuilds from a committed archive, runs focused and independent gates under ASan/UBSan, executes 400 deterministic malformed mutations, checks representative projects and applies a loose startup guardrail. The frozen runtime-intersection source compiles with production tscc and returns the explicit expected value 42 under both Node and JS++.

No anti-agreement shortcut:

Node and JS++ are not allowed to validate one another merely by matching. The intersection carries explicit expected results, and JS++ remains test-only rather than a compiler dependency.

The checker gate

Focused checker, type-model and binder tests plus the independent corpus protect primitive declarations/expressions, lexical shadowing, assignment/mutability, catch/loop scopes and static import identity. Unsupported semantic families remain outside the claimed contract rather than being rejected by parser guesses.

Parser / AST smoke

Focused C++ tests exercise tokenization, program structure, erasure ranges and runtime transforms. These are fast and diagnostic: if a generic list or annotation boundary regresses, the failure is closer to the responsible parser code than an end-to-end CLI test would be.

Runtime differential

Representative TypeScript is compiled with tscc and tsc, then both JavaScript outputs run under Node. This layer has caught emitter bugs that a textual “contains no colon” assertion would miss—especially enums, parameter properties, generic calls and declaration transforms.

Project/module graph

Multi-file tests cover relative imports, .js → .ts resolution, cycles, unresolved-module diagnostics, --noResolve, output layout, tsconfig project mode and TSX .jsx → .tsx resolution.

CommonJS differential

The CommonJS gate compares observable Node behavior with tsc --module commonjs. It covers side-effect/default/named/namespace imports, aliases, re-exports, export *, default declarations, export =, cycles, mutation after import, live values through barrel re-exports and local shadowing.

Bugs it found

Live-import rewriting initially rewrote local loop bindings, confused argument lists with object shorthand, overlapped later import clauses that reused a name, produced overlapping template replacements, and consumed the next statement after a semicolonless import. Each case now has a permanent reproducer.

TSX preserve gate

TSX tests cover fragments, typed arrow components, nested ternaries, generic components, spread attributes, regexes with angle brackets and malformed nesting. The parser must distinguish TSX-safe generic arrows such as <T,> from JSX elements.

Ruthless negative testing

The suite has repeatedly found malformed constructs that tscc accepted: empty import-equals references, missing generic constraints, empty type-operator operands, malformed module aliases, unterminated ambient blocks and broken TSX structures. A negative case is retained only after TypeScript itself confirms it is invalid syntax.

No fake tsc bugs

Several “obviously wrong” constructs turned out to be accepted TypeScript. They are reclassified. A real tsc correctness bug would be a useful finding, but manufacturing one by confusing semantic checking, --noCheck behavior or surprising grammar would weaken the suite.

Performance is also gated

Correctness gates are paired with growing benchmark fixtures. The project has already reversed architectural choices that were correct but measurably hurt many-file latency. That keeps “fast” a continuously tested property rather than a launch-day anecdote.