Post-disaster building damage record layer: per-building damage state (danger / caution / inspected / unsurveyed) + confidence + provenance, bound to persistent PLATEAU building IDs. Honest by construction: covered=false ⇒ value=null.
Project description
plateau-triage 🚩
English · 日本語
After an earthquake, which buildings do you send rescuers to first —
and which ones has nobody even checked yet?
What it is
After a disaster a city has tens of thousands of buildings and far too few inspectors. plateau-triage turns disaster imagery into a building-by-building map of damage — and its one rule is that a building nobody has checked is never allowed to look "fine".
The trap it fixes: most damage maps leave un-inspected buildings blank — which looks exactly like "safe", so responders skip them. plateau-triage instead gives every building one of four explicit labels:
🔴 danger · 🟡 caution · 🟢 inspected — safe · ⬜ not yet surveyed
The grey "not yet surveyed" is the whole point: a building no one has looked at is shown as unknown — never assumed safe. A coverage meter tells you how much of the city is still grey ("8,000 / 30,000 checked — 73% unknown"), so the question becomes "what haven't we checked?" instead of "no red marks, must be fine."
Click any building to see where its status came from
Every label is traceable: which image, when, how confident, and the official building ID it's bound to. A grey building says, in plain words, "nobody has looked here — not assumed safe."
Who uses it, and how
- A response HQ opens the map and reads the coverage meter — danger first, and "not yet surveyed" ranked above "confirmed safe", because an unknown building may be the most dangerous one on the block.
- An inspector clicks a building to see where its status came from, decides whether to trust it or go look, and the record updates after the site visit.
- A relief desk exports the records straight into existing systems — a screening feed for the victim-support system (被災者支援システム) and a pre-fill for the disaster-victim certificate (罹災証明). Unsurveyed buildings carry no claim, so the system can never issue a certificate for a building nobody checked.
Data comes either from public satellite datasets (bulk import) or from drone / street capture in the field — and when the drone can't see a building clearly, that building is honestly marked not yet surveyed, not guessed.
Quickstart
pip install plateau-triage # from PyPI
plateau-triage demo --out out/ # runs on a bundled earthquake sample
plateau-triage — Noto demo
ingested 12 footprints from the bundled Copernicus Noto sample
coverage: 8 / 12 assessed; 33% unknown
state breakdown:
🔴 危険 danger 3
🟡 要注意 caution 3
🟢 調査済 inspected 2
⬜ 未調査 unsurveyed 4
outputs:
triage.geojson · coverage.json · records.duckdb
support_system.csv · risai_shomei.csv
(危険 / 要注意 / 調査済 / 未調査 are the values actually stored in each record —
the Japanese emergency risk-assessment labels for danger / caution / inspected /
not-surveyed.)
See the map (the red/yellow/green/grey 3D view above, bilingual JP/EN):
make demo && make viz-data # build the demo data
make viz-install && make viz-dev # http://localhost:5173
Field capture (drone / street) and exports for existing systems:
plateau-triage capture --out out/ # drone capture → records
plateau-triage export --records out/records.duckdb --out feed.csv --format both
How it works
satellite / public datasets ──┐ ┌── drone / street capture
(bulk import) │ │ (weak / unseen ⇒ not surveyed)
▼ ▼
honest per-building records (missing data ⇒ not surveyed, never "safe")
│ bind to a persistent building ID
▼
┌──────────── record layer (GeoParquet / DuckDB) ────────────┐
• coverage meter — "how much have we NOT checked?"
• map feed (red/yellow/green/grey) → the plateau-r3f viewer
• query — look a building up; list what's still unchecked
• export — victim-support-system feed + disaster-certificate pre-fill
• eval — proves, on public data, that it says "unknown" when it should
| part | what it does |
|---|---|
plateau_triage.record |
the one record shape + the four states; the honesty rule lives here |
plateau_triage.accrue |
bring data in — ingest_batch (datasets) and ingest_capture (drone/street) |
plateau_triage.bind |
pin each record to a persistent building ID (plateau-id-resolve) |
plateau_triage.coverage |
the coverage meter + triage ordering (unknown above confirmed-safe) |
plateau_triage.store |
the record layer on disk (GeoParquet / DuckDB) |
plateau_triage.query |
look up a building / list what's still unchecked (mounted by caveat-mcp) |
plateau_triage.export |
feeds for the victim-support system + disaster-certificate pre-fill |
plateau_triage.eval |
self-proving honesty score (calibration + symmetric penalty) |
viz/ |
the plateau-r3f web viewer (Vite + React Three Fiber, bilingual) |
Honest by construction
The core rule — a not-surveyed building never carries a value or gets called
safe — is enforced independently at every layer (write, storage, field
extraction, export, query), so a regression is a test failure, not a silent
slip. The rule, and the seven places it's enforced, are written up in
docs/honesty-spec.md. For the data model it is the
literal invariant covered=false ⇒ value=null.
For developers
- The record is a frozen, shared contract (
contracts/record.schema.json), also projectable onto SOSA + PROV-O and checkable in SHACL — standards alignment, not a new standard. See docs/standards.md. pip install -e ".[dev,shacl]"thenpython -m pytest(118 tests) andcd viz && npm run build.- Docs: honesty-spec · standards · data-sources · integration.
- Contributing: CONTRIBUTING.md.
License
Code Apache-2.0 (LICENSE); data CC BY 4.0
(LICENSE-DATA, incl. PLATEAU / Copernicus attribution).
This is a screening layer that feeds existing systems — not a replacement for the legal official damage assessment (被害認定調査) a human signs.
Yodo Labs · PixelX Inc. / ピクセルエックス株式会社
yodolabs.jp · pan@yodolabs.jp
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file plateau_triage-0.1.4.tar.gz.
File metadata
- Download URL: plateau_triage-0.1.4.tar.gz
- Upload date:
- Size: 63.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5ef424735bc825d941ab63c23ddce7a44efc4bdf17fca13eef06134dacf89b4b
|
|
| MD5 |
58123f185f89dbd04821afc45be9a090
|
|
| BLAKE2b-256 |
52f91f6f13c0bb0b30b18053223a171e0b7089871f45e936efd639317b93f711
|
Provenance
The following attestation bundles were made for plateau_triage-0.1.4.tar.gz:
Publisher:
release.yml on pixelx-jp/plateau_triage
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
plateau_triage-0.1.4.tar.gz -
Subject digest:
5ef424735bc825d941ab63c23ddce7a44efc4bdf17fca13eef06134dacf89b4b - Sigstore transparency entry: 1816731487
- Sigstore integration time:
-
Permalink:
pixelx-jp/plateau_triage@2c2bb589aa7839ad6aa76947afcf9100438d18b4 -
Branch / Tag:
refs/tags/v0.1.4 - Owner: https://github.com/pixelx-jp
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@2c2bb589aa7839ad6aa76947afcf9100438d18b4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file plateau_triage-0.1.4-py3-none-any.whl.
File metadata
- Download URL: plateau_triage-0.1.4-py3-none-any.whl
- Upload date:
- Size: 59.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
31032dd34524484eea86e84cedda535ce14af66b94252e136e990f34e829e273
|
|
| MD5 |
abcc7f2e6ac1622c9b6ee7afca0ab83d
|
|
| BLAKE2b-256 |
ba5c16d7b7bb0cda56bfff00c17581e1659926fdb34ef0016b4a45f50ac5f697
|
Provenance
The following attestation bundles were made for plateau_triage-0.1.4-py3-none-any.whl:
Publisher:
release.yml on pixelx-jp/plateau_triage
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
plateau_triage-0.1.4-py3-none-any.whl -
Subject digest:
31032dd34524484eea86e84cedda535ce14af66b94252e136e990f34e829e273 - Sigstore transparency entry: 1816731627
- Sigstore integration time:
-
Permalink:
pixelx-jp/plateau_triage@2c2bb589aa7839ad6aa76947afcf9100438d18b4 -
Branch / Tag:
refs/tags/v0.1.4 - Owner: https://github.com/pixelx-jp
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@2c2bb589aa7839ad6aa76947afcf9100438d18b4 -
Trigger Event:
push
-
Statement type: