#!/usr/bin/env bash
set -Eeuo pipefail
umask 077

BASE="${ROUTER_OPS_BASE:-/opt/router-ops}"
ROOT="${BUNDLE_ROOT:?}"
RUN_DIR="${ROUTER_DETACHED_RUN_DIR:?}"
CHILD_RESULT="${ROUTER_DETACHED_CHILD_RESULT:?}"
INCOMING="${ROUTER_STEP_INCOMING:-/home/ops/incoming}"
SELFTEST="${ROUTER_EXACT_WORKER_SELFTEST:-false}"
STEP=STEP_050M07P22B_R01_VM121_LEGACY_DEVELOPMENT_DATA_RETIREMENT_CLEAN_BASELINE
VM121_COMMIT=d17c0864339bd59a444264ce9305c2a6e560a5bf
VM121_TREE=d1aa54e5774f59bc7eb564bf974ea74e13862723
VM121_COUNT=42
VM100_COMMIT=e865282f4837747b1babfac4ac199680c6b43d04
VM100_TREE=8f04afbbc77006fe117bf1228b1f4fc977be9a47
VM100_COUNT=33
EXPECTED_MIGRATION_SHA=7c10777d7416f15935f55f385f9e233d4334e633972604ad1ee551fc0d1091de

CURRENT="$RUN_DIR/workflow-current.txt"
EVENTS="$RUN_DIR/workflow-events.tsv"
EVIDENCE="$RUN_DIR/evidence"
REPORT="$RUN_DIR/report"
PAYLOAD="$RUN_DIR/public-payload"
FINAL_ENV="$RUN_DIR/final-publication.env"
TARGET_DIR="$RUN_DIR/target"
mkdir -p "$EVIDENCE" "$REPORT" "$PAYLOAD" "$TARGET_DIR" "$INCOMING"
chmod 700 "$EVIDENCE" "$REPORT" "$PAYLOAD" "$TARGET_DIR"

source "$BASE/lib/router-step-workflow.sh"
router_step_workflow_init "$CURRENT" "$EVENTS" preflight data_retirement postcheck report_publish archive

CORE_CHANGE_COMPLETE=false
CORE_CHANGE_REPEATED=false
ROLLBACK_STATUS=not_required
RUNTIME_RECOVERY_STATUS=not_required
STOP_DETAIL=unknown
STOP_HANDLED=false
LATEST_ARCHIVE=not_created
LATEST_ARCHIVE_SHA256=unknown
STEP_REPORT_URL=unknown
HISTORY_BACKUP_PATH=unknown
HISTORY_BACKUP_SHA256=unknown
ROLLBACK_BACKUP_PATH=unknown
ROLLBACK_BACKUP_SHA256=unknown
PRE_PEER_EGRESS_LEASE_COUNT=unknown
EGRESS_TARGET_COUNT_BEFORE=unknown
EGRESS_TARGET_COUNT_AFTER=unknown
EGRESS_ALLOCATOR_COUNT_BEFORE=unknown
EGRESS_ALLOCATOR_COUNT_AFTER=unknown
REMOTE_STAGE=unknown
REMOTE_PKG=unknown

field() { local key="$1" file="$2"; awk -F= -v k="$key" '$1==k{print substr($0,index($0,"=")+1); exit}' "$file"; }

write_child() {
  local result="$1" rc="$2" tmp="${CHILD_RESULT}.tmp.$$"
  {
    echo RESULT="$result"
    echo WORKER_RC="$rc"
    echo CORE_CHANGE_COMPLETE="$CORE_CHANGE_COMPLETE"
    echo CORE_CHANGE_REPEATED="$CORE_CHANGE_REPEATED"
    echo ROLLBACK_STATUS="$ROLLBACK_STATUS"
    echo RUNTIME_RECOVERY_STATUS="$RUNTIME_RECOVERY_STATUS"
    echo STOP_DETAIL="$STOP_DETAIL"
    echo HISTORY_BACKUP_PATH="$HISTORY_BACKUP_PATH"
    echo HISTORY_BACKUP_SHA256="$HISTORY_BACKUP_SHA256"
    echo ROLLBACK_BACKUP_PATH="$ROLLBACK_BACKUP_PATH"
    echo ROLLBACK_BACKUP_SHA256="$ROLLBACK_BACKUP_SHA256"
    echo STEP_REPORT_URL="$STEP_REPORT_URL"
    echo LATEST_ARCHIVE="$LATEST_ARCHIVE"
    echo LATEST_ARCHIVE_SHA256="$LATEST_ARCHIVE_SHA256"
  } > "$tmp"
  chmod 600 "$tmp"
  mv "$tmp" "$CHILD_RESULT"
}

