ReviewOS

home-lang/home

feat(ts): distinguish checker-synthesized `any` from user-written `any`

#783
Open chris opened this 9 days ago ·
9 days ago

Problem

packages/ts_checker/src/check.zig has ~394 orelse/catch Primitive.any fallbacks: when Home cannot model a construct it quietly types it any, which silences every downstream error without a trace. The README's implicit-any false positives trace back to exactly this. The primitive table has no error type (slot 15 is free). A sound mode is impossible while the checker itself injects any.

Evidence (origin/main @ d4b219507)

Scope

  • Add an internal unmodeled type that relates like any (so tsc parity is preserved) but is distinguishable.
  • Convert the catch/orelse Primitive.any fallbacks to it.
  • Expose a count/list (--listUnmodeledAny or an HM diagnostic in debug builds).

Acceptance criteria

  • The unmodeled-any count is reported on the pinned Zod benchmark.
  • A CI ratchet fails if the count grows.
  • TS conformance unchanged.

Depends on: #782 Related: #765, #758, #754, #751 Part of #814.

9 days ago

Progress landed directly on main in 3686d78 (feat(ts): distinguish unmodeled recovery types).

This first semantic slice claims reserved TypeId 15 as Primitive.unmodeled, marks it any-like while retaining a distinct internal identity, and updates every relation-engine any branch so assignability, subtype, comparability, upper-object, and index-signature behavior stay aligned with ordinary any.

Verification:

  • complete ts_checker package suite passed under the 3,840 MB guard (2,190 MB peak tree footprint)
  • HIR package suite passed under the guard (178 MB peak)
  • formatter and diff checks passed

The issue remains open. Next work is to migrate genuinely checker-synthesized fallback sites, expose their source-anchored list/count through the existing option, measure pinned Zod, add the CI ratchet, and prove conformance unchanged. Intentional TypeScript any sites will not be mechanically relabeled.

9 days ago

Second verified slice landed directly on main in f22aa8c (feat(ts): report unmodeled recovery sites).

The existing --home-list-unmodeled-any option is now observable: the checker records source origins where it returns Primitive.unmodeled and emits one source-anchored HM9002 warning per origin. The first migrated production fallback is the 150-frame checkExpression safety guard. Origin tracking is separate from propagated result types, preventing cascaded duplicate warnings, and explicit user-written any is covered by a negative regression.

Verification under the 3,840 MB supervisor:

  • focused HM9002 regression passed (1,794 MB peak)
  • complete ts_checker suite passed (2,185 MB peak)
  • ts_diagnostics suite passed (167 MB peak)
  • conformance stayed 16/16 smoke, 86/86 category, and 586/586 baseline-aware (2,255 MB peak)
  • Zig formatting, code Pickier, and diff checks passed; the plan retains only its pre-existing Markdown findings

The issue stays open for additional proven fallback migrations, pinned-Zod measurement, the CI count ratchet, and exact-conformance proof.

9 days ago

