ReviewOS

home-lang/home

perf(ts): admit pinned Zod real-project benchmark

#548
Open chris opened this 8 days ago ·
8 days ago

Parent: #416

Add the first pinned real-project workload using the production TypeScript source graph shipped in zod 4.5.2.

Fairness contract:

  • Fetch the exact npm tarball for zod 4.5.2 and verify its published SHA-512 integrity before extraction.
  • Use the 106 unmodified production TypeScript files under src/v4; exclude upstream test files as a project boundary, not as a compiler-specific workaround.
  • Give TS 6.0.3, native TS 7.0.2, and Home the identical strict NodeNext no-emit configuration and source graph.
  • Require silent successful admission from every compiler plus fixed consumer-level negative controls proving exported schema types are checked.
  • Do not time or publish the row until every compiler passes admission.
  • Use the existing interleaved measurement, provenance verification, complete sample retention, Linux qualification, detailed docs, and README summary rules.

Initial audit on 2026-08-29: TS 6.0.3 and native TS 7.0.2 both accept the graph silently. The current Home ReleaseFast compiler crashes with exit 139. That failure remains visible and makes the workload ineligible for timing until fixed. The benchmark must retain the upstream graph and configuration while resolving the general compiler defect.

8 days ago

Real-project admission checkpoint (Zod 4.5.2, TS 6.0.3, native TS/tsgo 7.0.2):

  • 574492636 snapshots symbol-named object requirements before recursive assignability can grow the member pool; this removes the original ReleaseFast crash.
  • ffe7168 skips virtual-bundle scans for ordinary sibling files while preserving true self-imports.
  • df26c8e reuses completed generic-interface inheritance and completes same-scope merges without regenerating parent type parameters.

Measured diagnostic run improvement: the original patched run was interrupted after 192.89 s at 3,889,987,584 bytes maximum RSS; the same 106-file project now terminates in about 4 s at 175,472,640 bytes maximum RSS. Full checker verification passes 4,286/4,286.

Admission is still blocked, correctly: Home emits 2,028 diagnostics where both reference compilers exit silently. These numbers are diagnostic evidence only, not a benchmark result, and will not enter the README/docs performance tables until semantic admission passes.

8 days ago

Checkpoint on current main (a59117c): the exact zod@4.5.2 admission project still passes silently under TypeScript 6.0.3 and native TypeScript 7.0.2. Home now completes ReleaseFast without crashing in 6.63s with 183,287,808-byte max RSS, but remains ineligible for timing comparison because it exits 1 with 1,929 false diagnostics. This improves the prior 2,029 total; TS7006 fell from 1,329 to 1,208. Pushed fixes: ba62249 (namespace modules without default exports), 6b7e9af (cross-file indexed access), 454e7b7 (cross-file index signatures), dacf97f (cross-file construct/predicate signatures), and a59117c (safe literal reads plus stable recursive heritage member snapshots). No Zod benchmark result is published until Home is silent.

8 days ago