archive_latest() {
  local log="$EVIDENCE/archive.log"
  router_step_archive_latest_python "$BASE" "$INCOMING" "$(date -u +%Y%m%d-%H%M%S)" | tee "$log"
  LATEST_ARCHIVE="$(field LATEST_ARCHIVE "$log")"
  LATEST_ARCHIVE_SHA256="$(field LATEST_ARCHIVE_SHA256 "$log")"
}

write_vm121_selftest_source() {
  cat <<'SRC'
MODE=--check
MACHINE_ID=vm121
LOCAL_HEAD=d17c0864339bd59a444264ce9305c2a6e560a5bf
REMOTE_HEAD=d17c0864339bd59a444264ce9305c2a6e560a5bf
STAGED_CHANGE_COUNT=0
SIMULATED_TREE_SHA=d1aa54e5774f59bc7eb564bf974ea74e13862723
SIMULATED_TREE_FILE_COUNT=42
RESULT=PASS_VM121_GIT_PUBLISH_CHECK
MACHINE_ID=vm121
GIT_COMMIT=d17c0864339bd59a444264ce9305c2a6e560a5bf
GIT_TREE=d1aa54e5774f59bc7eb564bf974ea74e13862723
GIT_FILE_COUNT=42
COMMIT_CREATED=false
PUSH_PERFORMED=false
SRC
}

write_vm100_selftest_zero() {
  cat <<'SRC'
MODE=--check
MACHINE_ID=vm100
LOCAL_HEAD=e865282f4837747b1babfac4ac199680c6b43d04
REMOTE_HEAD=e865282f4837747b1babfac4ac199680c6b43d04
STAGED_CHANGE_COUNT=0
SIMULATED_TREE_SHA=8f04afbbc77006fe117bf1228b1f4fc977be9a47
SIMULATED_TREE_FILE_COUNT=33
RESULT=PASS_VM100_GIT_PUBLISH_CHECK
MACHINE_ID=vm100
GIT_COMMIT=e865282f4837747b1babfac4ac199680c6b43d04
GIT_TREE=8f04afbbc77006fe117bf1228b1f4fc977be9a47
GIT_FILE_COUNT=33
COMMIT_CREATED=false
PUSH_PERFORMED=false
LIFECYCLE_RESULT=PASS_PEER_LIFECYCLE_STATUS
LIFECYCLE_INITIALIZED=true
LIFECYCLE_REGISTRY_VALID=true
LIFECYCLE_PROFILE_COUNT=0
LIFECYCLE_WIREGUARD_COUNT=0
LIFECYCLE_AMNEZIAWG_COUNT=0
LIFECYCLE_SELECTOR_REGISTRY_CONSISTENT=true
WG_PAID_RUNTIME_PEER_COUNT=0
LIFECYCLE_ACTIVE_SELECTOR_ROW_COUNT=0
LIFECYCLE_CANONICAL_SELECTOR_ROW_COUNT=0
SRC
}

collect_vm121_source() {
  local stage="$1"
  if [[ "$SELFTEST" == true ]]; then
    write_vm121_selftest_source > "$EVIDENCE/${stage}-vm121-source.txt"
  else
    ssh -T -o BatchMode=yes -o ConnectTimeout=20 vm121 /bin/bash -s > "$EVIDENCE/${stage}-vm121-source.txt" 2>&1 <<'VM121SRC'
set -euo pipefail
/usr/local/sbin/router-vm121-git-publish.sh --check
VM121SRC
  fi
  "$ROOT/scripts/source-check-validate.sh" vm121 "$EVIDENCE/${stage}-vm121-source.txt" "$VM121_COMMIT" "$VM121_TREE" "$VM121_COUNT" > "$EVIDENCE/${stage}-vm121-source-validation.txt" 2>&1
}

