ReviewOS

home-lang/home

TypeScript checker parity: eliminate the remaining 30 failures

#69
Closed chris opened this 21 days ago · 717 comments
21 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.
21 days ago

Published 0b1000f5d (fix(ts-parity): diagnose expando inference cycles).

  • Added stable post-statement TS7022 detection when a checked-JS object expando initializer consumes its whole evolving object.
  • Added TS7008 for untyped callable expando properties initialized with [], while preserving explicitly typed receivers and ordinary member reads.
  • Added 181 checker/test lines.
  • Flipped expandoObjectIndexSignatures, expandoNoInferredIndex, and expandoPropertyEmptyArrayWidening from 0/3 to 3/3 exact.
  • Projected native parity: 248/320.

Validation: focused exact corpus 3/3. Full ts_checker reached 3602/3604 and identified two focused issues; both were corrected, with the affected exact corpus rerun passing.

21 days ago

Consolidated native exact survey after 0b1000f5d:

[ts_suite compiler] total=320 passed=246 failed=74 skipped=0 pass_rate=0.77

This is an authoritative net +9 from the prior 237/320 measurement. The eleven focused flips all remain exact in their own filters; the two-case difference from the 248 projection reflects collateral movement elsewhere on the actively changing main branch, so 246/320 is the new baseline. The refreshed failure list is headed by thisPropertyAssignmentTyping, which is now isolated to member CFA/inference semantics.

21 days ago

Pushed b8b53c835 fix(ts-parity): flow inferred this members to main.

  • Ported checked-JavaScript method-only this member inference and local CFA.
  • Excludes self-referential method writes from declared property types.
  • Infers method-only empty arrays as any[] | undefined and reports TS7008 at the assignment.
  • Narrows successful lexical class-method assignments while preserving prototype-function and decorator behavior.
  • Changed 181 lines, removed 6.
  • Exact thisPropertyAssignmentTyping: 0/1 -> 1/1.
  • Native parity projection: 246/320 -> 247/320.
  • Verification: ts_checker 3605/3605; exact fixture 1/1; focused namespace-decorator, prototype aggregation, and method-CFA regressions all pass.
21 days ago

Pushed e4c7c4603 fix(ts-parity): decode escaped property names to main.

  • Routed identifier property names through the existing Unicode escape decoder.
  • Escaped enum/class/object keys now share semantic names with declarations and accesses.
  • Added 13 lines including a structural parser regression.
  • Exact enumUnicodeEscapeMemberName: 0/1 -> 1/1.
  • Native parity projection: 247/320 -> 248/320.
  • Verification: full ts_parser suite passed; exact fixture 1/1.
21 days ago

Pushed d4176b1ab fix(ts-parity): align predicate and rest diagnostics to main.

  • Anchored TS1225/TS1229/TS1230 at the parameter token for asserts predicates.
  • Preserved contextual any[] fallback for excess rest parameters while still reporting an untyped optional parameter.
  • Added 56 lines and removed 6.
  • Exact assertsPredicateParameterMismatch + contextuallyTypedFunctionOptionalAndRest: 0/2 -> 2/2.
  • Native parity projection: 248/320 -> 250/320.
  • Verification: both exact fixtures passed 1/1; focused TS1225 and contextual-rest checker regressions passed.
21 days ago

Consolidated native exact survey after d4176b1ab:

[ts_suite compiler] total=320 passed=250 failed=70 skipped=0 pass_rate=0.78

This confirms all four newly published flips held with no collateral losses from the prior 246/320 baseline:

  • thisPropertyAssignmentTyping
  • enumUnicodeEscapeMemberName
  • assertsPredicateParameterMismatch
  • contextuallyTypedFunctionOptionalAndRest

The remaining frontier is now 70 fixtures, clustered around JSDoc grammar, diagnostic suppression/anchoring, declaration emit context, module/package resolution, and deep type display/recursion.

21 days ago

Pushed fe6786871 fix(ts-parity): align checked JavaScript declarations to main.

  • Repeated JavaScript function declarations no longer cascade to TS2393.
  • TS-only type arguments in .js retain TS8011 without an extra semantic TS2558.
  • A source parameter named this in JavaScript remains an ordinary untyped value parameter even with JSDoc @this.
  • Added 57 lines and removed 2.
  • Three exact fixtures flipped 0/3 -> 3/3:
    • duplicateFunctionImplementationInJsFile
    • superCallInJSWithWrongBaseTypeArgumentCount1
    • jsdocThisTagWithThisParameter
  • Native parity projection: 250/320 -> 253/320.
  • Verification: all three exact fixtures passed 1/1; filtered JavaScript checker group passed.
21 days ago

Parity progress: pushed two small exact-baseline batches to main.

  • 9a66b04e8 fix(ts-parity): count Unicode spelling codepoints
    • Ported tsgo's rune-aware spelling candidate thresholds before missing-space recovery.
    • 62 additions / 8 deletions.
    • unicodeSpellingSuggestions: exact 0/1 -> 1/1.
  • e0ef6eb1a fix(ts-parity): align accessor grammar diagnostics
    • Invalid async accessors now remain non-async contexts for for await.
    • Parameterless setters report TS7032 during declaration emit.
    • JSDoc type expressions reject nested @import tag tokens at the exact TS1110 anchor.
    • 93 additions / 3 deletions.
    • forAwaitInAsyncAccessor, declarationEmitSetAccessorNoParameter, and invalidJsdocType: exact 0/3 -> 3/3.

Validation:

  • Full native ts_parser suite passed.
  • Focused native ts_checker batch passed.
  • Combined authoritative exact compiler batch: [ts_suite compiler] total=4 passed=4 failed=0 skipped=0 pass_rate=1.00.

