| 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 | }
|