collect_vm100_zero() {
  local stage="$1"
  if [[ "$SELFTEST" == true ]]; then
    write_vm100_selftest_zero > "$EVIDENCE/${stage}-vm100-zero.txt"
  else
    ssh -T -o BatchMode=yes -o ConnectTimeout=20 pve-mgts /bin/bash -s > "$EVIDENCE/${stage}-vm100-zero.txt" 2>&1 <<'PVE'
set -euo pipefail
ssh -T -o BatchMode=yes -o ConnectTimeout=20 -i /root/.ssh/pve_to_openwrt_mgts_ed25519 root@10.71.100.1 /bin/sh -s <<'VM100'
set -eu
/usr/local/sbin/router-vm100-git-publish.sh --check
status="$(/usr/local/sbin/router-wgpay-peer-lifecycle.sh --status)"
get_status() { printf '%s\n' "$status" | awk -F= -v k="$1" '$1==k{print substr($0,index($0,"=")+1); exit}'; }
echo "LIFECYCLE_RESULT=$(get_status RESULT)"
echo "LIFECYCLE_INITIALIZED=$(get_status initialized)"
echo "LIFECYCLE_REGISTRY_VALID=$(get_status registry_valid)"
echo "LIFECYCLE_PROFILE_COUNT=$(get_status profile_count)"
echo "LIFECYCLE_WIREGUARD_COUNT=$(get_status wireguard_count)"
echo "LIFECYCLE_AMNEZIAWG_COUNT=$(get_status amneziawg_count)"
echo "LIFECYCLE_SELECTOR_REGISTRY_CONSISTENT=$(get_status selector_registry_consistent)"
. /etc/router-wgpay-peer-lifecycle.conf
echo "WG_PAID_RUNTIME_PEER_COUNT=$(wg show "$PEER_WIREGUARD_INTERFACE" peers 2>/dev/null | awk 'NF{n++} END{print n+0}')"
echo "LIFECYCLE_ACTIVE_SELECTOR_ROW_COUNT=$(awk '$0!~/^[[:space:]]*#/ && NF{n++} END{print n+0}' "$PEER_ACTIVE_SELECTOR_FILE")"
echo "LIFECYCLE_CANONICAL_SELECTOR_ROW_COUNT=$(awk '$0!~/^[[:space:]]*#/ && NF{n++} END{print n+0}' "$PEER_CANONICAL_SELECTOR_FILE")"
VM100
PVE
  fi
  "$ROOT/scripts/source-check-validate.sh" vm100 "$EVIDENCE/${stage}-vm100-zero.txt" "$VM100_COMMIT" "$VM100_TREE" "$VM100_COUNT" > "$EVIDENCE/${stage}-vm100-source-validation.txt" 2>&1
  "$ROOT/scripts/vm100-zero-validate.sh" "$EVIDENCE/${stage}-vm100-zero.txt" > "$EVIDENCE/${stage}-vm100-zero-validation.txt" 2>&1
}

cleanup_remote_stage() {
  [[ "$SELFTEST" == false && "$REMOTE_STAGE" != unknown ]] || return 0
  set +e
  ssh -T -o BatchMode=yes -o ConnectTimeout=20 vm121 "rm -rf '$REMOTE_STAGE' '$REMOTE_PKG'" >/dev/null 2>&1
  set -e
}

stop_handler() {
  local rc="$1" line="$2" cmd="$3"
  trap - ERR
  [[ "$STOP_HANDLED" == false ]] || return "$rc"
  STOP_HANDLED=true
  cleanup_remote_stage
  {
    echo RESULT=STOP_P22B_VM121_LEGACY_DEVELOPMENT_DATA_RETIREMENT_CLEAN_BASELINE
    echo STOP_RC="$rc"
    echo STOP_LINE="$line"
    printf 'STOP_COMMAND=%q\n' "$cmd"
    echo CORE_CHANGE_COMPLETE="$CORE_CHANGE_COMPLETE"
    echo CORE_CHANGE_REPEATED="$CORE_CHANGE_REPEATED"
    echo ROLLBACK_STATUS="$ROLLBACK_STATUS"
    echo RUNTIME_RECOVERY_STATUS="$RUNTIME_RECOVERY_STATUS"
    echo STOP_DETAIL="$STOP_DETAIL"
  } | tee "$REPORT/stop.txt" "$EVIDENCE/stop.txt"
  set +e
  archive_latest >/dev/null 2>&1
  set -e
  write_child STOP_P22B_VM121_LEGACY_DEVELOPMENT_DATA_RETIREMENT_CLEAN_BASELINE "$rc"
  return "$rc"
}
trap 'rc=$?; stop_handler "$rc" "$LINENO" "$BASH_COMMAND"; exit "$rc"' ERR

