ReviewOS

home-lang/home

TypeScript checker parity: eliminate the remaining 30 failures

#69
Closed chris opened this 14 days ago · 717 comments
14 days ago

Parent: #67

Scope

Make ts_checker fully green by porting the remaining TypeScript semantics and exact diagnostic behavior. Do not weaken assertions or encode fixture-specific outcomes.

Current verified state

After fixing distributive-conditional union member ownership:

  • 2,976 / 3,006 pass
  • 30 fail
  • 0 crash (down from 2 crashes)

The crash fix copies union member IDs before recursive conditional evaluation so interner reallocations cannot invalidate a borrowed slice.

Remaining failure clusters

  • Enum/member literal assignment compatibility.
  • Global-script this indexed access diagnostics.
  • Generic defaults, conditional distribution, NonNullable, mapped and template types.
  • Variadic tuple inference and callback arity.
  • Overload diagnostic anchoring and CheckJS/JSDoc arity.
  • Accessor read/write and spread typing.
  • Alias/generic-instance diagnostic rendering.
  • Recursive type depth/circular mapped diagnostics.

Completion gate

  • ./pantry/.bin/zig build test -Dfilter=ts_checker --summary failures reports 3,006 / 3,006.
  • No crash, timeout, or skipped parity assertion replaces a failure.
  • Each semantic cluster lands in a focused conventional commit with regression coverage.
14 days ago

Parity batch update against canonical tsgo main:

  • 579080373 fix(ts-checker): cover legacy Object class modules flipped 3 fixtures: exportClassNameWithObjectAMD, exportClassNameWithObjectSystem, and exportClassNameWithObjectUMD.
  • e935bd7db fix(ts-options): restore verbatim legacy-module error flipped verbatimModuleSyntaxCompat.
  • 82c3e96c7 fix(ts-checker): retain globalThis intersection errors flipped globalThisUnknown.
  • 8a232e876 fix(ts-checker): honor propertyless JSDoc constructors flipped callOfPropertylessConstructorFunction.
  • a7495cb91 fix(ts-checker): recover 2 exact parity regressions restored constructorFunctions and parserTernaryAndCommaOperators1 after the full-set delta exposed them.

Measured full exact run: 5637/5907 (95.43%), 270 failures, 0 skipped, from /tmp/home-ts-exact-full-batch-20260820.log. All six intended batch fixtures passed. The run also exposed two regressions hidden by the net count; both are now fixed and focused exact verification confirms the repaired fixtures pass. Current inferred dashboard: 5639/5907 (95.46%), 268 failures, a net +15 exact fixtures from the previous measured 5624/5907 baseline.

Verification completed:

  • full ts_driver suite: pass
  • full tsconfig suite: pass
  • full ts_checker suite before the final narrow recovery: pass
  • focused comma and JSDoc-class checker regressions: pass
  • focused exact selection: both repaired fixtures pass; 4/5 overall because substring filtering also selected the pre-existing constructorFunctionsStrict mismatch

The canonical tsgo submodule remains clean on main, with .gitmodules pointing at https://github.com/microsoft/typescript-go.git and branch = main.

14 days ago

Pushed ca7db848b fix(ts-parity): flip 3 strict and iterator fixtures directly to main as Chris (no coauthor trailers).

Exact flips:

  • constructorFunctionsStrict: strict checked-JS untagged functions now report TS7009 on new and produce any, matching current tsgo.
  • noAssertForUnparseableTypedefs: malformed @typedef {module:locale} now includes the tsgo TS1003 recovery diagnostic.
  • ES5For-ofTypeCheck7: iterable unions are classified member-by-member before string-like aggregate flags, restoring TS2488 for string | number under ES2015.

Verification: parser suite 859/859 passed, full checker suite passed, focused exact conformance 3/3 passed. Change size: 93 insertions, 4 deletions across checker and parser. Inferred dashboard: 5642/5907 (95.52%), 265 remaining.

14 days ago

Pushed ff740c569 fix(ts-checker): flip 4 object and iterator fixtures directly to main as Chris, with no coauthor trailers.

Exact flips:

  • objectTypeHidingMembersOfObjectAssignmentCompat
  • objectTypeHidingMembersOfObjectAssignmentCompat2
  • unknownType1
  • ES5For-ofTypeCheck12

The checker now relates inherited Object members structurally, preserves literal iterator diagnostic types, and distinguishes open string indexes of any from unknown so numeric-only indexed sources such as arrays are rejected correctly.

Verification: focused relation tests passed, focused exact conformance 4/4 passed, and the final full checker suite passed. Change size: 95 insertions, 12 deletions. Inferred dashboard: 5646/5907 (95.58%), 261 remaining.

14 days ago

Pushed e23439479 fix(ts-checker): flip 2 module graph fixtures directly to main as Chris, with no coauthor trailers.

Exact flips:

  • importElisionConstEnumMerge1: import-local conflict tracking is now keyed by (name, virtual file section), so a later same-name import in another file cannot hide the merge conflict.
  • exportAssignmentConstrainedGenericType: import-equals constructor aliases resolve back through export = when validating inferred generic constraints.

Verification: focused checker regressions passed, focused exact conformance 2/2 passed, and the final full checker suite passed. Change size: 62 insertions, 8 deletions. Inferred dashboard: 5648/5907 (95.61%), 259 remaining.

