{
  "schema": "s2s-bench-v1",
  "exhibit": "chair-trials",
  "published_utc": "2026-08-13",
  "status": "PUBLISHED — live at research.strata2signal.com.",
  "licence": "CC BY 4.0",
  "attribution": "strata→signal research, research.strata2signal.com",
  "hardware": "One 96G VRAM workstation, which also answered live requests for three of our apps throughout these trials — two public, one serving playtests for humans and agents alike. Contention is measured in both directions and published with the figures rather than assumed away.",
  "dataset": "chair-trials-c3-tool-schemas",
  "what_this_is": "The ten tool schemas as offered to every model on every task, byte-for-byte from the suite that served them.",
  "artifact": "tools-schemas.json",
  "source_artifact": "suite.py",
  "source_sha256": "aab2c36d6253fbef98d3667d482c36ebf93726a4929e9e65868e8cf3d10e7920",
  "n_tools": 10,
  "schemas": [
    {
      "type": "function",
      "function": {
        "name": "read_file",
        "description": "Read a UTF-8 text file from the harbour corpus. Paths are relative to the corpus root, e.g. 'harbor/berths.txt'. Optionally read only a line range.",
        "parameters": {
          "type": "object",
          "properties": {
            "path": {
              "type": "string",
              "description": "Path relative to the corpus root, e.g. 'crew/roster.md'."
            },
            "start_line": {
              "type": "integer",
              "description": "First line to return, 1-indexed and inclusive.",
              "minimum": 1
            },
            "end_line": {
              "type": "integer",
              "description": "Last line to return, 1-indexed and inclusive.",
              "minimum": 1
            }
          },
          "required": [
            "path"
          ]
        }
      }
    },
    {
      "type": "function",
      "function": {
        "name": "list_dir",
        "description": "List the files and directories at a path in the harbour corpus. Use '.' for the corpus root.",
        "parameters": {
          "type": "object",
          "properties": {
            "path": {
              "type": "string",
              "description": "Directory relative to the corpus root. Defaults to '.'."
            },
            "recursive": {
              "type": "boolean",
              "description": "If true, descend into subdirectories. Defaults to false."
            }
          },
          "required": []
        }
      }
    },
    {
      "type": "function",
      "function": {
        "name": "search_text",
        "description": "Find every line in the harbour corpus containing a literal substring. Returns the file, the line number and the line.",
        "parameters": {
          "type": "object",
          "properties": {
            "query": {
              "type": "string",
              "description": "Literal substring to look for. Not a regular expression."
            },
            "path": {
              "type": "string",
              "description": "Limit the search to this file or directory. Defaults to '.'."
            },
            "case_sensitive": {
              "type": "boolean",
              "description": "Match case exactly. Defaults to false."
            },
            "max_results": {
              "type": "integer",
              "description": "Stop after this many matching lines. Defaults to 40.",
              "minimum": 1,
              "maximum": 200
            }
          },
          "required": [
            "query"
          ]
        }
      }
    },
    {
      "type": "function",
      "function": {
        "name": "calculator",
        "description": "Evaluate an arithmetic expression exactly. Supports + - * / // % ** and parentheses over numeric literals. No variables, no functions.",
        "parameters": {
          "type": "object",
          "properties": {
            "expression": {
              "type": "string",
              "description": "The expression, e.g. '47 * 13 + 96'."
            }
          },
          "required": [
            "expression"
          ]
        }
      }
    },
    {
      "type": "function",
      "function": {
        "name": "unit_convert",
        "description": "Convert a quantity between units of the same dimension (length, mass or volume). Unit names must be given exactly as listed.",
        "parameters": {
          "type": "object",
          "properties": {
            "value": {
              "type": "number",
              "description": "The quantity to convert."
            },
            "from_unit": {
              "type": "string",
              "description": "Unit the value is in.",
              "enum": [
                "foot",
                "gallon_us",
                "kilogram",
                "kilometer",
                "liter",
                "meter",
                "mile",
                "nautical_mile",
                "pound",
                "short_ton",
                "tonne",
                "yard"
              ]
            },
            "to_unit": {
              "type": "string",
              "description": "Unit to convert to. Must share a dimension with from_unit.",
              "enum": [
                "foot",
                "gallon_us",
                "kilogram",
                "kilometer",
                "liter",
                "meter",
                "mile",
                "nautical_mile",
                "pound",
                "short_ton",
                "tonne",
                "yard"
              ]
            }
          },
          "required": [
            "value",
            "from_unit",
            "to_unit"
          ]
        }
      }
    },
    {
      "type": "function",
      "function": {
        "name": "date_diff",
        "description": "The signed difference between two ISO-8601 dates or datetimes, as end minus start, in the requested unit.",
        "parameters": {
          "type": "object",
          "properties": {
            "start_date": {
              "type": "string",
              "description": "ISO-8601 date or datetime, e.g. '2026-08-12'."
            },
            "end_date": {
              "type": "string",
              "description": "ISO-8601 date or datetime, e.g. '2026-09-02'."
            },
            "unit": {
              "type": "string",
              "description": "Unit for the difference. Defaults to 'days'.",
              "enum": [
                "days",
                "weeks",
                "hours"
              ]
            }
          },
          "required": [
            "start_date",
            "end_date"
          ]
        }
      }
    },
    {
      "type": "function",
      "function": {
        "name": "clock_now",
        "description": "The current date and time on the harbour office clock.",
        "parameters": {
          "type": "object",
          "properties": {
            "timezone": {
              "type": "string",
              "description": "Which clock to read. Defaults to 'harbor_local'.",
              "enum": [
                "harbor_local",
                "utc"
              ]
            }
          },
          "required": []
        }
      }
    },
    {
      "type": "function",
      "function": {
        "name": "sqlite_query",
        "description": "Run one read-only SQL SELECT against the harbour database. Tables: vessels(id, name, home_port, draught_m, tonnage_t), berths(code, depth_m, has_crane), visits(id, vessel_id, berth_code, arrived, departed, cargo_tonnes).",
        "parameters": {
          "type": "object",
          "properties": {
            "sql": {
              "type": "string",
              "description": "A single SELECT statement, without a trailing semicolon."
            },
            "max_rows": {
              "type": "integer",
              "description": "Row cap for the result. Defaults to 50.",
              "minimum": 1,
              "maximum": 200
            }
          },
          "required": [
            "sql"
          ]
        }
      }
    },
    {
      "type": "function",
      "function": {
        "name": "http_get",
        "description": "HTTP GET a URL and return its status and body. Only two origins are reachable: http://127.0.0.1:8971 (the harbour service) and https://api.open-meteo.com. Anything else is refused.",
        "parameters": {
          "type": "object",
          "properties": {
            "url": {
              "type": "string",
              "description": "Absolute http or https URL on an allowed origin."
            }
          },
          "required": [
            "url"
          ]
        }
      }
    },
    {
      "type": "function",
      "function": {
        "name": "write_note",
        "description": "Write a short note into the harbour scratch directory. This is the only place anything may be written. The filename is a plain name, no directories.",
        "parameters": {
          "type": "object",
          "properties": {
            "filename": {
              "type": "string",
              "description": "Plain filename, e.g. 'sailing.txt'. No path separators."
            },
            "content": {
              "type": "string",
              "description": "The text to write."
            },
            "mode": {
              "type": "string",
              "description": "Replace the file or add to it. Defaults to 'write'.",
              "enum": [
                "write",
                "append"
              ]
            }
          },
          "required": [
            "filename",
            "content"
          ]
        }
      }
    }
  ],
  "contamination_caveat": "Published 2026-08-13. Models with a later training cutoff may have seen these sets. We author fresh sets each cycle; this one is not a standard, it is our kit, yours to reuse.",
  "not_a_standard": "Our own trials, our own hardware, for our own chairs. Not first independent numbers, and not a benchmark."
}
