Remove machine-writing tells from comments and docs

Emoji markers, markdown bold inside code comments, and em-dashes are
gone from source comments, string literals, scripts, Gradle files and
the markdown docs. Counted before and after:

  emoji markers   2680 -> 1 (the emoji picker's own list, which is the feature)
  em-dashes       2490 -> 9 (table placeholders and fenced code)

Two warning glyphs in user-facing strings in ChatScreens.kt are removed
as well; the sentences say the same thing without them. Two backtick
test names carried an em-dash and now carry a comma.

Nothing else changed. 1208 tests pass, counted from the result XML.
The three obfs4 interop tests are opted out with OBFS4_INTEROP_OPTOUT=1
for this run, as their own message instructs when no bridge is set up.

CONTRIBUTING gets a four-line rule so it does not grow back.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
Paul Hitt
2026-09-08 18:52:12 -04:00
co-authored by Claude Fable 5.1
parent 04e06452b6
commit 4dd544083c
277 changed files with 4885 additions and 4883 deletions
+4 -4
View File
@@ -6,23 +6,23 @@ plugins {
repositories { mavenCentral() }
dependencies {
// 🔴 **The whole reason this port is small.** The Swift implementation had
// The whole reason this port is small. The Swift implementation had
// to hand-write SipHash-2-4, XSalsa20 and Poly1305 because CryptoKit
// exposes none of them, and its own field arithmetic because Apple gives
// nothing below X25519. BouncyCastle has all four, vetted and
// constant-time where it matters: `X25519Field` (including `sqrtRatioVar`,
// exactly the primitive Elligator2 needs), `XSalsa20Engine`, `Poly1305`.
//
// ⚠️ That means the two clients do NOT share an implementation. They share
// That means the two clients do NOT share an implementation. They share
// the vectors and the live interop harness, which is what actually keeps
// them honest — see `Obfs4VectorTest`.
// them honest, see `Obfs4VectorTest`.
//
// Already a dependency of `:engine`, for the same class of reason: taking a
// vetted constant-time implementation over hand-rolling arithmetic on a
// secret scalar.
implementation("org.bouncycastle:bcprov-jdk18on:1.79")
// ⚠️ compileOnly: the transport must not drag OkHttp into anything that
// compileOnly: the transport must not drag OkHttp into anything that
// does not already have it. `:client` supplies the real one.
compileOnly("com.squareup.okhttp3:okhttp:4.12.0")
testImplementation("com.squareup.okhttp3:okhttp:4.12.0")