@@ -33,6 +33,24 @@ Two decisions follow: the canonical result bundle, and how a workspace is acquir
3333
3434## Decision — output/artifact contract (best-of-each, split, no DB)
3535
36+ ### Wire-format casing invariant
37+
38+ All AgentV-owned process-boundary and persisted artifact fields use ` snake_case ` .
39+ This includes YAML authoring, JSON/JSONL run bundles, ` .internal/index.jsonl ` ,
40+ ` summary.json ` , ` result.json ` , ` grading.json ` , ` metrics.json ` , transcript
41+ sidecars, CLI JSON output, Dashboard/API response bodies, gate stdin/stdout, and
42+ adapter/export bundle fields.
43+
44+ Internal TypeScript APIs may use ` camelCase ` , but writers must translate to
45+ ` snake_case ` at the boundary and readers must translate back at the boundary.
46+ New AgentV-owned public fields must not be introduced in ` camelCase ` , and must
47+ not ship dual ` camelCase ` /` snake_case ` aliases unless an already-shipped external
48+ compatibility surface requires a documented migration.
49+
50+ Opaque provider-native payloads are exempt only when they are preserved as native
51+ evidence, such as ` transcript-raw.jsonl ` , provider metadata, or external
52+ protocol payloads. AgentV wrappers around those payloads still use ` snake_case ` .
53+
36541 . ** Split bundle is the single source of truth** (` .agentv/results/<run_id>/ ` ); NO
3755 maintained consolidated single-file export (generate on demand if ever needed).
3856 3 of 4 references split; only promptfoo consolidates (for its DB/hosted model).
@@ -250,3 +268,5 @@ exploitbench (security-exploit benchmark; AgentV research `entities/exploitbench
250268- Opik export (`av-bv4.6`) and the Dashboard (`av-2s7`) consume the new bundle → re-gate on
251269 this contract.
252270- Codemod handles bundle-field renames and drops the tangled repo-acquisition fields.
271+ - ` camelCase` in an AgentV-owned artifact or response is a contract bug, not a
272+ stylistic alternative.
0 commit comments