The last consolidated native survey was 250/320, and the preceding checked-JS batch projected it to 253/320. These four newly measured flips project 257/320; the next consolidated survey will measure that total directly.

21 days ago

Published a five-fixture tsgo parity batch to main:

  • 02ea62e36 fix(ts-parity): recover incomplete do statements — emitIncompleteDoStatement 0/1 -> 1/1; 22 insertions.
  • 0ad2c5f70 fix(ts-parity): reject multiple JSON roots — jsonImportMultipleTopLevelObjects 0/1 -> 1/1; 65 insertions, 1 deletion.
  • d82dff843 fix(ts-parity): resolve referenced JSX runtimes — jsxUnicodeEscapeSequence 0/1 -> 1/1; 16 insertions, 1 deletion.
  • f30443396 fix(ts-parity): align erasable and NaN enums — enumNaNValues + erasableSyntaxOnlyJS 0/2 -> 2/2; 47 insertions, 2 deletions.

Validation:

  • exact combined tsgo batch: 5/5
  • native parser: 823/823
  • focused checker regressions: 2/2
  • full ts_driver suite: passed
  • focused JSON conformance regression: passed

Projected native parity is now 262/320 pending the next consolidated survey.

21 days ago

Authoritative fresh-cache native tsgo survey after f30443396:

[ts_suite compiler] total=320 passed=263 failed=57 skipped=0 pass_rate=0.82

This moves the measured frontier from 250/320 to 263/320, a net +13 exact fixtures. The published focused batches explicitly targeted 12 disjoint flips, so one additional fixture closed through collateral semantic improvement. 263/320 is now the source of truth.

The remaining 57 failures are concentrated in type-display truncation/qualification, JSDoc grammar and binding, namespace/module export graphs, deep recursive type relations, declaration-emit-only diagnostics, parser recovery/anchors, package deduplication, and option/lib/runtime-helper modeling.

21 days ago

Published a second six-fixture native tsgo parity batch directly to main:

  • 8e6c321fc fix(ts-parity): preserve virtual source comments
    • genericArrowFunctionInEsmExtensionFile: 0/1 -> 1/1
    • 13 insertions
  • 1218c4fff fix(ts-parity): recover empty for-in sources
    • panicForInEmptyDeclarationList: 0/1 -> 1/1
    • 30 insertions
  • bf7423a64 fix(ts-parity): preserve checker syntax context
    • jsDocTypedefWithThisTag
    • jsxPragmaAfterTags
    • importAttributesWithValueComments
    • asyncSuperDefaultParameters
    • exact movement: 0/4 -> 4/4
    • 95 insertions, 3 deletions

Validation:

  • authoritative combined exact batch: 6/6
  • full native parser suite: passed
  • focused checker regressions: 4/4
  • focused virtual-file offset regression: passed
  • temporary checker test selector removed before commit
  • git diff --check: passed

Measured baseline remains 263/320; these six disjoint post-measurement flips project 269/320, leaving 51 pending a later consolidated survey.

21 days ago

Published 1e538d4bc (fix(ts-parity): align advanced type diagnostics) to main.

This batch flips six native compiler fixtures:

  • exactOptionalPropertyTypesArgumentError
  • implicitEmptyObjectType
  • deeplyNestedArrayTypes
  • deeplyNestedTupleTypes
  • functionTypeParameterNameFromTupleLabel
  • unionElementErrorTruncation

Logical parity work:

  • preserves labeled tuple element names in HIR and expands fixed tuple rest parameters in function diagnostics;
  • separates namespace-qualified diagnostic names from bare alias identity;
  • enforces explicit index-signature covariance even without strictNullChecks;
  • keeps equivalent recursive aliases from different namespaces structurally assignable;
  • aligns exact-optional target rendering, truthy unknown || narrowing, and large anonymous-object union truncation.

Verification:

  • parser full suite: 823/823
  • checker full suite: 3622/3622
  • exact compiler batch: 6/6
  • change size: 283 insertions, 14 deletions across 4 files

Projected native exact parity moves from 269/320 to 275/320. The last consolidated measured survey remains 263/320; I’ll refresh the consolidated count after the next batched cluster.

21 days ago

Fresh consolidated native survey confirms the projected ratchet exactly:

  • total: 320
  • passed: 275
  • failed: 45
  • skipped: 0
  • pass rate: 0.86

Published the durable baseline refresh in 5dd2d3643 (docs(ts-parity): record 275 native passes), authored solely by Chris and pushed to main.

The next implementation batch is now working from this authoritative 45-fixture failure set rather than the stale 263/320 inventory.

21 days ago

Published b654690db (fix(ts-parity): align seven compiler edge cases) to main.

What flipped

  • sameComputedNameError: TS2416 computed members now anchor at the opening bracket.
  • destructuringEmptyBinding: object-rest binding patterns require an identifier and recover with TS1003.
  • objectNameCollisionCommonJS: Object is reserved only by the CommonJS transform; ESNext remains clean.
  • typeParameterComparableRelation: unrelated type parameters fail assertion overlap and TS2352 carries the instantiation chain.
  • jsdocExtendsClauseMismatch: qualified JSDoc heritage resolves the full type text without a spurious leaf TS2304.
  • blockedScopeVariableNotUnused1: nested closures resolve later outer lexical bindings.
  • disallowUnerasableAssertion: as / satisfies stop before higher-precedence operators and recover with the eight TS1005 anchors.

Scope and evidence

  • 244 insertions, 23 deletions across packages/ts_checker/src/check.zig and packages/ts_parser/src/ts_parser.zig.
  • Parser suite: 826/826.
  • Full checker suite: pass.
  • Fresh exact compiler slice: 7/7.
  • Projected native compiler baseline: 282/320 (up from 275/320), 38 remaining. A fresh consolidated survey will make that count authoritative after the next checkpoint.
21 days ago

Progress: projected 288/320 native compiler parity

Published two small conventional checkpoints directly to main, authored as Chris Breuer with no coauthors:

  • e7704cb2f fix(ts-parity): align four inference diagnostics (+172/-3, 4 fixture flips, projected 282 -> 286)
  • be6160916 fix(ts-parity): port missing imported helper checks (+400/-22, 2 fixture flips, projected 286 -> 288)

Exact compiler snapshots now passing, 6/6:

  • asyncFunctionReturnNonPromiseThenable
  • noLibAndNoUncheckedIndexedAccessDestructuringArray
  • privateIdentifierPropertyAccessDestructuringAssignmentES6
  • noTypeToStringRecursion
  • noTypeToStringStackOverflow
  • tslibImportDefaultHelperCommonJS

Implemented semantics include explicit-vs-inferred async TS1058 anchors, custom no-lib Array<T> index surfaces, circular satisfies typeof return inference with TS7023/TS1360, private-field get/set helper selection including destructuring writes, CommonJS __importDefault/__importStar selection, stable helper deduplication across graph expansion, and typed tsconfig.json importHelpers propagation.

Validation:

  • focused checker regressions: 3/3
  • focused Program regressions: 2/2
  • full ts_checker: pass
  • full ts_program: pass
  • full ts_driver: pass
  • virtual-tsconfig bridge regression: pass
  • final exact upstream batch: [ts_suite compiler] total=6 passed=6 failed=0 skipped=0

This retires 6 of the prior 38 projected failures, leaving 32. The checked-in baseline document remains authoritative at 275/320 until the next consolidated 320-fixture survey; 288/320 is the current checkpoint projection from individually exact flips.

21 days ago

Published da50c0550 (fix(ts-parity): align declaration validity checks).

  • Flipped 4 compiler fixtures to exact tsgo parity: declaration namespace re-exports, external import-type aliases, computed enum-member interface keys, and ambient module augmentation overloads.
  • Exact targeted conformance: 4/4.
  • Change size: 143 insertions, 10 deletions across parser/checker logic and focused regressions.
  • Projected parity: 292/320 (up from 288/320). The checked-in parity docs remain at the last consolidated 275/320 survey until the next full 320-fixture run.

28 projected mismatches remain.

21 days ago

Published 1edba251b (fix(ts-parity): resolve declaration use sites).

  • Flipped 3 more compiler fixtures to exact tsgo parity: nested expando initializer properties, imported JSDoc @implements classes, and explicit type arguments on imported generic declaration functions.
  • Added a Program/export-resolver generic_function fact, including named and star re-export propagation.
  • Exact targeted conformance: 3/3. Focused checker: 3/3. Focused Program contract: pass.
  • Change size: 168 insertions across checker, Program, and conformance adapter.
  • Projected parity: 295/320 (up from 292/320).

25 projected mismatches remain.

21 days ago

Published 96ed39a65 (fix(ts-parity): preserve qualified JSDoc aliases) directly to main as Chris Breuer, with no co-author trailers.\n\nProjected exact parity moved 295/320 -> 298/320 (+3 fixtures):\n- jsdocCallbackParamQualifiedName\n- jsDocTypedefTagNamespace\n- parametersAliasOverTypeofPreservedAsIsInDeclarations\n\nPorted tsgo behavior by preserving complete qualified JSDoc typedef/callback paths, excluding callback-owned property params from host-function TS8032 matching, and validating callable utility constraints distributively over union constituents.\n\nVerification:\n- exact conformance: 3/3\n- focused parser regressions: 1/1\n- focused checker regressions: 2/2\n- diff hygiene: clean\n- change size: +76/-3 across 2 files\n\nChecked-in docs remain at the last authoritative consolidated survey (275/320); I will update them after the next full 320-fixture exact run rather than mixing projected and measured counts.

21 days ago

Published 99995c881 (fix(ts-parity): align JSDoc operator grammar) directly to main as Chris Breuer, with no co-author trailers.\n\nProjected exact parity moved 298/320 -> 300/320 (+2 fixtures):\n- jsdocTypesWithPrefixesAndUnionTypes1\n- jsDocGenericOverloads\n\nPorted tsgo behavior for standalone ?/! recovery tokens, postfix nullable union recovery, readonly precedence beneath JSDoc prefix operators, overload-scoped unique return/type tags, and ambient HTMLElementTagNameMap resolution through the JSDoc builtin path.\n\nVerification:\n- exact conformance: 2/2\n- focused parser regressions: 2/2\n- focused checker regressions: 1/1\n- diff hygiene: clean\n- change size: +112/-0 across 2 files\n\nProjected parity is now 300/320. Checked-in docs remain at the last authoritative consolidated survey (275/320) until the next full 320-fixture exact run.

21 days ago

Published c46861e01 (fix(ts-parity): recover project config roots) directly to main as Chris Breuer, with no co-author trailers.\n\nProjected exact parity moved 300/320 -> 302/320 (+2 fixtures):\n- tsconfigRootdirInclude\n- typeRootsRelativePath\n\nPorted tsgo behavior across JSONC/config/program resolution:\n- recover a missing object comma and retain later tsconfig properties\n- surface the recovered syntax as TS1005\n- report relative rootDir violations with fixture-relative paths\n- keep compiler-inferred types entries inside configured typeRoots\n- preserve node_modules fallback for explicit triple-slash references\n- mark a preloaded type directive known only after its declaration candidate loads\n\nVerification:\n- exact conformance: 2/2\n- focused JSONC/tsconfig/driver/resolver regressions: 4/4\n- diff hygiene: clean\n- change size: +289/-9 across 5 files\n\nProjected parity is now 302/320. Checked-in docs remain at the last authoritative consolidated survey (275/320) until the next full 320-fixture exact run.

21 days ago

Pushed 9ee9372d6 (fix(ts-parity): align CommonJS and mixin declarations) to main.

This ports 675 lines of declaration-checking logic (+675/-26) and flips three exact tsgo fixtures:

  • multipleModuleExportsAssignments
  • cjsObjectDefinePropertyPrivateModuleDeclarationEmit
  • declarationEmitForMixinsWithStaticAccessors1

Projected parity moves 302/320 -> 305/320 (+3), with 15 projected mismatches remaining. Verification: exact fixture batch 3/3, nine focused checker regression tests passed, and two focused program tests passed.

21 days ago

Parity progress: pushed 1c136eaac (fix(ts-parity): align merged symbol resolution) directly to main as Chris Breuer.

This ports three checker behaviors and flips 3 exact tsgo fixtures:

  • mergedNamespaceDeclarationMemberReferences
  • freshObjectLiteralSubtype
  • incrementalConcurrentSafeAliasFollowing

Projected parity moves 305/320 -> 308/320 (12 remaining). The change is +167/-13 in packages/ts_checker/src/check.zig.

Verification:

  • exact tsgo fixture batch: 3/3 passed
  • focused checker regression batch: 8/8 passed
  • git diff --check: clean

The implementation adds equal-path merged namespace export visibility, TypeScript-style optional sibling keys for inferred fresh object return unions, and .js-to-TypeScript source resolution for virtual export-star conflict checks.

21 days ago

Parity progress: pushed c393d2f7e (fix(ts-parity): port Unicode intrinsic casing) directly to main as Chris Breuer.

This flips exact fixture stringMappingSpecialCasing and moves projected parity 308/320 -> 309/320 (11 remaining).

The port uses tsgo canonical Unicode 15.1 ECMAScript casing data and logic, including multi-codepoint expansions (ß -> SS, fi -> FI), context-sensitive Final Sigma, and lone-surrogate preservation. It updates all checker intrinsic mapping paths rather than special-casing fixture values.

Changes: +3785/-54 across 4 files; 3572 added lines are generated Unicode tables.

Verification:

  • exact tsgo fixture: 1/1 passed
  • standalone Unicode mapper test: 1/1 passed
  • focused intrinsic string-mapping checker regressions: passed
  • git diff --check: clean
21 days ago

Published two parity chunks on main:

  1. b723451ce (fix(ts-parity): merge global program declarations)
  • Cross-file ambient-module export collisions and program-wide generic declare global Array augmentation members.
  • Flipped exact globalArrayAugmentationWithAmbientModuleReexportMerge1.
  • +317/-2; projected 309/320 -> 310/320.
  1. 91b71454a (fix(ts-parity): preserve generic constraint provenance)
  • Preserves intrinsic-string and property-key proofs through conditional branches, mapped projections, and aliases.
  • Reuses alpha-equivalent contextual generic callable declarations without unbounded recursive return comparison.
  • Flipped exact varianceComputationNoCrash and conditionalContextualReturnSubstitutionCache (2/2 independently).
  • Focused checker regressions 3/3; +199/-3.
  • Projected parity: 310/320 -> 312/320, 8 remaining.
21 days ago

Parity update: pushed a9dfa604f (fix(ts-parity): detect destructuring flow cycles). This adds 271 lines in the checker and flips circularDestructuring plus infiniteRecursionDestructuringLoop exactly. Focused canonical corpus gate is 2/2 and the ts_checker suite passes. Projected compiler subset advances from 312/320 to 314/320; 6 fixtures remain.

21 days ago

Published 312f52ecd (fix(ts-parity): align duplicate and callback boundaries) directly to main as Chris Breuer, with no co-authors.

  • Ported tsgo duplicate declaration grouping for computed accessors across type members, classes, and object literals.
  • Preserved qualified typeof instantiation callback boundaries during generic inference.
  • Implementation delta: 360 insertions, 65 deletions across the checker and parser.
  • Exact parity: 314/320 -> 316/320 (+2 fixtures): duplicateIdentifierChecks and symbolToNodeBoundaryNoStackOverflow.
  • Validation: parser package suite; both exact target fixtures; full exact 320-fixture sweep (316 passed, 4 known gaps).

Remaining exact gaps: packageDeduplicationDuplicateGlobals, deduplicatePackages, recursiveIndexedAccessSimplification, and excessivelyDeepConditionalTypes.

21 days ago

Published package identity parity work in 6e74e07e6 (fix(ts-parity): preserve linked package identity).

  • Ported tsgo deduplicatePackages and @link semantics through the corpus loader, resolver, Program graph, and checker metadata.
  • Preserved physical package copies when deduplication is disabled and followed physical node_modules trees for virtual links.
  • Added final graph recompilation plus cross-file export/private-origin metadata needed for nominal duplicate-package checks.
  • Aligned ambient declaration identifier-chain recovery and retained the JS export regression fix.
  • Change size: 615 insertions, 21 deletions across 7 files.
  • Exact parity: 316/320 -> 318/320 (+2). Newly passing: packageDeduplicationDuplicateGlobals, deduplicatePackages; jsExportsImportedIntoTsxLosesTypeInfo remains passing.
  • Verification: resolver 114/114, Program package suite passed, parser package suite passed, all three targeted exact fixtures passed, full exact compiler corpus 318/320.

The two remaining exact mismatches are recursiveIndexedAccessSimplification and excessivelyDeepConditionalTypes; both are the next recursion/instantiation-depth batch. Broader known residuals remain checker 3642/3654 and conformance 1360/1388, outside this package-identity chunk.

