{
  "$schema": "./schema/pact-manifest.schema.json",
  "schemaVersion": "1.0",
  "name": "PACT",
  "kind": "transactional-webmcp",
  "status": "experimental",
  "webmcp": {
    "hostPreference": ["document.modelContext"],
    "transport": "in-page",
    "toolsOnly": true,
    "requiresSecureContext": true,
    "annotations": ["readOnlyHint", "untrustedContentHint"],
    "executeCallback": "single-input",
    "registrationAbortSignal": true,
    "executionAbortSignal": false
  },
  "http": {
    "connectorModule": "./http.bundle.js",
    "handlerModule": "./sdk/http-handler.js",
    "endpoint": "/api/pact",
    "method": "POST",
    "requestEnvelope": { "operation": "string", "payload": "object" },
    "operations": ["inspect", "preview", "approve", "commit", "verify", "receipt"],
    "idempotencyHeader": "Idempotency-Key",
    "idempotencyRequiredFor": ["commit"]
  },
  "adapterContract": {
    "module": "./adapter.bundle.js",
    "schema": "./schema/pact-adapter.schema.json",
    "requiredMethods": ["describe", "plan", "verify"],
    "planModel": "declarative-effects-and-invariants",
    "maxEffects": 256,
    "maxInvariants": 256
  },
  "runtime": {
    "module": "./sdk/runtime.js",
    "serverModule": "./sdk/server-runtime.js",
    "adapterDriven": true,
    "approvalVerifierRequired": true,
    "stateModel": "optimistic-versioned",
    "receiptBindsApprovalClaims": true,
    "customCanonicalBridge": true
  },
  "authority": {
    "module": "./sdk/authority.js",
    "apiModule": "./sdk/api-authority.js",
    "storeModule": "./sdk/redis-store.js",
    "canonicalStoreModule": "./sdk/canonical-store.js",
    "approvalVerifierModule": "./sdk/server-approval.js",
    "atomicStoreRequired": true,
    "singleUseCommitCapability": true,
    "capabilityBinding": ["txId", "planHash", "baseVersion", "humanPrincipal", "agentSession"],
    "idempotentReplay": "same-key-only",
    "productionStoreRequirement": "durable atomic create and compare-and-swap",
    "productionStore": "Redis-compatible HTTPS REST with atomic SET NX and Lua CAS"
  },
  "durability": {
    "module": "./sdk/durable-state.js",
    "recordModel": "single-versioned-state-plus-journal",
    "atomicity": "compare-and-swap",
    "persistentReplayRecords": true,
    "crashRecovery": "reload-and-validate-journal",
    "concurrency": "single-winner-optimistic-transition",
    "canonicalReplaySnapshots": true
  },
  "integrations": {
    "restResourceModule": "./sdk/rest-resource.js",
    "canonicalBridgeFactory": "createPactRestResourceBridge",
    "adapterFactory": "createPactJsonResourceAdapter",
    "providerRevision": "etag",
    "conditionalWriteHeader": "If-Match",
    "idempotencyHeader": "Idempotency-Key",
    "lostResponseRecovery": true,
    "credentialsBoundary": "server-side"
  },
  "agentBridges": {
    "module": "./sdk/agent-bridge.js",
    "surfaces": ["http", "webmcp", "mcp"],
    "canonicalOperations": ["inspect", "preview", "approve", "commit", "verify", "receipt"],
    "webmcpHost": "document.modelContext",
    "webmcpExecuteCallback": "single-input",
    "webmcpRegistrationAbortSignal": true,
    "webmcpExecutionAbortSignal": false,
    "webmcpUntrustedContentDefault": true,
    "mcpTransportOwnedByHost": true
  },
  "provenance": {
    "endpoint": "/release-provenance.json",
    "integrityManifest": "/release-manifest.json",
    "sourceRepository": "https://github.com/dharan1007/pact"
  },
  "releaseIntegrity": {
    "lockModule": "./sdk/release-lock.js",
    "lockSchema": "./schema/pact-lock.schema.json",
    "diffModule": "./sdk/release-diff.js",
    "registryModule": "./sdk/release-registry.js",
    "driftModule": "./sdk/release-drift.js",
    "gateModule": "./sdk/release-gate.js",
    "attributionModule": "./sdk/release-attribution.js",
    "discoverModule": "./sdk/release-discover.js",
    "corpusModule": "./sdk/trace-corpus.js",
    "replayModule": "./sdk/replay.js",
    "bisectModule": "./sdk/release-bisect.js",
    "canaryModule": "./sdk/release-canary.js",
    "effectsModule": "./sdk/release-effects.js",
    "recoveryModule": "./sdk/release-recovery.js",
    "graphModule": "./sdk/fleet-graph.js",
    "cli": "scripts/pact-release.mjs",
    "identityModel": "content-hash-lockfile",
    "decisions": ["ALLOW", "WARN", "BLOCK"]
  },
  "referenceRuntime": {
    "module": "./engine.bundle.js",
    "scope": "reference-domain-only",
    "warning": "The reference engine remains for the guided Helios scenario. Real integrations should use ./sdk/api-authority.js through ./sdk/server-runtime.js with a validated adapter and canonical bridge such as ./sdk/rest-resource.js, an application-controlled authenticated approval verifier, and durable atomic storage."
  },
  "security": {
    "humanApproval": "application-supplied verifier must authenticate approval and return humanPrincipal plus agentSession claims",
    "referenceApprovalVerifier": "HMAC-SHA256 verifier binds transaction, plan, base version, adapter, principal/session claims, nonce and short expiry",
    "planBinding": "sha256",
    "stateBinding": "canonical version plus provider ETag when using the REST resource bridge",
    "authority": "opaque short-lived single-use capability bound to transaction, plan, base version and verified identity claims",
    "providerCredentials": "server-side only; never expose provider secrets to browser WebMCP tools",
    "verification": "postconditions plus invariants plus adapter verification against canonical provider state",
    "receipt": "hash binds adapter, plan, versions, effects, invariants and approval claims"
  },
  "documentation": {
    "developers": "/developers/",
    "security": "/security/",
    "protocol": "/how-it-works/",
    "playground": "/workspace/",
    "realRestProvider": "/docs/rest-provider.md"
  }
}
