Retry interrupted hook projections

This commit is contained in:
Nick Sweeting 2026-06-24 16:05:34 -07:00
parent 6e82c55371
commit a5eefee17d
No known key found for this signature in database
2 changed files with 12 additions and 3 deletions

View File

@ -4,6 +4,7 @@ import asyncio
import inspect
import json
import os
import signal
import sys
import time
from collections import defaultdict
@ -240,6 +241,14 @@ def _should_update_snapshot_title(current_title: str, next_title: str, *, snapsh
def _status_for_process_without_archive_result(event: ProcessCompletedEvent) -> str:
if event.exit_code == PROCESS_EXIT_SKIPPED:
return "skipped"
if event.exit_code in {128 + signal.SIGHUP, 128 + signal.SIGINT, 128 + signal.SIGTERM}:
# This fallback only runs when a snapshot hook exited before emitting a
# structured ArchiveResult. A polite shutdown signal means the runner
# was interrupted during ownership transfer, not that the extractor
# produced a durable negative result. Keep the hook queued so the next
# runner can retry the exact work item instead of sealing in a transient
# process-lifecycle failure.
return "queued"
if event.exit_code != 0:
return "failed"
return "noresults"

View File

@ -79,9 +79,9 @@ dependencies = [
### Extractor dependencies (optional binaries detected at runtime via shutil.which)
### Binary/Package Management
"abxbus==2.5.10", # EventBus API
"abxpkg>=1.11.236", # for: detecting, versioning, and installing binaries via apt/brew/pip/npm
"abx-plugins>=1.11.245", # shared ArchiveBox plugin package with Chrome/Puppeteer dependency wiring
"abx-dl>=1.11.232", # shared ArchiveBox downloader package with blocking install preflight
"abxpkg>=1.11.239", # for: detecting, versioning, and installing binaries via apt/brew/pip/npm
"abx-plugins>=1.11.248", # shared ArchiveBox plugin package with Chrome/Puppeteer dependency wiring
"abx-dl>=1.11.235", # shared ArchiveBox downloader package with blocking install preflight
### UUID7 backport for Python <3.14
"uuid7>=0.1.0; python_version < '3.14'", # provides the uuid_extensions module on Python 3.13
]