14 days ago

Pushed 8fcb74e80 (fix(ts-checker): flip mixed keyof write fixture).

  • Moved generic indexed-write checking ahead of union indexed-access resolution.
  • Preserved symbolic writes tied to keyof T, while reporting TS2862 for string-capable mixed keys such as keyof Record<string, number>.
  • Added a focused mixed string/number generic-write regression.
  • Exact fixture flipped: keyofAndIndexedAccess2 (1/1 passing).
  • Full ts_checker suite passes.

Inferred exact parity: 5,649/5,907 (95.63%), with 258 remaining.

14 days ago

Pushed c888c7631 (fix(ts-checker): flip index signature inference fixture).

  • Made the existing number-only-source versus open-string-index relation authoritative at call sites.
  • Prevented the raw relation engine from reaccepting NumberMap<Function> as StringMap<unknown>.
  • Strengthened the focused inference regression to require both TS2403 and TS2345.
  • Exact fixture flipped: indexSignatureTypeInference (1/1 passing).
  • Full ts_checker suite passes.

Inferred exact parity: 5,650/5,907 (95.65%), with 257 remaining.

14 days ago

Pushed b1bc42d1e (fix(ts-checker): flip 2 generic callback fixtures).

  • Preserved declared generic function-expression signatures during inferred generic calls.
  • Compared context-sensitive non-generic arrow parameters directly against generic callback parameters after return validation.
  • Added 2 focused regressions.
  • Exact fixtures flipped: genericFunctionParameters, functionConstraintSatisfaction.
  • Broader exact filter: 4/4 passing, including 2 already-green sibling fixtures.
  • Full ts_checker suite passes.

Inferred exact parity: 5,652/5,907 (95.68%), with 255 remaining.

14 days ago

Pushed a5191b4a2 (fix(ts-checker): flip tuple rest inference fixture).

  • Generalized covariant primitive inference merging from callback returns to trailing tuple-rest elements.
  • f([1, "hello", true]) against [T, ...U[]] now infers U = string | boolean instead of retaining string.
  • Added 1 focused regression.
  • Exact fixture flipped: restTupleElements1.
  • Probed variadicTuples2; it remains isolated to middle-rest/trailing-fixed positional handling.
  • Full ts_checker suite passes.

Inferred exact parity: 5,653/5,907 (95.70%), with 254 remaining.

14 days ago

Pushed 5155533ff (fix(ts-checker): flip variadic tuple fixture).

  • Routed array-literal tuple inference through the retained symbolic tuple layout.
  • Fixed suffix candidates now bind from the end around a middle rest segment, so [T, ...unknown[], U] infers T from the front and U from the back.
  • Added 1 focused positional inference regression.
  • Exact fixture flipped: variadicTuples2.
  • Full ts_checker suite passes.

Inferred exact parity: 5,654/5,907 (95.72%), with 253 remaining.

14 days ago

Pushed 2e431017f (fix(ts-checker): flip contextual rest tuple fixture).

  • Expanded tuple-backed rest signatures across contextual callback parameters.
  • Preserved fixed tuple slices for source rest captures and modeled remaining open-tail captures.
  • Accepted fully unannotated callbacks against concrete open rest targets after arity and return validation, while excluding free generic tails.
  • Added 1 focused regression covering 8 callback shapes.
  • Removed 9 false-positive TS2345 diagnostics and retained the fixture's intentional generic-tail error.
  • Exact fixture flipped: restTuplesFromContextualTypes.
  • Full ts_checker suite passes.

Inferred exact parity: 5,655/5,907 (95.73%), with 252 remaining.

14 days ago

Pushed c124e4e91 (fix(ts-checker): flip String implementation fixture) directly to main as Chris Breuer.

Parity impact:

  • Flipped stringLiteralTypeIsSubtypeOfString exact: 1/1.
  • Replaced 2 false TS2416 member diagnostics with tsgo's aggregate TS2420.
  • Restored required arity for embedded (value: any) / (value: unknown) signatures, including 2 zero-argument String.match / String.split checks.
  • Inferred exact total: 5656/5907 (95.75%), 251 remaining.

Validation:

  • Focused checker regressions: pass.
  • Canonical exact fixture: pass.
  • Full ts_checker suite: pass.

The change ports tsgo's distinction between a parameter type admitting undefined and the parameter declaration itself being optional; any and unknown no longer erase required arity when declaration metadata is unavailable.

14 days ago

Pushed eba509b8c (fix(ts-checker): flip tuple width fixture) directly to main as Chris Breuer.

Parity impact:

  • Flipped genericCallWithTupleType exact: 1/1.
  • Replaced 2 false element-level TS2322 diagnostics with tsgo's single tuple-level TS2322.
  • Inferred exact total: 5657/5907 (95.77%), 250 remaining.

Validation:

  • Focused checker regression: pass.
  • Canonical exact fixture: pass with all surrounding TS2454/TS2493 diagnostics retained.
  • Full ts_checker suite: pass.

The port now checks fixed tuple min/max arity before contextual element elaboration. Valid-width literals still receive precise element diagnostics; invalid-width literals preserve the aggregate tuple assignment relation and width elaboration.

14 days ago

Pushed 1dd8168a3 (fix(ts-checker): flip binding initializer fixture) directly to main as Chris Breuer.

