#!/usr/bin/env bash
set -euo pipefail

ROOT="${AGENTTEAM_TIMELINE_CARD_RETIREMENT_GUARDRAIL_ROOT:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}"
cd "$ROOT"

failures=0
fail() {
  printf 'FAIL: %s\n' "$1" >&2
  failures=$((failures + 1))
}

require_no_matches() {
  local label="$1"
  local pattern="$2"
  shift 2
  local matches
  matches="$(rg -n -P --glob '!**/*_test.go' --glob '!internal/tidb/migrations/**' --glob '!internal/tidb/testdata/**' --glob '!specs/task/timeline-cards.md' "$pattern" "$@" 2>/dev/null || true)"
  if [[ -n "$matches" ]]; then
    fail "$label"
    printf '%s\n' "$matches" >&2
  fi
}

require_no_matches \
  'current runtime/web/spec paths must not reintroduce retired timeline-card tables, sidecars, or frontend registries' \
  'timeline_cards|timeline_card_id|SidecarKindTimelineCard|messageCardRegistry|messageCardEnvelope|MessageCardEnvelope|readMessageCardEnvelope|generic-message-card' \
  internal \
  web/src \
  docs/tech_design.md \
  specs/message/private-channel-share-card.md \
  specs/message/scope-model.md \
  specs/message/rewind.md \
  specs/message/scope-implementation-design.md \
  specs/task/agent-space-convergence.md \
  specs/task/embedded-view.md

require_no_matches \
  'current task specs must not describe embedded task cards as a live renderer or structured timeline-card plan' \
  'reply thread .*embedded task card|server .*embedded task card|structured timeline cards|generic registry fallback|metadata\.card\.fallback|metadata\.card\.kind|root card|card anchor|embedded card source binding|embedded card coverage|embedded card unread|embedded card read state|embedded task composer|embedded task view' \
  specs/task/agent-space-convergence.md \
  specs/task/embedded-view.md

if (( failures > 0 )); then
  printf '\ntimeline-card retirement guardrail failed with %d issue(s).\n' "$failures" >&2
  exit 1
fi

printf 'timeline-card retirement guardrail passed.\n'
