RC5_113_LINUX_STATIC_VALIDATION_V0_2
run_utc=2026-06-11T13:37:18Z
source=/Users/franciscotorres/GAL2_RC5_PRODUCT_SOURCE_FROM_RC31_20260610T185133Z/linux_rc5_package_work/GAL2_TimeContract_RC5_1_1_3_LINUX_INSTALLER_FRIENDLY_20260611/src/gal2d.py

SOURCE_HASH
88e905b024ae4649ee45e668f0fe90f4d182ce848cb57cc9a3e34fad4e8bf07e  /Users/franciscotorres/GAL2_RC5_PRODUCT_SOURCE_FROM_RC31_20260610T185133Z/linux_rc5_package_work/GAL2_TimeContract_RC5_1_1_3_LINUX_INSTALLER_FRIENDLY_20260611/src/gal2d.py

VALID_UNTIL_CONTEXT_LINES_748_786
   748	        valid_for = max(0.0, min(CONTRACT_LIVE_VALID_SEC, remaining_hard))
   749	    elif contract_mode == "REJOIN":
   750	        safe = True
   751	        health = "yellow"
   752	        if guard_active:
   753	            reason = "guarded_recovery_after_stale_holdover"
   754	        else:
   755	            reason = "controlled_rejoin_slew_active" if remaining_slew > 0 else "controlled_rejoin_stable"
   756	        valid_for = CONTRACT_LIVE_VALID_SEC
   757	    else:
   758	        safe = False
   759	        health = "red"
   760	        reason = "state_degraded"
   761	        valid_for = 0.0
   762	
   763	    local_serve_epoch = parse_iso_epoch(local_serve_time)
   764	    last_good_sync_epoch = parse_iso_epoch(_state["last_ok"]) if _state.get("last_ok") else None
   765	    valid_until_basis = "local_serve_time_plus_valid_for"
   766	
   767	    if valid_for <= 0.0:
   768	        valid_until = iso_from_epoch(local_serve_epoch)
   769	        valid_until_basis = "local_serve_time_zero_validity"
   770	    elif contract_mode == "LIVE" and last_good_sync_epoch is not None:
   771	        valid_until = iso_from_epoch(last_good_sync_epoch + CONTRACT_LIVE_VALID_SEC)
   772	        valid_until_basis = "last_good_sync_plus_contract_live_valid_sec"
   773	    elif contract_mode == "REJOIN" and last_good_sync_epoch is not None:
   774	        valid_until = iso_from_epoch(min(local_serve_epoch + valid_for, last_good_sync_epoch + CONTRACT_LIVE_VALID_SEC))
   775	        valid_until_basis = "min_local_serve_window_and_last_good_sync_live_valid_sec"
   776	    elif contract_mode in ("HOLDOVER", "DEGRADED") and last_good_sync_epoch is not None:
   777	        valid_until = iso_from_epoch(min(local_serve_epoch + valid_for, last_good_sync_epoch + CONTRACT_HOLDOVER_HARD_SEC))
   778	        valid_until_basis = "local_serve_window_bounded_by_holdover_hard_limit"
   779	    else:
   780	        valid_until = iso_from_epoch(local_serve_epoch + valid_for)
   781	
   782	    latency_component = float(api_latency_ms or 0.0)
   783	    age_component = float(age or 0.0)
   784	    holdover_age_sec = None if age is None or contract_mode == "LIVE" else round(float(age), 3)
   785	    max_holdover_sec = float(CONTRACT_HOLDOVER_HARD_SEC)
   786	    uncertainty_growth_rate_ms_per_hour = float(RC5_UNCERTAINTY_GROWTH_RATE_MS_PER_HOUR)

REQUIRED_MARKERS
38:DAEMON_VERSION = os.getenv("GAL2_DAEMON_VERSION", "1.1.3-rc5-ixoye-witness-validity-deadband-observability-fix")
39:CONTRACT_VERSION = os.getenv("GAL2_CONTRACT_VERSION", "1.1.3-contract-rc5-ixoye-witness-validity-deadband-observability-fix")
31:MIN_SLEW_DELTA_SEC = float(os.getenv("GAL2_MIN_SLEW_DELTA_SEC", "0.25"))  # ignore normal network/API jitter below this threshold
810:        "monotonic_sequence_semantics": "per_contract_serve",
772:        valid_until_basis = "last_good_sync_plus_contract_live_valid_sec"
775:        valid_until_basis = "min_local_serve_window_and_last_good_sync_live_valid_sec"
464:        _state["last_slew_threshold_ms"] = round(float(MIN_SLEW_DELTA_SEC) * 1000.0, 3)
480:                threshold_applied_ms=_state.get("last_slew_threshold_ms"),
496:                threshold_applied_ms=_state.get("last_slew_threshold_ms"),
823:        "slew_threshold_ms": _state.get("last_slew_threshold_ms") if _state.get("last_slew_threshold_ms") is not None else round(float(MIN_SLEW_DELTA_SEC) * 1000.0, 3),

NOTE
valid_until final ISO conversion may use local_serve_epoch + valid_for, but valid_for is policy/basis bounded in 1.1.3; this is not the old laundering bug by itself.

OLD_RUNTIME_STRING_CHECK
old_runtime_strings=PASS

RC5_113_LINUX_STATIC_VALIDATION_V0_2=PASS