Parity impact:

  • Flipped contextuallyTypedBindingInitializerNegative exact: 1/1.
  • Corrected 1 off-by-one TS2322 source location while retaining all 7 fixture diagnostics and related return-type information.
  • Inferred exact total: 5658/5907 (95.78%), 249 remaining.

Validation:

  • Parenthesized and unparenthesized object-arrow anchor regressions: pass.
  • Canonical exact fixture: pass.
  • Full ts_checker suite: pass.

The source-sensitive rule now anchors an unparenthesized arrow at its returned expression and only backs up to ( when the expression body is immediately parenthesized, matching tsgo in both forms.

14 days ago

Pushed d8986ffc0 (fix(ts-checker): flip 3 syntax and mapped fixtures).

This ports three current-tsgo diagnostic deltas:

  • invalid static/export object-literal modifiers now retain TS1042 without redundant TS8009
  • empty Closure-style JSDoc type arguments recover as any without legacy TS1099
  • optional mapped-property write errors render the declared value type instead of the read-side | undefined type

Validation: the grouped exact filter passed 7/7 matched fixtures, flipping plainJSGrammarErrors, syntaxErrors, and mappedTypeErrors. Exact parity is now 5662/5907 (95.85%), with 245 failures remaining.

14 days ago

Pushed d8ac55a7b (fix(ts-checker): flip 2 unary and identity fixtures).

This ports two shared tsgo semantics:

  • unary ! no longer emits TS2872 for numeric literals
  • repeated var declarations accept inferred and annotated array types once their semantic diagnostic forms are identical, after private-origin and annotation-shape guards

Validation: exact logicalNotOperatorWithNumberType and typeArgumentInferenceTransitiveConstraints passed 2/2. Exact parity is now 5664/5907 (95.89%), with 243 failures remaining.

14 days ago

Pushed a1782aaa9 (fix(ts-checker): flip 5 JS constructor type fixtures).

Inferred JavaScript constructor instances now remain available for value-space new/prototype and dedicated heritage checking without being synthesized into the general JSDoc type namespace. This matches tsgo value/type-space separation for function declarations and function-valued variables.

Flipped exact fixtures:

  • typeFromPropertyAssignment2
  • typeFromPropertyAssignment3
  • typeFromParamTagForFunction
  • jsdocConstructorFunctionTypeReference
  • jsdocFunctionType

Validation: the broad grouped filter passed 24/25 matches; only the pre-existing typeFromPropertyAssignment22 mismatch remains. Exact parity is now 5669/5907 (95.97%), with 238 failures remaining.

14 days ago

Pushed b77f2c79b (fix(ts-checker): flip tagged JS constructor fixture).

Strict checked-JavaScript new expressions now report TS7009 for function targets regardless of @class/@constructor tags, while retaining instance-shape inference for downstream checks.

Validation: thisPropertyAssignment fully flipped. A 10-fixture constructor probe passed 5/10 and confirmed improved TS7009 parity in the remaining prototype-assignment cases; generic tagged functions still require a separate non-strict constructability/type-space layer. Exact parity is now 5670/5907 (95.99%), with 237 failures remaining.

14 days ago

Pushed 337cab1f2 (fix(ts-checker): flip 8 JS constructor fixtures) directly to main as Chris with no coauthor trailers.

This ports the current tsgo checked-JS constructor layer:

  • function values stay separate from JSDoc type names
  • generic checked-JS new expressions report TS7009
  • replacement prototypes diagnose this against their explicit structural shape
  • constructor @template parameters do not leak into separately declared prototype methods
  • prototype diagnostics preserve tsgo's computed-target and indexed-access cascade behavior

Exact fixtures flipped:

  • thisTypeOfConstructorFunctions
  • typeFromPrototypeAssignment
  • typeFromPrototypeAssignment2
  • typeFromPrototypeAssignment3
  • propertiesOfGenericConstructorFunctions
  • constructorFunctionMethodTypeParameters
  • jsdocTemplateConstructorFunction
  • jsdocTemplateConstructorFunction2

Validation:

  • full ts_checker: 3850/3850 passed
  • final selected constructor state: 9/11 exact
  • jsdocTemplateTag4 and jsdocTemplateTag5 remain for the next receiver/display-shape chunk

Parity advances 5670/5907 -> 5678/5907 (96.12%), leaving 229 exact fixtures.

14 days ago

Pushed dbf6bd00f (fix(ts-checker): flip 2 JSDoc template tag fixtures) directly to main as Chris with no coauthor trailers.

This completes the tagged generic JavaScript constructor slice:

  • variable-initialized tagged constructors now keep tsgo's TS2683 receiver diagnostic
  • qualified namespace constructor expressions diagnose this against the final namespace callable/prototype shape
  • explicit prototype TS2339 displays preserve unresolved JSDoc names such as K and V
  • ordinary constructor prototypes retain nominal displays such as Color

Exact fixtures flipped:

  • jsdocTemplateTag4
  • jsdocTemplateTag5

Validation:

  • selected exact: 2/2 passed
  • full ts_checker: 3850/3850 passed

Parity advances 5678/5907 -> 5680/5907 (96.16%), leaving 227 exact fixtures.

14 days ago

Pushed 2485ab832 (fix(ts-checker): flip 6 parity edge fixtures) directly to main as Chris Breuer.

This batch flips 6 exact tsgo fixtures:

  • callWithMissingVoidUndefinedUnknownAnyInJs
  • checkJsdocSatisfiesTag4
  • checkJsdocSatisfiesTag12
  • deleteOperatorWithAnyOtherType
  • enumTagUseBeforeDefCrash
  • objectLiteralErrors

Logical changes preserve authoritative required-argument counts through checked-JS generic substitution, emit TS2741 at @satisfies, keep JSDoc @enum bindings value-only, contextually check inferred object-literal getters against paired setters, and treat strict delete undefined as TS1102. jsDeclarationsEnumTag also gained its 4 expected TS2749 diagnostics and is now blocked only by one extra TS1005 parser recovery diagnostic.

Validation:

  • focused checker parity group: pass
  • exact intended fixtures: 6/6 pass
  • full checker suite: 3855/3855 pass
  • .gitmodules and canonical tsgo submodule: clean

Exact parity: 5686/5907 (96.26%), up from 5680/5907; 221 remain.

14 days ago

Pushed a46066cbf (fix(ts-checker): flip 4 module and JSDoc fixtures) directly to main as Chris Breuer.

Exact flips:

  • callbackTagNestedParameter
  • duplicateExportAssignments
  • exportSpecifiers
  • jsDeclarationsEnumTag

This ports dotted callback-parameter object construction, virtual external-module namespace isolation, contextual-keyword type export disambiguation (including declaration-mode resolver metadata), and Closure function(...) support inside JSDoc @enum.

Validation:

  • focused follow-up checker group: pass
  • exact target fixtures: 4/4 pass (exportSpecifiers_js also remains exact)
  • full checker suite: 3860/3860 pass

Exact parity: 5690/5907 (96.33%), up from 5686/5907; 217 remain.

14 days ago

Pushed 9cacfdf24 (fix(ts-parity): flip 8 exact fixtures) directly to main as Chris Breuer, with no coauthor trailer.

This batch ports 288 insertions / 41 deletions across four parity files and flips these 8 targeted tsgo fixtures exactly:

  • jsdocAugmentsMissingType
  • circular1
  • generatorTypeCheck46
  • emitClassDeclarationWithExtensionInES6
  • generatorYieldContextualType
  • dependentDestructuredVariablesFromNestedPatterns
  • controlFlowComputedPropertyNames
  • es2022LocalesObjectArgument

Implemented behavior:

  • report every circular named type-only alias once while deduplicating multiple resolution paths;
  • preserve tuple origin through homomorphic mapped-type evaluation and substitution;
  • use generator metadata for delegated yield values and match contextual generator return unions;
  • accept never in generator protocol slots and method-override bivariance with additional required parameters;
  • retain stable computed-property narrows on reads while restoring declared property types for writes;
  • model the optional Intl.Segmenter constructor/options signatures;
  • recover missing @augments / @extends JSDoc types and preserve tsgo TS8023-before-TS1003 ordering in both conformance paths;
  • align four stale conformance expectations with the current tsgo-main corpus.

Validation:

  • targeted exact fixtures: 8/8
  • controlFlowElementAccess* preservation replay: 4/4
  • ts_checker: 3867/3867
  • ts_parser: 861/861
  • ts_conformance: 1398/1398
  • baseline-aware conformance subset: 586/586
  • ts_driver: pass
14 days ago

Pushed e0ba3a776 (fix(ts-checker): flip 5 generator fixtures) to main as Chris Breuer.

This batch ports generator return contextual typing, iterator next ownership, and implicit-any yield diagnostics from current tsgo semantics. It changes one checker file by +179/-4 and adds 4 focused tests (inferred checker total: 3,871).

Exact fixtures flipped (5/5):

  • generatorAssignability
  • generatorReturnContextualType
  • generatorImplicitAny
  • generatorReturnTypeInferenceNonStrict
  • generatorExplicitReturnType

Validation:

  • targeted exact tsgo baseline partitions: 5/5 passed
  • final generatorReturnContextualType scope-aware replay: 1/1 passed
  • full ts_checker suite: passed
  • git diff --check: passed

The implementation preserves direct contextual object literals while widening unannotated local object values, uses generator metadata for TS2763-TS2766 iterator sent-type ownership, and separates strict per-yield TS7057 from non-strict owner-level TS7055/TS7025.

14 days ago

Pushed d52f0c46a (fix(ts-checker): flip 3 dynamic import fixtures) to main as Chris Breuer.

This checker-only batch changes +59/-1 and adds 1 focused regression test. It preserves fresh string literals in conditional TS7036 sources, keeps tsgo literal-first ordering against broad boolean, and renders callable specifiers as () => string without changing direct-literal widening.

Exact fixtures flipped (3/3):

  • importCallExpression5ES2020
  • importCallExpression6ES2020
  • importCallExpressionSpecifierNotStringTypeError

Validation:

  • targeted exact tsgo baseline replay: 3/3 passed
  • dynamic-import checker group: passed
  • full ts_checker suite: 3,872/3,872 passed
  • git diff --check: passed

The grammar-ownership and ES5 Promise dynamic-import fixtures remain separate for the next logical batch.

14 days ago

Pushed aec38c5c6 (fix(ts-checker): flip dynamic import grammar fixture) to main as Chris Breuer.

This checker-only batch changes +53/-5, adds 1 focused test, and strengthens 1 existing assertion. It matches tsgo diagnostic ownership by suppressing TS7036 after a spread-specifier TS1325, retaining TS2559 for invalid non-object ImportCallOptions alongside TS1324, and preserving unresolved bare-module TS2307.

Exact fixture flipped (1/1):

  • importCallExpressionGrammarError

Validation:

  • targeted exact tsgo baseline replay: 1/1 passed
  • complete dynamic-import checker group: passed
  • full ts_checker suite: 3,873/3,873 passed
  • git diff --check: passed

The ES5 Promise/async dynamic-import fixture remains isolated as the next ownership task.

14 days ago

Pushed dcae6964f (fix(ts-checker): flip ES5 dynamic import fixture) to main as Chris Breuer.

This checker-only batch changes +36/-6, adds 1 focused test, and strengthens 1 structural Promise test. It models Promise rejection callbacks as (reason: any) => any, preserves contextual typing for async rejection callbacks, emits missing Promise TS2468 as a true global diagnostic, and assigns TS2705 to contextual call-argument callbacks without disturbing for await iterator diagnostics.

Exact fixture flipped (1/1):

  • importCallExpressionNoModuleKindSpecified

Validation:

  • targeted exact tsgo baseline replay: 1/1 passed
  • complete dynamic-import checker group: passed
  • focused for await ES5 ownership regression: passed
  • full ts_checker suite: 3,874/3,874 passed
  • git diff --check: passed

Together with d52f0c46a and aec38c5c6, all 5/5 fixtures from the dynamic-import candidate replay now pass exact baselines.

14 days ago

Parity update: pushed e21598e72 (fix(ts-parser): flip 2 malformed import fixtures) directly to main as Chris.

  • Ported tsgo's unread-keyword recovery for malformed import expressions.
  • Prevented variable-declaration recovery from cascading into three spurious comma diagnostics.
  • Flipped importCallExpressionIncorrect1 and importCallExpressionIncorrect2 from 0/2 to exact 2/2.
  • Added 1 focused parser regression test.
  • Change size: +71/-1 in packages/ts_parser/src/ts_parser.zig.
  • Verification: full ts_parser suite passes; exact conformance replay reports total=2, passed=2, failed=0.
14 days ago

Parity crash fix: pushed b463942bc (fix(ts-checker): stop private key recursion) directly to main as Chris.

  • Full exact survey exposed a deterministic checker recursion in privateNameComputedPropertyName3.
  • Anonymous-class private method/accessor fallbacks now inspect only direct #name declarations; computed keys can no longer recursively type-check themselves.
  • Restored the expected-clean fixture from process abort to exact 1/1.
  • Added 1 focused zero-diagnostic checker regression.
  • Change size: +32/-4 in packages/ts_checker/src/check.zig.
  • Verification: focused regression passes, exact fixture passes, and full ts_checker passes.

This removes the crash that prevented a complete 5,907-case exact inventory.

14 days ago

Annotated while backedge parity

Pushed d2cd7f81e (fix(ts-checker): join annotated while flow) directly to main as Chris Breuer.

  • Flipped 2 exact tsgo fixtures: controlFlowIterationErrors and controlFlowIterationErrorsAsync.
  • Removed 6 false TS2345 diagnostics across the sync/async asNumber paths.
  • Preserved all 8 expected diagnostics (4 per fixture: 2 TS2345 + 2 TS2769).
  • Generalized the existing evolving-binding statement flow walker so explicitly annotated mutable locals can join definite incoming writes with loop backedges.
  • Added a gated provisional while pass to cache direct, intermediate-local, and await RHS result types before the authoritative diagnostic pass.
  • Widened fresh literal writes before the join, matching the tsgo string | number flow instead of leaking number | "".
  • Added 1 focused checker regression covering sync calls, awaited calls, and intermediate locals.
  • Change size: +239/-25 in packages/ts_checker/src/check.zig.

Validation:

  • Focused checker regression: pass.
  • Exact conformance pair: 2/2 passed.
  • Full ts_checker suite: pass.
  • Commit author and committer: Chris Breuer <chrisbreuer93@gmail.com>; no coauthor trailers.
14 days ago

Pushed 9a18edfa0 (fix(ts-checker): complete switch termination flow) directly to main as Chris Breuer with no coauthor trailer.

Parity movement:

  • Flipped 2 exact tsgo fixtures: neverReturningFunctions1 and exhaustiveSwitchStatements1.
  • Added explicit-never termination, class-method unreachable traversal, try/finally termination, finite literal/enum switch exhaustiveness, exhaustive-default never narrowing, loop-alias switch comparability, post-switch assignment joins, and narrowed alias-constituent diagnostic rendering.
  • Changed 1 checker file: +430/-15, with 1 regression covering 6 connected control-flow behaviors.

Validation:

  • ts_checker: 3,877/3,877 passing.
  • Exact neverReturningFunctions1: passing.
  • Exact exhaustiveSwitchStatements1: passing.
  • git diff --check: clean.
14 days ago

Pushed 8e3f97117 (fix(ts-checker): complete ordered control flow) directly to main as Chris Breuer, with no coauthor trailer.

This batch changes packages/ts_checker/src/check.zig by +499/-67 and flips 3 exact tsgo fixtures:

  • controlFlowWhileStatement: primes annotated backedge flow before the condition and preserves the narrowed string | number relational diagnostic.
  • controlFlowIIFE: evaluates call arguments before direct-IIFE bodies, carries outer narrowing into synchronous IIFEs, propagates definite outer writes, and isolates async/generator writes.
  • controlFlowBindingPatternOrder: evaluates conditional defaults before computed keys, unions concrete/default tuple sources, caches source-ordered binding types, suppresses synthetic as const lookup noise, and canonicalizes numeric literal union display.

Verification:

  • Exact corpus batch: 3/3 passed (controlFlowWhileStatement, controlFlowIIFE, controlFlowBindingPatternOrder).
  • Full checker suite: 3,877/3,877 passed.
  • Focused adjacent assignment/default-flow regression passed.
  • git diff --check passed.
14 days ago

Pushed 2175ec216 (fix(ts-checker): complete alias control flow) directly to main as Chris Breuer, with no coauthors.

Parity delta:

  • flipped 2 exact tsgo fixtures: controlFlowAliasing and assertionTypePredicates2
  • preserved exact passes for controlFlowAliasing2 and controlFlowAliasingCatchVariables
  • ported compound conditional aliases, tuple-element aliases, object-binding discriminants, switch/mixed guards, readonly member predicate aliases, function-scoped alias state, and JSDoc assertion predicates
  • canonicalized exact tuple assignment anchors and anonymous object-union TS2339 rendering
  • added 5 focused regressions
  • diff: +460/-76 in packages/ts_checker/src/check.zig

Validation:

  • focused tsgo alias: 6/6 passed
  • exact alias corpus: 3/3 passed
  • exact assertion/alias selection: 4/4 passed after the assertion fix
  • full checker: 3,883/3,883 passed
14 days ago

Full exact tsgo-main census after 2175ec216:

  • total: 5,907
  • exact pass: 5,695
  • exact fail: 212
  • skipped: 0
  • exact pass rate: 96.41%
  • full checker remains 3,883/3,883

This is the new global parity denominator. Next work is grouped by subsystem from this inventory; the immediate flow cluster is controlFlowAssignmentPatternOrder (6 consistent extra TS2322 diagnostics).

14 days ago

Pushed c45aeab20 (fix(ts-checker): preserve destructuring default flow) directly to main as Chris Breuer, with no coauthors.

Parity delta:

  • flipped 1 exact tsgo fixture: controlFlowAssignmentPatternOrder
  • removed all 6 spurious TS2322 diagnostics across direct, left-comma, and right-comma assignment forms
  • retained definite identifier writes from nested destructuring defaults before computed-key evaluation
  • expanded the focused checker regression from 2 to 4 base cases
  • diff: +64/-3 in packages/ts_checker/src/check.zig

Validation:

  • focused checker regression: passed
  • exact fixture: 1/1 passed
  • full checker: 3,883/3,883 passed

Projected exact baseline from the 5,695/5,907 census: 5,696/5,907 (211 remaining), before accounting for unrelated concurrent parity commits.

14 days ago

Merged-interface parity: 2 exact fixtures flipped

Pushed 04e3016c6 (fix(ts-checker): unify merged interface members) directly to main as Chris Breuer, with 135 insertions / 83 deletions.

  • Flipped twoMergedInterfacesWithDifferingOverloads2 by sharing merged interface type parameters while preserving method-level generics.
  • Flipped derivedInterfaceIncompatibleWithBaseIndexer by checking numeric constraints before string constraints and deduplicating equivalent numeric properties across reopened interfaces.
  • Added 2 focused checker regressions.
  • Combined exact tsgo validation: 2/2 passed.
  • Full checker validation: 3,885/3,885 passed.
  • Projected exact corpus parity: 5,698/5,907 (96.46%), with 209 remaining.

No coauthor trailers.

14 days ago

Interface-heritage parity: 1 exact fixture / 23 diagnostics flipped

Pushed 12200a5cd (fix(ts-checker): align inherited interface shapes) directly to main as Chris Breuer, with 191 insertions / 27 deletions.

  • Flipped interfaceExtendsObjectIntersectionErrors exactly across all 23 expected diagnostics.
  • Flattened intersection constituents for interface and factory-class heritage checks.
  • Matched tsgo alias display for array, tuple, typeof, and nested generic heritage.
  • Preserved namespace const literals, numeric-enum reverse indexes, and class static-side members while omitting synthetic name.
  • Anchored inherited number-vs-string index conflicts on the locally declared signature.
  • Added 2 focused regressions; heritage filter 47/47 passed.
  • Full checker validation: 3,887/3,887 passed.
  • Exact fixture validation: 1/1 passed.
  • Projected exact corpus parity: 5,699/5,907 (96.48%), with 208 remaining.

No coauthor trailers.

14 days ago

Parser recovery parity: nested object return bodies

Pushed 2985a8766 (fix(ts-parser): propagate nested object recovery) directly to main as Chris Breuer, with no coauthors.

  • Flipped interfaceExtendingClass2 from 0/1 to 1/1 exact parity.
  • Matched all 5/5 tsgo diagnostics, including TS1131 and both TS1128 recovery anchors.
  • Removed the bogus { 1: any } recovered member and preserved the upstream {} function return type.
  • Made object-type context lexical when nested inside interfaces and propagated malformed-statement brace recovery through enclosing type-member lists.
  • Added 1 HIR regression; implementation delta: 43 insertions, 2 deletions.

Validation:

  • exact conformance fixture: 1/1
  • parser tests: 871/871
  • checker tests: 3,887/3,887

Projected exact parity: 5,700/5,907 (96.50%), with 207 remaining.

14 days ago

Diagnostic ownership parity: 6 exact fixtures flipped

Pushed 892f46947 (fix(ts-checker): align diagnostic ownership edges) directly to main as Chris Breuer, with no coauthors.

Exact flips:

  • importAssertion1
  • importAttributes1
  • thisTypeInAccessors
  • thisTypeInAccessorsNegative
  • typeSatisfaction
  • typeSatisfactionWithDefaultExport

Logical ports:

  • any-valued dynamic-import options now bypass weak-object TS2559 while concrete invalid options remain rejected.
  • paired object accessors select the first non-this setter parameter, preventing malformed explicit receiver parameters from becoming getter return contexts.
  • TypeScript satisfies syntax elaborates a single missing required property as TS2741 and anchors it on the satisfies keyword; JSDoc @satisfies retains its dedicated tag-owned path.

Scope and validation:

  • 61 insertions / 5 deletions in one checker file
  • 2 new focused tests and 1 strengthened accessor regression
  • selected exact families: intended 6/6 pass; broad typeSatisfaction* guard 15/16, with only the pre-existing typeSatisfaction_errorLocations1 mismatch
  • full checker: 3,889/3,889

The complete tsgo-main census taken immediately before this batch is the new authoritative baseline: 5,698/5,907, not the earlier projected 5,700. This batch moves the projection to 5,704/5,907 (96.57%), with 203 remaining.

14 days ago

Pushed 4798cd575 fix(ts-checker): preserve module alias meaning directly to main as Chris (no co-authors).

This logical module-resolution batch changes 118 insertions / 28 deletions across ts_checker and ts_program, adds 4 focused regression tests, and flips 5 exact tsgo conformance fixtures:

  • importClause_namespaceImport
  • importEquals3
  • exportNamespace4
  • exportNamespace5
  • exportNamespace10

The port now retains export type * as ns in type space, queries renamed imports by their exported/source name, stops type-only provenance at the import-equals alias that owns the error, and avoids false export-star ambiguity when both stars resolve to the same module.

Validation: affected exact set 5/5, checker 3892/3892, full ts_program suite passing. Based on the last authoritative 5698/5907 census plus the prior 6-fixture batch and these 5 flips, projected parity is 5709/5907, with 198 remaining. The next full census will re-authorize that aggregate.

14 days ago

Pushed afa17b476 fix(ts-checker): retain import-type provenance directly to main as Chris (no co-authors).

This ownership batch changes 111 insertions / 1 deletion in ts_checker, adds 2 focused regression tests, and flips 2 exact tsgo conformance fixtures:

  • exportNamespace2
  • importEquals1

Home now carries the original import type ownership through named re-exports and export =, emits TS1361 at downstream value consumers, and leaves the legal export-assignment target diagnostic-free.

Validation: affected exact set 2/2 and checker 3894/3894. Based on the last authoritative census and the subsequent 6 + 5 + 2 exact flips, projected parity is 5711/5907, with 196 remaining pending the next full census.

14 days ago

Pushed 04f2b2f8c (fix(ts-checker): enforce enum reverse index readonly) directly to main as Chris Breuer, with no coauthors.

  • Added 26 lines in packages/ts_checker/src/check.zig
  • Added 1 focused checker regression
  • Flipped 1 exact tsgo case: decrementOperatorWithEnumType
  • Full checker suite: 3,895/3,895 passing
  • Projected exact parity: 5,712/5,907, with 195 remaining

The neighboring decrementOperatorWithEnumTypeInvalidOperations case remains isolated to its existing TS2356-vs-TS2357 operand-category mismatch.

14 days ago

Pushed 4fc9bd978 (fix(ts-checker): validate enum update references) directly to main as Chris Breuer, with no coauthors.

  • Changed 17 lines and replaced 2 lines in packages/ts_checker/src/check.zig
  • Added 1 focused checker regression
  • Corrected 2 diagnostics from TS2356 to TS2357
  • Flipped 1 exact tsgo case: decrementOperatorWithEnumTypeInvalidOperations
  • Exact enum decrement slice: 2/2 passing
  • Full checker suite: 3,896/3,896 passing
  • Projected exact parity: 5,713/5,907, with 194 remaining
14 days ago

Pushed cac05df77 (fix(ts-checker): classify numeric truthiness syntax) directly to main as Chris Breuer, with no coauthors.

  • Added 17 lines in packages/ts_checker/src/check.zig
  • Added 1 regression covering 3 numeric literal forms
  • Added the missing TS2872 diagnostic
  • Flipped 1 exact tsgo case: destructuringParameterProperties1
  • Full checker suite: 3,897/3,897 passing
  • Projected exact parity: 5,714/5,907, with 193 remaining
14 days ago

Pushed 431610060 (fix(ts-checker): preserve super call receiver side) directly to main as Chris Breuer, with no coauthors.

  • Changed 20 lines and replaced 2 lines in packages/ts_checker/src/check.zig
  • Expanded 1 existing regression with constructor, instance, and static super assertions
  • Removed 1 false TS2403
  • Flipped 1 exact tsgo case: superPropertyAccessNoError
  • Full checker suite: 3,897/3,897 passing
  • Final focused checker and exact conformance reruns: passing
  • Projected exact parity: 5,715/5,907, with 192 remaining
14 days ago

Pushed 0025ac4e1 (fix(ts-checker): widen enum compound diagnostics) directly to main as Chris Breuer, with no coauthors.

  • Added 11 lines and replaced 5 lines in packages/ts_checker/src/check.zig
  • Strengthened 1 existing 27-diagnostic matrix regression
  • Corrected 3 TS2365 messages from E.a to E
  • Flipped 1 exact tsgo case: compoundAdditionAssignmentWithInvalidOperands
  • Focused checker and exact conformance tests: passing
  • Projected exact parity: 5,716/5,907, with 191 remaining

A full checker sweep is deferred until the next grouped batch to avoid repeating the long compile for this formatter-only change.

14 days ago

Pushed 07d873a82 (fix(ts-checker): align Atomics library contracts) directly to main as Chris Breuer, with no coauthors.

  • Added 29 lines and replaced 6 lines in packages/ts_checker/src/check.zig
  • Added 1 regression and expanded 1 existing test
  • Removed 4 false TS2554 diagnostics and added 2 expected TS2550 diagnostics
  • Flipped 2 exact tsgo cases: esnextSharedMemory, es2024SharedMemory
  • Grouped exact slice: 2/2 passing
  • Full checker suite: 3,898/3,898 passing
  • Also validates the preceding enum formatter commit in the same full sweep
  • Projected exact parity: 5,718/5,907, with 189 remaining
14 days ago

Pushed a6cb15660 (fix(ts-checker): preserve out-of-order JS this diagnostics) directly to main as Chris, without coauthors.

This ports tsgo's source-order-sensitive checked-JS constructor inference: a named function with direct this assignments now retains TS2683 when a matching prototype assignment appeared earlier in the same virtual JS section, while normal constructor-before-prototype order stays clean.

Parity impact:

  • Flips inferringClassMembersFromAssignments2 to exact parity
  • Adds the 1 expected TS2683 diagnostic
  • Adds 72 lines and 1 order-sensitive regression
  • Passes 3,899/3,899 checker tests
  • Passes the focused exact conformance case
  • Projected exact corpus: 5,719/5,907 passing, 188 remaining (full census deferred until the next larger batch)
14 days ago

Pushed 4497fd513 (fix(ts-checker): align generic this and yield inference) directly to main as Chris, without coauthors.

This ports two tsgo parity rules:

  • Invalid @return {this} on a generic checked-JS constructor's prototype-object method degrades to any in structural missing-property diagnostics.
  • A bare yield consumed by a binding pattern with defaults infers a tuple-shaped TNext and does not emit TS7057.

Parity impact:

  • Flips thisTypeOfConstructorFunctions and generatorReturnTypeInference to exact parity
  • Corrects 2 TS2339 target displays
  • Removes 1 false TS7057 diagnostic
  • Adds 67 lines, replaces 1 line, adds 1 regression, and expands 1 regression
  • All 3 affected exact variants pass, including generatorReturnTypeInferenceNonStrict
  • Full sweep passed all 3,899 preexisting checker tests; both corrected focused regressions pass
  • Projected exact corpus: 5,721/5,907 passing, 186 remaining (full census deferred for a larger batch)
14 days ago

Pushed b2a3ab766 (fix(ts-checker): gate strict JS prototype inference) directly to main as Chris, without coauthors.

Under noImplicitAny, direct Ctor.prototype.method = function receivers now inherit constructor members only when the checked-JS constructor is explicitly tagged with @class/@constructor. Whole-object prototype replacements and tagged constructors retain their existing member context.

Parity impact:

  • Flips typeFromPropertyAssignment22 and typeFromJSConstructor to exact parity
  • Removes 6 false TS2322/TS7008 diagnostics from constructor-method inference and 1 false nested-arrow TS2322
  • Adds 20 lines, replaces 2 lines, and expands 1 two-sided regression
  • Both exact cases pass
  • All 6 prototype-focused checker tests pass
  • Projected exact corpus: 5,723/5,907 passing, 184 remaining (full checker sweep deferred until the next larger batch)
14 days ago

Pushed b08008223 (fix(ts-checker): isolate checked JS heritage) directly to main as Chris, without coauthors.

This ports two linked tsgo rules:

  • Checked-JS function declarations remain value-only when used as class heritage, even if constructor/prototype analysis cached class-like instance or static shapes.
  • Prototype-owner recovery no longer reuses the last textual .prototype. from an unrelated function or virtual file.

Parity impact:

  • Flips classCanExtendConstructorFunction to exact parity across 3 virtual files
  • Reconciles 16 missing, extra, or misplaced diagnostics
  • Adds 69 lines, removes 11 lines, adds 2 regressions, and updates 2 stale expectations
  • Full sweep passed 3,900 checker tests; both corrected focused regressions pass, covering all 3,902 tests
  • Projected exact corpus: 5,724/5,907 passing, 183 remaining

Sign in to comment on this issue.