Back

Suno · the machinery behind the warning

What the citizen screen is the last hundred metres of.

The app is one end of a pipeline. This page is the rest of it: the feed that would be ingested, an independent check that disagrees with it out loud, and the channels that decide whether a warning ever reaches a person. The CAP reader below is real code and runs on whatever you paste into it. The scan and the delivery model are simulations of real designs, and each says so.

Nothing on this page connects to a government system. That is a rule of the brief, not a shortcut: live ingestion of Sachet would need an agreement with NDMA, and cell broadcast needs an authority designated under the Disaster Management Act 2005. What is shown is the shape those integrations would take.

01

Ingest — CAP v1.2

Sachet, IMD, CWC and INCOIS already publish in CAP v1.2. Everywhere else on this site we claim that swapping our synthetic feed for a live one is a parser change rather than a redesign. This is the parser. Edit the XML and watch the warning screen's fields change — including the count of <info> blocks, which is the number this entire product is about.

Paste CAP XML
Parsed
Level 4

Dhansiri above danger mark - leave low ground now

identifier
CWC-GHY.2026.0417
event
Severe Flood
severity
Extreme
urgency
Immediate
certainty
Observed
area
Golaghat district, Assam - Dhansiri left bank
hazard matched
flood
district geocode
golaghat
Instructions extracted
  1. 1.Leave for higher ground now.
  2. 2.Take drinking water, daily medicines and ID papers in a sealed bag.
  3. 3.Switch off the main electricity switch before you leave.
  4. 4.Do not walk or drive through moving water.
Language blocks in this alert
1 / 13 possible

One block means one language. The format allows one per language and the sender filled a single slot — which is the entire problem this product exists to solve.

Parser notes
  • Exactly one <info> block. CAP allows one per language; a single block means this alert is deliverable in one language only.
What this reader does not do
  • Reads the first <info> block only. A real feed carries one per language, and the production reader would iterate them — that is the whole point of the format and it is section 03 on /how-it-runs.
  • Does not verify the XML digital signature. A production ingester must, because an unsigned alert is an unauthenticated one.
  • Does not resolve <polygon> or <circle> geometry. Areas are matched by <geocode> and by name against our district table.
  • Does not follow <references> for updates and cancellations, so a Cancel message is parsed but not applied.
  • Entity handling covers the five predefined XML entities and numeric escapes, not custom DTDs.
The same alert, emitted with three language blocks

The other direction. This is what a filled CAP document looks like — the format needs no extension to carry thirteen languages, only a sender who fills the blocks.

<?xml version="1.0" encoding="UTF-8"?>
<alert xmlns="urn:oasis:names:tc:emergency:cap:1.2">
  <identifier>CWC-GHY.2026.0417</identifier>
  <sender>cwc.brahmaputra@synthetic.invalid</sender>
  <sent>2026-08-29T09:12:00+05:30</sent>
  <status>Actual</status>
  <msgType>Alert</msgType>
  <scope>Public</scope>
  <info>
    <language>en-IN</language>
    <category>Met</category>
    <event>Severe Flood</event>
    <urgency>Immediate</urgency>
    <severity>Extreme</severity>
    <certainty>Observed</certainty>
    <senderName>Central Water Commission — Brahmaputra Division</senderName>
    <headline>Dhansiri above danger mark — leave low ground now</headline>
    <description>River Dhansiri at Numaligarh gauge reading 79.42 m against a danger level of 78.60 m, rising at 11 cm/hr over the last three observations. Inflow from upper catchment continues. Left bank embankment at Ch. 14.2 km reported under strain. Inundation of low-lying revenue villages expected within 2 hours.</description>
    <instruction>Leave for higher ground now. Do not wait for water to reach your door.
Take drinking water, any daily medicines, and your ID papers in a sealed bag.
Switch off the main electricity switch before you leave.
Tell one neighbour which way you are going.</instruction>
    <area>
      <areaDesc>Golaghat district, Assam — Dhansiri left bank</areaDesc>
      <geocode>
        <valueName>district</valueName>
        <value>golaghat</value>
      </geocode>
    </area>
  </info>
  <info>
    <language>as-IN</language>
    <category>Met</category>
    <event>Severe Flood</event>
    <urgency>Immediate</urgency>
    <severity>Extreme</severity>
    <certainty>Observed</certainty>
    <senderName>Central Water Commission — Brahmaputra Division</senderName>
    <headline>ধনশিৰি বিপদ চিহ্নৰ ওপৰত</headline>
    <description>…</description>
    <instruction>এতিয়াই উচ্চ ভূমিলৈ যাওক।</instruction>
    <area>
      <areaDesc>Golaghat district, Assam — Dhansiri left bank</areaDesc>
      <geocode>
        <valueName>district</valueName>
        <value>golaghat</value>
      </geocode>
    </area>
  </info>
  <info>
    <language>hi-IN</language>
    <category>Met</category>
    <event>Severe Flood</event>
    <urgency>Immediate</urgency>
    <severity>Extreme</severity>
    <certainty>Observed</certainty>
    <senderName>Central Water Commission — Brahmaputra Division</senderName>
    <headline>धनसिरी खतरे के निशान से ऊपर</headline>
    <description>…</description>
    <instruction>अभी ऊँची जगह पर जाएँ।</instruction>
    <area>
      <areaDesc>Golaghat district, Assam — Dhansiri left bank</areaDesc>
      <geocode>
        <valueName>district</valueName>
        <value>golaghat</value>
      </geocode>
    </area>
  </info>
