From 23ec1007cd61babc3f0a39979493c4f3c9bec0ec Mon Sep 17 00:00:00 2001 From: Mark Nolan Date: Sat, 12 Sep 2026 15:20:14 +0100 Subject: [PATCH 1/3] Add CLAUDE.md for Claude Code sessions Routes to the existing docs rather than restating them, and records the workflow constraints that aren't discoverable from the code alone. Co-Authored-By: Claude Opus 5 --- CLAUDE.md | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 CLAUDE.md diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 000000000..f99e73567 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,37 @@ +# Shimmer-Java-Android-API + +Java driver and API for Shimmer devices, shared by PC and Android consumers. + +## Build +**JDK 11**, **Gradle 8.10.2**. Each subproject carries its own wrapper — there is none at the repo root: +``` +cd ShimmerDriverPC && ./gradlew build -i +``` +CI (`gradle.yml`) builds **only `ShimmerDriverPC`**, and only on `master` / PRs into it. That means a +change to another subproject can merge without ever being compiled by CI — build the affected +subproject locally before you claim it works. + +Test results land in `**/build/test-results/test/*.xml`. + +## Subprojects +| Project | Role | +|---|---| +| `ShimmerDriver` | Core, platform-neutral driver | +| `ShimmerDriverPC` | PC-side driver — the only one CI builds | +| `ShimmerBluetoothManager` | Connection management | +| `ShimmerLSL` | Lab Streaming Layer integration | +| `JavaShimmerConnect`, `ShimmerTCP`, `ShimmerTCPExample` | Connectivity apps/examples | +| `ShimmerPCBasicExamples` | Start here for usage — `SensorMapsExample`, `ShimmerPCExample` | + +## Eclipse-bound +Every subproject has a `.classpath`/`.project`. The Eclipse workspace binds them by absolute path, +so the repo cannot be relocated. Two checkouts of this repo exist on this machine — one standalone, +one as a submodule of `ASM_PC` — so confirm which one is in play before editing. + +## Consumed as a submodule +`ASM_PC` includes this repo at its root. A driver change can break ASM_PC's build; check there too. + +## API conventions +The README documents a long-running deprecation: state and data are delivered via +`ShimmerBluetooth.MSG_IDENTIFIER_*` handler messages, **not** the old `Shimmer.MESSAGE_*` / +`Shimmer.STATE_*` constants. Follow the current form in new code. From 0ba25e7d339636b81a083955f3e22dc38bfba46b Mon Sep 17 00:00:00 2001 From: Mark Nolan Date: Mon, 14 Sep 2026 11:46:53 +0100 Subject: [PATCH 2/3] Correct the relocation claim and drop machine-specific detail in CLAUDE.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The file said the repo "cannot be relocated"; it can, it just needs an Eclipse re-import afterwards. It also described one developer's two local checkouts, which is not true for anyone else cloning this repo. The genuinely shared fact — that a working copy may be the ASM_PC submodule in detached HEAD — now sits with the submodule section. Co-Authored-By: Claude Opus 5 --- CLAUDE.md | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index f99e73567..565923079 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -24,12 +24,16 @@ Test results land in `**/build/test-results/test/*.xml`. | `ShimmerPCBasicExamples` | Start here for usage — `SensorMapsExample`, `ShimmerPCExample` | ## Eclipse-bound -Every subproject has a `.classpath`/`.project`. The Eclipse workspace binds them by absolute path, -so the repo cannot be relocated. Two checkouts of this repo exist on this machine — one standalone, -one as a submodule of `ASM_PC` — so confirm which one is in play before editing. +Every subproject carries a `.classpath`/`.project`, and an Eclipse workspace registers each one by +absolute path. Relocating the repo therefore means re-importing it in Eclipse, not just moving the +folder. ## Consumed as a submodule -`ASM_PC` includes this repo at its root. A driver change can break ASM_PC's build; check there too. +`ASM_PC` includes this repo at its root (DEV-928), pinned to an exact commit and built from source +rather than consumed as a published artifact. A working copy of this repo may therefore be either a +standalone clone or that submodule — the submodule sits in **detached HEAD** at the pinned commit, +which is normal. Driver changes made there follow the two-step flow in ASM_PC's own CLAUDE.md, and a +driver change can break ASM_PC's build, so check there too. ## API conventions The README documents a long-running deprecation: state and data are delivered via From 86ed14b2efc7e4380876d4c80d2c7bc394e82128 Mon Sep 17 00:00:00 2001 From: Mark Nolan Date: Tue, 15 Sep 2026 12:12:34 +0100 Subject: [PATCH 3/3] Rename CLAUDE.md to AGENTS.md and bridge with an import MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit AGENTS.md is the vendor-neutral convention for agent instructions — an open spec stewarded by the Linux Foundation's Agentic AI Foundation, read directly by Cursor, Copilot, Codex and others. The content was already tool-neutral, so this is a rename plus a one-line bridge, with no change to what it says. Claude Code reads CLAUDE.md rather than AGENTS.md, so a one-line CLAUDE.md imports it. A symlink is the documented alternative but needs Administrator privileges or Developer Mode on Windows, which rules it out for this team. Folded into this branch rather than sent as a follow-up PR, so the file lands with its final name first time. Co-Authored-By: Claude Opus 5 --- AGENTS.md | 41 +++++++++++++++++++++++++++++++++++++++++ CLAUDE.md | 48 +++++++++++------------------------------------- 2 files changed, 52 insertions(+), 37 deletions(-) create mode 100644 AGENTS.md diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 000000000..565923079 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,41 @@ +# Shimmer-Java-Android-API + +Java driver and API for Shimmer devices, shared by PC and Android consumers. + +## Build +**JDK 11**, **Gradle 8.10.2**. Each subproject carries its own wrapper — there is none at the repo root: +``` +cd ShimmerDriverPC && ./gradlew build -i +``` +CI (`gradle.yml`) builds **only `ShimmerDriverPC`**, and only on `master` / PRs into it. That means a +change to another subproject can merge without ever being compiled by CI — build the affected +subproject locally before you claim it works. + +Test results land in `**/build/test-results/test/*.xml`. + +## Subprojects +| Project | Role | +|---|---| +| `ShimmerDriver` | Core, platform-neutral driver | +| `ShimmerDriverPC` | PC-side driver — the only one CI builds | +| `ShimmerBluetoothManager` | Connection management | +| `ShimmerLSL` | Lab Streaming Layer integration | +| `JavaShimmerConnect`, `ShimmerTCP`, `ShimmerTCPExample` | Connectivity apps/examples | +| `ShimmerPCBasicExamples` | Start here for usage — `SensorMapsExample`, `ShimmerPCExample` | + +## Eclipse-bound +Every subproject carries a `.classpath`/`.project`, and an Eclipse workspace registers each one by +absolute path. Relocating the repo therefore means re-importing it in Eclipse, not just moving the +folder. + +## Consumed as a submodule +`ASM_PC` includes this repo at its root (DEV-928), pinned to an exact commit and built from source +rather than consumed as a published artifact. A working copy of this repo may therefore be either a +standalone clone or that submodule — the submodule sits in **detached HEAD** at the pinned commit, +which is normal. Driver changes made there follow the two-step flow in ASM_PC's own CLAUDE.md, and a +driver change can break ASM_PC's build, so check there too. + +## API conventions +The README documents a long-running deprecation: state and data are delivered via +`ShimmerBluetooth.MSG_IDENTIFIER_*` handler messages, **not** the old `Shimmer.MESSAGE_*` / +`Shimmer.STATE_*` constants. Follow the current form in new code. diff --git a/CLAUDE.md b/CLAUDE.md index 565923079..31ad3ff31 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1,41 +1,15 @@ -# Shimmer-Java-Android-API +@AGENTS.md -Java driver and API for Shimmer devices, shared by PC and Android consumers. +