Wait within decision validity bounds and preserve failed preflight evidence
All checks were successful
CI Smoke / host-smoke (push) Successful in 1s
CI Smoke / container-smoke (push) Successful in 3s

Assistant: codex
Assistant-Model: gpt-6-astra
Assistant-Session: 01a09cbb-87c6-7900-a145-4ce53ba9f1a6
This commit is contained in:
tegwick 2026-09-14 03:46:28 +02:00
parent 1c9fd5279c
commit 5aaa49a2ec
7 changed files with 647 additions and 1 deletions

View file

@ -10,6 +10,7 @@ import copy
import hashlib
import json
import re
import time
import uuid
from dataclasses import dataclass
from datetime import datetime, timezone
@ -399,3 +400,24 @@ def validate_decision_envelope(
request_digest=evaluated,
submitted_request_digest=submitted,
)
def wait_for_decision_start(envelope: object, *, clock=None, sleeper=None) -> None:
"""Wait at most two seconds for an owner's future start, never waive it.
Full decision/claim validation still runs afterward against the real clock.
Longer skew refuses rather than holding an approval claim until it is stale.
"""
current_time = clock or (lambda: datetime.now(timezone.utc))
sleep = sleeper or time.sleep
if not isinstance(envelope, dict):
return
lifetime = _required_dict(envelope, "lifetime")
if lifetime.get("not_before") is None:
return
start = _parse_time(lifetime["not_before"], "not_before")
delay = (start - current_time()).total_seconds()
if delay > 2:
raise DecisionError("flex-auth decision start exceeds bounded wait")
if delay > 0:
sleep(delay)