skill: make the sh-vs-ps1 dispatch rule explicit

'Use whichever your host can launch' left the selection order implicit and
did not distinguish the two failure kinds. Now stated: dispatch on launcher
availability (not OS) — sh first, ps1 only when the sh launcher itself is
missing; and a STATUS=refuse from either entry point is final, never a cue
to try the other one for a different answer. The CI byte-diff exists
precisely so there is no different answer.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-16 08:32:22 -04:00
co-authored by Claude Fable 5
parent b9fa4932b9
commit 62df81709d
4 changed files with 22 additions and 6 deletions
+6 -2
View File
@@ -34,8 +34,12 @@ plugin, or copied into another project):
powershell -NoProfile -ExecutionPolicy Bypass -File <skill-dir>/scripts/preflight.ps1 powershell -NoProfile -ExecutionPolicy Bypass -File <skill-dir>/scripts/preflight.ps1
The two entry points implement one contract and are byte-diffed against each The two entry points implement one contract and are byte-diffed against each
other in CI — same checks, same output, same refusals. Use whichever your other in CI — same checks, same output, same refusals. Dispatch on launcher
host can launch; never both, never neither. availability, not OS: try `sh` first; if the **launcher itself** is missing
(`sh: not found` — a launch failure, not a refusal), run the PowerShell entry
point instead. A `STATUS=refuse` from either is **final**: never run the
second entry point hoping for a different answer — they are kept
byte-identical in CI precisely so there is no different answer.
Some harnesses block script files inside skills, so your installation may Some harnesses block script files inside skills, so your installation may
carry no `scripts/` directory. The script still exists exactly once — in the carry no `scripts/` directory. The script still exists exactly once — in the
+5 -1
View File
@@ -6,11 +6,15 @@ faster. Find out. Works on any pair of shell commands, in any language.
## 0. Preflight ## 0. Preflight
sh <skill-dir>/scripts/preflight.sh sh <skill-dir>/scripts/preflight.sh
# no POSIX shell (Windows-native harness)? same contract, CI-diffed against the sh version: # `sh` launcher missing ("sh: not found" — a launch failure, NOT a refusal)?
# same contract, byte-diffed against the sh version in CI:
powershell -NoProfile -ExecutionPolicy Bypass -File <skill-dir>/scripts/preflight.ps1 powershell -NoProfile -ExecutionPolicy Bypass -File <skill-dir>/scripts/preflight.ps1
# installation carries no scripts/ (script-blocking harness)? run from the checkout: # installation carries no scripts/ (script-blocking harness)? run from the checkout:
sh "$PELTIER_HOME/.claude/skills/peltier/scripts/preflight.sh" sh "$PELTIER_HOME/.claude/skills/peltier/scripts/preflight.sh"
A `STATUS=refuse` from either entry point is final — do not run the other one
looking for a different answer.
Read the `key=value` output; you need `BENCH_RUNNER` and `PIN_SUPPORTED`. A Read the `key=value` output; you need `BENCH_RUNNER` and `PIN_SUPPORTED`. A
refusal ends the **claim**, not the work — report the reason verbatim and do refusal ends the **claim**, not the work — report the reason verbatim and do
not substitute another timing tool. not substitute another timing tool.
+6 -2
View File
@@ -34,8 +34,12 @@ plugin, or copied into another project):
powershell -NoProfile -ExecutionPolicy Bypass -File <skill-dir>/scripts/preflight.ps1 powershell -NoProfile -ExecutionPolicy Bypass -File <skill-dir>/scripts/preflight.ps1
The two entry points implement one contract and are byte-diffed against each The two entry points implement one contract and are byte-diffed against each
other in CI — same checks, same output, same refusals. Use whichever your other in CI — same checks, same output, same refusals. Dispatch on launcher
host can launch; never both, never neither. availability, not OS: try `sh` first; if the **launcher itself** is missing
(`sh: not found` — a launch failure, not a refusal), run the PowerShell entry
point instead. A `STATUS=refuse` from either is **final**: never run the
second entry point hoping for a different answer — they are kept
byte-identical in CI precisely so there is no different answer.
Some harnesses block script files inside skills, so your installation may Some harnesses block script files inside skills, so your installation may
carry no `scripts/` directory. The script still exists exactly once — in the carry no `scripts/` directory. The script still exists exactly once — in the
+5 -1
View File
@@ -6,11 +6,15 @@ faster. Find out. Works on any pair of shell commands, in any language.
## 0. Preflight ## 0. Preflight
sh <skill-dir>/scripts/preflight.sh sh <skill-dir>/scripts/preflight.sh
# no POSIX shell (Windows-native harness)? same contract, CI-diffed against the sh version: # `sh` launcher missing ("sh: not found" — a launch failure, NOT a refusal)?
# same contract, byte-diffed against the sh version in CI:
powershell -NoProfile -ExecutionPolicy Bypass -File <skill-dir>/scripts/preflight.ps1 powershell -NoProfile -ExecutionPolicy Bypass -File <skill-dir>/scripts/preflight.ps1
# installation carries no scripts/ (script-blocking harness)? run from the checkout: # installation carries no scripts/ (script-blocking harness)? run from the checkout:
sh "$PELTIER_HOME/.claude/skills/peltier/scripts/preflight.sh" sh "$PELTIER_HOME/.claude/skills/peltier/scripts/preflight.sh"
A `STATUS=refuse` from either entry point is final — do not run the other one
looking for a different answer.
Read the `key=value` output; you need `BENCH_RUNNER` and `PIN_SUPPORTED`. A Read the `key=value` output; you need `BENCH_RUNNER` and `PIN_SUPPORTED`. A
refusal ends the **claim**, not the work — report the reason verbatim and do refusal ends the **claim**, not the work — report the reason verbatim and do
not substitute another timing tool. not substitute another timing tool.