Automated release: version and notes generated from pull requests merged since 1.15.0.
Changed
- refactor:
scripts/_common.pyis a package, andtests/test_all.pysplits by tool group.
No behaviour change. A release of its own so that "nothing changed for a caller" is checkable
in one diff (roadmap, "Refactor release after 1.15.0"). The 3072-line helper module is now
scripts/_common/with one module per responsibility —runner.py(process execution,
timeouts, signals, the output lock and staging,run_tool, the drawtext text-file spool),
probe.py(ffprobe and the measured facts:probe(),verify_output(), the level and
envelope measurements),decision.py(the pure choices: encoder and codec arguments, times,
paths, brand defaults — nothing here starts a subprocess),emit.py(emit(),die(),
info(), the brief and 2.0 shapes, the plan file),color.py(bt709 tagging, the HDR-to-SDR
path, colour-token validation) andtext.py(fonts per script, emoji clusters and assets,
drawtext escaping and options, the advance table the caption wrap measures with).
scripts/_common/__init__.pyis a facade re-exporting all 184 names the single file
defined — public and underscore alike — so everyfrom _common import ...and every
_common.<name>in the tools, the MCP server, the demos, the evals and the tests keeps
working unchanged; rebinding a name on the facade (_common._FFMPEG_VERSION = (7, 1), a
mock.patch("_common.<name>")) rebinds it on the module that defines it, so the test seams
that reached into the module still hold. Function bodies were moved, not edited.
tests/test_all.pyis aload_testsaggregator overtests/test_analysis.py,
test_editing.py,test_audio.py,test_picture.py,test_delivery.pyand
test_orchestration.pywith the shared footage intests/_fixtures.py(built once per
process, not once per group); each group module also runs on its own.npm testand every CI
job are unchanged and run the same 323 cases under the same names.
Proof of no behaviour change:scripts/_contract.py --json, the MCPtools/listresponse and
--helpfor all 42 tools are byte-identical to 1.15.0. The tool count stays 42 — a package
directory is not a tool, and everyscripts/*.pyenumeration (the contract, the MCP server,
demos/build.py, the every-script tests) skips it unchanged; the source scans that must not
stop covering the helpers (shell=Trueand friends) now readscripts/_common/*.pytoo. - refactor: split _common.py into a package and tests by tool group (no behaviour change) (#230)
- docs: eval 16 at 1.15.0 (82 prompts, focused Opus grader, trigger 40/40) (#229)
What's Changed
- docs: eval 16 at 1.15.0 (82 prompts, focused Opus grader, trigger 40/40) by @claude[bot] in #229
- refactor: split _common.py into a package and tests by tool group (no behaviour change) by @claude[bot] in #230
Full Changelog: v1.15.0...v1.15.1