write_selftest_pass() {
  cat <<'OUT'
ALEMBIC_VERSION=0002_live_drift_bridge
MIGRATION_SHA256=7c10777d7416f15935f55f385f9e233d4334e633972604ad1ee551fc0d1091de
PRE_USER_COUNT=32
PRE_INVITE_COUNT=2
PRE_ORDER_COUNT=0
PRE_SUBSCRIPTION_COUNT=19
PRE_PEER_COUNT=32
PRE_ENABLED_PEER_COUNT=0
PRE_PROVISIONING_JOB_COUNT=60
PRE_PENDING_JOB_COUNT=0
PRE_PEER_EGRESS_LEASE_COUNT=5
POST_USER_COUNT=0
POST_INVITE_COUNT=0
POST_ORDER_COUNT=0
POST_SUBSCRIPTION_COUNT=0
POST_PEER_COUNT=0
POST_PROVISIONING_JOB_COUNT=0
POST_PEER_EGRESS_LEASE_COUNT=0
EGRESS_TARGET_COUNT_BEFORE=6
EGRESS_TARGET_COUNT_AFTER=6
EGRESS_ALLOCATOR_COUNT_BEFORE=4
EGRESS_ALLOCATOR_COUNT_AFTER=4
HISTORY_BACKUP_CREATED=true
HISTORY_BACKUP_ENCRYPTED=true
HISTORY_BACKUP_PATH=/root/router-db-backups/wg-access-p22b-history-selftest.dump.enc
HISTORY_BACKUP_SHA256=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
HISTORY_BACKUP_RESTORE_FIXTURE=PASS
RESTORED_CLONE_CLEANUP_FIXTURE=PASS
CLEAN_INSTALL_CLEANUP_FIXTURE=PASS
ROLLBACK_BACKUP_CREATED=true
ROLLBACK_BACKUP_ENCRYPTED=true
ROLLBACK_BACKUP_PATH=/root/router-db-backups/wg-access-p22b-rollback-selftest.dump.enc
ROLLBACK_BACKUP_SHA256=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
ROLLBACK_BACKUP_RESTORE_FIXTURE=PASS
SYSTEM_DATA_UNCHANGED=true
DATABASE_SCHEMA_CHANGED=false
LIVE_DATABASE_WRITTEN=true
CORE_DATABASE_CHANGE_COMPLETE=true
ROLLBACK_STATUS=not_required
BACKEND_PAUSED_DURING_CORE=true
RUNTIME_RECOVERY_STATUS=PASS
PRIVATE_RUN_DIR=/root/router-db-retirement-tests/selftest
RESULT=PASS_P22B_VM121_LEGACY_DEVELOPMENT_DATA_RETIREMENT_CLEAN_BASELINE
OUT
}
write_selftest_fail_precore() {
  cat <<'OUT'
FAILED_STAGE=live_cleanup_postcheck
CORE_DATABASE_CHANGE_COMPLETE=false
LIVE_WRITE_STARTED=true
LIVE_CLEANUP_COMMITTED=true
ROLLBACK_STATUS=PASS
RUNTIME_RECOVERY_STATUS=PASS
HISTORY_BACKUP_PATH=/root/router-db-backups/wg-access-p22b-history-selftest.dump.enc
HISTORY_BACKUP_SHA256=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
ROLLBACK_BACKUP_PATH=/root/router-db-backups/wg-access-p22b-rollback-selftest.dump.enc
ROLLBACK_BACKUP_SHA256=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
DATABASE_SCHEMA_CHANGED=false
LIVE_DATABASE_WRITTEN=true
OUT
}
write_selftest_fail_postcore() {
  cat <<'OUT'
FAILED_STAGE=runtime_restore
CORE_DATABASE_CHANGE_COMPLETE=true
LIVE_WRITE_STARTED=true
LIVE_CLEANUP_COMMITTED=true
ROLLBACK_STATUS=not_required
RUNTIME_RECOVERY_STATUS=PASS
HISTORY_BACKUP_PATH=/root/router-db-backups/wg-access-p22b-history-selftest.dump.enc
HISTORY_BACKUP_SHA256=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
ROLLBACK_BACKUP_PATH=/root/router-db-backups/wg-access-p22b-rollback-selftest.dump.enc
ROLLBACK_BACKUP_SHA256=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
DATABASE_SCHEMA_CHANGED=false
LIVE_DATABASE_WRITTEN=true
OUT
}