21 days ago

Published fa8542e1e (fix(ts-parity): port recursive type limits).

  • Ported tsgo recursive indexed-access simplification and base-constraint relation depth behavior.
  • Added matching TS4109, TS2536, TS2322, TS2589, and bounded TS2321 diagnostics.
  • Change size: 381 insertions, 5 deletions across 2 files.
  • Exact native compiler parity: 318/320 -> 320/320 (+2), covering recursiveIndexedAccessSimplification and excessivelyDeepConditionalTypes.
  • Verification: focused exact fixtures 2/2; full canonical native compiler gate 320/320; checker suite 3643/3655 with its existing 7 failures and 5 crashes unchanged.

The full 5,907-case parity gate remains active. Next I am expanding beyond the native slice by grouping inherited failures around shared missing semantics.

21 days ago

Published checker-core parity batch: 49b095957 (fix(ts-parity): close checker core regressions).

  • Checker gate: 3643/3655 (7 failures, 5 crashes) -> 3655/3655
  • Closed 12 checker outcomes
  • Added constrained/default callback fallback and literal conditional return preservation
  • Validated contextual functions against every overload signature
  • Made TS1119 data/accessor collisions order-independent and once-per-name
  • Preserved const computed-property identity
  • Guarded generic signature display probing from non-function HIR nodes
  • Reused named recursive object identity inside optional unions
  • Change size: +40/-10 across 2 files

Verification:

  • Three final focused Zig checker regressions pass
  • zig build test -Dfilter=ts_checker --summary failures exits 0
  • Native compiler surface remains 320/320

The inherited 5,907-case exact dashboard was intentionally not rerun for this checker-only chunk; it remains the active authoritative parity gate.

21 days ago

Published 0aa6aa4 (fix(ts-parity): bound template inference partitions) directly to main as Chris Breuer, with no coauthor trailer. Scope: 47 insertions and 15 deletions across 2 files, 62 lines flipped. Ported tsgo deterministic literal-to-template partitioning and removed recursive alternate-split exploration. This closes the full-survey non-termination reproduced in templateLiteralTypes1 after 4h40m CPU time and a 133.3 GB physical footprint. Verification: 12/12 focused checker regressions, exact inherited templateLiteralTypes1 + templateLiteralTypes3 2/2, complete ts_checker 3657/3657, and git diff --check. This is a survey-blocker fix, not a claimed inherited pass-count increase: the last durable dashboard remains 5045/5907 and a fresh bounded exact survey is next.

21 days ago

Published ae0ba39 (perf(ts-parity): memoize source facts) directly to main as Chris Breuer, with no coauthor trailer. Scope: 123 insertions and 51 deletions across 2 files, 174 lines flipped. Seven immutable source facts are now cached and reset by setSource, removing repeated whole-file scans from large fixtures. The bounded 5907-case survey now accounts for 5479 passes, 427 exact mismatches, and 1 timeout: +434 passing fixtures versus the durable 5045 baseline and 428 unresolved outcomes versus 862. parserharness now completes and is classified as one extra TS2403; parserRealSource11 remains the sole timeout. Verification: cache invalidation 1/1, directive-focused checker tests 9/9, parserharness indexed completion, and git diff --check.

21 days ago

Published the next exact-parity wave on main:

  • 47b634be3 (fix(ts-parity): bound inference substitution) ports tsgo's shallow hasPrimitiveConstraint / maybeTypeOfKind classification and makes empty substitution maps preserve graph identity.
  • 2c6b9d5b2 (docs(ts-parity): record exact inference termination) records the result and remaining performance caveat in docs/TS_PARITY_PLAN.md.
  • Scope: 136 checker lines flipped (117 insertions, 19 deletions), plus a 2-line parity-ledger update.
  • Exact result: corpus index 2351, parserRealSource11, moves from the sole nonterminating outcome to 1/1 exact.
  • Logical dashboard: 5,480 / 5,907 exact (~92.77%), 427 exact mismatches, no semantically unresolved fixture.
  • Checker verification: the real ts_checker target compiled and passed the new shallow-constraint, empty-substitution, and adjacent inference regressions before I stopped it at the unrelated known-slow TS2799 tuple stress test.

The fixture currently takes roughly 85 seconds, so it is logically exact but still exceeds the former 60-second external shard budget. Sampling now points to repeated source-annotation/directive scans rather than inference substitution; indexing those immutable source facts is the next bounded performance wave before refreshing the dashboard.

21 days ago

Published the inference-budget follow-up on main:

  • f256f9a61 (perf(ts-parity): gate generic signature inference) matches tsgo by inferring call type arguments only for signatures with declared type parameters, adds a lazy immutable parameter-annotation index, reuses recovered annotations within identifier checks, and caches useDefineForClassFields. It flips 152 checker lines (130 insertions, 22 deletions).
  • 046635f39 (docs(ts-parity): record generic inference budget) records the implementation and measured budget in the parity ledger.

Verification: 8 focused checker regressions pass, and indexed inherited exact parserRealSource11 remains 1/1 while dropping from roughly 85 seconds to 36.49 seconds. This restores the 60-second shard budget. Because this is a performance correction rather than a new fixture closure, the logical dashboard remains 5,480/5,907 (~92.77%), with 427 exact mismatches and 0 timeouts. Canonical reference remains tsgo 24fabe95acba.

21 days ago

