Problem
Under a stripped-PATH sandbox, tt (shebang #!/usr/bin/env node) returned exit 127 (node not found) and a tt release silently no-op'd. The agent kept believing it held the stick — a dangerous, hard-to-debug ownership desync seen in mined session logs.
Nuance
Exit 127 means tt never executed, so there is no in-process place to print an error. The durable fix is twofold:
- Instruction/docs: a non-zero exit from
tt release/assign/take means the command did NOT take effect — re-verify ownership before assuming the turn changed. (Add to the skill + docs/receive-consumer-contract.md.)
- Robustness (optional): a
tt shim/wrapper that resolves node more robustly under restricted PATH, or a documented absolute-node-path invocation.
Touch-points
src/cli/turn-commands.ts (release/assign result surfacing for in-process failure modes).
- The
bin shim (dist/cli.js shebang) / packaging.
- Skill guidance.
Context
Follow-up CT-H from the 0.8.0 instruction hardening. See docs/releases/0.8.0.md.
Problem
Under a stripped-PATH sandbox,
tt(shebang#!/usr/bin/env node) returned exit 127 (node not found) and att releasesilently no-op'd. The agent kept believing it held the stick — a dangerous, hard-to-debug ownership desync seen in mined session logs.Nuance
Exit 127 means
ttnever executed, so there is no in-process place to print an error. The durable fix is twofold:tt release/assign/takemeans the command did NOT take effect — re-verify ownership before assuming the turn changed. (Add to the skill +docs/receive-consumer-contract.md.)ttshim/wrapper that resolvesnodemore robustly under restricted PATH, or a documented absolute-node-path invocation.Touch-points
src/cli/turn-commands.ts(release/assign result surfacing for in-process failure modes).binshim (dist/cli.jsshebang) / packaging.Context
Follow-up CT-H from the 0.8.0 instruction hardening. See
docs/releases/0.8.0.md.