Decision

Every engineering artifact built for or by Rye Valley and its portfolio (Rye Valley, Hard Calls, Megaphone, Lore, Hockey Stick, JOLT!, and future units) goes through git version control and a PR-based workflow. This explicitly includes internal ops scripts and cron tooling, not only client-facing site code.

Context

The agent had only encoded a PR requirement for the JOLT web repo (site code and article MDX, reviewed by Rafael/Mehul). When building four new RV cron scripts (asset intake follow-ups, kickoff scan, sales-call prep, content-bank proposal) the same day, it wrote them locally and scp’d them straight to the Mac Mini with zero version control, and when asked “aren’t you supposed to be pushing PRs” it incorrectly scoped the existing rule to JOLT only. Michael corrected this: the rule was never meant to be JOLT-specific, and given the volume of engineering work ahead across every business line, this needed to be fixed properly, not just going forward but by building real infrastructure immediately.

Options considered

  • Leave ops scripts uncontrolled, treat them as “just internal”: rejected, this is exactly the practice Michael flagged as wrong.
  • Fold ops scripts into an existing repo (e.g. RyeValley/brain or RyeValley/jolt): rejected, brain is a markdown vault with its own git model, and JOLT is a single business unit’s site code, neither is the right home for cross-business tooling.
  • New dedicated repo for cross-business internal tooling: chosen.

Consequences

  • New repo RyeValley/hermes-ops (private) is the source of truth for ops scripts and cron tooling that isn’t already inside a business-specific repo. Full README and workflow docs live in that repo (docs/engineering-standards.md).
  • Existing untracked scripts (asset intake, kickoff scan/followup, sales prep, content-bank proposal, brain backup, gh team watchdog, gateway restart, Slack autojoin, Lore review watchdog/presales-audit/tech-audit/review-delivery) migrated in as a single bootstrap commit; their construction context lives in Hermes session history (pointers in the repo’s decision record), not git history, since they predate the rule.
  • Fixed a latent bug found during this work: the Mini’s global git identity was set to Ben (ben@foundingjourney.com) from an earlier unrelated setup step, not Hermes Agent. Corrected to Hermes Agent hermes@ryevalley.co globally.
  • All future ops-script changes go branch -> PR -> review -> merge -> deploy, no more direct scp-to-Mini authoring.