ReviewOS

home-lang/home

test(ts): derive corpus inputs from upstream configuration instead of expected diagnostics

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

The result-substitution cleanup in #840 does not yet establish faithful corpus inputs. At source checkpoint d739fdfea, packages/ts_conformance/src/ts_conformance.zig still derives compiler strictness from expected diagnostics and creates synthetic declaration inputs. Related: #66 and #832.

Confirmed input dependencies:

  • loadDirectoryWithOptions enables strictness based on expects_error, calls inferFixtureStrictOn, and turns individual strict flags on/off by scanning expected diagnostic codes.
  • inferFixtureStrictOn consults the baseline for TS2564 and otherwise defaults strictness to true. DirectoryLoadOptions.honor_directives defaults false.
  • The pinned upstream runner's internal/testutil/harnessutil/harnessutil.go:97 supplies defaults for newlines, default-library checking and diagnostic truncation; it does not turn strictness on based on expected errors. Configuration directives and tsconfig determine compiler options.
  • synthesizeAbsoluteTypesPackageTargets supplies missing package declarations as declare const api: any; export = api; instead of mounting their real declaration source.
  • Diagnostic filenames, baseline fallback/variant selection, file inclusion and library mounting require an independent audit against the pinned upstream runner.

Pins: typescript-go 89d5d5b2849a0db0957065889ca58536fa6d2e4a; nested TypeScript 5848bc5157b22ff7f4e3369f4645a514a433b15f.

Acceptance:

  • Compiler options and source inputs depend only on the fixture's configuration, explicit selected variant and the real pinned upstream harness inputs.
  • Changing an expected baseline's diagnostic content cannot alter options, loaded declarations, virtual-file routing or actual diagnostic filenames.
  • Mount real declarations for package types and libraries; unsupported/missing inputs produce a retained failure, never an any substitute.
  • Preserve upstream skip/unsupported status separately from passing compiler cases; run all applicable variants faithfully.
  • Add independent input-invariance controls and regenerate all affected corpus evidence. Existing raw results remain intermediate observations, not a new 100% claim.
8 days ago

Published 0234bc59818bd3ab20fd0cee6fadb2fb802bd1ad directly to origin/main as Chris Breuer without coauthors, following compiler 8e12ac031 and harness correction d739fdfea.

The harness no longer replaces actual diagnostics for 2,499 named fixtures, bypasses compilation for 13 names, copies expected library errors, rescues mismatches, or drops option-validation errors. Both compilation routes retain actual diagnostics; coarse and exact modes use the same route. Prior exact-prefix and full coarse-corpus 100% claims are withdrawn.

The compiler preserves namespace meaning through erased exports, accepts non-emitting computed keys, and applies the real any/unknown/undefined and definite-assignment rules to computed fields. Required fields still fail. The first original target run exposed an extra TS2564; that failed log is retained, and the compiler fix now gives 2/2 exact matches on the unchanged typeOnlyMerge2 and computedPropertyName cases.

Observed validation:

  • complete final checker: 4,483/4,483; program tests: 228/228;
  • harness honesty controls: 4/4; semantic field controls: 4/4 including module root;
  • real survey controls: 10/10, including absent corpora, empty selections and mismatches;
  • final stripped compiler builds; pinned 106-file Zod output remains normalized-identical at 196 TS errors and three HM9002 warnings, unchanged ceiling three;
  • fresh leading exact survey: 172/200, 28 actual failures, zero skips, exits 1;
  • normal conformance at d739fdfea: 1,400/1,423, 23 retained failures; baseline survey 582/586 with four mismatches. This older aggregate is not claimed as a rerun of the final field-initialization change.

Source/binary/fixture/baseline hashes and compressed successful and failing logs are committed here. All commands use the normal machine lock and 3,840 MB ceiling. Original upstream inputs, deadlines, skips, TODOs and ratchet ceiling remain unchanged. Twenty inactive local Zig object directories (about 1,445 MiB) were deleted after preserving evidence.

#841 tracks remaining baseline-derived strictness, real declaration/library mounting, file inclusion and upstream variant/configuration fidelity. These intermediate corpus observations do not establish faithful full-corpus parity. #840 and #832 remain open; full Bun acceptance remains incomplete in #66. TypeScript controls earn no original Bun case credit.

8 days ago

Published cc1128f62 directly to origin/main as Chris Breuer without coauthors.

Compiler inputs are now independent of expected diagnostic contents. The pinned TS7 GetStrictOptionValue returns true when strict is unset (Strict != TSFalse); this is applied consistently, then overridden by actual tsconfig, harness directives and explicitly selected variant options. No diagnostic-code scanning supplies strictness, and no expected header supplies the actual filename. Boolean variant parsing is limited to exact keys inside the selected filename's option list.

The fabricated any-exporting absolute package declarations are removed. Missing targets remain missing. Real nested TypeScript tests/lib bytes are mounted at /.lib; libFiles creates real program roots. Library imports, absolute package types and globals retain their declaration types. Actual skipLibCheck settings are preserved through configuration/variant selection and both compile paths. Direct skip directives were already supported in the program route; the corrected handling extends the missing paths and removes the raw text-based config approximation.

Observed results:

  • final input controls 6/6, including mutated-header invariance, physical library/package/global type preservation, missing input rejection and application errors under skipLibCheck;
  • real survey-gate controls 10/10;
  • unchanged type-only regression fixtures 2/2 exact;
  • corrected leading exact prefix 166/200, 34 actual failures, zero skips, exits 1;
  • full normal conformance attempt stopped with exit 125 at the unchanged 3,840 MB ceiling; no complete aggregate. This attempt preceded final library-policy wiring. The driver still eagerly evaluates declaration semantics before suppressing their diagnostics. A retained process sample shows repeated generic substitutions in the baseline survey on the real React graph.

Raw evidence and source/binary/library hashes include successful controls, compilation failures, the aborted run and process sample. No upstream source, baseline, skip, TODO, deadline or memory/ratchet limit was changed. The patch only changes the conformance harness, so no new standalone compiler or Zod result is claimed.

#842 now tracks the real declaration-graph substitution and checking cost. #841 remains open for complete variant execution, root-file inclusion and real default-library/compiler API inputs. #832 and full Bun acceptance in #66 remain open. These intermediate survey outcomes do not prove full TypeScript or Bun parity; controls earn no original Bun case credit.

8 days ago

Published source e2c643d68 and integrated evidence through 348e36e92 to origin/main. Main includes the concurrently published #839 export-owner improvements; no work was overwritten or force-pushed.

The source batch fixes five related behaviors:

  • Member-predicate metadata follows the actual rebuilt signature's binder. It no longer re-instantiates a member or its already substituted signature predicate a second time. Receiver-specific predicates preserve their separate substitution path.
  • Signature constraints/defaults share the original memo while their local substitution environment is unchanged; separate environments still produce independent binders.
  • Explicit skipLibCheck in declaration files avoids diagnostic-only interface inheritance/index relation passes while retaining inherited shapes, checked metadata and syntax diagnostics. Application validation remains active; other declaration processing still runs.
  • Program checking and cached emit use each file's .ts/.d.ts/.tsx syntax mode. A JSX root no longer forces JSX parsing onto its declaration dependencies.
  • Contextual parameter names such as object work in ordinary/assertion predicates, preserving parameter indices and regular non-predicate returns.

Observed gates: substitution controls 4/4; declaration-policy controls 3/3; complete checker 4,486/4,486; driver 198/198; latest program 232/232; parser/precedence 905/905; real survey controls 10/10. Latest stripped compiler builds under the 3,840 MB ceiling. Pinned 106-file Zod stays at 196 TS diagnostics and three HM9002 recoveries with the ceiling unchanged. Its diagnostic text changed from the prior checkpoint, and the normalized diff is retained; latest integrated output matches the first substitution build. This is a recovery ratchet, not a passing Zod project.

Real original-case evidence is deliberately not green:

  • Before the contextual-predicate parser fix, correcting per-file JSX mode reduced the two original React cases' peak from 3,597 MB to 154 MB, but both still failed exact comparison. This isolated real object-is-ReactElement syntax errors instead of fabricated JSX errors inside declaration comments.
  • Restoring that real predicate syntax exposes additional semantic work. The original React selection stopped at 3,851 MB against the unchanged 3,840 MB ceiling while intraExpressionInferencesJsx was active; its second case was unstarted.
  • The fresh integrated leading 200-case attempt stopped at the same ceiling (3,842 MB) on multiline.tsx and produced no complete aggregate. The previous 166/200 result remains historical to pre-predicate syntax and is not a latest-tree passing count.
  • A retained sample shows collectProgramCommonJsExports -> moduleExportAssignmentInfo -> compileSource -> full declaration checking. Export discovery is still recompiling/checking an owner instead of consuming the retained bound source. This is the next concrete #842 target, alongside correct generic/declaration resolution.

Evidence, failures, samples and hashes are committed. Disk-critical/admission failures and a known-bug intermediate interruption are retained. Only inactive generated test/build caches and regenerable download/HTTP caches were reclaimed; source, pinned Bun build objects and pinned WebKit libraries were preserved. No fixture, baseline, original skip/TODO, deadline or memory/ratchet ceiling was modified. No unfinished, interrupted or skipped test earns passing-case credit.

#842 remains open for these real owner/type-graph costs. #841 retains complete input/variant/default-library fidelity, #832 full TS corpus evidence, and #66 full Bun acceptance. The persistent full-port goal remains active.

8 days ago

Published source 51db032e9 and evidence 1602e3d63 to origin/main.

Declaration export-assignment discovery now inspects the retained compilation instead of reparsing and fully checking it. The independent source query prepares syntax, and conformance resolver callbacks reuse their bound owner. Normal compilation still checks declaration semantics: a control verifies the same owner later reports a genuinely missing type.

Validation:

  • Complete Program suite: 234/234.
  • Retained resolver controls: 4/4; opt-in runner controls: 3/3; survey admission/mismatch controls: 10/10.
  • Standalone compiler builds under the unchanged 3,840 MB ceiling, with 2,866 MB observed peak.
  • Pinned 106-file Zod recovery check retains 196 TS diagnostics and three HM9002 recoveries, ceiling three, at 596 MB. Diagnostics match the preceding checkpoint after normalizing only its temporary directory; this is not a passing Zod project.

The two original React cases were requested with unchanged declarations, baselines and the original 900-second deadline. The first, intraExpressionInferencesJsx, stops at 3,844 MB against the unchanged 3,840 MB ceiling (exit 125). The second, contextuallyTypedStringLiteralsInJsxAttributes02, is unstarted. No complete aggregate or passing-case credit exists. The retained process sample now places the work in normal declaration member lowering/generic substitution, rather than the removed export-discovery check.

An initial compiler admission attempt expired while waiting for the shared lock before compilation began; the same-limit retry succeeds. Both attempts are retained. Pins, source hashes, successful controls, resource failure and sample are in docs/docs/bun-port-evidence/2026-10-07-ts-export-assignment-owners.

Remaining work is correct shared/cyclic type substitution and faithful declaration-check policy in #842, with input fidelity in #841 and complete corpus/Bun acceptance in #832/#66. Full parity remains incomplete; previously fabricated corpus claims remain withdrawn (#840).

8 days ago

Published source b1242be3a and evidence 0b0339a21 to origin/main.

Generic signatures now share a substitution memo once their local binder map is fixed, across parameter, return, receiver and predicate types. The enclosing memo is restored afterward, so separate binder environments remain independent. Two new controls fail on the preceding implementation (excessive graph rebuilding and different parameter/receiver identities) and pass without changing their expectations. Nested binders/defaults and assertion-predicate identity are checked.

Validation: substitution controls 6/6; complete checker 4,488/4,488; driver 198/198; Program 234/234; opt-in runner controls 3/3; survey admission/mismatch controls 10/10. The standalone compiler builds at 3,024 MB observed peak. Pinned 106-file Zod retains 196 TS diagnostics and three HM9002 recoveries, ceiling unchanged, at 617 MB. Diagnostic text matches the preceding checkpoint after normalizing only its temporary directory; this is a recovery check, not a passing project.

The original React retry still stops at the unchanged 3,840 MB ceiling, observed 3,841 MB, exit 125. intraExpressionInferencesJsx started; contextuallyTypedStringLiteralsInJsxAttributes02 is unstarted. No complete aggregate or passing-case credit exists. Original declarations, expected diagnostics, skips, TODOs and the 900-second deadline are unchanged. A retained sample from the earlier disk-stopped attempt on the same source shows declaration member lowering and recursive inheritance-base metadata substitution (decl_single_base). Signature-map sharing does not solve these remaining recursive costs.

Disk admission refusals, the critical-disk interruption, and successful retries are retained separately. Inactive generated test/build caches and older registry-cache copies were reclaimed while preserving source, installed runtimes and pinned Bun/WebKit artifacts. All retries used unchanged resource limits. Pins, source/artifact hashes, negative controls and raw results are in docs/docs/bun-port-evidence/2026-10-08-ts-signature-memo-scopes.

#842 remains open for correct recursive/shared substitution and faithful declaration-check policy; #841 tracks input fidelity and #832/#66 full corpus/Bun acceptance. Full parity remains incomplete. Previously fabricated corpus claims remain withdrawn (#840).

8 days ago

Published source 0b8d584c1 and evidence 53167b7e5 to origin/main.

Receiver predicates now share their callable's rebuilt target when their resolved original targets match, while retaining receiver-owned annotation locations, parameter indices and assertion kinds. Unknown targets with different annotation nodes remain independently resolvable. This prevents creating another local binder when only a source location or receiver override differs.

Negative controls are retained: the preceding implementation fails the location/binder control (2 pass / 1 fail); the initial correction then fails an added receiver-override control (3 pass / 1 fail). Final controls pass 4/4 without weakening their assertions, including guard/assertion variants, independent string/number environments and different unresolved targets.

Complete checker 4,491/4,491, driver 198/198, Program 234/234, opt-in runner controls 3/3 and survey admission/mismatch controls 10/10 pass. The standalone compiler builds at 2,993 MB peak. Pinned 106-file Zod retains 196 TS diagnostics and three HM9002 recoveries, ceiling unchanged, at 615 MB. Its diagnostics match the preceding checkpoint after normalizing only its temporary directory; this recovery check does not establish a passing project.

The unchanged original React attempt stops at 3,844 MB against the unchanged 3,840 MB ceiling (exit 125). intraExpressionInferencesJsx starts; contextuallyTypedStringLiteralsInJsxAttributes02 is unstarted. No complete aggregate or passing-case credit exists. Original fixtures, declarations, baselines, skips, TODOs and the 900-second deadline remain unchanged.

The retained sample pins the remaining repeated work to decl_single_base inheritance-base metadata substitution at check.zig:166393, reached during declaration member lowering. Earlier signature-memo notes and issue comments are corrected to name this inheritance path rather than receiver predicates. The reproduced predicate defects are fixed; recursive inheritance metadata remains unresolved.

Pins, source/artifact hashes, all controls, failure and sample are in docs/docs/bun-port-evidence/2026-10-08-ts-receiver-predicate-targets. #842 remains open for recursive/shared substitution and faithful declaration-check policy; #841 tracks input fidelity and #832/#66 complete corpus/Bun acceptance. Full parity remains incomplete, and fabricated corpus claims remain withdrawn (#840).

8 days ago

