Skip to content

submit_review

Science

The structured outcome of a review: a verdict, a QuakeML event type, a confidence, a solution-quality label, evidence that points at this session's ledger, and optional falsification checks and configurations tried. The server validates the record mechanically. It does not judge whether the seismology is right.

Evidence items must cite a tool_call_id from this session that succeeded. When a JSON Pointer path is given it must resolve in that call's stored payload. The value field is free text a reader compares; v1 does not check it against the pointed-at number. An accepted review with balanced evidence and verdict uncertain is a correct outcome, not a failure.

Profiles that require a review to close the session do so only through this tool. A rejected attempt counts against max_attempts. Structural rules (escalation text, proposed solution, rejection cause, rerun menu) are listed in the generated contract; they are checkability rules, not scientific ones.

Event types follow the QuakeML vocabulary (https://quake.ethz.ch/quakeml/): earthquake, quarry blast, not existing, and the other listed types.

Contract

Generated from the live registry (ToolSpec). Field names, types and defaults come from the input and payload models; they are not hand-typed.

Group review
Class
Tool version 1.0.0
Highest declared tier F
Timeout 5 s
Budget key none
readOnlyHint false
idempotentHint false

Input

Field Type Required Notes
verdict string ∈ {confirm, reject, uncertain, reclassify, needs_more_data} yes
event_type string ∈ {earthquake, quarry blast, explosion, mining explosion, induced or triggered event, not existing, other event, not reported} yes
rejection_cause string ∈ {teleseism_leakage, noise_artefact, mis_association, duplicate, out_of_network, other} | null no default null
confidence number yes 0; ≤ 1
solution_quality string ∈ {good, fair, poor, not_assessed} yes
untrustworthy_params array[string ∈ {origin_time, latitude, longitude, depth, magnitude}] yes
proposed_solution object (kind catalog | solution) | null no default null
recommended_action string ∈ {publish, queue_for_human, discard, rerun} yes
rerun_config object | null no default null
rerun_config.picker string ∈ {phasenet, eqtransformer} | null no default null
rerun_config.picker_threshold number ∈ {0.1, 0.2, 0.3, 0.5} | null no default null
rerun_config.filter_band string ∈ {none, 0.5-5, 1-20, 2-8, 2-15} | null no default null
rerun_config.channel string ∈ {Z, horizontals, all} | null no default null
rerun_config.depth_mode string ∈ {free, fixed_5, fixed_10, fixed_15} | null no default null
rerun_config.grid string ∈ {shallow, deep} | null no default null
rerun_config.associator string ∈ {gamma, pyocto} | null no default null
rerun_config.phase_set string ∈ {all, p_only} | null no default null
rerun_config.arrival_model string ∈ {nll_grid, taup_iasp91} | null no default null
rerun_config.time_axis string ∈ {absolute, reduced_p} | null no default null
rerun_config.normalize string ∈ {per_trace, common} | null no default null
evidence array[object] yes
evidence[].claim string yes
evidence[].tool_call_id string yes
evidence[].path string | null no default null
evidence[].value string yes
evidence[].supports string ∈ {confirm, reject, reclassify, uncertain} yes
evidence[].weight string ∈ {strong, moderate, weak} yes
falsification array[object] yes
falsification[].check string yes
falsification[].tool_call_ids array[string] yes
falsification[].result string yes
falsification[].passed boolean yes
configurations_tried array[object] yes
configurations_tried[].tool_call_id string yes
configurations_tried[].hypothesis string yes
configurations_tried[].config object yes
configurations_tried[].result string yes
escalation_reason string | null no default null
notes string yes

Payload

Field Type Required Notes
review_id integer yes
accepted boolean yes
session_status string ∈ {open, submitted, failed_to_submit} yes
record_digest string yes

Example request

{
  "verdict": "reject",
  "event_type": "not existing",
  "rejection_cause": "teleseism_leakage",
  "confidence": 0.86,
  "solution_quality": "poor",
  "untrustworthy_params": [
    "depth",
    "magnitude"
  ],
  "proposed_solution": null,
  "recommended_action": "discard",
  "rerun_config": null,
  "evidence": [
    {
      "claim": "7 of 9 picks fit the us7000abcd P arrival within 15 s",
      "tool_call_id": "tc-0009",
      "path": "/best/matched_fraction",
      "value": "0.78",
      "supports": "reject",
      "weight": "strong"
    }
  ],
  "falsification": [
    {
      "check": "jackknife max shift below 5 km",
      "tool_call_ids": [
        "tc-0012"
      ],
      "result": "max_shift_km 6.2",
      "passed": false
    }
  ],
  "configurations_tried": [
    {
      "tool_call_id": "tc-0011",
      "hypothesis": "grid artefact",
      "config": {
        "grid": "shallow",
        "depth_mode": "free"
      },
      "result": "depth 8 km, rms 0.29"
    }
  ],
  "escalation_reason": null,
  "notes": "opinions belong here and nowhere else"
}

Example payload

{
  "review_id": 77,
  "accepted": true,
  "session_status": "submitted",
  "record_digest": "sha256:3456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef012"
}

What this tool does not tell you

What this tool does not tell you: whether the review is right. It tells you whether it is checkable. An accepted review with balanced evidence and verdict uncertain is a correct outcome, not a failure.

Errors named for this tool

Code When
E_SCHEMA R1 — schema, enums, confidence in 0..1, unknown properties
E_EVIDENCE_INVALID R2 empty evidence, or R3 unknown/failed/foreign tool_call_id or path
E_REVIEW_INVALID R4–R8 structural rules (rule in detail)
E_PARAM_NOT_IN_MENU R8 rerun_config value is off-menu
E_SESSION_CLOSED R9 attempt budget spent, token expired, or the session is already closed