Releases: DisplaceTech/ext-template
v0.1.0 — the scaffold, extracted
The shared scaffold for Displace PHP extensions (Rust + ext-php-rs), extracted from ext-infer and ext-whisper after hand-mirroring it one time too many. All three shipping extensions (ext-infer, ext-turbovec, ext-whisper) descend from this template as of v0.1.0.
Two trees, two lifecycles
template/managed/— Makefile, build.rs, about.toml/hbs, rust-toolchain.toml, and the CI / binary-release / docs workflows. Owned by the template; re-rendered into extensions bybin/sync. Never hand-edited downstream.template/seed/— Cargo.toml, composer.json,.cargo/, src + docs skeletons, PLAN/RELEASE. Rendered once bybin/render, then owned by the extension. A freshly rendered skeleton compiles, loads into PHP, and passes its PHPT immediately.
Per-repo variance is config, not forks: each extension's .ext-template.conf carries its name, namespace, docs host, apt/brew deps, and any codegen flags shipped binaries must keep (ext-turbovec's -C target-cpu=x86-64-v3).
Version bumps cascade
template/versions.conf is the single source of truth for the Rust channel (1.89 — the floor set by turbovec's AVX-512BW target_feature), the declared MSRV, and the crate pins every extension shares (ext-php-rs, thiserror). Bump once, bin/sync each extension, review, push. CI includes a cascade test.
Already battle-tested
Before this tag the template propagated four real fixes: turbovec's run-tests.php auto-fetch became canon, the cargo-about license-manifest release job reached every repo, make test became hermetic against PIE-installed copies of the extension under test, and the 2026-06-12 setup-php/macos-14 breakage — diagnosed with this repo's macOS probe workflow — was pinned away across five repos with one template commit.
Mechanics
Two shellcheck-clean POSIX sh scripts and sed. Placeholders are uppercase {{LIKE_THIS}}, deliberately disjoint from GitHub Actions' ${{ ... }} expressions; rendering hard-fails if any placeholder survives. No cargo-generate, no cookiecutter, no runtime to install.
Deliberately out of scope: syncing seed files (extensions legitimately diverge — destroying that variance is how monorepos are born), template-engine dependencies, Windows.