Pushed two semantic checkpoints directly to main:

  • c2e4ae42e fix(ts): relate deferred conditional structures (#548)
  • fe5e45fd9 fix(ts): retain inherited program interfaces (#548)

Verification:

  • ./pantry/.bin/zig build test -Dfilter=ts_checker: green, 4,289 tests
  • ./pantry/.bin/zig build test -Dfilter=ts_program: green
  • zig fmt --check and git diff --check: green
  • unchanged npm zod@4.5.2, integrity sha512-XkYXCol10+ba/6F/cueWV+TezUeOqXW0hdeJt5CdXjTYeAgAQg5N03RQdJ80mhfFE72+pblvYMW4wy2Qp4Qbrg==, 106 production src/v4 TypeScript files, strict ES2022/NodeNext/noEmit/skipLibCheck
  • TypeScript 6.0.3 control: exit 0, silent
  • native TypeScript 7.0.2 control: exit 0, silent
  • Home ReleaseFast: 1,928 diagnostics, down from 1,929 at a59117cf4

Diagnostic delta is honest and net-positive: TS2345 falls 43 → 41 while TS2322 rises 24 → 25, for one fewer total false diagnostic. The prior GlobalMeta property-level mismatch is fixed, but the same $ZodRegistry<GlobalMeta> assignment still fails one layer deeper on the generic _meta rest parameter. That remains the next semantic target.

No benchmark timing is admitted or published: Home still fails the real-project semantic gate.

8 days ago

Pushed ae8223bf6 (fix(ts): compare conditional function patterns structurally).

The relater now gives declaration-distinct function signatures structural identity (including construct/abstract/this, parameter/return types, and rest-vs-fixed shape). This fixes separately instantiated conditional patterns such as (...args: infer P) => infer R without weakening incompatible branches.

Verification:

  • full ts_checker suite passes, including positive bidirectional conditional-pattern coverage and negative controls for fixed-vs-rest, incompatible return, and incompatible false branch
  • full ts_program suite passes
  • exact unmodified Zod 4.5.2 production corpus: TypeScript 6.0.3 and native TypeScript 7.0.2 remain silent
  • Home gate improves 1,928 → 1,927 diagnostics; TS2322 improves 25 → 24
  • the false src/v4/core/registries.ts:105 $ZodRegistry<GlobalMeta> self-assignment error is gone

The corpus is still not semantically admitted, so its timing remains unpublished.

8 days ago

Pushed 5d3d80376 (fix(ts): accept unknown index member values).

Index-signature member validation now handles unknown as the universal target in both class/interface and inline object-type paths. The positive control covers recursive unions, nested objects, callbacks, and an interface; the adjacent existing string-index test still rejects incompatible number/callable properties.

Verification:

  • full ts_checker suite passes
  • full ts_program suite passes
  • exact unmodified Zod 4.5.2 production corpus improves 1,927 → 1,915 diagnostics
  • all 12 false TS2411 diagnostics from JSONSchema's [key: string]: unknown are removed
  • TypeScript 6.0.3 and native TypeScript 7.0.2 controls remain silent

Semantic admission still fails, so timing remains unpublished.

8 days ago

Pushed 722c25230 (fix(ts): apply trailing generic defaults in calls).

Explicit generic calls now accept arities from the required-parameter count through the full parameter count, and omitted trailing defaults are substituted before contextual callback typing. This applies consistently to direct, imported, and overload signature paths.

Verification:

  • full ts_checker suite passes with a positive callback-context/default-substitution test and existing invalid-arity controls
  • full ts_program suite passes
  • reduced multi-file native-module control (factory<T, D = T>(..., callback: (D) => void)) is silent in TS 6.0.3, native TS 7.0.2, and Home
  • exact unmodified Zod 4.5.2 gate improves 1,915 → 1,914 diagnostics; TS2558 improves 11 → 10

The remaining dominant cross-file issue is mapped-type transport causing generic exports such as $constructor to become untyped. Semantic admission still fails; timing remains unpublished.

8 days ago

Pushed 57261e2 directly to origin/main.

Semantic admission progress:

  • Source-owned program schemas now retain keyof, mapped, conditional, infer, ThisType, and class typeof structure across files.
  • Open module namespaces preserve exact known exports and use an any index only for exports that cannot be enumerated, instead of erasing the entire namespace.
  • Exact multi-file positive control is silent in TypeScript 6.0.3, TypeScript 7.0.2 (tsgo), and Home.
  • The negative control matches both references with exactly TS2322 and TS2339.
  • Unmodified pinned Zod 4.5.2 corpus: 1,914 -> 1,798 Home diagnostics (-116); TS2339: 228 -> 119.

Timing remains withheld: TS6 and TS7 are silent on this corpus, while Home still has 1,798 diagnostics. Next work continues semantic admission, led by TS7006 and the remaining imported generic call widening.

8 days ago

Pushed 2d9773c47 (fix(ts): narrow instanceof Promise values (#548)). The seeded Promise value now participates in instanceof with a structural Promise target while preserving the dedicated new Promise(...) inference/diagnostic path. Exact control: TypeScript 6.0.3, tsgo 7.0.2, and Home are silent on the positive object | Promise<number> case and report only TS2322 + TS2339 on the negative case. Zod 4.5.2 admission gate improves 1,798 -> 1,689 diagnostics: TS2359 63 -> 4, TS2339 119 -> 92, TS7006 1,208 -> 1,182. Verified 4,294 ts_checker tests plus ts_program/ts_cli, ReleaseFast, fmt, pickier, and diff checks. One downstream TS2507 is newly exposed in core.ts; semantic parity is still incomplete, so no benchmark timing or README/docs result is published yet.

8 days ago

Pushed 4c91fc4 (fix(ts): honor instanceof constructor constraints (#548)). instanceof RHS validation now follows type-parameter constraints: constructor- and callable-constrained generics are accepted, while a number-constrained generic still reports TS2359. Exact focused controls match TypeScript 6.0.3 and tsgo 7.0.2. Full checker (4,295 tests), ts_program, ts_cli, ReleaseFast build, formatting, and lint checks pass. On the untouched Zod 4.5.2 gate, Home improves 1,689 -> 1,685 diagnostics and TS2359 falls 4 -> 0 with every other count unchanged. Timing and README publication remain withheld until semantic admission.

8 days ago

Pushed bf9ea7a (fix(ts): narrow Array.isArray values (#548)). Array.isArray now narrows otherwise-unpartitionable unknown/object values to any[], matching TypeScript 6.0.3 and tsgo 7.0.2. Focused positive is silent in all three compilers; the negative reports exactly TS2322 + TS2339 in all three. Full checker (4,295 tests), ts_program, ts_cli, ReleaseFast, formatting, lint, and diff checks pass. On the untouched Zod 4.5.2 gate, Home improves 1,685 -> 1,650 diagnostics: TS2339 92 -> 73, TS7006 1,182 -> 1,174, TS2345 43 -> 41, TS2488 9 -> 5, and TS7053 5 -> 3. Timing and README publication remain withheld until semantic admission.

8 days ago

Landed 71a5be5ab (fix(ts): narrow typeof member unions). Stable member references now use the same typeof union partitioning as identifiers, so typeof holder.value === "object" narrows number | bigint | Date to Date; writes to the property or its root correctly invalidate the refinement. Exact TS 6.0.3 / tsgo 7.0.2 / Home controls agree: positive is silent, negative is TS2322+TS2339, and property/root mutation controls each produce TS2339. Full checker: 4,296/4,296; ts_program, ts_cli, Zig fmt, path-scoped Pickier, diff checks, and ReleaseFast pass. Untouched Zod 4.5.2 production corpus: Home 1,650 -> 1,645 diagnostics (TS2339 73 -> 70; TS2349 2 -> 0; no new family), while TS 6.0.3 and tsgo 7.0.2 remain silent. Timing remains deferred until Home is silent on the admitted corpus.

8 days ago

Landed a875e2fc5 (fix(ts): model WeakSet instances). Home now preserves explicit and inferred WeakSet value types, models add/has/delete, and renders WeakSet<t> diagnostics. TS 6.0.3, tsgo 7.0.2, and Home agree exactly: the valid control is silent; the negative control emits two TS2345 argument errors and one TS2339 missing-member error. Full checker: 4,297/4,297; ts_program, ts_cli, Zig fmt, path-scoped Pickier, diff checks, home-tsc ReleaseFast, and full ReleaseFast pass. Untouched Zod 4.5.2 production corpus improves 1,645 -> 1,641 diagnostics, entirely TS2339 70 -> 66; every other family is unchanged and both reference compilers remain silent. Timing remains deferred until Home is silent on the admitted corpus.

8 days ago

Landed 376dc4335 (fix(ts): model typed array instances). Numeric and bigint typed arrays now expose their indexed element type plus length, byteLength, byteOffset, buffer, and BYTES_PER_ELEMENT, and constructor results retain the canonical built-in name. TS 6.0.3, tsgo 7.0.2, and Home agree: positive controls are silent; the negative control emits TS2322 plus TS2339. Full checker: 4,298/4,298; ts_program, ts_cli, Zig fmt, path-scoped Pickier, diff checks, home-tsc ReleaseFast, and full ReleaseFast pass. Untouched Zod 4.5.2 production corpus improves 1,641 -> 1,639 diagnostics: TS2339 66 -> 65 and TS7053 3 -> 2, with every other family unchanged; both reference compilers remain silent. Timing remains deferred until Home is silent on the admitted corpus.

8 days ago

Pushed f30ea1a (fix(ts): preserve imported interface heritage) directly to main. Imported generic interfaces that inherit the standard Error shape now retain their source-owned schema across files, heritage resolution no longer emits a false TS2304, and type arguments remain exact. The focused positive case is silent in Home, TypeScript 6.0.3, and tsgo 7.0.2; the negative case matches TS2322 plus TS2339 exactly. Full ts_program, ts_checker, ts_cli, pickier, diff, and ReleaseFast gates passed. The untouched Zod corpus remains at 1,639 diagnostics, so the deeper unsupported Zod declaration graph is still open.

8 days ago

Pushed 60aff02 (fix(ts): preserve conditional literal unions) directly to main. Conditional expression branches now retain finite literal unions until their consumer widens them, including direct element-access keys. The positive control is silent; the missing-key negative matches TypeScript 6.0.3 and tsgo 7.0.2 with exactly TS7053. Full 4,298-checker, ts_program, ts_cli, pickier, diff, and ReleaseFast gates passed. Untouched Zod improved from 1,639 to 1,637 diagnostics: TS7053 2→1 and TS2322 26→25, with no category increases.

8 days ago

Pushed https://github.com/home-lang/home/commit/6129128cdade10903f3cb1dbbd1ccbd30b42fd26 directly to main.

This preserves source-owned unannotated const literals through namespace imports and computed type-literal keys, recognizes imported computed-name roots, and matches TypeScript weak-object assertion overlap while retaining the required-property TS2352 negative.

Fair untouched Zod 4.5.2 corpus (106 production src/v4 files, strict ES2022 NodeNext, tests excluded): 1,637 -> 1,633 diagnostics. TS2304 16 -> 14, TS2352 2 -> 1, TS7053 1 -> 0; every other category held and no category increased. Repeat histogram was identical. ReleaseFast corpus runtime held at 21-22s; a broader declaration-publication experiment took multiple minutes and was rejected.

Positive and negative controls match TypeScript 6.0.3 and native TypeScript 7.0.2 (tsgo). Full parser, program (154/154), checker (4,298/4,298), CLI, Pickier, formatting, diff, and repository ReleaseFast gates pass.

8 days ago

Pushed 4c6fd02 to main. The checker now walks cyclic this-type graphs with a reusable identity-visited worklist instead of recursively revisiting the same mapped/object cycle. On the pinned untouched Zod 4.5.2 corpus, two ReleaseFast runs completed in 5.47s and 5.14s versus the admitted 21–22s baseline, with the diagnostic total and complete histogram unchanged at 1,633. Focused cyclic positive/negative coverage, parser/program/checker/CLI gates, Pickier on the changed source, formatting, and the full optimized build pass. README/docs timing publication remains gated on a fully admitted silent corpus and negative controls.

8 days ago

Pushed two small fixes directly to main:\n\n- ac9f942 — contextual result annotations now instantiate imported generic factory callbacks from written type arguments and declaration defaults. Positive and negative cross-file controls cover the behavior.\n- 40ff168 — readonly computed type members now retry the computed-member parser after index-signature speculation, preserving Symbol.toStringTag without TS1169.\n\nUntouched Zod 4.5.2 corpus (106 production files, strict ES2022 NodeNext):\n- TypeScript 6.0.3: clean, 1.77s\n- tsgo 7.0.2: clean, 0.56s\n- Home ReleaseFast: 1,582 diagnostics in 23.75s / 23.37s, identical diagnostic positions and codes across both runs\n\nThis improves the parser-admitted state from 2,038 to 1,582 diagnostics and is also 51 below the previous parse-blocked 1,633 baseline. Focused parser/checker/program/CLI gates, scoped Pickier, and the full optimized build pass. README/docs timing publication remains gated until Home is clean and the negative controls pass across the admitted benchmark.

8 days ago

Pushed 9ccedba to main: fix(ts): contextualize mapped object methods. Explicitly instantiated generic calls now contextually type object-literal methods through callable-preserving mapped conditionals such as ProtoOf<t>; signature infer matching now binds fixed parameters and inferred rest tuples while preserving ReturnType-style arity behavior. Positive and negative cross-file controls prove the parameter is string (no TS7006; an invalid number assignment emits TS2322). Verification passed: ts_program, all 4,301 ts_checker tests, ts_parser, ts_cli, scoped Pickier, home-tsc ReleaseFast, and the full ReleaseFast build. Honest Zod 4.5.2 result: 1,582 diagnostics in 25.12s, exact position/code set unchanged from the prior 1,582 baseline. The corpus is still blocked earlier by TS2347 on core.$constructor<zodtype> through Zod’s .js namespace re-export chain, so no README/docs benchmark claim was added.

8 days ago

Pushed 016f12c to main: fix(ts): preserve generic namespace exports. The production CLI adapter now carries generic-function and call-only facts through .js export-star barrels, and namespace.member<t>() consults those facts instead of falsely emitting TS2347. Added independent adapter and checker controls plus a faithful barrel path in the program test. Verification passed: ts_cli, ts_program, all 4,301 ts_checker tests, ts_parser, scoped Pickier, two optimized Zod 4.5.2 runs, and full ReleaseFast build. Zod moved 1,582 -> 1,573 diagnostics; TS2347 moved 10 -> 1; no new diagnostic codes. Runs were 24.38s and 24.72s with identical position/code sets. TS7006 remains 937 because generic identity is now preserved but the imported callable signature is not yet transferred.

8 days ago

Pushed 767ce34 to main: fix(ts): parse readonly interface methods. Interface/type members now treat readonly as the member name for method/property continuations such as readonly(): T, while preserving readonly as a modifier before a distinct key. Added a focused zero-diagnostic HIR control. Verification passed: ts_parser, ts_program, all 4,301 ts_checker tests, scoped Pickier, and full ReleaseFast build. On the in-progress recovered-signature Zod run this removes the valid-syntax TS1005 and restores readonly(): ZodReadonly<this> in the transported interface shape. The recovered-export change is intentionally not included yet because it still exposes unrelated false checker diagnostics that need correction first.

8 days ago

Landed 1662fd7: valid indexed access on any now reduces to any while invalid keys such as boolean still retain TS2538. All 4,303 checker tests pass. In the untouched Zod 4.5.2 audit with recovered barrel exports enabled, this contracts Home diagnostics from 1,545 to 1,464 (84 exact position/code pairs removed, 3 downstream diagnostics surfaced).

8 days ago

Landed e959b85: transported optional parameters now explicitly include undefined. The Program positive/negative controls accept undefined and reject null under strict null checks; all 154 Program tests pass. This removes the false TS2345 at Zod classic/errors.ts:80 once recovered barrel exports are enabled.

8 days ago

Landed 497311e: export-origin traversal now uses recovered declarations from modules with syntax diagnostics, while recovered real conflicts remain ambiguous. Program tests and the full ReleaseFast build pass. Two deterministic untouched Zod 4.5.2 runs report 1,464 diagnostics with identical position/code sets (24.57s and 23.48s), down from the earlier 1,573 baseline.

8 days ago

Pushed b3f2d9e (fix(ts): keep composite relations out of object member checks). The inheritance elaborator no longer feeds union/intersection TypeIds to the plain-object member verifier after the core relation has accepted them. Added positive and negative controls for { parent: boolean } | undefined method parameters. Validation: all 4,304 checker tests pass; full ReleaseFast build passes; two untouched Zod 4.5.2 runs were deterministic at 1,449 diagnostics (down from 1,464), with 15 removed positions and zero new positions, in 24.12s and 23.56s.

8 days ago

Pushed 2c9bc2d (fix(ts): accept inferred same-name type parameters). The strict call precheck now agrees with the normal argument relater for same-named inference slots, eliminating impossible T-to-T failures while preserving a concrete T-to-string negative control. Validation: all 4,305 checker tests pass; full ReleaseFast build passes; two untouched Zod 4.5.2 runs were deterministic at 1,441 diagnostics (down from 1,449), with exactly 8 TS2345 positions removed and zero new positions. Runs were 29.92s and 26.31s, so no performance claim.

8 days ago

Pushed 94b4321 (fix(ts): preserve imported class type defaults) after rebasing cleanly over the concurrent runtime commit f505b6c. Imported-class structural fallbacks now retain independently transferable parameter constraints/defaults; an unsupported default value falls back to unknown while still lowering minimum arity. Validation: all 4,306 checker tests pass; full ReleaseFast build passes; two untouched Zod 4.5.2 runs were deterministic at 1,431 diagnostics (down from 1,441), with all 10 false $ZodRegistry TS2558 positions removed and zero new positions, in 26.04s and 26.88s.

8 days ago

Pushed 26baa12 (fix(ts): parse out as a contextual identifier). out now participates as an expression-start/identifier token in values and object shorthand while retaining covariance parsing in Producer<out T>. Validation: lexer and parser suites pass; all 4,306 checker tests pass; full ReleaseFast build passes. Two untouched Zod 4.5.2 runs were identical at 1,394 diagnostics (down from 1,431): all 39 TS1005/TS1109 positions were removed, with 2 downstream TS2454 positions newly exposed, for a net reduction of 37. Runs were 25.56s and 25.91s.

8 days ago

Pushed 5edee8012 (fix(ts): preserve assignment after exiting catch).

Home now keeps successful-try definite assignments at the post-try join when the catch definitely exits, while a non-exiting catch still reports TS2454. The focused positive/negative fixture matches both TypeScript 6.0.3 and tsgo 7.0.2.

Validation: all 4,307 checker tests and the full ReleaseFast build pass. On the untouched Zod 4.5.2 src/v4 corpus, diagnostics improve from 1,394 to 1,387: seven valid TS2454 false positives removed, zero additions; repeated runs were 25.53s and 24.73s.

8 days ago

Pushed 3a0f4282b (fix(ts): follow nested definite-assignment exits).

The TS2454 join now recursively recognizes nested if/else if branches where every continuing path assigns and the final alternative exits. A fallthrough chain remains a negative control. Both fixtures match TypeScript 6.0.3 and tsgo 7.0.2.

Validation: all 4,308 checker tests and the full ReleaseFast build pass. The untouched Zod 4.5.2 src/v4 corpus improves 1,387 → 1,386 diagnostics, removing exactly src/v4/core/schemas.ts:2809 TS2454, adding nothing, and leaving no TS2454 diagnostics. Repeated runs: 26.14s and 25.21s.

8 days ago

Landed d5735a7fb (fix(ts): parse override as a contextual member name).

  • Matches TypeScript 6.0.3 and TypeScript 7.0.2 (tsgo): all accept interface Options { override?: ... }; all reject override member() with TS1070.
  • Parser suite: 896/896 passed.
  • Full ReleaseFast build: passed.
  • Untouched Zod 4.5.2 production corpus: 1,386 -> 1,382 diagnostics on two identical-result runs (32.27s and 28.04s).
  • Exact delta: removed the incorrect TS1070 at to-json-schema.ts:56 plus three downstream false positives at lines 174, 831, and 846; added zero diagnostics.
8 days ago

Landed 3e821c72c (fix(ts): preserve contextual generic value bindings).

  • Matches TypeScript 6.0.3 and TypeScript 7.0.2 (tsgo) for contextual generic typeof value parameters, async conditional returns, and the true typeof T TS2693 negative.
  • Checker suite: 4,310/4,310 passed.
  • Full ReleaseFast build: passed.
  • Untouched Zod 4.5.2 production corpus: 1,382 -> 1,375 diagnostics on two identical-result runs (25.27s and 24.91s).
  • Exact delta: removed four duplicate TS2693 diagnostics in core/parse.ts, plus downstream TS2351 at line 81, TS2322 at line 162, and TS2322 in core/schemas.ts:4720; added zero diagnostics.
8 days ago

Shipped 266013349 (fix(ts): allow any in constructor unions).

  • Constructor-callee unions containing any now follow TypeScript’s permissive any invocation semantics instead of emitting TS2351.
  • The focused TypeScript 6.0.3 / TypeScript 7.0.2 controls both accept any | Constructor; Home now does too.
  • The TS2347 negative for explicit type arguments on an untyped constructor is preserved, as are non-constructable unknown | Constructor and string | Constructor controls.
  • Untouched Zod 4.5.2 corpus: 1,375 → 1,373 diagnostics, removing exactly the two duplicate TS2351 reports at src/v4/core/parse.ts:81, with zero additions. Repeated optimized runs were stable at 24.73s and 24.38s.
  • Focused checker suite and full ReleaseFast build pass.
8 days ago

Shipped ce58c1bc7 (fix(ts): resolve merged values in computed type keys).

  • Computed type keys now resolve the value namespace when a same-name type alias and runtime value coexist, matching TypeScript declaration merging.
  • TypeScript 6.0.3 and TypeScript 7.0.2 controls pass in both declaration orders; the genuine type-only negative still emits TS2693.
  • Untouched Zod 4.5.2 corpus: 1,373 → 1,372 diagnostics, removing exactly src/v4/core/core.ts:152 TS2693 with zero additions. Repeated optimized runs were stable at 24.51s and 24.38s.
  • Focused checker suite and full ReleaseFast build pass.
8 days ago

Shipped bd2f40ba0 (fix(ts): recognize forward generic calls).

  • Calls with explicit type arguments now recognize a later hoisted generic function declaration instead of incorrectly treating the callee as untyped and emitting TS2347.
  • TypeScript 6.0.3 and TypeScript 7.0.2 accept the focused forward-generic control; Home now matches for TS2347 while leaving the separate contextual-callback diagnostic visible for future work.
  • Untouched Zod 4.5.2 corpus: 1,372 → 1,371 diagnostics, removing exactly src/v4/core/api.ts:1696 TS2347 with zero additions. Repeated optimized runs were stable at 25.00s and 25.02s.
  • Focused checker suite and full ReleaseFast build pass.
8 days ago

Shipped 5efb18a03 (fix(ts): defer dependent indexed assertion overlap).

  • Assertions to fully dependent indexed accesses (T[K], with both operands type parameters) now defer overlap rejection, matching TypeScript’s possible-instantiation semantics.
  • TypeScript 6.0.3 / TypeScript 7.0.2 controls accept both undefined as T[K] and 1 as T[K]; Home now does too.
  • Negative controls remain intact: constrained T["value"] and generic-array T[] assertions still emit TS2352.
  • Untouched Zod 4.5.2 corpus: 1,371 → 1,370 diagnostics, removing exactly src/v4/core/util.ts:305 TS2352 with zero additions. Repeated optimized runs were stable at 24.48s and 25.51s.
  • Focused checker suite and full ReleaseFast build pass.
8 days ago

Pushed feda46e (fix(ts): require return-dependent inference cycles).

Validated against both TypeScript 6.0.3 and tsgo 7.0.2 controls: block-bodied recursive functions now report TS7023/TS7024 only when a returned expression actually closes the inference cycle; expression-bodied direct recursion remains diagnosed.

Accepted Zod 4.5.2 production corpus: 1,370 → 1,368 diagnostics, removing exactly TS7023 at src/v4/core/to-json-schema.ts:571 and TS7024 at src/v4/core/api.ts:1802, with zero additions. Repeated ReleaseFast wall times were 24.86s and 24.99s. Checker tests and the full ReleaseFast build pass.

8 days ago

Pushed 421d783 (fix(ts): model Proxy and Reflect library contracts).

The synthetic lib now carries a generic Proxy<T extends object> constructor/ProxyHandler<T>, the complete Reflect method arities and return domains, and the upstream PropertyKey contract for Object prototype ownership checks. The expanded positive/negative control produces exactly the same single intentional TS7006 under TypeScript 6.0.3, tsgo 7.0.2, and Home.

Accepted Zod 4.5.2 production corpus: 1,368 → 1,349 diagnostics, removing 17 TS7006 proxy-trap errors and 2 TS2554 Reflect receiver-arity errors, with zero additions. Stable clean runs: 25.34s, 24.20s, and 25.03s wall time. Checker suite and a clean full ReleaseFast build pass.

8 days ago

Fresh admission audit on the pinned Zod 4.5.2 corpus (published SHA-512 verified) reproduces the blocker on current origin/main: the 106 production files are silent under pinned tsc 6.0.3 and native TypeScript/tsgo 7.0.2, while Home reports 1,350 diagnostics. No timing was collected.

A repeated, general gap is now isolated: an arrow returned from a factory with an explicit imported generic callable-interface return type is not contextually typed. In the reduced cross-file control, both references infer the returned arrow parameter and report only the intentional negative-control TS2322; Home emits TS7006 for that parameter and loses the downstream negative control because the callable signature degrades. This pattern occurs throughout the Zod locale factories (() => errors.$ZodErrorMap).

I am fixing callable-interface signature propagation in the checker, with the reduced positive/negative control as the regression test, then will rerun the complete Zod admission diagnostic count. Parent: #416.

8 days ago

Rejected the first declaration-graph candidate after the full pinned corpus check. Transferring ambient Partial<T>/Record<K, V> into the importing checker removed 3 TS7006 diagnostics, but exposed incorrect mapped/intersection assignability and raised the total from 1,350 to 1,364 (TS2339 +4, TS2322 +7, TS2345 +1 among the shifts). The exact reduced control also gained two false TS2345 diagnostics on valid object arguments.

The source change has been fully reverted; nothing from this candidate will be committed. This confirms that preserving only the callable envelope is insufficient—the nested utility/intersection semantics must remain exact. I am moving to a smaller independently verifiable declaration-graph gap rather than weakening the admission control.

8 days ago

Accepted candidate evidence on exact current origin/main (c8768eb9e) for imported generic function signatures.

Focused fair control:

  • source: an exported Memoizer interface with alloc<T extends object>(value: T, fallback: T): T, consumed through import type by a contextually typed object method; one deliberate string -> number negative control
  • baseline Home: two false TS7006 diagnostics and misses the negative control
  • candidate Home: only the intentional TS2322
  • pinned tsc 6.0.3: only the same TS2322
  • native TypeScript/tsgo 7.0.2: only the same TS2322

Pinned Zod 4.5.2 admission (published SHA-512 reverified; 106 unmodified production files; identical strict NodeNext/noEmit config; no timing):

  • both references: silent
  • exact current-main ReleaseFast baseline: 1,349 diagnostics on two byte-identical runs
  • candidate ReleaseFast: 1,347 diagnostics on two byte-identical runs
  • line-by-line diff: two false self-assignability TS2322 diagnostics removed from src/v4/core/util.ts (AssertEqual and AssertNotEqual); zero diagnostics added

Implementation transfers function-local type parameters, constraints, defaults, and generic-signature metadata through the source-owned program schema. Verification: full ts_program test artifact passes; full ts_checker test artifact passes; optimized compiler builds; scoped Pickier and zig fmt --check pass. A separate unrelated parser-test allocation leak remains outside this change and was excluded via the repository test-artifact filter. Parent: #416.

8 days ago

Pushed 3852cd38f (fix(ts): preserve imported generic method signatures (#548)) directly to main.

This preserves source-owned function-local generic type parameters—including constraints and defaults—when generic function types and interface/class methods cross module boundaries. Consumer checkers now reconstruct the generic signature with local TypeIds.

Focused evidence:

  • baseline Home: two false TS7006 diagnostics and the deliberate bad assignment was missed
  • candidate Home: only the deliberate TS2322
  • pinned tsc@6.0.3: only the same deliberate TS2322
  • pinned tsgo@7.0.2: only the same deliberate TS2322

Pinned Zod 4.5.2 fairness corpus (106 unmodified production files, strict NodeNext/noEmit/skipLibCheck, exact verified tarball):

  • current-main baseline: 1,349 diagnostics, byte-identical across two runs
  • candidate: 1,347 diagnostics, byte-identical across two runs
  • exact header diff: two removed, zero added

Removed:

  • src/v4/core/util.ts:227:3 TS2322 on AssertEqual<A, B>
  • src/v4/core/util.ts:231:3 TS2322 on AssertNotEqual<A, B>

Verification passed:

  • ReleaseFast home-tsc build
  • full ts_program test artifact
  • full ts_checker test artifact
  • scoped Pickier
  • zig fmt --check
  • git diff --check
  • exact reference-compiler control

Zod remains semantically unadmitted, so no timing was taken and no benchmark table claim was added. Issue stays open for the remaining diagnostic gaps.

Commit: https://github.com/home-lang/home/commit/3852cd38fb88d9e23a5e313da0755ca285077a74

8 days ago

Pushed 18f936ab6 (fix(ts): keep primitive type arguments intrinsic (#548)) directly to main.

General fix: when recursively checking type arguments beneath an unresolved generic owner, primitive keyword types remain intrinsic even if the same spelling also names a runtime declaration. Ordinary value-only type arguments still take the existing TS2749 path.

Focused fair control:

  • a qualified missing generic owner exercises the recovery path
  • number is also declared as a runtime function
  • Factory is a genuine value-only type argument
  • pinned tsc@6.0.3 and tsgo@7.0.2 report the missing qualified member, deliberate TS2322, and genuine Factory TS2749; neither reports TS2749 for number
  • parent Home additionally reported the false number TS2749
  • candidate Home removes only that false diagnostic while retaining its other diagnostics and the two negative controls

Exact same-parent Zod 4.5.2 A/B (106 unmodified production files, identical strict NodeNext/noEmit/skipLibCheck config, ReleaseFast, two runs each):

  • parent 3852cd38f: 1,348 diagnostic headers; SHA-256 7e0c4438b0d2f35ba1a2dc16a7a838abab24e75c5ea4f4bd6523c75646698443 on both runs
  • candidate 18f936ab6: 1,323 diagnostic headers; SHA-256 22eca7e52429bef94e24a55b384627713f467c745611462fc3c265d5779efa73 on both runs
  • exact diff: 25 removed, zero added
  • all 25 removals are false primitive-keyword TS2749 diagnostics; the two unrelated JSONSchemaGeneratorParams TS2749 diagnostics remain

Correction to the prior evidence comment: a fresh ReleaseFast rebuild from the exact pushed 3852cd38f source deterministically reports 1,348 diagnostics, not the pre-commit snapshot's 1,347. The one-header difference is TS7006 for self at src/v4/classic/schemas.ts:1631. I am treating the committed-source rebuild as authoritative and leaving that separate contextual-typing gap visible for the next fix.

Verification passed: focused regression test, full ts_checker test artifact, ReleaseFast home-tsc, scoped Pickier, zig fmt --check, and git diff --check.

Zod remains semantically unadmitted, so no timing or benchmark-table row was published.

Commit: https://github.com/home-lang/home/commit/18f936ab6237818800fd65c6470f1749f9ffcef0

8 days ago

Pushed fix(ts): preserve resolved namespace owner paths (#548) to main as https://github.com/home-lang/home/commit/7ef4a49a070d75621f88094858b6e0a440dc0260.

Root cause: moduleExport already returns a canonical namespace owner path. Named namespace re-exports were passing that resolved path back through resolve as if it were source-written import text, so relative project paths could be reinterpreted as bare package specifiers and the namespace member signature degraded to any.

The fix separates source specifier resolution from namespace construction at a trusted resolver-owned path. The regression resolver rejects canonical paths if they are incorrectly resolved twice and proves the namespace member retains its string type.

Validation:

  • full ts_checker test suite passed after rebasing onto current main
  • scoped Pickier, zig fmt check, and git diff check passed
  • hand-reduced namespace re-export callback project: Home, pinned tsc 6.0.3, and pinned tsgo 7.0.2 are all silent
  • untouched pinned Zod 4.5.2 production corpus: exactly 106 source files, tests excluded, strict NodeNext, noEmit, skipLibCheck
  • previous committed checker baseline 18f936a: 1,323 diagnostic headers in two identical runs, SHA-256 22eca7e52429bef94e24a55b384627713f467c745611462fc3c265d5779efa73
  • 7ef4a49 candidate: 1,322 diagnostic headers in two identical runs, SHA-256 97541476a91fb11a8a5ae4c7d662344b3d0e6959b9d7532058d8b222995d9a53
  • the false TS7006 for self at src/v4/classic/schemas.ts:1631 is absent
  • pinned tsc and tsgo remain silent on the full corpus

This is semantic progress only. Home is not silent yet, so no timing claim, benchmark admission, docs result, or README row is warranted.

8 days ago

Progress: c71870a fixes #588 by retaining imported generic function-alias signatures for contextual typing while safely degrading only untransferable leaves.

On the unchanged 106-file Zod 4.5.2 corpus, diagnostics fall deterministically from 1,322 to 1,166: exactly 156 TS7006 removals and zero additions. Both pinned reference compilers remain silent. The remaining nine nested-callback TS7006 diagnostics are now isolated in #589. Benchmark timing and README publication remain gated on semantic admissibility.

8 days ago

Small #589 correctness chunk 90a9f5a is now on main: Array callback signatures carry their complete lib parameter lists. The unchanged Zod corpus improves deterministically from 1,166 to 1,164 diagnostics (2 removed, 0 added; hash 05b677ab53676ffdf922f486701060d54ab9ff8dc5da04230bafe8027d75b3eb). Nine nested-callback TS7006 diagnostics remain; timing/README publication is still gated.

8 days ago

Second #589 chunk aa659e5 is on main: built-in JSON reviver/replacer callbacks now receive exact contextual parameters while shadowed JSON bindings remain untouched. The unchanged Zod corpus improves deterministically from 1,164 to 1,162 diagnostics, removing exactly 2 TS7006 with 0 additions. Seven target TS7006 diagnostics remain; timing/README publication stays gated.

8 days ago

Safety note: the next #589 experiment exposed an exit-139 crash in transferred Readonly<Record<...>> mapped instantiation. It was fully reverted and not committed; no crashed/empty output is counted. The root fix is tracked in #591 before resuming the remaining seven callback diagnostics.

8 days ago

Admitted Zod 4.5.2 baseline improved again on origin/main via a5ae69070 (#609): 1,149 -> 1,148 diagnostics, exact delta 0 added / 1 removed. The sole removal is the final mime.map TS7006 at src/v4/core/json-schema-processors.ts:245; repeated ReleaseFast runs are byte-identical (a9747a7f3a4f28de0fc3737b17fd3af2cad83a72ff6fed03ed2aff4c11734b4a) with explicit --noEmit and 0 generated JS.

8 days ago

Progress from child #617 is now on main through b300135, c70c495, and 77deef9.

The unchanged 106-file Zod 4.5.2 production graph improves from 1,148 to 1,088 diagnostics. The exact normalized difference is 60 TS7006 removals with zero additions; every non-TS7006 diagnostic remains unchanged. Two final ReleaseFast outputs per arm are deterministic. The README and detailed TS performance notes record the result and explicitly keep this workload untimed.

#617 is complete, but this parent remains open: Zod still has 1,088 diagnostics and is not eligible for timing. The next child should be selected from the remaining candidate diagnostic clusters using a focused reduction and reference-compiler controls before implementation.

8 days ago

Next controlled child: #619. The post-#617 TS7006 audit found 258 of the remaining 383 diagnostics in classic/schemas.ts. A minimal strict NodeNext reduction isolates imported homomorphic mapped argument context being lost when the explicit local type argument contains a polymorphic this-returning member. Reference TS 6.0.3 and native TS 7.0.2 emit only TS2339 + TS2322; Home adds TS7006/false TS2345. #619 records the controls and same-parent Zod A/B gate.

8 days ago

#619 is complete and shipped to origin/main through ad4ae62.

The mapped-receiver slice removes 112 normalized diagnostics from the pinned 106-file Zod 4.5.2 graph with zero additions (1,088 → 976). Its exact-parent ReleaseFast A/B also measured 9.925 s → 5.740 s mean wall time (42.2% lower). Zod remains outside the admitted cross-compiler timing table because Home still has 976 diagnostics while the TypeScript 6 oracle has zero. Full methodology and results are linked from the README and documented in TS_PERFORMANCE.md.

8 days ago

Opened #624 from the fresh post-#619 Zod inventory. The next strict reduction targets general mapped prototype parameter tuples: TypeScript 6.0.3 and native TypeScript 7.0.2 report only the deliberate TS2339, while Home loses optional, generic, and rest parameter context, adds seven TS7006 plus one TS7019, and misses the property error because the parameter became any. The issue requires reference controls, lexical shadowing, zero-added exact Zod A/B, and no whole-type approximation.

8 days ago

#624 is complete and landed on main as b73c3a20a..4deb785cc.

On the pinned 106-file Zod 4.5.2 graph, Home moved from 976 to 833 diagnostics: 143 removed (127x TS7006, 16x TS7019), with zero normalized additions. Program 174/174, Checker 4,334/4,334, ReleaseFast, formatting, scoped lint, and the final byte-identical integration audit all pass. The README links to the full benchmark record.

Zod still has 833 diagnostics, so the broader zero-diagnostic admission work remains open.

8 days ago

Progress update: #627 is complete and pushed to main through 2de0edb. The unchanged pinned Zod 4.5.2 graph moved from 833 to 710 diagnostics, removing exactly 123 TS7006 identities from 41 generic member-assigned callbacks with zero additions. Full evidence: docs/docs/TS_PERFORMANCE.md#generic-member-assigned-callback-context.

8 days ago

Scoped follow-up #633 is now complete on main (4446c5864, c5c3fd009). On the unchanged pinned 106-file Zod 4.5.2 graph, Home moved from 710 to 604 diagnostics: 106 removed (14.9%), 0 added; removals were 67× TS2430, 21× TS2345, and 18× TS7006. Full evidence: https://github.com/home-lang/home/blob/main/docs/docs/TS_PERFORMANCE.md#dependent-generic-defaults

The remaining generic-default gaps stay explicitly separated: symbolic indexed-access defaults in #634 and recursive constraint fixed points in #639.

8 days ago

Scoped follow-up #634 is complete on main (f6a014d4b, 773af2405). Symbolic indexed-access defaults now instantiate from earlier effective arguments without use-site HIR re-lowering. The focused TypeScript 6/7 oracle gap is closed; the unchanged pinned Zod 4.5.2 graph remains exactly 604 diagnostics, with 0 added and 0 removed. Evidence: https://github.com/home-lang/home/blob/main/docs/docs/TS_PERFORMANCE.md#symbolic-indexed-access-generic-defaults

The next distinct generic-default gap remains #639.

8 days ago

#639 is complete and landed on main via 7d7cf23f8 plus its documentation commit f7fa8f9c5.

On the unchanged pinned Zod 4.5.2 graph, the exact post-#634 baseline moved from 604 to 600 normalized diagnostics: the four intended recursive-constructor TS2345 identities were removed and zero identities were added. The accepted identity-set SHA-256 is f093515438ca8b68df2a1fea133f3e247d21574900579902513adac4636ecfe2. A post-rebase rerun reproduced the set byte-for-byte.

The README now carries the brief linked table, and the detailed fixed-point design, pinned TS 6/TS 7 oracle, rejected readonly-regression artifact, hashes, commands, and validation matrix are in the recursive generic-default fixed points section.

Zod remains correctly excluded from cross-compiler timing claims until its Home diagnostic count reaches zero.

8 days ago

Benchmark-integrity update: #645 landed on main in d318b0c28, with README/detailed evidence in 5cbf35e3b.

The exact same-parent Zod 4.5.2 identity gate remains 600 → 600 with zero added/removed diagnostics and identical normalized SHA-256 f093515438ca8b68df2a1fea133f3e247d21574900579902513adac4636ecfe2. One run per arm was retained only for transparency; no speed claim was made. Explicit-file pinned-oracle runs can now use --ignoreConfig and --skipLibCheck without losing the source argument or checking an unintended repository project.

8 days ago

Closed child #480 via 592b9ff3a, af08e7e61, 6ec121877, and docs 6b1368502. Typed cross-file globals, merging, lexical/globalThis bindings, destructured slots, file-order independence, and cyclic/transitive owner provenance now pass: global 60/60 per compiler and bound-global 56/56 per compiler against pinned TS 6.0.3/native TS 7.0.2. The pinned Zod 4.5.2 graph remains 600 diagnostics, so this checkpoint adds no real-project count regression but does not yet advance Zod's zero-diagnostic admission. Remaining adjacent audits: imported owners 16/20 and nominal origins 44/52. No timing claim.

8 days ago

Pinned Zod 4.5.2 semantic checkpoint (ReleaseFast): Home diagnostics improved from 602 to 523. The exact path/line/column/TS-code comparison has 79 removed unique keys and 0 added keys.

Focused TS6.0.3/TS7.0.2-calibrated reductions for post-continue narrowing and recursive generic heritage are both clean, as is the qualified recursive indexed-alias member projection reduction. Full validation: checker 4,353/4,353; Program 187/187.

No timing claim yet: #548 remains open until Home reaches zero diagnostics on the pinned corpus.

8 days ago

Implementation checkpoints are now on main: 2e749f7 (#654) and 197ee07 (#534). Documentation/README table update for the pinned 602 -> 523 result follows as a separate small commit.

8 days ago

Documentation and the README summary table for the 602 -> 523 checkpoint are now on main in 4ef52ad: https://github.com/home-lang/home/blob/main/docs/docs/TS_PERFORMANCE.md#inherited-generic-members-and-loop-flow-narrowing . #534 is complete; this issue remains open for the remaining 523 diagnostics and eventual fair timing admission.

8 days ago

#656 is complete on main: ab86dad removes 34 inherited-member TS2339 identities with 0 added, moving the pinned graph from 523 to 489 diagnostics. Versus the immutable 602 baseline, 113 unique keys are removed and 0 added. README/details are in 6763779: https://github.com/home-lang/home/blob/main/docs/docs/TS_PERFORMANCE.md#unsupported-owner-schema-inherited-member-projection . Timing remains gated on zero.

8 days ago

Post-#657 checkpoint on origin/main: implementation 5f31fc7f1, docs 2143a4623. The exact inherited cyclic callable now matches TS 6.0.3 and native TS 7.0.2 at 0 diagnostics; the appended invalid control matches all three at 3x TS2322 + 1x TS2339. Pinned Zod 4.5.2 remains 489 diagnostics / 484 unique keys, delta 0 removed and 0 added from #656, and 113 unique keys removed with 0 added versus the immutable 602 baseline. The zero-diagnostic timing gate remains closed. Details: https://github.com/home-lang/home/blob/main/docs/docs/TS_PERFORMANCE.md#parameterized-built-in-callable-transfer

8 days ago

Post-#658 checkpoint on origin/main: implementation 0ffa17565, docs f880159a5. Pinned Zod 4.5.2 improves from 489/484 to 448 diagnostics / 443 unique keys: 41 TS2344 identities removed, 0 added; TS2344 is now 2 instead of 43. Versus the immutable 602/597 baseline, 154 unique keys are removed and 0 added. The focused dependent-constraint oracle matches TS6/TS7 exactly, including the retained invalid TS2344. Timing remains gated. Details: https://github.com/home-lang/home/blob/main/docs/docs/TS_PERFORMANCE.md#dependent-generic-alias-constraint-instantiation

8 days ago

#659 is complete on main (1332e4e6f, docs 5d72ab3fd). The unchanged pinned Zod 4.5.2 graph improves from 448 diagnostics / 443 unique keys to 446 / 441: exactly the two remaining TS2344 keys at src/v4/core/schemas.ts:3089:20 and :3090:12 were removed, with 0 added keys. Versus the immutable 602/597 baseline this is now 156 unique keys removed, 0 added. TS2344 is now zero. The graph remains untimed and #548 remains open because 446 diagnostics remain.

8 days ago

Progress from #660 is now on main.

Pinned Zod 4.5.2 moves from the post-#659 446 diagnostics / 441 unique identities to 440 / 435. That is six unique removals and zero additions; versus this issue immutable baseline of 602 / 597, main is now 162 unique removals with zero additions. TypeScript 6.0.3 remains clean, so this admission issue stays open for the remaining 440 diagnostics.

8 days ago

Progress from #661 is on main.

Pinned Zod moves from post-#660 440 diagnostics / 435 unique identities to 436 / 431: four exact TS2304 removals, zero additions. Against the immutable 602 / 597 baseline, main is now 166 unique removals with zero additions. TypeScript 6.0.3 remains clean, so #548 stays open for the remaining 436 diagnostics.

8 days ago

Progress update: #662, #663, and #664 are complete on main, with the combined audit published in f26b768 and summarized in README: https://github.com/home-lang/home/blob/main/docs/docs/TS_PERFORMANCE.md#zod-collection-and-generic-relation-audit-662664

On the unchanged 106-file Zod 4.5.2 graph, Home moves from the post-#661 checkpoint of 436 diagnostics / 431 unique path-line-column-code identities to 430 / 425. That is 6 unique removals and 0 additions. Against the immutable #548 baseline, the graph has moved from 597 to 425 unique identities: 172 removed, 0 added. TypeScript 6.0.3 remains at zero, so this issue remains open and Zod remains excluded from cross-compiler timing.

8 days ago

Progress update: #665 is complete on main in 9fe50f3, with the audit published in a903452 and README: https://github.com/home-lang/home/blob/main/docs/docs/TS_PERFORMANCE.md#partially-transferable-imported-class-methods

On the unchanged 106-file Zod 4.5.2 graph, Home moves from 430 diagnostics / 425 unique identities to 400 / 395. The exact delta is 30 TS7006 removals from imported class method callbacks and 0 additions. Against the immutable #548 baseline, unique identities have moved from 597 to 395: 202 removed, 0 added. TypeScript 6.0.3 remains at zero, so this issue remains open.

8 days ago

Progress via #666, now completed on main in d529265 with docs in d748112: imported optional mapped handler callbacks now specialize nested templates such as Item<K> by the concrete object-literal property key. The standalone oracle exactly matches TypeScript 6.0.3 and the native preview. The unchanged Zod 4.5.2 graph remains byte-identical at 400 diagnostics / 395 unique identities, so this closes a real parity gap without adding corpus diagnostics. Detailed record: https://github.com/home-lang/home/blob/main/docs/docs/TS_PERFORMANCE.md#imported-mapped-contextual-members

8 days ago

#667 is complete and landed directly on main:

  • b6f5eef4a transfers ordered imported overload signatures and uniquely contextualizes object-literal overloads by arity plus declared property ownership.
  • 9c13f230f publishes the README table and detailed audit.
  • TypeScript 6.0.3, native TypeScript preview, and ReleaseFast Home now match exactly on the strict two-file overloaded mapped-handler oracle: deliberate TS2322 + TS2339 only, with no false TS7006/TS2345.
  • Program 193/193, full checker, ReleaseFast, Zig format, and whitespace gates pass.
  • Unchanged Zod 4.5.2: 400 diagnostics / 395 unique identities, exact delta 0 removed / 0 added; two candidates are byte-identical to the #666 baseline (0590e3…bbc9).

The remaining 16 Zod in-out.ts TS7006 callbacks require transferring/evaluating the deeper conditional Extract graph inside VisitHandlers, which is the next independently scoped issue rather than an overload workaround.

Evidence: /home-lang/home/issues/667#issuecomment-5560965638 Docs: https://github.com/home-lang/home/blob/main/docs/docs/TS_PERFORMANCE.md#imported-overloaded-object-literal-context

8 days ago

#668 is complete on main:

  • 40160d029 transfers exact standard distributive Extract<T, U> through Program schemas and imported conditional mapped handlers.
  • 13d74ca52 publishes the README table and detailed audit.
  • TypeScript 6.0.3, native TypeScript preview, and ReleaseFast Home match on the fair strict oracle: A selected from A | B, B excluded, ItemOfKind<never> falls back to the full union, and the exact code multiset is TS2322 x2 + TS2339 x2 with no TS7006/TS2345.
  • Program 194/194, full checker, ReleaseFast, format, and whitespace gates pass.
  • Zod remains exactly 400 diagnostics / 395 unique identities, 0 removed / 0 added, byte-identical to #667 (0590e3…bbc9).

The unchanged production result now directs the next issue to another unsupported edge in Zod's larger nested handler graph; it will be isolated independently rather than guessed.

Evidence: /home-lang/home/issues/668#issuecomment-5561082067 Docs: https://github.com/home-lang/home/blob/main/docs/docs/TS_PERFORMANCE.md#imported-extract-conditional-handlers

8 days ago

Closed child #669 on main: source-owned indexed-access aliases now preserve exact mapped key domains across imported conditional handlers, with complete-union, missing-member, and partial-union guards. Three-engine oracle parity is exact (2× TS2322 + 2× TS2339; no TS7006/TS2345). The pinned Zod graph remains unchanged at 400 diagnostics / 395 identities with zero additions. Commits: 12e1c1d6c, 1ea1d2a7a, 15a508a11. Evidence: /home-lang/home/issues/669#issuecomment-5561267845

8 days ago

Closed child #670 on main: lossless namespace-qualified declaration graphs now transfer as ordinary Program edges while opaque/projection-only/unsafe graphs remain rejected. Exact three-module oracle parity is restored. Zod improves 400→394 diagnostics and 395→389 identities (6 TS2339 removed, 0 added). Commits: 24f4376f1, e8a92aa2a. Evidence: /home-lang/home/issues/670#issuecomment-5561365837

8 days ago

Child #671 is complete on origin/main (290487c0f, docs 6e199a3e2). Contextual Extract now preserves target-relevant imported paths beside opaque siblings without exporting the unsupported graph or adding a depth cap. Exact TS6/native/Home oracle parity is 2×TS2322 + 2×TS2339 with no TS7006/TS2345. Pinned Zod 4.5.2 improves 394→374 diagnostics and 389→369 unique identities: 20 false TS7006 removed, zero added. Evidence: /home-lang/home/issues/671#issuecomment-5561759700

8 days ago

Child #672 is complete on origin/main (673a648a9, docs 307892be9). Stable truthy member narrowing now removes impossible never branches through the existing semantic truthiness partitioner. The strict three-engine oracle has exact 1×TS2322 parity and no false TS2339/TS7006. The pinned Zod A/B is unchanged at 374 diagnostics / 369 identities with zero additions, disproving the initial locale attribution. Evidence: /home-lang/home/issues/672#issuecomment-5561862625

8 days ago

#673 is complete on main via a730be062 + docs 4d5d3d5a9. Imported homomorphic union callback context now matches TS6/tsgo on the focused oracle. The pinned Zod 4.5.2 audit moved 374 -> 350 diagnostics and 369 -> 345 location/code identities: 24 removed (11 TS7006, 9 TS2339, 4 TS2345), 0 added. Details: /home-lang/home/issues/673#issuecomment-5568630029

8 days ago

#687 is complete on origin/main: code 901c0d0ec, docs ca6870a79.

On the unchanged pinned Zod 4.5.2 graph, Home improves 350 → 348 diagnostics and 345 → 343 unique identities, with exactly two TS7006 identities removed and zero added. The fair three-engine Promise-union oracle is clean for all valid cases and preserves the exact one-TS2322 negative control. Program 205/205 and checker 4,365/4,365 pass, along with ReleaseSafe and ReleaseFast builds.

The remaining four core/parse.ts TS7006 sites are now isolated to qualified imported issue-array element transfer and are tracked in #688.

8 days ago

Admission progress on the pinned Zod 4.5.2 core proxy (21 files, identical strict NodeNext no-emit config; TypeScript 6.0.3 and native TypeScript 7.0.2 both report only the expected TS2307). No row is timed; this only tracks false diagnostics blocking admission.

CommitChangeDiagnostics / identitiesAdded
0d09d38cdbaseline140 / 135—
41d59384aindexed access over a type parameter stays deferred (41× TS2345, 4× TS2430 removed)95 / 900
95e2f20baa local binding shadows a type-only import (11× TS1361 removed; exact 13× TS1361 parity on a 21-case oracle)79 / 790
832f68544properties reported missing now resolve (18× TS2339, 2× TS7006 removed)59 / 590

Each commit passed the checker and Program unit suites and a ReleaseSafe build; details are in docs/docs/TS_PERFORMANCE.md (untimed sections) and the README audit tables.

Next: the implicit-any cluster (12× TS7006, 4× TS7031) is tracked in #758. Remaining after that: 11 TS2322, 5 TS2304, 4 TS2554, 3 TS2345, 3 TS2488, 3 TS2411, 2 TS2339, and smaller groups.

8 days ago

Admission progress continues on the pinned Zod 4.5.2 core proxy (no row is timed; this tracks the false diagnostics that block admission):

CommitChangeDiagnostics / identitiesAdded
0d09d38cdbaseline140 / 135—
41d59384aindexed access over a type parameter stays deferred95 / 900
95e2f20baa local binding shadows a type-only import79 / 790
832f68544properties reported missing now resolve59 / 590
3f4bea896 + fb70525adbuilt-in Object/Array statics and Promise statics carry their lib types (#758)46 / 460

That is 135 → 46 unique identities with nothing added at any step. Each batch passed the checker and Program unit suites and a ReleaseSafe build; details in docs/docs/TS_PERFORMANCE.md (untimed sections) and the README audit tables.

Remaining on the shard: 11 TS2322, 5 TS7006 (#765, #763, #764), 5 TS2304, 3 TS2345, 3 TS2488, 3 TS2411, 2 TS2554, 2 TS2339, and smaller groups.

8 days ago

Standard-library tranche from #768 landed on main in a1ce400a9.

The unchanged pinned Zod v4.5.2 core benchmark moved from 43 to 39 diagnostics. The exact four removals are the false missing-name reports for Generator, ErrorConstructor, atob, and btoa, with zero added diagnostics. Checker 4,382/4,382, Program 218/218, driver 189/189, focused TypeScript 6.0.2 config oracles, ReleaseFast home-tsc, formatting, diff checks, and focused Pickier all pass.

8 days ago

ff2a44cc5 is now on origin/main and closes #769. The checker now structurally validates object-literal parameter defaults and models Function.length, Function.prototype, and ES2015 Core gated Function.name, including inherited constructor access and explicit component-lib behavior.

The pinned Zod v4.5.2 core oracle moves from 39 diagnostics to 34: the three Record defaults, the valid union/object default, and inst.constructor.name are removed with zero additions. Checker 4,383/4,383 and the ReleaseFast build 50/50 pass. This advances the admitted Zod benchmark; the remaining 34 diagnostics stay open for subsequent logical batches.

8 days ago

6a947ead5 is on origin/main and closes #770. Forward top-level calls now lazily build their complete overload group, avoiding unsafe eager lowering of unrelated generics. Logical member/element assignments now carry post-??= / ||= flow and preserve the declared non-nullish slot shape for assignable RHS literals.

The pinned Zod v4.5.2 core oracle moves 34 -> 30 with zero additions: both valid five-argument generateCheck calls, state.backEdges after ??= new Set(), and the lazily cached error message after ??= are clean. Checker 4,385/4,385 and ReleaseFast build 50/50 pass. The remaining 30 diagnostics stay open for the next logical batches.

8 days ago

Progress from #771 is on main in fd4339d.

This batch preserves literal fallbacks in ?? result unions and joins reachable function-local conditional assignments, including nested/partial branches, missing branches, and control-transfer paths. It also preserves the declared non-nullish collection type for successfully checked contextual constructor assignments.

Pinned Zod v4.5.2 core diagnostics improve from 30 to 25, removing exactly the four to-json-schema.ts TS2322 false positives and the compile.ts TS2367 false positive, with zero additions. ReleaseFast checker tests pass 4,387/4,387 and the full JSC-enabled build passes 50/50 steps.

8 days ago

Published the next Bun parity checker slice in 3886689 and tracked it in #772.

instanceof Map/Set now retains structural iterable collection types, and comparisons such as array.length === 0 no longer treat broad numeric properties as unit discriminants. Validation passed 4,389/4,389 checker tests and the full 50/50 JSC build. On pinned Zod 4.5.2 this reduced diagnostics from 25 to 21 with zero additions.

8 days ago

Published another Bun parity checker slice in 2e1a66e and tracked it in #773.

This fixes prior-local resolution in destructuring initializers, destructured for...of captures in callbacks, guard-aware initialization joins, and stable direct conditional-branch typeof captures. Validation passed 4,393/4,393 checker tests and the full 50/50 JSC build. Pinned Zod 4.5.2 drops from 21 to 16 diagnostics with zero additions.

8 days ago

Published contextual result/type-space parity in e32642e (tracked and closed in #774).

  • Direct IIFE result context now preserves compatible tuple members inside returned object literals while short tuples still fail.
  • Explicit named type-only imports retain type-space meaning when complex cross-module projection recovers, without weakening TS1361 runtime-use checks.
  • Checker: 4395/4395.
  • Full ReleaseFast JSC build: 50/50.
  • Pinned Zod 4.5.2: 16 -> 13 diagnostics, exactly three removals and zero additions.
8 days ago

Progress checkpoint from #764 is now on origin/main: 6f26046 (implementation/tests) and 3e764c0 (README and detailed evidence).

On the unchanged 21-file Zod 4.5.2 core gate, this moves the accepted current baseline from 13 diagnostics / identities to 8 by removing exactly 3 TS2411 and 2 TS7006 identities, with zero additions. Relative to the documented 832f685 59-identity checkpoint, the cumulative path is now 59 to 8: 51 false-positive identities removed, zero additions across the admitted checkpoints.

The remaining normalized identities are:

  • checks.ts:194:52 TS2367
  • index.ts:11:26 TS2307 (the expected omitted locales module)
  • schemas.ts:339:3 TS2741
  • schemas.ts:4772:45 and 4774:40 TS2345
  • schemas.ts:4779:5 TS2322
  • schemas.ts:4879:19 TS2741
  • visit.ts:34:21 TS2571

The #764 focused oracle is clean in TypeScript 6.0.3, native TypeScript 7.0.2, ReleaseSafe Home, and ReleaseFast Home. Program 220/220 and checker 4,395/4,395 pass. Four serial ReleaseSafe Zod runs and one ReleaseFast run produced the same 8-identity set without the earlier crash. This is a semantic checkpoint only; no performance timing is claimed.

8 days ago

Checkpoint update: #775, #776, and #777 are complete in d1d9abb and f9548c2, with evidence documented in 54ad7e8 and corrected in 07c6dc4.

The unchanged pinned Zod 4.5.2 core gate moved 8 -> 6 identities for #775/#776 (only core/checks.ts:194:52 TS2367 and core/schemas.ts:339:3 TS2741 removed, zero added). #777 then preserved the exact same six-identity set byte-for-byte (SHA-256 64abd7817175b2885f805e3580a8ed0b74727e15f456dde3d85ba9ee3c528d19). Program is 222/222 and the full checker suite passes. Optimized stripped ReleaseSafe build and the Zod gate passed under the fixed memory guard.

This tracker remains open: TypeScript controls are clean but Home still has six core identities here, so the workload is not admitted to cross-compiler timing.

8 days ago

Verified untimed TypeScript parity checkpoint: d4b219507. The unchanged frozen Zod 4.5.2 21-file core proxy moves from 6 to 4 path/line/column/code identities, with zero additions. Removed only the false TS2345s at core/schemas.ts:4772:45 and :4774:40 by fixing general typeof value === "function" narrowing of any (while unknown still narrows). A separate general rest-array source signature relation now accepts fixed target arguments elementwise; positive/negative pinned TS 6.0.3 and native 7.0.2 probes agree with Home. The richer Zod :4779 overload error remains, so it is not claimed fixed.

Remaining normalized proxy set: core/index.ts:11:26 TS2307 (also reported by both TS controls because this reduced proxy omits ../locales/index.js; not a Home-only defect), core/schemas.ts:4779:5 TS2322, core/schemas.ts:4879:19 TS2741, core/visit.ts:34:21 TS2571. Normalized SHA-256: b76cec6192d95acc99611c9c40610a1e5e7f7dc20b931d3340ad7b0a166b9631.

Admission: checker 4,403/4,403, Program 223/223, stripped ReleaseSafe build peak 2,648 MB, unchanged core gate peak 1,249 MB, serialized under 3,840 MB cap. Details and the README summary are in the commit. The full unmodified 106-file graph and benchmark timing remain not admitted; the historical 348-diagnostic full-graph count has not been updated by this proxy run. Next: isolate the general generic-overload relation at :4779, then :4879 and visit.ts:34, and only then re-run full-graph admission.

8 days ago

Checkpoint 2026-09-24: pushed 957ae55 (fix(ts): relate generic rest overloads). The unchanged pinned Zod 4.5.2 21-file core proxy moved from 4 to 3 exact path/line/column/code identities: core/schemas.ts:4779:5 TS2322 removed; zero additions. Remaining Home-only: core/schemas.ts:4879:19 TS2741 and core/visit.ts:34:21 TS2571. core/index.ts:11:26 TS2307 is the shared proxy-boundary error in both TS 6.0.3 and native 7.0.2. Final normalized-set SHA-256: d0b900373c14def43cf1e6efd3827691c560f0825fc516f300cea69e805c0376. Full checker and Program suites, guarded stripped ReleaseSafe build, exact Zod gate, Zig format, Pickier, and diff checks passed. The positive/negative oracle matches both TS controls on six intentional variance errors, and the open-rest overload accepts the valid implementation while rejecting wrong return and constrained argument. This is untimed proxy correctness, NOT admission or a speed claim for the full 106-file graph. Another standalone overload oracle still has two Home-only false positives; continuing investigation. Details and an untimed README row are in the commit. All compiler runs used the shared machine lock and 3840 MB cap.

8 days ago

Focused follow-ups for the two remaining Home-only identities on the frozen 21-file Zod 4.5.2 core proxy:

  • #820 tracks core/schemas.ts:4879:19 TS2741 and the linked generic constructor/getter negative control. A provisional-diagnostic cleanup alone is rejected: the invalid getter still lacks the TS2322 emitted by TypeScript 6.0.3 and native 7.0.2. The fix must restore both the positive and negative behavior.
  • #821 tracks core/visit.ts:34:21 TS2571 on the full core type graph. The strict two-kind cross-file Extract/mapped-handler reduction already matches both controls in Home, so the remaining trigger needs further minimization; this is not assumed to be the closed #668 bug.

No new compiler checkpoint has been accepted or pushed since 957ae55c9; the exact core-proxy baseline remains 3 identities (2 Home-only, 1 shared proxy-boundary TS2307). Full 106-file Zod admission and timing remain gated.

8 days ago

Checkpoint f18ef91 closed #821 and removes the final Home-only diagnostic from the unchanged 21-file Zod 4.5.2 core proxy. Exact core identities are now 2 -> 1 with 0 added; the remaining core/index.ts:11:26 TS2307 is shared by TypeScript 6.0.3 and native TypeScript 7.0.2 because the proxy intentionally omits locales.

The full ts_checker and ts_program suites, guarded stripped ReleaseSafe build, frozen-core gate, and generic three-way visitor oracle pass. Docs and the README mark this as untimed. Per this tracker, the next gate is the pinned unmodified 106-file graph plus consumer negative controls before any benchmark timing is admitted.

8 days ago

Closed child #820 as implemented by fe6535c32: contextual generic constructor callbacks retain their concrete type, invalid indexed getters still emit TS2322, and permanent checker/Program regressions cover the cross-file assertion-signature path. This does not claim full Zod admission; #821 remains the next recorded frozen-core identity.

8 days ago

Tracker cleanup: #754 and #758 are now closed as completed. Their implementation commits are ancestors of current origin/main; #758's final child causes #763 and #764 are also closed, while #765 remains open only for its separately scoped broader forward-value/overload semantics.

8 days ago

Published the restored-source acceptance evidence in 9d27218fc, pushed directly to origin/main as Chris Breuer with no coauthors.

The exact historical parent and fix have identical complete diagnostic multisets on both restored projects: core 146/141 and locales 145/140, with zero additions and zero removals. Both reference engines accept both projects. All 13 packaged files and their input/identity hashes were independently verified from the archive. The prior seven Program controls, three-engine annotation oracles, full suites, and optimized build results remain recorded above for the unchanged implementation.

This completes the restored-locale item that had kept #751 open. The full Zod workload and expanded competitor matrix remain under #548 / #838; no new cross-compiler timing is claimed here. git diff --check passed. Pickier reports 22,074 findings (11,461 errors and 10,613 warnings) with the complete generated benchmark corpus present; the documentation change does not alter source or benchmark projects.

8 days ago

Continuing admission from ec18f7f with native SHA-256 68c6ed517f9125ae1b570ff2e585c5b368745389af828258f6621fe5e6e0311c. Re-extracted the pinned Zod 4.5.2 archive after SHA-512 verification and recorded all 106 original production-file hashes plus the identical strict NodeNext project configuration. No upstream production files changed and no Zod timings were taken.

Two untimed general diagnostic matrices did not reproduce the current Zod failure: 24 positive checks covering direct/barrel imports, type/value imports and same-name interface/value declarations were silent across all three compilers. A further 48 checks covering dollar-prefixed names, Error heritage and recursively constrained constructor values passed all positive controls and produced exactly TS2322 and TS2339 on every negative control. This rules out those simplified mechanisms as the sole cause; it does not establish Zod admission. A fresh complete-graph diagnostic audit is in progress before choosing a compiler change. No workaround or relaxed configuration is being used.

8 days ago

Fresh complete-graph admission confirms TS 6.0.3 and native TS 7.0.2 are silent successful, while Home emits the unchanged 195 TS diagnostics and three HM9002 warnings (exit 1). Four further cyclic/acyclic namespace/named-import cases passed all 24 positive/negative processes. The basic import and cycle hypotheses are therefore not sufficient.

A general Record-member reproducer now fails identically in Home across string, number, symbol, mixed and finite literal key domains while both reference compilers accept every positive and emit the expected two TS2322 plus one TS2339 on every negative. Tracking the general source-owned declaration-transfer defect in #863. A first narrowly scoped fix is being tested for closed primitive index domains whose exact instantiation already exists; finite/symbolic key representations remain separate required work. Zod remains unadmitted, unmodified and untimed.

8 days ago

Record and indexed-interface correctness work under #863 is landed in a6570c8; the complete admission report, README table and checksum-verified evidence are published in b4985e4 on origin/main. All 145 unchanged five-compiler synthetic admissions pass and all module gates pass. The unchanged pinned 106-file Zod graph remains unadmitted: 241 TS errors plus two HM9002 (clean parent 195 plus three; additional errors exposed under the wider graph are not called an improvement). No Zod timings or speedup claim. See https://github.com/home-lang/home/blob/main/docs/docs/TS_PERFORMANCE.md#imported-record-and-indexed-interface-admission-2026-10-10-utc . Native d58ddc54a147b3ad8b177a98a6b5cda04fd4df77595c5ccf44da690de5d57b32; raw archive 2022 verified checksums. Finite/symbolic keys, other Zod features, canonical C++ and other-platform coverage remain incomplete. Next performance work is a fresh complete landed-source matrix; the old 1/20 ranking remains a dated measurement, not a rank inferred from these admission checks.

8 days ago

Current-main diagnostic update: the pin-verified unchanged 106-file Zod 4.5.2 graph still does not terminate under the guarded Home CLI. A 300-second ratchet produced no count; a direct run was stopped after 6:46 as its sampled Checker.inferFromPair / inferUnionRemainder / signature inference recursion grew from ~1.0 to ~1.8 GiB physical footprint. The exact-pair guard experiment did not resolve a 120-second probe and was fully reverted; no admission or benchmark credit. Focused follow-up #921 records the evidence and acceptance while this parent retains the full fair-benchmark requirement.

Sign in to comment on this issue.