github Dicklesworthstone/repo_updater v1.6.0
ru v1.6.0

2 hours ago

The installer now refuses an unverified install instead of falling back to main. Commands that used to report success after a failed fetch, an unmet branch pin, a missing or invalid quality gate, or a changed candidate now fail and say why. ru dep-update without --repo finds the configured repos again (GH #17). See the upgrade notes.

Changed

  • install.sh requires a verified release. A missing or invalid checksum, a missing checksums.txt, no sha256sum/shasum, or a failed or non-script release download is now an error (before: a warning, or a silent fallback to installing main). Installing unverified development code needs an explicit RU_UNSAFE_MAIN=1. The documented form puts installer variables on the bash side of the pipe: curl -fsSL .../install.sh | RU_VERSION=1.6.0 bash (f714b2f).
  • Quality gates and sync no longer report false success. A test or lint gate that is required but not configured, or that returns an invalid result, fails. So does a secret scan that finds secrets or returns an invalid result. A requested fetch that fails, a branch or tag pin that cannot be checked out (the clone is kept), and network commands that exceed their deadline fail too. An incomplete sync is kept for ru sync --resume (f714b2f).
  • Review plans and sweep commits are bound to verified Git state. Applying a review checks that the plan belongs to the prepared run, checkout and candidate HEAD, and that approval covers exactly that plan and candidate. Publishing pushes to the origin destinations recorded at preparation, after scanning every commit each receiver has not seen, and verifies the receiver's refs afterwards. Commit-sweep commits only the planned paths through a private index and leaves unrelated staged and unstaged work alone (85782a1).
  • AI sync keeps the files it was given. The final candidate must keep the working versions, modes and deletions of the files that were dirty at the start; discarded, reverted or extra unrequested content is refused, and recovery evidence is kept. Publication is bound to the receiver seen by the real pre-push hook, including late insteadOf rewrites. Network deadlines are resolved the same way from the CLI, the environment and config (7909764).
  • Structured output (--json / --format) is normalized for the first eleven command families and matches the schemas published by ru robot-docs schemas. Terminal approval prompts still work through the structured dispatcher (7909764).

Fixed

  • ru dep-update without --repo always said "No repositories configured" (GH #17). It called a helper that was never defined and hid the error. It now resolves configured repos the same way ru list and ru ai-sync do. A configured repo that is not cloned, cannot be resolved, or is not a Git repository is counted as skipped and reported with its reason, and --json results include {repo, status: "skipped", reason} for every skipped repo (1b8145e).

Upgrade notes

  • Installer: curl ... | bash no longer installs main when the release download or its checksum fails; it exits 1. Pass RU_UNSAFE_MAIN=1 to the bash side of the pipe only if you deliberately want unverified code.
  • Exit codes: sync and review/sweep runs that previously exited 0 after a failed fetch, an unmet pin, a missing required gate, or a changed candidate now exit nonzero. Scripts that relied on the old success should read the reported reason.

Known limitations

  • ru dep-update's per-manager scanners are unchanged: some check the ambient environment rather than the repo's manifests (for example pip), Maven and Gradle never report outdated dependencies, and a scanner failure still reads as "no outdated dependencies". Tracked in beads bd-tr5y.13.

Installation

curl -fsSL https://raw.githubusercontent.com/Dicklesworthstone/repo_updater/main/install.sh | bash

Verify

echo "$(curl -fsSL https://github.com/Dicklesworthstone/repo_updater/releases/download/v1.6.0/ru.sha256)  ru" | sha256sum -c -

SHA256 checksums for ru and install.sh are in checksums.txt. Built from 80c491a (tag v1.6.0) and published with dsr from a gated clone; no GitHub Actions.

Don't miss a new repo_updater release

NewReleases is sending notifications on new releases.