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

Crash-removal chunk landed in 5ed86afd3.

Verified:

  • conditional union call signatures do not leak excess properties: 2/2 pass.
  • distributive conditional yielding union of callables is callable: 2/2 pass.
  • Full ts_checker: 2,976/3,006 pass, 30 fail, 0 crash.
  • Net movement: 2 crashes flipped to passes; remaining failure list is unchanged.

Root cause was a borrowed unionMembers slice surviving recursive interning that could reallocate its backing pool. The evaluator now owns a copy for the recursive loop.

14 days ago

Enum-member identity chunk landed in 8ca140fee.

Verified delta:

  • Checker regression enum assignment compat models enum value object and member literals: 2/2 pass.
  • Compiler exact enumAssignmentCompat* cluster: 4/7 -> 6/7.
  • enumAssignmentCompat and enumAssignmentCompat2 now pass exactly.
  • Remaining enum fixture is enumAssignmentCompat5, whose only mismatch is the TypeScript rule allowing a broad number value to assign to numeric enum member type E.A.
14 days ago

Pushed 9f04059c0 (fix(ts-checker): allow number for numeric enum members).

This ports tsgo's bit-flag assignability rule: broad number is assignable to numeric enum-member types, while numeric literal sources still require an exact value match. enumAssignmentCompat5 flips to exact, taking the focused enum cluster from 6/7 to 7/7. Focused regression passes; full checker is 2,978/3,007 passing, 29 known failures, zero crashes.

14 days ago

Pushed 19c1c7aa5 (fix(ts-checker): diagnose global this computed writes).

Top-level this/globalThis computed writes now bypass the synthetic global-object index under noImplicitAny, preserving TS7053 with typeof globalThis. Full checker moves from 2,978/3,007 (29 failures) to 2,979/3,007 (28 failures), zero crashes.

14 days ago

Pushed 252b3902c (fix(ts-checker): elaborate generic parameter defaults).

Unsafe parameter defaults targeting bare type parameters now use the existing instantiation-mismatch diagnostics; constrained defaults such as U extends T remain valid. All 12 focused parameter-default tests pass. Full checker moves from 2,979/3,007 (28 failures) to 2,980/3,007 (27 failures), zero crashes.

14 days ago

Pushed 2b0e9d516 (fix(ts-checker): anchor overload errors on arguments).

TS2769 now carries the incompatible argument node out of overload applicability checks, preserving per-overload chains and related declarations while anchoring the diagnostic like tsgo. Corrected a legacy boolean-call assertion accidentally changed by an earlier construct-overload commit. All 4 focused overload-match tests pass. Full checker moves from 2,980/3,007 (27 failures) to 2,981/3,007 (26 failures), zero crashes.

14 days ago

Pushed 31886d9ba (fix(ts-checker): aggregate constructor overload arity).

When no constructor overload accepts a boundary arity, Home now aggregates the visible overload set's finite min/max instead of selecting the first signature. The JSDoc case now reports Expected 1-2 arguments, but got 0. All 5 focused constructor-overload tests pass. Full checker moves from 2,981/3,007 (26 failures) to 2,982/3,007 (25 failures), zero crashes.

14 days ago

Pushed bfec0b1d5 (fix(ts-checker): reject value-only type references).

Bare type references now resolve in the type namespace before accepting narrowed/cached value symbols, and unresolved annotations that bind only to vars/functions emit TS2749 with the typeof suggestion. All 3 focused value-only tests pass. Full checker moves from 2,982/3,007 (25 failures) to 2,983/3,007 (24 failures), zero crashes.

14 days ago

Pushed 885bf0dc3 (fix(ts-checker): preserve accessor reads in spreads).

Object-literal getters now infer read types, paired setters no longer overwrite those reads, and undefined-target object members use the actual relation in non-strict mode. The get/set spread regression flips while set-only spread and getter/indexer focused checks remain green. Full checker moves from 2,983/3,007 (24 failures) to 2,984/3,007 (23 failures), zero crashes.

14 days ago

