-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtool.json
More file actions
45 lines (45 loc) · 5.17 KB
/
Copy pathtool.json
File metadata and controls
45 lines (45 loc) · 5.17 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
{
"name": "tablekit",
"family_class": "transport",
"description": "Glue and instrumentation for a live tabletop game where some seats are AI agents. Produces one append-only JSONL per session that is simultaneously the play ledger (dmcheck-compatible) and a five-lane telemetry stream: qa (did the machinery work), qc (was the refereeing correct), ux (what the seat's evening looked like), uxr (how it felt from a seat - inferred from ordinary speech during play, then asked about conversationally at the close), out (outcome pairs recording whether a craft move actually worked).",
"invocation": {
"command": "tablekit",
"subcommands": {
"init [path]": "Write a starter table.json. Exit 2 if the file exists.",
"beat \"<text>\" [--cue SEAT] [--chunks N]": "Record a GM beat; opens a cue pair and checks the cue is deliverable. Exit 1 if the cue would be dropped in transit.",
"inbound --seat S --text \"...\" [--pair ID]": "Record what a seat said (who spoke and how much; prose is not stored by default). Closing a compatible cue/checkin pair requires --pair ID even when only one candidate is open; missing correlation is quarantined and the candidate IDs remain visible. Player text is never parsed for commands or keywords.",
"roll --seat S \"<what for>\"": "Open a roll outcome pair.",
"consumed <pair-id> [--outcome ...]": "Close one explicit pair using an outcome valid for that pair kind. Exit 2 for unknown, closed, mismatched, or invalid lifecycle transitions.",
"checkin --seat S": "Record checking on a quiet seat and open a checkin pair; resolve it only with an explicitly correlated inbound.",
"turn --seat S [--wait N]": "Record that a seat got the floor.",
"qc [--state FILE] [--json]": "Run and automatically record a typed self-attested evaluation with exact coverage/cursor. Exit 0 clean, 1 findings/advisories, 2 incomplete.",
"pairs [--json]": "List outcome pairs still open.",
"sweep": "Close pairs past their TTL with named outcomes. Exit 1 if any expired.",
"report [--json] [--out FILE]": "Post-session report. Exit 0 coverage-complete clean, 1 findings/advisories or unresolved routing quarantines, 2 stale/invalid/incomplete or insufficient data.",
"schema": "Repo-local event schema, route statuses, typed pair outcomes, signal buckets and exit codes as JSON.",
"contract evaluation|event|golden": "Print the packaged table.evaluation/1.0 schema, table.event/1.0 schema, or ordered interoperability fixture. These contracts are self-attested until an external host supplies protected authority.",
"migrate-events --ledger LEGACY.jsonl --campaign ID --session ID --out EVENTS.jsonl [--source-instance ID]": "Deterministically project lossless legacy evidence to a separate self-attested table.event/1.0 stream; print machine-readable coverage and refuse malformed/zero-compatible input.",
"signal --seat S --kind pacing --quote \"<their words>\"": "Record a signal inferred from what a player already said. Buckets: pacing, floor, comprehension, resonance, spotlight, continuity. The quote is mandatory - an inference without evidence cannot be audited. Advisory always; can never become a defect.",
"debrief": "With no arguments, print the plain-English close-out questions to ask in your own words. With --seat/--q/--a, record an answer."
}
},
"output": "Human-readable text by default; --json where offered. The session file is JSONL, one object per line, every line carrying ts and type.",
"transport": {
"write_default": "disabled; transport.write_enabled must be the JSON boolean true",
"inspect": "Python: post.prepare(cfg, text, cue=..., operation_id=...) returns the immutable bounded payload plan without ledger or network I/O.",
"deliver": "Python: post.post(...) returns disabled, invalid, failed, partial, or committed. Only committed is complete delivery. Persist operation_id; post.resume(...) reconstructs the complete bounded plan from the ledger after interruption.",
"safety": "Unintended mentions are denied; only the explicit cue target can ping once. Every chunk is bounded and nonce-protected; successes are durably receipted, and interrupted unreceipted delivery is remotely reconciled before resume can resend. Live enablement remains gated by docs/TRANSPORT.md."
},
"notes": "Three contracts the tool will not bend. (1) THE TABLE SPEAKS ENGLISH: players are never given a command syntax, token vocabulary or keywords - text RPGs did that because 1980s parsers could not understand sentences, and an agent GM that reintroduces it throws away its only advantage over a parser game. Enforced by tests. All commands here are operator-side. (2) An inferred signal is advisory in every path and can never become a defect. (3) Below three occurrences the report lists individual moments and refuses to state a rate. No composite score is produced anywhere, by design.",
"exit_codes": {
"0": "clean",
"1": "findings worth looking at",
"2": "cannot adjudicate — refused, or not enough data to judge (route to a human)",
"3": "usage error — unknown command or flag (fix the call and retry)"
},
"related": {
"srdcheck": "rules verdicts",
"charactercheck": "character sheet derivation",
"dmcheck": "table conduct; reads this kit's session file directly"
}
}