reconciliation_jobs.v1.json (2769B)
1 { 2 "schema": "radroots.rhi.reconciliation-jobs", 3 "schema_version": 1, 4 "contract_version": 1, 5 "state_schema_version": 5, 6 "backing_table": "reconciliation_jobs", 7 "job_identity": { 8 "algorithm": "sha256", 9 "domain": "radroots.rhi.reconciliation_job.v1\\0", 10 "preimage": ["trade_id_16_bytes", "input_generation_u64_be", "evidence_policy_sha256_32_bytes"] 11 }, 12 "active_job_bound": { 13 "absolute_maximum": 65536, 14 "configured_field": "reconciliation.queue_capacity", 15 "one_active_per_trade": true 16 }, 17 "states": ["ready", "leased", "exhausted", "superseded", "completed"], 18 "claim": { 19 "ordering": ["eligible_at_unix_ms", "created_at_unix_ms", "job_id"], 20 "compare_and_swap": ["job_id", "revision", "state", "eligibility"], 21 "attempt_count_increment": "exactly_once_per_successful_claim_or_reclaim", 22 "source_io_inside_transaction": false 23 }, 24 "lease": { 25 "owner_bytes": 16, 26 "duration_ms": { "minimum": 1000, "maximum": 300000 }, 27 "renewal_ms": { "minimum": 100, "maximum": 150000 }, 28 "renewal_requires_unexpired_current_revision": true, 29 "expired_claims_are_reclaimable": true, 30 "expired_final_attempt_becomes_exhausted": true 31 }, 32 "retry": { 33 "max_attempts": { "minimum": 1, "maximum": 100 }, 34 "initial_backoff_ms": { "minimum": 1, "maximum": 60000 }, 35 "maximum_backoff_ms": { "minimum": 1, "maximum": 3600000 }, 36 "strategy": "caller_injected_full_jitter_with_governed_exponential_upper_bound", 37 "next_attempt_persisted_as": "integer_unix_milliseconds" 38 }, 39 "durability": { 40 "schedule_is_idempotent_for_exact_job_identity": true, 41 "newer_dirty_generation_supersedes_prior_active_job_atomically": true, 42 "jobs_are_not_deleted": true, 43 "restart_recovers_persisted_schedule_and_lease_expiry": true 44 }, 45 "state_shape_guard": { 46 "introduced_schema_version": 8, 47 "historical_scan": "forward_only_fail_closed", 48 "invalid_rows_repaired_or_deleted": false, 49 "insert_trigger": "reconciliation_jobs_shape_guard_insert", 50 "update_trigger": "reconciliation_jobs_shape_guard_update", 51 "ready_requires_nonnull_next_attempt": true, 52 "leased_requires_nonnull_owner_and_expiry": true, 53 "terminal_requires_null_schedule_and_lease": true 54 }, 55 "injected_authority": ["wall_time_unix_ms", "lease_owner", "retry_jitter_ms"], 56 "forbidden": [ 57 "ambient_clock", 58 "ambient_entropy", 59 "network_io", 60 "source_query_inside_transaction", 61 "unbounded_queue", 62 "raw_sqlite_handle", 63 "caller_selected_job_id", 64 "caller_selected_next_attempt_timestamp", 65 "delete_job" 66 ], 67 "deferred": [ 68 "per_source_attempt_inventory", 69 "source_execution", 70 "source_completion_commit", 71 "manifest", 72 "reducer", 73 "attestation", 74 "publication" 75 ] 76 }