reasampler_pure_library(wire SOURCES wire.cpp)
reasampler_test(wire LINK wire)

reasampler_pure_library(assignment_request SOURCES assignment_request.cpp LINK PRIVATE wire)
reasampler_test(assignment_request LINK assignment_request)

# app_version is PUBLIC: the action's lookup name is channel-qualified, so a consumer that
# resolves the action reads the same channel identity the extension registered under.
reasampler_pure_library(bake_wire SOURCES bake_wire.cpp LINK PRIVATE wire PUBLIC app_version)
reasampler_test(bake_wire LINK bake_wire)

reasampler_pure_library(sample_usage SOURCES sample_usage.cpp LINK PRIVATE wire)
# prune_reconcile composes the protection proof at the pure layer: a capture held by a live
# instance lands in the referenced union, so pruneOrphans can never emit it.
reasampler_test(sample_usage LINK sample_usage prune_reconcile)

# The drop payload is built through the instrument's OWN state serializer rather than a
# parallel byte writer, so the cross-artifact contract cannot drift — hence the link to
# component_state_io, which stays engine-free. The class-ID string derives from the frozen
# UID macros, channel-selected via the generated version header, hence its include dir.
# drag_out is the dependency-free owner of the ReaperSurface vocabulary this module classifies
# INTO; the edge points this way so drag_out (and card_drag through it) stays free of the
# serializer.
reasampler_pure_library(instrument_drop SOURCES instrument_drop.cpp LINK PUBLIC component_state_io drag_out)
target_include_directories(instrument_drop PUBLIC ${PROJECT_BINARY_DIR}/generated)
reasampler_test(instrument_drop LINK instrument_drop)
