1. JSON Trace Format (Web‑UI Friendly)

A single corridor run produces a JSON object like:

{
  "task_id": "task-9af3",
  "status": "stable",
  "steps": [
    {
      "step_id": 0,
      "parent_step_id": null,
      "action": "search('quantum turbulence')",
      "observation": "Executed search",
      "q_metrics": {
        "semantic_drift": 0.12,
        "tool_entropy": 0.0,
        "latency_drift": 0.0,
        "branching_pressure": 0,
        "retry_ratio": 0.0
      },
      "timestamp": 1736280000.123
    },
    {
      "step_id": 1,
      "parent_step_id": 0,
      "action": "summarize(results)",
      "observation": "Executed summarize",
      "q_metrics": {
        "semantic_drift": 0.18,
        "tool_entropy": 0.69,
        "latency_drift": 0.12,
        "branching_pressure": 1,
        "retry_ratio": 0.0
      },
      "timestamp": 1736280001.004
    }
  ],
  "q_history": [
    {
      "step": 0,
      "semantic_drift": 0.12,
      "tool_entropy": 0.0,
      "latency_drift": 0.0,
      "branching_pressure": 0,
      "retry_ratio": 0.0
    },
    {
      "step": 1,
      "semantic_drift": 0.18,
      "tool_entropy": 0.69,
      "latency_drift": 0.12,
      "branching_pressure": 1,
      "retry_ratio": 0.0
    }
  ]
}

This is intentionally:

  • Flat (easy for JS to consume)
  • Time‑indexed
  • Lineage‑aware
  • Q‑metric rich
  • Web‑UI ready

A front‑end can now render:

  • step timeline
  • Q‑metric waveforms
  • branching graph
  • semantic drift heatmap
  • rewind points