ReviewOS

home-lang/home

Native Stats Temporal accessors and exact signed timestamp parity

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

Native Stats accessor and signed timestamp implementation is published on main. Remaining acceptance is executing the unchanged Temporal corpus through genuine capability detection; the pinned common harness currently exports no hasTemporal value, so that original skips even with native JavaScriptCore Temporal enabled.

Source 6cbf3e648d86184ad28995d663832c6ae6a60345 supplies atimeInstant, mtimeInstant, ctimeInstant and birthtimeInstant, retains native seconds/nanoseconds, supports actual symbol metadata through proxies/inheritance, and enforces lazy property descriptors/extensibility. Both BigInt Stats calls and constructor/subclass paths use BigInt division. SDK class/global-object layouts remain unchanged.

Published evidence: build 56/56, three passing Node/Home controls, and 104 unchanged originals/validators with 356 passing cases and 94 process checks. There are 15 case skips and two complete-file skips receiving no pass credit. Darwin filesystem timestamp clamping is tested against Node; larger nanoseconds are independently verified through constructors. All failed development experiments remain captured alongside final results.

The full ownership run had 142 passes and one stale positive-generation fixture failure. Fixture caee73138ed00c717e7bb2542693101aeb1747af now asserts the existing owned console/profiler sources and explicit missing/duplicate cases. Six affected ownership/ABI checks and fixture Pickier pass after correction; the full ownership command was not repeated. Pickier also passed the other modified files.

Remaining:

  • Resolve the pinned common.hasTemporal integration without falsifying feature detection or modifying the original test to claim a pass.
  • Execute the complete upstream Temporal stat behavior on the actual native engine once its capability gate is valid.
  • Retain skipped cases/platform limits as gaps in the broader #66 acceptance; this checkpoint does not prove all-suite/all-platform or independent SDK builds.
8 days ago

Native Stats timestamp source 6cbf3e648d86184ad28995d663832c6ae6a60345 is published on main through ac4a7cc90427c2ca5066b14b107d49c517485a4c.

The owned native binding now supplies the four lazy Temporal.Instant accessors, retains original signed seconds/nanoseconds, uses actual partial-nanosecond symbols for inherited/proxy semantics, respects property extensibility, and keeps both BigInt Stats call/constructor/subclass paths in BigInt arithmetic. Existing SDK class/global-object layouts remain unchanged.

Verified runtime results: build 56/56; Node, disabled-Temporal Home and native-enabled Home controls all passed; all 104 unchanged originals and independent validators returned zero (356 passing cases, 94 passing process checks, zero failures/TODOs/filtering/retries). Fifteen original case skips and two complete-file skips receive no pass credit. Darwin filesystem range clamping is checked against Node; larger nanoseconds are independently verified through native constructors.

The full ownership suite produced 142 passes and one stale positive-generation fixture failure: it expects already-owned ConsoleObject/BunCPUProfiler sources to remain external. The fixture correction and affected follow-ups are pending the machine-wide lock. Pickier passed the three modified files before that test-only correction. Raw successful and failed development evidence is preserved for publication with the follow-up results.

The unchanged Temporal original still skips because its pinned common module lacks hasTemporal. #894 remains open for that corpus integration, and #66 remains open for full suite/platform acceptance and independent builds.

8 days ago

Verified native Stats timestamp checkpoint (2026-10-14): #894 now has four native lazy Temporal.Instant accessors, exact signed filesystem nanoseconds, genuine metadata symbols for inherited/proxy access, extensibility checks, and BigInt call/constructor/subclass arithmetic. Source 6cbf3e648, fixture correction caee73138, and 623 Git-verified evidence artifacts are published on main through ceb816fdf. Build 56/56 and all three Node/Home native controls passed. All 104 unchanged original commands/validators returned zero: 356 passing cases, 94 process checks, no failures/TODOs/filtering/retries; 15 case skips and two complete-file skips receive no pass credit. The 143-case ownership run had 142 passes/one stale console fixture failure; the corrected positive-generation/ABI/Stats/console follow-up passed six checks, and Pickier passed all modified files. The full ownership command was not repeated after the test-only fixture correction. #894 remains open because the pinned Temporal common harness lacks hasTemporal and the unchanged original skips even with the actual native engine enabled. Full suite, skipped cases, other platforms and independent SDK/object builds remain outstanding; #893/#878 callback traces and #891 integration remain open.

8 days ago

Published 5c2404bb280f55c195b2db366b7f57609022773f (fix(node): expose native Temporal capability (#894)) directly to main.

The capability is not hardcoded: process.config.variables.v8_enable_temporal_support is derived from the actual globalThis.Temporal installed in the current JSC VM, so BUN_JSC_useTemporal-disabled runs report 0 and enabled runs report 1. The pinned Node common harness now ports Node main's hasTemporal declaration plus its CJS and ESM exports.

Verification:

  • zig fmt --check and Pickier passed the three changed files; git diff --check passed.
  • The exact JavaScript expression embedded in process.zig evaluated to 0 with Temporal absent and 1 with a Temporal namespace present.
  • CJS false-path and CJS/ESM true-path harness controls passed.
  • Node main was checked directly and uses !!process.config.variables.v8_enable_temporal_support with both CJS and ESM exports.
  • Commit has exactly three files and is authored/committed by glennmichael123 <gtorregosa@gmail.com> with no coauthor trailer.

The native build prerequisite discovered during verification was also published as 9839b10338c9233bded21a45e88c7973c81a17ec: Home now supplies the pinned WebKit ICU include root when rebuilding BunProcess.cpp, and the standalone runtime no longer initializes Bun-only debug allocator state that Home does not expose or use. A fresh isolated-cache native-runtime-bindings build passed 50/50 steps (BunProcess.cpp compiled successfully); build-support/native_bindings.zig passed 5/5 tests on pinned Zig 0.17 and Zig 0.18.0-dev.146.

No positive execution credit is claimed yet for the unchanged test-fs-stat-temporal.mjs. Full native runtime compilation was attempted one guarded process at a time, but Debug, ReleaseSafe, ReleaseSmall, ReleaseFast, Zig 0.18, and the self-hosted backend each crossed the fixed 3,840 MB ceiling (nearest peaks were 3,858–3,879 MB), so the watchdog terminated them and the ceiling was not raised. #894 should remain open until the unchanged original is run against a fresh native binary with Temporal genuinely enabled.

8 days ago

Fresh current-main verification attempted after the already-landed 5c2404b Temporal capability export. The native zig build home -j1 did not finish: the guarded process tree reached 4143 MB and the unchanged 3840 MB ceiling stopped it (exit 125); the pre-existing zig-out/bin/home binary predates that source. I did not raise the cap, reuse the stale binary as proof, or run/credit the unchanged Temporal original. This issue's original-test acceptance remains open. Task-generated build caches were removed; no source was changed for #894.

8 days ago

Current-main audit at 1b07917: the capability bridge named in this issue is already present in packages/runtime/src/jsc/process.zig (v8_enable_temporal_support is computed from globalThis.Temporal) and the pinned common/index.js + index.mjs exports were added by 5c2404b. I attempted the unchanged test-fs-stat-temporal.mjs under HOME_NATIVE_VM=1, HOME_CORPUS_FULL_VM=1 and the 3,840 MB guard, but the available zig-out/bin/home build reports jsc-disabled before executing the test. Therefore this is a source correction only; no actual Temporal corpus pass is claimed. A fresh JSC-enabled native build/test remains required.

8 days ago

Current-main audit of #894 under the fixed 3,840 MB host ceiling: the only v8_enable_temporal_support implementation in tracked Home runtime source is packages/runtime/src/jsc/process.zig:415, installed by jsc/tool_main.zig, while native process.config is constructed in the Home-compiled packages/runtime/upstream/src/jsc/bindings/BunProcess.cpp:2499-2535 and currently sets only the i18n flag. The original common/index.js now reads the Temporal flag, but the native producer does not set it. This is a source-path discrepancy, not yet a tested native failure.

Available home, homecheck, and home-debug binaries all reported jsc-disabled for the unchanged test-fs-stat-temporal.mjs original. I attempted a serial JSC-enabled build with pinned Zig 0.17 under run_bounded 900 and HOME_RUN_MAX_MB=3840; the supervisor stopped it at exit 125 when the sampled tree footprint reached 4,016 MB (largest process 4,001 MB). I did not raise the cap, edit the original, or count any Temporal case as passing. Native implementation and unmodified original execution remain open; no source change is claimed.

Sign in to comment on this issue.