# Review Tracing Protocol ## Purpose Save full prompt/response pairs for every cross-model reviewer call, enabling: - **Reviewer-independence audit**: verify the executor only passed file paths, not summaries - **Reproducibility**: threadId preservation allows conversation continuation - **Meta-optimize input**: richer data for harness improvement analysis ## When to Trace After **every** `mcp__codex__codex` or `mcp__codex__codex-reply` call that serves a reviewer/critique function. This includes review scoring, experiment auditing, claim verification, idea critique, and patch gating. Do NOT trace: purely informational LLM calls (e.g., `codex exec` for code generation that is not a review). ## Trace Directory ``` .aris/traces//_run/ ├── run.meta.json # Run-level metadata ├── 001-.request.json # Request snapshot ├── 001-.response.md # Full response text ├── 001-.meta.json # Response metadata ├── 002-.request.json # Second call (e.g., reply) └── ... ``` - ``: the ARIS skill that triggered this call (e.g., `auto-review-loop`) - `_run`: date + sequential run number (start from `01`) - ``: short kebab-case label (e.g., `round-1-review`, `critique`, `ideation`, `audit`, `patch-gate`) ## How to Trace After each reviewer MCP call, save the trace using the helper script: ```bash bash tools/save_trace.sh \ --skill "" \ --purpose "" \ --model "" \ --thread-id "" \ --prompt "" \ --response "" ``` The script handles directory creation, run numbering, and file writing. If the `tools/save_trace.sh` script is not available (e.g., on Codex CLI), write the files directly following the schema below. ## File Schemas ### `run.meta.json` ```json { "skill": "auto-review-loop", "run_id": "2026-04-15_run01", "started_at": "2026-04-15T14:30:00+08:00", "executor": "claude-code", "project_dir": "/path/to/project" } ``` ### `NNN-.request.json` ```json { "call_number": 1, "purpose": "round-1-review", "timestamp": "2026-04-15T14:31:00+08:00", "tool": "mcp__codex__codex", "model": "gpt-5.4", "config": {"model_reasoning_effort": "xhigh"}, "files_referenced": ["paper/sections/3_method.tex", "results/table1.csv"], "prompt": "" } ``` ### `NNN-.response.md` The reviewer's full response, verbatim. No truncation, no summarization. ### `NNN-.meta.json` ```json { "call_number": 1, "purpose": "round-1-review", "timestamp": "2026-04-15T14:33:00+08:00", "thread_id": "019d8fe0-b25d-...", "model": "gpt-5.4", "duration_ms": 142000, "status": "ok" } ``` ## Configuration Tracing respects three modes, set via inline parameter `--- trace: off | meta | full`: - **`full`** (default): save full prompt + full response - **`meta`**: save metadata only (no prompt/response text), useful for sensitive projects - **`off`**: disable tracing entirely ## Integration with events.jsonl After writing a trace, append a compact summary event to `.aris/meta/events.jsonl`: ```json {"event":"review_trace","skill":"auto-review-loop","purpose":"round-1-review","thread_id":"...","trace_path":".aris/traces/auto-review-loop/2026-04-15_run01/","status":"ok"} ``` This allows `/meta-optimize` to discover traces without reading the full trace files. ## Privacy - `.aris/traces/` should be in `.gitignore` — traces are project-local, never committed - Traces may contain sensitive research content; treat them as confidential - Use `--- trace: off` for projects with strict confidentiality requirements