|
| 1 | +// SPDX-License-Identifier: MPL-2.0 |
| 2 | += Session Handover — neurophone (post-compaction continuity) |
| 3 | +:toc: |
| 4 | + |
| 5 | +Snapshot for continuing work after context compaction. `main` HEAD at time of |
| 6 | +writing: `0a88e45`. |
| 7 | + |
| 8 | +NOTE: Terminology — *"Rust" always means "Rust/Spark"* (owner directive). |
| 9 | +Licence/SPDX and the *Palimpsest* philosophy files are *owner territory* — do |
| 10 | +not edit `PALIMPSEST.adoc`, citations, or governance philosophy docs. |
| 11 | + |
| 12 | +== 1. Done & merged |
| 13 | + |
| 14 | +* *Proof-obligation map (#84), Tiers 0–3* — merged to `main` via *#106* (and |
| 15 | + *#101* for obligation 1.1). Sub-issues #86,#87,#89–#92,#94,#95 closed; *#93* |
| 16 | + (2.3 affine) intentionally left open as an AffineScript design spec |
| 17 | + (`proofs/affine/README.adoc`). `proofs/README.adoc` tracks status. |
| 18 | +* *Bugs fixed while proving:* the "spectral radius" in `esn` *and* `lsm` was the |
| 19 | + ∞-norm (now true ρ via power iteration); `claude-client` backoff had a |
| 20 | + `2u64.pow` overflow (now saturating/capped). |
| 21 | + |
| 22 | +== 2. `main` state |
| 23 | + |
| 24 | +* *Licence = MPL-2.0* (PMPL reverted in #102/#118). `Cargo.toml`, `LICENSE`, |
| 25 | + SPDX headers all MPL. |
| 26 | +* *Banned-language CI is GREEN:* `android/**` carve-out via #105 + |
| 27 | + `.hypatia-baseline.json` (estate reusable reads it). "Language Policy" and |
| 28 | + "Governance" pass. The two historic Kotlin reds are resolved. |
| 29 | +* *Two CI reds remain, both UPSTREAM / out of neurophone scope:* |
| 30 | +** `rust-ci` — thin wrapper for `hyperpolymath/standards/.github/workflows/rust-ci-reusable.yml`. |
| 31 | + Fails at *startup with 0 jobs* on the pinned SHA `cc5a372` *and* on `@main`. |
| 32 | + Root cause is in `standards` (reusable moved, or it rejects the |
| 33 | + `enable_audit`/`enable_coverage` inputs). *Cannot be fixed from neurophone.* |
| 34 | +** `hypatia-scan` — same class (estate scanner reusable/infra). |
| 35 | +** `Instant Sync` / `Mirror` / `Scorecard` — infra/external-forge/token, ignore. |
| 36 | +* *LATENT BUILD BREAK (fixed by PR #129, not yet merged):* workspace `Cargo.toml` |
| 37 | + declares `rand 0.10` / `rand_distr 0.6` (dependabot #49/#67) which are |
| 38 | + incompatible with `ndarray-rand 0.16` (needs `rand 0.9`); only masked by the |
| 39 | + committed `Cargo.lock`. A lockfile refresh breaks `esn`/`lsm`. |
| 40 | + |
| 41 | +== 3. My open PRs — recommended merge order |
| 42 | + |
| 43 | +. *#129* `fix/esn-lsm-rand-0.10` — revert `rand`→0.9 / `rand_distr`→0.5; |
| 44 | + un-breaks the workspace build. Verified `cargo build/test --workspace` green. |
| 45 | + *MERGE FIRST* (everything else rebases on it). |
| 46 | +. *#125* `chore/ignore-agent-worktrees` — gitignore `.claude/worktrees/`; also |
| 47 | + carries this `HANDOVER.adoc`. |
| 48 | +. *#119* `chore/consolidate-cicd-docs` — README licence badge PMPL→MPL only (the |
| 49 | + rust-ci repin attempt was reverted: `@main` also startup-fails). The PR will |
| 50 | + still show `rust-ci` red — that is pre-existing/upstream, not from this PR. |
| 51 | + |
| 52 | +== 4. Gossamer Android migration (epic #83) |
| 53 | + |
| 54 | +Decomposed into linked sub-issues *#108–#115*. RFC is PR *#97* (a parallel |
| 55 | +session) — it recommends *neurophone-local Java shims*, NOT growing gossamer. |
| 56 | +*Decisions captured:* drop the widget configure-activity (#113); `NativeLib` |
| 57 | +logic → `crates/neurophone-android` in Rust/Spark via JNI (#110); gossamer |
| 58 | +Android is WebView+JNI only (no Service/Receiver/Widget host upstream). |
| 59 | + |
| 60 | +*Sub-PRs (all DRAFT, branched off `main`):* |
| 61 | + |
| 62 | +[cols="1,2,3",options="header"] |
| 63 | +|=== |
| 64 | +| Step | PR | Branch / notes |
| 65 | +| #4 NativeLib→Rust/Spark | *#130* | `chore/gossamer-nativelib-port` — full 11-method JNI surface, 7 tests, verified green; *includes* the rand fix + pins `jni 0.21`. Strong. |
| 66 | +| #3 scaffolding | #121 + #126 | `chore/gossamer-scaffold-a` / `-b` — *DUPLICATES, pick one*. Depend on unpublished `gossamer-rs`. |
| 67 | +| #5 Service | #123 | `chore/gossamer-service` |
| 68 | +| #6 BootReceiver | #122 | `chore/gossamer-bootreceiver` |
| 69 | +| #7 Widgets | #128 | `chore/gossamer-widgets` |
| 70 | +| #8 UI | #127 | `chore/gossamer-ui` |
| 71 | +| #9 delete legacy `android/` | #124 | `chore/gossamer-delete-legacy` — *BLOCKED*, gated on all above |
| 72 | +|=== |
| 73 | + |
| 74 | +*JNI contract* (class `ai.neurophone.NativeLib`, lib `neurophone_android`): |
| 75 | +`init(String?)→bool`, `start()→bool`, `stop()`, `processSensor(int,float[],long-ns,int)→bool`, |
| 76 | +`queryLocal/queryClaude/query(String[,bool])→String`, `getNeuralContext()→String`, |
| 77 | +`getState()→JSON`, `reset()`, `isRunning()→bool`. Sensor ids: accel=1, magneto=2, |
| 78 | +gyro=4, light=5, prox=8. |
| 79 | + |
| 80 | +== 5. BLOCKED — needs owner decision |
| 81 | + |
| 82 | +* *`gossamer-rs` licence (AGPL) vs neurophone MPL-2.0* — compatibility call. |
| 83 | +* *`gossamer-rs` is unpublished* (not on crates.io) — how do scaffold PRs source |
| 84 | + it (git dep? path? vendored?). |
| 85 | +* *`rust-ci` + `hypatia-scan` reusables broken in `hyperpolymath/standards`* — |
| 86 | + fix must land there (out of neurophone scope); a standards prompt is drafted |
| 87 | + in the conversation. |
| 88 | +* *Merge approvals* for #119/#125/#129 and the gossamer chain. |
| 89 | +* *Not-mine parallel branches:* #97 RFC, #117 ci-DRY, `ci/delete-local-java-kotlin-check` |
| 90 | + (likely stale — #107 closed), `docs/reintroduce-architecture-build-install-proofs`. |
| 91 | + |
| 92 | +== 6. Dispatchable prompts already written (in the conversation) |
| 93 | + |
| 94 | +Ready to send to separate sessions; not yet dispatched: |
| 95 | + |
| 96 | +* Gossamer Android *assessment + grow native component support* (Service/ |
| 97 | + Receiver/Widget), with the NativeLib JNI surface as the reference contract. |
| 98 | +* *CI banned-language exemption* for the generated shim dir (neurophone + standards). |
| 99 | +* *Q6* — `standards` anti-pattern policy ownership + add a path-exclusion input. |
| 100 | +* *Q7* — neurophone Android migration *test plan* (Oppo Reno 13 / Dimensity 8350 |
| 101 | + vs emulator/Termux). |
| 102 | + |
| 103 | +== 7. Next actions (when unblocked) |
| 104 | + |
| 105 | +. Merge *#129* → *#125* → *#119*. |
| 106 | +. Resolve `gossamer-rs` licence + sourcing, then run the chain: pick one scaffold |
| 107 | + PR, merge *#130*, then #5–#8 (parallelisable), rebase + merge *#9*. |
| 108 | +. Get `standards` to fix `rust-ci-reusable` + `hypatia` → `rust-ci`/`hypatia-scan` |
| 109 | + go green. |
| 110 | +. Delete stale remote branches once their PRs close. |
0 commit comments