Skip to content

Install docs pin to mutable main — pin to a tagged release for install integrity #16

Description

@bigbrownjeff

Hi, and thanks for claude-pace — the jq-only statusline is genuinely nice,
and I appreciate that the npm path already ships an immutable bundled script.

One small hardening suggestion on the curl install/upgrade path. Both the
slash-command setup and the README fetch the script from the main branch:

  • commands/setup.md (lines 24–25)
  • README.md (lines 62–63), and the "Upgrade → Manual" note says to re-run it
curl -fsSL -o ~/.claude/statusline.sh \
  https://raw.githubusercontent.com/Astro-Han/claude-pace/main/claude-pace.sh
chmod +x ~/.claude/statusline.sh

Because this resolves …/main/…, every install/upgrade silently pulls the
current tip of main. The script today is fine — this isn't a report of any
compromise. It's that the install mechanism trusts a moving branch with no
version pin and no integrity check, so whatever lands on main next (an
unreviewed merge, a hijacked push, a bad force-push) is what users get on their
next setup run, executed via chmod +x. For a statusline that runs on every
prompt, that's a wide unversioned auto-update surface.

You already cut tagged releases (v0.9.1), so the simplest fix is pinning the
curl URL to a tag instead of main — and since v0.9.1 currently equals
HEAD, it's behavior-preserving right now. Upgrades then become an explicit
tag bump rather than a silent branch follow. Optionally, publishing a SHA256
per release and verifying it before chmod +x closes the gap even if you'd
rather keep tracking a moving ref.

Happy to open a PR with the one-line URL change in both files (and a checksum
step if you want it) — just let me know which direction you prefer. Thanks
again for the project!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions