Generated by
scripts/capability_map.py; CI checks freshness. Use the JSON companion for agent consumption.
- Canonical promise: A legal result means only that the query's named checked scope passed. It is not a claim of global or complete legality.
- Authority: srdcheck reports an advisory SRD-derived rule_result. The authorized DM, whether human or agent, owns table_decision; recording one never rewrites the rule result or implies state mutation.
- Prose: The why field is explanatory and non-contractual. Consumers obtain the verdict schema identity from --schema, MCP outputSchema, or capabilities, then branch on verdict, exit_code, coverage_level, checked_scope, unchecked_scope, assumptions, facts, rule_result, table_decision, state_mutation, rule_ids, citations, and structured data instead of parsing why.
- Vision: Target capabilities are labeled target and are never advertised as executable tools.
Machine metadata lives in data; agents branch on it instead of parsing why. An authorized agent-DM may resolve a DM-authority table ruling directly.
| reason | recoverability | default next action | authority |
|---|---|---|---|
invalid-input |
retry |
repair-request |
— |
missing-fact |
retry |
provide-facts |
— |
unsupported-content |
alternate-path |
select-adapter |
— |
unmodeled-rule |
alternate-path |
use-other-capability |
— |
rules-ambiguous |
authority |
resolve-table-ruling |
dm |
gm-discretion |
authority |
resolve-table-ruling |
dm |
stale-state |
conflict |
reconcile-state |
— |
srdcheck.observability/1.0 is out-of-band, disabled by default, and metadata-only.
Engine 0.9.0; verdict schema 4.0; compatibility N/N-1 over 0.9, 0.8.
| adapter | adapter version | data version | rules version | digest |
|---|---|---|---|---|
srd-5.1 |
0.1.0 |
0.1.0 |
0.0.0 |
39e4a7891480… |
srd-5.2.1 |
0.2.1 |
0.2.1 |
0.2.1 |
fc9f0ccaa099… |
toy-tictactoe |
0.1.0 |
0.1.0 |
0.1.0 |
45746ba2683f… |
A legal result below means only that the named checked scope passed.
| tool | capability | checked scope | explicitly unchecked | evidence |
|---|---|---|---|---|
jurisdiction |
Check whether a name occurs in a loaded adapter registry and report every matching content category. | registry membership; all matching registry categories | mechanical legality; whether an unknown name is a typo, homebrew, or third-party content | tests/test_kernel.py::test_jurisdiction_known_content; tests/test_kernel.py::test_jurisdiction_unknown_content; tests/test_kernel.py::test_jurisdiction_returns_all_categories_for_colliding_name |
turn_plan |
Check a proposed turn against the modeled action-economy and movement budgets. | action, bonus-action, reaction, interaction, movement, and spell-slot-per-turn budgets; modeled condition effects on those budgets | whether a feature grants an action; targets, ranges, line of sight, cover, inventory, and bespoke feature prerequisites | tests/test_turn_economy.py::test_two_bonus_actions_illegal; tests/test_enumeration.py::test_t5_consistency_sweep |
turn_options |
Enumerate remaining modeled action-economy option kinds. | remaining budget option kinds; movement remaining and modeled stand/crawl costs | every legal creature action; feature-specific actions, targets, geometry, and tactics | tests/test_enumeration.py::test_t5_consistency_sweep |
reaction_available |
Check whether the modeled reaction budget is available. | reaction spent since turn start; Incapacitated and the Stunned, Paralyzed, Petrified, and Unconscious definitional embeds | whether a proposed trigger occurred; target and range legality | tests/test_turn_economy.py::test_reaction_available_honors_incapacitated_and_embeds; tests/test_turn_economy.py::test_reaction_available_refuses_unknown_and_non_condition_names |
roll_compose |
Compose caller-supplied Advantage and Disadvantage sources. | cancellation and non-stacking of supplied sources; reroll-one-die note | discovering sources from narrative or character state; rolling dice | tests/test_roll_modifiers.py::test_two_adv_one_dis_is_straight; tests/test_roll_modifiers.py::test_stacked_advantage_still_two_dice |
attack_modifiers |
Compose modeled attack modifiers from structured combatant facts. | documented condition modifiers; Prone distance behavior; condition-sensitive fact dependencies and category gates; ranged attacks in close combat with Incapacitated embeds | cover and line-of-sight geometry not supplied as facts; weapon or feature prerequisites | tests/test_condition_fact_dependencies.py::test_attack_condition_fact_matrices; tests/test_condition_fact_dependencies.py::test_ranged_enemy_dependency_claim_evidence; tests/test_condition_fact_dependencies.py::test_condition_category_gate_claim_evidence; tests/test_condition_fact_dependencies.py::test_transport_parity_claim_evidence |
mage_hand_use |
Check one proposed Mage Hand use against its modeled grants, prohibitions, weight, and range. | listed uses and prohibitions; 10-pound limit; 30-foot range for the proposal | fine-manipulation ambiguity; duration or range trigger tracking across events; narrative consequences | tests/test_kernel.py::test_mage_hand_demo_goldens |
event_apply |
Evaluate one supported event into a precondition-bound, idempotent transition proposal. | declared event validation and supported state transitions; full state-precondition and deterministic result hashes; stable transition identity and rule/ruling lineage | persisting state; generating events; advancing time autonomously; geometry; bespoke spell effects | tests/test_ledger.py::test_lineage_chain_and_tamper_detection; tests/test_state_precondition_commits.py::test_proposals_and_result_hashes_are_deterministic_and_input_bound |
transition_commit |
Verify a state-bound transition for an atomic caller-owned commit or idempotent retry. | state compare-and-swap precondition; deterministic proposal integrity; idempotent committed-result replay; typed stale-state conflicts | server-side persistence; choosing event order; distributed locking; Discord delivery guarantees | tests/test_state_precondition_commits.py::test_commit_is_idempotent_without_server_side_state; tests/test_state_precondition_commits.py::test_concurrent_and_out_of_order_discord_events_conflict_then_reconcile; tests/test_state_precondition_commits.py::test_tampered_proposal_and_false_retry_fail_closed |
creature_valid |
Classify whether a name is a registered SRD 5.2.1 creature. | creature registry membership; source citation for a match | creature action legality; third-party content; typo diagnosis | tests/test_creature_queries.py::test_valid_creature_is_legal_and_cited |
creature_stats |
Return registered Challenge Rating and XP facts for a creature. | name, Challenge Rating, XP, and source citation | stat-block actions and traits; encounter or turn legality | tests/test_creature_queries.py::test_stats_returns_cr_xp_citation |
encounter_xp_budget |
Compute the SRD encounter XP budget from supplied level, difficulty, and party size. | per-character and total XP budget arithmetic | encounter suitability; monster tactics; party composition beyond size and level | tests/test_encounter_budget.py::test_issue_example; tests/test_encounter_budget.py::test_cited |
save_check |
Compose or resolve a saving throw from caller-supplied facts and roll. | DC comparison; modeled condition modifiers and auto-fails; supplied d20 and modifiers | rolling dice; deriving sheet modifiers; effects of success or failure | tests/test_combat_resolution.py::test_save_meets_or_exceeds_dc; tests/test_combat_resolution.py::test_paralyzed_petrified_stunned_unconscious_auto_fail_str_dex |
check_make |
Compose or resolve an ability check from caller-supplied facts and roll. | DC comparison; modeled condition and social modifiers; condition-sensitive fact dependencies and category gates; supplied d20 and modifiers | rolling dice; choosing a DC; deriving modifiers; narrative outcome | tests/test_condition_fact_dependencies.py::test_check_condition_fact_matrices; tests/test_condition_fact_dependencies.py::test_condition_category_gate_claim_evidence; tests/test_condition_fact_dependencies.py::test_transport_parity_claim_evidence |
concentration_check |
Compute and optionally resolve the concentration save caused by supplied damage. | damage-derived DC; supplied Constitution modifier and d20 result | tracking concentration over time; detecting damage events; rolling dice | tests/test_combat_resolution.py::test_concentration_dc_is_half_damage_floor_10_cap_30; tests/test_combat_resolution.py::test_concentration_resolves_when_roll_supplied |
opportunity_attack_provoked |
Check provocation from caller-supplied movement and visibility facts. | supplied movement kind; supplied reach-exit and visibility facts on a potentially provoking voluntary path; Disengage, teleportation, and forced-movement exceptions | facts the caller omitted; computing geometry or reach exit; reaction availability; attack resolution | tests/test_opportunity_attack.py::test_voluntary_movement_by_a_seen_creature_provokes; tests/test_opportunity_attack.py::test_disengage_teleport_and_forced_movement_do_not_provoke; tests/test_opportunity_attack.py::test_missing_positive_prerequisites_refuse_instead_of_defaulting_true |
grapple_initiate |
Check Grapple or Shove initiation and compose its save DC formula. | caller-supplied attacker and target sizes; caller-supplied free-hand fact for Grapple; save DC formula and supplied formula blanks | prerequisite facts the caller omitted; escape contests; reach geometry; rolling or resolving the target save | tests/test_grapple.py::test_target_more_than_one_size_larger_is_impossible; tests/test_grapple.py::test_grapple_requires_a_free_hand; tests/test_grapple.py::test_missing_prerequisite_facts_refuse_instead_of_defaulting_medium_or_free; tests/test_formula_blanks.py::TestGrappleBlanks::test_no_blanks_yields_formula_never_a_number |
passive_perception |
Compute Passive Perception from a supplied modifier. | 10 plus supplied Wisdom (Perception) modifier; refusal of the non-SRD plus-or-minus-five convention | deriving the modifier; Hide contests; line of sight and lighting | tests/test_passive_perception.py::test_score_is_10_plus_modifier; tests/test_passive_perception.py::test_advantage_disadvantage_are_refused_as_non_srd |
help_assist |
Check modeled prerequisites for the Help action. | caller-supplied ability-check proficiency fact; caller-supplied attack-assist five-foot fact; Advantage grant | facts the caller omitted; whether assistance is fictionally possible; geometry discovery; the authorized DM's table ruling | tests/test_help_action.py::test_assist_ability_check_needs_the_relevant_proficiency; tests/test_help_action.py::test_assist_attack_roll_needs_an_enemy_within_5ft |
spell_facts |
Return registered casting-time, range, component, duration, and concentration facts. | registered spell facts; fixed-duration expiry arithmetic on a caller clock | spell effects; whether casting is legal; slots, targets, and stateful expiry triggers | tests/test_spell_facts.py::test_ward_regression; tests/test_spell_facts.py::test_mage_hand_not_concentration |
feature_uses |
Return the modeled use-count formula for the closed feature set. | Divine Sense and Lay on Hands formulas; arithmetic when all blanks are supplied | other features; tables; whether a use remains in campaign state | tests/test_spell_facts.py::test_divine_sense_blanks; tests/test_spell_facts.py::test_lay_on_hands_blanks |
ttt_move |
Check one move against the bundled tutorial ruleset. | board shape, turn order, cell occupancy, and terminal state | strategy; choosing a move | tests/test_toy_adapter.py::test_move_legality |
ttt_options |
Enumerate legal cells under the bundled tutorial ruleset. | legal empty cells for the current player | strategy; ranking options | tests/test_toy_adapter.py::test_enumerate_validate_consistency |
table_evaluation |
Project one native rules query into table.evaluation/1.0 with machine-readable scope, caller references, and portable evidence. | deterministic projection of one named query; self-attested coverage and exact finding evidence; caller-owned session, entity, and correlation references | global action or table legality; table, encounter-state, or execution authority; protected-host attestation | tests/test_table_evaluation.py; tests/test_mcp.py::test_table_evaluation_tool_is_opt_in_scoped_and_joinable; scripts/cold_artifact_smoke.py |
These entries are roadmap intent, not executable capability claims.
| target | intended capability | current truth |
|---|---|---|
batched-turn-orchestration |
Adjudicate a natural-language, multi-rule turn in one call. | Current tools accept structured, capability-specific calls; the caller parses intent and orchestrates them. |
creature-action-enumeration |
Enumerate every legal move for a creature from its full features and scene state. | turn.options enumerates modeled budget kinds, not creature-specific actions, targets, or tactics. |
spatial-geometry-cover-light |
Derive line of sight, lighting, cover, reach, and legal destinations from a map. | Current checks consume relevant geometry facts supplied by a caller or another rail. |
hide-lifecycle |
Adjudicate Hide preconditions, legal locations, and its future end triggers. | Current tools can resolve a caller-structured check and Passive Perception but do not implement Hide or its lifecycle. |
jump-distance |
Adjudicate and enumerate jump destinations. | No shipped query models jumping. |
duration-trigger-tracking |
Arm and resolve spell, condition, and feature triggers across future events. | spell.facts reports durations and event.apply folds only its declared event set; neither autonomously tracks future triggers. |
character-build-legality |
Validate level-up and character-build prerequisites. | No shipped query adjudicates builds or stamps level-ups. |