Pushed 36407ef40 (fix(ts-checker): infer generic class variance).

  • Added the missing class-body variance inference pass after the final instance shape is assembled, matching existing function/interface/type-alias behavior.
  • Generic classes such as A<T> { foo: T } now infer T as covariant instead of falling through to bivariant relation.
  • Flipped 2 checker tests: 2984/3007 -> 2986/3007.
  • Covered both accessor read/write separation and nested TS2322 elaboration for List<string> versus List<number>.
  • Focused regressions pass; full checker suite completes with 21 remaining failures and zero crashes.
  • Commit author and committer are Chris <chrisbreuer93@gmail.com> with no coauthor trailers; pushed to origin/main.
14 days ago

Pushed 06317c43d (fix(ts-checker): scope mapped cycle diagnostics).

  • Restricted TS2615 emission to materialized literal mapped properties.
  • Broad string/number/symbol mapped-index evaluation still terminates recursive value lowering with any, but no longer emits a false property named after the key domain.
  • Preserved the real concrete-property cycle diagnostic ("M") and the silent direct-recursive mapped-alias case.
  • Flipped 1 checker test: 2986/3007 -> 2987/3007.
  • Focused tests and the full 3,007-test checker suite completed; 20 failures remain, with zero crashes.
  • Commit author and committer are Chris <chrisbreuer93@gmail.com> with no coauthor trailers; pushed to origin/main.
14 days ago

Pushed 9c8fb3dad (fix(ts-checker): prefer circular type argument errors).

  • Made TS4109/TS4110 authoritative when eager instantiation has already emitted TS2589 at the same reference node.
  • Removes only the same-node overflow diagnostic, then keeps the existing per-node suppression marker for later recursion.
  • Preserves TS2589 at unrelated sites, finite deep generic instantiation, and legitimate body-recursive generic behavior.
  • Flipped 1 checker test: 2987/3007 -> 2988/3007.
  • Focused cycle/depth regressions and the full 3,007-test checker suite completed; 19 failures remain, with zero crashes.
  • Commit author and committer are Chris <chrisbreuer93@gmail.com> with no coauthor trailers; pushed to origin/main.
14 days ago

Pushed 96cb0aaa3 (fix(ts-checker): name enums in overlap diagnostics).

  • TS2367 now prefers nominal whole-enum identity before structurally rendering an enum's branded intersection.
  • E versus string renders as such instead of exposing number & { readonly '__enum:...': never; }.
  • Preserved Enum.Member rendering for enum literals and literal-text rendering for ordinary aliases.
  • Flipped 1 checker test: 2988/3007 -> 2989/3007.
  • Focused formatting regressions and the full 3,007-test checker suite completed; 18 failures remain, with zero crashes.
  • Commit author and committer are Chris <chrisbreuer93@gmail.com> with no coauthor trailers; pushed to origin/main.
14 days ago

Pushed a1c625085 (fix(ts-checker): expand literal assignment aliases).

  • Reordered TS2322 source display selection so concrete single-literal aliases inline before generic alias preservation.
  • Added template-literal source rendering so aliases such as BT = \AA${Uppercase<string>}`` display their pattern body.
  • Preserved union alias names such as B = 2 | 3 where the alias carries useful diagnostic identity.
  • Flipped 2 checker tests: 2989/3007 -> 2991/3007.
  • Focused alias-format regressions and the full 3,007-test checker suite completed; 16 failures remain, with zero crashes.
  • Commit author and committer are Chris <chrisbreuer93@gmail.com> with no coauthor trailers; pushed to origin/main.
14 days ago

Pushed dd7600f0d (fix(ts-checker): reject readonly array type arguments).

  • Allowed array-like constraints through TS2344 diagnostic naming instead of aborting on structural complexity.
  • Unified array display with the checker’s readonly-array predicate, including tuple/shape-carried readonly metadata.
  • V extends readonly unknown[] now fails T extends unknown[] with the expected header and readonly unknown[] mutability chain.
  • Flipped 1 checker test: 2991/3007 -> 2992/3007.
  • Focused readonly/rest regressions and the full 3,007-test checker suite completed; 15 failures remain, with zero crashes.
  • Commit author and committer are Chris <chrisbreuer93@gmail.com> with no coauthor trailers; pushed to origin/main.
14 days ago

