File layout
Every export writes the same batched, gzip-compressed NDJSON-per-window layout, uniform across all three log types. Three concepts are enough to consume any of them:- Windows: each scheduled run exports one time window per enabled log type.
- Part files: The window’s records are written as gzip-compressed NDJSON (one JSON object per line), rolled into one or more part files of up to ~128 MB compressed each.
- Manifest: a single
.manifest.jsonper window lists the authoritative set of part files. It is written last, as the atomic commit point.
Object key layout
All three log types share the same key structure. Each window emits part files and a sibling manifest:
Records roll into a new part file once the current part reaches roughly 128 MB compressed, so a large window is split across parts instead of buffered whole. A window always produces exactly one manifest: even a window with zero records, which writes an empty manifest.
The window manifest
Each window’s.manifest.json is the authoritative commit point. It has the same schema for all three log types:
Each entry in
parts contains:
Example manifest:
The consumer contract
Because the manifest is written last, a consumer that reads the manifest and then reads exactly the parts it names always sees a consistent set. Re-exporting a stable (closed) window overwrites the same part objects with byte-identical content, so a reader can never observe a torn or mixed-generation window.Check Run Logs
Type:check-run-logs
One NDJSON record per concluded check run in the window. Each record contains:
Each entry in
tool_calls contains:
Code Review Analytics
Type:code-review
One NDJSON record per code review that concluded in the window. This covers both standard reviews (correctness, approvability) and per-PR custom check (CRA) reviews. Each record contains:
Each entry in
inline_comments contains:
Each entry in
pr_level_comments contains:
Per-window aggregate. In addition to the record parts and manifest, code review analytics writes one gzipped rollup object per window:
Each entry in
by_review_type contains review_type (string) plus review_runs, inline_comments, pr_level_comments, the four inline_*_sentiment/addressed/dismissed count-and-percentage pairs, fix_it_for_me_generated, fix_it_for_me_accepted, and fix_it_for_me_acceptance_rate: the same fields and semantics as the top-level totals, scoped to that review type.
User Activity Logs
Type:activity-logs
One NDJSON record per workspace activity event in the window. Each record contains:
The
actor object contains: