FM3 adapter: the same protocol family, verified rather than assumed
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 5/5
- Estimated time
- Over a week
- Newbie friendliness
- 36/100
Research direction
Start with fm9/adapter.py, fm9/protocol.py, and fm9/sim.py, then read docs/PROTOCOL-CONTRIBUTIONS.md and docs/PROTOCOL.md for FM9 assumptions that require FM3 verification. Run the hardware regression on a real FM3 and record its firmware version and evidence; completion requires a truthful adapter, registry, simulator, green tests, verified protocol notes, and proof that only decoded message types are reachable.
Written by the indexing model from the issue text.
Description
An outside contributor has offered to build an FM3 adapter. This issue is the landing pad: what the work actually is, what "done" means here, and what each side owes the other. Whoever picks it up, comment and it is yours.
Why the FM3 is the natural next device
ToneCommand supports exactly one device today. The HeadRush adapter (#33) was framed as the easy second device because its API is open; the FM3 is the close second device, because it speaks the same gen-3 Fractal editor protocol family the FM9 work already decoded. fm9/protocol.py is a port of mcp-midi-control's gen-3 codec, and Fractal's own "Axe-Fx III MIDI for Third-Party Devices" Rev 1.4 spec covers the documented command set for the whole family. Unlike ToneX (#23, #27), there is no protocol archaeology to do from scratch. There is, however, real verification to do, and none of it can be assumed.
What an adapter is
Exactly what #33 describes: one Python class implementing the fm9/adapter.py contract (status, preset/scene/bypass/channel, verified parameter writes, slot reads without selection, whitelisted store), plus an honest Capabilities declaration, a parameter registry the planner can reason about, and a simulator model so the test suite runs without hardware. No UI work; the safety layer (validation, confirmation, preset pinning, store whitelist, read-back verification) is inherited, not reimplemented. That is the architecture's whole point.
FM3-specific work items
- Model byte. The FM9 codec hardcodes model byte
0x12from the Rev 1.4 spec; the FM3 has its own byte in the same document. Thread it through the codec as a parameter rather than forking the file. - Grid geometry and cable encodings. The FM3 grid is smaller than the FM9's, and every cable-encoding claim in
docs/PROTOCOL-CONTRIBUTIONS.md(items 5, 7, 11, 12) was proven on FM9 hardware only. Each one must be re-proven on an FM3 by write-plus-readback before the adapter may use it. The row-2 same-row quirk in particular may or may not exist there; do not carry it over on faith. - Blocks and parameters. The vendored catalog and grounding sidecars were built against the FM9's rosters. The FM3 shares the modeling family but not the block complement or counts; it needs its own registry mapping, with the same facts-only, cited, fail-loudly-on-drift rules the FM9 data follows.
- The read paths that lie. The dead ends documented in items 4 and 8 (zeroed sub 09 00 GETs, display-name queries returning roster defaults, asynchronous writes with plausible stale reads) were observed on FM9 firmware. Verify which of them hold on FM3 firmware rather than assuming either way, and record the answers in
docs/PROTOCOL.mdmarked with the device and firmware they were proven on. - Rule zero is structural. The transport layer's message whitelist means firmware and bootloader operations are unreachable by construction. That property must hold identically for the FM3 adapter, on day one, not as a later hardening pass.
- Simulator honesty.
fm9/sim.pyis the model, including its habit of naming undecoded territory instead of silently simulating it. An FM3 sim that pretends is worse than none.
The division of labor
The maintainer owns no FM3, so hardware verification belongs entirely to whoever builds this, and their regression log is the evidence the review will ask for: the equivalent of hardware_regression.py run on a real FM3, with firmware version stated. In return: contract questions answered quickly, review with file-level findings, and protocol discoveries land in docs/PROTOCOL.md with credit, the same way every FM9 finding did.
Done means
- Adapter class behind the existing contract, capabilities declared honestly, partial is fine if truthful.
- FM3 registry and simulator, full test suite green without hardware.
- Write-plus-readback verification on a real FM3, logged with firmware version.
- Protocol notes contributed back, each claim marked verified or UNDECODED.
- Rule zero demonstrated: no path to any message type outside the decoded surface.
- Dominant language
- Python
- Stars
- 7
- Forks
- 3
- Avg merge
- 2h 20m
- Merged PRs (30d)
- 48
Getting set up
This project ships no dev container, Dockerfile or contributing guide, so setting up is up to you: start from its README, and see our first-contribution guide for the general steps.
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from monzta1/ToneCommand
-
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
monzta1/ToneCommand#293 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 67/100
monzta1/ToneCommand#268 ·
Maintainers usually reply within 1 day
-
Harden local write routes: trusted hosts, origin checks, Gig Lock during a SENDPossibly taken @monzta1 claimed this today. Open
Difficulty 4/5 3-5 days Newbie friendliness 25/100
monzta1/ToneCommand#291 ·
Maintainers usually reply within 1 day
-
Difficulty 5/5 Over a week Newbie friendliness 35/100
monzta1/ToneCommand#269 ·
Maintainers usually reply within 1 day
-
bug device
Difficulty 4/5 3-5 days Newbie friendliness 12/100
monzta1/ToneCommand#250 · 1 comment ·
Maintainers usually reply within 1 day
All issues in monzta1/ToneCommand
Similar issues
-
app: scripts status: backlog type: documentation
Difficulty 2/5 1-3 hours Newbie friendliness 86/100
netbox-community/netbox-scripts#68 ·
Maintainers usually reply within 1 day
-
Difficulty 1/5 Under an hour Newbie friendliness 91/100
marin-community/marin#10765 ·
Maintainers usually reply within 1 day
-
Difficulty 1/5 Under an hour Newbie friendliness 70/100
flathub/com.unity.UnityHub#230 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
Maintainers usually reply within 1 day
-
namespace operations
Difficulty 1/5 Under an hour Newbie friendliness 63/100
EclipseFdn/open-vsx.org#14910 ·
Maintainers usually reply within 1 day