A script scanned every tracked doc, rule, skill, agent, hook and source file
for tooling/ paths that no longer exist, skipping historical records (sprints,
discussions, workshops, governance, generated wiki pages). It found 62. The
ones that tell a reader what to RUN now name the reach verb:
- The atlas skill still sent agents to tooling/atlas, atlas-verify,
atlas-update-field and atlas-commit-and-sync — about forty lines, all
retired in T-1285. They now name the `reach atlas` verbs, and the skill
records that commit-and-sync STAGES by default (--commit to commit) and
takes --corridor as an option.
- The clerk agent named tooling/clerk-review (now `reach dev clerk`). The Si
and clerk briefings sent those agents to the retired tooling/db/decision
and sqlite-query CLIs and to decisions/*.md paths that moved to
governance/ in the pql migration. They now name pql.
- The ticket-cli rule documented `pql decisions read`, which does not exist;
`show` already includes the body.
- The culture authoring guide and the RON sources name
`reach validate ron`, with the same arguments as before.
- The 41 Blender payloads' usage lines ran the retired tooling/blender
wrapper, and the docstrings still cited pre-carve-out paths. They now read
`reach blender run <payload>`.
- Doc comments in server/, client/, wiki TOMLs and the domain modules.
What is left is deliberate: "Formerly …" provenance, dated plans and findings
docs, the retired-pipeline doc, and a build-artefact path.
project.yaml 0.4.14 (mirrored to the client). Comment-only, but four touched
files are in the canvas-version registry (trait_catalog_reader.rs, since
T-1289, canvas_sources.py itself, and two client files). The gate is
path-based and has no override. The previous push was rejected on exactly
this.
Three of the edits are stamped ledger sources, so systems.db is regenerated
and the stamp is fresh.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
35 payloads move to tooling/scripts/blender/ and stay outside package scope.
They run under Blender's bundled Python, which cannot see the repo venv, so
they physically cannot import tooling.core — holding them to the D-263 contract
would either fail the gate forever or force the contract to be weakened for
everyone, and the second is how a gate stops meaning anything.
Count verified by import rather than filename: 33 import bpy/bmesh directly,
and the two that do not are still payloads per their own usage lines.
garment-fit/make_logo.py is the one genuine non-payload and stays for T-1290.
The bash wrapper is retired rather than kept. Keeping it would have put the
install-resolution logic in two places, which is the duplication T-1286 had
just finished collapsing three copies of. domains/blender/service.py owns the
decisions — resolve_blender (native beats flatpak, ordering preserved),
resolve_payload, absolutise — and only run_payload performs. test_blender.py
pins all of them without launching Blender, which matters here more than
usual: the thing being launched is a 200 MB GUI application that writes GLBs.
`reach blender run` takes a registered payload name OR a path to any script,
because the wrapper served both — the spikes and the glb-gen skill hand it
one-off scripts of their own. An unknown name enumerates all 35 and exits 2.
The exclusion now defends itself. check_carve_out_stays_carved fails if
`scripts` is added to PACKAGE_ROOTS, if the payload directory empties (an empty
exclusion proves nothing), or if an __init__.py appears there (which would make
the payloads importable — the coupling the carve-out exists to prevent). All
three arms mutation-proved.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>