|
| 1 | +// SPDX-License-Identifier: CC-BY-SA-4.0 |
| 2 | +// SPDX-FileCopyrightText: 2026 Jonathan D.A. Jewell (hyperpolymath) |
| 3 | += NeuroPhone — Sibling-Integration Status |
| 4 | +:toc: preamble |
| 5 | +:toclevels: 3 |
| 6 | + |
| 7 | +[NOTE] |
| 8 | +==== |
| 9 | +*Purpose.* This document is the authoritative, ground-truthed record of how |
| 10 | +NeuroPhone relates to four sibling repositories that a repo audit flagged as |
| 11 | +"not integrated" — `groove`, `cleave`, `burble`, `panll` — plus the estate |
| 12 | +*launcher standard* carve-out. It exists so those rows stop reading as |
| 13 | +unexplained compliance gaps: each is either genuinely *not applicable*, |
| 14 | +*precedent-only*, or *blocked on upstream work that does not yet exist*. |
| 15 | +
|
| 16 | +*Method.* Each disposition below was verified against the sibling repository's |
| 17 | +own source at the commit noted, not against design docs or memory. Where a |
| 18 | +NeuroPhone-side doc previously asserted an integration artifact, the assertion |
| 19 | +was checked against the upstream file it names. "EXISTS" means the artifact is |
| 20 | +present in the upstream tree today; "PLANNED" means it appears only in an |
| 21 | +upstream design doc. |
| 22 | +
|
| 23 | +*Ground-truthed:* 2026-07-09. |
| 24 | +==== |
| 25 | + |
| 26 | +== Summary |
| 27 | + |
| 28 | +[cols="1,2,3",options="header"] |
| 29 | +|=== |
| 30 | +| Sibling | Classification | One-line disposition |
| 31 | + |
| 32 | +| `groove` |
| 33 | +| NOT-APPLICABLE |
| 34 | +| Runtime service-discovery protocol for HTTP services that offer capabilities. NeuroPhone runs no server and offers none. |
| 35 | + |
| 36 | +| `cleave` |
| 37 | +| NOT-APPLICABLE |
| 38 | +| Pre-alpha design corpus — zero implementation, no ABI/schema/SDK, no domain overlap. |
| 39 | + |
| 40 | +| `burble` |
| 41 | +| BLOCKED (upstream Phase 0) |
| 42 | +| Real future integration (BLE nearby-presence sensor), but every burble-side artifact NeuroPhone would consume is still design-only. |
| 43 | + |
| 44 | +| `panll` |
| 45 | +| PRECEDENT-ONLY |
| 46 | +| Migration precedent (Tauri→Gossamer). No runtime data flow; panll's live ingest path is panll↔panic-attack, not panll↔neurophone. |
| 47 | + |
| 48 | +| launcher standard |
| 49 | +| CARVE-OUT |
| 50 | +| NeuroPhone is an Android app, not a desktop/server launcher target. The standard assumes a `server-url` runtime. |
| 51 | +|=== |
| 52 | + |
| 53 | +The honest conclusion of the integration audit is that *none of the four is |
| 54 | +buildable today*: three are not-applicable or precedent-only by nature, and the |
| 55 | +one genuinely-substantive integration (`burble`) is blocked on `burble` |
| 56 | +completing its own unfinished Phase 0. Creating integration code for any of them |
| 57 | +now would be fabrication, not wiring. |
| 58 | + |
| 59 | +== groove — NOT-APPLICABLE |
| 60 | + |
| 61 | +*What it is.* A runtime service-discovery + capability-negotiation protocol |
| 62 | +(working draft v0.2.0, grade C+). Every groove-aware system MUST expose |
| 63 | +`GET /.well-known/groove` returning a manifest that advertises the capabilities |
| 64 | +it `offers` and `consumes`; peers probe local ports and compose. |
| 65 | + |
| 66 | +*Why NeuroPhone is out of scope.* NeuroPhone is a read-only, on-device Android |
| 67 | +app. It runs no HTTP server and offers no local capability to peer processes. |
| 68 | +The groove spec is explicit that this places it outside the protocol: a manifest |
| 69 | +with zero capabilities "SHOULD be flagged by tooling: a service that offers |
| 70 | +nothing has no reason to speak Groove" (groove `spec/SPEC.adoc` §2.1.1). There is |
| 71 | +also no Rust client SDK to call: `clients/` is JavaScript-only, and the |
| 72 | +`groove-core` Rust library the README references does not exist in the tree |
| 73 | +(removed per groove ADR 0001). Rust bindings are listed only as an aspiration. |
| 74 | + |
| 75 | +*Disposition.* No groove manifest, no groove code. NeuroPhone's |
| 76 | +`.github/workflows/dogfood-gate.yml` `groove-check` job is *advisory* (emits a |
| 77 | +non-blocking `::warning::`, never fails) and only fires when a repo has server |
| 78 | +code but no manifest — which NeuroPhone does not. |
| 79 | + |
| 80 | +[NOTE] |
| 81 | +==== |
| 82 | +*Fixed defect (this change).* The `has_server` heuristic in `groove-check` |
| 83 | +grepped for a bare `TcpListener`, which matched NeuroPhone's *test-only* fake |
| 84 | +Claude server (`crates/claude-client/src/lib.rs`, inside a `#[cfg(test)]` |
| 85 | +module). That could surface a spurious — though non-blocking — groove warning in |
| 86 | +CI summaries. The detector now keys on production HTTP-server framework markers |
| 87 | +(`axum::serve`, `actix_web`, `hyper::Server`, `Bandit`, `Plug.Cowboy`, …), which |
| 88 | +a test loopback listener does not trip. The same fix was made at source in |
| 89 | +`rsr-template-repo`, the template this workflow is copied from. |
| 90 | +==== |
| 91 | + |
| 92 | +== cleave — NOT-APPLICABLE |
| 93 | + |
| 94 | +*What it is.* A design corpus / draft specification for a proposed Rust |
| 95 | +"transmutable interface-engine" library. Its own status line: "Design corpus. |
| 96 | +ZERO lines of cleave-specific implementation exist. 0 of 7 proofs done" |
| 97 | +(cleave `README.adoc`). |
| 98 | + |
| 99 | +*Why NeuroPhone is out of scope.* There is nothing to integrate against — no |
| 100 | +crate, no header, no ABI, no wire format, no schema, no client SDK. cleave |
| 101 | +explicitly delegates wire encoding to `weft` and protocol/manifest handshake to |
| 102 | +`groove`, so even its aspirational "unified protocol endpoint" does not live in |
| 103 | +the repo. A repo-wide search for NeuroPhone's domain terms (sensor, reservoir, |
| 104 | +LSM/ESN, bluetooth, presence, android, on-device LLM) returns no matches. |
| 105 | + |
| 106 | +*Disposition.* No integration point exists or is planned. The only conceivable |
| 107 | +future tie is a conceptual analogy between cleave's (unbuilt) FFI-dial "kernel" |
| 108 | +and NeuroPhone's JNI/FFI boundary — an analogy, not an integration, and it |
| 109 | +cannot be specified until cleave writes its kernel. |
| 110 | + |
| 111 | +== burble — BLOCKED (upstream Phase 0 incomplete) |
| 112 | + |
| 113 | +*What it is.* A self-hostable voice-first communications platform. Relevant to |
| 114 | +NeuroPhone only via a planned Bluetooth Low Energy *nearby-presence* signal that |
| 115 | +NeuroPhone would consume read-only as one more sensor input (see |
| 116 | +`docs/BT-PRESENCE-PLAN.adoc`). NeuroPhone's work begins at the cross-repo plan's |
| 117 | +Phase 2 and depends on burble finishing Phases 0–1 first. |
| 118 | + |
| 119 | +*Ground truth — every consumed artifact is still PLANNED, not present:* |
| 120 | + |
| 121 | +[cols="2,3,1",options="header"] |
| 122 | +|=== |
| 123 | +| Artifact NeuroPhone's plan names | Reality in `burble` @ `0926a15` | Status |
| 124 | + |
| 125 | +| `src/Burble/ABI/NearbyPresence.idr` (Idris2 wire type) |
| 126 | +| Absent from the ABI dir and from the `burble-abi.ipkg` module list; appears only as a "NEW" line in `docs/architecture/ANDROID-CLIENT.adoc` |
| 127 | +| PLANNED |
| 128 | + |
| 129 | +| `nearby-presence.a2ml` (wire format) |
| 130 | +| Does not exist. NeuroPhone's plan cited `.machine_readable/6a2/…` — but `6a2/` is *NeuroPhone's* namespace; burble uses `descriptiles/`, and the file is absent there too |
| 131 | +| PLANNED (+ wrong path) |
| 132 | + |
| 133 | +| burble Android client emitting the advertisement (Phase-1 precondition) |
| 134 | +| No `client/android/` exists; `ANDROID-CLIENT.adoc`: "Design only — no code yet" |
| 135 | +| PLANNED |
| 136 | + |
| 137 | +| `server/lib/burble/bridges/neurophone.ex` |
| 138 | +| No `bridges/` directory exists |
| 139 | +| PLANNED |
| 140 | + |
| 141 | +| Defined advertisement UUID / byte layout |
| 142 | +| None defined anywhere; only a prose knock-packet sketch, explicitly *not* a continuous advertisement |
| 143 | +| UNDEFINED |
| 144 | +|=== |
| 145 | + |
| 146 | +The governing decision, burble `docs/decisions/0010-presence-discovery-and-trust-zones.adoc`, |
| 147 | +is `Status: Proposed` (dated 2026-07-08) and states "Nothing here is built yet." |
| 148 | +burble's own `PRODUCTION-BLOCKER-HANDOFF.adoc` flags the Android BLE design as |
| 149 | +internally contradictory and unbuilt. |
| 150 | + |
| 151 | +*Disposition.* The honest NeuroPhone-side artifact today is a *blocked-on note*, |
| 152 | +not codegen and not a vendored schema — you cannot vendor or generate against a |
| 153 | +wire format that has never been authored. `docs/BT-PRESENCE-PLAN.adoc` has been |
| 154 | +annotated with this upstream status and two corrections (the `6a2/`→`descriptiles/` |
| 155 | +path error, and the now-superseded Kotlin scanner plan, which must follow the |
| 156 | +gossamer migration per #83 rather than reintroduce banned Kotlin). NeuroPhone |
| 157 | +resumes Phase 2 the moment burble authors and freezes the advertisement format. |
| 158 | + |
| 159 | +== panll — PRECEDENT-ONLY |
| 160 | + |
| 161 | +*What it is.* A cognitive-relief, multi-pane "Human-Things Interface" desktop |
| 162 | +panel host (ReScript/TEA front end; Rust + Gossamer back end). Event-chain |
| 163 | +viewing is *one* panel feature, not its identity. |
| 164 | + |
| 165 | +*Why the relationship is precedent, not runtime.* The only relationship asserted |
| 166 | +in either repo's code or docs is a *migration precedent*: panll migrated |
| 167 | +`src-tauri/` → `src-gossamer/` (desktop only), and NeuroPhone's RFC cites that as |
| 168 | +the template for its own Kotlin→Rust Android migration |
| 169 | +(`docs/migrations/RFC-ANDROID-KOTLIN-TO-RUST.adoc`). No runtime data flow is |
| 170 | +claimed anywhere. panll's one *live* data-ingest path is panll↔`panic-attack` |
| 171 | +event-chain JSON (`src/core/EventChain.res`), and in NeuroPhone `panic-attack` is |
| 172 | +only ever run as a scanner over NeuroPhone's own source — NeuroPhone emits no |
| 173 | +event chains. |
| 174 | + |
| 175 | +*Latent (design-only) options, none built.* panll offers three extension |
| 176 | +surfaces — a `DatabaseModule` ReScript protocol (internal, compile-time), a |
| 177 | +groove endpoint (fixed consumed-capability set), and a design-phase "transmutable |
| 178 | +panel" clade `.a2ml`. A future NeuroPhone↔panll link could ride any of them |
| 179 | +(e.g. NeuroPhone exporting `panic-attack`-shaped event-chain JSON that panll's |
| 180 | +Pane-W could load), but no NeuroPhone-side artifact for it exists today. |
| 181 | + |
| 182 | +*Disposition.* Recorded as precedent-only. No action required unless a runtime |
| 183 | +integration is later commissioned. |
| 184 | + |
| 185 | +== Launcher standard — CARVE-OUT |
| 186 | + |
| 187 | +*The standard.* The estate launcher standard |
| 188 | +(`standards/launcher/launcher-standard.a2ml` + `docs/UX-standards/launcher-standard.adoc`) |
| 189 | +describes a *desktop/server* application launcher. Its load-bearing assumption is |
| 190 | +`[runtime].kind = "server-url"`: a long-running local process bound to a |
| 191 | +`localhost` port, started by a shell `command`, tracked by a `pid-file`, and |
| 192 | +polled until its `url` responds (`wait-for-url-timeout-seconds`) — after which it |
| 193 | +opens a browser. Its `--integ`/`--disinteg` modes install XDG `.desktop` files, |
| 194 | +Start-Menu/Applications entries, and desktop icons on Linux/macOS/Windows. The |
| 195 | +reference descriptor `burble.launcher.a2ml` is exactly this shape |
| 196 | +(`kind = "server-url"`, port 4020, `mix phx.server`, XDG desktop categories). |
| 197 | + |
| 198 | +*Why NeuroPhone is a carve-out.* NeuroPhone is an on-device Android application |
| 199 | +(Rust workspace + JNI/Android surface). It has *no* server URL, no `localhost` |
| 200 | +port, no shell start `command`, no pid-file, and no desktop entry. An Android |
| 201 | +app's launch surface is the platform `LAUNCHER` intent declared in |
| 202 | +`AndroidManifest.xml` (`MainActivity` with `android.intent.action.MAIN` + |
| 203 | +`android.intent.category.LAUNCHER`) — provided by the OS, not by an estate |
| 204 | +launcher script. None of the `[runtime]` fields the standard requires can be |
| 205 | +populated for an APK. |
| 206 | + |
| 207 | +*Scope of the standard.* The standard is provisioned by `launch-scaffolder` for |
| 208 | +repos that ship a desktop/server app, and its lock-step CI gate runs only inside |
| 209 | +`standards` itself — it does not scan consumer repos. So this carve-out is a |
| 210 | +documentation/audit disposition, not a suppressed CI failure. |
| 211 | + |
| 212 | +*Disposition.* NeuroPhone is out of scope for the desktop/server launcher |
| 213 | +standard, by owner decision (2026-07-09). Recorded machine-readably in |
| 214 | +`.machine_readable/6a2/ECOSYSTEM.a2ml` `[carve-outs]`. If NeuroPhone ever ships a |
| 215 | +companion *desktop* control panel, that component — not the APK — would adopt the |
| 216 | +standard. |
| 217 | + |
| 218 | +== See also |
| 219 | + |
| 220 | +* link:../BT-PRESENCE-PLAN.adoc[BT-PRESENCE-PLAN.adoc] — the burble presence-sensor plan, now annotated with upstream status. |
| 221 | +* link:../migrations/RFC-ANDROID-KOTLIN-TO-RUST.adoc[RFC-ANDROID-KOTLIN-TO-RUST.adoc] — the panll migration precedent. |
| 222 | +* `../../.machine_readable/6a2/ECOSYSTEM.a2ml` — machine-readable related-projects + carve-outs. |
0 commit comments