Public, deterministic mechanism used by Ambient Signal, an offline paranormal field-investigation application.
This repository is the canonical specification and reproducible implementation of the mapping from environmental PCM bytes to one dictionary entry. The mobile application is separate and private. The core is public so that results can be inspected, hashed, and independently reproduced.
Canonical raw PCM bytes are hashed with SHA-256 and mapped, with equal probability and no modulo bias, onto one entry in a fixed US-English dictionary.
The application that captures the microphone data is responsible for providing those bytes. This repository does not capture audio.
Ambient Signal Core does not:
- perform speech recognition
- analyze EVP content
- classify sounds
- use AI
- contact a server
- use location
- use question text
- infer paranormal activity
- favor particular words
It does not interpret the selected entry or claim paranormal causation.
Every unique dictionary entry has equal theoretical selection probability under Algorithm 1.0.0.
Category membership (word, first_name, surname, vulgar) and displaySensitivity (vulgar, explicit, slur) are metadata only. They do not duplicate entries and do not change probability. There is no frequency weighting and no “spooky word” weighting.
Canonical manifest: core/version.json
| Field | Value |
|---|---|
coreVersion |
1.0.3 |
dictionaryVersion |
1.2.0 |
algorithmVersion |
1.0.0 |
| Entry count | 93,111 |
| Dictionary SHA-256 | f2334978b74abe0c754cea95fcd200d62179aa6b949d0ea2a4e1579451158dfc |
| entriesSha256 | 464a57a9aded103042df71af9c8286776044a799a1e66d1c54466acdbddc35be |
| Categories | first_name, surname, vulgar, word |
| displaySensitivity | explicit, slur, vulgar |
| Canonical dictionary | core/dictionary/dictionary-v1.json |
| Field | Bump when |
|---|---|
coreVersion |
a public core release |
dictionaryVersion |
selection-relevant dictionary contents change, or presentation metadata release |
algorithmVersion |
PCM → hash → index behavior changes |
These versions are independent. See docs/VERSIONING.md.
Canonical file: core/dictionary/dictionary-v1.json
Published metadata: core/dictionary/dictionary-v1.meta.json
Dictionary 1.2.0 adds presentation-only displaySensitivity metadata on 220 existing entries (115 vulgar, 93 explicit, 28 slur; some entries carry multiple values). Selection entry count (93,111), IDs, values, alphabetical order, and entriesSha256 are unchanged from Dictionary 1.1.0. Algorithm 1.0.0 is unchanged.
The vulgar category from Dictionary 1.1.0 is retained for backward compatibility. UI masking should use displaySensitivity, not category membership alone.
Historical Dictionary 1.1.0 audit: audit/dictionary-1.1.0/build-report.md. Dictionary 1.2.0 display-sensitivity audit: audit/dictionary-1.2.0/display-sensitivity-report.md.
Sources:
- SCOWL / ESDB American English, size 60, pinned commit in
dictionary-builder/config.yaml - SSA historical first-name data, union of documented popularity/breadth rules
- US Census 2010 surnames, top 5,000 by rank
- Vulgar supplement v1 curated US-English profanity/crude language (
core/dictionary/supplements/vulgar-v1.txt)
Values are lowercase, unique, and ordered alphabetically with contiguous IDs from 0. Categories are merged onto a single slot per unique value.
Details: docs/DICTIONARY.md.
canonical PCM bytes
-> SHA-256
-> 256-bit unsigned integer
-> rejection sampling into [0, N)
-> dictionary entry
Simple hash % N is not used, because it is biased when 2^256 is not divisible by N.
Rejected hashes are re-derived with a documented domain separator, the original PCM digest, and a 32-bit big-endian counter. See docs/ALGORITHM.md. The reference implementation is core/src/select.ts.
The core depends only on the PCM bytes and the dictionary. It does not depend on React Native or Expo.
Algorithm 1.0.0 behavior is unchanged across dictionary releases. When the dictionary grows or reorders, N changes and selection outputs for the same PCM bytes change accordingly.
# metadata and first entries
python3 -c "import json; d=json.load(open('core/dictionary/dictionary-v1.json')); print(d['metadata']); print(d['entries'][0])"npm ci
npm run dictionary:verify
sha256sum core/dictionary/dictionary-v1.jsonCompare the digest to core/dictionary/dictionary-v1.meta.json.
Public vectors: core/vectors/test-vectors.json
npm test
npm run core:verifyAn independent implementation of Algorithm 1.0.0 must reproduce the published vectors for the dictionary identified in that file (dictionaryVersion + dictionarySha256). Vectors are regenerated when the canonical dictionary release changes.
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
npm run dictionary:buildRequires network access on first run (git, SSA zip, Census zip, SCOWL make). CI does not regenerate from upstream sources; it verifies the committed artifact. See docs/GENERATED_FILE_POLICY.md.
Follow docs/ALGORITHM.md exactly (byte encodings, domain separator, counter, big-endian integer). Check against the test vectors. Do not read the private application for the mapping rules; this repository is authoritative.
npm ci
npm test
npm run validate
npm run dictionary:verify
npm run core:verify
npm run release:check
npm run docs:sync
npm run docs:checkOptional:
npm run dictionary:build
npm run version:core -- 1.0.3
npm run version:dictionary -- 1.2.0
npm run version:algorithm -- 1.1.0release:check fails on test failure, dictionary hash/metadata mismatch, invalid IDs, duplicate values, failed test vectors, invalid version manifest, missing license/attribution files, documentation drift versus published versions, or a selection-relevant dictionary/algorithm change without the corresponding version bump.
The private Ambient Signal application must pin a specific core release (tag/package version). It must not silently track main. Investigation sessions should record coreVersion, dictionaryVersion, dictionarySHA256, and algorithmVersion.
- Original Ambient Signal Core software: MIT
- Third-party dictionary sources: THIRD_PARTY_NOTICES.md and
licenses/
MIT does not relicense SCOWL/ESDB, SSA, or Census data.
Ambient Signal Core is a deterministic lookup from bytes to a dictionary entry. It is not a detector, classifier, or communication protocol. Using it during a field investigation does not establish paranormal causation.