# Mechanics Check

> Audit SENTINEL game data integrity. Validates regions, jobs, vehicles, and favors against schema enums.

- Skill: `majiayu000/mechanics-check` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds add majiayu000/mechanics-check`
- Raw SKILL.md: https://api.skillmd.com/api/skills/majiayu000/mechanics-check/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Security
- Author: majiayu000 (https://skillmd.com/u/majiayu000)
- Updated: 2026-09-09
- Page: https://skillmd.com/skills/majiayu000/mechanics-check

---


# Mechanics Integrity Check

Validate SENTINEL game data consistency to catch bugs before they surface during play.

## When to Use

- After modifying `regions.json`, job templates, or favor costs
- Before committing game data changes
- When adding new factions, regions, or mission types
- After updating schema enums
- Periodic health checks on game data

## How to Run

### Quick Check (Recommended)

Run the validation script directly:

```bash
python C:/dev/SENTINEL/sentinel-agent/scripts/check_mechanics.py
```

### JSON Output (for CI/automation)

```bash
python C:/dev/SENTINEL/sentinel-agent/scripts/check_mechanics.py --json
```

### Present Results

Format the output as an actionable checklist:

```markdown
## Mechanics Health Report

### Status: [HEALTHY | NEEDS ATTENTION | BROKEN]

### Issues Found
- [ ] Issue 1 (ERROR) — must fix
- [ ] Issue 2 (WARNING) — should investigate
- [ ] Issue 3 (INFO) — informational

### Recommendations
- ...
```

## What It Checks

### Regions (`data/regions.json`)
- All 11 Region enum values have entries
- `primary_faction` and `contested_by` reference valid faction IDs
- `adjacent` lists contain valid region IDs
- Adjacency is bidirectional (if A→B then B→A)

### Jobs (`data/jobs/*.json`)
- `faction` matches FactionName enum (display names)
- `type` matches MissionType enum
- `region` (if present) matches Region enum
- `opposing_factions` contain valid faction names
- `requires_vehicle_tags` exist in at least one vehicle
- `requires_vehicle_type` matches actual vehicle types

### Vehicles (`tui_commands.py` VEHICLE_DATA)
- All job-required tags exist in at least one vehicle
- Reports orphan tags (defined but not used by any job) as INFO

### Favors (`systems/favors.py`)
- All FavorType values have costs defined
- All Disposition levels have favor mappings and cost modifiers

## Severity Levels

| Severity | Meaning | Action |
|----------|---------|--------|
| ERROR | Breaks game functionality | Must fix |
| WARNING | Inconsistency that may work | Should investigate |
| INFO | Suggestion or design note | Optional |

## Exit Codes

| Code | Meaning |
|------|---------|
| 0 | All checks passed (HEALTHY) |
| 1 | Warnings only (NEEDS ATTENTION) |
| 2 | Errors found (BROKEN) |

## Tips

- Run after any `schema.py` changes that add/remove enum values
- The check is read-only — it never modifies files
- JSON output can be filtered with jq:
  ```bash
  python check_mechanics.py --json | jq '.issues[] | select(.severity == "error")'
  ```
- Orphan vehicle tags (INFO) are not bugs — they're future-proofing for jobs not yet written

## Data Sources

| Data | Location |
|------|----------|
| Schema enums | `src/state/schema.py` |
| Regions | `data/regions.json` |
| Jobs | `data/jobs/*.json` |
| Vehicles | `src/interface/tui_commands.py` |
| Favors | `src/systems/favors.py` |