Published the declaration/mapped scope parity wave on main.

  • Implementation: eb9eab1a2 (fix(ts-parity): bind declaration type scopes)
  • Process-state docs: 8b661894b (docs(ts-parity): record declaration scope parity)
  • Canonical reference: tsgo 24fabe95acba
  • Scope: 347 implementation lines flipped across checker/parser (305 insertions, 42 deletions)
  • Exact parity: 5480/5907 -> 5505/5907 (+25), leaving 402 exact mismatches (~93.20% pass)

The wave ports complete-list interface/type-alias parameter binding, mapped-key and conditional infer scope, circular mapped-key cascade suppression, invalid-yield recovery, inferred computed binding-key behavior, and reserved void class recovery.

Verification: parser package passed; focused checker scope batch 5/5; adjacent infer-name controls 4/4; all 25 previously failing affected fixtures now match exact tsgo baselines, with the pre-green mappedTypeErrors2 control remaining exact.

21 days ago

Parity update (2026-08-10, canonical tsgo 24fabe95acba):

  • Correction to eb9eab1a2: the adjacent audit found three additional exact flips (inferTypes1, intrinsicKeyword, keyofAndIndexedAccess), so that wave closed 28, not 25, and established 5508/5907.
  • Implementation 59d847929 (fix(ts-parity): align invalid declaration recovery) flips 71 lines across 2 files (53 insertions, 18 deletions) and closes 4 more exact fixtures: intrinsicTypes, unknownControlFlow, exportNonInitializedVariablesInIfThenStatementNoCrash1, and parserExportAssignment5.
  • Documentation 8068537ae records both the correction and the new wave.
  • Current exact parity: 5512/5907 (~93.31%), with 395 exact mismatches remaining.

Ported behavior: depth-aware TS1156 recovery, nested export-declaration recovery, suppression of the TS2304 cascade after TS2795 for bare intrinsic, and suppression of invalid namespace export = operand checking after TS1063.

Verification: ts_parser package passes; focused checker recovery coverage passes 2/2; all four affected inherited fixtures pass exact comparison.

21 days ago

Published the next canonical tsgo parity wave.

  • Implementation: f29c2bdaa (fix(ts-parity): align index and module inference)
  • Ledger: fa81694cc (docs(ts-parity): record index and module parity)
  • Scope: 197 checker lines (193 insertions, 4 deletions)
  • Exact parity: 5512/5907 -> 5520/5907 (+8; 387 remain, ~93.45%)
  • Flips: unannotatedParametersAreOptional, paramTagBracketsAddOptionalUndefined, computedPropertyNamesContextualType7_ES5, computedPropertyNamesContextualType7_ES6, exportStar, exportStar-amd, typesVersions.ambientModules, typesVersionsDeclarationEmit.ambient
  • Semantics: checked-JS/JSDoc call minima, complete export-star conflict reporting, ambient resolver redirects, and tsgo-compatible object-literal index inference
  • Stability: copied recursive signature/member slices before nested interner work, eliminating the implicitIndexSignatures borrowed-storage crash
  • Verification: inherited exact batch 8/8; compiler crash regression 1/1

Canonical source remains _submodules/typescript-go at 24fabe95acba.

21 days ago

Published the next exact-parity wave to main.

  • Implementation: 27f199e42 (fix(ts-parity): align JSX and binding diagnostics)
  • Plan update: 8b25786ed (docs(ts-parity): record JSX and binding parity)
  • Canonical tsgo: 24fabe95acba
  • Implementation delta: 74 insertions, 12 deletions across checker/parser (86 changed lines)
  • Exact flips: plainJSTypeErrors, for-of43, jsxSpreadOverwritesAttributeStrict, templateStringWithEmbeddedArrowFunction, commentEmittingInPreserveJsx1
  • Parity: 5520 -> 5525/5907 (93.5331%), 382 remaining
  • Verification: selected exact batch 6/6 (including the ES6 control); ts_parser passes; ts_checker 3672/3674 with two unrelated pre-existing failures in generic-callback and illegal-control-flow tests.

The port matches tsgo file-kind handling for TS2839, inferred destructuring defaults, required spread members, scope-aware callback cycles, and complete JSX empty-expression spans.

21 days ago

Published the next exact TypeScript parity wave against canonical tsgo 24fabe95acba.

  • Implementation: a1730cfd0 (fix(ts-parity): align symbol and expression recovery)
  • Ledger: df3f84fd9 (docs(ts-parity): record symbol and expression recovery)
  • Scope: well-known symbol accessor duplicate sites, noImplicitAny yield/template consumption, missing generator parameter-list recovery, dynamic JSX tag diagnostics, and assertion-overlap checks in typed object literals
  • Measured implementation delta: 145 insertions, 35 deletions across checker/parser (180 changed lines)
  • Exact flips: symbolProperty44, templateStringWithEmbeddedYieldKeyword, tsxDynamicTagName2, tsxDynamicTagName3, interfaceWithPropertyOfEveryType
  • Dashboard: 5,525 -> 5,530 / 5,907 (93.6177%); 377 remain
  • Verification: selected exact batch 6/6 including the strict-false ES6 yield control; parser suite passes; checker suite 3,677/3,679 with only the same two unrelated baseline failures.
21 days ago

Published the next tsgo parity wave against canonical 24fabe95acba in three small commits:

  • 0816b836e fix(ts-parity): align interface and export recovery - 75 insertions / 3 deletions; +3 exact fixtures.
  • 9af47e921 fix(ts-parity): port symbol and namespace checking - 409 insertions / 21 deletions; +7 exact fixtures.
  • b81f87143 docs(ts-parity): record ten-fixture symbol wave - ledger and verification update.

Exact flips: staticPropertyNameConflicts, interfacesWithPredefinedTypesAsNames, symbolProperty37, symbolProperty42, symbolType2, symbolProperty21, symbolProperty24, symbolDeclarationEmit12, tsxElementResolution7, and thisInObjectLiterals.

