Files
Autonomous-Bug-Explorer/.ralph/specs/legacy/output-format.md

3.2 KiB

ABE — Output Format Specification

Cada anomalía genera DOS archivos en reports/{anomaly-id}/:


1. report.json — Para consumo por AI y tooling

{
  "version": "1.0",
  "generated_at": "2025-01-15T10:30:00.000Z",
  "environment": {
    "target_url": "http://localhost:3000",
    "abe_version": "0.1.0",
    "os": "linux",
    "node_version": "20.x"
  },
  "anomaly": {
    "id": "anom_a1b2c3d4",
    "type": "http_error",
    "severity": "high",
    "description": "Form submission returns HTTP 500 on empty email field",
    "timestamp": 1705312200000
  },
  "reproduction": {
    "seed": 42,
    "steps": [
      {
        "step": 1,
        "action_type": "navigate",
        "url": "http://localhost:3000/register",
        "timestamp": 1705312195000
      },
      {
        "step": 2,
        "action_type": "fill",
        "selector": "input[name='email']",
        "value": "",
        "timestamp": 1705312196000
      },
      {
        "step": 3,
        "action_type": "click",
        "selector": "button[type='submit']",
        "timestamp": 1705312197000
      }
    ]
  },
  "evidence": {
    "screenshot": "screenshot.png",
    "dom_snapshot": "dom.html",
    "http_log": [
      {
        "url": "http://localhost:3000/api/register",
        "method": "POST",
        "status": 500,
        "duration_ms": 234
      }
    ],
    "console_errors": [],
    "js_exceptions": []
  }
}

2. report.md — Para lectura humana

El archivo Markdown debe tener exactamente esta estructura:

# Bug Report — [tipo de anomalía] — [fecha]

## Summary
[Una frase describiendo qué pasó y dónde]

## Severity
[low | medium | high | critical] — [justificación en una frase]

## Reproduction Steps

1. Navigate to `[url]`
2. [acción 2]
3. [acción 3]
...

**Seed used**: `42`
**Replay command**: `npm run replay -- --report reports/anom_a1b2c3d4/report.json`

## Observed Behavior
[Qué ocurrió exactamente — errores, respuestas HTTP, mensajes]

## Evidence
- Screenshot: `reports/anom_a1b2c3d4/screenshot.png`
- DOM Snapshot: `reports/anom_a1b2c3d4/dom.html`
- HTTP Log: [tabla con las requests relevantes]

## Raw Errors
\`\`\`
[errores textuales tal cual aparecieron]
\`\`\`

Estructura de carpetas de salida

reports/
└── anom_a1b2c3d4/
    ├── report.json       ← estructurado para AI
    ├── report.md         ← legible para humanos
    ├── screenshot.png    ← captura en el momento de la anomalía
    └── dom.html          ← snapshot completo del DOM

logs/
└── session_20250115_103000.jsonl   ← una línea JSON por evento

Formato del log de sesión (.jsonl)

Cada línea es un objeto JSON independiente:

{"event":"session_start","timestamp":1705312190000,"seed":42,"target":"http://localhost:3000"}
{"event":"state_discovered","timestamp":1705312191000,"state_id":"s_abc123","url":"/","title":"Home"}
{"event":"action_executed","timestamp":1705312196000,"action_id":"act_xyz","type":"fill","selector":"input[name='email']","value":""}
{"event":"anomaly_detected","timestamp":1705312197000,"anomaly_id":"anom_a1b2c3d4","type":"http_error","severity":"high"}
{"event":"session_end","timestamp":1705312210000,"states_visited":3,"anomalies_found":1}