GTR016 — Inline deprecated interpreter= (runtime-gated)

Contract: behaviour-preserving (provable subset).

Claim

<command interpreter="I">S rest</command><command>I '$__tool_directory__/S' rest</command> reproduces legacy runtime behaviour for any non-empty interpreter value when S is a literal leading script token.

Proof — verbatim interpolation in every composition form Galaxy ever shipped

  • Prepend form: command_line = interpreter + " " + command_line after an unquoted abspath replace — byte-identical release_16.04 (evaluation.py:478-484) through release_20.01 (:509-514).

  • Token-splice form: replace(executable, f"{interpreter} {shlex.quote(abs_executable)}", 1)release_20.09 (:501) through dev:781-787 today (still honored for legacy_defaults tools; the attribute was never removed).

  • The forms coincide exactly when the script is the rendered line’s first content token — the bucket-A gate. Every form gates on if interpreter:, so an empty attribute was always ignored (the codemod bails).

  • Positional splice anchored past leading ## comments; mixed-content <command> skipped (the audited break classes).

Scope boundary

Cheetah-leading commands (split()[0] of the rendered line is statically unknowable) and interpreter="". The shlex.quote-vs-literal-quote bound is accepted and documented (admin-controlled install paths).

History

Single-token-standard-interpreter conservatism removed by §39 (the verbatim-composition proof); bucket C dissolved (25 → A, 26 → B).