The checker covered the identity strings a host sees, but not two other
kinds of template residue.
Descriptions: `Cargo.toml`'s `description` and `CLAP_DESCRIPTION` both
shipped as placeholders, and the latter surfaces in some host browsers.
Type names: `MyPlugin` and `PluginParams` appear at nine sites between
the struct definitions, the three trait impls, the two export macros and
the params field. Missing one is a compile error rather than silent drift,
so this is a convenience rather than a safety net - but naming the site
beats reading rustc, and the `Vst3Plugin` impl sits behind a cfg, so a
default build never reports it at all. Renaming the types is optional:
leave the canonical values alone and the checks stay green.
TODO markers are reported at a new informational level that never counts
toward pass/fail. They are legitimate while building, so failing on them
would just train you to ignore the run - but a finished plugin should not
quietly ship with five of them.
Two bugs surfaced while testing this:
- The stale scan drew its file list from `git ls-files`, which returns
nothing outside a checkout. In an exported tarball every stale spelling
was therefore reported absent - the section passed hardest exactly when
it could see least. It now falls back to `find` and says which source
it used.
- `grep -c` prints 0 and exits 1 when there are no matches, so the TODO
count's `|| echo 0` appended a second zero and produced an unparseable
value once a rename removed the last TODO.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WHt4DykxXaQnyaJfyS8KCn
Adapted from musiikki/codename-206, where the same script guards a single
plugin. It matters more here: renaming is the first thing anyone does with
a template, and identity is duplicated across Cargo.toml, bundler.toml,
src/lib.rs and the docs with nothing keeping them in agreement. A
half-finished rename builds a bundle under one name while the docs and
deploy script look for another.
Changes from the codename-206 original:
- Checks for files this repo does not ship (deploy.ps1) report as `skip`
rather than FAIL, and start enforcing once the file appears.
- STALE ships pre-seeded with this template's own placeholders, and each
entry is skipped while it is still part of a canonical value. That makes
renaming self-checking: entries arm themselves as you change the value
they belong to, with no bookkeeping. Substring rather than equality,
because placeholders nest — "your-domain" lives inside the canonical
CLAP_ID.
- Covers identity this template carries that codename-206's did not:
VENDOR, EMAIL, the Cargo homepage feeding Plugin::URL, that the `env!`
indirection is still in place, and the README's bundle command.
- Asserts CLAP_ID is reverse-DNS safe. A stray capital or space there is
not a compile error, it is a silent identity change between machines.
Two placeholder spellings had to move to avoid false positives, since a
checker that cries wolf trains you to ignore it: bundler.toml's comment
contained the literal "Plugin Name", and the CLAP_ID TODO spelled the
placeholder a third way that matched neither the constant nor the STALE
list. The TODO now illustrates the form instead of repeating a placeholder.
.gitattributes pins *.sh to LF so core.autocrlf=true on Windows cannot
check the script out with a CRLF shebang that dash rejects.
Verified three ways: clean template passes, a partial rename names every
drifted file, and a complete rename passes and still compiles.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WHt4DykxXaQnyaJfyS8KCn