Two more verified slices landed directly on main under the reporter identity:

  • c3b1689cf (test(ts): ratchet unmodeled Zod recoveries (#783)) adds a source-integrity-checked Zod 4.5.2 ratchet plus hermetic controls. The npm archive is pinned by SHA-512 5e46170a…1bae; test exclusion is validated at exactly 106 production TypeScript files. Equal and lower HM9002 counts pass, growth fails, and altered archive bytes fail before compilation.
  • afaca5fa0 (ci(ts): gate unmodeled Zod recoveries (#783)) runs that ratchet in the TS conformance workflow, retains complete diagnostics as CI evidence, and publishes the current correctness table in the README and parity plan.

Measured on a fresh stripped ReleaseFast compiler under the fixed 3,840 MB supervisor: the full 106-file graph reports 0 HM9002 recoveries against a checked-in maximum of 0 and peaks at 902 MB. It also reports 198 ordinary TypeScript diagnostics, so this is provenance evidence rather than a Zod parity claim. A ReleaseSafe attempt was correctly stopped at 3,985 MB; the ceiling was not raised, and the documented ReleaseFast audit profile completed cleanly.

The prior normal conformance gate remains 16/16 smoke, 86/86 category, and 586/586 baseline-aware. This closes the pinned-count and CI-ratchet acceptance items. The issue stays open for deliberate migration of additional proven checker fallbacks; newly exposed recoveries must carry source evidence and a reviewed baseline update.

9 days ago

Pushed 49bd3f2 directly to main: feat(ts): trace diagnosed recovery types (#783).\n\nThis migrates diagnosed representation/recursion fallbacks that emit TS2589, TS2590, or type-level TS2799 to traced unmodeled recovery, without weakening the original TypeScript diagnostics. Covered families include template/intersection/tuple-rest union explosion, instantiation depth/count, recursive mapped aliases, circular indexed access, and oversized tuple spreads. Unresolved leaves at the depth boundary retain TS2304 without inventing TS2589.\n\nVerification: checker 4,430/4,430; conformance 16/16 smoke, 86/86 category, 586/586 baseline-aware, 1,432 total. The full 106-file Zod 4.5.2 ratchet remains at 0 HM9002 and 198 ordinary TypeScript diagnostics. Peak guarded footprint: 3,012 MB, below the 3,840 MB ceiling. This issue remains open for deliberate migration of additional internal fallbacks.

9 days ago

Another verified recovery family landed directly on main in 1060144 (feat(ts): trace catch recovery types (#783)).

Ordinary TypeScript and checked-JS JSDoc catch annotations that violate TS1196 already recover through an any-like type. Those two checker-originated substitutions now record Primitive.unmodeled at the annotation/binding. Valid user-written any and unknown catches remain ordinary types and do not emit HM9002.

Verification, all serial under HOME_RUN_MAX_MB=3840:

  • focused positive/negative regression: exactly 2 TS1196 + 2 HM9002; valid any/unknown stay silent, peak 1,727 MB
  • all catch-related checker tests: pass, peak 1,772 MB
  • complete ts_checker: pass, peak 2,086 MB
  • normal conformance: 16/16 smoke, 86/86 category, 586/586 baseline-aware, peak 2,086 MB
  • stripped ReleaseFast home-tsc: build pass, peak 2,887 MB
  • byte-pinned Zod 4.5.2 ratchet: 0 HM9002 / baseline 0 / 106 production files, peak 961 MB
  • Zig formatting, README Pickier, and diff checks: pass

No baseline increase, diagnostic suppression, unresolved-import relabeling, or allocation-failure relabeling was needed. #783 remains open for further proven fallback families.

9 days ago

Verified recovery-provenance slice landed directly on main in 192ee78 (feat(ts): trace implicit constructor recoveries (#783)).

Every new-expression path that emits TS7009 and returns the implicit any-like recovery now records Primitive.unmodeled at the new expression. This covers the early checked-JavaScript/imported-function paths and the shared terminal constructability path. Constructable classes remain ordinary instance types and do not emit HM9002.

Verification, all serial under HOME_RUN_MAX_MB=3840:

  • focused TypeScript + checked-JavaScript positive/negative regression: pass, exactly one TS7009 + one HM9002 per recovery setup, constructable class silent; 1,801 MB peak
  • broader new-expression checker family: pass; 1,750 MB peak
  • complete ts_checker suite: pass; 2,210 MB peak
  • normal conformance: 16/16 smoke, 86/86 category, 586/586 baseline-aware; 2,210 MB peak
  • stripped ReleaseFast home-tsc build: pass; 2,866 MB peak
  • byte-pinned Zod 4.5.2 ratchet: current=0, baseline=0, production_files=106; 1,016 MB peak
  • Zig format, README Pickier, and diff checks: pass

The commit contains exactly 3 files and was pushed directly to origin/main under glennmichael123 gtorregosa@gmail.com, without coauthors. #783 remains open for further evidence-backed recovery migrations.

9 days ago

Another evidence-backed recovery family landed directly on main in 39fe6c4 (feat(ts): trace numeric index recoveries (#783)).

Both element-access paths that emit TS7015 because a non-number key is applied to a numeric-only index signature now record Primitive.unmodeled at the complete access expression. Optional-chain widening remains downstream of the recorded recovery. Coverage exercises both a normal numeric-only index signature and the Window & typeof globalThis branch; valid numeric indexing remains concrete and produces no recovery origin.

Verification, all serial under HOME_RUN_MAX_MB=3840:

  • focused six-test TS7015 family: pass; positive paths each require TS7015 + HM9002 + internal unmodeled type, numeric negative requires zero recovery origins; 1,812 MB peak
  • complete ts_checker suite: pass; 2,089 MB peak
  • normal conformance: 16/16 smoke, 86/86 category, 586/586 baseline-aware; 2,218 MB peak
  • stripped ReleaseFast home-tsc build: pass; 2,875 MB peak
  • byte-pinned Zod 4.5.2 ratchet: current=0, baseline=0, production_files=106; 922 MB peak
  • Zig format, README Pickier, and diff checks: pass

The commit contains exactly 3 files and was pushed directly to origin/main under glennmichael123 gtorregosa@gmail.com, without coauthors. #783 remains open for further proven recovery migrations.

9 days ago

A third verified recovery family landed directly on main in 424da31 (feat(ts): trace global this recoveries (#783)).

All three any-like TS7017 return routes now record Primitive.unmodeled when a missing property is accessed on typeof globalThis:

  • qualified typeof this.member queries
  • ordinary global-this member access
  • the shared global-member helper

The helper still returns ordinary compatibility any when it handled a valid global property or emitted a different diagnostic.

Verification, all serial under HOME_RUN_MAX_MB=3840:

  • broader global-related checker family: pass, including exact TS7017-to-HM9002 cardinality for plain script access, top-level-arrow type query, and checked-JavaScript global assignments; 1,754 MB peak
  • complete ts_checker suite: pass; 2,073 MB peak
  • normal conformance: 16/16 smoke, 86/86 category, 586/586 baseline-aware; 2,062 MB peak
  • stripped ReleaseFast home-tsc build: pass; 2,896 MB peak
  • byte-pinned Zod 4.5.2 ratchet: current=0, baseline=0, production_files=106; 971 MB peak
  • Zig format, README Pickier, and diff checks: pass

The commit contains exactly 3 files and was pushed directly to origin/main under glennmichael123 gtorregosa@gmail.com, without coauthors. #783 remains open for further proven recovery migrations.

9 days ago

Shipped directly to origin/main in 2e15da2: feat(ts): trace implicit element recoveries (#783). The 3-file batch records TS7052 and TS7053 any-like element-access fallbacks as Primitive.unmodeled at the complete access node, covering reads, writes, diagnostic chains, and get/set suggestions while preserving TS7015 anchoring and valid numeric-string indexing. Verification: focused TS705x tests pass at 1,740 MB; complete checker passes at 2,267 MB; conformance passes 16/16 smoke, 86/86 category, and 586/586 baseline-aware at 2,104 MB; stripped ReleaseFast home-tsc builds at 2,994 MB; pinned Zod 4.5.2 ratchet remains 0/0 HM9002 across 106 production files at 990 MB. README and parity-plan documentation were updated with the measured checkpoint.

9 days ago

Shipped directly to origin/main in e2b727c: feat(ts): trace implicit this recoveries (#783). The 3-file batch records active TS2683 any-like recovery at identifier-form and this_expr nodes. It preserves concrete class/constructor/object-method bindings, leaves TS7041 global-arrow capture modeled, and recognizes @noImplicitThis: false before provenance recording so the permitted receiver remains ordinary any. A checked-JS constructor regression now explicitly proves its independent TS7009 and TS2683 origins. Verification under HOME_RUN_MAX_MB=3840: broader this family passes at 1,774 MB; dual-recovery interaction passes at 1,741 MB; complete checker passes at 2,083 MB; conformance passes 16/16 smoke, 86/86 category, and 586/586 baseline-aware at 2,081 MB; stripped ReleaseFast home-tsc builds at 3,016 MB; pinned 106-file Zod ratchet remains 0/0 HM9002 at 899 MB. README and parity-plan checkpoint updated.

9 days ago

Pushed 4da3d4a directly to main: feat(ts): trace invalid this recoveries (#783). Direct this expressions that emit TS2332 in enum initializers or TS2331 in namespace bodies now retain their checker-synthesized any provenance as HM9002/Primitive.unmodeled. The TS2331 regression disables noImplicitThis so the origin is proven independent of TS2683. TS2465 computed-property and TS2816 legacy-decorated-static cases are explicit zero-HM9002 controls because those paths retain a concrete owning-class type. Verification: focused invalid-this and broader this tests pass; complete checker 4,439/4,439 at 2,273 MB; conformance 16/16 smoke, 86/86 category, 586/586 baseline-aware at 2,245 MB; stripped ReleaseFast build at 2,863 MB; pinned Zod 4.5.2 ratchet 0/0 HM9002 across 106 files at 924 MB. Exactly 3 files changed; author and committer are glennmichael123 gtorregosa@gmail.com.

9 days ago

Pushed 40d4c7d directly to main: feat(ts): trace this query recoveries (#783). The typeof-this resolver now records Primitive.unmodeled for its proven diagnosed any substitutions: TS2332 enum initializers, TS2465 computed property names, TS2816 legacy-decorated static initializers, and terminal TS2331 namespace or TS2683 implicit-this paths. Permitted implicit queries stay ordinary any, and concrete global/class/current-this exits remain untouched. This preserves the semantic distinction that direct TS2816 may retain a class type while the query branch explicitly returns any. Verification under HOME_RUN_MAX_MB=3840: all focused positive/negative query tests and the broader typeof-this family pass; complete checker passes at 2,098 MB; conformance passes 16/16 smoke, 86/86 category, and 586/586 baseline-aware at 2,253 MB; stripped ReleaseFast home-tsc builds at 3,012 MB; pinned Zod 4.5.2 remains 0/0 HM9002 over 106 files at 974 MB. Exactly 3 files; author and committer glennmichael123 gtorregosa@gmail.com; no coauthors.

9 days ago

Pushed 8e8d7de directly to main: feat(ts): trace invalid new recoveries (#783). New expressions that emit TS2350 for a non-void call-only target or TS2679 for a void this-parameter now record Primitive.unmodeled at the complete new expression alongside TS7009. The strict-false checked-JavaScript self-return early path is covered, including two distinct self-returning constructions producing two origins. Valid constructable and non-void-this controls remain at zero HM9002. Verification under HOME_RUN_MAX_MB=3840: focused TS/checked-JS families pass; complete checker passes at 2,305 MB; conformance 16/16 smoke, 86/86 category, 586/586 baseline-aware at 2,201 MB; stripped ReleaseFast build at 2,872 MB; pinned Zod 4.5.2 remains 0/0 over 106 files at 952 MB. Exactly 3 files; glennmichael123 author/committer; no coauthors.

9 days ago

Landed 731e7cba2 on main: feat(ts): trace non-constructable recoveries (#783).

TS2351 new-expression fallbacks now preserve their checker-origin provenance as Primitive.unmodeled at the complete expression. Coverage includes primitive/template-literal callees, no-construct-signature union chains (TS2759/TS2761), mixed constructable/non-constructable unions (TS2760), incompatible construct overloads (TS2762), and namespace imports (TS7038). A union containing explicit any remains the zero-HM9002 control.

Verified serially under the 3,840 MB supervisor:

  • focused TS2351 / construct-union / namespace-import / primitive-callee families: pass (peak <= 172 MB)
  • complete ts_checker: pass (2,141 MB)
  • conformance: 16/16 smoke, 86/86 category, 586/586 baseline-aware (774 MB)
  • cold stripped ReleaseFast home-tsc after pruning .zig-cache: pass (3,019 MB)
  • byte-pinned Zod 4.5.2 ratchet: 0 HM9002 / zero ceiling across 106 production files (972 MB)
  • Zig format, diff hygiene, and README Pickier: pass; parity-plan Pickier remains at its unchanged pre-existing 227 findings

The commit contains exactly three files and was pushed directly to origin/main under Glenn's author/committer identity with no coauthors.

9 days ago

Landed a4c99a24c directly on main: feat(ts): trace value-as-type recoveries (#783).

Any-like TS2749 continuations now record Primitive.unmodeled at the offending type reference. Covered paths include direct/generic value-only names, qualified namespace members, relative and bare imported values, and checked-JavaScript JSDoc forms (constructor functions, class expressions, require aliases, file-level @import, and legacy event). The shared helper records provenance only when TS2749 was actually emitted, preserving reporter suppression for valid type-space meaning. A diagnosed reference that retains a concrete narrowed type remains unmarked.

The mixed checked-JS regression distinguishes two TS2749 origins from two existing TS7009 and two TS2683 origins rather than misattributing all six.

Authoritative serial gates under HOME_RUN_MAX_MB=3840:

  • complete ts_checker: 4,442/4,442 pass, 2,328 MB peak
  • conformance: 16/16 smoke, 86/86 category, 586/586 baseline-aware, 2,095 MB peak
  • stripped ReleaseFast home-tsc: pass, 2,809 MB peak
  • byte-pinned Zod 4.5.2 ratchet: current=0, baseline=0, 106 production files, 1,000 MB peak
  • Zig format, diff hygiene, and README Pickier: pass
  • parity-plan Pickier: unchanged pre-existing 227 findings (3 errors, 224 warnings)

Exactly three files changed; author and committer are glennmichael123 <gtorregosa@gmail.com> with no coauthors. #783 remains open for further evidence-backed fallback migrations.

9 days ago

Pushed 7585e471d4bab720cfb81111554a82ff002fc788 directly to origin/main: feat(ts): trace JSX arity recoveries (#783).

The two class-component JSX paths that report TS2558 and replace the instantiated component type with an any-like continuation now record Primitive.unmodeled at the complete JSX element. This covers non-generic components receiving type arguments and generic components receiving the wrong number. TS2558 remains anchored on the first explicit type argument; intrinsic-element TS2558 is unchanged because it does not substitute an any-like class instance. The regression proves two diagnosed paths produce exactly two HM9002 origins while valid generic and non-generic controls remain at zero.

Verification, all serial under HOME_RUN_MAX_MB=3840:

  • complete ts_checker: pass, 2,268 MB peak
  • conformance: 16/16 smoke, 86/86 category, 586/586 baseline-aware, 2,138 MB peak
  • stripped ReleaseFast home-tsc: build pass, 2,857 MB peak
  • byte-pinned Zod 4.5.2 ratchet: 0/0 HM9002 across 106 production files, 920 MB peak
  • Zig formatting, diff checks, and README Pickier: pass
  • parity-plan Pickier: unchanged pre-existing baseline of 227 findings (3 errors, 224 warnings)

The commit contains exactly three files, is authored and committed by glennmichael123 <gtorregosa@gmail.com>, and has no coauthors. #783 remains open for further evidence-backed fallback migration.

9 days ago

Pushed 901c0d853a08ae69582994fedbf03b4a634ea1eb directly to origin/main: feat(ts): trace CommonJS import recoveries (#783).

Three relative virtual-file CommonJS import-member paths that emit TS2694 and then continue with an any-like type now record Primitive.unmodeled: type-only JSDoc typedefs requested in value space, runtime-only named exports requested as types, and export-object properties without type meaning. JSDoc syntax can lower through multiple HIR anchors while TS2694 is deduplicated by source position, so the migration uses the result-sensitive diagnostic helper and records only the anchor that owns the explaining diagnostic. A modeled CommonJS exported-class import is an explicit zero-origin control.

Verification, all serial under HOME_RUN_MAX_MB=3840:

  • complete ts_checker: 4,444/4,444 pass, 2,259 MB peak
  • conformance: 16/16 smoke, 86/86 category, 586/586 baseline-aware, 2,106 MB peak
  • stripped ReleaseFast home-tsc: build pass, 3,026 MB peak
  • byte-pinned Zod 4.5.2 ratchet: 0/0 HM9002 across 106 production files, 935 MB peak
  • Zig formatting, diff checks, and README Pickier: pass
  • parity-plan Pickier: unchanged pre-existing baseline of 227 findings (3 errors, 224 warnings)

The commit contains exactly three files, is authored and committed by glennmichael123 <gtorregosa@gmail.com>, and has no coauthors. #783 remains open for further evidence-backed fallback migration.

9 days ago

Pushed 02de35cdf74c9506d801e08e2f242ff2aa817830 directly to origin/main: feat(ts): trace import namespace recoveries (#783).

The two mirror bare module-namespace misuse paths now retain checker-synthesized any provenance: TS1340 when import("mod") is used directly as a type without a type-bearing export = target, and TS1339 when typeof import("mod") queries a type-only export assignment as a value. Both use result-sensitive diagnostic ownership before recording Primitive.unmodeled. Mirror controls prove that a value-bearing module under typeof import and a class export assignment used as a bare import type remain valid with zero HM9002 origins.

Verification, all serial under HOME_RUN_MAX_MB=3840:

  • complete ts_checker: pass, 2,106 MB peak
  • conformance: 16/16 smoke, 86/86 category, 586/586 baseline-aware, 2,198 MB peak
  • stripped ReleaseFast home-tsc: build pass, 3,008 MB peak
  • byte-pinned Zod 4.5.2 ratchet: 0/0 HM9002 across 106 production files, 918 MB peak
  • Zig formatting, diff checks, and README Pickier: pass
  • parity-plan Pickier: unchanged pre-existing baseline of 227 findings (3 errors, 224 warnings)

The commit contains exactly three files, is authored and committed by glennmichael123 <gtorregosa@gmail.com>, and has no coauthors. #783 remains open for further evidence-backed fallback migration.

9 days ago

Pushed 3fab9775912ed49f73db384a1a13e83b2081e86b directly to origin/main: feat(ts): trace type-only typeof recoveries (#783).

TS2693 continuations produced by querying a type-only name as a value now record Primitive.unmodeled. This covers all ten primitive/type keywords handled by the path (string, number, boolean, bigint, symbol, object, any, unknown, never, and void) plus generic type parameters without a value binding. A contextual generic parameter with a runtime value binding is an explicit zero-origin control.

Verification, all serial under HOME_RUN_MAX_MB=3840:

  • complete ts_checker: pass, 2,211 MB peak
  • conformance: 16/16 smoke, 86/86 category, 586/586 baseline-aware, 2,074 MB peak
  • stripped ReleaseFast home-tsc: build pass, 2,938 MB peak
  • byte-pinned Zod 4.5.2 ratchet: 0/0 HM9002 across 106 production files, 923 MB peak
  • Zig formatting, diff checks, and README Pickier: pass
  • parity-plan Pickier: unchanged pre-existing baseline of 227 findings (3 errors, 224 warnings)

The commit contains exactly three files, is authored and committed by glennmichael123 <gtorregosa@gmail.com>, and has no coauthors. #783 remains open for further evidence-backed fallback migration.

9 days ago

Pushed 9a1c2b741 directly to main: feat(ts): trace unresolved typeof recoveries (#783).

This ports TS2304-linked any provenance for two proven type-query recoveries: parser-preserved typeof null, and unresolved dotted queries such as typeof A.B when the root value name is missing. Valid typeof undefined and resolved dotted value queries are explicit zero-HM9002 controls; visible roots with unresolved members retain their existing compatibility behavior.

Verification (all serial and memory-guarded):

  • focused positive cases pass
  • complete ts_checker suite passes (2,078 MB peak)
  • conformance remains 16/16 smoke, 86/86 category, 586/586 baseline-aware (2,142 MB peak)
  • stripped ReleaseFast home-tsc builds (2,992 MB peak)
  • byte-pinned Zod 4.5.2 ratchet remains 0 HM9002 / 106 production files (1,006 MB peak)
  • README Pickier passes; parity-plan lint remains at the exact pre-existing 227 findings

Commit author and committer: glennmichael123 <gtorregosa@gmail.com>; no coauthors.

9 days ago

Pushed d19aaea94 directly to main: feat(ts): trace type-only value recoveries (#783).

Identifier expressions that emit TS1361 (import type used as a value) or TS1362 (normally imported name originating from export type) now retain their any-like recovery provenance. Recording is guarded by both the matching diagnostic and an any-like result, so normal value imports remain zero-origin controls.

This migration exposed an actual sentinel-semantics gap: Primitive.unmodeled was reaching exact-any call checks and adding a spurious TS2349. The three generic-call/callability branches now use the shared any-like predicate, preserving TS1361 while still recording HM9002. Focused coverage includes local and cross-module TS1361, TS1362, direct call and construction uses, and a normal value-export control.

Serial guarded verification:

  • complete ts_checker suite passes (2,032 MB peak)
  • conformance remains 16/16 smoke, 86/86 category, 586/586 baseline-aware (2,201 MB peak)
  • stripped ReleaseFast home-tsc builds (2,820 MB peak)
  • byte-pinned Zod 4.5.2 ratchet remains 0 HM9002 across 106 production files (921 MB peak)
  • README Pickier passes; parity-plan lint remains at the exact pre-existing 227 findings

Exactly three files; author and committer glennmichael123 <gtorregosa@gmail.com>; no coauthors.

9 days ago

Pushed 2f0ff8bf1 directly to main: feat(ts): trace namespace value recoveries (#783).

TS2708 any-like continuations now retain HM9002 provenance for direct namespace-only identifier expressions, namespace-qualified heritage/member access, and typeof queries through an import-equals alias whose target namespace has no runtime value. The expression path requires both an any-like result and an attached TS2708; the type-query path uses result-sensitive diagnostic ownership. Runtime namespaces and the permitted CommonJS export = N namespace form remain zero-origin controls.

Serial guarded verification:

  • focused direct, heritage/member, type-query, and export-equals control cases pass (all below 1.85 GB)
  • complete ts_checker suite passes (2,154 MB peak)
  • conformance remains 16/16 smoke, 86/86 category, 586/586 baseline-aware (2,129 MB peak)
  • stripped ReleaseFast home-tsc builds (3,005 MB peak)
  • byte-pinned Zod 4.5.2 ratchet remains 0 HM9002 across 106 production files (983 MB peak)
  • README Pickier passes; parity-plan lint remains at the exact pre-existing 227 findings

Exactly three files; author and committer glennmichael123 <gtorregosa@gmail.com>; no coauthors.

9 days ago

Pushed f82d12f65 (feat(ts): trace unresolved value recoveries (#783)) directly to main.

This checkpoint migrates TS2304/TS2552 identifier-expression recoveries from ordinary any to Primitive.unmodeled, covering reads, calls, construction, property access, explicit type arguments, and the $ERROR suggestion path. Declared any values remain a zero-origin control. Integration also fixed two exact-any assumptions exposed by the distinct provenance sentinel: unresolved instantiation expressions no longer add spurious TS2635, and malformed for-of computed binding keys retain TS2538.

Verification (all serial under HOME_RUN_MAX_MB=3840):

  • focused positive/negative and integration regressions: pass
  • checker: 4,450/4,450 pass; 2,124 MB peak
  • conformance: 16/16 smoke, 86/86 category, 586/586 baseline-aware; 2,213 MB peak
  • stripped ReleaseFast home-tsc: pass; 2,926 MB peak
  • Zod 4.5.2 ratchet: 0 HM9002 / 106 production files; 980 MB peak
  • zig fmt --check, git diff --check, and README Pickier: pass
  • parity-plan Pickier remains at its unchanged pre-existing baseline: 227 findings (3 errors, 224 warnings)
9 days ago

Pushed c8b0f8e0f (feat(ts): trace unknown object recoveries (#783)) directly to main.

Diagnosed operations on unknown now retain Primitive.unmodeled at the complete any-like result expression for member access, element access, calls, and construction. Entity-name operands preserve TS18046; parenthesized/asserted non-entity operands preserve TS2571. Explicit any remains an ordinary-any zero-origin control.

Verification (all serial under HOME_RUN_MAX_MB=3840):

  • focused TS18046, TS2571, and explicit-any controls: pass
  • checker: 4,453/4,453 pass; 2,080 MB peak
  • conformance: 16/16 smoke, 86/86 category, 586/586 baseline-aware; 2,253 MB peak
  • stripped ReleaseFast home-tsc: pass; 3,004 MB peak
  • Zod 4.5.2 ratchet: 0 HM9002 / 106 production files; 919 MB peak
  • zig fmt --check, git diff --check, and README Pickier: pass
  • parity-plan Pickier remains at its unchanged pre-existing baseline: 227 findings (3 errors, 224 warnings)
9 days ago

Pushed af4ef8449 (feat(ts): trace getter call recoveries (#783)) directly to main.

Zero-argument calls that emit TS6234 because the callee is a getter now retain Primitive.unmodeled at the complete call expression, including the early unknown-typed getter path and optional-chain widening. The TS6234 diagnostic remains anchored on the accessor expression with its TS2757 no-call-signature chain. Instance/static getter calls each record one HM9002 origin; an accepted getter/setter-pair compatibility path remains zero-origin.

Verification (all serial under HOME_RUN_MAX_MB=3840):

  • focused instance, static, and getter/setter control cases: pass
  • checker: 4,453/4,453 pass; 2,075 MB peak
  • conformance: 16/16 smoke, 86/86 category, 586/586 baseline-aware; 2,251 MB peak
  • stripped ReleaseFast home-tsc: pass; 2,881 MB peak
  • Zod 4.5.2 ratchet: 0 HM9002 / 106 production files; 964 MB peak
  • zig fmt --check, git diff --check, and README Pickier: pass
  • parity-plan Pickier remains at its unchanged pre-existing baseline: 227 findings (3 errors, 224 warnings)
9 days ago

Pushed b9152be87 (feat(ts): trace invalid call recoveries (#783)) directly to main.

Calls that emit TS2348 for construct-only values or TS2349 for non-callable values now retain Primitive.unmodeled at the complete call result, including optional-call widening. Explicit/optional calls through declared any remain zero-origin controls.

The full checker initially exposed one exact-any integration gap: a TS2349 result used as a computed destructuring key lost its existing TS2538 continuation. That consumer and its neighboring skip gate now use the shared any-like predicate; the focused regression and full rerun pass.

Verification (all serial under HOME_RUN_MAX_MB=3840):

  • focused TS2348/TS2349, explicit-any, and computed-key regressions: pass
  • checker: 4,455/4,455 pass; 2,217 MB peak
  • conformance: 16/16 smoke, 86/86 category, 586/586 baseline-aware; 2,087 MB peak
  • stripped ReleaseFast home-tsc: pass; 2,998 MB peak
  • Zod 4.5.2 ratchet: 0 HM9002 / 106 production files; 934 MB peak
  • zig fmt --check, git diff --check, and README Pickier: pass
  • parity-plan Pickier remains at its unchanged pre-existing baseline: 227 findings (3 errors, 224 warnings)
9 days ago

Shipped 2e35d99 directly to main: feat(ts): trace specialized member recoveries (#783).

This slice preserves Primitive.unmodeled for stable member-access recoveries diagnosed by TS2550, TS2551, TS2576, and TS2812. Valid members, declared any, and bare TS2339 remain zero-origin controls. The computed-property validator now treats the full any-like family consistently.

The Zod gate caught an important boundary: adding generic TS2339 at the shared expression boundary produced 389 HM9002 origins from only 31 final TS2339 diagnostics because Home currently emits and later removes speculative TS2339 diagnostics during resolution. That scope was removed rather than weakening the ratchet; TS2339 needs lifecycle-aware provenance in a later slice.

Verification:

  • full checker: 4,456/4,456, 2,327 MB guarded peak
  • conformance: 16/16 smoke, 86/86 category, 586/586 baseline-aware, 2,227 MB peak
  • stripped ReleaseFast home-tsc: pass, 3,007 MB peak
  • pinned Zod 4.5.2: 0 HM9002 / 106 production files, 904 MB peak
  • zig fmt, diff check, and README Pickier: pass
  • TS parity plan Pickier: unchanged pre-existing 227 findings
9 days ago

Pushed 024fa68 directly to origin/main: feat(ts): trace invalid super recoveries (#783).

Invalid super() calls that recover through any now retain Primitive.unmodeled at the complete call expression after argument checking. Covered stable diagnostics are TS2335 outside a derived class, TS2337 outside a constructor or inside a nested function, and TS17005 in an extends-null constructor. A valid derived-constructor super() remains void and records no HM9002 origin.

Verification, all serial under HOME_RUN_MAX_MB=3840:

  • focused invalid-super regression: pass, exactly 4 diagnostics and 4 HM9002 origins; 282 MB peak
  • broader super checker family: pass; 162 MB peak
  • complete ts_checker: 4,457/4,457; 2,165 MB peak
  • conformance: 16/16 smoke, 86/86 category, 586/586 baseline-aware; 2,241 MB peak
  • stripped ReleaseFast home-tsc: pass; 3,007 MB peak
  • pinned Zod 4.5.2 ratchet: 0 HM9002 / 106 production files; 964 MB peak
  • Zig format, diff hygiene, and README Pickier: pass
  • parity-plan Pickier: unchanged pre-existing 227 findings

Exactly three files changed; author and committer are glennmichael123 gtorregosa@gmail.com; no coauthors.

9 days ago

Pushed 666666c directly to origin/main: feat(ts): trace illegal arguments recoveries (#783).

Illegal arguments identifiers that emit TS2815 in class field initializers or static blocks now retain Primitive.unmodeled. Local arguments bindings and ordinary nested function bodies remain zero-origin controls.

The full checker exposed a lifecycle bug that focused filters did not: deferred whole-file cleanup can discover recovery origins after the former Home-rule sweep. HM9001/HM9002 now run after diagnostic cleanup but still before source directives, preserving suppression behavior and making focused/full execution deterministic. TS2496 and TS2522 remain modeled arguments-object paths and were not relabeled. TS2662 was investigated and deliberately excluded because assignment-target checking can leave no any-valued expression.

Verification, all serial under HOME_RUN_MAX_MB=3840:

  • focused TS2815 positive/control tests: pass
  • complete ts_checker: 4,457/4,457; 2,287 MB peak
  • conformance: 16/16 smoke, 86/86 category, 586/586 baseline-aware; 2,079 MB peak
  • stripped ReleaseFast home-tsc: pass; 2,873 MB peak
  • pinned Zod 4.5.2 ratchet: 0 HM9002 / 106 production files; 963 MB peak
  • Zig format, diff hygiene, and README Pickier: pass
  • parity-plan Pickier: unchanged pre-existing 227 findings

Exactly three files changed; author and committer are glennmichael123 gtorregosa@gmail.com; no coauthors.

9 days ago

Shipped 4236a2f directly to origin/main: feat(ts): trace invalid super property recoveries (#783).

Bracketed super[expr] now mirrors dotted super.name in derived constructors: both perform TS17011 pre-super() checking and reject constructor-parameter initializers with TS2336. Diagnosed dot/bracket recoveries retain Primitive.unmodeled only when the completed access remains any-like. Focused coverage pins TS2335, TS2336, TS17011, TS2340, TS2466, TS2659, and TS2660; valid post-super() dot/bracket access and a valid base-method call remain zero-origin controls.

Verification, all serial under HOME_RUN_MAX_MB=3840:

  • focused invalid-super property regression: pass, exactly 7 HM9002 origins; 1,745 MB peak
  • complete super checker family: pass; 1,758 MB peak
  • complete ts_checker: 4,458/4,458; 2,065 MB peak
  • conformance: 16/16 smoke, 86/86 category, 586/586 baseline-aware; 2,232 MB peak
  • stripped ReleaseFast home-tsc: pass; 2,858 MB peak
  • pinned Zod 4.5.2: 0 HM9002 / 106 production files; 956 MB peak
  • Zig format, diff hygiene, and README Pickier: pass
  • TS parity plan Pickier: unchanged pre-existing 227 findings

Exactly three files changed; author and committer are glennmichael123 gtorregosa@gmail.com; no coauthors.

9 days ago

Shipped 03abd47 directly to origin/main: feat(ts): trace invalid element index recoveries (#783).

Value-level element accesses that emit TS2538 for bigint, object, or function indices now retain Primitive.unmodeled at the completed access. Classification requires both the final diagnostic on the index operand and an any-like result, so type-level indexed-access diagnostics remain separate. Declared-any and numeric indices into number[] remain concrete number controls with zero origins.

Verification, all serial under HOME_RUN_MAX_MB=3840:

  • focused TS2538 positive/control regression: pass, exactly 3 HM9002 origins; 1,752 MB peak
  • complete TS2538 checker family: pass; 1,716 MB peak
  • complete ts_checker: 4,459/4,459; 2,200 MB peak
  • conformance: 16/16 smoke, 86/86 category, 586/586 baseline-aware; 2,186 MB peak
  • stripped ReleaseFast home-tsc: pass; 3,000 MB peak
  • pinned Zod 4.5.2: 0 HM9002 / 106 production files; 946 MB peak
  • Zig format, diff hygiene, and README Pickier: pass
  • TS parity plan Pickier: unchanged pre-existing 227 findings

Exactly three files changed; author and committer are glennmichael123 gtorregosa@gmail.com; no coauthors.

9 days ago

Shipped c161da3 directly to origin/main: feat(ts): trace invalid object spread recoveries (#783).

Object literals that emit TS2698 for non-object spread sources now retain Primitive.unmodeled only at the literal whose completed result is any-like. A nested invalid spread records the inner recovery without relabeling the containing object. Number, string, and boolean spreads are covered; valid object and declared-any spreads remain zero-origin controls.

Verification, all serial under HOME_RUN_MAX_MB=3840:

  • focused TS2698 positive/control regression: pass, exactly 4 HM9002 origins; 1,829 MB peak
  • complete TS2698 checker family: pass; 1,725 MB peak
  • complete ts_checker: 4,460/4,460; 2,211 MB peak
  • conformance: 16/16 smoke, 86/86 category, 586/586 baseline-aware; 2,137 MB peak
  • stripped ReleaseFast home-tsc: pass; 2,847 MB peak
  • pinned Zod 4.5.2: 0 HM9002 / 106 production files; 1,046 MB peak
  • Zig format, diff hygiene, and README Pickier: pass
  • TS parity plan Pickier: unchanged pre-existing 227 findings

Exactly three files changed; author and committer are glennmichael123 gtorregosa@gmail.com; no coauthors.

9 days ago

Shipped 87d6d830b directly to origin/main: feat(ts): trace implicit yield recoveries (#783).

All TS7057 paths now retain Primitive.unmodeled on the exact yield expression whose sent value is checker-synthesized any: consumed bare yields, template substitutions, nested bare yields, implicit-any identifier operands, and unconstrained call arguments. Concrete contextual targets, unused yields, and explicitly annotated generator TNext channels remain zero-origin controls. Generator inference now treats the sentinel as any-like when deciding whether an uncontextualized yield contributes to TNext, preserving the existing inferred unknown channel.

The Zod gate exposed a stale prior measurement: exact clean c161da3be and the restored TS7057 build both produce the same three TS2698-linked origins, while the pinned 106-file production graph contains no yield expression. The reviewed ceiling is therefore corrected from 0 to 3 rather than suppressing real evidence: two sites in src/v4/classic/schemas.ts and one in src/v4/classic/from-json-schema.ts.

Verification, all serial under HOME_RUN_MAX_MB=3840:

  • focused TS7057 provenance: exactly 5 TS7057 + 5 HM9002; 1,830 MB peak
  • broader yield family: pass; 1,773 MB peak
  • complete checker: 4,461/4,461; 2,228 MB peak
  • conformance: 16/16 smoke, 86/86 category, 586/586 baseline-aware; 2,184 MB peak
  • stripped ReleaseFast home-tsc: pass; 3,072 MB peak
  • pinned Zod 4.5.2 ratchet: 3/3 HM9002 across 106 production files; 951 MB peak
  • ratchet equal/lower/growth/archive-integrity controls: pass
  • Zig format, JSON validation, diff hygiene, and README Pickier: pass
  • parity-plan Pickier remains at its exact pre-existing 227 findings

Exactly four files changed; author and committer are glennmichael123 <gtorregosa@gmail.com>; no coauthors. #783 remains open for further evidence-backed recovery migrations.

9 days ago

Landed 1f5fe5aee (feat(ts): trace inaccessible private recoveries (#783)) directly on main.

  • TS18013 inaccessible ECMAScript-private-member fallbacks now retain Primitive.unmodeled at the complete member access.
  • Coverage pins generic receivers, class-derived interfaces, and forward static private names.
  • TS18014 shadowing and legal same-class access remain concrete controls, so modeled member types are not mislabeled.
  • Focused regression passed at 1,812 MB; broader private-member family passed at 1,766 MB.
  • Full checker: 4,462/4,462.
  • Conformance: 16/16 smoke, 86/86 category, 586/586 baseline-aware (2,108 MB).
  • Stripped ReleaseFast compiler build passed (2,970 MB).
  • Byte-pinned Zod 4.5.2 ratchet remains 3/3 HM9002 across 106 production files (912 MB); no baseline growth.
  • Hermetic ratchet controls, Zig formatting, diff checks, and repository lint baselines passed.
9 days ago

Landed 65b08af95 (feat(ts): trace irrecoverable member recoveries (#783)) directly on main; it references follow-up #835.

  • Migrated four stable reporter-owned exits: TS18016 outside-class private names, direct property access on never, TS18031/TS18032 never-intersection reduction, and inherited static ECMAScript-private TS2339.
  • Ordinary speculative TS2339, declared any, valid members, and legal same-class private access remain excluded.
  • Focused regression: five exact diagnostics / five HM9002 origins, 1,760 MB.
  • Broader never family: pass at 1,728 MB; private family: pass at 1,748 MB.
  • Full checker: 4,463/4,463 at 2,146 MB.
  • Conformance: 16/16 smoke, 86/86 category, 586/586 baseline-aware at 2,222 MB.
  • Stripped ReleaseFast build: pass at 2,955 MB.
  • Pinned Zod 4.5.2: exactly 7/7 HM9002 across 106 production files at 956 MB.

The four newly visible Zod origins each pair with an existing Home-only TS2339-on-never in classic/from-json-schema.ts (line 649; line 670 twice; line 671). They are truthful #783 signal, not new diagnostics introduced by this migration. The reviewed baseline is therefore 7, and #835 tracks removal of the underlying false-never flow bug without suppression, arbitrary widening, source heuristics, or ratchet lowering.

9 days ago

948e7809d closes the independent #835 false-never flow bug exposed by the direct-member provenance work.

The unchanged, byte-pinned Zod 4.5.2 graph now reports exactly 3 HM9002 recoveries—the reviewed TS2698 trio—down from 7. The four TS2339-on-never diagnostics and their HM9002 partners at from-json-schema.ts lines 649, 670 (twice), and 671 are gone, with no new diagnostic identities. Full checker and conformance gates remain green. #783 remains the provenance umbrella.

9 days ago

Landed e3fca4f98 directly on origin/main: feat(ts): trace unavailable generator recoveries (#783).

  • Bare and parameterized Generator / AsyncGenerator references now retain Primitive.unmodeled when source @lib, configured libraries, or the target tier excludes their ambient declaration and Home reports TS2304/TS2583.
  • Parameterized local and imported declarations now shadow those ambient built-ins before library availability is considered; the focused regression keeps default-library, local-declaration, and imported-declaration controls at zero HM9002.
  • Focused generator-library regression: pass, 1,820 MB peak.
  • Complete generator checker family: pass, 1,799 MB peak.
  • Complete checker: 4,465/4,465, 2,190 MB peak.
  • Conformance: 16/16 smoke, 86/86 category, 586/586 baseline-aware, 2,169 MB peak.
  • Stripped ReleaseFast home-tsc: pass, 3,013 MB peak.
  • Byte-pinned Zod 4.5.2, two serial runs: exactly 196 ordinary TS diagnostics and 3/3 HM9002 across 106 production files; 991 MB and 949 MB peaks; outputs byte-identical.
  • Ratchet hermetic controls, Zig formatting, diff hygiene, and README Pickier pass. The parity plan retains its exact pre-existing Pickier baseline of 227 findings.

The commit changes exactly three files, is authored and committed by glennmichael123 <gtorregosa@gmail.com>, and has no coauthors. #783 remains open for additional evidence-backed recovery migrations.

9 days ago

Landed 36b4a1725 directly on origin/main: feat(ts): trace generic arity any recoveries (#783).

This migration is result-sensitive rather than code-wide: TS2314 now retains Primitive.unmodeled only where Home actually substitutes any—a bare built-in Array type and a checked-JavaScript generic @typedef missing required type arguments, including re-entry after the TS2314 already exists. Ordinary generic aliases and user-declared Array<T> interfaces still continue with a modeled body after TS2314 and remain zero-origin; supplied type arguments are valid controls.

Verification, all serial under HOME_RUN_MAX_MB=3840:

  • focused three-way provenance/control regression: pass, 1,843 MB peak
  • broad generic checker family: pass, 1,779 MB peak
  • complete checker: 4,466/4,466, 2,131 MB peak
  • conformance: 16/16 smoke, 86/86 category, 586/586 baseline-aware, 2,131 MB peak
  • stripped ReleaseFast home-tsc: pass, 2,980 MB peak
  • byte-pinned Zod 4.5.2, two serial runs: byte-identical, 196 ordinary TS diagnostics and exactly 3/3 HM9002 across 106 production files; 898 MB and 1,017 MB peaks
  • ratchet controls, Zig formatting, diff hygiene, and README Pickier: pass
  • parity plan Pickier: unchanged pre-existing 227 findings

Exactly three files changed; author and committer are glennmichael123 <gtorregosa@gmail.com>; no coauthors. #783 remains open for further proven fallback migrations.

9 days ago

Pushed b581226 directly to main: feat(ts): trace uppercase nullish type recoveries (#783).

Unresolved Null and Undefined generic arguments now retain unmodeled-any provenance only where lowering actually substitutes any. Direct type-position TS2304 remains zero-origin, repeated lowering emits the diagnostic once, and visible local declarations named Null or Undefined remain modeled.

Guarded verification: focused recovery/shadowing 1,768 MB; direct controls 1,777 MB; adjacent TS2550 control 1,803 MB; full checker 4,468/4,468 at 2,210 MB; conformance 16/16, 86/86, 586/586 at 2,267 MB; stripped ReleaseFast 2,872 MB. Two serial Zod 4.5.2 runs held 196 TS diagnostics and 3/3 HM9002 at 965/945 MB; normalized diagnostics were identical and ratchet controls passed.

9 days ago

Pushed 110143722 directly to main: feat(ts): trace unavailable DOM type recoveries (#783).

Excluded-DOM Element and Document type references now retain Primitive.unmodeled when unresolved-name reporting is followed by an any substitution. The resolution guard now checks visible declarations explicitly, so local interfaces with those names win before the ambient-library fallback is considered.

Guarded verification: focused Element 121 MB; focused virtual-declaration Document 158 MB; broader DOM family 143 MB; full checker 4,468/4,468 at 2,272 MB; conformance 16/16, 86/86, 586/586 at 2,226 MB; stripped ReleaseFast 2,816 MB. Two serial Zod 4.5.2 runs held 196 TS diagnostics and 3/3 HM9002 at 946/916 MB; normalized diagnostics were identical and ratchet controls passed. Exactly three files; author and committer glennmichael123 gtorregosa@gmail.com; no coauthors.

9 days ago

Pushed 43f4f45 directly to main: feat(ts): trace unavailable library value recoveries (#783).

The checker now retains Primitive.unmodeled provenance for verified value-space recoveries after TS2583 (SharedArrayBuffer / Atomics), TS2584 (console / name with DOM excluded), and direct TS2304 window use with an explicit non-DOM library set. Target-library diagnostics are deduplicated once per node. TS2585 Promise / Symbol paths were deliberately excluded because the all-tests path does not consistently own the final recovered expression type.

Validation: focused families passed at 131–161 MB; checker 4,468/4,468 at 2,285 MB; conformance 16/16, 86/86, and 586/586 at 2,244 MB; stripped ReleaseFast at 3,009 MB; two pinned Zod 4.5.2 runs were identical after path normalization with 196 TS diagnostics and exactly 3/3 HM9002, peaking at 1,002 MB and 971 MB. Ratchet controls passed.

9 days ago

Pushed 2d71c5b directly to main: feat(ts): trace unresolved bare type recoveries (#783).

Stable TS2304 exits for unresolved bare type references now retain Primitive.unmodeled at the owning type node, including cross-virtual-section, reserved-word, malformed-open-angle, and unresolved type-assertion paths. Invalid bare intrinsic alias bodies now do the same after TS2795. The audit also fixed canonical Uppercase = intrinsic and BuiltinIteratorReturn = intrinsic declarations so they take an explicit valid-intrinsic path with no spurious TS2304 or HM9002.

Verification under HOME_RUN_MAX_MB=3840: focused TS2795 family passed at 1,806 MB; mixed diagnosed-operand regression at 1,783 MB; complete checker 4,468/4,468 at 2,096 MB; conformance 16/16, 86/86, and 586/586 at 2,089 MB; serialized stripped ReleaseFast build at 3,021 MB. Two pinned Zod 4.5.2 runs were normalized-identical with 196 TS diagnostics and exactly 3/3 HM9002 at 944 MB and 953 MB; ratchet controls passed at 11 MB. The first cold unstripped ReleaseFast attempt was safely stopped at 3,864 MB rather than raising the hard ceiling.

9 days ago

Pushed 4b1178b directly to main: feat(ts): trace unresolved parameterized type recoveries (#783).

The generic type-reference fallback now keeps diagnostic ownership exact: value-only owners such as make<string> retain Primitive.unmodeled after TS2749, while unresolved owners such as Missing<string> retain it after TS2304. Previously both exits tested only for TS2749, leaving the TS2304 path as indistinguishable any. Declared generic interfaces and supported built-ins remain modeled controls.

Guarded verification: focused TS2304 recovery 1,809 MB; adjacent TS2749 control 1,789 MB; checker 4,469/4,469 at 2,102 MB; conformance 16/16, 86/86, and 586/586 at 2,213 MB; serialized stripped ReleaseFast 2,878 MB. Two pinned Zod 4.5.2 runs were normalized-identical with 196 TS diagnostics and exactly 3/3 HM9002 at 910 MB and 958 MB; ratchet controls pass.

9 days ago

Landed and pushed 063ce79 (feat(ts): trace qualified type recoveries).

Qualified type-reference fallback now retains Primitive.unmodeled only when the exact reference owns a recovery diagnostic. This covers TS2503/TS2833 missing roots, TS2702/TS2713 type roots used as namespaces, and TS2339/TS2694 missing namespace members; the existing TS2749 qualified-value path remains intact. Modeled ambient and runtime namespace controls remain zero-origin.

Verification under the 3,840 MB supervisor:

  • focused six-branch regression: pass, 1,807 MB peak
  • adjacent TS2749 control: pass, 1,703 MB peak
  • complete ts_checker suite: 4,470/4,470, 2,254 MB peak
  • normal conformance: 16/16 smoke, 86/86 category, 586/586 baseline-aware, 2,088 MB peak
  • serialized stripped ReleaseFast home-tsc: pass, 2,854 MB peak
  • byte-pinned Zod 4.5.2 twice: 106 files, 196 TS diagnostics, exactly 3/3 HM9002, 897/900 MB peaks, normalized-identical output
  • ratchet controls, Zig format, README Pickier, and diff check: pass

The README and TypeScript parity plan document the checkpoint. The reviewed Zod ceiling remains 3.

9 days ago

Landed and pushed 709d07b (feat(ts): trace inaccessible generic recoveries).

The compilation-wide generic-alias registry can see aliases from sibling virtual modules, but those aliases are not type-visible without an import. The guarded TS2304 path now retains Primitive.unmodeled instead of returning ordinary any. The regression pairs an inaccessible StringKeyOf<t> with an explicitly imported alias that remains modeled and zero-origin.

Verification under the 3,840 MB supervisor:

  • focused hidden-generic regression: pass, 1,845 MB peak
  • complete ts_checker suite: 4,470/4,470, 2,277 MB peak
  • normal conformance: 16/16 smoke, 86/86 category, 586/586 baseline-aware, 2,094 MB peak
  • serialized stripped ReleaseFast home-tsc: pass, 2,858 MB peak
  • byte-pinned Zod 4.5.2 twice: 106 files, 196 TS diagnostics, exactly 3/3 HM9002, 905/927 MB peaks, normalized-identical output
  • ratchet controls: pass, 11 MB peak
  • Zig format, README Pickier, and diff check: pass; parity-plan Pickier remains at the exact pre-existing 227 findings

The README and TypeScript parity plan document the checkpoint. The reviewed Zod ceiling remains 3.

9 days ago

Landed and pushed 8b52089 (feat(ts): trace missing import type recoveries).

The missing import-type reporter now returns the exact diagnostic code it emitted, and the lowering path uses that code to retain Primitive.unmodeled only for the diagnosed any-like fallback. This covers TS2307 under normal resolution and TS2792 for a missing bare package under explicit classic resolution. A resolved ambient import-type member remains modeled, and TS1340 remains suppressed when module resolution itself failed.

Verification under the 3,840 MB supervisor:

  • focused normal/classic/resolved regression: pass, 1,778 MB peak
  • complete ts_checker suite: 4,470/4,470, 2,043 MB peak
  • normal conformance: 16/16 smoke, 86/86 category, 586/586 baseline-aware, 2,076 MB peak
  • serialized stripped ReleaseFast home-tsc: pass, 3,005 MB peak
  • byte-pinned Zod 4.5.2 twice: 106 files, 196 TS diagnostics, exactly 3/3 HM9002, 944/945 MB peaks, normalized-identical output
  • ratchet controls, Zig format, README Pickier, and diff check: pass; parity-plan Pickier remains at the exact pre-existing 227 findings

The README and TypeScript parity plan document the checkpoint. The reviewed Zod ceiling remains 3.

9 days ago

Landed 963c4f1 on main: reserved typeof function recovery now preserves the existing TS2552 Function suggestion as HM9002 provenance, and missing indexed properties on typeof globalThis preserve TS2339 provenance at the complete indexed-access type while leaving the diagnostic anchored on the index. Modeled globalThis property access remains zero-origin.

Verification: focused regressions pass at 1,734 MB and 1,690 MB; complete ts_checker passes 4,471/4,471 at 2,073 MB; conformance remains 16/16 smoke, 86/86 category, and 586/586 baseline-aware at 2,212 MB; serialized stripped ReleaseFast build passes at 2,872 MB. Two serial byte-pinned Zod 4.5.2 runs remain normalized-identical at 196 TS diagnostics and 3/3 HM9002 across 106 files, peaking at 916 MB and 1,025 MB. Ratchet controls, Zig fmt, README Pickier, and diff checks pass; the parity plan retains its exact pre-existing 227 findings.

9 days ago

Pushed 2a043b12a and 02517756a directly to main. This closes an any-like propagation gap: iterator protocol checks and nested loop destructuring now accept unmodeled recovery, while sync/async element derivation preserves the marker. Genuine non-iterable objects and nullable arrays retain their diagnostics; the internal any-union spread control matches native TypeScript 7.0.2.

All 47 affected upstream fixtures and 4,473 checker tests pass. The full 3,020-case exact prefix improves from 35 mismatches to four, tracked in #832. Two byte-pinned Zod runs remain normalized-identical at 196 TS diagnostics and exactly 3/3 HM9002 across 106 files. The ratchet ceiling remains 3. Raw evidence is committed at docs/docs/bun-port-evidence/2026-10-07-ts-survey-gates. Full parity remains open in #66.

9 days ago

Published d6a5c1e14 on main. JSDoc type leaves share declaration anchors; recording recovery previously overwrote the owner's HIR type and destroyed otherwise valid function/array structure. Recovery now retains the origin without that type mutation. The control requires the original TS2749 and one HM9002, a numeric result and rejection of assignment to string.

Decorator, computed-binding-key and repeated-variable checks also preserve ordinary-any behavior for the recovery marker. All four residual exact targets pass, the complete checker is 4,477/4,477, and the uninterrupted exact prefix is 3,020/3,020. Two pinned Zod runs remain normalized-identical at 196 TS diagnostics and exactly 3/3 HM9002 across 106 files; the ratchet ceiling stays 3. The next two exact failures are tracked in #832; full Bun parity remains open in #66.

Sign in to comment on this issue.