rhi

Coordinated trade for connected markets
git clone https://radroots.dev/git/rhi.git
Log | Files | Refs | README | LICENSE

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 }