31098f9248
OutputSink.dump() was the only path that closed the spill Bun.FileSink. The bash and Python executors re-throw on failure and their finally blocks never closed the sink, so any large-output command that errored leaked the artifact descriptor until an unrelated read (e.g. a SKILL.md load) hit EMFILE. Added an idempotent OutputSink.dispose() that closes the sink exactly once (awaiting any in-flight sink creation, guarding post-finalize resurrection) and wired it into every executor's finally block. Fixes #6463