router_step_phase_begin preflight
collect_vm121_source pre || { STOP_DETAIL=pre_vm121_git_semantics; false; }
collect_vm100_zero pre || { STOP_DETAIL=pre_vm100_not_zero_or_source_mismatch; false; }
PKG="$ROOT/$(python3 - "$ROOT/release-info.json" <<'PY'
import json,sys
print(json.load(open(sys.argv[1],encoding='utf-8'))['target_package_path'])
PY
)"
PKG_SHA="$(awk '{print $1}' "$ROOT/reference/target-package.sha256")"
"$ROOT/scripts/target-apply.sh" "$PKG_SHA" "$PKG" "$TARGET_DIR" > "$EVIDENCE/target-extract.txt"
router_step_phase_complete preflight exact_sources_vm100_zero_and_target_package_verified

router_step_phase_begin data_retirement
retire_rc=0
if [[ "$SELFTEST" == true ]]; then
  case "${ROUTER_PUBLIC_ROOT:-}" in
    */fail-pre/public) write_selftest_fail_precore > "$EVIDENCE/data-retirement.txt"; retire_rc=1 ;;
    */fail-post/public) write_selftest_fail_postcore > "$EVIDENCE/data-retirement.txt"; retire_rc=1 ;;
    *) write_selftest_pass > "$EVIDENCE/data-retirement.txt" ;;
  esac
else
  token="$(basename "$RUN_DIR" | tr -cd 'A-Za-z0-9._-')"
  REMOTE_STAGE="/root/router-step-p22b-$token"
  REMOTE_PKG="/root/router-step-p22b-$token.tar.gz"
  if ! ssh -T -o BatchMode=yes -o ConnectTimeout=20 vm121 "umask 077; cat > '$REMOTE_PKG'" < "$PKG"; then STOP_DETAIL=remote_package_transfer; false; fi
  if ! ssh -T -o BatchMode=yes -o ConnectTimeout=20 vm121 "rm -rf '$REMOTE_STAGE'; install -d -m 0700 '$REMOTE_STAGE'; tar -xzf '$REMOTE_PKG' -C '$REMOTE_STAGE'" > "$EVIDENCE/remote-stage.txt" 2>&1; then STOP_DETAIL=remote_package_extract; false; fi
  if ssh -T -o BatchMode=yes -o ConnectTimeout=20 vm121 "/bin/bash '$REMOTE_STAGE/vm121-p22b-legacy-data-retire.sh'" > "$EVIDENCE/data-retirement.txt" 2>&1; then retire_rc=0; else retire_rc=$?; fi
fi

HISTORY_BACKUP_PATH="$(field HISTORY_BACKUP_PATH "$EVIDENCE/data-retirement.txt")"
HISTORY_BACKUP_SHA256="$(field HISTORY_BACKUP_SHA256 "$EVIDENCE/data-retirement.txt")"
ROLLBACK_BACKUP_PATH="$(field ROLLBACK_BACKUP_PATH "$EVIDENCE/data-retirement.txt")"
ROLLBACK_BACKUP_SHA256="$(field ROLLBACK_BACKUP_SHA256 "$EVIDENCE/data-retirement.txt")"
ROLLBACK_STATUS="$(field ROLLBACK_STATUS "$EVIDENCE/data-retirement.txt")"
RUNTIME_RECOVERY_STATUS="$(field RUNTIME_RECOVERY_STATUS "$EVIDENCE/data-retirement.txt")"
remote_core="$(field CORE_DATABASE_CHANGE_COMPLETE "$EVIDENCE/data-retirement.txt")"
[[ "$remote_core" == true ]] && CORE_CHANGE_COMPLETE=true || CORE_CHANGE_COMPLETE=false
if [[ "$retire_rc" -ne 0 ]]; then
  failed_stage="$(field FAILED_STAGE "$EVIDENCE/data-retirement.txt")"; [[ -n "$failed_stage" ]] || failed_stage=unknown
  STOP_DETAIL="data_retirement_$failed_stage"
  false
