Open project ledger • updated 20 Aug 2026
Biper audit, plan, and structure
One place showing what is genuinely ready, what has been measured on hardware, what still has not, and which evidence must exist before publication.
This page is the project’s technical ledger — written in engineering jargon.
- 7 + 1
- area audits and one simplification pass
- 1
- cube in the buying path: Unit C6L
- 5
- boots with the entropy source measured
- 1
- public system file in the installer (v0.9.0)
Progress audit • 18 Aug 2026
The host is ready, the cube has started returning measurements, publication waits.
Four units arrived on 17 August. On 18 August the cube answered with a measurement for the first time: the radio entropy source, the expander bus, the layer boot. The radio, the range and the current draw we still have not measured, and we do not pretend that we have.
- 12 / 12
- host gateslint, Biper OS contracts, build, artifact, photo metadata, manifests, privacy, and error states
- 0
- broken Markdown linksa consistent PL/EN restart baseline
- 3
- community maps instead of oursthe map mock-up came down on 18 Aug; we point at maps other people run
- 60+
- files beyond upstreama maintained variant now, not an overlay; the delta is computed from Git and guarded by the fork’s CI; public code: github.com/fiedoruk/biper-lora (as of 20 Aug 2026)
The PL and EN site, the cube screen carried onto the page and held by a gate, light/dark, error states, CSP, SBOM, and the publication lock.
Browser: macOS Chromium is evidenced; Firefox, WebKit, Windows, Linux, iOS, Android and the screen reader remain NOT MEASURED.
Flashing, layer boot, the expander bus and radio entropy: measured. BLE, the A↔B pair, recovery, range and current draw: still ahead.
The public code repository has been open since 20 August by the owner’s decision: github.com/fiedoruk/biper-lora. The system file, the domain and the deployment were public since 17–19 August.
What the CC correction set closed
The map mock-up came down on 18 Aug — we draw no map of our own out of invented points and we fetch nobody else’s. We point at three maps the community runs. Production photographs had their EXIF stripped together with the GPS, plus a build gate that will not let the next one through.
The target, the version and the SHA of the pinned report are tied to the manifest and the binary, and the flasher carries no second pin in the UI.
Doctor separates a missing measurement from zero, the release policy ends errors with STOP, and the watcher limits type, time and 2 MB.
PL/EN has an automated parity gate, and CI runs the full set of twelve checks on every change.
Since 18 Aug the buying path holds the Unit C6L alone. A shared SX1262 radio does not make another board supported, and a file with its own SHA does not create support before DEVICE and RF.
Work progress
We measure progress by the evidence that closes each gate.
G04 is closed. G05 is open and in progress: the cube is on the desk, the first measurements are in the ledger, and the rest of the device path waits for the two-unit pair session.
G00–G04 complete; G05 in progress on hardware; G06–G09 waiting
- G00COMPLETE
Truth baseline
PL/EN documentation, decisions, sources, risks, and a restart point.
- G01COMPLETE
Product contract
Biper, a beginner as the first user, the phone as the screen, and a small role-based stack of exact devices.
- G02COMPLETE
Architecture
Upstream-first, a private candidate, an empty approved manifest, and ADR-0002.
- G03COMPLETE
HOST MVP
The site, a locked flashing path, build, and tests.
- G04COMPLETE
Browser, security, and accessibility
macOS Chromium, negative states, CSP, SBOM and responsive layouts are evidenced. Three P0 findings from the panel accessibility audit are closed. Other engines and the screen reader remain NOT MEASURED.
- G05IN PROGRESS
Controlled device lab
Done: flashing, layer boot, the expander at 0x43, five measurements of the radio entropy source. Still ahead: the C6A↔C6B pair, BLE, recovery, stability and current draw.
- G06LOCKED
Private pilot
5 then 20 people; completion, recovery, time, and real support cost.
- G07LOCKED
Public pilot
Approved artifact only, staged deployment, rollback to the previous version, legal review, and the owner decision.
- G08LOCKED
Operations
Upstream watch, release promotion, incidents, compatibility smoke, and maintenance cost.
- G09DEFERRED
Portfolio decision
INVEST / MAINTAIN / RESCOPE / STOP based on the pilot and operations.
Evidence ladder
A green build does not prove the radio works or authorise publication.
Content, data, manifests, and logic exist locally.
Repeatable build, lint, and tests pass.
macOS Chromium, 1440/390/320 and 720 px reflow are checked; other platforms are NOT MEASURED.
One C6L cube: flashed, booted, expander found, radio entropy measured five times. The second unit and the whole radio path are still ahead.
The first message crossed the air on 17 August, on the base file. Range, link budget, duty cycle and the formal regional review are still ahead.
Deployment, the public system file and the public code repository are live (the repo since 20 August).
Biper OS • pre-device T1
A better product without splitting MeshCore.
First we add safe provisioning, recovery, diagnostics and release control. Firmware changes follow a measured baseline and start as small patches sent to the upstream project.
- L0 / HOSTHOST READY
Layer contracts
The pl-eu868-v1 profile, privacy-safe diagnostics, recovery, and the candidate → laboratory → release policy are versioned and validated.
- L1 / HOSTSYNTHETIC ROUND-TRIP PASS
Device-free recovery
The lab has a rehearsal PIN and a local AES-GCM round-trip on synthetic data only, with no device identity file.
- L2 / HOSTVALIDATOR READY
Biper Doctor
Ten fixtures cover missing BLE and airtime telemetry and an invalid measurement set; the validator stops uncertain data.
- L3 / HOSTWATCHER READY
Release Guard
The read-only watcher confirmed v1.17.1, writes only a report, downloads nothing, and always returns mayPromote=false.
- L4–L6 / IN PROGRESSON HARDWARE
Baseline and small patches
Official v1.17.1 on the C6L, with its own SHA, is flashed and booted. One patch is already fit to send upstream:
randomSeed()in setup disables the hardware generator across the whole firmware. - L8 / LATERDEFERRED
Biper Relay PL
More power needs separate hardware, a complete antenna budget and RF measurement. +22 dBm is the SX1262 catalogue limit, not a measurement of our kit.
What happens next
Nearest execution plan
Every step has its own boundary. Delivery day covers inspection; the cable appears only in a separately approved stage.
- HOST / CLOSED
Pre-device L1–L3 ready
Synthetic recovery, Doctor, BLE and airtime states marked NOT MEASURED, the read-only watcher and the device-free laboratory all have contracts and tests.
- DONE / 18 AUG
First flash and the entropy measurement
C6A: our build → boot → the expander at 0x43 → five readings of the radio source. Along the way we found and fixed the reason the whole firmware had been running on a 31-bit generator.
- NEXT / TWO CUBES
The second unit and the first message
C6B: the same entropy reading, then the C6A↔C6B pair — the channel, a private message, the delivery receipt, recovery.
- IN THE SAME SESSION
The handling path by hand, not in code
Four button gestures, the wipe with its countdown, the hotspot and the panel from a phone, and whether the SIEC/SAM mode survives losing power.
- HARDWARE-FREE / OPTIONAL
External platform matrix
Windows, Linux, Firefox, Safari, iOS and Android remain NOT MEASURED; this does not block the rest of the path.
- AFTER THE PAIR
Stability and current draw
24 and 72 hours of running, a USB meter in each mode. It is the one number in this project that people ask for and we cannot give.
- AFTER DEVICE/RF
Private pilot
First 5, then 20 people. We measure completion, recovery, time, and support load.
- AFTER THE PILOT
Public proposal
Licences, provenance, approved manifest, canary, monitoring, rollback, and a separate owner GO.
Project structure
One source of truth, three clear zones
The static site, the documentation and the private candidate are kept apart so that a build can never promote a binary by itself.
Biper/restart point, status, and project boundariessite/the static site and its gatesstatic-src/PL/EN content fragments, the stylesheet, the browser layerdist-static/the rsync-ready artifact: twelve documents and local assetsscripts/the site generator, the artifact and deployment gates, screenshots of the cube screen and the paneltests/twenty tests: contracts, privacy, and release boundariesdocs/parallel PL/EN documentationpl/Polish source instructions and planen/the same meaning in Englishadr/accepted architecture decisionsvisual/Civic Relay candidate and rendered QAspecs/machine-readable Biper OS contractsregions/country profile as specification_onlydiagnostics/Doctor schema without messages, keys, or exact locationrecovery/synthetic encrypted envelope; no production identity formatreleases/promotion without automatic stableartifacts/private system-file candidate for the laboratorySTATUSCURRENT-MISSION.md + STATUS.mdPublic / private boundary
Site code, documentation, contracts, and the approvals manifest with no public binary.
The exact candidate binary stays private; its hash and evidence state are visible for integrity checks.
Flashing the system file, BLE, RF, deployment, the domain, a public repository, and publishing the binary.
Data and release flow
Hardware
One cube, one trial path
Until 18 August we were comparing two families. The XIAO left the buying path by the owner decision: there is to be one cube, in a factory enclosure, with a screen, so that it can be put in someone’s hand without explaining what to choose. The XIAO hardware stays in the laboratory as a reference point, not as a product.
- C6AMEASURED / 18 AUG
M5Stack Unit C6L U202
Our build flashed, the layer comes up, the expander found at 0x43, the radio entropy source measured across five boots.
- C6BSTILL AHEAD
The second unit
The same entropy reading — one cube says nothing about a batch — and then the C6A↔C6B pair: the first message, the receipts, recovery.
- XA + XBREFERENCE, NOT PRODUCT
XIAO ESP32-S3 + Wio-SX1262
They stay in the laboratory. They are useful for checking that our layer has not tied itself to one board, but we recommend them to nobody.
- D9SUPPORT DECISION
Evidence first, base second
A second support path opens only if the measurements justify it. A shared SX1262 radio does not make another board supported.
Four units arrived on 17 August 2026. First flash and measurements: 19 August 2026. Radio trials need the owner’s separate approval and have not been carried out yet.
Analysis, not a purchase recommendation • RPT / SOLAR / EXTERNAL
Solar node: XIAO nRF52840 + Wio-SX1262 (analysis of someone else’s product, not our path)
It shares the SX1262 radio family but uses different parts. It runs a XIAO nRF52840 and a different Wio board revision, and the offer adds a 3 W panel, a 0.5 W MPPT charger, four 18650 cells, a mast enclosure, and an N connector. The offer therefore covers real integration work. A Biper recommendation is blocked by missing data on battery protection (BMS), IP rating, the bundled antenna, and winter operation.
See the analysed product at its sourceQuestions the trials will settle
- whether the second cube has an equally live entropy source
- how long a cube runs from a power bank and how much current it really draws
- whether recovery is repeatable for a novice
- whether three clicks can be done by hand and not only in code
Release history
What we shipped and what changed
The full CHANGELOG lives in the layer repository and will reach GitHub together with the code opening.
- v0.8.1–0.8.17 • 19–20 Aug 2026
Pair-trial day: seventeen patches to a working messenger
Each from a defect the owner hit while testing two cubes: the hotspot name is a word, not digits — and each cube gets its own (both announced themselves as Biper-15FE, because the identifier slice the name came from is shared by a whole batch); the Wi-Fi password is fixed per cube and the hotspot window stays up while a phone is connected; the hotspot seats four devices, so a remembered laptop cannot lock the phone out; a cube in SIEC mode announces itself shortly after power-on, SAM stays silent; the contacts tab speaks a human word (KONTAKTY) and the Wi-Fi word can be set by the owner. The root of the pair that could not see each other turned out to be single: build-flag ordering compiled one class into two memory layouts, so the radio path stored contacts where the panel never looked. The panel now declares its protocol version (messages reach the phone), the password alphabet lost its OLED look-alike twins, the SLYSZE counter gained a presence beacon and treats a received message as proof its sender is alive, and the station word pool grew to 294. On the evening of 20 August the pair talks both ways from two phones, and an external UX audit closed the day inside the panel: a permanent recipient capsule at the input, the alarm reachable from every screen, green reserved for the link state.
- v0.8.18–0.8.19 • 20 Aug 2026
An external audit, four decisions, and a hard legal limit
An external 36-area review of the whole fork (an independent AI model, 20 Aug 2026, internal report), executed with a falsifier on every claim — several findings rejected against evidence, the rest verified in code before anything was touched. The heaviest fixes: the radio oscillator powered as the vendor schematic demands (3.0 V instead of 1.8), the screen font completed (the wipe-in-progress caption was losing W, Y and U), messages received before the panel's first visit no longer lost, length gates on paths that read past the declared frame, and a compile-time guard on the contact-list geometry. On top of that, four owner decisions: a hard 10% airtime limit baked in so that no setting can raise it (the ETSI limit for the rescue sub-band), the hotspot gesture at a full three seconds, radio parameters kept community-compatible until measured, and a proper board definition with the real 16 MB of flash and a partition table ready for future cable-free updates. The pair trial after a full wipe: the cubes found each other on their own, and a private message got its radio acknowledgement in 1.2 seconds.
- v0.8.20 • 20 Aug 2026
The second independent audit: state truth and recovery
A full review of both repositories by an independent AI reviewer (20 Aug 2026, internal report pinned to exact SHAs) confirmed nine P1 findings — each verified in code before anything changed. All six logic findings land in this release: DELIVERED lights up only when a confirmation hits the awaited marker — a late, duplicated or foreign one no longer changes the screen; the missing return in the frame-accept path is now a compile error, because the global warning silencer is stripped from our environments; the 10-second wipe gesture works with a dead display, and the countdown is audible; the hotspot window is held by a live panel, not by a merely remembered station; a full queue answers “busy” instead of losing a command silently; a phone taking over the panel flushes the old session’s pending commands. Plus a hard 8-character password check, verified page and task registration, Wi-Fi-name truth mid-window, 11 host tests of the pure delivery logic, and CI that now also builds the stock C6L profiles. This page now also tells the truth about the fork’s scale — see the metric above.
- v0.9.0 • 20 Aug 2026
The panel is the interface: Bluetooth leaves the release
An owner decision after two independent reviews: the shipped system is the no-Bluetooth variant. The official app over BLE and the panel used at once could interleave each other’s responses (single-client protocol state in the MeshCore base), the BLE stack advertised pairing indefinitely, and conversations held outside the panel were invisible to the cube’s screen. After the change: the install file is a third lighter (1.56 MB), twice the free memory with the window open, and the screen sees every conversation. The full pair test ran on the exact bytes the installer ships: 10/10 messages confirmed both ways, median 0.82 s. The cube is not locked — whoever prefers the official app flashes stock MeshCore, and our installer always brings the Biper system back.
- v0.8 • 19 Aug 2026
The iPhone reaches the panel, the screen admits who it hears
Apple’s network probe got the welcome page instead of a redirect, so the iPhone’s sign-in sheet browsed the cube as captive.apple.com and the panel’s origin guard rightly answered “bad host” to every tap. After the fix the sheet lands on the cube’s own address and the panel opens from the phone. Two visibility patches along the way: the SŁYSZY counter now counts a node the first time it is heard, and the panel bridge no longer goes deaf once the hotspot window closes.
- v0.7 • 19 Aug 2026
The wipe holds the screen to the end
After the countdown the cube shows its fastest rings with the word WYMAZUJE until it reboots — previously the normal screen returned for a moment (owner-reported during testing). Along the way the site’s pixel-parity gate caught a never-ending loop in the rings’ square root before it reached a cube; the layer’s internals moved to English ahead of opening the repository.
- v0.6 • 19 Aug 2026
First public build in the installer
The Biper system on MeshCore v1.17.1: the cube-served panel with contact backup on the phone, the screen language plus LED and buzzer signals, the SIEC/SAM relay switch persisted across restarts, a hotspot with the cube's password, wipe with a countdown, since 0.9.0 no Bluetooth in the release, identity-key export and import compiled out. The file's SHA-256 stands next to the installer and in the release manifest.
- 17–18 Aug 2026
Internal milestones, never released
In order: hotspot, screen, sound and light, ninja mode, the memory diet (34 → 115 kB free), captive portal, the panel–radio bridge, the panel, hardening. Each milestone closed with a measurement on the development cube.
Project policy
The Biper Charter
Six rules written down now, before anyone asks for them. Changing any of them takes an explicit owner decision, with the reasoning and the date. The Charter has a permanent address: /en/biper/charter/.
- RESCUE IS FREE
Crisis communication has no paywall
The installer, the system file, the emergency panel and the instructions stay free. Supporting the project may cost money. A feature somebody’s safety depends on never will.
- OPEN CODE
The firmware layer will be published under MIT
The decision was taken on 17 August 2026. Anyone will be able to read what the device they carry in a crisis transmits.
- TRADEMARK
We will register the “Biper” mark in the open
With a public statement of who files it and why. The filing and its status go into this ledger, alongside the rest of the decisions.
- AI DISCLOSED
Biper’s development is AI-assisted and we say so plainly
In the README, in the documentation and here. The code goes through reviews, quality gates and on-hardware tests. We see no reason to stay quiet about the tool we work with.
- NO GATEKEEPERS
We will not build an app you must have before the hardware works
The phone will reach the cube through an open panel served by the device itself. A paid client as a condition of working is off the table.
- COMMUNITY
Community channels will be nobody’s private property
When a forum, a chat or a map appears, administrative access will be documented and transferable.
The Charter is a statement of intent. The commitments about open code, the trademark and the panel concern things not yet built, and we track their state in the same ledger as the rest of the work.
Why MeshCore and not Meshtastic?
Airtime economics in the 868 band
Meshtastic broadcasts messages by managed flooding: every node repeats what it hears, so the whole network pays airtime for a single message. MeshCore learns routes and sends direct messages along a chosen path, keeping flooding where it makes sense — adverts and the channel. In Poland we transmit in the 868 band under a transmit-time limit, and a network for a crisis has to work when many people write at once. That was reason number one.
The architecture fits the cube
Clean roles (companion, repeater, room server) and a simple protocol in which the phone is the screen: that is exactly Biper’s model. We added our layer to a small C++ library — at the start (17 Aug) it was four marked touch points in one file of theirs, +94 lines. Today it is an openly maintained variant: 60+ files and roughly 13.6k lines — our own layer (screen, panel, hotspot, CI gates) plus fixes in shared files; the exact delta is computed from Git by the fork’s CI (as of 20 Aug 2026).
Hardware we want to put in someone’s hand
At the time of the choice MeshCore supported compact, ready-made modules built on the ESP32-C6, and the system itself is small enough that 4 MB of flash holds it together with our emergency panel. Meshtastic had nothing to offer us on this platform then.
The MIT licence
MeshCore is MIT-licensed. Opening our own layer and shaping the product freely needed no licensing compromises.
The short answer, for a first-time question
Meshtastic is a great hobbyist tool and a great map. We needed a frugal radio that survives many conversations at once in a crisis, and a library simple enough that you can build your grandmother a device with it.