Pushed 364077008 (fix(ts-checker): inspect union index members safely).

  • Handles union index types before their aggregate is_literal flag when selecting TS7053’s missing-property child.
  • Prevents a union payload index from being read through the literal payload pool, which had leaked stale property text from an earlier access.
  • Preserves union declaration order and now names the first missing property (b) in the chain.
  • Flipped 1 checker test: 2992/3007 -> 2993/3007.
  • Focused literal/union/broad index regressions and the full 3,007-test checker suite completed; 14 failures remain, with zero crashes.
  • Commit author and committer are Chris <chrisbreuer93@gmail.com> with no coauthor trailers; pushed to origin/main.
14 days ago

Pushed b5d203180 (fix(ts-checker): infer callback rest tuples first).

Bare generic callback rest parameters now infer from the callback's complete positional signature before per-annotation scalar inference. This preserves fixed tuple arity and trailing void omission semantics.

Checker parity: 2993/3007 -> 2996/3007 (3 tests flipped), with zero crashes. Remaining: 11.

14 days ago

Pushed 9a6582ed7 (fix(ts-checker): preserve callback suffix mismatches).

Rest-tuple callback suffix checking now distinguishes non-applicable shapes from applicable callbacks whose annotations reject captured values, preventing generic fallback from erasing a real mismatch.

Checker parity: 2996/3007 -> 2997/3007 (1 test flipped), with zero regressions/crashes. Remaining: 10.

14 days ago

Pushed c25754232 (fix(ts-checker): accept string-like intersections).

Intrinsic string mappings now recognize intersection subtyping: S & string and intersected template literals satisfy the string constraint when a constituent is string-compatible, while unions still require every branch.

Checker parity: 2997/3007 -> 2999/3007 (2 tests flipped; 5 spurious TS2344 diagnostics removed). Remaining: 8.

14 days ago

Pushed ccb9d934a (fix(ts-checker): preserve mapped tuple positions).

Homomorphic mapped tuple instantiation now materializes concrete numeric members, preserves the mapped number index, and delays T[K] resolution until K is concrete. Per-position types no longer collapse to the tuple element union.

Checker parity: 2999/3007 -> 3000/3007 (1 test flipped). Remaining: 7.

14 days ago

Pushed 237840753 (fix(ts-checker): distinguish mapped key remaps).

Generic source assignments now resolve mapped alias bodies and distinguish identity/filter remaps from key-manufacturing remaps. Raw T remains assignable to homomorphic/filter mappings but not to p_${P} or fixed-key transforms.

Checker parity: 3000/3007 -> 3001/3007 (1 test flipped). Remaining: 6.

14 days ago

Pushed ad89f5cc9 (fix(ts-checker): prefer literals in mixed targets).

Mixed union/intersection assignment checking now tests fresh literals before widening into the structural fast path. Known keyof intersections and prefixed templates accept matching literals while mismatched placeholders remain rejected.

Checker parity: 3001/3007 -> 3002/3007 (1 test flipped). Remaining: 5.

14 days ago

Pushed be5c8b6e5 (fix(ts-checker): distribute concrete union checks).

Unwrapped concrete union checks now enter conditional distribution, while single-element tuple wrappers retain the explicit non-distributing path.

Checker parity: 3002/3007 -> 3003/3007 (1 test flipped). Remaining: 4.

14 days ago

Pushed 8ce2b9495 (test(ts-checker): count explicit literal call errors).

The local flow test now matches TypeScript-go's typeArgumentsWithStringLiteralTypes01 baseline: 3 invalid explicit initializer calls + 5 string assignment errors + 5 union-to-"Hello" call errors = 13. The three initializer diagnostics are pinned explicitly.

Checker parity: 3003/3007 -> 3004/3007 (1 test oracle corrected). Remaining: 3.

14 days ago

Pushed 287759a70 (fix(ts-checker): enforce generic NonNullable targets).

Bare type parameters now have to satisfy the {} member of T & {}; nullish-admitting constraints no longer pass T -> NonNullable<T>. The fixture oracle now matches TypeScript-go's 4-error conditionalTypes1 baseline.

Checker parity: 3004/3007 -> 3005/3007 (1 test flipped; 2 missing generic assignment errors added). Remaining: 2.

