Files
meshcore-bot/scripts/context_checkpoint.sh
Stacy Olivas e9f4240704 docs: record CI fix commits in BUGS.md and TODO.md
Log ruff/mypy/ShellCheck fixes (e0eae09) and Python 3.9 matrix
removal (92c5910) in BUGS.md fixed section; update TODO.md
last-updated line to reflect current CI status.
2026-03-17 21:01:07 -07:00

91 lines
2.6 KiB
Bash
Executable File

#!/usr/bin/env bash
# Context checkpoint: updates SESSION_RESUME.md, TODO.md, BUGS.md on session stop / cron
set -euo pipefail
REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
cd "$REPO_ROOT"
TASK=$(cat .claude/current_task.txt 2>/dev/null || echo "unknown")
STEP=$(cat .claude/current_step.txt 2>/dev/null || echo "unknown")
TS=$(date '+%Y-%m-%d %H:%M')
# 1. Update SESSION_RESUME.md — overwrite/append the "Current State" section
python3 - "$TASK" "$STEP" "$TS" <<'PYEOF'
import re, pathlib, sys
task, step, ts = sys.argv[1], sys.argv[2], sys.argv[3]
path = pathlib.Path("SESSION_RESUME.md")
content = path.read_text() if path.exists() else ""
new_section = (
"## Current State\n\n"
"- **Active task:** " + task + "\n"
"- **Last step:** " + step + "\n"
"- **Checkpoint:** " + ts + "\n"
"- **Resume instruction:** Start at " + task + ", step " + step +
" — see task list below for full context\n\n"
)
if "## Current State" in content:
content = re.sub(
r"## Current State\n.*?(?=^## |\Z)",
new_section,
content,
flags=re.DOTALL | re.MULTILINE,
)
else:
content = content.rstrip("\n") + "\n\n" + new_section
path.write_text(content)
print("SESSION_RESUME.md updated")
PYEOF
# 2. Update TODO.md — mark active task as paused if not already done/paused
if [ "$TASK" != "unknown" ]; then
python3 - "$TASK" "$TS" <<'PYEOF'
import pathlib, re, sys
task, ts = sys.argv[1], sys.argv[2]
path = pathlib.Path("TODO.md")
if not path.exists():
print("TODO.md not found, skipping")
sys.exit(0)
content = path.read_text()
pattern = re.compile(r"(\[ \].*?" + re.escape(task) + r".*?)(?=\n)", re.IGNORECASE)
def mark_paused(m):
line = m.group(1)
if "\u23f8" in line or "[x]" in line:
return line
return line + " \u23f8 paused " + ts + " \u2014 see SESSION_RESUME.md"
new_content = pattern.sub(mark_paused, content)
if new_content != content:
path.write_text(new_content)
print("TODO.md: marked " + task + " as paused")
else:
print("TODO.md: no open task line found for " + task)
PYEOF
fi
# 3. Flush pending bugs from .claude/pending_bugs.txt into BUGS.md
PENDING=".claude/pending_bugs.txt"
if [ -s "$PENDING" ]; then
printf '\n' >> BUGS.md
cat "$PENDING" >> BUGS.md
: > "$PENDING"
echo "BUGS.md: flushed pending bugs"
fi
# 4. Append checkpoint log entry
mkdir -p .claude
LOG_LINE="$TS task=$TASK step=$STEP trigger=checkpoint"
echo "$LOG_LINE" >> .claude/checkpoint_log.txt
echo "checkpoint_log.txt: $LOG_LINE"
# 5. Update last_checkpoint timestamp
echo "$TS" > .claude/last_checkpoint
echo "Checkpoint complete at $TS"