memlnaut-nisps/firmware/MEMLNaut-NISPS/lib/memllib/reference/InterfaceRLFileFormat.hpp
monkey-w1n5t0n 1f0eecfe78 docs(firmware): vendor InterfaceRL as read-only reference
InterfaceRL.{hpp,cpp,tpp} + InterfaceRLFileFormat.hpp are the upstream
reference implementation of the entire NISPS feedback subsystem —
nisps/ml/{geo_push,replay,feedback,jolt,ou_noise}.hpp are all ports of it,
several still carrying `// upstream InterfaceRL.hpp:NNN` line references.
The Phase-4 vendoring dropped examples/ because nothing compiled it. That
was correct for the build and wrong for the codebase: with the source of
truth out of tree, upstream redesigned the geometric dislike (deleted the
/(1+len) taper, doubled kGeometricPushScale, tripled the negative-LR base,
moved to batch training over all negatives every tick) and we did not notice
for months.

Copied verbatim from memllib @ e291192 — the same commit the rest of the
vendored tree pins — into lib/memllib/reference/, which sits OUTSIDE src/
and is therefore never compiled: PlatformIO's LDF only recursively builds an
Arduino-format library's src/ folder. Verified: slpworkshop still builds
(RAM 28.8%, flash 2.1%).

reference/README.md states the two rules (never compiled, never edited — a
divergence from upstream is a recorded decision, not an edit here) and
VENDORED.md's "what was dropped" section now tells the truth.

Resolves ALIGNMENT defect 6c.
2026-07-25 11:14:35 +02:00

19 lines
625 B
C++

#ifndef INTERFACE_RL_FILE_FORMAT_HPP
#define INTERFACE_RL_FILE_FORMAT_HPP
#include <stdint.h>
static constexpr uint16_t MEML_FILE_FORMAT_VERSION = 1;
// Binary file layout:
// MEMLFileHeader (26 bytes)
// extra_size bytes of mode-specific data (may be 0)
// MLP binary (existing format)
struct MEMLFileHeader {
char magic[4]; // always "MEML"
uint16_t format_version; // MEML_FILE_FORMAT_VERSION
char mode_tag[16]; // null-padded mode identifier, e.g. "VerbFX"
uint16_t extra_size; // bytes of mode-specific data immediately following
};
#endif // INTERFACE_RL_FILE_FORMAT_HPP