14 days ago

Pushed 40276e748 (fix(ts-checker): relate recursive alias wrappers).

Equal non-generic wrappers around recursive string-indexer unions now relate when one namespace instantiation is cycle-cut to an unresolved index. Direct generic aliases still preserve and compare type arguments.

Checker parity: 3005/3007 -> 3006/3007 (1 test flipped). Remaining: 1 (recursive PathKeys accepts tuple object path).

14 days ago

Checker unit parity is now fully green.

Pushed af498e5f2 (fix(ts-checker): preserve recursive path constraints):

  • reuses the recursive dotted-path proof during the post-inference generic constraint audit
  • prevents concrete tuple-object paths such as cars.1.make from being rejected by an eagerly truncated template-literal union
  • flips the final checker regression from 3006/3007 to 3007/3007 passing
  • full zig build test -Dfilter=ts_checker --summary failures exits 0 with zero failures

Authorship is Chris only, with no coauthors. Next I am widening verification to the documented TypeScript conformance/parity suites before closing this work.

14 days ago

Checker unit parity is now fully green.\n\nPushed ():\n- reuses the recursive dotted-path proof during the post-inference generic constraint audit\n- prevents concrete tuple-object paths such as from being rejected by an eagerly truncated template-literal union\n- flips the final checker regression from 3006/3007 to 3007/3007 passing\n- full exits 0 with zero failures\n\nAuthorship is Chris only, with no coauthors. Next I am widening verification to the documented TypeScript conformance/parity suites before closing this work.

14 days ago

Pushed c1d1729e9 (fix(ts-checker): allow loose null enum writes).

The assignment checker now applies loose-mode nullish semantics before nominal enum specialization, while strict mode and generic NonNullable<T> constraints keep rejecting the same writes.

Measured flips:

  • checker remains fully green at 3008/3008 after adding one focused regression
  • nullAssignableToEveryType now passes
  • named-category aggregate advances 85/86 -> 86/86
  • full ts_conformance harness failure count is expected to move 15 -> 13 because both the pin and aggregate entry flip

Commit author and committer are Chris only; no coauthors.

14 days ago

Pushed aec94acdf (fix(ts-checker): protect primitive type keywords).

Unqualified primitive type refs now resolve before visible value bindings, so constants named string, number, or boolean cannot shadow the corresponding type keywords inside unions and overload signatures. Genuine value-only type references still emit TS2749.

Measured flips:

  • checker: 3009/3009 after adding one regression
  • stringLiteralTypesOverloads01: pass
  • stringLiteralTypesOverloads02: pass
  • stringLiteral baseline-aware category: 31/33 -> 33/33
  • baseline-aware aggregate: 578/586 -> 580/586

Authorship remains Chris only, with no coauthors.

14 days ago

Pushed b16523b1a (fix(ts-checker): resolve forward class static sides).

A forward typeof Class query now materializes the future class and returns its static constructor side even when an earlier instance-type reference pre-registered the instance cache. This prevents instance accessors from leaking into mapped constraints such as PropertiesOf<typeof ApiItem>.

Measured flips:

  • checker: 3010/3010 after one new regression
  • accessorsOverrideProperty9: false TS2345 removed, exact pin now passes

Author and committer are Chris only; no coauthors.

14 days ago

Pushed 0af5ba418 (fix(ts-checker): omit missing untyped IIFE params).

This directly ports tsgo getSignatureFromDeclaration: a direct IIFE parameter with no annotation and no corresponding call argument does not increase the minimum argument count. Annotated parameters remain required and still emit TS2554 when omitted.

Measured flips:

  • checker: 3011/3011 after one regression
  • always-on contextuallyTypedIife: pass
  • exact corpus filter: 0/2 -> 2/2 (contextuallyTypedIife, contextuallyTypedIifeStrict)

Authorship is Chris only, with no coauthors.

14 days ago

Pushed 9da14fe0f (fix(ts-checker): narrow loose unassigned unions).

typeof guards now narrow annotated variables that remain pending definite assignment when strictNullChecks is disabled. The pending-assignment suppression is preserved under strict-null mode, where TS2454 semantics still apply.

