{
  "artifact": "benchmark_summary",
  "schema_version": 1,
  "generated_at": "2026-04-18T15:43:50.483Z",
  "commit": "979d6228bbfecdc64e445f952c912f6a50c8ebc5",
  "environment": {
    "cpu": "Apple M4 Pro",
    "memory": "24 GB",
    "os": "Darwin 25.4.0",
    "arch": "arm64",
    "node": "v22.22.1"
  },
  "notes": [
    "All runs performed on a single developer machine (Apple M4 Pro, macOS 26.4.1).",
    "Local-loopback HTTP; no network round-trip to Cloud Run.",
    "Kernel FSM: trigguard-system/trigguard-kernel, trigguard.sdk.gate.check() in-process.",
    "Decision core HTTP: TrigGuard/remote-eval-core (Swift), POST /decide.",
    "Pipeline: TrigGuard/remote-eval-stub (Node) -> Swift /decide via TG_CANONICAL_CORE_URL.",
    "Client wall-clock measurements use process.hrtime.bigint() (ns precision).",
    "Server-reported timing.total_ms in pipeline output is integer-ms and NOT used for percentiles."
  ],
  "kernel_fsm_ms": {
    "source": "evidence/artifacts/benchmarks/kernel_fsm_latency.json",
    "description": "In-process trigguard.sdk.gate.check() — no HTTP, no crypto, single thread",
    "iterations": 100000,
    "p50": 0.010750000001280569,
    "p95": 0.012999999853491317,
    "p99": 0.017791999198379926,
    "p99_9": 0.04908400023850845,
    "max": 0.21412499972939258,
    "rps": 85343.34389362283
  },
  "kernel_fsm_signals_ms": {
    "source": "evidence/artifacts/benchmarks/kernel_fsm_latency_signals.json",
    "description": "In-process trigguard.sdk.gate.check() with tier-1 irreversible surface (spend) + 2 signals. No HTTP, no crypto, single thread.",
    "iterations": 100000,
    "p50": 0.006666999979643151,
    "p95": 0.008332999641424976,
    "p99": 0.010875000043597538,
    "p99_9": 0.03770800049096579,
    "max": 0.1409580008839839,
    "rps": 139716.0841748373
  },
  "decision_core_http_ms": {
    "source": "evidence/artifacts/benchmarks/decision_core_http_latency.json",
    "description": "Direct POST /decide to Swift canonical core (no Node evaluator in path). Client wall-clock via process.hrtime.bigint.",
    "iterations": 20000,
    "p50": 0.168458,
    "p95": 0.2595,
    "p99": 0.4745,
    "p99_9": 1.328125,
    "max": 8.710042,
    "rps": 5285.405452866918
  },
  "eval_pipeline_ms": {
    "source": "evidence/artifacts/benchmarks/eval_pipeline_latency.json",
    "description": "End-to-end POST /v1/evaluate: client -> Node evaluator -> Swift canonical core -> receipt. Client wall-clock via process.hrtime.bigint (ns precision).",
    "iterations": 5000,
    "p50": 0.484541,
    "p95": 0.785583,
    "p99": 1.279083,
    "p99_9": 1.973375,
    "max": 3.460459,
    "rps": 1867.5997817709656
  },
  "load_test": {
    "description": "k6 concurrent VUs against local Node evaluator -> Swift core. http_req_duration percentiles.",
    "vus_10": {
      "p50_ms": 2.258,
      "p90_ms": 3.238,
      "p95_ms": 3.596,
      "p99_ms": 4.5856799999999955,
      "p99_9_ms": 13.630471000000174,
      "max_ms": 15.287,
      "mean_ms": 2.4424606490301257,
      "error_rate": null,
      "requests_per_sec": 4024.1742433383174,
      "total_requests": 120734,
      "source": "evidence/artifacts/benchmarks/k6_summary_10vu_30s.json"
    },
    "vus_50": {
      "p50_ms": 11.65,
      "p90_ms": 13.603,
      "p95_ms": 14.779,
      "p99_ms": 21.334879999999995,
      "p99_9_ms": 28.77341400000085,
      "max_ms": 244.734,
      "mean_ms": 11.98462571218928,
      "error_rate": null,
      "requests_per_sec": 4156.140724708282,
      "total_requests": 249407,
      "source": "evidence/artifacts/benchmarks/k6_summary_50vu_60s.json"
    },
    "vus_100": {
      "p50_ms": 22.709,
      "p90_ms": 26.134,
      "p95_ms": 28.629599999999993,
      "p99_ms": 35.118,
      "p99_9_ms": 42.45636000000042,
      "max_ms": 416.472,
      "mean_ms": 23.41876919828911,
      "error_rate": null,
      "requests_per_sec": 4261.252080871061,
      "total_requests": 127889,
      "source": "evidence/artifacts/benchmarks/k6_summary_100vu_30s.json"
    }
  },
  "site_claim_reconciliation": {
    "claim_kernel_p99_lt_5ms": {
      "claim": "<5ms p99 kernel (hot path)",
      "measured_kernel_inproc_p99_ms": 0.017791999198379926,
      "measured_kernel_inproc_signals_p99_ms": 0.010875000043597538,
      "measured_decision_core_http_p99_ms": 0.4745,
      "verdict": "SUPPORTED",
      "verdict_detail": "All three kernel paths are well under 5ms p99 on localhost."
    },
    "claim_e2e_p99_lt_15ms": {
      "claim": "<15ms p99 end-to-end evaluation (finite-state)",
      "measured_sequential_pipeline_p99_ms": 1.279083,
      "measured_10vu_pipeline_p99_ms": 4.5856799999999955,
      "measured_50vu_pipeline_p99_ms": 21.334879999999995,
      "measured_100vu_pipeline_p99_ms": 35.118,
      "verdict": "SUPPORTED_UNDER_PRODUCTION_CONCURRENCY",
      "verdict_detail": "Holds up to ~10 VUs per instance (p99=4.58ms) and sequential single-client (p99=1.28ms). Exceeded at 50 VUs (p99=21.33ms) and 100 VUs (p99=35.11ms) on a single-instance localhost Node evaluator. Production deployment with horizontal scaling is expected to keep per-instance concurrency well below the saturation point."
    }
  }
}