{"data":{"kind":"file","path":"README.md","version_id":"qhwv84ud6x987yh9dlgiez29","entry":{"name":"README.md","path":"README.md","is_directory":false,"size":4335,"modified_at":"2026-09-23T14:08:02.228000","content_hash":"e3b651b9bd3419547b819a07175eaac9d525ed71fce830343b2168115e78f328"},"entries":[],"content":"# Disaster Response Hub\n\n**Version 1.0.1** - a `verifiers` environment for disaster response coordination:\nincident triage under a published doctrine, resource allocation against hard\ninventory constraints, and SITREP reporting whose numbers must reconcile with\nthe model's own allocation table.\n\nThe model sits at the Disaster Response Hub as operations coordinator. Each\nprompt is one incoming situation report (3-5 concurrent incidents plus a fixed\nresource inventory). The model must issue a response directive: triage every\nincident, commit units without exceeding the inventory, and write a SITREP.\n\n## Task structure\n\n| Piece | Detail |\n| --- | --- |\n| Incidents | 3-5 per scenario (4-5 in the harder third), attributes: type, affected population, life-safety risk 0-3, infrastructure criticality 0-3, access open/denied, required resource type |\n| Inventory | 6 resource types with whole-unit capacities, always enough to cover P1 minimums |\n| Output | `## TRIAGE`, `## ALLOCATION`, `## SITREP` with 5 mandatory subsections |\n| Ground truth | computed server-side from the doctrine, delivered to the rubric as `answer` JSON |\n\n## Doctrine (published in the system prompt)\n\n- severity score = `3 * life_safety + 2 * infra_criticality + population_band + access_penalty`\n- tiers: P1 if score >= 8, P2 if 5-7, P3 if <= 4, with two floor overrides\n  (life-safety risk 3 -> at least P2; population >= 25 000 with infra 3 -> at least P2)\n- P1 staffing minimum = `ceil(population / 5 000) + life_safety_risk` units of the\n  incident's required resource type\n- allocation must stay inside the inventory; discretionary sends are only\n  permitted once every P1 minimum is met\n\nThe doctrine is fully published on purpose: the trained skill is disciplined,\naccurate application across several incidents at once, not guessing hidden\nrules. Truth is still computed independently server-side, so it cannot be\nfished out of the prompt.\n\n## Metrics\n\n| Metric | Weight | What it measures |\n| --- | --- | --- |\n| `check_triage_accuracy` | 0.30 | fraction of incidents assigned exactly the doctrine-computed tier |\n| `check_allocation_feasibility` | 0.30 | integer units, inventory honoured, every P1 minimum met, no discretionary sends before P1 coverage |\n| `check_sitrep_integrity` | 0.20 | five subsections filled, figures with units, resource totals reconcile with the ALLOCATION table |\n| `check_safety_coverage` | 0.15 | every life-safety incident (risk >= 2) named in Life Safety with a life-saving action |\n| `check_directive_format` | 0.05 | three top-level sections, every incident triaged and allocated |\n\n`check_allocation_feasibility` acts as an execution gate: zero P1 coverage\nscores 0.0 overall, so a directive that ignores trapped persons earns nothing.\n\n## Why the metrics resist gaming\n\n- tiers and staffing minimums are compared against computed ground truth the\n  model never sees - keyword stuffing cannot produce them;\n- the inventory check parses the model's own table and adds it up, so inflated\n  numbers fail arithmetic that is actually enforced;\n- SITREP reconciliation compares the SITREP numbers against the model's own\n  ALLOCATION table - two inconsistent halves both lose points;\n- life-safety coverage requires incident ids **and** action stems for the exact\n  incidents whose ground-truth risk is 2 or 3;\n- every metric needs several independent sub-conditions and all of them are\n  crash-proof on empty or malformed completions.\n\n## Layout\n\n```\ndisaster_response_hub/\n  __init__.py        load_environment() entry point (v1.0.1)\n  prompts.py         doctrine + directive output contract\n  scenarios.py       seeded scenario generation + deterministic ground truth\n  parsing.py         crash-proof directive parsers\n  rewards.py         five async rubric metrics\n  tests/             pytest regression suite\n```\n\n## Usage\n\n```python\nimport verifiers as vf\n\nenv = vf.load_environment(\"adorjan/disaster-response-hub\")\n# or locally:\nfrom disaster_response_hub import load_environment\nenv = load_environment(num_scenarios=24, seed=1729)\n```\n\nRun the test suite from the environment root:\n\n```bash\npython -m pytest disaster_response_hub/tests -q\n```\n\n## Versioning\n\n- **1.0.1** - initial published release: doctrine-based triage, gated\n  allocation feasibility, cross-checked SITREP integrity, life-safety coverage.\n","encoding":"utf-8","truncated":false,"total_bytes":4335},"status":null}