fi
if ! "$ROOT/scripts/db-retirement-validate.sh" "$EVIDENCE/data-retirement.txt" > "$EVIDENCE/data-retirement-validation.txt" 2>&1; then STOP_DETAIL=data_retirement_semantics; false; fi
PRE_PEER_EGRESS_LEASE_COUNT="$(field PRE_PEER_EGRESS_LEASE_COUNT "$EVIDENCE/data-retirement.txt")"
EGRESS_TARGET_COUNT_BEFORE="$(field EGRESS_TARGET_COUNT_BEFORE "$EVIDENCE/data-retirement.txt")"
EGRESS_TARGET_COUNT_AFTER="$(field EGRESS_TARGET_COUNT_AFTER "$EVIDENCE/data-retirement.txt")"
EGRESS_ALLOCATOR_COUNT_BEFORE="$(field EGRESS_ALLOCATOR_COUNT_BEFORE "$EVIDENCE/data-retirement.txt")"
EGRESS_ALLOCATOR_COUNT_AFTER="$(field EGRESS_ALLOCATOR_COUNT_AFTER "$EVIDENCE/data-retirement.txt")"
CORE_CHANGE_COMPLETE=true
cleanup_remote_stage
router_step_phase_complete data_retirement encrypted_history_restore_clone_cleanup_rollback_fixture_and_live_clean_baseline_proven

router_step_phase_begin postcheck
if [[ "$SELFTEST" == true ]]; then
  cat > "$EVIDENCE/vm121-live-postcheck.txt" <<'POST'
ALEMBIC_VERSION=0002_live_drift_bridge
USER_COUNT=0
INVITE_COUNT=0
ORDER_COUNT=0
SUBSCRIPTION_COUNT=0
PEER_COUNT=0
ENABLED_PEER_COUNT=0
PROVISIONING_JOB_COUNT=0
PENDING_JOB_COUNT=0
PEER_EGRESS_LEASE_COUNT=0
BACKEND_PAUSED=false
POST
else
  ssh -T -o BatchMode=yes -o ConnectTimeout=20 vm121 /bin/bash -s > "$EVIDENCE/vm121-live-postcheck.txt" 2>&1 <<'VM121POST'
set -euo pipefail
PG=wgaccess-postgres
BACKEND=wgaccess-backend
PGUSER="$(docker exec "$PG" sh -lc 'printf %s "$POSTGRES_USER"')"
PGDB="$(docker exec "$PG" sh -lc 'printf %s "$POSTGRES_DB"')"
q(){ docker exec "$PG" psql -v ON_ERROR_STOP=1 -U "$PGUSER" -d "$PGDB" -Atqc "$1"; }
echo "ALEMBIC_VERSION=$(q 'SELECT version_num FROM alembic_version')"
echo "USER_COUNT=$(q 'SELECT count(*) FROM public.users')"
echo "INVITE_COUNT=$(q 'SELECT count(*) FROM public.invite_codes')"
echo "ORDER_COUNT=$(q 'SELECT count(*) FROM public.orders')"
echo "SUBSCRIPTION_COUNT=$(q 'SELECT count(*) FROM public.subscriptions')"
echo "PEER_COUNT=$(q 'SELECT count(*) FROM public.peers')"
echo "ENABLED_PEER_COUNT=$(q 'SELECT count(*) FROM public.peers WHERE enabled IS TRUE')"
echo "PROVISIONING_JOB_COUNT=$(q 'SELECT count(*) FROM public.provisioning_jobs')"
pending_jobs="$(q "SELECT count(*) FROM public.provisioning_jobs WHERE status IN ('pending','running')")"
echo "PENDING_JOB_COUNT=$pending_jobs"
echo "PEER_EGRESS_LEASE_COUNT=$(q 'SELECT count(*) FROM public.peer_egress_leases')"
echo "BACKEND_PAUSED=$(docker inspect -f '{{.State.Paused}}' "$BACKEND")"
VM121POST
fi
[[ "$(field ALEMBIC_VERSION "$EVIDENCE/vm121-live-postcheck.txt")" == 0002_live_drift_bridge ]] || { STOP_DETAIL=post_alembic; false; }
for key in USER_COUNT INVITE_COUNT ORDER_COUNT SUBSCRIPTION_COUNT PEER_COUNT ENABLED_PEER_COUNT PROVISIONING_JOB_COUNT PENDING_JOB_COUNT PEER_EGRESS_LEASE_COUNT; do [[ "$(field "$key" "$EVIDENCE/vm121-live-postcheck.txt")" == 0 ]] || { STOP_DETAIL="post_nonzero_$key"; false; }; done
[[ "$(field BACKEND_PAUSED "$EVIDENCE/vm121-live-postcheck.txt")" == false ]] || { STOP_DETAIL=post_backend_paused; false; }
collect_vm121_source post || { STOP_DETAIL=post_vm121_git_semantics; false; }
collect_vm100_zero post || { STOP_DETAIL=post_vm100_not_zero_or_source_mismatch; false; }
router_step_phase_complete postcheck live_clean_baseline_source_unchanged_and_vm100_zero_reverified

