Changelog
Перевод английской документации от 15.09·English
All notable changes to this project are documented here.
The format follows Keep a Changelog, and the project follows Semantic Versioning.
Two things get an entry here without fail, because a reader cannot discover either from the code they are running:
- A change to the bridge protocol version. The bridge component runs inside TouchDesigner and outlives an upgrade of the host package, so a protocol change is the one kind of change that asks the reader to run
td-atlas reload. - Anything that changes what the connector may touch in the user's project.
#[0.1.0] - 2026-09-15
The first release. Everything below is what it contains.
Measured against TouchDesigner 2025.32460 on macOS. The Windows code paths run in CI; TouchDesigner on Windows is unverified. See docs/compatibility.md.
#Added
scripts/publish.shgates a release on a clean working tree, a bundle built from the currentHEAD, a free version tag, and a green test run. Each gate runs before anything goes outward.README.mdcovers installation from a clone, troubleshooting, and what the connector may and may not change in a project.- A
livepytest marker.pytestruns the suite that needs no TouchDesigner;pytest -m liveruns the tests that drive a running instance. install.shis the whole path to a working install in one line. Runcurl -fsSL https://grigabyte.github.io/td-atlas/i | shon a machine that has git and a Python 3.11 or newer. It finds that interpreter by asking each one for itsversion_info, clones or fast-forwards the checkout, makes a virtualenv beside it, installs the package, builds the offline index and runstd-atlas install, then reprints the two lines to paste. Every command is printed before it runs. It writes in td-atlas's own two places, the directory you choose and~/.td-atlas. No system directory is touched, nothing is installed with sudo, and no shell startup file is edited. Whichever ofuvandpipdoes the install also fills its own package cache,~/.cache/uvor~/Library/Caches/pip, as it would for any package.uvis used when it is already onPATHand never installed, because uv's own installer edits the shell rc this script promises to leave alone. Run a second time it fast-forwards the existing checkout, reuses the virtualenv and leaves an existing index alone, since rebuilding it would drop the runtime pass onlytd-atlas probeagainst a live instance can put back.- The short install address serves the tracked script itself.
.github/workflows/pages.ymlrepublishesinstall.shunder the nameion every push that changes it, so the file served is the file in the repository. A stale copy under a friendlier address is worse than a long URL, because the person running it cannot see that it is stale. Theraw.githubusercontent.comURL stays in the README as the second line, for when Pages is not answering.
#Changed
- The bridge speaks protocol 7, and protocol 7 is now also the minimum the host accepts. A bridge component laid into a project by an older build is refused at connection time with the fix in the message. Such a build used to be accepted, and then answered
UnknownMethodto every newer call, or answered a different question in silence. Re-lay the component withtd-atlas reload, which is exempt from the check so that the one command able to replace an old handler can still reach one. What counts as a protocol change is now written down inAGENTS.mdand held bytests/test_protocol_fingerprint.py. The method table, each method's parameters and the reply shape the host reads are all the wire, and the number moves with any of them. - The Claude Code plugin moved from the repository root to
plugin/. Installing it brings the TouchDesigner skill and nothing else; previously it pulled in every tracked file in the repository. - Reading a
.toe/.toxunpacks it into a cache that now has a ceiling of 200 expansions and evicts by least recent use. Before this the cache only ever grew, on one machine to 2209 expansions and 4.9 GB.td-atlas doctorprints its size, andtd-atlas doctor --clear-cacheempties it. - Refusing to overwrite an existing output file moved out of the MCP tool and into the layer both surfaces share, so
td-atlas project writeis now covered by it too. It was not, andtoecollapsemoves whatever it finds in the way aside to<file>.bkp1. - Answers that had to be cut short now say so.
td_networkreportstruncated,childrenHiddenanddepthLimited;td_errorsandtd_healthreport how much of the network went unvisited. A partial read used to be indistinguishable from a complete one, including a "nothing wrong found" that had only looked at a corner of the network. td_errorstakes apathand walks the project by default. It used to sweep from/, where its 5000-node budget is spent on TouchDesigner's own/uiand/sysbefore the walk reaches the project. On an open session it answered "no operators are reporting errors" about a project it had never looked at. The reply now also names the subtree it walked, in every branch.pathis a new argument on an existing bridge method, and it is the second reason the protocol number is 7. A bridge staged before this change accepts the argument, ignores it and walks/anyway, and nothing in its reply distinguishes that from a correct answer. Such a bridge is refused at connect on its version.td_networksays how many direct children a component at the edge of the requested depth has. The walk stops there without recursing and without a marker, so a leaf and a component holding thousands of operators came back as the same line. On an open session/performand/uiread alike. The count was in the reply all along and only the printing was missing.td_healthreports its own blind spots. A script-error read that fails is a finding in the report. Its sampling interval is bounded, so a largeintervalcan no longer block the server process.- Network walks and the frame capture buffer are bounded (5000 nodes, 512 MiB). Every request runs on TouchDesigner's main thread, so an unbounded walk is a freeze of the application.
- The CLI and the MCP surface now return the same number of results by default.
td-atlas search --limitandtd-atlas project grep --limitmatchtd_search_operatorsandtd_project_grep.td-atlas searchgained--family,td-atlas opgained--include-hiddenandtd-atlas project grepgained--limit, none of which the terminal had. Every remaining difference between the two surfaces is written down inAGENTS.mdand held there by a test. README.mdcloses four holes a first reader fell into. An MCP-capable agent is named in the requirements, where the reader meets it; it used to surface six sections later as a bareclaude mcp addline. As an MCP server now carries seven sentences in the language a person actually uses beside the calls each turns into, so "you say, it does" rests on something. The skill's two reference files say at their head who the reader is, since thetd_names are calls an agent makes. And the one-line installer takes the top of Install, with the manual clone kept below as the same steps by hand. The paragraph that declared three addresses to be 404s until the first release is gone with the repository going public. Two of them now resolve, and the third, the release thatdist/server.jsonpoints at, is named where it appears.
#Removed
- Three bridge methods are gone.
perf,par_getandsavehad no caller on the host and no test covering them, andsavecalledproject.save(), a Save As that moves the artist's working file. Anything reaching the bridge directly (this package is not the only thing that can) loses them;health_sampleandop_infocarry what the first two returned. This removal is the first of the two reasonsPROTOCOL_VERSIONis 7. The method table is the wire, so which methods exist is part of the protocol even though nothing this package's own two halves exchange changed shape. Leaving the number at 5 would have let one version name two different method sets. docs/decisions.mdanddocs/publishing.mdare no longer in the repository. Both were written for a reader who does not exist. The register of decisions explains the shape of the code to the people who chose it, and the release gates are for whoever runsscripts/publish.sh, which is the owner alone. Those five gates are written out in that script's own header, where the README now sends a reader. Comments insrc/that cited the register by number carry the reason in a few words instead, so nothing in the code points at a document a reader cannot open.
#Fixed
.mcp.jsonis no longer tracked. It carried an absolute path to one machine's virtual environment.td_logandtd-atlas logno longer report "No calls recorded yet" when the journal is failing to be written; the reason is printed under the report. A write error used to be swallowed whole.- The bridge token is scrubbed from journal lines using the current token. The cache holding it never expired, so a token rotated by
td-atlas installwent into the log in clear while the previous one was removed.
[0.1.0]: https://github.com/grigabyte/td-atlas/releases/tag/v0.1.0