</alert>
02

An independent scan, and where it disagrees

Running our own risk surface alongside the official feed is only useful if we publish the disagreement. A system that silently overrides an official alert has appointed itself the authority; one that silently suppresses its own signal has thrown away its only independent check. The official level is always what the citizen screen shows — this is an instrument for a district officer, not an override.

Simulated — nothing is connected

The weather driving this scan is generated deterministically per district. In production the inputs would be Open-Meteo — free, no key, all 72+ districts in a handful of bulk calls — together with CWC gauge readings and the GSI landslide thresholds. What is real here is the shape: plain arithmetic with published weights, no model anywhere near it, and every score showing its inputs.

Agree
29
Scan reads higher
3
Agency reads higher
3
Scan only, no alert
37
Shimla, Himachal Pradeshofficial 2 · scan 3 · score 64

Our scan reads higher than the official warning. The official level is what citizens see; this disagreement is surfaced for a human to resolve, never used to escalate automatically.

Wayanad, Keralaofficial 2 · scan 3 · score 60

Our scan reads higher than the official warning. The official level is what citizens see; this disagreement is surfaced for a human to resolve, never used to escalate automatically.

Jodhpur, Rajasthanofficial 1 · scan 2 · score 51

Our scan reads higher than the official warning. The official level is what citizens see; this disagreement is surfaced for a human to resolve, never used to escalate automatically.

Chamoli, Uttarakhandofficial 3 · scan 2 · score 51

The issuing agency reads higher than our scan. They have gauges, radar and staff on the ground that we do not. Their level stands, and the gap tells us where our model is weak.

Golaghat, Assamofficial 4 · scan 2 · score 50

The issuing agency reads higher than our scan. They have gauges, radar and staff on the ground that we do not. Their level stands, and the gap tells us where our model is weak.

The weights, and one district worked through
rainfall 34soilSaturation 22hazardSeasonality 18terrain 14populationDensity 12
Thane — score 86, level 4
Rainfall, 72 hours225 mm+34
Soil saturation67%+15
Hazard seasonality85%+15
Terrain exposureurban-flood+10
Population density1,10,60,148+12
03

Deliver — a generated warning is not a delivered one

Choose a live warning and see what each bearer would and would not achieve. The channel characteristics are real; the transmission is not.

Simulated — nothing is connected

Nothing is transmitted. There is no SMS gateway, no bot token, and no cell-broadcast entity, because those need operator agreements and — for cell broadcast — an authority designated under the DM Act 2005. Reach is derived from the district population already in our dataset; latencies are the published orders of magnitude for each bearer.

Optimistic union reach
8.0 lakhof 10.7 lakh under this warning

The union across channels is not the sum — the same person is on several. This assumes the channels are independent, which overstates reach, so treat it as an optimistic bound. Untick cell broadcast and watch it collapse: that single permission is worth more than every other channel put together.

Cell broadcastunavailable
0 reached10s latencyno list neededworks on a feature phone

The only bearer that reaches a district in seconds without knowing who is in it. It is broadcast to a cell, not sent to a number, so there is no list to be missing from. India's CB-based system carries a limited set of languages per message; the number of <info> blocks the upstream alert carries is the ceiling on that.

Operated by Telecom operators, on instruction from NDMA / SDMA. Not authorised. Cell broadcast is issued by the designated authority under the DM Act 2005, not by an application. Without that designation this channel does not exist for us.

SMSdegraded
3.6 lakh reached15 min latencyneeds a listworks on a feature phone

Needs a subscriber list, which means it reaches people who registered — not people who are there. At district scale the queue itself becomes the delay: fifteen minutes is optimistic for a few hundred thousand messages.

Operated by Telecom operators via a registered sender. Reaches 34% — those on the list, not those in the district.

App notificationdegraded
85,351 reached5s latencyneeds a listsmartphone only

Fast and free, and reaches only people who already installed something before the emergency. Useful as a supplement, indefensible as a primary.

Operated by This service. Reaches 8% — those on the list, not those in the district.

Outbound voice call (IVR)degraded
2.2 lakh reached30 min latencyneeds a listworks on a feature phone

The channel for someone who cannot read at all, on a phone that cannot render a screen. Slow and expensive per call, and the only one on this list that works for a person with no literacy in any script.

Operated by Telecom operators / state call centre. Reaches 21% — those on the list, not those in the district.

Telegram / messagingdegraded
53,344 reached4s latencyneeds a listsmartphone only

Effectively free and instant, and reaches a self-selected audience: journalists, volunteers, district staff. Better understood as a coordination channel than a public warning one.

Operated by This service, via a bot. Reaches 5% — those on the list, not those in the district.

TV and radio crawldelivered
4.9 lakh reached10 min latencyno list neededworks on a feature phone

No list, wide reach, and it finds people who are not looking at a phone. It cannot be targeted below the broadcast region, so a district warning goes to a state.

Operated by Prasar Bharati and private broadcasters. Reaches 46% with no list required.

None of the three stages above is the hard part. The CAP reader is a hundred lines, the scan is arithmetic, and the fan-out is a table. The hard part is the row that says “operated by telecom operators on instruction from NDMA” — a permission, not a program. This page exists to be honest about which of the two we are short of.

The population ranking, the independent scan and the per-channel delivery truth on this page are adapted from BhimShila (github.com/CyNoGeN1109/bhimshila), which is the best work in this space and does all three against live feeds. Ours are simulations, because the brief requires simulated integrations — the ideas are theirs and are credited here and in the source.