cat > "$REPORT/report.txt" <<EOF
RESULT=PASS_P22B_VM121_LEGACY_DEVELOPMENT_DATA_RETIREMENT_CLEAN_BASELINE
REVISION=R01
CORE_CHANGE_COMPLETE=true
CORE_CHANGE_REPEATED=false
ROLLBACK_STATUS=not_required
RUNTIME_RECOVERY_STATUS=$RUNTIME_RECOVERY_STATUS
SOURCE_CHANGED=false
MACHINE_GIT_CLOSE_RUN=false
VM121_COMMIT=$VM121_COMMIT
VM121_TREE=$VM121_TREE
VM121_FILE_COUNT=$VM121_COUNT
VM100_COMMIT=$VM100_COMMIT
VM100_TREE=$VM100_TREE
VM100_FILE_COUNT=$VM100_COUNT
ALEMBIC_VERSION=0002_live_drift_bridge
MIGRATION_SHA256=$EXPECTED_MIGRATION_SHA
PRE_USER_COUNT=32
PRE_INVITE_COUNT=2
PRE_ORDER_COUNT=0
PRE_SUBSCRIPTION_COUNT=19
PRE_PEER_COUNT=32
PRE_ENABLED_PEER_COUNT=0
PRE_PROVISIONING_JOB_COUNT=60
PRE_PENDING_JOB_COUNT=0
PRE_PEER_EGRESS_LEASE_COUNT=$PRE_PEER_EGRESS_LEASE_COUNT
POST_USER_COUNT=0
POST_INVITE_COUNT=0
POST_ORDER_COUNT=0
POST_SUBSCRIPTION_COUNT=0
POST_PEER_COUNT=0
POST_ENABLED_PEER_COUNT=0
POST_PROVISIONING_JOB_COUNT=0
POST_PENDING_JOB_COUNT=0
POST_PEER_EGRESS_LEASE_COUNT=0
HISTORY_BACKUP_CREATED=true
HISTORY_BACKUP_ENCRYPTED=true
HISTORY_BACKUP_PATH=$HISTORY_BACKUP_PATH
HISTORY_BACKUP_SHA256=$HISTORY_BACKUP_SHA256
HISTORY_BACKUP_RESTORE_FIXTURE=PASS
RESTORED_CLONE_CLEANUP_FIXTURE=PASS
CLEAN_INSTALL_CLEANUP_FIXTURE=PASS
ROLLBACK_BACKUP_CREATED=true
ROLLBACK_BACKUP_ENCRYPTED=true
ROLLBACK_BACKUP_PATH=$ROLLBACK_BACKUP_PATH
ROLLBACK_BACKUP_SHA256=$ROLLBACK_BACKUP_SHA256
ROLLBACK_BACKUP_RESTORE_FIXTURE=PASS
BACKUP_KEY_PUBLISHED=false
SYSTEM_DATA_UNCHANGED=true
EGRESS_TARGET_COUNT_BEFORE=$EGRESS_TARGET_COUNT_BEFORE
EGRESS_TARGET_COUNT_AFTER=$EGRESS_TARGET_COUNT_AFTER
EGRESS_ALLOCATOR_COUNT_BEFORE=$EGRESS_ALLOCATOR_COUNT_BEFORE
EGRESS_ALLOCATOR_COUNT_AFTER=$EGRESS_ALLOCATOR_COUNT_AFTER
DATABASE_SCHEMA_CHANGED=false
LIVE_DATABASE_WRITTEN=true
DOMAIN_V2_OBJECTS_ADDED=false
BACKEND_PAUSED_DURING_CORE=true
VM100_ZERO_BASELINE_BEFORE=true
VM100_ZERO_BASELINE_AFTER=true
VM100_CHANGED=false
VM101_CHANGED=false
REBOOT_PERFORMED=false
SNAPSHOT_CREATED=false
VM121_PUBLIC_URL=https://reports.secret-studio.ru/latest/20260809-180554_vm121_git_source_d17c0864339b/
VM100_PUBLIC_URL=https://reports.secret-studio.ru/latest/20260809-142753_vm100_git_source_e865282f4837/
VM101_PUBLIC_URL=https://reports.secret-studio.ru/latest/20260801-095331_vm101_git_source_ac678d1b3164/
PROJECT_SOURCE_POST_URL=https://reports.secret-studio.ru/latest/20260802-105248_project_source_post_r20qx_vm121_multi_protocol_architecture/
GLOBAL_PLAN_URL=https://reports.secret-studio.ru/latest/20260802-105248_global_project_plan_wg_paid_after_r20qw/
ACCESS_MAP_URL=https://reports.secret-studio.ru/latest/20260715-210236_access_map_canonical_current/
RUNTIME_IMPACT=true
COPY_VERIFY=PASS
NEXT_ACTION=Update Project Sources to the P22B clean-baseline checkpoint, then begin P2.3 Domain V2 design and migration
EOF
cp "$REPORT/report.txt" "$REPORT/verify.txt"
cp "$ROOT/scripts/run-step.sh" "$REPORT/executed-step.sh"
cp "$ROOT/release-info.json" "$REPORT/release-info.json"
cp "$ROOT/manifest.sha256" "$REPORT/bundle-manifest.sha256"
cp "$ROOT/rollback/README.md" "$REPORT/rollback.txt"
for f in pre-vm121-source-validation.txt post-vm121-source-validation.txt pre-vm100-zero-validation.txt post-vm100-zero-validation.txt data-retirement-validation.txt vm121-live-postcheck.txt; do cp "$EVIDENCE/$f" "$REPORT/"; done

