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 |