Measured flips:

  • checker: 3012/3012 after one regression
  • typeGuardOfFormExpr1AndExpr2: pass
  • typeGuardOfFormExpr1OrExpr2: pass
  • removes the paired false TS2322/TS2741/TS2739 diagnostics

Author and committer are Chris only; no coauthors.

14 days ago

Pushed 7d32c0d65 (fix(ts-checker): prefer merged type declarations).

Signature preflight and normal type-ref lowering now resolve visible interfaces/classes/aliases/enums before value-only TS2749 checks. This preserves TypeScript separate type/value namespaces when an interface and runtime variable intentionally share a name.

Measured flips:

  • checker: 3013/3013 after one regression
  • newOperatorConformance: pass
  • removes the sole false TS2749 on merged nestedCtor

Commit author and committer are Chris only; no coauthors.

14 days ago

Pushed dd5979b52 (fix(ts-checker): keep dynamic symbol keys distinct) after rebasing over the unrelated incoming MySQL fix on origin/main.

Broad symbol expressions no longer receive stable computed-member names. Only bindable unique-symbol names such as const sym = Symbol() and Symbol.iterator participate in TS2718 duplicate-kind checks.

Measured flips:

  • checker: 3014/3014 after one regression
  • positive unique-symbol TS2718 coverage remains green
  • symbolProperty2: pass
  • symbolProperty4: pass

The rebase restored the unrelated local Home test edits and .claude/ files unchanged. Author and committer are Chris only; no coauthors.

14 days ago

Pushed 952f61ace (fix(ts-checker): contextualize iterable array elements) after rebasing over unrelated incoming JSX-parser and HTTP/2 fixes.

Plain Iterable/AsyncIterable types now retain element metadata. Array-to-iterable assignment and function-valued array element contextual typing both consume that metadata.

Measured flips:

  • checker: 3015/3015 after one noImplicitAny regression proving the arrow parameter is actually typed
  • iterableContextualTyping1: exact pass, false TS2322 removed
  • focused regression rechecked after the rebase

The autostash restored unrelated local edits unchanged. Authorship remains Chris only, with no coauthors.

14 days ago

Pushed 5407d0178 (fix(ts-checker): preserve tuple class field literals) after rebasing over an unrelated parser documentation commit.

Array-literal class field initializers now use the existing tuple-aware positional assignability path before structural Array<T> comparison, including readonly tuple targets.

Measured flips:

  • checker: 3016/3016 after one strict regression
  • readonlyArraysAndTuples2: exact pass, false TS2322 removed
  • expected baseline-aware aggregate: 580/586 -> 581/586 (combined aggregate verification will follow the named-tuple fix)

Focused regression rechecked after rebase. Authorship remains Chris only, no coauthors; unrelated local edits were restored unchanged.

14 days ago

Pushed 149f152dd (fix(ts-checker): honor unbounded target rest arity).

Ported tsgo’s hasEffectiveRestParameter(target) arity rule into signature relation: an unexpanded target array rest now has unbounded effective arity, while tuple rests remain bounded. This lets a fixed callback such as (elem: object, index: number) => object satisfy (...args: any[]) => any.

Parity movement:

  • namedTupleMembers: 2 unexpected TS2345 diagnostics -> clean
  • direct always-on conformance fixture failures: 1 -> 0
  • checker suite: 3016/3016 -> 3018/3018
  • added relation-level and checker-level regressions

Focused namedTupleMembers and the complete checker suite both pass. Next I’m resolving the four remaining baseline-aware relation fixtures, then continuing through the exact corpus.

14 days ago

Pushed 674d2286a (fix(ts-checker): retain trailing tuple rest elements).

Ported tsgo’s literal tuple-index behavior into Home’s object-shaped tuple representation by retaining the exact trailing rest element type. Literal accesses beyond the fixed prefix now resolve to that rest element, while dynamic numeric indexing still returns the full element union.

Parity movement:

  • genericRestParameters2: 1 unexpected TS2345 diagnostic -> clean
  • baseline-aware relationship survey: 582/586 -> 583/586
  • checker suite: 3018/3018 -> 3019/3019

