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.shrequires a verified release. A missing or invalid checksum, a missingchecksums.txt, nosha256sum/shasum, or a failed or non-script release download is now an error (before: a warning, or a silent fallback to installingmain). Installing unverified development code needs an explicitRU_UNSAFE_MAIN=1. The documented form puts installer variables on thebashside 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
insteadOfrewrites. 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 byru robot-docs schemas. Terminal approval prompts still work through the structured dispatcher (7909764).
Fixed
ru dep-updatewithout--repoalways 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 wayru listandru ai-syncdo. 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--jsonresults include{repo, status: "skipped", reason}for every skipped repo (1b8145e).
Upgrade notes
- Installer:
curl ... | bashno longer installsmainwhen the release download or its checksum fails; it exits 1. PassRU_UNSAFE_MAIN=1to thebashside 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 | bashVerify
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.