BASE JSON STRUCTURES

JSON0:
{
      "paid_addons": {
          "feature_1": "path_to_feature_1_directory",
          "feature_2": "path_to_feature_2_directory",
      }
 }

JSON3:
{
  "status": 200,                 // 200 found | 502 not found | 500 not compiled
  "error": "",
  "modules": {
    "<name>": {
      "name": "run", "file": "sync_async_always.v", "line": 1,
      "ports":   [ { "name": "clk", "direction": "input", "width": 1, "line": 2 } ],
      "signals": [ { "name": "q_sync", "kind": "reg", "width": 1, "line": 6 } ],
      "blocks":  [ /* always/initial descriptors */ ],
      "instances": ["b1_inst"]
    }
  }
}




JSON4:

{
    backend_query: {
   	module_name: "",
    	traverse_all: True/False,
   	compilation_status: True/None,
sql_query: [ ] // either a single string or dictionaries (query chain)
     },

     user_query: "",

     json5_data: {
            "assertion_n": {
      	       code: "",
                   location: {
        	 	file_name: "",
       	 	module: "",
      	  	line: 0
      	       }
            }
            ...
     },

     structural_response: ""
}





JSON5:
{
       "assertion_n": {
      	code: "",
            location: {
        	 	file_name: "",
       	 	module: "",
      	  	line: 0
      	 }
         }
        ...
  }


JSON7:
{
"assertionEvents": "",
"sql_results": [ { }, { }, ... ]
}







JSON8:
{
    "results": [
       {
          "property_id": ,
          "user_response": "",
          "waveform_title": ""
        }
         ...
     ],
      "analysis": [ 
{
   race_id: [int],
   waveform_title: "",
   user_response: "",
   "waveform_data": [ ],
   "queuestate_data": [ ]
},

{
},
         ...
     ],
      "sql_timeline_results": [ 
{
        	  "waveform_title": " ",
	  "user_response": " ",
	  "waveform_data": [ ]
}
     ],
      "sql_queuestate_results": [ 
{
        	  "waveform_title": " ",
	  "user_response": " ",
	  "waveform_data": [ ],
	  "queuestate_data: [ ]
}
     ]
}

ANALYSIS PROMPT JSON (4,7,8):

User query: "Are there any race conditions in my simulation?"

JSON4
{
  "session_id": "abc123",
  "backend_query": {
    "sql_query": [
      {
        "id": "Q1",
        "query": "SELECT json_group_array(json_object('signal_id', signal_id, 'step', step, 'time', time, 'current_file_id', current_file_id, 'current_line', current_line)) FROM timeline GROUP BY signal_id, time HAVING COUNT(*) > 1",
        "stop_if_empty": true
      },
      {
        "id": "Q2",
        "query": "SELECT json_group_array(json_object('file_path', file_path)) FROM projectstructure WHERE id IN ({Q1.current_file_id})"
      },
      {
        "id": "Q3",
        "query": "SELECT json_group_array(json_object('module', module, 'signal_name', name)) FROM signals WHERE signal_id IN ({Q1.signal_id})"
      },
      {
        "id": "Q4",
        "query": "SELECT json_group_array(json_object('instance_id', instance_id)) FROM signals WHERE signal_id IN ({Q1.signal_id})"
      },
      {
        "id": "Q5",
        "query": "SELECT json_group_array(json_object('instance_name', instance_name)) FROM instances WHERE instance_id IN ({Q4.instance_id})"
      },
      {
        "id": "Q6",
        "query": "SELECT json_group_array(json_object('step', t.step, 'time', t.time, 'signal_id', t.signal_id, 'signal_val', t.signal_val)) FROM timeline t INNER JOIN (SELECT signal_id, time FROM timeline GROUP BY signal_id, time HAVING COUNT(*) > 1) races ON t.signal_id = races.signal_id AND t.time BETWEEN races.time - 5 AND races.time + 5"
      },
      {
        "id": "Q7",
        "query": "SELECT json_group_array(json_object('step', q.step, 'type', q.type, 'file_id', q.file_id, 'line', q.line, 'instance_path', q.instance_path, 'when_line', q.when_line)) FROM queuestate q WHERE q.step IN (SELECT DISTINCT t.step FROM timeline t INNER JOIN (SELECT signal_id, time FROM timeline GROUP BY signal_id, time HAVING COUNT(*) > 1) races ON t.signal_id = races.signal_id AND t.time = races.time)"
      }
    ]
  },
  "user_query": "",
  "json5_data": {},
  "structural_response": ""
}