The focused conformance pin and complete checker suite pass. Three baseline-aware fixtures remain: overloaded generic-call inference, union/intersection generic signature identity, and async iterator structural compatibility.

14 days ago

Pushed 7170e75f8 (fix(ts-checker): canonicalize generic signature relations).

Promoted the existing initializer-only generic signature matcher into the central checker relation. Generic parameter lists and recursive constraints are now alpha-renamed by position before directional constraint, parameter, and return checks, matching tsgo’s canonical-signature behavior. The full suite exposed and helped preserve the stronger-vs-weaker recursive constraint boundary during implementation.

Parity movement:

  • unionAndIntersectionInference3: failing -> clean
  • baseline-aware relationship survey: 583/586 -> 584/586
  • checker suite: 3019/3019 -> 3020/3020
  • existing directional recursive-constraint regression remains green

Two baseline-aware fixtures remain: overloaded generic-call inference and async iterator structural compatibility.

14 days ago

Pushed 64961afb0 (fix(ts-checker): relate contextual functions to overload sets).

Replaced the free-type-parameter callable-object shortcut with pairwise coverage of every target call signature. Contextual function arguments now satisfy overloaded parameter types only when their arity, parameter flow, and return type relate to each overload; the existing two-required-parameters negative remains green.

Parity movement:

  • genericCallWithOverloadedFunctionTypedArguments: 2 unexpected TS2345 diagnostics -> clean
  • baseline-aware relationship survey: 584/586 -> 585/586
  • exact filtered overload pair: 0/2 -> 1/2
  • checker suite: 3020/3020 -> 3021/3021

The only remaining baseline-aware failure is async iterator structural compatibility. The sibling exact fixture still needs diagnostic parity and remains queued for the exact-corpus phase.

14 days ago

Pushed 457e87727 (fix(ts-checker): model async iterator result promises).

Ported the async iterator protocol into generator and builtin iterator synthesis: async next/return/throw methods now return Promise-wrapped iterator results, TReturn/TNext arguments and defaults are retained, and iteration recovers the yield channel separately from completion values.

Parity movement:

  • types.asyncGenerators.es2018.1: 10 unexpected TS2322 diagnostics -> clean
  • asyncGenerators baseline category: 1/2 -> 2/2
  • exact focused filter: 0/1 -> 1/1
  • checker suite: 3021/3021 -> 3022/3022

The combined baseline survey remains 585/586 because clearing the earlier generic-signature diagnostics exposed a later intersection-inference failure in unionAndIntersectionInference3 at foo1(sa). That is the next isolated chunk.

14 days ago

Pushed eed40a682 (fix(ts-checker): infer through iterable intersections).

Ported iteration-aware inference and relation for array-like sources. Iterable<T> members now infer T from the source yield channel even though Home’s synthetic arrays expose a number index instead of a materialized Symbol.iterator, and iterable intersections validate that semantic member alongside ordinary structural members.

Parity movement:

  • remaining unionAndIntersectionInference3 TS2345 -> clean
  • typeInference baseline category: 51/52 -> 52/52
  • combined baseline-aware relationship survey: 585/586 -> 586/586
  • checker suite: 3022/3022 -> 3023/3023

This retires the full tracked 586-case relationship slice at 100%. I’m continuing directly into the broader 5,907-case exact corpus; issue #69 stays open until exact checker parity is complete.

14 days ago

Pushed 9dd3f11f8 (fix(ts-checker): snapshot JSX attrs across alias refresh).

The first unfiltered 5,907-case exact survey exposed a checker panic at case 5508. Generic JSX alias refresh could grow the shared object-member pool while excess checking still iterated a borrowed attribute-member slice, poisoning later StringIds. The loop now snapshots members before recursive lookups.

Measured movement:

  • tsxStatelessFunctionComponentsWithTypeArguments2: process abort -> completed diagnostic comparison
  • exact survey blocker: removed at 5508/5907
  • checker suite: 3023/3023 -> 3024/3024

The fixture still has ordinary JSX diagnostic mismatches, so it remains in the parity backlog. I’m resuming the exact survey beyond this former crash point to establish the complete corpus total and discover any later blockers.

14 days ago

