addrbookFor publishers
← The evidence ledger

Evidence row 292904

Observed , by probe.mcp/1.

Kind
mcp.tools
About
endpoint ffb805ee-46cb-489e-8f91-8908ae504dc2
Recorded
Previous row
None: the first of its kind about this subject
Body SHA-256
3d0dd29de5ed7f00acb856219ddbb6eacb4885df5c7b3ca505c2c47f9471cbb3
Leaf
0x507316492d270f8b42c1391b2d8596975b088aad1c488de414a254ad4054f479

What was observed

{
  "count": 2,
  "tools": [
    {
      "description": "Use this when the user already has a seating chart (typed rows or tables, or a file with Name and Table columns) and wants to check it against rules: who must be kept apart, kept together, needs a front seat, households together, head table and kids table, table capacities. Returns each broken rule with the people involved, the soft-preference score, and the same printable PDF, place cards and Excel for that chart. Does not move anyone; to make a new chart use generate_seating_chart. Each call saves new PDF and Excel files (which include the names) on the plugin server for 1 hour (private download links), then deletes them. Not for stadium or airline seat maps.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "aisle_breaks_adjacency": {
            "description": "Classroom pairs: true if the aisle between desk pairs separates students, so the seat across the aisle does not count as beside. Default false (across the aisle counts as beside).",
            "type": "boolean"
          },
          "chart": {
            "description": "The existing chart to check. Classroom rows/pairs: one entry per row, front row first. Groups/events: one entry per group or table.",
            "items": {
              "properties": {
                "name": {
                  "description": "Row, group or table name, e.g. Row 1 (front) or Table 3 or Head table.",
                  "maxLength": 60,
                  "type": "string"
                },
                "seats": {
                  "description": "Names in seat order; classroom rows go left to right as the students face the board, \"\" for an empty desk, e.g. [\"Ava\",\"Ben\",\"\"].",
                  "items": {
                    "maxLength": 80,
                    "type": "string"
                  },
                  "maxItems": 40,
                  "type": "array"
                },
                "type": {
                  "description": "Events: table type if it is a head table or kids table, e.g. head. Default: guest (read from a name such as Head table or Kids table).",
                  "enum": [
                    "guest",
                    "head",
                    "kids"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "name",
                "seats"
              ],
              "type": "object"
            },
            "maxItems": 100,
            "type": "array"
          },
          "columns": {
            "description": "Classroom: desks per row (rows), desk pairs per row (pairs), or groups per row (groups), e.g. 6.",
            "maximum": 20,
            "minimum": 1,
            "type": "integer"
          },
          "escort_sort": {
            "description": "Events: sort the alphabetical escort card list by last_name (default) or first_name.",
            "enum": [
              "last_name",
              "first_name"
            ],
            "type": "string"
          },
          "front_rows": {
            "description": "Classroom: how many rows count as the front for needs_front_seat, e.g. 1 (default).",
            "maximum": 5,
            "minimum": 1,
            "type": "integer"
          },
          "group_count": {
            "description": "Classroom groups layout: number of groups, e.g. 7. Default: just enough for everyone.",
            "maximum": 40,
            "minimum": 1,
            "type": "integer"
          },
          "group_size": {
            "description": "Classroom groups layout: students per group, e.g. 4 (default).",
            "maximum": 10,
            "minimum": 2,
            "type": "integer"
          },
          "head_table_seats": {
            "description": "Events shorthand: add a long head table with this many seats for VIP guests, e.g. 10.",
            "maximum": 40,
            "minimum": 1,
            "type": "integer"
          },
          "keep_apart": {
            "description": "Hard rule: people who must not sit next to each other (classroom: not beside, in front, behind or diagonal, nor in the same group; in pairs the seat across the aisle counts as beside unless aisle_breaks_adjacency is true; events: not at the same table). Each inner list is one rule, e.g. [[\"Ben\",\"Eli\"]].",
            "items": {
              "items": {
                "maxLength": 80,
                "type": "string"
              },
              "maxItems": 12,
              "minItems": 2,
              "type": "array"
            },
            "maxItems": 200,
            "type": "array"
          },
          "keep_together": {
            "description": "Hard rule: people who must sit next to each other (classroom) or at the same table (events). Each inner list is one rule, e.g. [[\"Ann Lee\",\"Bob Lee\"]].",
            "items": {
              "items": {
                "maxLength": 80,
                "type": "string"
              },
              "maxItems": 12,
              "minItems": 2,
              "type": "array"
            },
            "maxItems": 200,
            "type": "array"
          },
          "kids_table_seats": {
            "description": "Events shorthand: add a kids table with this many seats for guests marked child, e.g. 8.",
            "maximum": 40,
            "minimum": 1,
            "type": "integer"
          },
          "label_rule": {
            "description": "How to use labels: mix (spread each label across groups and neighbours; the classroom default), group (seat the same label together, e.g. college friends; the event default), or ignore.",
            "enum": [
              "mix",
              "group",
              "ignore"
            ],
            "type": "string"
          },
          "layout": {
            "description": "Classroom desk layout: rows (single desks, default), pairs (desks in twos), or groups (pods/tables of group_size).",
            "enum": [
              "rows",
              "pairs",
              "groups"
            ],
            "type": "string"
          },
          "mode": {
            "description": "classroom for a teacher's seating chart of desks; event for a wedding, party, banquet or gala with tables.",
            "enum": [
              "classroom",
              "event"
            ],
            "type": "string"
          },
          "people": {
            "description": "The students or guests: plain names (\"Ava Martinez\") or objects with flags, e.g. {\"name\":\"Cara Diaz\",\"needs_front_seat\":true}. Leave out when a roster file is attached.",
            "items": {
              "anyOf": [
                {
                  "maxLength": 80,
                  "type": "string"
                },
                {
                  "properties": {
                    "child": {
                      "description": "Events only: true for a child who sits at the kids table when there is one.",
                      "type": "boolean"
                    },
                    "label": {
                      "description": "Optional group label to mix or group by, e.g. B (reading level), Bride's side, or Team Red.",
                      "maxLength": 40,
                      "type": "string"
                    },
                    "name": {
                      "description": "Name as it should print, e.g. Ava Martinez.",
                      "maxLength": 80,
                      "type": "string"
                    },
                    "needs_front_seat": {
                      "description": "Classroom only: true if the student needs a front seat. Do not ask for or pass a reason.",
                      "type": "boolean"
                    },
                    "party": {
                      "description": "Events only: household or party. Everyone in the same party sits at the same table, e.g. Martinez family.",
                      "maxLength": 80,
                      "type": "string"
                    },
                    "vip": {
                      "description": "Events only: true to seat this guest at the head table, e.g. the couple and the wedding party.",
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "name"
                  ],
                  "type": "object"
                }
              ]
            },
            "maxItems": 600,
            "type": "array"
          },
          "prefer_apart": {
            "description": "Soft preference: try to keep these people apart; scored, not forced. Each inner list is one rule, e.g. [[\"Uncle Joe\",\"Aunt Sue\"]].",
            "items": {
              "items": {
                "maxLength": 80,
                "type": "string"
              },
              "maxItems": 12,
              "minItems": 2,
              "type": "array"
            },
            "maxItems": 200,
            "type": "array"
          },
          "prefer_together": {
            "description": "Soft preference: try to seat these people together; scored, not forced. Each inner list is one rule, e.g. [[\"Mia\",\"Zoe\"]].",
            "items": {
              "items": {
                "maxLength": 80,
                "type": "string"
              },
              "maxItems": 12,
              "minItems": 2,
              "type": "array"
            },
            "maxItems": 200,
            "type": "array"
          },
          "roster_file": {
            "description": "Optional class roster or guest list as CSV, TSV or Excel .xlsx with a header row: a Name column (or First/Last), and optional Party/Household, Group/Label, Front seat, VIP, Child, RSVP, Keep apart (names) and Table columns, e.g. guests.xlsx.",
            "properties": {
              "download_url": {
                "description": "Temporary download link for the file, supplied by ChatGPT.",
                "type": "string"
              },
              "file_id": {
                "description": "ChatGPT file id, e.g. file_abc123.",
                "type": "string"
              },
              "file_name": {
                "description": "Original file name if known, e.g. statement.pdf.",
                "type": "string"
              },
              "mime_type": {
                "description": "Media type if known, e.g. application/pdf.",
                "type": "string"
              }
            },
            "required": [
              "download_url",
              "file_id"
            ],
            "type": "object"
          },
          "rows": {
            "description": "Classroom rows/pairs: number of rows from the front, e.g. 5.",
            "maximum": 20,
            "minimum": 1,
            "type": "integer"
          },
          "seats_per_table": {
            "description": "Events shorthand: seats per regular table, e.g. 8 (default) or 10.",
            "maximum": 40,
            "minimum": 1,
            "type": "integer"
          },
          "table_count": {
            "description": "Events shorthand: number of regular guest tables, e.g. 12. Default: just enough.",
            "maximum": 100,
            "minimum": 1,
            "type": "integer"
          },
          "tables": {
            "description": "Events: table setup, e.g. [{\"count\":1,\"seats\":10,\"type\":\"head\",\"shape\":\"long\"},{\"count\":12,\"seats\":8}].",
            "items": {
              "properties": {
                "count": {
                  "description": "How many tables of this kind, e.g. 10.",
                  "maximum": 100,
                  "minimum": 1,
                  "type": "integer"
                },
                "seats": {
                  "description": "Seats at each of these tables, e.g. 8.",
                  "maximum": 40,
                  "minimum": 1,
                  "type": "integer"
                },
                "shape": {
                  "description": "round (default) or long (rectangular banquet table).",
                  "enum": [
                    "round",
                    "long"
                  ],
                  "type": "string"
                },
                "type": {
                  "description": "guest (default), head (for VIP guests only) or kids (for children only).",
                  "enum": [
                    "guest",
                    "head",
                    "kids"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "count",
                "seats"
              ],
              "type": "object"
            },
            "maxItems": 10,
            "type": "array"
          },
          "title": {
            "description": "Title printed on the chart, e.g. Period 3 - Room 114, or Lee & Park Wedding.",
            "maxLength": 80,
            "type": "string"
          }
        },
        "required": [
          "mode"
        ],
        "type": "object"
      },
      "name": "check_seating_chart"
    },
    {
      "description": "Use this when the user wants a seating chart or seating plan: a classroom seating chart for students (rows, pairs or groups of 4; keep two students apart; seat some students near the front; mixed groups; a new random seating chart each week that avoids last week's neighbours) or a wedding, party or banquet seating chart (round or long tables of N, keep couples and households together, keep two guests apart, head table, kids table). Accepts typed names or an uploaded roster or guest list (CSV/Excel). It checks each hard rule and reports any conflict, naming the rules that cannot all hold together. Returns the chart, a soft-preference score, and links to a printable PDF, place cards and Excel. Same seed gives the same chart; change seed to reshuffle. Each call saves new PDF and Excel files (which include the names) on the plugin server for 1 hour (private download links), then deletes them. Rosters are not saved. Does not seat stadiums, theaters or airplanes.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "aisle_breaks_adjacency": {
            "description": "Classroom pairs: true if the aisle between desk pairs separates students, so the seat across the aisle does not count as beside. Default false (across the aisle counts as beside).",
            "type": "boolean"
          },
          "columns": {
            "description": "Classroom: desks per row (rows), desk pairs per row (pairs), or groups per row (groups), e.g. 6.",
            "maximum": 20,
            "minimum": 1,
            "type": "integer"
          },
          "escort_sort": {
            "description": "Events: sort the alphabetical escort card list by last_name (default) or first_name.",
            "enum": [
              "last_name",
              "first_name"
            ],
            "type": "string"
          },
          "front_rows": {
            "description": "Classroom: how many rows count as the front for needs_front_seat, e.g. 1 (default).",
            "maximum": 5,
            "minimum": 1,
            "type": "integer"
          },
          "group_count": {
            "description": "Classroom groups layout: number of groups, e.g. 7. Default: just enough for everyone.",
            "maximum": 40,
            "minimum": 1,
            "type": "integer"
          },
          "group_size": {
            "description": "Classroom groups layout: students per group, e.g. 4 (default).",
            "maximum": 10,
            "minimum": 2,
            "type": "integer"
          },
          "head_table_seats": {
            "description": "Events shorthand: add a long head table with this many seats for VIP guests, e.g. 10.",
            "maximum": 40,
            "minimum": 1,
            "type": "integer"
          },
          "keep_apart": {
            "description": "Hard rule: people who must not sit next to each other (classroom: not beside, in front, behind or diagonal, nor in the same group; in pairs the seat across the aisle counts as beside unless aisle_breaks_adjacency is true; events: not at the same table). Each inner list is one rule, e.g. [[\"Ben\",\"Eli\"]].",
            "items": {
              "items": {
                "maxLength": 80,
                "type": "string"
              },
              "maxItems": 12,
              "minItems": 2,
              "type": "array"
            },
            "maxItems": 200,
            "type": "array"
          },
          "keep_together": {
            "description": "Hard rule: people who must sit next to each other (classroom) or at the same table (events). Each inner list is one rule, e.g. [[\"Ann Lee\",\"Bob Lee\"]].",
            "items": {
              "items": {
                "maxLength": 80,
                "type": "string"
              },
              "maxItems": 12,
              "minItems": 2,
              "type": "array"
            },
            "maxItems": 200,
            "type": "array"
          },
          "kids_table_seats": {
            "description": "Events shorthand: add a kids table with this many seats for guests marked child, e.g. 8.",
            "maximum": 40,
            "minimum": 1,
            "type": "integer"
          },
          "label_rule": {
            "description": "How to use labels: mix (spread each label across groups and neighbours; the classroom default), group (seat the same label together, e.g. college friends; the event default), or ignore.",
            "enum": [
              "mix",
              "group",
              "ignore"
            ],
            "type": "string"
          },
          "layout": {
            "description": "Classroom desk layout: rows (single desks, default), pairs (desks in twos), or groups (pods/tables of group_size).",
            "enum": [
              "rows",
              "pairs",
              "groups"
            ],
            "type": "string"
          },
          "mode": {
            "description": "classroom for a teacher's seating chart of desks; event for a wedding, party, banquet or gala with tables.",
            "enum": [
              "classroom",
              "event"
            ],
            "type": "string"
          },
          "people": {
            "description": "The students or guests: plain names (\"Ava Martinez\") or objects with flags, e.g. {\"name\":\"Cara Diaz\",\"needs_front_seat\":true}. Leave out when a roster file is attached.",
            "items": {
              "anyOf": [
                {
                  "maxLength": 80,
                  "type": "string"
                },
                {
                  "properties": {
                    "child": {
                      "description": "Events only: true for a child who sits at the kids table when there is one.",
                      "type": "boolean"
                    },
                    "label": {
                      "description": "Optional group label to mix or group by, e.g. B (reading level), Bride's side, or Team Red.",
                      "maxLength": 40,
                      "type": "string"
                    },
                    "name": {
                      "description": "Name as it should print, e.g. Ava Martinez.",
                      "maxLength": 80,
                      "type": "string"
                    },
                    "needs_front_seat": {
                      "description": "Classroom only: true if the student needs a front seat. Do not ask for or pass a reason.",
                      "type": "boolean"
                    },
                    "party": {
                      "description": "Events only: household or party. Everyone in the same party sits at the same table, e.g. Martinez family.",
                      "maxLength": 80,
                      "type": "string"
                    },
                    "vip": {
                      "description": "Events only: true to seat this guest at the head table, e.g. the couple and the wedding party.",
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "name"
                  ],
                  "type": "object"
                }
              ]
            },
            "maxItems": 600,
            "type": "array"
          },
          "prefer_apart": {
            "description": "Soft preference: try to keep these people apart; scored, not forced. Each inner list is one rule, e.g. [[\"Uncle Joe\",\"Aunt Sue\"]].",
            "items": {
              "items": {
                "maxLength": 80,
                "type": "string"
              },
              "maxItems": 12,
              "minItems": 2,
              "type": "array"
            },
            "maxItems": 200,
            "type": "array"
          },
          "prefer_together": {
            "description": "Soft preference: try to seat these people together; scored, not forced. Each inner list is one rule, e.g. [[\"Mia\",\"Zoe\"]].",
            "items": {
              "items": {
                "maxLength": 80,
                "type": "string"
              },
              "maxItems": 12,
              "minItems": 2,
              "type": "array"
            },
            "maxItems": 200,
            "type": "array"
          },
          "previous_seat_order": {
            "description": "Classroom rotation: last chart's seat_order from this tool (names by seat number, \"\" for empty desks). The new chart avoids last time's neighbours and desks.",
            "items": {
              "maxLength": 80,
              "type": "string"
            },
            "maxItems": 400,
            "type": "array"
          },
          "roster_file": {
            "description": "Optional class roster or guest list as CSV, TSV or Excel .xlsx with a header row: a Name column (or First/Last), and optional Party/Household, Group/Label, Front seat, VIP, Child, RSVP, Keep apart (names) and Table columns, e.g. guests.xlsx.",
            "properties": {
              "download_url": {
                "description": "Temporary download link for the file, supplied by ChatGPT.",
                "type": "string"
              },
              "file_id": {
                "description": "ChatGPT file id, e.g. file_abc123.",
                "type": "string"
              },
              "file_name": {
                "description": "Original file name if known, e.g. statement.pdf.",
                "type": "string"
              },
              "mime_type": {
                "description": "Media type if known, e.g. application/pdf.",
                "type": "string"
              }
            },
            "required": [
              "download_url",
              "file_id"
            ],
            "type": "object"
          },
          "rows": {
            "description": "Classroom rows/pairs: number of rows from the front, e.g. 5.",
            "maximum": 20,
            "minimum": 1,
            "type": "integer"
          },
          "seats_per_table": {
            "description": "Events shorthand: seats per regular table, e.g. 8 (default) or 10.",
            "maximum": 40,
            "minimum": 1,
            "type": "integer"
          },
          "seed": {
            "description": "Shuffle number, e.g. 1 (default). The same inputs and seed give the same chart; use another number to reshuffle.",
            "maximum": 999999999,
            "minimum": 1,
            "type": "integer"
          },
          "table_count": {
            "description": "Events shorthand: number of regular guest tables, e.g. 12. Default: just enough.",
            "maximum": 100,
            "minimum": 1,
            "type": "integer"
          },
          "tables": {
            "description": "Events: table setup, e.g. [{\"count\":1,\"seats\":10,\"type\":\"head\",\"shape\":\"long\"},{\"count\":12,\"seats\":8}].",
            "items": {
              "properties": {
                "count": {
                  "description": "How many tables of this kind, e.g. 10.",
                  "maximum": 100,
                  "minimum": 1,
                  "type": "integer"
                },
                "seats": {
                  "description": "Seats at each of these tables, e.g. 8.",
                  "maximum": 40,
                  "minimum": 1,
                  "type": "integer"
                },
                "shape": {
                  "description": "round (default) or long (rectangular banquet table).",
                  "enum": [
                    "round",
                    "long"
                  ],
                  "type": "string"
                },
                "type": {
                  "description": "guest (default), head (for VIP guests only) or kids (for children only).",
                  "enum": [
                    "guest",
                    "head",
                    "kids"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "count",
                "seats"
              ],
              "type": "object"
            },
            "maxItems": 10,
            "type": "array"
          },
          "title": {
            "description": "Title printed on the chart, e.g. Period 3 - Room 114, or Lee & Park Wedding.",
            "maxLength": 80,
            "type": "string"
          }
        },
        "required": [
          "mode"
        ],
        "type": "object"
      },
      "name": "generate_seating_chart"
    }
  ]
}

What the leaf hashes

{"body":"3d0dd29de5ed7f00acb856219ddbb6eacb4885df5c7b3ca505c2c47f9471cbb3","id":292904,"kind":"mcp.tools","method":"probe.mcp/1","observed_us":1793049032547108,"prev":null,"subject":"ffb805ee-46cb-489e-8f91-8908ae504dc2","subject_kind":"endpoint"}

Proof

Fold these into the leaf in order, hashing each sorted pair with keccak256, to reach the root of (296695 rows).

  1. 0x507333550151bb020530aa4ffb9171b58f0d683426d90deb24d671100f38e22d
  2. 0x77cc431cbd5de59cf1c59a32a4be0259e7a958fedc79b5ccec4fb0b4143655e6
  3. 0x3f6fa069ab0f222a25f18402f631cb62aaee6772cedd8da14f0ab335c902343d
  4. 0x346be8f36a55c6abd08f9ea65d62f6cd1336dc2dfb82c68fe3a680b42c6249d7
  5. 0xa0d1a87e24c9221b1bd033295af30e3623431785a855584847e351e5c8b53033
  6. 0xe67db23bd036f32d2a81e007cb6f5ccbdbe30d7e05698294df2a7f51d2da6b6b
  7. 0x7dbda2a66ec4ceac18184c3d7afdcb65a4a9f7817db6a32c2389e7fb49df88c5
  8. 0xa089ecfdd63d1a81eccc85915cc1deb4fa44e156d2f429935f64b94080f15d4e
  9. 0x1ce8c17427e7cda68d27094400df00e10add7924ee994e68f479021a800ed65b
  10. 0x3ffc29bda4b9db0bbd22701201836cd30915524996019abd0333ddffdac24a1e
  11. 0xe281245a49847bca87f4c96f8da0284eeef688f3f597a62adb2d9089f4385e55
  12. 0xecaf47ba75097c34f2d3c4d62539dace0db8b484bf08941a9259e2d1e8ccea77
  13. 0xf7d2cf278e5d2768b8bdb70730c378877cf7165d8efcbec8bcd3282fdc50d177
  14. 0x0733993143f0230e79482cef2c38e95d98f9eafbe64a43cdc74a4545938a4167
  15. 0x2be1e80e065dd6b2cc75a7142be22225acd144ac975d70bf24b4f01fd76dc497
  16. 0x2e6a32eb32761c210560e852405e2f865f958ddbe01027894f8b9c1b3433b9f0
  17. 0x9a83be955a206deb65b995adfd92c58fa31c95fbbf926bd199d300e70b08b26d
  18. 0x20704208aa6923d6b2450ef74ede87a6e0265d46447926038fe9506e9e154b2d
  19. 0x9b9ce5b74b9bab5121612ef6b64920a8d453cbf311096a423eef9702747e868a
Day root
0xf43e8dcc3d451a4788b26be904c55e8c4c0fa75c9666796c51db38d37e2c0df8
Chained
0x702d5ac508f08b0d1accf36af25822d8e5660367494edd17a642fb61e158a57a
Published
On Arc Testnet, block 69251483: 0x495162f8936e19f0039918feebe6c307f327cd6bf8c37219620b1970041fa9ae

How to check it · This row as JSON