{ "$schema": "http://json-schema.org/draft-07/schema#", "title": "Debug Log Entry Schema", "description": "NDJSON log entry for hypothesis-driven debugging workflow", "type": "object", "required": [ "sessionId", "runId", "hypothesisId", "location", "message", "data", "timestamp" ], "properties": { "sessionId": { "type": "string", "pattern": "^DBG-[a-z0-9-]+-\\d{4}-\\d{2}-\\d{2}$", "description": "Debug session identifier (e.g., 'DBG-stack-length-not-found-2025-12-18')" }, "runId": { "type": "string", "pattern": "^run-\\d+$", "description": "Reproduction run number (e.g., 'run-1', 'run-2')" }, "hypothesisId": { "type": "string", "pattern": "^H\\d+$", "description": "Hypothesis identifier being tested (e.g., 'H1', 'H2')" }, "location": { "type": "string", "description": "Code location in format 'file:function:line' or 'file:line'" }, "message": { "type": "string", "description": "Human-readable description of what's being logged" }, "data": { "type": "object", "additionalProperties": true, "description": "Captured values for hypothesis validation", "properties": { "keys_sample": { "type": "array", "items": {"type": "string"}, "description": "Sample of dictionary/object keys (first 30)" }, "value": { "description": "Captured value (any type)" }, "expected_value": { "description": "Expected value for comparison" }, "actual_type": { "type": "string", "description": "Actual type of captured value" }, "count": { "type": "integer", "description": "Count of items (for arrays/collections)" }, "is_null": { "type": "boolean", "description": "Whether value is null/None" }, "is_empty": { "type": "boolean", "description": "Whether collection is empty" }, "comparison_result": { "type": "string", "enum": ["match", "mismatch", "partial_match"], "description": "Result of value comparison" } } }, "timestamp": { "type": "integer", "description": "Unix timestamp in milliseconds" }, "severity": { "type": "string", "enum": ["debug", "info", "warning", "error"], "default": "info", "description": "Log severity level" }, "stack_trace": { "type": "string", "description": "Stack trace if capturing exception context" }, "parent_entry_id": { "type": "string", "description": "Reference to parent log entry for nested contexts" } }, "examples": [ { "sessionId": "DBG-stack-length-not-found-2025-12-18", "runId": "run-1", "hypothesisId": "H1", "location": "rmxprt_api/core/rmxprt_parameter.py:sync_from_machine:642", "message": "Inspect stator keys from machine.to_dict and compare Stack Length vs Length", "data": { "keys_sample": ["Length", "Outer Diameter", "Inner Diameter", "Slot"], "stack_length_value": "未找到", "length_value": "120mm", "comparison_result": "mismatch" }, "timestamp": 1734523456789 }, { "sessionId": "DBG-registered-zero-2025-12-18", "runId": "run-1", "hypothesisId": "H2", "location": "rmxprt_api/utils/param_core.py:update_variables_from_result_model:670", "message": "Check result parameters count and sample keys", "data": { "count": 0, "is_empty": true, "sections_parsed": ["Stator", "Rotor", "General"], "expected_count": 145 }, "timestamp": 1734523457123 } ] }