Viewing files at commit 4f4412a18356Commit detailsView latest

Browse files
config/command_semantics.json 405 lines · 10.2 KB · json
1
{
2
  "version": "2026-09-18.1",
3
  "harness_tracks_note": "Machine-readable source of the exact commands each lane runs per subject kind and track. Harnesses load this via oakbench.command_semantics; changing any command requires a version bump (ADR-0005). {message} is substituted at run time.",
4
  "harness_tracks": {
5
    "git": {
6
      "init": [
7
        "init"
8
      ],
9
      "stage": [
10
        "add",
11
        "."
12
      ],
13
      "commit": [
14
        "commit",
15
        "-m",
16
        "{message}"
17
      ],
18
      "branch_create": [
19
        "checkout",
20
        "-b",
21
        "agent-task"
22
      ],
23
      "status": {
24
        "agent-default": [
25
          "status",
26
          "--short"
27
        ],
28
        "core-equivalent": [
29
          "status",
30
          "--porcelain=v1"
31
        ]
32
      },
33
      "diff": {
34
        "agent-default": [
35
          "diff",
36
          "--stat"
37
        ],
38
        "core-equivalent": [
39
          "diff",
40
          "--no-ext-diff"
41
        ]
42
      }
43
    },
44
    "oak": {
45
      "init": [
46
        "init",
47
        "."
48
      ],
49
      "stage": null,
50
      "commit": [
51
        "commit",
52
        "--no-verify"
53
      ],
54
      "branch_create": [
55
        "switch",
56
        "-c",
57
        "agent-task"
58
      ],
59
      "status": {
60
        "agent-default": [
61
          "status"
62
        ],
63
        "core-equivalent": [
64
          "status"
65
        ]
66
      },
67
      "diff": {
68
        "agent-default": [
69
          "diff"
70
        ],
71
        "core-equivalent": [
72
          "diff",
73
          "--print"
74
        ]
75
      }
76
    }
77
  },
78
  "agent_native_json_probes": {
79
    "git": {},
80
    "oak": {
81
      "oak.agent.state.json": {
82
        "minimum_oak_version": "0.98.0",
83
        "args": [
84
          "agent",
85
          "state",
86
          "--json"
87
        ],
88
        "help_args": [
89
          "agent",
90
          "state",
91
          "--help"
92
        ],
93
        "required_fields": [
94
          "schema_version",
95
          "context",
96
          "branch",
97
          "head",
98
          "dirty",
99
          "changes",
100
          "progress_state",
101
          "recommended_action"
102
        ],
103
        "output_format": "json"
104
      },
105
      "oak.agent.state.compact.json": {
106
        "minimum_oak_version": "0.98.0",
107
        "args": [
108
          "agent",
109
          "state",
110
          "--json",
111
          "--compact"
112
        ],
113
        "help_args": [
114
          "agent",
115
          "state",
116
          "--help"
117
        ],
118
        "required_fields": [
119
          "schema_version",
120
          "context",
121
          "dirty",
122
          "finish_eligible",
123
          "progress_state",
124
          "recommended_action",
125
          "recommended_next_commands"
126
        ],
127
        "output_format": "json"
128
      },
129
      "oak.status.json": {
130
        "args": [
131
          "status",
132
          "--json"
133
        ],
134
        "help_args": [
135
          "status",
136
          "--help"
137
        ],
138
        "required_fields": [
139
          "schema_version",
140
          "branch",
141
          "head",
142
          "changes",
143
          "progress_state"
144
        ],
145
        "output_format": "json"
146
      },
147
      "oak.branch.review.json": {
148
        "args": [
149
          "branch",
150
          "review",
151
          "--json",
152
          "{branch}"
153
        ],
154
        "help_args": [
155
          "branch",
156
          "review",
157
          "--help"
158
        ],
159
        "required_fields": [
160
          "schema_version",
161
          "branch",
162
          "against",
163
          "branch_head",
164
          "changed_file_count",
165
          "changed_files",
166
          "merge_lineage_evidence"
167
        ],
168
        "output_format": "json"
169
      },
170
      "oak.branch.diff.json": {
171
        "args": [
172
          "branch",
173
          "diff",
174
          "--json",
175
          "{branch}"
176
        ],
177
        "help_args": [
178
          "branch",
179
          "diff",
180
          "--help"
181
        ],
182
        "required_fields": [
183
          "schema_version",
184
          "kind",
185
          "branch",
186
          "against",
187
          "branch_head",
188
          "changed_file_count",
189
          "changed_files"
190
        ],
191
        "output_format": "json"
192
      }
193
    }
194
  },
195
  "tracks": {
196
    "agent-default": {
197
      "purpose": "Measure what an agent is likely to call today with current documented/default commands.",
198
      "public_claim": "Valid for CLI UX, transcript pressure, and default agent ergonomics. Not a pure VCS-engine comparison."
199
    },
200
    "core-equivalent": {
201
      "purpose": "Measure the closest available equivalent semantic output level across VCSs.",
202
      "public_claim": "Valid only for operations where semantic_contract_match is true. Rows with compatibility notes are diagnostic, not proof."
203
    }
204
  },
205
  "operations": {
206
    "status.short": {
207
      "semantic_contract": "Report changed paths and staged/unstaged state without prose or file content.",
208
      "output_class": "summary",
209
      "git": [
210
        "git",
211
        "status",
212
        "--porcelain=v1"
213
      ],
214
      "oak": [
215
        "oak",
216
        "status",
217
        "--porcelain"
218
      ],
219
      "semantic_contract_match": true,
220
      "compatibility_note": "Oak status --porcelain reports compact stable changed-path rows.",
221
      "correctness_check": "Changed path set and dirty/clean state match fixture manifest."
222
    },
223
    "status.full": {
224
      "semantic_contract": "Report repository state in human-readable form.",
225
      "output_class": "human-full",
226
      "git": [
227
        "git",
228
        "status"
229
      ],
230
      "oak": [
231
        "oak",
232
        "status"
233
      ],
234
      "semantic_contract_match": true,
235
      "correctness_check": "Dirty/clean state and changed path set match fixture manifest."
236
    },
237
    "diff.stat": {
238
      "semantic_contract": "Report changed paths and insertion/deletion summary; no hunks or binary payloads.",
239
      "output_class": "summary",
240
      "git": [
241
        "git",
242
        "diff",
243
        "--stat"
244
      ],
245
      "oak": [
246
        "oak",
247
        "diff",
248
        "--stat"
249
      ],
250
      "semantic_contract_match": true,
251
      "compatibility_note": "oak diff --stat (and piped oak diff default) report per-file +added/-removed counts; binary files are marked \"bin\".",
252
      "correctness_check": "Changed path set and approximate line-change counts match fixture manifest."
253
    },
254
    "diff.full": {
255
      "semantic_contract": "Report text hunks for changed text files and binary-safe summaries for binary files.",
256
      "output_class": "full",
257
      "git": [
258
        "git",
259
        "diff",
260
        "--no-ext-diff"
261
      ],
262
      "oak": [
263
        "oak",
264
        "diff",
265
        "--print"
266
      ],
267
      "semantic_contract_match": true,
268
      "compatibility_note": "oak diff --print emits unified hunks for text and \"Binary files ... differ\" notices for binaries. Rows are invalid if either tool emits raw binary payloads instead of binary summaries.",
269
      "correctness_check": "Text hunks apply cleanly; binary paths are summarized without content dumps."
270
    },
271
    "diff.name_only": {
272
      "semantic_contract": "Report only changed paths.",
273
      "output_class": "summary",
274
      "git": [
275
        "git",
276
        "diff",
277
        "--name-only"
278
      ],
279
      "oak": [
280
        "oak",
281
        "diff",
282
        "--name-only"
283
      ],
284
      "semantic_contract_match": true,
285
      "compatibility_note": "Oak diff --name-only reports changed paths only.",
286
      "correctness_check": "Changed path set equals fixture manifest."
287
    },
288
    "commit.quiet": {
289
      "semantic_contract": "Create a snapshot and emit commit id plus minimal success/failure state.",
290
      "output_class": "summary",
291
      "git": [
292
        [
293
          "git",
294
          "add",
295
          "."
296
        ],
297
        [
298
          "git",
299
          "commit",
300
          "--quiet",
301
          "-m",
302
          "agent task"
303
        ]
304
      ],
305
      "oak": [
306
        "oak",
307
        "commit",
308
        "--json",
309
        "--quiet",
310
        "--no-verify"
311
      ],
312
      "semantic_contract_match": true,
313
      "compatibility_note": "Oak commit --json --quiet emits parseable minimal checkpoint state.",
314
      "correctness_check": "New snapshot exists and working tree is clean."
315
    },
316
    "commit.verbose": {
317
      "semantic_contract": "Create a snapshot and emit human-readable details.",
318
      "output_class": "human-full",
319
      "git": [
320
        [
321
          "git",
322
          "add",
323
          "."
324
        ],
325
        [
326
          "git",
327
          "commit",
328
          "-m",
329
          "agent task"
330
        ]
331
      ],
332
      "oak": [
333
        "oak",
334
        "commit",
335
        "--no-verify"
336
      ],
337
      "semantic_contract_match": true,
338
      "correctness_check": "New snapshot exists and working tree is clean."
339
    },
340
    "branch.create": {
341
      "semantic_contract": "Create and switch to a new task branch from the current revision.",
342
      "output_class": "state-change",
343
      "git": [
344
        "git",
345
        "checkout",
346
        "-b",
347
        "agent-task"
348
      ],
349
      "oak": [
350
        "oak",
351
        "switch",
352
        "-c",
353
        "agent-task"
354
      ],
355
      "semantic_contract_match": true,
356
      "correctness_check": "Current branch is the task branch and points at the original revision."
357
    },
358
    "repo.init": {
359
      "semantic_contract": "Initialize VCS metadata in an existing directory.",
360
      "output_class": "state-change",
361
      "git": [
362
        "git",
363
        "init"
364
      ],
365
      "oak": [
366
        "oak",
367
        "init",
368
        "."
369
      ],
370
      "semantic_contract_match": true,
371
      "correctness_check": "Repository metadata exists and status command succeeds."
372
    },
373
    "workflow.total": {
374
      "semantic_contract": "Complete the deterministic scripted agent-shaped recipe for one task.",
375
      "output_class": "aggregate",
376
      "git": "sum of workflow steps for the selected track",
377
      "oak": "sum of workflow steps for the selected track",
378
      "semantic_contract_match": "depends_on_steps",
379
      "correctness_check": "Workflow oracle passes and final snapshot exists."
380
    }
381
  },
382
  "output_formats": {
383
    "git": {
384
      "status": {
385
        "agent-default": "status",
386
        "core-equivalent": "status"
387
      },
388
      "diff": {
389
        "agent-default": "stat",
390
        "core-equivalent": "diff"
391
      }
392
    },
393
    "oak": {
394
      "status": {
395
        "agent-default": "status",
396
        "core-equivalent": "status"
397
      },
398
      "diff": {
399
        "agent-default": "stat",
400
        "core-equivalent": "diff"
401
      }
402
    }
403
  },
404
  "mutation_contract": "Subject-independent mutation bytes; run and path index identify the deterministic edit. Versioned with command semantics for cross-run comparison."
405
}