Schemas, examples and a flag registry for the twelve HUX cards, a dependency-free validator, the governance rules (memory ledger, autonomy matrix, friendly modes mapped to real Switchyard routes, privacy defaults, suggestion gating, release state machine) and the contract doc UI work codes against. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RNPhwu2bsaRNg3DETSAZoM
131 lines
5.7 KiB
JSON
131 lines
5.7 KiB
JSON
{
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
"$id": "https://hermes.bstein.dev/contracts/hux/v1/permission.schema.json",
|
|
"title": "HUX autonomy, grants, approvals, cancellation",
|
|
"description": "Policy engine records (HUX-05). A policy fixes the autonomy level and explicit capability grants for a scope; approvals are queued items answered with the existing gateway choices (once|session|always|deny); a cancellation receipt proves what a stop actually did.",
|
|
"$defs": {
|
|
"capability": {
|
|
"type": "string",
|
|
"enum": ["read_files", "write_files", "shell", "network", "web_search", "send_message", "memory_write", "artifact_write", "spend_tokens", "delegate", "deploy"]
|
|
},
|
|
"decision": {"type": "string", "enum": ["allow", "ask", "deny"]},
|
|
"policy": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["schema", "id", "owner", "scope", "autonomy", "grants", "budgets", "provenance", "updated_at"],
|
|
"properties": {
|
|
"schema": {"const": "hux.policy.v1"},
|
|
"id": {"$ref": "common.schema.json#/$defs/id"},
|
|
"owner": {"$ref": "common.schema.json#/$defs/user_ref"},
|
|
"scope": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["level"],
|
|
"properties": {
|
|
"level": {"type": "string", "enum": ["global", "project", "conversation"]},
|
|
"scope_id": {"$ref": "common.schema.json#/$defs/id"}
|
|
}
|
|
},
|
|
"autonomy": {"type": "string", "enum": ["ask_first", "safe", "autonomous"]},
|
|
"grants": {
|
|
"type": "array",
|
|
"maxItems": 64,
|
|
"items": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["capability", "decision"],
|
|
"properties": {
|
|
"capability": {"$ref": "#/$defs/capability"},
|
|
"decision": {"$ref": "#/$defs/decision"},
|
|
"expires_at": {"$ref": "common.schema.json#/$defs/timestamp"},
|
|
"granted_by": {"$ref": "common.schema.json#/$defs/actor"}
|
|
}
|
|
}
|
|
},
|
|
"budgets": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"tokens_per_run": {"type": "integer", "minimum": 0},
|
|
"tool_calls_per_run": {"type": "integer", "minimum": 0},
|
|
"wall_clock_seconds": {"type": "integer", "minimum": 0},
|
|
"delegations_per_run": {"type": "integer", "minimum": 0}
|
|
}
|
|
},
|
|
"provenance": {"$ref": "common.schema.json#/$defs/provenance"},
|
|
"updated_at": {"$ref": "common.schema.json#/$defs/timestamp"}
|
|
}
|
|
},
|
|
"approval": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["schema", "id", "run_id", "conversation_id", "capability", "request", "status", "requested_at", "expires_at"],
|
|
"properties": {
|
|
"schema": {"const": "hux.approval.v1"},
|
|
"id": {"$ref": "common.schema.json#/$defs/id"},
|
|
"run_id": {"type": "string", "minLength": 1, "maxLength": 120},
|
|
"conversation_id": {"$ref": "common.schema.json#/$defs/id"},
|
|
"capability": {"$ref": "#/$defs/capability"},
|
|
"request": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["summary", "risk"],
|
|
"properties": {
|
|
"summary": {"type": "string", "minLength": 1, "maxLength": 280},
|
|
"detail": {"type": "string", "maxLength": 4000},
|
|
"risk": {"type": "string", "enum": ["low", "medium", "high"]},
|
|
"evidence": {"type": "array", "maxItems": 16, "items": {"$ref": "common.schema.json#/$defs/evidence_ref"}}
|
|
}
|
|
},
|
|
"status": {"type": "string", "enum": ["pending", "approved", "denied", "expired", "cancelled"]},
|
|
"decision": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["choice", "by", "at"],
|
|
"properties": {
|
|
"choice": {"type": "string", "enum": ["once", "session", "always", "deny"]},
|
|
"by": {"$ref": "common.schema.json#/$defs/actor"},
|
|
"at": {"$ref": "common.schema.json#/$defs/timestamp"}
|
|
}
|
|
},
|
|
"requested_at": {"$ref": "common.schema.json#/$defs/timestamp"},
|
|
"expires_at": {"$ref": "common.schema.json#/$defs/timestamp"}
|
|
}
|
|
},
|
|
"cancellation_receipt": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["schema", "id", "run_id", "requested_by", "requested_at", "outcome", "side_effects"],
|
|
"properties": {
|
|
"schema": {"const": "hux.cancel_receipt.v1"},
|
|
"id": {"$ref": "common.schema.json#/$defs/id"},
|
|
"run_id": {"type": "string", "minLength": 1, "maxLength": 120},
|
|
"requested_by": {"$ref": "common.schema.json#/$defs/actor"},
|
|
"requested_at": {"$ref": "common.schema.json#/$defs/timestamp"},
|
|
"acknowledged_at": {"$ref": "common.schema.json#/$defs/timestamp"},
|
|
"completed_at": {"$ref": "common.schema.json#/$defs/timestamp"},
|
|
"outcome": {"type": "string", "enum": ["cancelled", "already_complete", "failed_to_cancel"]},
|
|
"side_effects": {
|
|
"type": "array",
|
|
"maxItems": 64,
|
|
"items": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["description", "reverted"],
|
|
"properties": {
|
|
"description": {"type": "string", "minLength": 1, "maxLength": 280},
|
|
"reverted": {"type": "boolean"},
|
|
"evidence": {"$ref": "common.schema.json#/$defs/evidence_ref"}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"oneOf": [
|
|
{"$ref": "#/$defs/policy"},
|
|
{"$ref": "#/$defs/approval"},
|
|
{"$ref": "#/$defs/cancellation_receipt"}
|
|
]
|
|
}
|