Exact-corpus baseline established after the JSX crash fix:

  • total: 5,907
  • passed: 4,868
  • failed: 1,039
  • skipped: 0
  • exact pass rate: 82.4%
  • checker unit suite: 3,024/3,024
  • curated relationship survey: 586/586

This is the first complete post-fix survey; the prior attempt aborted at case 5,508 and was not counted. The remaining work is now the exact diagnostic/semantic backlog, and #69 remains open until 5,907/5,907.

14 days ago

Checker parity update pushed in 37154a4a9 (fix(ts-checker): preserve template interpolation braces).

  • Made source-annotation normalization distinguish object braces from template interpolation braces, preventing ${T} / ${number} from being rendered as ${T;} / ${number;} while retaining object-member semicolon formatting.
  • Added a focused regression covering generic template parameters, nested string mappings, and object types containing template literal members.
  • Exact targeted window: 0/4 -> 3/4.
  • Newly exact-passing fixtures: templateLiteralTypes5, templateLiteralTypes7, stringLiteralsAssignedToStringMappings.
  • stringMappingOverPatternLiterals remains failing on independent alias-display differences; its interpolation punctuation mismatches are gone.
  • Checker suite: 3,025/3,025 passing (up from 3,024).
  • Last complete exact survey was 4,868/5,907; this verified chunk establishes a floor of 4,871/5,907 (82.46%), pending the next complete survey for any additional flips.
14 days ago

Documentation checkpoint pushed in 10e6c23e8 (docs(ts-parity): publish 82.5 percent exact baseline).

  • Re-ran the complete unfiltered exact corpus after 37154a4a9.
  • Result: 4,871/5,907 exact passing (82.46%), 1,036 failing, 0 skipped.
  • This confirms the prior template-interpolation chunk added exactly 3 full-corpus passes with no regressions from the previous 4,868/5,907 survey.
  • Updated README.md, docs/PARITY-TYPESCRIPT.md, and docs/CAPABILITY_MATRIX.md from stale 68.7-71.4% snapshots.
  • Corrected the stale checker-failure note: focused checker suite is 3,025/3,025 passing.

Issue remains open for the remaining 1,036 exact fixtures.

14 days ago

Checker parity update pushed in 6fee3d5fc (fix(ts-checker): display computed string mappings).

  • Ported the typescript-go alias-identity rule used by relation diagnostics: preserve the original annotation only when the resolved type retains alias identity.
  • Template literals and intrinsic string mappings now render their computed shapes, including nested same-kind normalization and capitalize/uncapitalize template evaluation.
  • Removed 13 diagnostic-line mismatches from stringMappingOverPatternLiterals.
  • Exact fixture result: 0/1 -> 1/1.
  • Projected aggregate from the last complete survey: 4,872/5,907 (82.48%), with 1,035 remaining; the next full survey will revalidate the aggregate.
  • Checker suite: 3,026/3,026 passing.

Issue remains open.

14 days ago

Checker parity update pushed in 6dffa158e (fix(ts-checker): parenthesize callable union diagnostics).

  • Applied TypeScript precedence while rendering union type annotations for TS2403.
  • Function and constructor constituents now render as (() => A) | (() => B) and (new () => A) | (new () => B) rather than ambiguous unparenthesized text.
  • Removed both exact diagnostic mismatches in unionTypeLiterals.
  • Exact fixture result: 0/1 -> 1/1.
  • Projected aggregate: 4,873/5,907 (82.50%), with 1,034 remaining pending the next full survey.
  • Checker suite: 3,027/3,027 passing.

Issue remains open.

14 days ago

Checker parity update pushed in cf006bd75 (fix(ts-checker): parenthesize cached callable unions).

  • Fixed the conditional-expression union display cache, which bypassed the general callable-union precedence renderer.
  • bestCommonTypeOfConditionalExpressions now matches the exact TS2322 callable-union line.
  • Measured movement: -1 diagnostic-line mismatch, +0 complete fixtures; the fixture now differs only by two missing unconstrained generic return diagnostics at line 25.
  • Aggregate projection stays 4,873/5,907, with 1,034 remaining.
  • Checker suite: 3,028/3,028 passing.

Issue remains open.

Sign in to comment on this issue.