AI Decision System
Replayable, offline-verifiable records for AI-assisted go/no-go decisions: experiment promotions, typed model answers and human-approved actions.
翻译准备中
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证正在加载完整 README。 以下为已保存的摘录。
A phone network that works when every network is gone — and can tell the difference
between a phone that went quiet and a phone that was destroyed.
Native Android app (Kotlin + Jetpack Compose) that forms an offline Bluetooth
store-carry-forward mesh between phones during a disaster. Built for Avinya 2026,
problem statements PS2 (Ground-Zero Communication Blackout) and PS5
(Post-Disaster Information Fog).查看完整 README ↗A phone network that works when every network is gone — and can tell the difference between a phone that went quiet and a phone that was destroyed.
Native Android app (Kotlin + Jetpack Compose) that forms an offline Bluetooth store-carry-forward mesh between phones during a disaster. Built for Avinya 2026, problem statements PS2 (Ground-Zero Communication Blackout) and PS5 (Post-Disaster Information Fog).
Live: site · download the APK · install card (QR)
Every packet declares next_expected_tx — how many seconds until the sender
intends to transmit again. So when a phone goes silent, the network can classify
that silence:
| Silence | Meaning |
|---|---|
| Expected | Battery was critical; the phone warned us. Deprioritise. |
| Unexpected | Promised to speak in 60 s, vanished at 12 s with 70 % battery. The phone was destroyed. Escalate. |
| Cell loss | ≥ 3 phones in one ~100 m cell, ≥ 80 % gone within 120 s. The area collapsed — rendered as a hatched, timestamped hole on the map. |
We infer destruction from the shape of the hole in the data.
It also produces a triage signal no other system has: rank victims by who is about to stop transmitting — reach the phone at 4 % before it goes dark, not after.
Prebuilt APK (signed release build, com.thezone, ~7 MB, minSdk 26):
main rebuilds and redeploys it.pwa/zone.apk in this repo (identical file, same signature)adb install -r pwa/zone.apk
On the phone: install, allow "install from this source" the first time, open, pick a mode (Citizen / Responder / Map). Grant Bluetooth + Location when asked (Android requires Location for BLE scanning). Settings → Apps → Zone → Battery → Unrestricted, or the OS throttles the radio in the background.
Package id: com.thezone · label: Zone.
There is no GitHub Release for this project — the signed APK is only
distributed through the Vercel link above and the committed pwa/zone.apk,
so there is exactly one artifact to keep current, not two.
Requires JDK 17 and the Android SDK (API 34). If you have Android Studio, its bundled JBR works:
export JAVA_HOME="/Applications/Android Studio.app/Contents/jbr/Contents/Home"
./gradlew :app:testDebugUnitTest # 56 unit tests — packet codec, silence, triage
./gradlew :app:assembleDebug # -> app/build/outputs/apk/debug/app-debug.apk
./gradlew :app:installDebug # build + install on every attached device
Helper scripts:
| Script | What it does |
|---|---|
scripts/deploy.sh [--launch] | build, install on every adb device, grant perms, doze-whitelist, print BT/airplane/location state |
scripts/release.sh | build the APK and stage it at pwa/zone.apk for the site |
scripts/make-explainer-pdf.sh | render docs/EXPLAINER.html → docs/Zone-Explainer.pdf |
Full field checklist in docs/PHONE_TEST.md; recorded
results in docs/H8_VALIDATION.md.
| Role | Phone in our validation | Why |
|---|---|---|
| P1 — Trapped | Samsung Galaxy S23 | only phone with a barometer (vertical triage) |
| P2 — Carrier | Realme 7 | has Coded PHY; the phone that covers distance |
| P3 — Responder | Motorola Edge 50 Pro | best screen, mirrored to the projector |
The moment: P1 broadcasts from another room with its Bluetooth off after pickup; P2 is walked from P1 to P3; P3 now shows P1's signal at hop 2. The message crossed the room in someone's pocket.
If BLE won't cooperate on stage: any phone → long-press → Debug → H2 → Simulated → Start. Every non-walk part of the demo still runs — the logic is transport-agnostic.
app/src/main/kotlin/com/thezone/
transport/ ReportTransport interface + BleTransport / SimulatedTransport / FileTransport
BleForegroundService keeps the active transport alive across screen lock
packet/ Packet, PacketCodec (31 bytes, pure Kotlin, unit tested), DeviceIdentity
core/ ReportStore (content-addressed, union merge) · SilenceEvaluator (Dead Man's Packet)
TriageScorer · CorroborationScorer · Barometry · GridCells
sensors/ PressureReader -> Altitude (relative, EMA-smoothed, trend)
ui/ CitizenScreen · ResponderScreen + DigHereScreen · MapScreen · theme/
probe/ MainActivity — mode router, permission gate, H0/H2 debug host
config/ IncidentConfig (position origin, shared responder key) · LangStore
persistence/ StatePersistence — crash-safe JSON snapshot of the store + collapses
diagnostics/ CrashLog — on-device crash file, no analytics
app/src/test/ JVM unit tests (no Android deps in core/, packet/, or identity/)
pwa/ landing page + staged zone.apk + install card (Vercel: outputDirectory = pwa, see vercel.json)
docs/ specs, build plan, field checklist, explainer
scripts/ deploy / release / pdf helpers
.github/ CI — unit tests + assembleDebug on push
core/ and packet/ have zero Android imports and run on the plain JVM.
| File | |
|---|---|
docs/PRD.md | product requirements — §4 Dead Man's Packet, §5 triage, §7 limitations |
docs/PACKET_SPEC.md | authoritative 31-byte packet contract + test vectors |
docs/BUILD_PLAN.md | H0→H8 phased build order, checkpoints, cuts |
docs/PHONE_TEST.md | on-device field checklist + failure drills |
docs/H8_VALIDATION.md | three-phone validation results (2026-08-30) |
docs/EXPLAINER.html / docs/Zone-Explainer.pdf | the full field explainer — problem, USP, every feature, proof |
CLAUDE.md | build rules and architecture constraints |
Hackathon build (v0.1) — validated on three real phones in airplane mode (2026-08-30): direct link, 2-hop store-carry-forward, expected vs unexpected silence told apart, barometric floor detection, drowning escalation, Dig Here, and cell loss in a 500-node simulator replaying the real Rasuwagadhi toll curve (22 → 95 → 469 → 626 over 72 h).
v0.3 adds crash-safe persistence, a real GPS position with a configurable
incident origin, inferred TRAPPED from sustained immobility, a real app
identity + icon, Sybil-resistant scoring, an on-device crash log, a "Keep Zone
alive" battery-setup screen, a pre-shared responder key (verifiable RESPONDER
packets, no crypto library), a RESOLVE packet type (mesh-wide "reached"),
hot/cold Dig Here, an optional headcount, continuous live-EOC auto-export,
a sneakernet mesh-state file, the Citizen screen in
Hindi/Nepali, and CI. Single-phone re-check on the Realme 7 (2026-09-04): GPS,
battery ladder, responder key, no crashes. The mesh half re-runs on three phones.
Outstanding: a 30-minute soak run and a range survey.
Known limits (stated on purpose): iOS cannot participate (no Web Bluetooth on
Safari; native background advertising is locked down — needs an Apple entitlement
or a hardware beacon). 2.4 GHz penetrates rubble poorly — the answer is a pinned
phone advertising for days at low duty cycle until a rescuer walks within ~10 m.
The RESPONDER tier verifies against a pre-shared key; full per-device
signatures would need a crypto library and more than 31 bytes.
MIT.