{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://www.krafthaus.app/solana/packet-schema.json",
  "title": "Krafthaus Solana Execution Gate Packet",
  "description": "Machine-readable decision packet emitted before a Solana-facing action is executed.",
  "type": "object",
  "required": [
    "packet_version",
    "project",
    "chain_context",
    "decision_request",
    "policy_checks",
    "decide_runtime",
    "krafthaus_operator_output",
    "generated_at",
    "packet_hash_scope",
    "packet_hash_sha256",
    "solana_anchor"
  ],
  "properties": {
    "packet_version": {
      "const": "frontier_solana_gate_v1"
    },
    "project": {
      "type": "string"
    },
    "chain_context": {
      "type": "object",
      "required": ["chain", "cluster", "anchor_program", "memo_program_id"],
      "properties": {
        "chain": {
          "const": "solana"
        },
        "cluster": {
          "enum": ["devnet", "testnet", "mainnet-beta"]
        },
        "anchor_program": {
          "const": "spl_memo"
        },
        "memo_program_id": {
          "type": "string",
          "minLength": 32
        }
      },
      "additionalProperties": false
    },
    "decision_request": {
      "type": "object",
      "required": ["owner", "action", "value", "requested_execution"],
      "properties": {
        "owner": {
          "type": "string",
          "minLength": 1
        },
        "action": {
          "type": "string",
          "minLength": 1
        },
        "value": {
          "type": "string",
          "pattern": "^[0-9]+ SOL$"
        },
        "requested_execution": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "policy_checks": {
      "type": "object",
      "required": [
        "quorum_signed",
        "budget_within_policy",
        "recipient_verified",
        "evidence_quality",
        "execution_risk"
      ],
      "properties": {
        "quorum_signed": {
          "type": "boolean"
        },
        "budget_within_policy": {
          "type": "boolean"
        },
        "recipient_verified": {
          "type": "boolean"
        },
        "evidence_quality": {
          "enum": ["thin", "usable", "strong"]
        },
        "execution_risk": {
          "enum": ["low", "medium", "high"]
        }
      },
      "additionalProperties": false
    },
    "decide_runtime": {
      "type": "object",
      "required": [
        "verdict",
        "normalized_verdict",
        "action",
        "reason_code",
        "matched_rule_id",
        "confidence_pct",
        "decision_score",
        "decision_edge_points",
        "reasons",
        "decision_id",
        "request_id",
        "record_hash",
        "receipt_hash",
        "verify_url",
        "replay_url",
        "evaluator_version",
        "rulebook",
        "rulebook_registry",
        "trusted_adapter"
      ],
      "properties": {
        "verdict": {
          "enum": ["APPROVE", "DEFER", "BLOCK"]
        },
        "normalized_verdict": {
          "enum": ["yes", "no", "review"]
        },
        "action": {
          "type": "string",
          "minLength": 1
        },
        "reason_code": {
          "type": "string",
          "minLength": 1
        },
        "matched_rule_id": {
          "type": ["string", "null"]
        },
        "confidence_pct": {
          "type": "integer",
          "minimum": 0,
          "maximum": 100
        },
        "decision_score": {
          "type": "integer",
          "minimum": 0,
          "maximum": 100
        },
        "decision_edge_points": {
          "type": "integer"
        },
        "reasons": {
          "type": "array",
          "minItems": 1,
          "items": {
            "type": "string"
          }
        },
        "decision_id": {
          "type": "string",
          "minLength": 1
        },
        "request_id": {
          "type": "string",
          "minLength": 1
        },
        "record_hash": {
          "type": "string",
          "minLength": 1
        },
        "receipt_hash": {
          "type": "string",
          "minLength": 1
        },
        "verify_url": {
          "type": "string",
          "minLength": 1
        },
        "replay_url": {
          "type": "string",
          "minLength": 1
        },
        "evaluator_version": {
          "type": "string",
          "minLength": 1
        },
        "rulebook": {
          "type": "object",
          "required": ["schema_version", "id", "version", "hash"],
          "properties": {
            "schema_version": {
              "const": "rulebook_v1"
            },
            "id": {
              "type": "string",
              "minLength": 1
            },
            "version": {
              "type": "string",
              "minLength": 1
            },
            "hash": {
              "type": "string",
              "minLength": 1
            }
          },
          "additionalProperties": false
        },
        "rulebook_registry": {
          "type": ["object", "null"]
        },
        "trusted_adapter": {
          "type": "object",
          "required": [
            "manifest_version",
            "adapter_id",
            "version",
            "implementation_revision",
            "implementation_hash",
            "manifest_hash",
            "input_hash",
            "output_hash",
            "execution_isolation",
            "capability_enforcement",
            "execution_timeout_ms"
          ],
          "properties": {
            "manifest_version": {
              "const": "trusted_adapter_manifest_v1"
            },
            "adapter_id": {
              "type": "string",
              "minLength": 1
            },
            "version": {
              "type": "string",
              "minLength": 1
            },
            "implementation_revision": {
              "type": "string",
              "minLength": 1
            },
            "implementation_hash": {
              "type": "string",
              "pattern": "^[a-f0-9]{64}$"
            },
            "manifest_hash": {
              "type": "string",
              "pattern": "^[a-f0-9]{64}$"
            },
            "input_hash": {
              "type": "string",
              "pattern": "^[a-f0-9]{64}$"
            },
            "output_hash": {
              "type": "string",
              "pattern": "^[a-f0-9]{64}$"
            },
            "execution_isolation": {
              "const": "worker_thread_one_shot_v1"
            },
            "capability_enforcement": {
              "const": "ambient_capability_deny_v2"
            },
            "execution_timeout_ms": {
              "const": 1000
            }
          },
          "additionalProperties": false
        }
      },
      "additionalProperties": false
    },
    "krafthaus_operator_output": {
      "type": "object",
      "required": ["memo_type", "operator_call", "rollback_trigger"],
      "properties": {
        "memo_type": {
          "const": "execution_gate"
        },
        "operator_call": {
          "type": "string"
        },
        "rollback_trigger": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "generated_at": {
      "type": "string",
      "format": "date-time"
    },
    "packet_hash_scope": {
      "const": "execution_input_outcome_v1"
    },
    "packet_hash_sha256": {
      "type": "string",
      "pattern": "^[a-f0-9]{64}$"
    },
    "solana_anchor": {
      "type": "object",
      "required": ["cluster", "memo", "explorer_url_template"],
      "properties": {
        "cluster": {
          "enum": ["devnet", "testnet", "mainnet-beta"]
        },
        "memo": {
          "type": "string",
          "minLength": 1
        },
        "explorer_url_template": {
          "type": "string",
          "format": "uri-template"
        }
      },
      "additionalProperties": false
    }
  },
  "additionalProperties": false
}
