diff options
Diffstat (limited to 'docs')
| -rwxr-xr-x | docs/archive/2026-01-relay-ngit-dev-migration/scripts/01-fetch-events.sh | 9 | ||||
| -rwxr-xr-x | docs/archive/2026-01-relay-ngit-dev-migration/scripts/40-classify-actions.sh | 37 |
2 files changed, 38 insertions, 8 deletions
diff --git a/docs/archive/2026-01-relay-ngit-dev-migration/scripts/01-fetch-events.sh b/docs/archive/2026-01-relay-ngit-dev-migration/scripts/01-fetch-events.sh index e0d6f26..7079bb9 100755 --- a/docs/archive/2026-01-relay-ngit-dev-migration/scripts/01-fetch-events.sh +++ b/docs/archive/2026-01-relay-ngit-dev-migration/scripts/01-fetch-events.sh | |||
| @@ -124,7 +124,14 @@ fetch_kind() { | |||
| 124 | 124 | ||
| 125 | # Use --paginate to ensure we get all events, not just first page | 125 | # Use --paginate to ensure we get all events, not just first page |
| 126 | # nak outputs one event per line (JSONL format) | 126 | # nak outputs one event per line (JSONL format) |
| 127 | if ! nak req -k "$kind" --paginate "$relay" > "$output_file" 2>/dev/null; then | 127 | # NOTE: nak buffers output when stdout is not a TTY (e.g. non-interactive SSH). |
| 128 | # Use 'script' to provide a pseudo-TTY so nak flushes each line immediately. | ||
| 129 | # Then strip the nak connection banner ("connecting to ...") and carriage returns | ||
| 130 | # that 'script' injects into the output stream. | ||
| 131 | if ! script -q -c "nak req -k $kind --paginate $relay" /dev/null 2>/dev/null \ | ||
| 132 | | tr -d '\r' \ | ||
| 133 | | grep -v '^connecting to ' \ | ||
| 134 | > "$output_file"; then | ||
| 128 | log_error "Failed to fetch $description from $relay" | 135 | log_error "Failed to fetch $description from $relay" |
| 129 | return 1 | 136 | return 1 |
| 130 | fi | 137 | fi |
diff --git a/docs/archive/2026-01-relay-ngit-dev-migration/scripts/40-classify-actions.sh b/docs/archive/2026-01-relay-ngit-dev-migration/scripts/40-classify-actions.sh index 8b61636..94487e6 100755 --- a/docs/archive/2026-01-relay-ngit-dev-migration/scripts/40-classify-actions.sh +++ b/docs/archive/2026-01-relay-ngit-dev-migration/scripts/40-classify-actions.sh | |||
| @@ -103,11 +103,13 @@ log_info "Building lookup tables..." | |||
| 103 | 103 | ||
| 104 | # Build prod category lookup: repo|npub -> category | 104 | # Build prod category lookup: repo|npub -> category |
| 105 | declare -A PROD_CAT | 105 | declare -A PROD_CAT |
| 106 | PROD_CAT_COUNT=0 | ||
| 106 | while IFS='|' read -r repo npub rest || [[ -n "$repo" ]]; do | 107 | while IFS='|' read -r repo npub rest || [[ -n "$repo" ]]; do |
| 107 | repo="${repo// /}" # Remove all spaces | 108 | repo="${repo// /}" # Remove all spaces |
| 108 | npub="${npub// /}" # Remove all spaces | 109 | npub="${npub// /}" # Remove all spaces |
| 109 | [[ -z "$repo" || -z "$npub" ]] && continue | 110 | [[ -z "$repo" || -z "$npub" ]] && continue |
| 110 | PROD_CAT["$repo|$npub"]="cat1" | 111 | PROD_CAT["$repo|$npub"]="cat1" |
| 112 | PROD_CAT_COUNT=$((PROD_CAT_COUNT + 1)) | ||
| 111 | done < "$PROD_DIR/category1-complete-match.txt" | 113 | done < "$PROD_DIR/category1-complete-match.txt" |
| 112 | 114 | ||
| 113 | while IFS='|' read -r repo npub rest || [[ -n "$repo" ]]; do | 115 | while IFS='|' read -r repo npub rest || [[ -n "$repo" ]]; do |
| @@ -115,6 +117,7 @@ while IFS='|' read -r repo npub rest || [[ -n "$repo" ]]; do | |||
| 115 | npub="${npub// /}" | 117 | npub="${npub// /}" |
| 116 | [[ -z "$repo" || -z "$npub" ]] && continue | 118 | [[ -z "$repo" || -z "$npub" ]] && continue |
| 117 | PROD_CAT["$repo|$npub"]="cat2" | 119 | PROD_CAT["$repo|$npub"]="cat2" |
| 120 | PROD_CAT_COUNT=$((PROD_CAT_COUNT + 1)) | ||
| 118 | done < "$PROD_DIR/category2-empty-blank.txt" | 121 | done < "$PROD_DIR/category2-empty-blank.txt" |
| 119 | 122 | ||
| 120 | while IFS='|' read -r repo npub rest || [[ -n "$repo" ]]; do | 123 | while IFS='|' read -r repo npub rest || [[ -n "$repo" ]]; do |
| @@ -122,6 +125,7 @@ while IFS='|' read -r repo npub rest || [[ -n "$repo" ]]; do | |||
| 122 | npub="${npub// /}" | 125 | npub="${npub// /}" |
| 123 | [[ -z "$repo" || -z "$npub" ]] && continue | 126 | [[ -z "$repo" || -z "$npub" ]] && continue |
| 124 | PROD_CAT["$repo|$npub"]="cat3" | 127 | PROD_CAT["$repo|$npub"]="cat3" |
| 128 | PROD_CAT_COUNT=$((PROD_CAT_COUNT + 1)) | ||
| 125 | done < "$PROD_DIR/category3-partial-match.txt" | 129 | done < "$PROD_DIR/category3-partial-match.txt" |
| 126 | 130 | ||
| 127 | while IFS='|' read -r repo npub rest || [[ -n "$repo" ]]; do | 131 | while IFS='|' read -r repo npub rest || [[ -n "$repo" ]]; do |
| @@ -129,17 +133,20 @@ while IFS='|' read -r repo npub rest || [[ -n "$repo" ]]; do | |||
| 129 | npub="${npub// /}" | 133 | npub="${npub// /}" |
| 130 | [[ -z "$repo" || -z "$npub" ]] && continue | 134 | [[ -z "$repo" || -z "$npub" ]] && continue |
| 131 | PROD_CAT["$repo|$npub"]="cat4" | 135 | PROD_CAT["$repo|$npub"]="cat4" |
| 136 | PROD_CAT_COUNT=$((PROD_CAT_COUNT + 1)) | ||
| 132 | done < "$PROD_DIR/category4-no-match.txt" | 137 | done < "$PROD_DIR/category4-no-match.txt" |
| 133 | 138 | ||
| 134 | log_info "Loaded ${#PROD_CAT[@]} prod entries" | 139 | log_info "Loaded $PROD_CAT_COUNT prod entries" |
| 135 | 140 | ||
| 136 | # Build archive category lookup: repo|npub -> category | 141 | # Build archive category lookup: repo|npub -> category |
| 137 | declare -A ARCHIVE_CAT | 142 | declare -A ARCHIVE_CAT |
| 143 | ARCHIVE_CAT_COUNT=0 | ||
| 138 | while IFS='|' read -r repo npub rest; do | 144 | while IFS='|' read -r repo npub rest; do |
| 139 | repo="${repo// /}" | 145 | repo="${repo// /}" |
| 140 | npub="${npub// /}" | 146 | npub="${npub// /}" |
| 141 | [[ -z "$repo" || -z "$npub" ]] && continue | 147 | [[ -z "$repo" || -z "$npub" ]] && continue |
| 142 | ARCHIVE_CAT["$repo|$npub"]="cat1" | 148 | ARCHIVE_CAT["$repo|$npub"]="cat1" |
| 149 | ARCHIVE_CAT_COUNT=$((ARCHIVE_CAT_COUNT + 1)) | ||
| 143 | done < "$ARCHIVE_DIR/category1-complete-match.txt" | 150 | done < "$ARCHIVE_DIR/category1-complete-match.txt" |
| 144 | 151 | ||
| 145 | while IFS='|' read -r repo npub rest; do | 152 | while IFS='|' read -r repo npub rest; do |
| @@ -147,6 +154,7 @@ while IFS='|' read -r repo npub rest; do | |||
| 147 | npub="${npub// /}" | 154 | npub="${npub// /}" |
| 148 | [[ -z "$repo" || -z "$npub" ]] && continue | 155 | [[ -z "$repo" || -z "$npub" ]] && continue |
| 149 | ARCHIVE_CAT["$repo|$npub"]="cat2" | 156 | ARCHIVE_CAT["$repo|$npub"]="cat2" |
| 157 | ARCHIVE_CAT_COUNT=$((ARCHIVE_CAT_COUNT + 1)) | ||
| 150 | done < "$ARCHIVE_DIR/category2-empty-blank.txt" | 158 | done < "$ARCHIVE_DIR/category2-empty-blank.txt" |
| 151 | 159 | ||
| 152 | while IFS='|' read -r repo npub rest; do | 160 | while IFS='|' read -r repo npub rest; do |
| @@ -154,6 +162,7 @@ while IFS='|' read -r repo npub rest; do | |||
| 154 | npub="${npub// /}" | 162 | npub="${npub// /}" |
| 155 | [[ -z "$repo" || -z "$npub" ]] && continue | 163 | [[ -z "$repo" || -z "$npub" ]] && continue |
| 156 | ARCHIVE_CAT["$repo|$npub"]="cat3" | 164 | ARCHIVE_CAT["$repo|$npub"]="cat3" |
| 165 | ARCHIVE_CAT_COUNT=$((ARCHIVE_CAT_COUNT + 1)) | ||
| 157 | done < "$ARCHIVE_DIR/category3-partial-match.txt" | 166 | done < "$ARCHIVE_DIR/category3-partial-match.txt" |
| 158 | 167 | ||
| 159 | while IFS='|' read -r repo npub rest; do | 168 | while IFS='|' read -r repo npub rest; do |
| @@ -161,9 +170,10 @@ while IFS='|' read -r repo npub rest; do | |||
| 161 | npub="${npub// /}" | 170 | npub="${npub// /}" |
| 162 | [[ -z "$repo" || -z "$npub" ]] && continue | 171 | [[ -z "$repo" || -z "$npub" ]] && continue |
| 163 | ARCHIVE_CAT["$repo|$npub"]="cat4" | 172 | ARCHIVE_CAT["$repo|$npub"]="cat4" |
| 173 | ARCHIVE_CAT_COUNT=$((ARCHIVE_CAT_COUNT + 1)) | ||
| 164 | done < "$ARCHIVE_DIR/category4-no-match.txt" | 174 | done < "$ARCHIVE_DIR/category4-no-match.txt" |
| 165 | 175 | ||
| 166 | log_info "Loaded ${#ARCHIVE_CAT[@]} archive entries" | 176 | log_info "Loaded $ARCHIVE_CAT_COUNT archive entries" |
| 167 | 177 | ||
| 168 | # Build purgatory lookup: repo|npub -> 1 (if purgatory expired) | 178 | # Build purgatory lookup: repo|npub -> 1 (if purgatory expired) |
| 169 | declare -A PURGATORY | 179 | declare -A PURGATORY |
| @@ -237,7 +247,7 @@ process_deletions() { | |||
| 237 | process_deletions "$PROD_DIR/raw/deletions.json" | 247 | process_deletions "$PROD_DIR/raw/deletions.json" |
| 238 | process_deletions "$ARCHIVE_DIR/raw/deletions.json" | 248 | process_deletions "$ARCHIVE_DIR/raw/deletions.json" |
| 239 | DELETED_COUNT=0 | 249 | DELETED_COUNT=0 |
| 240 | [[ ${#DELETED[@]} -gt 0 ]] && DELETED_COUNT=${#DELETED[@]} | 250 | for _k in "${!DELETED[@]}"; do DELETED_COUNT=$((DELETED_COUNT + 1)); done |
| 241 | log_info "Loaded $DELETED_COUNT deletion entries" | 251 | log_info "Loaded $DELETED_COUNT deletion entries" |
| 242 | 252 | ||
| 243 | # Build git ancestry lookup: repo|npub -> relationship (archive-ahead, prod-ahead, diverged, etc.) | 253 | # Build git ancestry lookup: repo|npub -> relationship (archive-ahead, prod-ahead, diverged, etc.) |
| @@ -266,17 +276,20 @@ fi | |||
| 266 | log_info "Building unique repo list..." | 276 | log_info "Building unique repo list..." |
| 267 | 277 | ||
| 268 | declare -A ALL_REPOS | 278 | declare -A ALL_REPOS |
| 279 | ALL_REPOS_COUNT=0 | ||
| 280 | set +u | ||
| 269 | for key in "${!PROD_CAT[@]}"; do | 281 | for key in "${!PROD_CAT[@]}"; do |
| 270 | ALL_REPOS["$key"]=1 | 282 | [[ -z "${ALL_REPOS[$key]+x}" ]] && { ALL_REPOS["$key"]=1; ALL_REPOS_COUNT=$((ALL_REPOS_COUNT + 1)); } |
| 271 | done | 283 | done |
| 272 | for key in "${!ARCHIVE_CAT[@]}"; do | 284 | for key in "${!ARCHIVE_CAT[@]}"; do |
| 273 | ALL_REPOS["$key"]=1 | 285 | [[ -z "${ALL_REPOS[$key]+x}" ]] && { ALL_REPOS["$key"]=1; ALL_REPOS_COUNT=$((ALL_REPOS_COUNT + 1)); } |
| 274 | done | 286 | done |
| 275 | for key in "${!PURGATORY[@]}"; do | 287 | for key in "${!PURGATORY[@]}"; do |
| 276 | ALL_REPOS["$key"]=1 | 288 | [[ -z "${ALL_REPOS[$key]+x}" ]] && { ALL_REPOS["$key"]=1; ALL_REPOS_COUNT=$((ALL_REPOS_COUNT + 1)); } |
| 277 | done | 289 | done |
| 290 | set -u | ||
| 278 | 291 | ||
| 279 | log_info "Total unique repos: ${#ALL_REPOS[@]}" | 292 | log_info "Total unique repos: $ALL_REPOS_COUNT" |
| 280 | 293 | ||
| 281 | # ============================================================================ | 294 | # ============================================================================ |
| 282 | # Phase 3: Classify each repo according to revised decision tree | 295 | # Phase 3: Classify each repo according to revised decision tree |
| @@ -351,6 +364,7 @@ cat_to_status() { | |||
| 351 | } | 364 | } |
| 352 | 365 | ||
| 353 | LOOP_COUNT=0 | 366 | LOOP_COUNT=0 |
| 367 | set +u | ||
| 354 | for key in "${!ALL_REPOS[@]}"; do | 368 | for key in "${!ALL_REPOS[@]}"; do |
| 355 | LOOP_COUNT=$((LOOP_COUNT + 1)) | 369 | LOOP_COUNT=$((LOOP_COUNT + 1)) |
| 356 | [[ $((LOOP_COUNT % 100)) -eq 0 ]] && log_info "Processed $LOOP_COUNT repos..." | 370 | [[ $((LOOP_COUNT % 100)) -eq 0 ]] && log_info "Processed $LOOP_COUNT repos..." |
| @@ -473,6 +487,7 @@ for key in "${!ALL_REPOS[@]}"; do | |||
| 473 | ;; | 487 | ;; |
| 474 | esac | 488 | esac |
| 475 | done | 489 | done |
| 490 | set -u | ||
| 476 | 491 | ||
| 477 | # ============================================================================ | 492 | # ============================================================================ |
| 478 | # Phase 4: Write output files | 493 | # Phase 4: Write output files |
| @@ -488,9 +503,11 @@ TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%S+00:00") | |||
| 488 | echo "# Generated: $TIMESTAMP" | 503 | echo "# Generated: $TIMESTAMP" |
| 489 | echo "# Format: repo | npub | prod_status | archive_status | context | reason" | 504 | echo "# Format: repo | npub | prod_status | archive_status | context | reason" |
| 490 | echo "#" | 505 | echo "#" |
| 506 | set +u | ||
| 491 | for line in "${READY_LINES[@]}"; do | 507 | for line in "${READY_LINES[@]}"; do |
| 492 | echo "$line" | 508 | echo "$line" |
| 493 | done | 509 | done |
| 510 | set -u | ||
| 494 | } > "$READY_FILE" | 511 | } > "$READY_FILE" |
| 495 | 512 | ||
| 496 | # Write needs-resync.txt | 513 | # Write needs-resync.txt |
| @@ -503,9 +520,11 @@ TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%S+00:00") | |||
| 503 | echo "# purgatory-expired = archive tried to sync but failed (30min timeout)" | 520 | echo "# purgatory-expired = archive tried to sync but failed (30min timeout)" |
| 504 | echo "# none = archive never tried or announcement missing" | 521 | echo "# none = archive never tried or announcement missing" |
| 505 | echo "#" | 522 | echo "#" |
| 523 | set +u | ||
| 506 | for line in "${RESYNC_LINES[@]}"; do | 524 | for line in "${RESYNC_LINES[@]}"; do |
| 507 | echo "$line" | 525 | echo "$line" |
| 508 | done | 526 | done |
| 527 | set -u | ||
| 509 | } > "$RESYNC_FILE" | 528 | } > "$RESYNC_FILE" |
| 510 | 529 | ||
| 511 | # Write manual-review.txt | 530 | # Write manual-review.txt |
| @@ -514,9 +533,11 @@ TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%S+00:00") | |||
| 514 | echo "# Generated: $TIMESTAMP" | 533 | echo "# Generated: $TIMESTAMP" |
| 515 | echo "# Format: repo | npub | prod_status | archive_status | context | reason" | 534 | echo "# Format: repo | npub | prod_status | archive_status | context | reason" |
| 516 | echo "#" | 535 | echo "#" |
| 536 | set +u | ||
| 517 | for line in "${REVIEW_LINES[@]}"; do | 537 | for line in "${REVIEW_LINES[@]}"; do |
| 518 | echo "$line" | 538 | echo "$line" |
| 519 | done | 539 | done |
| 540 | set -u | ||
| 520 | } > "$REVIEW_FILE" | 541 | } > "$REVIEW_FILE" |
| 521 | 542 | ||
| 522 | # ============================================================================ | 543 | # ============================================================================ |
| @@ -525,9 +546,11 @@ TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%S+00:00") | |||
| 525 | 546 | ||
| 526 | log_info "Generating summary..." | 547 | log_info "Generating summary..." |
| 527 | 548 | ||
| 549 | set +u | ||
| 528 | TOTAL_READY="${#READY_LINES[@]}" | 550 | TOTAL_READY="${#READY_LINES[@]}" |
| 529 | TOTAL_RESYNC="${#RESYNC_LINES[@]}" | 551 | TOTAL_RESYNC="${#RESYNC_LINES[@]}" |
| 530 | TOTAL_REVIEW="${#REVIEW_LINES[@]}" | 552 | TOTAL_REVIEW="${#REVIEW_LINES[@]}" |
| 553 | set -u | ||
| 531 | TOTAL=$((TOTAL_READY + TOTAL_RESYNC + TOTAL_REVIEW)) | 554 | TOTAL=$((TOTAL_READY + TOTAL_RESYNC + TOTAL_REVIEW)) |
| 532 | 555 | ||
| 533 | # Calculate percentages | 556 | # Calculate percentages |