Skip to content

About

The Three Senses Alerting Standard: open rules, rhythm vocabulary, SDK, and conformance suite for emergency alerts readable by sight, touch, or hearing alone. See it. Feel it. Hear it.

Topics

Resources

Security policy

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

74 Commits

Folders and files

Repository files navigation

The Three Senses Alerting Standard

npm CI DOI

Status: Draft 0.11.0. This is a public draft, not a ratified standard. The normative vocabulary (vocabulary.json) and the conformance vectors (conformance/vectors.json) may change before 1.0, so implementations should pin an exact version. The DOI above cites this draft, not a final specification.

See it. Feel it. Hear it. One shared rhythm for all. Open rules that make every emergency warning detectable by sight, touch, or hearing alone, with the full warning, including the action, guaranteed in accessible language.

The one-bell problem

The fire alarm carries exactly one message: get out. In a tsunami, going outside is lethal and the roof is safety; in a tornado, the basement is. Three dangers, three opposite escapes, one bell.

The building often knows which hazard is coming; the alarm has no vocabulary to say it. This standard is that missing vocabulary: a small set of hazard families, each carried by a rhythm the body can learn, so the signal itself says which danger arrived, before a single word is read.

A child feels WATER on a wristband and knows: climb, not run.

Where the rhythms come from

These rhythms come from sign languages. Deaf people have carried the shape of danger in our hands for centuries. Now that knowledge can save everyone.

FIRE is ten rapid pulses, like the fingers of the sign for fire flickering upward. WATER is long soft rolls a breath apart, like the rolling hand of the signs for waves. GROUND is one unbroken hold, like the sustained-shaking signs for earthquake. THREAT, TEST and OTHER are deliberately abstract, because a human threat and a drill have no natural signature to imitate. Mimesis is a design hypothesis under human testing, and vocabulary.json records it as one, family by family.

Deaf people have been the crash-test bodies of every warning failure. We would rather be its engineers.

An alert designed for the body that hears nothing reaches every body.

