Scheduler and timer payload checkpoint (2026-10-12): source and verified evidence. Scheduler now has its class prototype, illegal public constructor and branded singleton allocated through Reflect.construct. yield/wait expose correct names/arity, reject foreign receivers and use actual native promise immediate/timeout operations. yield ignores incoming result/options arguments and resolves undefined. Promise timeouts retain opaque result values directly, preserving identity without reading Symbol.isConcatSpreadable or spreading the payload.
54/54 Debug steps; 26 native groups; 52 unchanged pinned originals: 179 passed cases plus thirty-five process checks, zero failures/skips/filters and two TODOs. Fourteen ABI controls (452 assertions) and 32 report-validator controls pass. All 643 artifacts and 95 replayed reports validate, preserving eleven negatives. Node/Home controls verify prototype/construction, receiver and argument/result semantics, names/arity and opaque values. Home baseline stops at the plain-Object Scheduler mismatch; no pre-fix opaque-value runtime failure is claimed. Two committed source hashes match tested bytes. Explicit Pickier scans match thirteen baseline errors and 74 warnings, zero new findings.
Remaining: General Promise identity/trigger delivery, every cancellation/error ordering, FileHandle transfer, watcher overflow lifecycle and Linux/Windows/Release/ASAN proof remain #877. Directory #878, corpus #876, context #871/#856, performance #869/#873/#874/#872 and HTTPS #875/#532 stay open. Two TODOs receive no pass credit; full Bun-suite parity remains unproven. Known crash controls were not rerun.
Previous checkpoints and evidence remain in the issue comments and repository history.
Promise watcher iterator checkpoint (2026-10-12): source and verified evidence. Promise fs.watch is a genuine lazy async generator with direct next/return/throw and self iterator identity. File URL paths convert to native paths; Buffer paths preserve bytes. Preabort opens no native watcher; active abort preserves AbortError cause. Native close/error and iteration exit share finally cleanup for watcher, abort listener and FIFO. Options validate persistent/recursive/signal/encoding/maxQueue/overflow; queues bound events with the actual Node overflow error code/message or warning behavior.
54/54 Debug steps; 26 native groups; 44 unchanged pinned originals: 168 passed cases plus twenty-nine process checks, zero failures/skips/filters and two TODOs. Four added originals cover glob/regexp/function/mixed ignore options. Fourteen ABI controls (452 assertions) and 32 report-validator controls pass. All 603 artifacts and 87 replayed reports validate, preserving eleven negatives. Node/Home iterator-abort and refined UTF8 named-event controls pass. Initial Home URL rejection, Node Buffer encoding rejection and first-event startup assumption remain retained. Pickier explicitly scans two sources: eighteen baseline errors, warnings reduced from 111 to 109, zero new findings.
Remaining: Abort stopPropagation resistance, every overflow/error combination, queue stress, native watcher hook identity and Linux/Windows/Release/ASAN proof remain unverified or incomplete. Buffer/string option extensions are not Node parity claims. General Promise/native producers and FileHandle transfer #877, directory #878, corpus #876, context #871/#856, performance #869/#873/#874/#872 and HTTPS #875/#532 remain open. Two TODOs receive no pass credit; full Bun-suite parity remains unproven. Known crash controls were not rerun.
Native FileHandle ownership checkpoint (2026-10-12): source and verified evidence. Native open completion creates a branded destructible owner for the exact descriptor. Its native storage holds the shared async ID; public getAsyncId delegates to it and remains stable after close. FILEHANDLE init exposes the actual native owner with descriptor access and trigger zero. Real close jobs root the owner and deliver FILEHANDLECLOSEREQ init/before/after/destroy around completion; synchronous/deferred close paths retire the same owner and POSIX close errors are preserved.
GC performs native cleanup and schedules its warning on the owning context. Per-global shutdown retires descriptors only after native jobs quiesce. Transfer detaches sender ownership before receipt/restoration adoption. Canonical-path lsof controls verify abandoned GC closes its descriptor with one warning and worker shutdown closes a retained descriptor. Failed dev-fd/noncanonical observation assumptions, private closed-fd sentinel assumption, compilation failures and memory admission/stop outcomes remain retained.
54/54 Debug steps; 26 native groups; 40 unchanged pinned originals: 168 passed cases plus twenty-five process checks, zero failures/skips/filters and two upstream TODOs. Fourteen ABI controls (452 assertions) and 32 report-validator controls pass. All 594 artifacts and 83 replayed reports validate, preserving eleven negatives. Ten tested source hashes remain unchanged across TypeScript-only main updates. Pickier explicitly scans three changed JS sources and matches baseline findings at eighteen errors and 128 warnings, zero new findings.
Remaining: General Promise identity/trigger delivery, exact native stream-read resource types, exhaustive transfer/concurrency/error cleanup and Linux/Windows/Release/ASAN proof remain #877. Directory #878, corpus #876, context #871/#856, performance #869/#873/#874/#872 and HTTPS #875/#532 remain open. Full Bun-suite parity remains unproven, two TODOs receive no pass credit, and descriptor-zero runtime proof remains absent.
Bound FileHandle cleanup checkpoint (2026-10-12): source and verified evidence. FileHandle.close is an own bound arrow function: detached cleanup retains the receiver and repeated calls complete. Closed read() now reports read as the EBADF syscall. Ordinary readLines with autoClose:false retains caller ownership. Five additional unchanged originals cover readLines, chmod, appendFile and two write-stream/FileHandle controls.
54/54 Debug steps; 26 native groups; 40 unchanged pinned originals: 168 passed cases plus twenty-five process checks, zero failures/skips/filters and two upstream TODOs. Fourteen ABI controls (452 assertions) and 32 report-validator controls pass. All 580 committed artifacts and 83 replayed reports validate, preserving eleven negative outcomes. Runtime source hashes are unchanged after integrating a TypeScript-only main update. Node reference controls, initial Home failures and the rejected promise-identity assumption remain retained.
Lint accounting correction: Pickier 0.1.71 initially scanned zero files. Explicit-extension isolated scans cover both changed files; baseline and final findings match at eighteen errors and 111 warnings, with zero new findings. Earlier five-error/one-warning counts are insufficient for this broader scan.
Remaining: getAsyncId requires actual native FileHandle ownership/identity; a JavaScript-only counter would not complete that port. Native producer/Promise hooks, transfer and exhaustive concurrency/cleanup remain #877; directory #878, corpus #876, context #871/#856, performance #869/#873/#874/#872 and HTTPS #875/#532 remain open. Two TODOs receive no pass credit. Full Bun-suite parity and Release/ASAN/all-platform verification remain open. Descriptor-zero runtime behavior remains unproven; its earlier aborted reference is not rerun.
FileHandle options and integrated runtime checkpoint (2026-10-12): FileHandle source, runtime integration and verified evidence. FileHandle.writeFile forwards flush to native writes and validates invalid options; public filesystem helpers retain ordinary handle offsets. Descriptor construction preserves zero through nullish fallback, with no descriptor-zero runtime pass claimed. The integrated runtime migrates the dev-server dump writer to Zig Io with explicit flush and shares registered promise completion callbacks; immediate and delayed CLI --print controls pass.
54/54 Debug steps; 26 native groups; 35 unchanged pinned originals: 168 passed cases plus twenty process checks, zero failures/skips/filters and two upstream TODOs. Fourteen ABI controls (452 assertions) and 32 report-validator controls pass. All 1156 committed artifacts and 157 replayed report outcomes validate, retaining 23 negatives, including the interrupted reporter capture. Seven integrated source hashes match the tested commit. Initial Home/reference failures, failed integration builds and memory stop/admission outcomes remain retained. Five existing Pickier errors and one warning remain; changed native JS controls lint clean.
Remaining: The Node descriptor-zero reference aborted and was not rerun; its trigger scripts are excluded and no runtime pass is awarded. Earlier Home opened descriptor 5. General Promise/native producers, FileHandle async IDs, transfer and exhaustive concurrent cleanup remain #877. Directory platform/queued proof #878, corpus #876, context #871/#856, performance #869/#873/#874/#872 and HTTPS #875/#532 remain open. Two TODOs receive no pass credit. Full Bun-suite parity and Release/ASAN/all-platform verification remain open.
FileHandle byte-stream checkpoint (2026-10-11): source 30ab0d71b and verified evidence. FileHandle.readableWebStream now uses the handle’s real native reads and reference counts. Byte/BYOB readers, empty EOF, cancellation, retained ownership by default and autoClose at EOF/cancellation are verified. Closed/closing/locked state and options are validated; non-bytes type options warn while still creating byte streams. Cleanup relinquishes the stream reference once and awaits native/pending close when needed.
54/54 Debug steps; 26 native groups; 35 unchanged pinned originals: 168 passed cases plus twenty process checks, zero failures/skips/filters and two upstream TODOs. Fourteen ABI controls (452 assertions) and 32 report-validator controls pass. All 539 committed artifacts and 78 replayed report outcomes validate, retaining eleven deliberate negatives. Source bytes match tested hashes after integrating a benchmark-only main update. The initial Home autoClose failure, Node v26.10.0 controls, both builds, terminal cache cleanup and source/pin hashes remain retained. Five existing Pickier errors and one warning were reproduced on the committed baseline; the controls add no findings.
Remaining: Concurrent close during native reads, stale descriptor misuse, transfer/deserialization, exhaustive stream/error-close cleanup and FileHandle.getAsyncId remain unverified or incomplete. Excluded lifecycle fixtures were not run. General Promise/native-producer integration remains #877; directory queued/platform proof #878, corpus #876, context #871/#856, performance #869/#873/#874/#872 and HTTPS #875/#532 remain open. Two upstream TODOs receive no pass credit. Earlier excluded regressions, full Bun-suite and Release/ASAN/all-platform verification remain open.
Earlier checkpoints (superseded by current FileHandle evidence above)
Native directory callback checkpoint (2026-10-11): source 0d83b6dc6 and verified evidence. Unbuffered directory read callbacks now execute inside their actual FSREQCALLBACK; close callbacks receive the request as their receiver and one error argument. Buffered callbacks use nextTick without another filesystem request, while synchronous buffered reads remain available. Promise overloads share the operation queue. Null callbacks, closed read overloads, immediate close state and ordinary callback exceptions follow the verified reference contract.
54/54 Debug steps; 26 native groups; 22 unchanged upstream files/invocations: 134 passed cases plus fifteen process checks, zero failures/skips, two upstream TODOs and 59 filtered exclusions. Fourteen ABI controls (452 assertions) and 32 report-validator controls pass. All 454 committed artifacts and 65 replayed report outcomes validate, preserving deliberate negatives. Source/original hashes match committed and pinned bytes. Node v26.10.0 and Home controls verify receivers, argument counts, real execution identity/resource, buffering, queue behavior and exception delivery. The rejected initial close-receiver assumption and Home pre-fix failure remain retained. Pickier keeps three preexisting errors and two quote warnings; the native control adds no findings.
Remaining: #878 remains open for repeated callback throws, every queued error combination, Windows/all-platform and Release/ASAN proof. General Promise/continuation hooks, directory/glob grouping beyond these verified paths and other producers remain #877. The direct-stream cancellation and WebSocket client TODOs receive no pass credit; filtered cases are exclusions. Corpus #876, context #871/#856, performance #869/#873/#874/#872 and HTTPS #875/#532 remain open. Earlier excluded regressions and the broader ABI suite were not rerun. This checkpoint does not establish full Bun-suite completion.
Earlier checkpoints (superseded by current callback evidence above)
Owned directory stream checkpoint (2026-10-11): source 6b57de653 and verified evidence. Dir now owns branded native descriptors/iterators, with streaming reads, configured buffering, file kinds, descriptor-relative recursive opens, buffer names/paths and URL validation. Async open/read/close use actual filesystem jobs, Strong roots, admission/barriers and cancellation cleanup. Explicit close, iterator exit, GC and worker shutdown retire real OS descriptors. Collection warnings defer to the live owning context; async byte paths are copied before scheduling. Pinned class/global layouts and JS2Native IDs are unchanged.
Final validation: 54/54 Debug steps; 26 native groups; seventeen unchanged pinned originals with 119 passed cases plus twelve process checks, zero failures/skips/filters and two upstream TODOs. GC/worker lifecycle controls inspect actual OS descriptors. All three SDK configuration transitions pass. Fourteen ABI controls (452 assertions), five Zig binding checks and 32 report-validator controls pass. The publication executable is byte-identical to the runtime-tested executable. All 844 committed artifacts and 120 replayed report outcomes validate, including 23 deliberately negative or historical failed outcomes. Three existing Pickier errors and one warning were reproduced on the committed baseline.
The exact WebKit SDK was restored and verified against its release SHA256. Its disappearance exposed stale native configuration; the pinned maker ignores advertised metadata/directory dependencies, so native configuration now declares these untracked observations through the supported build API. Failed SDK/configuration runs, the bufferSize:null regression and rejected Node reference assumptions remain retained. Node ordinary recursion passes; Node itself fails recursive traversal after its root path is renamed, which remains a separate parity consideration. No original assertions/snapshots were changed.
Remaining: #878 stays open for full read callback receiver/exception semantics and Windows/all-platform/Release/ASAN proof. Directory/glob resource grouping, general Promise/continuation lifecycle and other producers remain #877. The upstream direct-stream cancellation and WebSocket client TODOs receive no passing credit. Earlier #874/#872 failures were not rerun; corpus #876, context #871/#856, performance #869/#873 and HTTPS #875/#532 remain open. This establishes directory ownership progress, not full Bun-suite completion.
Earlier checkpoints (superseded by current ownership evidence above)
Async snapshot and storage receiver checkpoint (2026-10-10): source 63a751e4b and verified evidence. AsyncLocalStorage.snapshot now captures and enters a real resource, preserving its trigger, execution identity, storage and before/after hooks. Controls verify arguments and restoration after callback exceptions. Storage run/exit callbacks receive null, including disabled exit, and retain independent store restoration. Both pre-fix failures and passing Node v26.10.0 references are retained.
Final-source build: 54/54 Debug steps; 25 native groups; 32 validator controls. Sixteen unchanged pinned original files: 119 passed cases plus eleven process checks, zero failures/skips/filters, two upstream TODOs. The unfiltered AsyncLocalStorage file contributes 26 passes and its two TODOs: readable stream direct .cancel and WebSocket client. Neither TODO receives passing credit. All 406 committed artifacts and 59 replayed report outcomes validate, including deliberately negative controls; source hashes match committed bytes. Pickier has zero errors and two existing warnings. Inactive derived cache cleanup enabled the guarded build/tests while preserving source, installed Home, active work and evidence.
General Promise/continuation lifecycle and other native producers remain #877. Actual context frames remain #871/#856. Directory descriptor/iterator lifetime and rename identity remain #878. Earlier #874/#872 failures were not rerun. Corpus #876, performance #869/#873, HTTPS #875/#532, full Bun-suite and Release/ASAN/all-platform verification remain open. Native ABI code was unchanged and broader ABI gates were not rerun. This checkpoint does not establish full-suite completion.
Earlier checkpoints (superseded by current validation above)
Async binding checkpoint (2026-10-10): source b9a4f7da6 and verified evidence. AsyncResource instance/static bindings now preserve call-time receivers, explicit null/falsy receivers, arguments and function arity. AsyncLocalStorage.bind captures a real resource and enters its scope, preserving storage, execution resource identity and hook behavior. Controls check restoration after callback exceptions; the pre-fix failure and Node v26.10.0 reference remain retained.
54/54 Debug steps; 25 native groups; 32 validator controls. Fifteen unchanged pinned original files: 93 test cases plus eleven process checks, zero failures/skips/TODOs/filters. All 390 committed artifacts and 58 replayed report outcomes validate, including deliberately negative controls. Source hashes match committed bytes. Pickier has zero errors and two existing warnings. Native ABI code was unchanged and its broader gates were not rerun.
General Promise/continuation lifecycle and remaining native producers remain #877. Actual context frames remain #871/#856. Directory handles remain path-backed placeholders under #878; descriptor/iterator lifetime, rename identity and teardown are unfinished. Earlier #874/#872 failures were not rerun. Corpus #876, performance #869/#873, HTTPS #875/#532, full Bun suite and Release/ASAN/all-platform verification remain open. This is a bounded conformance checkpoint, not full-suite completion.
Earlier checkpoints (superseded by current validation above)
Compound rm/opendir callback checkpoint (2026-10-10): source c176f88fb and verified evidence. Callback rm validates directories through native callback lstat, then deletes through native callback rm. Opendir stat validation/completion uses the native callback lane with existing error mapping. Dir.close callbacks deliver through nextTick, so throws reach uncaughtException rather than rejecting internal operation promises. Queue serialization is preserved.
25 native groups; 32 validator controls; 54/54 Debug steps. Twenty-one unique original files, invoked twenty-two times: 111 passes plus thirteen process checks, zero failures/skips/TODOs, 123 per-invocation filtered cases. All 466 committed artifacts and 65 restored report outcomes validate; source hashes match committed bytes. Unchanged opendir and exact rm validation selections pass. Initial bounded failure and rejected read-exception reference assumption remain retained; read delivery was restored. Upstream assertions/snapshots and pin hashes are unchanged. Pickier retains three existing prefer-const errors and one warning, reproduced by baseline.
Dir remains a lazy path-backed listing with a placeholder handle. #878 requires actual descriptors/iterators, rename identity, streaming and platform ownership. Compound cp, directory/glob resource grouping and full read exception/receiver behavior remain open with promise/native-producer work in #877. Earlier #874/#872 were not rerun and remain open. Corpus #876, performance #869/#873, HTTPS #875/#532 and context #871/#856 remain open. Excluded regressions remain unverified; full Bun suite and Release/ASAN/all-platform coverage remain open under #66.
Earlier status and acceptance requirements (historical where superseded):
Current status: explicit resources, nextTick, native timers and ordinary filesystem callback/promise request boundaries are verified on Darwin arm64. Compound adapters, engine promise hooks, other native producers and full-platform behavior remain incomplete.
- Explicit resource, TickObject and ordinary native timer IDs/scopes/lifecycle.
- Native filesystem promise-task creation/result delivery/cleanup.
- Direct ordinary filesystem callback task delivery without promise targets, including vector result shapes.
- Callback/promise request creation-context restoration and worker filesystem shutdown controls.
- Compound rm/cp and directory/glob adapters; full request grouping/receiver parity.
- Promise engine creation/resolve hooks and continuation ID propagation.
- Sockets, DNS and worker producer hooks; wider abort/error/collection/fatal-error/teardown behavior.
- Windows UV execution, Linux/Windows and complete unchanged native producer corpus.
Native filesystem callback/context checkpoint (2026-10-10): source 5fc0c84ba and verified evidence. The binding detects callbacks in standard argument positions; callback-capable constructors retain promise entry points and allocate no promise target in callback mode. Actual owner-thread completion delivers the callback in its request scope, then releases ownership. Ordinary public adapters, including vector reads/writes, retain result shapes. Early abort uses nextTick. Both callback/promise requests restore creation-time async-local state and restore the caller after delivery. Node/Home controls, vector originals and worker filesystem shutdown pass.
25 native groups; 32 validator controls; 54/54 Debug steps. Twenty original files: 110 passes plus twelve process checks, zero failures/skips/TODOs, 99 filtered cases. All 458 committed artifacts and 63 restored report outcomes validate; source hashes match committed bytes. Original assertions/snapshots and pin hashes are unchanged. Interrupted builds, bounded pre-fix failure, corrected receiver expectation and cache cleanup remain retained, with unchanged guards/deadlines. Pickier retains three existing fs prefer-const errors and two warnings; the committed baseline reproduces those errors.
Compound rm/cp and directory/glob adapters, full grouping/receiver parity, wider abort/exception/shutdown/collection and Windows UV verification remain in #877. Promise-engine hooks/continuation IDs and other native producers remain incomplete. Earlier #874/#872 were not rerun and remain open. Corpus #876, performance #869/#873, HTTPS #875/#532 and context #871/#856 gaps remain open. Excluded regressions remain unverified; full Bun suite and Release/ASAN/all-platform coverage remain open under #66.
Earlier checkpoints and original gap evidence (historical):
Current status: explicit AsyncResource, TickObject, ordinary native timers and filesystem promise-task lifecycle boundaries are verified on Darwin arm64. Promise engine/continuation, callback adapter, other native producers and full-platform behavior remain incomplete.
- IDs and scopes from explicit resource, nextTick and native timer transitions.
- Ordinary timer firing/cancel/completed-refresh lifecycle controls.
- Native filesystem promise-task creation, result delivery and cleanup across ordinary, recursive readdir and copy paths.
- Worker filesystem shutdown and independent hook registration controls.
- Promise engine creation/resolve hooks and continuation ID propagation.
- Callback-adapter request types/grouping; sockets, DNS and worker producer hooks.
- Broader abort/error/shutdown/collection and hook mutation/fatal-error behavior.
- Windows UV behavioral execution, Linux/Windows and full unchanged native producer corpus coverage.
Native filesystem request checkpoint (2026-10-10): source bbc6f8dee and verified evidence. Native filesystem tasks retain a request view associated with their actual Promise. Creation emits init with tracked IDs/triggers; owner-thread result conversion/settlement executes in before/after scope; cleanup emits destroy and releases ownership. Ordinary workpool, recursive readdir, copy-parent and Windows UV paths use the helper. Copy/readdir parent cleanup is deferred through result delivery and conversion errors. Node/Home controls and worker filesystem shutdown pass.
25 native groups; 32 validator controls; 54/54 Debug steps. Seventeen original files: 110 passes plus nine process checks, zero failures/skips/TODOs, 99 filtered cases. All 431 committed artifacts and 60 restored report outcomes validate; final source hashes match committed bytes. Exact ordinary filesystem promise/copy filters validate. Assertions/snapshots and pin hashes are unchanged. Initial fixture assumptions, pre-fix control failure and full-volume interruption remain retained. Guards were preserved. Pickier has zero errors and one warning.
Promise engine hooks/continuation IDs, callback-adapter request types/grouping, sockets/DNS/worker producers, broader abort/collection/shutdown and all-platform behavior remain in #877. Node optimized promise APIs can use callback jobs; Home instruments its actual native promise tasks. Windows UV behavior remains unverified. Earlier #874/#872 were not rerun and remain open. Corpus #876, performance #869/#873, HTTPS #875/#532 and context #871/#856 gaps remain open. Excluded regressions remain unverified; full Bun suite and Release/ASAN/all-platform coverage remain open under #66.
Earlier checkpoints and original gap evidence (historical):
Current status: explicit AsyncResource, TickObject and ordinary native timer ID/scope/lifecycle boundaries are implemented and verified on Darwin arm64. Native IO/worker and promise propagation, wider teardown/collection and full-platform behavior remain incomplete.
- Shared IDs from explicit resource creation, nextTick and native timer scheduling.
- Tracked execution ID/resource/trigger and restoration after callbacks.
- init/before/after/destroy for explicit resources and TickObject queue transitions.
- Ordinary timeout/immediate/interval, cancellation and completed-timeout refresh lifecycle controls.
- Independent hook registration enable/disable ownership.
- Promise and native IO/worker producer propagation and promiseResolve.
- Wider timer refresh/reconfiguration, error/shutdown, collection and hook mutation/fatal-error behavior.
- Linux/Windows and full unchanged native producer corpus coverage.
Native timer lifecycle checkpoint (2026-10-10): source 5caf2ac88 and verified evidence. Home owns the ABI-matched native timer callback bridge. Creation, firing, cancellation and completion deliver actual init/before/after/destroy transitions; callback scope identifies the timer resource/ID/trigger inside restored async-local context. Intervals retain their ID, and refreshing a completed timeout creates a fresh ID. Lifecycle calls stop with script execution. Node/Home controls and all 20 unchanged original timer cases pass; generated source bytes and exactly one owned unity include are verified.
25 native groups; 32 validator controls; 54/54 Debug steps. Fifteen original files: 95 passes plus nine process checks, zero failures/skips/TODOs, 40 filtered cases. All 419 committed artifacts and 58 restored report outcomes validate; source hashes match committed bytes. ABI verification combines 152 initial passes with four corrected/new passing checks, for 156 controls; five Zig build-support tests pass. Initial ownership/deadline/fixture failures, interrupted build and disk refusal remain retained, with unchanged limits. Original assertions/snapshots and pin hashes are unchanged. Pickier has zero errors and one warning.
Promise and native IO/worker propagation, wider timer refresh/error/teardown/collection behavior and all-platform verification remain in #877. Earlier #874/#872 were not rerun and remain open. Corpus #876, performance #869/#873, HTTPS #875/#532 and context #871/#856 gaps remain open. Excluded regressions remain unverified; full Bun suite and Release/ASAN/all-platform coverage remain open under #66.
Earlier checkpoints and original gap evidence (historical):
Current status: explicit AsyncResource and TickObject ID/scope/lifecycle boundaries are implemented and verified on Darwin arm64. Native producer and full-platform behavior remain incomplete.
- Shared IDs from explicit resource creation and nextTick scheduling, with actual tracked trigger relationships.
- Explicit resource execution ID/resource and restoration after throwing callbacks.
- init/before/after/destroy for explicit resources and TickObject queue transitions.
- Independent hook registration enable/disable ownership.
- Promise, timer, native IO/worker producer propagation and promiseResolve.
- Collection-driven destruction verification, full mutation/fatal-error/teardown behavior.
- Linux/Windows and full unchanged native producer corpus coverage.
Explicit resource/TickObject lifecycle checkpoint (2026-10-10): source dbedb5d8d and verified evidence. Explicit AsyncResource construction and nextTick scheduling share one per-VM ID allocator. Trigger IDs come from tracked execution or explicit options. Scope entry establishes the executing ID/resource, delivers before/after around actual callbacks and restores execution/async-local state after exceptions. Init and explicit destroy follow resource construction/destruction; TickObject hooks follow queue execution/completion. Independent registration wrappers retain enable/disable ownership and snapshot dispatch. Node/Home controls verify these boundaries.
25 native groups; 32 validator controls; 54/54 Debug steps. Fourteen original files: 75 passes plus nine process checks, zero failures/skips/TODOs, 40 filtered cases. All 398 committed artifacts and 57 restored report outcomes validate; final source hashes match committed bytes. Original assertions/snapshots and pin hashes are unchanged. The corrected repeated-destroy reference assumption, disk refusal and cache cleanup remain visible. Pickier retains seven existing builtin diagnostics and four warnings; the committed baseline reproduces the existing diagnostics.
Promise, timer and native IO/worker ID/lifecycle boundaries remain unconnected. Execution APIs are complete only inside tracked explicit-resource/TickObject scopes. Collection cleanup registration is implemented but not behaviorally verified here; broader mutation/fatal-error/teardown/platform behavior remains in #877. Related context coverage remains #871/#856; earlier #874/#872 were not rerun. Corpus #876, performance #869/#873 and HTTPS #875/#532 gaps remain open. Excluded regressions remain unverified; full Bun suite and Release/ASAN/all-platform coverage remain open under #66.
Earlier checkpoints and original gap evidence (historical):
Async event resource checkpoint (2026-10-10): source 9ca081571 and verified evidence. EventEmitterAsyncResource supports string names, direct-constructor name validation and subclass naming. Its private referencing resource exposes associated emitter identity; read-only resource/ID accessors delegate to the underlying resource. Explicit/default rejection capture no longer bypasses resource scope. Listener execution and captured errors retain the actual creation-time async-local context, receiver and boolean result. Node/Home controls and unchanged original resource tests pass, following the Node reference.
24 native groups; 32 validator controls; 54/54 Debug steps. Thirteen original files: 71 passes plus nine process checks, zero failures/skips/TODOs, 40 filtered cases. All 388 committed artifacts and 56 restored report outcomes validate; final source hashes match committed bytes. Original assertions/snapshots and pinned hashes are unchanged. Pre-fix failure, disk refusals and terminal cleanup remain visible; guards were preserved. Pickier has zero errors and one existing warning.
Underlying AsyncResource IDs remain zero and native lifecycle/producer hooks remain incomplete. Delegated accessors do not establish real ID generation. #877 tracks actual IDs, executing resource, lifecycle and scheduling/teardown requirements; #871/#856 track related context coverage. Earlier #874/#872 remain open and were not rerun. Corpus integration remains #876, performance #869/#873, HTTPS receiver/lifecycle #875/#532. Excluded regressions remain unverified; full Bun suite and Release/ASAN/all-platform coverage remain open under #66.
Home owns node:async_hooks, but its AsyncResource/native hook boundary remains incomplete. Source inspection at f46b182 shows AsyncResource.asyncId() and triggerAsyncId() returning zero, executionAsyncId()/triggerAsyncId() returning zero, executionAsyncResource() returning stdin, and emitDestroy() doing no lifecycle work. createHook() delivers init for TickObject resources; broader before/after/destroy/promiseResolve delivery remains unimplemented.
The EventEmitterAsyncResource integration batch preserves actual AsyncLocalStorage creation context, constructor names, associated emitter identity, getters and rejection capture. Delegating ID getters to the underlying AsyncResource does not establish real ID or hook behavior.
Acceptance:
- Allocate and propagate IDs from real resource creation, execution scopes and native scheduling boundaries, with correct trigger relationships.
- Deliver supported init/before/after/destroy/promiseResolve lifecycle events from actual transitions with independent hook enable/disable ownership.
- Return the actual executing resource and restore nested/throwing execution scopes.
- Complete explicit/manual and collection-based resource teardown without premature or duplicate destruction.
- Verify unchanged upstream async-resource/hook tests and ordinary timers, promises, IO and workers; retain failures separately.
Do not manufacture constant IDs or synthetic passing lifecycle events. Full native producer/platform coverage remains required.
Parent: #66. Related context frame semantics: #871; broader stream/worker context coverage: #856.