diff --git a/docs/plans/2026-05-29-039-feat-complete-validation-resume-plan.md b/docs/plans/2026-05-29-039-feat-complete-validation-resume-plan.md new file mode 100644 index 00000000..59a02d6f --- /dev/null +++ b/docs/plans/2026-05-29-039-feat-complete-validation-resume-plan.md @@ -0,0 +1,28 @@ +--- +title: feat: Complete interrupted full-target validation +type: feat +status: complete +date: 2026-05-30 +origin: /lfg — 2026-05-30 validation stalled on KotOR_discord_msgs; finish remaining targets +--- + +# feat: Complete interrupted full-target validation + +## Summary + +The 2026-05-30 `full-validation-latest.log` run completed 4/9 targets then stalled during `KotOR_discord_msgs` scrape. Resume validation per remaining target, fix misleading per-target log labels, and finalize merge-readiness table. + +## Requirements + +| ID | Requirement | +|----|-------------| +| R1 | Run `run-operator-validation.sh --target NAME` for each incomplete enabled target; append to `logs/validation-resume-20260530.log` | +| R2 | `docs/recurring-scrape-merge-readiness.md` table shows final pass/fail per target | +| R3 | `run-operator-validation.sh` logs `Per-target begin` / `Per-target done` instead of premature `Per-target pass` | +| R4 | `DCE_MIN_FREE_MB=0 ./scripts/run-all-smokes.sh` passes | +| R5 | PR #1538 updated | + +## Verification + +- `grep 'Operator validation finished' logs/validation-resume-20260530.log` (per target) +- 19 offline smokes diff --git a/docs/recurring-scrape-merge-readiness.md b/docs/recurring-scrape-merge-readiness.md index 2ab844c2..32b205ac 100644 --- a/docs/recurring-scrape-merge-readiness.md +++ b/docs/recurring-scrape-merge-readiness.md @@ -99,23 +99,23 @@ DCE_MIN_FREE_MB=0 ./scripts/run-operator-validation.sh --sync-gui --per-target - --log-file logs/full-validation-latest.log ``` -**2026-05-30 run** (log `logs/full-validation-latest.log`, started `01:35:29Z`): +**Combined 2026-05-30 validation** (`logs/full-validation-latest.log` + `logs/validation-resume-20260530.log`): | Target | Scrape | Audit | Notes | |--------|--------|-------|-------| -| ror_orig_discord | pass | pass | | -| ror_new_discord | pass | pass | | -| openkotor_discord_msgs | pass | pass | | +| ror_orig_discord | pass | pass | full-validation run | +| ror_new_discord | pass | pass | full-validation run | +| openkotor_discord_msgs | pass | pass | full-validation run | | KotOR_Speedrun_Discord | pass | pass | 7 channels skipped (forbidden) | -| KotOR_discord_msgs | in progress / long-running | — | 27 channels; allow time on first full scrape | -| holocron_toolset_discord | pending | — | | -| expanded_kotor_discord | pending | — | | -| eod_discord | pending | — | | -| DS_Discord_msgs | pending | — | | +| holocron_toolset_discord | pass | pass | validation-resume | +| expanded_kotor_discord | pass | pass | validation-resume | +| eod_discord | pass | pass | validation-resume | +| DS_Discord_msgs | pass | pass | validation-resume; some channels forbidden | +| KotOR_discord_msgs | **fail** | — | channel `221726893064454144` (`yes_general`) failed mid-export (~11%); see log | -Re-check completion: `grep 'Per-target summary\\|Operator validation finished' logs/full-validation-latest.log` +**KotOR remediation:** ensure several GiB free on `/home`, run `./scripts/audit-archive-json.sh --target KotOR_discord_msgs`, salvage truncated JSON if needed, then `./scripts/run-operator-validation.sh --target KotOR_discord_msgs`. -**Disk:** ~25 GiB free on `/home` at 2026-05-30; still allow headroom for KotOR `yes_general`-scale merges. +**Disk:** ~22 GiB free on `/home` (2026-05-30); large channel merges still need headroom. ## CI note (fork PRs) diff --git a/scripts/run-operator-validation.sh b/scripts/run-operator-validation.sh index 6b8aec42..7bbca85c 100755 --- a/scripts/run-operator-validation.sh +++ b/scripts/run-operator-validation.sh @@ -94,8 +94,9 @@ scrape_per_target() { mapfile -t target_names < <(enabled_targets) for name in "${target_names[@]}"; do [[ -n "$name" ]] || continue - log_step "Per-target pass: $name" + log_step "Per-target begin: $name" if ! run_step "run-documents-scrape ($name)" "$DOCUMENTS_SCRAPE" "${scrape_args[@]}" --target "$name"; then + log_step "Per-target failed: $name (scrape)" failures=$((failures + 1)) if (( CONTINUE_ON_ERROR == 0 )); then return 1 @@ -103,12 +104,15 @@ scrape_per_target() { continue fi if (( DRY_RUN )); then + log_step "Per-target done: $name (dry-run)" ok=$((ok + 1)) continue fi if run_step "audit-archive-json ($name)" "$AUDIT_JSON" --config "$CONFIG_PATH" --target "$name"; then + log_step "Per-target done: $name (ok)" ok=$((ok + 1)) else + log_step "Per-target failed: $name (audit)" failures=$((failures + 1)) if (( CONTINUE_ON_ERROR == 0 )); then return 1