JSON7
{
  "session_id": "abc123",
  "sql_results":[
           {"id": "Q1", "rows": [
        {"signal_id": 3, "step": 2, "time": 100, "current_file_id": 1, "current_line": 12},
        {"signal_id": 7, "step": 5, "time": 200, "current_file_id": 2, "current_line": 20},
    ]
},
{"id": "Q2", "rows": [
        {"file_path": "/project/src/top.v"},
        {"file_path": "/project/src/core.v"},
    ]
},
{"id": "Q3", "rows": [
        {"module": "top",  "signal_name": "out"},
        {"module": "core", "signal_name": "data"},
    ]
},
{"id": "Q4", "rows": [
          {"instance_id": 3}, 
          {"instance_id": 7}
     ]
},
    {"id": "Q5", "rows": [
           {"instance_name": "dut"}, 
                         {"instance_name": "core"}
      ]
},
    {"id": "Q6", "rows": [
        # Race 0: signal_id=3, race_time=100, +-5 context window (95-105)
        {"step": 1, "time": 95,  "signal_id": 3, "signal_val": 0},  # context before
        {"step": 2, "time": 100, "signal_id": 3, "signal_val": 1},  # race row 1
        {"step": 2, "time": 100, "signal_id": 3, "signal_val": 0},  # race row 2 (conflict)
        {"step": 3, "time": 105, "signal_id": 3, "signal_val": 1},  # context after
        # Race 1: signal_id=7, race_time=200, +-5 context window (195-205)
        {"step": 4, "time": 195, "signal_id": 7, "signal_val": 1},  # context before
        {"step": 5, "time": 200, "signal_id": 7, "signal_val": 0},  # race row 1
        {"step": 5, "time": 200, "signal_id": 7, "signal_val": 1},  # race row 2 (conflict)
        {"step": 6, "time": 205, "signal_id": 7, "signal_val": 0},  # context after
      ]
    },
    {"id": "Q7", "rows": [
        # Only exact race-time steps — Q7 is already precise
        {"step": 2, "type": "NBA",    "file_id": 1, "line": 12, "instance_path": "top.dut", "when_line": 8},
        {"step": 5, "type": "Active", "file_id": 2, "line": 20, "instance_path": "core",    "when_line": 0},
    ]
   }
 ]



JSON8
{
    "results": [],
    "analysis": [
        {
            "race_id": 0,
            "race_time": 100,
            "waveform_title": "Race Condition: Instance dut at time 100",
            "user_response": "A race condition was detected in the simulation, specifically involving the signal `out` in the `top` module and the signal `data` in the `core` module. The conflict occurred at time 100 in the `top.v` file at line 12 and at time 200 in the `core.v` file at line 20. The signal `out` in the `top` module had conflicting values of 0 and 1 at the same time, while the signal `data` in the `core` module also had conflicting values of 0 and 1 at the same time. To resolve this issue, ensure that only one always block is driving the same signal, or introduce an enable condition to control the active driver.",
            "waveform_data": [
                {"step": 1, "time": 95,  "signal_id": 3, "signal_val": 0, "race_id": 0},
                {"step": 2, "time": 100, "signal_id": 3, "signal_val": 1, "race_id": 0},
                {"step": 2, "time": 100, "signal_id": 3, "signal_val": 0, "race_id": 0},
                {"step": 3, "time": 105, "signal_id": 3, "signal_val": 1, "race_id": 0}
            ],
            "queuestate_data": [
                {"step": 2, "type": "NBA", "file_id": 1, "line": 12, "instance_path": "top.dut", "when_line": 8, "race_id": 0}
            ]
        },
        {
            "race_id": 1,
            "race_time": 200,
            "waveform_title": "Race Condition: Instance dut at time 200",
            "user_response": "A race condition was detected in the simulation, specifically involving the signal `out` in the `top` module and the signal `data` in the `core` module. The conflict occurred at time 100 in the `top.v` file at line 12 and at time 200 in the `core.v` file at line 20. The signal `out` in the `top` module had conflicting values of 0 and 1 at the same time, while the signal `data` in the `core` module also had conflicting values of 0 and 1 at the same time. To resolve this issue, ensure that only one always block is driving the same signal, or introduce an enable condition to control the active driver.",
            "waveform_data": [
                {"step": 4, "time": 195, "signal_id": 7, "signal_val": 1, "race_id": 1},
                {"step": 5, "time": 200, "signal_id": 7, "signal_val": 0, "race_id": 1},
                {"step": 5, "time": 200, "signal_id": 7, "signal_val": 1, "race_id": 1},
                {"step": 6, "time": 205, "signal_id": 7, "signal_val": 0, "race_id": 1}
            ],
            "queuestate_data": [
                {"step": 5, "type": "Active", "file_id": 2, "line": 20, "instance_path": "core", "when_line": 0, "race_id": 1}
            ]
        }
    ],
    "sql_timeline_results": [],
    "sql_queuestate_results": [],
    "session_id": "test_3f825d88"
}




TIMELINE PROMPT JSON (4,7,8):

User query: "Show me the waveform for clk in module top"

JSON4
{
  "session_id": "abc123",
  "backend_query": {
    "sql_query": ["SELECT json_group_array(json_object('step', t.step, 'time', t.time, 'signal_id', t.signal_id, 'signal_val', t.signal_val, 'name', s.name)) FROM timeline t JOIN signals s ON t.signal_id = s.signal_id WHERE s.name = 'clk' AND s.module = 'top' LIMIT 100"]
  },
  "user_query": "",
  "json5_data": {},
  "structural_response": ""
}

JSON7
{
  "session_id": "abc123",
  "sql_results": [
    { "step": 1, "time": 0,  "signal_id": 2, "signal_val": 0, "name": "clk" },
    { "step": 2, "time": 5,  "signal_id": 2, "signal_val": 1, "name": "clk" },
    { "step": 3, "time": 10, "signal_id": 2, "signal_val": 0, "name": "clk" },
    { "step": 4, "time": 15, "signal_id": 2, "signal_val": 1, "name": "clk" }
  ]
}




JSON8
{
  "session_id": "abc123",
  "results": [ ],
  "analysis": [ ],
  "sql_timeline_results": [
    {
      "waveform_title": "clk — 4 transitions over 0–15 ns",
      "user_response": "The clk signal toggles every 5ns between 0 and 1 from time 0 to 15ns.",
      "waveform_data": [
        { "step": 1, "time": 0,  "signal_id": 2, "signal_val": 0, "name": "clk" },
        { "step": 2, "time": 5,  "signal_id": 2, "signal_val": 1, "name": "clk" },
        { "step": 3, "time": 10, "signal_id": 2, "signal_val": 0, "name": "clk" },
        { "step": 4, "time": 15, "signal_id": 2, "signal_val": 1, "name": "clk" }
      ]
    }
  ],
  "sql_queuestate_results": [ ]
}

QUEUESTATE PROMPT JSON (4,7,8):

User query: "What events are queued at step 2 for instance top.dut?"

JSON4
{
  "session_id": "abc123",
  "backend_query": {
    "sql_query": [
      { // queuestate query
        "id": "Q1", 
        "query": "SELECT json_group_array(json_object('step', q.step, 'type', q.type, 'file_id', q.file_id, 'line', q.line, 'instance_path', q.instance_path, 'when_line', q.when_line)) FROM queuestate q WHERE q.step = 2 AND q.instance_path = 'top.dut' LIMIT 100",
        "stop_if_empty": true
      },
      { // implicit AI-created timeline query as queuestate data is not shown without waveform
        "id": "Q2",
        "query": "SELECT json_group_array(json_object('step', t.step, 'time', t.time, 'current_line', t.current_line, 'signal_id', t.signal_id, 'signal_val', t.signal_val, 'name', s.name)) FROM timeline t JOIN signals s ON t.signal_id = s.signal_id JOIN instances i ON s.instance_id = i.instance_id WHERE t.step IN ({Q1.step}) AND i.instance_path IN ({Q1.instance_path}) LIMIT 100"
      }
    ]
  },
  "user_query": "",
  "json5_data": {},
  "structural_response": ""
}



JSON7
{
  "session_id": "abc123",
  "sql_results": [
    {
      "id": "Q1",
      "rows": [
        { "step": 2, "type": "NBA",      "file_id": 1, "line": 12, "instance_path": "top.dut", "when_line": 8 },
        { "step": 2, "type": "Active",   "file_id": 1, "line": 9,  "instance_path": "top.dut", "when_line": 0 },
        { "step": 2, "type": "Inactive", "file_id": 1, "line": 14, "instance_path": "top.dut", "when_line": 0 }
      ]
    },
    {
      "id": "Q2",
      "rows": [
        { "step": 2, "time": 100, "current_line": 12, "signal_id": 3, "signal_val": 1, "name": "q_out" },
        { "step": 2, "time": 100, "current_line": 9,  "signal_id": 2, "signal_val": 0, "name": "clk"   }
      ]
    }
  ]
}


JSON8
{
  "results": [],
  "analysis": [],
  "sql_timeline_results": [],
  "sql_queuestate_results": [
    {
      "waveform_title": "Step 2 — 3 events in top.dut at line 12",
      "user_response": "At step 2, top.dut has 1 NBA event at line 12, 1 Active event at line 9, and 1 Inactive event at line 14.",
      "queuestate_data": [
        { "step": 2, "type": "NBA",      "file_id": 1, "line": 12, "instance_path": "top.dut", "when_line": 8 },
        { "step": 2, "type": "Active",   "file_id": 1, "line": 9,  "instance_path": "top.dut", "when_line": 0 },
        { "step": 2, "type": "Inactive", "file_id": 1, "line": 14, "instance_path": "top.dut", "when_line": 0 }
      ],
      "waveform_data": [
        { "step": 2, "time": 100, "current_line": 12, "signal_id": 3, "signal_val": 1, "name": "q_out" },
        { "step": 2, "time": 100, "current_line": 9,  "signal_id": 2, "signal_val": 0, "name": "clk"   }
      ]
    }
  ]
}