Skip to content

Work Log - 2026-10-25

🎯 Focus for Today

Thinking about keeping dependencies synced to the latest upstream stable versions. The gap: uv sync installs from uv.lock and never upgrades, so lockfiles drift behind PyPI silently β€” this week vibes picked up a zensical jump of ten point releases that had been sitting unselected for a while.

βœ… What Got Done

  • Added a pre-push git hook (.githooks/pre-push) that runs uv lock --upgrade against a snapshot of uv.lock, diffs, and blocks the push if the resolution would change anything. On failure it restores the original lockfile, so the working tree stays clean and the fix is always the same: uv lock --upgrade && uv sync, commit, push again.
  • Installed the same hook in this repo (public/opsdev.nz) and set core.hooksPath; it flagged pending upgrades here immediately.
  • Documented the hook in the README under "Dependency freshness gate".

🧠 Notes & Reflections

  • Deliberate scope choice: this checks latest-stable sync, not reproducibility (uv sync --locked/--frozen remain available where pinning matters). For an internal repo that treats breakage as discoverable, always-fresh is the right default.
  • The hook is for humans pushing, not CI β€” CI still runs the real checks. Git hook paths don't travel with clones (core.hooksPath is local config), so the one-time git config core.hooksPath .githooks after a fresh clone is the step to remember.
  • Two copies of the hook now exist (vibes monorepo and this repo). Fine at ~40 lines, but if a third repo adopts it, promote it to a shared script or bake it into the template instead of copying.
  • uv lockfile model: uv lock, uv sync, uv lock --upgrade, uv sync --locked/--frozen

⏳ Mañana

  • Next stop (not today): add the hook to the GitHub Template Repo so new modules get it from birth instead of by hand-copying.
  • Possibly work the dep-freshness check into a deployment/CI pipeline instead of (or alongside) the hook β€” useful when enforcement-grade coverage is needed (bots, agents, other contributors pushing without local hooks).
  • Remember git config core.hooksPath .githooks on fresh clones of both this repo and the vibes monorepo β€” the setting is local per clone.