router_step_phase_begin report_publish
if [[ "$SELFTEST" == true ]]; then
  DEST="${ROUTER_PUBLIC_ROOT:?}/latest/p22b-r01-selftest"
  rm -rf "$DEST"; mkdir -p "$DEST"; cp -a "$REPORT"/. "$DEST"/
  STEP_REPORT_URL=selftest://p22b-r01/
else
  args=()
  while IFS= read -r file; do args+=("$file" "$(basename "$file")"); done < <(find "$REPORT" -maxdepth 1 -type f -print | LC_ALL=C sort)
  router_step_publish_payload step050m07p22b_r01_vm121_legacy_development_data_retirement_clean_baseline "$REPORT" "$PAYLOAD" "$CURRENT" "$EVENTS" "$FINAL_ENV" "${args[@]}"
  STEP_REPORT_URL="$(awk -F= '$1=="PUBLIC_URL"{print substr($0,index($0,"=")+1)}' "$FINAL_ENV" | tail -n1)"
fi
router_step_phase_complete report_publish step_report_published

router_step_phase_begin archive
archive_latest
router_step_phase_complete archive latest_created
router_step_workflow_mark_complete

trap - ERR
STOP_DETAIL=none
write_child PASS_P22B_VM121_LEGACY_DEVELOPMENT_DATA_RETIREMENT_CLEAN_BASELINE 0
echo RESULT=PASS_P22B_VM121_LEGACY_DEVELOPMENT_DATA_RETIREMENT_CLEAN_BASELINE
echo CORE_CHANGE_COMPLETE=true
echo ROLLBACK_STATUS=not_required
echo RUNTIME_RECOVERY_STATUS="$RUNTIME_RECOVERY_STATUS"
echo STEP_REPORT_URL="$STEP_REPORT_URL"
echo LATEST_ARCHIVE="$LATEST_ARCHIVE"
echo LATEST_ARCHIVE_SHA256="$LATEST_ARCHIVE_SHA256"
