bridge-message.mjs proves the bridge and the relay with this engine on both ends, which leaves the apps untested: their own socket factory, sign-up, device registration and send are a different code path. The Android suite BridgeMessageTest (extant2000/flamenet-messenger-android#192) drives that path over a live bridge and can only assert what the app's own screen says.
This is the independent half: it signs up a peer, publishes a device, and decrypts what the app sealed, holding nothing but the peer's keys.
Proven 2026-10-14, Android on an emulator through the live obfs4 bridge to relay1.flamenet.io:
3 envelopes, message numbers 0,1,2
n=0 control: delivery_key
n=1 control: kt_head
n=2 MESSAGE from user 1613: through a bridge from the app at 88070
The caption is the exact text the app's own log says it sent, so both ends agree on the words. That closes the claim made to OTF on 2026-09-28: a message composed in the app, carried over obfs4, and read by somebody else.
Three things this cost, each one making the data look like a defect:
Nothing here acknowledges a message, so every poll returns the same envelopes. Counting them per poll turned three into sixty and sent me looking for a fan-out bug that does not exist. The earlier note on PR 192 about 60 envelopes was this, and it is withdrawn.
The ratchet opens in order. respond belongs to the envelope with header.n === 0 and the rest decrypt on that session. Responding afresh to each one fails with Cipher job failed, which says nothing about chain keys and reads like an interop bug.
kind: "text" IS the message, with the words in caption. Filtering out everything carrying fnc threw the message away along with the delivery key and the key-transparency head.
Not in npm test: it needs a live relay and an app to send something. bridge-peer.json holds a real credential and is ignored.
`bridge-message.mjs` proves the bridge and the relay with this engine on both ends, which leaves the apps untested: their own socket factory, sign-up, device registration and send are a different code path. The Android suite `BridgeMessageTest` (extant2000/flamenet-messenger-android#192) drives that path over a live bridge and can only assert what the app's own screen says.
This is the independent half: it signs up a peer, publishes a device, and decrypts what the app sealed, holding nothing but the peer's keys.
**Proven 2026-10-14**, Android on an emulator through the live obfs4 bridge to relay1.flamenet.io:
```
3 envelopes, message numbers 0,1,2
n=0 control: delivery_key
n=1 control: kt_head
n=2 MESSAGE from user 1613: through a bridge from the app at 88070
```
The caption is the exact text the app's own log says it sent, so both ends agree on the words. That closes the claim made to OTF on 2026-09-28: a message composed in the app, carried over obfs4, and read by somebody else.
**Three things this cost, each one making the data look like a defect:**
- Nothing here acknowledges a message, so every poll returns the same envelopes. Counting them per poll turned three into sixty and sent me looking for a fan-out bug that does not exist. The earlier note on PR 192 about 60 envelopes was this, and it is withdrawn.
- The ratchet opens in order. `respond` belongs to the envelope with `header.n === 0` and the rest decrypt on that session. Responding afresh to each one fails with `Cipher job failed`, which says nothing about chain keys and reads like an interop bug.
- `kind: "text"` IS the message, with the words in `caption`. Filtering out everything carrying `fnc` threw the message away along with the delivery key and the key-transparency head.
Not in `npm test`: it needs a live relay and an app to send something. `bridge-peer.json` holds a real credential and is ignored.
Secret sweep clean across 87 files.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
bridge-message.mjs proves the bridge and the relay with this engine on
both ends, which leaves the apps untested: their own socket factory,
sign-up, device registration and send are a different code path. The
Android suite BridgeMessageTest drives that path over a live bridge and
can only assert what the app's own screen says.
This is the independent half. It signs up a peer, publishes a device,
and decrypts what the app sealed, holding nothing but the peer's keys.
Proven 2026-10-14, Android on an emulator through the live obfs4 bridge
to relay1.flamenet.io:
3 envelopes, message numbers 0,1,2
n=0 control: delivery_key
n=1 control: kt_head
n=2 MESSAGE from user 1613: through a bridge from the app at 88070
The caption is the text the app's own log says it sent, so both ends
agree on the words.
Three things this cost, each one making the data look like a defect:
- Nothing here acknowledges a message, so every poll returns the same
envelopes. Counting them per poll turned three into sixty and sent me
looking for a fan-out bug that does not exist.
- The ratchet opens in order. `respond` belongs to the envelope with
`header.n === 0` and the rest decrypt on that session; responding
afresh to each one fails with `Cipher job failed`, which says nothing
about chain keys.
- `kind: "text"` IS the message, with the words in `caption`. Filtering
out everything carrying `fnc` threw the message away along with the
delivery key and the key-transparency head.
Not in `npm test`: it needs a live relay and an app to send something.
`bridge-peer.json` holds a real credential and is ignored.
Secret sweep clean across 87 files.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
bridge-message.mjsproves the bridge and the relay with this engine on both ends, which leaves the apps untested: their own socket factory, sign-up, device registration and send are a different code path. The Android suiteBridgeMessageTest(extant2000/flamenet-messenger-android#192) drives that path over a live bridge and can only assert what the app's own screen says.This is the independent half: it signs up a peer, publishes a device, and decrypts what the app sealed, holding nothing but the peer's keys.
Proven 2026-10-14, Android on an emulator through the live obfs4 bridge to relay1.flamenet.io:
The caption is the exact text the app's own log says it sent, so both ends agree on the words. That closes the claim made to OTF on 2026-09-28: a message composed in the app, carried over obfs4, and read by somebody else.
Three things this cost, each one making the data look like a defect:
respondbelongs to the envelope withheader.n === 0and the rest decrypt on that session. Responding afresh to each one fails withCipher job failed, which says nothing about chain keys and reads like an interop bug.kind: "text"IS the message, with the words incaption. Filtering out everything carryingfncthrew the message away along with the delivery key and the key-transparency head.Not in
npm test: it needs a live relay and an app to send something.bridge-peer.jsonholds a real credential and is ignored.Secret sweep clean across 87 files.
🤖 Generated with Claude Code
bridge-message.mjs proves the bridge and the relay with this engine on both ends, which leaves the apps untested: their own socket factory, sign-up, device registration and send are a different code path. The Android suite BridgeMessageTest drives that path over a live bridge and can only assert what the app's own screen says. This is the independent half. It signs up a peer, publishes a device, and decrypts what the app sealed, holding nothing but the peer's keys. Proven 2026-10-14, Android on an emulator through the live obfs4 bridge to relay1.flamenet.io: 3 envelopes, message numbers 0,1,2 n=0 control: delivery_key n=1 control: kt_head n=2 MESSAGE from user 1613: through a bridge from the app at 88070 The caption is the text the app's own log says it sent, so both ends agree on the words. Three things this cost, each one making the data look like a defect: - Nothing here acknowledges a message, so every poll returns the same envelopes. Counting them per poll turned three into sixty and sent me looking for a fan-out bug that does not exist. - The ratchet opens in order. `respond` belongs to the envelope with `header.n === 0` and the rest decrypt on that session; responding afresh to each one fails with `Cipher job failed`, which says nothing about chain keys. - `kind: "text"` IS the message, with the words in `caption`. Filtering out everything carrying `fnc` threw the message away along with the delivery key and the key-transparency head. Not in `npm test`: it needs a live relay and an app to send something. `bridge-peer.json` holds a real credential and is ignored. Secret sweep clean across 87 files. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>