#pragma once // track_guid — the ONE place a MediaTrack* is formatted into the canonical GUID // string used as a membership-index key. Both the Design View shell (view.cpp) and // the actions layer (actions.cpp) key membership on this exact string, so the key // contract lives in a single helper rather than being re-derived (and drifting) at // two call sites (the cross-module key contract flagged in D2 review). // // REAPER-facing: the .cpp includes reaper_plugin_functions.h WITHOUT // REAPERAPI_IMPLEMENT (main.cpp owns the API pointers; here they are extern — // CLAUDE.md §contract). MediaTrack is forward-declared so this header stays SDK-lite. #include class MediaTrack; namespace reasampler { // REAPER's canonical "{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}" form of a track's // GUID (GetTrackGUID -> guidToString). Empty string if `tr` has no GUID. This IS // the membership-index key format — it must match guidToString's braces exactly so // the view tree keys and the model/actions keys align. std::string guidString(MediaTrack* tr); } // namespace reasampler