Parity advances 5,530 -> 5,540 / 5,907 (+10, ~93.79%), leaving 367 exact mismatches. Verification: selected inherited batch 12/12 exact; parser 839/839; checker 3,685/3,687, with only the same two pre-existing generic-callback and illegal-control-flow failures. All commits were authored and committed as Chris only and pushed directly to main.

21 days ago

Published the checker-cleanup parity wave against canonical tsgo 24fabe95acba.

  • Implementation: 5481ed996 (fix(ts-parity): check diagnosed operands and callback boundaries)
  • Ledger: 0e0b1626c (docs(ts-parity): record clean checker baseline)
  • Ported operand-first checking for illegal yield and namespace export = expressions.
  • Repaired inferred callback target display at qualified typeof instantiation boundaries.
  • Checker moved 3,685/3,687 -> 3,687/3,687 (+2 outcomes).
  • Canonical tsgo compiler exact fixtures symbolToNodeBoundaryNoStackOverflow and checkChildrenAlwaysChecked pass 2/2.
  • Implementation delta: 65 lines in 1 file (45 insertions, 20 deletions).
  • The separate 5,907-case conformance dashboard remains 5,540/5,907 (~93.79%), with 367 exact mismatches; no cross-family fixture gains were counted.

Verification: full ts_checker 3,687/3,687, focused canonical compiler exact 2/2, and all strengthened operand-name regressions pass.

21 days ago

Published the module-resolution parity wave to main:

  • e6d3b5d4e fix(ts-parity): align module resolution semantics
  • 604e0302c docs(ts-parity): record module resolution wave

Ported tsgo behavior for untyped JavaScript imports with allowJs: false, triple-slash resolution-mode, qualified relative typeof import(...).x, and selected allowImportingTsExtensions matrix variants. This flips 8 inherited exact fixtures.

Receipts:

  • selected exact batch: 8/8
  • leading exact window: 184/200 -> 192/200
  • logical dashboard: 5,540/5,907 -> 5,548/5,907 (~93.92%), 359 remaining
  • ts_checker: 3,689/3,689
  • ts_program: pass
  • ts_driver: pass
  • implementation delta: 160 insertions, 7 deletions across 4 files

Canonical source: microsoft/typescript-go at 24fabe95acba.

21 days ago

Leading exact window is now complete at 200/200 against canonical tsgo 24fabe95acba.

Published in small conventional commits:

  • 6b8a3c640 fix(ts-parity): disambiguate conditional switch labels
  • fb0f73bc2 fix(ts-parity): align contextual this inference
  • ccc619586 fix(ts-parity): complete leading this-type window
  • 677caa464 docs(ts-parity): record leading window completion

This closes the final 8 leading-window fixtures: parenthesizedTypes, typeofThis, stringLiteralsWithSwitchStatements03, thisTypeInFunctions2, thisTypeInAccessorsNegative, typeRelationships, looseThisTypeInFunctions, and thisTypeInFunctions. The logical full-corpus dashboard advances 5,548/5,907 -> 5,556/5,907 (~94.06%), leaving 351 exact mismatches.

Verification:

  • final residual exact batch: 2/2
  • combined affected exact batch: 12/12
  • leading exact window: 200/200
  • ts_checker: 3,697/3,697
  • parser suite: passing

The next pass is moving directly into the 200-400 exact window; this issue remains open until the full 5,907-case corpus reaches logical exact parity.

21 days ago

Exact parity update: contiguous prefix reaches 350/350

Published two checker batches on main:

  • 159e6b77c fix(ts-parity): resolve variadic tuple contexts
  • a9c6943ef fix(ts-parity): close tuple exact window
  • 70e50bc05 docs(ts-parity): record 350-case exact prefix

The implementation ports variadic tuple contextual typing and symbolic relations, reverse mapped tuple inference from tuple identifiers, ambient merged-var definite assignment, and canonical CRLF string-literal comparison.

Measured delta

  • Exact fixtures flipped: 7 (variadicTuples1, restTupleElements1, contextualTypeTupleEnd, variadicTuples2, strictTupleLength, partiallyNamedTuples, stringLiteralTypesWithTemplateStrings02)
  • Logical dashboard: 5,556/5,907 (94.06%) -> 5,563/5,907 (94.18%)
  • Remaining exact mismatches: 344
  • Leading exact ratchet: 200/200 -> 350/350
  • Window 200-249: 50/50
  • Window 250-349: 100/100

Validation

  • Affected exact variants: 9/9
  • Focused checker regressions: 22/22
  • Full checker suite: 3,702/3,702

Next: scout and close the 350+ exact window.

21 days ago

Exact parity update: contiguous prefix reaches 550/550

Continuing from the 350/350 checkpoint, the checker now matches canonical tsgo 24fabe95acba across the next two exact windows.

Published directly to main as Chris, without coauthors:

The implementation waves change 521 checker lines (503 insertions, 18 deletions) and flip 11 inherited fixtures. Exact parity advances 5,563/5,907 (94.18%) -> 5,574/5,907 (94.36%), leaving 333 exact mismatches.

Verified:

  • exact window 350-449: 100/100
  • exact window 450-549: 100/100
  • contiguous exact prefix: 550/550
  • complete ts_checker suite: 3,706/3,706
  • focused intra-expression fixtures: 2/2
  • focused const-type-parameter regression: 2/2

Next ratchet: classify and port the 550-649 exact window.

21 days ago

Exact parity checkpoint: 850-case leading prefix

Canonical reference remains typescript-go@24fabe95acba758c05fcb349bf427a3a0c8ad676.

