{
  "interface": "railiance.synthetic-load-driver",
  "version": 1,
  "workplan_id": "RAILIANCE-WP-0024",
  "task_id": "RAILIANCE-WP-0024-T02",
  "contract_id": "RAILIANCE-WP-0024-T02-SYNTHETIC-01",
  "owner": "audit-core",
  "invocation": [
    "<driver>",
    "<phase>",
    "--contract-id",
    "RAILIANCE-WP-0024-T02-SYNTHETIC-01"
  ],
  "stdout": "Exactly one JSON object containing exactly the keys declared for the phase.",
  "stderr": "Must not contain a bearer, payload, response body, database credential, Secret data or OpenBao output.",
  "phases": {
    "baseline": {
      "keys": [
        "contract_id",
        "fixture_id",
        "status",
        "secret_values_observed"
      ],
      "status": [
        "ready"
      ]
    },
    "expect-unavailable": {
      "keys": [
        "contract_id",
        "fixture_id",
        "status",
        "http_status",
        "attempts",
        "secret_values_observed"
      ],
      "status": [
        "retryable_unavailable"
      ],
      "http_status": [
        503
      ],
      "minimum_attempts": 1
    },
    "expect-recovered": {
      "keys": [
        "contract_id",
        "fixture_id",
        "status",
        "http_status",
        "attempts",
        "secret_values_observed"
      ],
      "status": [
        "accepted",
        "duplicate"
      ],
      "http_status": [
        200,
        202
      ],
      "minimum_attempts": 1
    },
    "cleanup": {
      "keys": [
        "contract_id",
        "fixture_id",
        "status",
        "secret_values_observed"
      ],
      "status": [
        "clean"
      ]
    }
  },
  "invariants": [
    "contract_id equals the requested contract on every phase",
    "fixture_id is identical across every phase",
    "secret_values_observed is false on every phase",
    "only a separately approved synthetic sender and tenant are used",
    "the bearer is read only from an approved mounted file and never reaches the parent shell",
    "expect-unavailable treats HTTP 503 as retryable evidence and never retries 400, 401, 403 or 409",
    "cleanup stops and removes driver-owned ephemeral runtime; an accepted immutable audit fixture is retained under the audit evidence contract",
    "temporary sender identity cleanup remains an attended railiance-platform custody action"
  ],
  "candidate_receipt": {
    "source_repo": "audit-core",
    "required_fields": [
      "source_revision",
      "source_path",
      "driver_revision",
      "reviewer",
      "created_at"
    ],
    "registration_executes_driver": false
  }
}