Variant-execution progress landed directly on main in 3698c7a (test(ts): execute every configured fixture variant (#841)).

What changed:

  • ported the pinned TypeScript runner variation semantics for explicit multi-value boolean/enum directives: Cartesian products, *, !/- exclusions, alias deduplication, configured suffixes, and the 25-case ceiling;
  • each configured variant now owns independently materialized scalar compiler inputs;
  • expected diagnostic files are consulted only after the executable input is selected, so expected text cannot determine case admission or compiler options;
  • removed the old one-baseline/lexicographic variant selection path.

Guarded verification, run serially under the 3,840 MB ceiling:

  • variation helper: 5/5;
  • synthetic two-axis loader control: 4/4 distinct inputs;
  • expected-diagnostic mutation control: input-invariant;
  • pinned emitRestParametersFunction target matrix: 3/3;
  • named local category gate: 87/87;
  • targeted docs lint and 106-page docs build passed.

Two broad attempts remain non-results, not passes or failures: the complete conformance package reached its unchanged 900-second bound, and the baseline-aware survey reached the unchanged memory ceiling before a final summary.

This issue stays open. Root-file admission and real default-library/compiler-API input fidelity remain to be completed.

8 days ago

Root-file admission progress landed directly on main in ab5d774 (test(ts): mirror upstream fixture root admission (#841)).

Ported from the pinned TypeScript harness:

  • without a tsconfig, all virtual units are roots unless noImplicitReferences, require(, or a triple-slash path reference selects last-unit-only mode;
  • direct virtual tsconfigs now derive roots from additive files plus include/exclude, case-insensitive fixture paths, allowJs, default exclusions, output-directory exclusion, and TypeScript extension priority;
  • non-root files stay mounted for resolver/import closure instead of entering the program implicitly;
  • empty virtual units remain addressable;
  • imported diagnostics retain original fixture filenames and directive offsets;
  • missing or unsupported configured roots remain failed cases instead of falling back to a different source buffer;
  • UMD globals now come from the reachable program graph, not every declaration sitting on the virtual disk.

Guarded verification under the unchanged 3,840 MB ceiling:

  • all focused root-selection and retained-failure controls pass;
  • program unit-test filter passes (1,968 MB peak);
  • pinned packageJsonMain_isNonRecursive, importTypeNestedNoRef, and umd2 pass 3/3 (1,946 MB peak);
  • named local category gate remains 87/87 (1,954 MB peak);
  • targeted docs lint and the 107-page docs build pass.

This issue remains open. Inherited config expansion, real default-library/compiler-API inputs, and faithful unsupported/skip accounting still require completion. No complete-corpus claim is made from this focused checkpoint.

8 days ago

Checkpoint landed on main: 10a2a8cf1.

This ports virtual tsconfig inheritance into the TypeScript conformance path:

  • resolves string and array extends chains, including relative/absolute paths, extensionless paths, directories, package tsconfig fields, and package-export wildcard config targets;
  • merges array parents left-to-right before the child and rebases inherited path-bearing options;
  • feeds inherited allowJs, checkJs, strict/module options, baseUrl, and paths into fixture admission and resolution;
  • retains missing, invalid, and cyclic parent failures rather than silently falling back;
  • fixes explicit JSON package-export targets in ts_resolver;
  • corrects the pinned TypeScript baseline fallback root so compiler/conformance family baselines are compared from the requested family.

Guarded verification (one process at a time, 3,840 MB ceiling):

  • virtual-tsconfig focused controls: 10/10;
  • exact pinned compiler fixtures: 4/4;
  • exact pinned conformance fixtures: 2/2;
  • named local category regression: 87/87;
  • full ts_resolver package: pass;
  • targeted Pickier, Zig formatting, diff checks, docs-path validation, and 108-page docs build: pass.

The highest observed peak was 2,149 MB. Evidence is recorded in docs/docs/bun-port-evidence/2026-10-08-tsconfig-extends/README.md.

Remaining before #841 can close: real default-library/compiler-API inputs, null-override and config-diagnostic edge cases, and faithful unsupported/skip accounting.

8 days ago

Null-override/config-diagnostic progress landed directly on main in 17b45081a (fix(ts): preserve inherited config unsets (#841)).

What changed:

  • child compilerOptions values that TypeScript converts to undefined now clear inherited values instead of reviving the parent;
  • JSON null for recognized compiler options is retained as an explicit unset without a diagnostic; malformed recognized scalars retain their diagnostic and also clear the inherited value;
  • root files/include/exclude: null remain absent and inherit their parent lists;
  • string-list null elements are filtered silently, while other invalid elements emit TS5024 at the exact element;
  • malformed scalar/array extends values recover like TypeScript: usable parents still apply and exact TS5024 diagnostics are retained.

The TypeScript 6.0.3 parseJsonSourceFileConfigFileContent oracle independently confirmed the option results and exact locations: invalid array entries at (1,30) and (1,36), and scalar null at (1,14).

Guarded verification (one process at a time, 3,840 MB ceiling):

  • complete tsconfig package: 138/138;
  • explicit-undefined virtual-config control: 1/1;
  • inherited-null compiler-input controls: 2/2;
  • exact malformed-extends controls: 2/2 per focused run;
  • named local category gate: 87/87, no failures or skips;
  • Pickier, Zig formatting, diff checks, docs-path validation, and 109-page docs build: pass.

The unfiltered ts_conformance package attempt is deliberately not reported as passing: the supervisor stopped it with exit 125 at 3,843 MB, just above the unchanged 3,840 MB ceiling. Evidence, including that inconclusive attempt, is in docs/docs/bun-port-evidence/2026-10-08-tsconfig-null-overrides/README.md.

#841 remains open for real default-library/compiler-API inputs and faithful unsupported/skip accounting. No complete-corpus claim is made from this checkpoint.

8 days ago

Pushed a85f89e5b directly to main: test(ts): retain upstream unsupported variants (#841).

This ports the pinned typescript-go runner dynamic SkipUnsupportedCompilerOptions boundary after virtual-tsconfig inheritance and selected matrix overrides. AMD/UMD/System, Node10/Classic, explicit false interop flags, baseUrl, outFile, ES5, and explicit alwaysStrict: false variants remain in corpus totals but now report as skipped before compilation, so they cannot receive pass credit from a mismatched option surface.

Guarded verification under the 3,840 MB ceiling:

  • classifier, priority, baseline override, supported controls, and inherited baseUrl: 2/2 tests passed (309 MB peak);
  • ES5/ES2015 loader-and-runner matrix: 2/2 tests passed, exactly 1 pass + 1 skip + 0 failures (1,985 MB peak);
  • existing configured-variant loader gate: 2/2 passed (327 MB peak);
  • named category gate: 87/87 passed, 0 failed, 0 skipped (2,050 MB peak);
  • Pickier, Zig formatting, docs paths/metadata, and 110-page docs build passed.

Scope remains explicit: this closes only the dynamic unsupported-option accounting slice. The static disabled-fixture list, remaining unsupported-case discovery, default-library inputs, and compiler-API fidelity stay open. The previously bounded unfiltered package run was not repeated because it already exceeded the 3,840 MB cap; this is not a complete-corpus claim.

8 days ago

Static skip-accounting checkpoint pushed directly to main in 5ed51684c: test(ts): retain pinned disabled fixtures (#841).

This ports the pinned testrunner.skippedTests table exactly: 45 case-sensitive basenames, split into 10 compiler-API fixtures requiring built typescript.d.ts and 35 fixtures using removed compiler options. Upstream excludes them before reading or expanding variants. Home retains one explicit skip per source at that same boundary, so exclusions remain visible but never receive pass credit or multiply across an option matrix.

The separate upstream skippedEmitTests map is intentionally not promoted to whole-case skipping: it skips only an output subtest, while Home currently runs no-emit diagnostic parity.

Guarded verification on the current main parent under the 3,840 MB ceiling:

  • exact 45-entry map + case-sensitive controls + disabled two-target fixture + active sibling: 2/2 tests passed, exactly 1 pass + 1 skip + 0 failures (2,028 MB peak);
  • real pinned APILibCheck.ts: total 1, passed 0, failed 0, skipped 1 (2/2 test process, 2,004 MB peak);
  • real pinned preserveUnusedImports.ts: total 1, passed 0, failed 0, skipped 1 (2/2 cached test process);
  • dynamic unsupported-option regression: 2/2 passed, exactly 1 ES5 skip + 1 ES2015 pass (2,169 MB peak);
  • named category gate after synchronizing with current main: 87/87 passed, 0 failed, 0 skipped (2,164 MB peak);
  • Pickier, Zig formatting, diff/docs checks, and the exact pinned BunPress 0.2.17 111-page build passed.

All 45 basenames occur exactly once in the pinned nested TypeScript case tree. No fixture, expected diagnostic, baseline, or resource limit changed. Evidence: 2026-10-08-ts-static-skips.

#841 remains open for real default-library and compiler-API inputs; this is not a complete-corpus claim.

8 days ago

Default-library selector checkpoint pushed directly to main in f25b1c8: fix(ts): match pinned default library selection (#841).\n\nThis corrects ts_program to match the pinned typescript-go targetToLibMap and LatestStandard behavior:\n- an unspecified target now selects lib.es2025.full.d.ts;\n- ES3/ES5 select lib.d.ts;\n- ES2015 selects the intentional compatibility entry lib.es6.d.ts;\n- ES2016 through ESNext select their matching .full entry points;\n- explicit compilerOptions.lib resolution remains unchanged.\n\nGuarded verification under the unchanged 3,840 MB ceiling:\n- complete ts_program package passed, including all 14 target enum values plus the unspecified-target case and end-to-end explicit/default/noLib controls; peak tree footprint 2,110 MB, host low-water 30%;\n- targeted Pickier, Zig formatting, and diff checks passed;\n- exact cached @stacksjs/bunpress 0.2.17 built all 112 documentation pages; peak 219 MB, host low-water 32%.\n\nEvidence: docs/docs/bun-port-evidence/2026-10-08-ts-default-lib-selection/README.md.\n\nScope remains explicit: this fixes the program selector. Mounting the real pinned bundled declaration files into every applicable conformance run and compiler-API inputs remain open, so #841 is not complete and no full-corpus claim is made.

8 days ago

Bundled compiler-library checkpoint pushed directly to main in 07f774bbc: fix(ts): mount pinned compiler libraries (#841).

What changed:

  • conformance Program runs now mount all 108 exact files from the pinned typescript-go/internal/bundled/libs tree under the isolated compiler-host path /.typescript/lib;
  • effective target, lib, noLib, types, typeRoots, and skipDefaultLibCheck inputs flow from fixture configuration into Program without consulting expected diagnostics;
  • explicit library resolution now follows the pinned case-insensitive aliases, including ES6 -> lib.es2015.d.ts, ES7 -> lib.es2016.d.ts, and legacy esnext.* mappings;
  • noLib suppresses both default and explicit libraries;
  • skipDefaultLibCheck applies only inside the compiler-host library directory, while fixture and package declarations remain checked.

Guarded serial verification under the unchanged 3,840 MB ceiling:

  • complete ts_program package: pass; peak 2,230 MB, host low-water 32%;
  • complete ts_driver package: pass; peak 1,995 MB, host low-water 28%;
  • exact-byte 108-file mount control: pass;
  • real pinned lib.es2023.intl.d.ts Program integration: pass; peak 2,070 MB, host low-water 31%;
  • named real-fixture category gate: 87/87 passed, zero failures and skips; peak 2,116 MB, host low-water 44%;
  • Pickier, Zig formatting, diff, documentation path/metadata checks, and the exact cached BunPress 0.2.17 build of 113 pages: pass.

A separate exact run of typeFromPropertyAssignment8_1 (@lib: es6,dom) reached the unchanged 600-second wall bound and exited 124. It is not counted as a pass. No declaration, fixture, baseline, or resource limit was changed.

Evidence: 2026-10-08-ts-bundled-libraries.

#841 remains open for single-source legacy routing, real compiler-API inputs, complete input-invariance evidence, and complete corpus regeneration.

8 days ago

Mapped inheritance-base references and lifetime fixes are published in 4656fcaf3, with retained evidence.

  • Exact source bodies, declaration binders and mapped arguments remain pool-owned; consumers resolve the base surface on demand. Non-parameter rewrites retain general substitution. No mapper escapes its scope.
  • Controls cover independent arguments, eight-level metadata deferral, own/inherited ordering, normalization, ownership transfer and forced member-pool relocation. Original negative failures and the initial crash are retained.
  • Tested source stage ab5d774e4: checker 4,501/4,501, driver 199/199, Program 238/238, opt-in 3/3; compiler build completes. Pinned Zod reports 195 TS diagnostics / three HM9002 recoveries, with the ceiling unchanged. Its normalized output differs from the preceding 196-diagnostic checkpoint; the diff is retained.
  • Later fixture-harness stage 773ca888f: opt-in 3/3, survey admission/mismatch controls 10/10. These are control results, not original corpus-case credit; subsequent fixture-library changes are not covered by these aggregates.
  • Original React on 4656fcaf3 exits 125 at 3,842 MB against the unchanged 3,840 MB ceiling; diagnostic replay exits 125 at 3,844 MB. The first fixture is unfinished and the second unstarted. No complete aggregate. The replay sample now shows structural member/union substitution in generic interface instantiation as the remaining dominant work.

Shared/cyclic substitution and faithful declaration-check policy remain open in #842; input fidelity and complete corpus acceptance remain open in #841/#832/#66. Fixtures, expectations, original skips/TODOs, deadline and resource ceilings were not weakened.

8 days ago

Owned cyclic substitution references and lexical binder scope are on main in 9e98f427d and 774f72f16, with retained evidence.

Back edges preserve exact source bodies, declaration-parameter identities and mapped arguments. Completed shared ancestors can memoize without retaining an unsubstituted recursive edge. Consumers use the generic resolver for structural assignability. A subsequent regression caught loss of a recursive generic method binder; lexical scope now preserves that binder, constraints and defaults. Non-parameter rewrite maps retain the unresolved guarded path; full graph/declaration-policy acceptance remains open.

Corrected source 774f72f16 passes 4,508/4,508 checker, 200/200 driver, 241/241 Program, 6/6 focused tests, 3/3 opt-in controls and 10/10 survey admission/mismatch controls. The compiler builds at 2,896 MB. Pinned 106-file Zod retains 195 TS diagnostics / three HM9002 recoveries, ceiling three, at 512 MB. Normalized diagnostics are unchanged from the preceding checkpoint; Zod is not a passing project.

The unchanged original React selection exits 124 at the original 900-second deadline, under the normal machine lock and 3,840 MB ceiling. intraExpressionInferencesJsx is unfinished; contextuallyTypedStringLiteralsInJsxAttributes02 is unstarted. No complete aggregate or passing-case credit. The timeout path does not report its final memory peak, and this run does not establish that the earlier memory failure is solved or a controlled performance improvement across fixture-input changes.

Retained samples distinguish phases: owner-specific transfer at about one minute; interface/base refresh and UMD source scans at about seven minutes; generic constraint comparison dominated by relation.Engine.substituteTpDeepLimit at about ten minutes. The engine's separate structural substitution is the next graph-correctness target. Initial negative failures, the binder regression, an unsuccessful scope compile and deliberately interrupted first React attempt remain in the evidence. Original fixtures, declarations, expectations, skips/TODOs and limits were not weakened.

Remaining work stays linked in #842, #841, #832 and #66.

8 days ago

The relation substitution service is published in d1b893abf, with source-qualified evidence.

Checked-source comparisons retain callable, receiver-predicate and declaration metadata through the owning checker. The standalone graph walk memoizes a fixed mapper, preserves owned recursive references and maps tuple/reference arguments without expanding their bodies. Positional maps apply simultaneously, matching the pinned reference compiler. Generic binders retain constraints, defaults, variance, constness and declaration origins; callback destruction detaches only its active owner.

Negative controls exposed repeated shared-graph work, lost receiver/predicate metadata, unmapped tuple/reference arguments, transitive positional renaming, a recursive-edge failure and partial completion-cache entries. Allocation-failure injection also exposed a pre-existing 32,768-byte L1 leak when L2 construction failed; cleanup now releases it. Those failures, an initial compile error and disk admission rejection are retained. The original admission/resource floors were not bypassed.

After preserving the concurrent CommonJS-index integration, source d1b893abf passes 4,519/4,519 checker, 200/200 driver, 242/242 Program, 8/8 graph tests, 4/4 metadata/ownership/recovery tests, 3/3 opt-in controls and 10/10 survey admission/mismatch controls. Compiler builds at 2,901 MB. Pinned 106-file Zod retains 195 TS diagnostics / three HM9002 recoveries, ceiling three, at 478 MB; normalized diagnostics are unchanged. Zod is not a passing project.

The original React selection is running at the retained 2026-10-08 18:06:59 UTC snapshot, under the normal lock, unchanged 900-second deadline and 3,840 MB ceiling. intraExpressionInferencesJsx is unfinished and contextuallyTypedStringLiteralsInJsxAttributes02 unstarted. No terminal result, complete aggregate or passing-case credit is claimed. Its four-minute sample shows repeated UMD namespace source scans during interface checking; sampled footprint is not a final peak. The earlier pre-integration attempt was deliberately interrupted to validate the combined source and is retained as exit 130.

The running measurement still needs its terminal evidence. Earlier timeout/memory failures are not proved solved. Full graph/declaration-policy, input fidelity and corpus/Bun acceptance remain open in #842/#841/#832/#66. Original fixtures, declarations, expectations, skips/TODOs and limits were not weakened.

8 days ago

Parsed UMD namespace facts and exact indexed lookups are published in 30ab18c8c, with retained evidence.

The parser retains decoded names, source nodes, top-level scope and external-module eligibility alongside the erased declaration. Checker and Program use these facts instead of independently scanning raw text. Comments, strings and nested invalid declarations do not create UMD globals; token trivia and escaped names remain valid. Exact lookup caching preserves root/virtual-file restrictions and noImplicitReferences, and invalidates on source attachment, declaration mode and importer-path changes. Dynamic import expressions do not promote declaration-only scripts into modules.

Retained negative controls show two checker failures and one Program failure against the old scanners. Focused controls pass 6/6, parser selection 1,065/1,065, and the combined source after preserving require-binding integration passes 4,526/4,526 checker, 200/200 driver, 243/243 Program, 3/3 opt-in controls and 10/10 survey admission/mismatch controls. The compiler builds at 2,915 MB. Pinned 106-file Zod retains 195 TS diagnostics / three HM9002 recoveries, ceiling three, at 545 MB, with normalized output unchanged. Zod is not a passing project.

The unchanged original React selection on 30ab18c8c ends with exit 125 at observed 3,874 MB against the unchanged 3,840 MB ceiling. intraExpressionInferencesJsx is unfinished and contextuallyTypedStringLiteralsInJsxAttributes02 unstarted. No complete aggregate or passing-case credit. Its sample at about six minutes shows Program.importProgramGlobals through owner import, checked transfer and type_transfer.prepare/materialization, including repeated mapped argument allocation/free. The sampled 2.1 GB footprint is not the final peak; a later sample attempt found the process already terminal and produced no sample. These are phase observations, not a controlled performance claim.

The preceding relation-service measurement is no longer merely a running checkpoint: its terminal 900-second timeout and late UMD scan sample are published in bea9ab4ec. The first UMD-source probe was deliberately interrupted for combined-source validation and is retained as exit 130. Original fixtures, declarations, expectations, skips/TODOs, deadline and resource limits were not weakened.

Correct owner-specific graph transfer and declaration policy remain open in #842; input fidelity and complete corpus/Bun acceptance remain open in #841/#832/#66.

8 days ago

Owner-transfer scratch reuse and member batching are published in bdb366c03, with retained evidence.

The builder reuses separate bounded buffers for mapped type arguments, template text and tuple elements. Interner consumers copy those borrowed results before reuse; signature parameters are consumed before generic binder mapping uses the same buffer. Object finalization reserves the member batch once. Every source type, source owner, declaration identity, metadata table and validation remains represented, and existing unpublished-pool rollback remains active on allocation/callback failure.

A 64-row control alternates widths and exercises receiver/constructor signatures, generic binders, tuple optionality, template text and nested references. It destroys the source and changes callbacks before validating destination contents. Both transfer selections pass 11/11, including exhaustive allocation-failure rollback, cancellation, malformed-input rejection and distinct owner identities. On this exact workload, measured destination allocations fall 256 → 81. This is an allocation count for the control, not a whole-compiler improvement or completion claim.

Tested source passes 4,527/4,527 checker, 200/200 driver, 243/243 Program, 3/3 opt-in controls and 10/10 survey admission/mismatch controls. Compiler builds at 3,067 MB. Pinned 106-file Zod retains 195 TS diagnostics / three HM9002 recoveries, ceiling three, at 490 MB; normalized diagnostics are unchanged. Zod is not a passing project. The concurrent source rebase included documentation only; recorded code hashes match the published source.

The unchanged original React selection exits 125 at observed 3,849 MB against the unchanged 3,840 MB ceiling. intraExpressionInferencesJsx is unfinished; contextuallyTypedStringLiteralsInJsxAttributes02 is unstarted. No complete aggregate or passing-case credit. A process sample attempt found the process already terminal and produced no sample. Scratch allocation reduction has not completed the owner-transfer graph or original corpus.

Correct graph transfer/declaration policy and complete input/corpus/Bun acceptance remain open in #842/#841/#832/#66. Original fixtures, declarations, expectations, skips/TODOs, 900-second deadline, resource ceilings and normal lock were not weakened.

8 days ago

Pushed df55762 to origin/main: conformance options now come from the selected fixture variant and materialized directives, not the presence of an expected .errors.txt or .js baseline. Baselines still determine expectations. A new four-variant control failed before the fix (empty module kind vs commonjs) and passes after it, including an expected-error baseline and an emit baseline. The focused control passes on Zig 0.17 and 0.18 (2/2 reported tests each); adjacent variant-loader, unsupported-option, target, and strictness controls pass (2/2 each). The broader corpus-input filter reached its 180-second bound with no final result. Repository-wide Pickier remains red on unrelated files; scoped evidence-file Pickier and Zig format checks pass. Evidence: docs/docs/bun-port-evidence/2026-10-16-ts-baseline-input-invariance/. This is a partial #841 repair; real declaration inputs, routing, remaining input dependencies, and full corpus acceptance stay open. Related: #66 and #832.

8 days ago

Follow-on input-fidelity checkpoint pushed to origin/main as 8ad7879 (three files, glennmichael123, no coauthor). Selected fixture open/stat/allocation/read errors now fail corpus loading instead of silently omitting a case; a short read reports UnexpectedEndOfFile and frees its partial buffer. The source file closes before variant enumeration. The comparison mode no longer toggles the selected ES5 TS5107 diagnostic flag. That ES5 control went red-to-green, but upstream typescript-go skips ES5 fixtures, so it earns no passing-corpus credit. Focused ES5 and short-read controls each report 2/2 on Zig 0.17 and 0.18 under the unchanged 3,840 MB guard; ordinary variant loader and prior baseline-availability controls remain 2/2 on Zig 0.17. Evidence and limitations are appended in docs/docs/bun-port-evidence/2026-10-16-ts-baseline-input-invariance/. The full corpus was not completed; per-fixture loader failure records, real declarations/routing, and #832/#66 acceptance remain open.

8 days ago

Baseline-root input-fidelity checkpoint pushed to origin/main as e9f03c1 (three files, glennmichael123, no coauthor). An explicitly configured primary or fallback baseline root must now open as a directory before cases are loaded. Per-case lookup treats only FileNotFound as an absent baseline; other access errors propagate. The control was red before the fix (invalid file root returned a corpus entry instead of NotDir) and now verifies both invalid-root slots plus a valid empty directory; 2/2 reported tests pass on Zig 0.17 and 0.18 under 3,840 MB. The earlier baseline-backed four-variant control remains 2/2 on 0.17. The initial red assertion leaked four test-owned allocations on unexpected success; the final test frees that result. Evidence: docs/docs/bun-port-evidence/2026-10-16-ts-baseline-input-invariance/. Full corpus, concurrent root replacement, and remaining #841/#832/#66 requirements stay open.

8 days ago

Pushed dccf0b7 to origin/main as glennmichael123 (three files, no coauthor). The conformance loader now keeps primary/fallback baseline directory handles open, opens the selected error/diff file relative to those handles, and reads exact diagnostic headers from that same open file. This removes the access-then-reopen pathname race and keeps root identity stable if the pathname is replaced. Shared physical-file reads also use exact-length reading, failing short reads rather than returning a slice shorter than its allocation. A rename/replacement control reads original through the held root and replacement through a new root (2/2 on Zig 0.17 and 0.18); fallback/no-content-diff and pinned real baseline controls pass. Evidence: docs/docs/bun-port-evidence/2026-10-17-ts-baseline-handles/. The opt-in exact START=0 LIMIT=5 corpus attempt reached its unchanged 240-second wall bound (exit 124), so it has no terminal aggregate or passing-case credit. Windows, full corpus, and remaining #841/#832/#66 acceptance stay open.

8 days ago

Pushed 1b07917 to main: conformance virtual filename directives now parse case-insensitively, including the pinned // @fileName: a.js fixture. The exact ts-expect-error-js baseline passed 1/1 on Zig 0.17 and Zig 0.18 under HOME_RUN_MAX_MB=3840; the focused marker test passed 2/2 and existing buildVirtualFileIndex tests passed 5/5 on 0.17. The real exact case takes about two minutes, so a 120-second bound was inconclusive; the earlier five-case 240-second window remains unverified. Evidence: docs/docs/bun-port-evidence/2026-10-17-ts-virtual-filename-case/README.md and manifest.json. #66 remains open for full parity.

8 days ago

Follow-up: the next exact single-case window (START=1 LIMIT=1) hit the guarded 240-second bound on Zig 0.17 with no terminal result. The first, now-correct exact fixture passes but takes about two minutes. Tracking this distinct program-path performance investigation in #908; neither the timed-out case nor the earlier five-case window is credited as passing.

Sign in to comment on this issue.