What is in this repository

  • THE-STANDARD.md: the specification (draft 0.11.0)
  • vocabulary.json: the normative, machine-readable rhythm vocabulary
  • conformance/vectors.json: machine-checkable conformance vectors (R1 to R8)
  • conformance/validate.mjs: checks a rendering log against the vectors
  • SMS-PROFILE.md: informative annex, a five-character code (3S:W4) that lets SMS-based alerting (no cell broadcast, humanitarian settings) drive the vocabulary with one regex, no AI; parseSmsCode() in the SDK
  • CAP-PROFILE.md: informative annex on accessibility at the SOURCE: how an alert originator carries an official FCC ASL template video as a CAP <resource> and Three Senses metadata as namespaced CAP <parameter> blocks; implemented by @ideafe/three-senses/compose (the Three Senses Alert Composer core, developed under a Memorandum of Agreement with FEMA's IPAWS Program Management Office for the IPAWS-OPEN test environment) and the three-senses compose / templates CLI commands
  • wea-asl-templates.json: the FCC WEA template / ASL video map, all 18 adopted template texts (DA 25-12 Appendix C) paired with their official FCC ASL videos (coverage is complete: every adopted text has a video). Two demo-era action messages (Evacuation Immediate, Shelter in Place) are carried as annotated stubs: no adopted text, no official video. ⚠ Maps ≤ v0.10.1 carried prose (and ≤ v0.10.0 carried video IDs) derived from the FCC's Feb-2024 DEMO-ONLY set; use v0.10.2+.
  • docs/signed-template-library.md: a non-normative guide to building a signed template library
  • CHANGELOG.md: governance events and releases
  • FAQ.md, SECURITY.md, LICENSE (Apache-2.0), LICENSE-SPEC.md (specification text, CC BY 4.0) and STANDARDS-GRANT.md
  • scripts/check-consistency.mjs: the repo-wide consistency gate, run by npm test and npm run check
  • src/, dist/: the SDK (@ideafe/three-senses), TypeScript, zero dependencies, conformance-proven against the vectors in CI

Published by International Deaf Emergency, a Deaf-led US 501(c)(3) nonprofit. Canonical page: ideafe.org/standard. Reference implementation: Deaflare. As of 2026-08-20, Deaflare renders live federal alerts: it consumes the FEMA IPAWS-OPEN All-Hazards feed (production and the TDL staging lab) alongside the NWS public API, mapping real CAP v1.2 alerts through this vocabulary's hazard families. FEMA lab traffic is rendered under the standard's TEST treatment.

Why a changed rhythm is not Three Senses

Morse code gave the world one shared rhythm language, and to this day everyone knows SOS. Nobody owns it. That is why it works.

Anyone may implement this standard, free, forever (Apache-2.0 data and code). But a warning language only works if it is the same everywhere, like the siren. So the vocabulary is versioned and published only here, the standard's names identify conformant implementations only, and the specification text is CC BY 4.0 so anyone may quote, translate and build on it. Fork the code all you like; if you change what FIRE feels like, it is not Three Senses anymore.

The SDK

TypeScript, zero runtime dependencies, works in Node (18+) and browsers.

npm install @ideafe/three-senses

(Installing straight from this repository also works: npm install github:Signlo/three-senses.)

Timelines, severity, and conformance (Node or browser):

import {
  timeline,
  cycleMs,
  cycleStart,
  channelLevel,
  vibratePattern,
  conformance,
} from "@ideafe/three-senses";

timeline("FIRE"); // { steps: [{at: 0, event: "on"}, ...], totalMs: 4000 }
cycleMs("WATER"); // 6000, the normative repeat interval (R8)
channelLevel("TEST", "Extreme"); // 0.3, a drill is capped, always (R6)
vibratePattern("STORM"); // [500, 1000, 500, 1000, 500]
conformance().pass; // true, this SDK proven against the vectors

Play an alert in a browser, all channels on one clock:

import { startAlert } from "@ideafe/three-senses/web";

const alert = startAlert("FIRE", {
  severity: "Extreme",
  onFlash: (on) => beacon.classList.toggle("lit", on), // any light you own
  tone: true, // 520 Hz, gated on the same envelope
  vibrate: true, // Vibration API where available
});
acknowledgeButton.onclick = () => alert.stop(); // I UNDERSTAND

The renderer callback design is deliberate: the SDK owns the clock and the rhythm; you own the surface, whether a DOM element, a torch, a smart bulb, or a building beacon. Severity only ever changes the level. ALL_CLEAR plays its gentle, self-terminating release cue and never loops.

And a CLI:

npx three-senses list
npx three-senses show FIRE
npx three-senses conformance   # proves the SDK against the vectors
npx three-senses log FIRE      # a render log for conformance/validate.mjs
npx three-senses templates     # the FCC WEA template / ASL video map
npx three-senses compose in.json   # CAP 1.2 + IPAWS-profile XML ("-" reads stdin)

To work on the SDK itself: npm install, then npm test (consistency gate, build, and the node --test suite).

Conformance in one command

Render the vocabulary, log your events as JSON, then:

node conformance/validate.mjs your-render-log.json

An SDK-based implementation can emit that log directly with renderLog(family); the SDK's own test suite runs exactly this check, plus negative controls (a wrong rhythm and a trimmed loop both fail).

Versioning

Rhythm changes are major versions and governance events, never code tweaks. Draft 0.1.0 was the first proposal by the standard's Deaf author. Draft 0.2.0 (the day after) came from the author's repetition review: urgent alerts loop with no pause, and the 0.1.0 patterns fused across the loop boundary (two long waves became one). Every family except GROUND now ends in a trailing quiet (requirement R8). Draft 0.3.0 refined TEST to a quick grouped double tap. Draft 0.4.0 split severity by channel purpose: touch grades in four strengths for DeafBlind reading, marks count the step, and light and sound deliver at full power from the middle tier. Draft 0.6.0, after an external FCC-style audit, reframed the all-clear as an affirmative calmly-presented message (silence is never evidence of safety), split the five questions across attention and language channels, and added originator-suppression, timing-tolerance, amplitude-capability, and CAP-mapping rules, plus a standards adaptation grant. No rhythm changed. Draft 0.7.0 gave the all-clear its own RELEASE cue, and 0.8.0 refined it after a three-expert panel. Draft 0.9.0 is the alignment release after a second external audit, and added the repo-wide consistency gate (scripts/check-consistency.mjs). Draft 0.11.0 adds the surface rules S1 to S4 (repetition on surfaces without controls, the overlay profile, relays that never rewrite, light on large displays). Section 8 of THE-STANDARD.md keeps the full lineage, and CHANGELOG.md records each governance event and release. Structured usability testing with Deaf and DeafBlind participants is underway and will shape the next draft.

How this repository was written

This repository was written with AI coding tools, under the direction and review of Emmanuel Jacq, who founded International Deaf Emergency (IDE). This is what the git history shows, counted on 3 November 2026 with git log (the 73 commits from 2026-08-17 until this section was added):

  • 69 commits are authored by IDE's automation account, signlo-platform-bot[bot], which commits the work of AI coding agents. The other 4 are Dependabot version bumps. No commit is authored by a human account.
  • 14 commits carry a Co-authored-by: Claude trailer (Claude, Anthropic). The other commits of the automation account do not name the tool, so the trailer is a minimum, not a count of AI use.
  • Git cannot tell which lines a person typed. We do not claim that any part of the code or text was written by hand.
Part Commits that touched it With a Claude trailer
THE-STANDARD.md (specification) 17 5
vocabulary.json (rhythm vocabulary) 15 4
src/ (SDK) 17 5
conformance/ (conformance suite) 15 4
test/ (tests) 10 4
scripts/ 7 2
CAP-PROFILE.md 6 1
SMS-PROFILE.md 4 1
README.md 26 10

A commit that touches two parts is counted in both rows. Every commit above went through the automation account, which commits the work of AI coding agents; the trailer column only shows where the tool is named.

The rule from here on: new code for the Three Senses Notify component, if the NLnet Restack Fund proposal is granted, is written by a human developer, not by generative AI. AI may be used only to read the code, for example to point out possible bugs, and each such use will be stated in this README and in the commit.

Citing the standard

Every release is archived on Zenodo. Cite the concept DOI, which always resolves to the latest version:

Jacq, E. (2026). The Three Senses Alerting Standard. International Deaf Emergency. Zenodo. https://doi.org/10.5281/zenodo.21977982

Citation metadata ships in CITATION.cff; GitHub's "Cite this repository" button uses it.

About

The Three Senses Alerting Standard: open rules, rhythm vocabulary, SDK, and conformance suite for emergency alerts readable by sight, touch, or hearing alone. See it. Feel it. Hear it.

Topics

Resources

Security policy

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages