The binding rules are the ecosystem's: tamatebako/AGENTS.md (the workspace root) — read it first. The short version as applied here:
- Draft PRs only. No merges to
main, no tags, no releases without the owner's explicit go-ahead. - Prebuilt artifacts flow downward. This factory CONSUMES published
releases — CPython source tarballs from tamatebako/python, the link
unit from tamatebako/tebako — pinned in
contract.yml. Never a source checkout of a sibling repo, in CI or locally. - SSOT for versions and pins. Versions, tags, SHAs live in
contract.yml(catalog + pins) and.github/matrix.json(env vocabulary) — never hardcoded in workflow YAML or scripts. - YAML for all authored config/manifests; named errors and named exit codes, never silent fallbacks.
Releases publish (the v0.1.x line). tools/build_runtime is
implemented (the tebako-runtime-ruby build/lib
port): fetch/verify → configure/make → driver link → env-image pack →
packaging → sidecars, gated by ci/check_symbol_provenance.sh and
tools/boot_smoke. CI carries the ruby factory's shape:
_build-platform.yml + the four build-*.yml triggers; under the
publish.yml coordinator each leg's publish job releases its own runtime
package and OpenPGP-signs its served names — the spec 13 §2a
de-rendezvous, tebako-runtime-ruby#161's pattern, split into its own job
by tebako-runtime-ruby#190 — through the tebako-release gem
(tamatebako/tebako-release-tooling, pinned at contract.yml's
release_tooling; this repo declares its identity in
scripts/release_adapter.rb and carries no copy of the machinery) —
behind the TEBAKO_RELEASE_SIGNING_ENABLED house gate, and the
coordinator's one release job audits the whole matrix against the
release (read-only) and renders the tpkg-registry.yaml mirror
(tools/registry_update.rb — shard-derived, additive,
withdrawal-preserving, composite <python>-<tebako> version keys),
landed on main by bot PR.
The matrix is green end to end, the windows-ucrt64 leg
included.
The publish gate opened 2026-09-05; the first release line is v0.1.0,
and the xml2rfc payload has since proven the chain end-to-end. The pinned
link_unit_release: "v2.3.2" carries the v2.3 arc — the spec-30
spawn dispatch, shim routing, the spec-29 wrapper-exe driver, and
the dup-class interpose with the aarch64 dup2 repair
(tamatebako/tebako#534/#545) — on top of the three libtfs-preload boot
fixes from the v2.1.8–v2.1.10 line: the fcntl interpose
(tamatebako/tebako#524, the CPython FileIO boot blocker), the
BOOT_LIVE gate + raw early-boot passthrough
(tamatebako/tebako#527, the static-jemalloc boot deadlock that wedged
the gnu legs), and the fcntl64 export (tamatebako/tebako#529).
The POSIX boot-smoke CI legs were red-by-design on the old v2.1.5
pin and are green on the v2.1.10+ line. The windows leg:
CPython upstream has zero mingw support, so the leg builds from the
line's msys2/ucrt64 scenario tree
(tfs-python-<base>-src-windows-msys.tar.gz, tamatebako/python's
patches// series) — scripts/compute_matrix.rb skips a windows
leg loudly when the pinned source_release ships no such asset for
the line (and skips jit lines on windows outright: upstream's JIT
whitelist admits MSVC targets only), and tools/boot_smoke hard-kills a wedged child against a
CLOCK_MONOTONIC deadline instead of wedging with it. The
linked-driver decision and the preload-shim re-exec rationale are
recorded in README.md — do not reopen them here; the wrapper pattern
(spec 29) is the java stream's.
- Tooling is Ruby (stdlib-first; gems only via
Gemfile). Ecosystem §12 rules apply: autoload only, norequire_relative, nosend/instance_variable_get/respond_to?metaprogramming. Gemfile.lockis gitignored (factory convention — resolutions float).contract.ymlis validated byscripts/check_contract.rbagainstschema/contract.schema.yml(bundle exec). A contract bump editscontract.ymland the compiled-inTEBAKO_CONTRACT_VERSIONin the same commit (the driver-source parity arm of the check lands with the first build).- CI containers are
ghcr.io/tamatebako/tpkg-builder-*(tebako-ci-containers) only; the archived v1tebako-<platform>images are never referenced here. Windows/macOS legs are runner-native. gh pr createbodies: always--body-file— inline--bodywith backticks executes them (ecosystem §13).