* fix(engine): h265 renders no longer fail on hosts with more than 16 cores
libx265 rejects more than 16 frame threads, so the thread count taken from the
CPU quota is now capped at 16 for x265. x264 is unchanged.
* fix(engine): pass the encoder to the thread cap in the CFR re-encode
* fix(core): release decoded preview audio once no clip uses its source
The preview transport cached every decoded audio buffer by source until the player was destroyed. Each scheduling pass now drops cached buffers whose source no clip in the document still uses (scene edits, swapped sources), and keeps the rest so playback never re-decodes a clip still in the film.
* fix(core): drop the comment the comment-share ratchet rejects
* perf(producer): the audio task probes each video for sound instead of extracting its frames
* test(producer): the audio task finds a video's sound from a probe, with no frames extracted
* perf(engine): the audio mix reads clips held at a URL many at a time
* style(engine): format the remote clip slot choice
* fix(producer): the audio task places a video's sound in the window extraction would give it
* style(producer): format the slot cases of the script-src audio test
* fix(studio-server): project history no longer copies video, audio or huge files
* fix(studio-server): clean drops old video and audio copies in every history
* fix(studio-server): TypeScript source is not media, so its history is kept
* fix(studio-server): split the media reclaim and point the slow-copy route test at a non-media file
* fix(studio-server): no unused expression when collecting a history's hashes
* fix(cli): capture images declared only through srcset
* chore: prepare conflict resolution against current main
* fix(capture): retain srcset coverage with validated GIF redirects
* fix(cli): close asset streams when clients disconnect
* chore: prepare conflict resolution against current main
* fix(cli): retain asset disconnect cleanup with current main
* fix(cli): honor HTML attribute casing in frame-rate defaults
* chore: prepare conflict resolution against current main
* fix(cli): preserve HTML fps casing with shared cloud defaults
* fix(core): preserve literal percent in beat source paths
* chore: prepare conflict resolution against current main
* fix(core): retain beat path handling with current main
* fix(cli): preserve stylesheet order during website capture
* chore: prepare conflict resolution against current main
* fix(cli): retain captured stylesheet order with current main
* chore: prepare conflict resolution against current main
* fix(capture): retain cascade coverage with validated redirects
* fix(cli): detect beats from child media sources
* chore: prepare conflict resolution against current main
* fix(cli): integrate child beat sources with native decoding
* fix(cli): init and skills update only touch HyperFrames skills; --skip-skills works
* fix(cli): init never touches installed skills and no command removes one
* fix(cli): shorten the init skills comment
* fix(cli): shorten the init skills comment
* fix(cli): the stale-skills notice reaches agents that run without a terminal
* test(cli): a run without a terminal now checks skills in the background
* fix(cli): the stale-skills notice also prints on --json runs
* perf(engine): remote sources of a site keep their probe results for the whole render
* test(engine): probe a content-addressed URL once per render
* style(engine): format the audio probe split
* fix(sdk): a delete is kept hidden when any script lookup could reach it, not only an id
* fix(sdk): a lookup argument that is not one closed literal keeps the delete hidden