Published three small semantic waves:

  • 7d934ed05 fix(ts-parity): align callback rest inference
  • 1f8361887 fix(ts-parity): honor open index signatures
  • 7900c0ee7 fix(ts-parity): align JSX and generator diagnostics

Together they change 353 checker lines (305 insertions, 48 deletions) and flip 6 inherited exact fixtures:

  • recursiveTypeReferences1
  • partiallyAnnotatedFunctionInferenceWithTypeParameter
  • contextuallyTypedStringLiteralsInJsxAttributes02
  • keyofAndIndexedAccessErrors
  • keyofAndIndexedAccess2
  • types.asyncGenerators.es2018.2

Measured checkpoint:

  • exact parity: 5,580/5,907 (94.46%), 327 remaining
  • contiguous exact prefix: 850/850, up from 550/550
  • exact window 550-849: 300/300
  • complete checker gate: 3,711/3,711

Verification:

zig build test -Dfilter=ts_checker
# 3,711/3,711

HOME_TS_CONFORMANCE_FULL=1 HOME_TS_CONFORMANCE_EXACT=1 \
  HOME_TS_CONFORMANCE_START=550 HOME_TS_CONFORMANCE_LIMIT=300 \
  zig build test -Dfilter=ts_conformance \
  -Dts-conformance-test-filter='opt-in full local TypeScript corpus survey'
# total=300 passed=300 failed=0 skipped=0

Docs: 886986c4a. Previous checkpoint: /home-lang/home/issues/69#issuecomment-5268844878

21 days ago

Parity checkpoint: the contiguous exact prefix is now 1,450/1,450 against canonical tsgo 24fabe95acba.

Published in three small commits:

  • 0519c0d29 fix(ts-parity): align rest and mixin inference closes 9 fixtures in cases 850-1149: genericRestParameters3, restTuplesFromContextualTypes, genericRestParameters1, objectRestCatchES5, objectRest, propertyAccessOnTypeParameterWithoutConstraints, typeParameterConstModifiersReturnsAndYields, override19, and mixinAbstractClasses.2.
  • 3c8be8c9a fix(ts-parity): align private class identity closes 3 fixtures in cases 1150-1449: classExtendingClassLikeType, privateNameAndIndexSignature, and privateNamesUnique-2.
  • a0225ed88 docs(ts-parity): record 1450-case exact prefix records the ratchet and verification.

Verification: exact windows 850-1149 and 1150-1449 both pass 300/300; the complete checker suite passes 3,719/3,719. The ratcheted aggregate advances 5,580/5,907 -> 5,592/5,907 (94.67%), leaving 315 exact mismatches pending the next unbounded survey.

21 days ago

Canonical tsgo parity checkpoint (2026-08-12)

  • 360c44bf0 test(ts-parity): use tsgo generated baselines
    • Repoints all 5,907 conformance comparisons to _submodules/typescript-go/testdata/baselines/reference/submodule/conformance.
    • TypeScript remains the source-case corpus; tsgo is now the expected diagnostic source of truth.
  • 8434fbddc fix(ts-parity): align merged enums and checked JS
    • Closes all 9 filtered variants across enumMerging, importMeta, and typeFromJSInitializer.
    • Full checker gate: 3,723/3,723.
  • 30eb7b4fa fix(ts-parity): stabilize repeated object comparisons
    • Removes the parserharness survey crash by rejecting composite payloads and owning member snapshots across recursive interning.
    • All 5,907 cases now complete with no crash or skip.
  • 5f4fa9bbb docs(ts-parity): rebaseline dashboard to tsgo
    • Records the canonical full result: 5,235/5,907 exact (88.62%), 672 remaining.
    • Slice passes: 959, 912, 912, 799, 885, 768/907.

Older 5,592/5,907 and 1,450-case-prefix claims used the nested TypeScript baseline tree and are superseded by this tsgo-native survey.

21 days ago

Parity checkpoint: pushed a2bf47e86 (fix(ts-parity): align module and object resolution) directly to main as Chris.

  • Flipped 5 canonical tsgo cases to exact parity: node10Alternateresult_noTypes, resolutionModeImportType1, resolutionModeTypeOnlyImport1, extensionLoadingPriority, and nonPrimitiveAssignError.
  • Leading exact window improved from 92/100 to 97/100.
  • Added conditional @types resolver and clean-program-routing regressions.
  • Verification: resolver suite green, focused 5/5 exact, leading 97/100 exact, and all 3,724 checker tests green.
  • Remaining failures in the first 100 are now only resolutionModeTripleSlash4, resolutionModeTripleSlash5, and node10AlternateResult_noResolution.
21 days ago

tsgo parity checkpoint: duplicate declarations\n\nPushed e10d89476 (fix(ts-parity): align duplicate declaration diagnostics).\n\n- Closed 6 exact tsgo conformance mismatches across constructor parameter properties, class fields, interface/type-literal members, and object-literal methods.\n- Preserved tsgo's first-declaration spelling for numeric/string-equivalent duplicate symbols.\n- Improved the 200-299 exact window from 94/100 to 100/100.\n- Verification: targeted fixtures 6/6, duplicate-focused checker tests 37/37, parser regression 2/2, exact window 100/100.\n- Commit author and committer: Chris Breuer; no coauthors.

21 days ago

tsgo parity checkpoint: enum record keys\n\nPushed 31874300d (fix(ts-parity): canonicalize enum record keys).\n\n- Closed 1 exact mismatch by rendering synthesized numeric Record<Enum, T> keys as runtime property names.\n- Improved the 300-399 exact window from 99/100 to 100/100.\n- Verification: focused checker regression 2/2, exact window 100/100.\n- Commit author and committer: Chris Breuer; no coauthors.

Sign in to comment on this issue.