#!/usr/bin/env bash # Update a specific log entry (e.g. mark a PR as merged). # # Usage: # .claude/scripts/update-entry.sh --status merged # .claude/scripts/update-entry.sh --pr-number 42 --pr-url https://... set -euo pipefail REQ_ID="${1:-}" LOG_FILE=".claude/request-log.jsonl" NEW_STATUS="" NEW_PR_NUMBER="" NEW_PR_URL="" shift || true while [[ $# -gt 0 ]]; do case "$1" in --status) NEW_STATUS="$2"; shift 2 ;; --pr-number) NEW_PR_NUMBER="$2"; shift 2 ;; --pr-url) NEW_PR_URL="$2"; shift 2 ;; *) echo "Unknown arg: $1" >&2; exit 1 ;; esac done if [ -z "$REQ_ID" ]; then echo "Usage: update-entry.sh [--status STATUS] [--pr-number N] [--pr-url URL]" >&2 exit 1 fi if [ ! -f "$LOG_FILE" ]; then echo "Log file not found: $LOG_FILE" >&2 exit 1 fi TMPFILE=$(mktemp) JQ_ARGS=() JQ_FILTER='.' if [ -n "$NEW_STATUS" ]; then JQ_ARGS+=(--arg status "$NEW_STATUS") JQ_FILTER="$JQ_FILTER | .status = \$status" fi if [ -n "$NEW_PR_NUMBER" ]; then JQ_ARGS+=(--argjson pr_num "$NEW_PR_NUMBER") JQ_FILTER="$JQ_FILTER | .pr_number = \$pr_num" fi if [ -n "$NEW_PR_URL" ]; then JQ_ARGS+=(--arg pr_url "$NEW_PR_URL") JQ_FILTER="$JQ_FILTER | .pr_url = \$pr_url" fi while IFS= read -r line; do ID=$(echo "$line" | jq -r '.id // ""') if [ "$ID" = "$REQ_ID" ]; then echo "$line" | jq "${JQ_ARGS[@]}" "$JQ_FILTER" else echo "$line" fi done < "$LOG_FILE" > "$TMPFILE" mv "$TMPFILE" "$LOG_FILE" echo "Updated entry $REQ_ID"