From bcfa0094f4d8ce6e7447fe669286cd2875680f6a Mon Sep 17 00:00:00 2001 From: Oskar Kapala Date: Mon, 4 May 2026 21:44:35 +0200 Subject: [PATCH] add safe context sync script --- saturn/README.md | 6 ++++++ saturn/sync-context.sh | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100755 saturn/sync-context.sh diff --git a/saturn/README.md b/saturn/README.md index 923de6b..2b3bdb2 100644 --- a/saturn/README.md +++ b/saturn/README.md @@ -31,6 +31,12 @@ The documentation is based only on stated facts. Missing details are recorded as - [Joplin Server](docs/joplin-server.md) - [Unknowns and clarification questions](docs/questions.md) +## Workflow + +- Start Codex with `./start-codex.sh`. +- Start Aider with `./start-aider.sh`. +- Sync shared context only with `./sync-context.sh` from the repo root after updating `codex_context.yaml`. + ## Known facts - The homelab has one known main server: Raspberry Pi 5. diff --git a/saturn/sync-context.sh b/saturn/sync-context.sh new file mode 100755 index 0000000..1d27956 --- /dev/null +++ b/saturn/sync-context.sh @@ -0,0 +1,37 @@ +#!/usr/bin/env bash + +set -euo pipefail + +REPO_ROOT="$(git rev-parse --show-toplevel 2>/dev/null || true)" + +if [[ -z "$REPO_ROOT" ]]; then + echo "Not inside a git repository" >&2 + exit 1 +fi + +if [[ "$(pwd)" != "$REPO_ROOT" ]]; then + echo "Run this script from the repo root" >&2 + exit 1 +fi + +mapfile -t status_lines < <(git status --porcelain=v1 --untracked-files=all) + +for line in "${status_lines[@]}"; do + path="${line:3}" + if [[ "$path" != "codex_context.yaml" ]]; then + echo "Refusing to sync: only codex_context.yaml may be changed" >&2 + exit 1 + fi +done + +git pull --rebase + +if git diff --quiet -- codex_context.yaml && git diff --cached --quiet -- codex_context.yaml; then + echo "No context changes to sync" + exit 0 +fi + +python3 -c "import yaml; yaml.safe_load(open('codex_context.yaml'))" +git add codex_context.yaml +git commit -m "update shared context" +git push