feat(plugin): reference-only entity designation on the HostApi (API v9)

The HostApi gains set_reference_only(handle, reference_only): a plugin can
designate display geometry it owns and refreshes. The entity renders like any
other, but the built-in edit paths treat it like an entity on a locked layer,
while the owning plugin keeps full write access (update, erase, XDATA).

- Appended at the trait tail with a refusing default so plugins keep compiling
  against older hosts; the loader gate range is untouched.
- IPC: SetReferenceOnly / SetReferenceOnlyResult round-trip through the
  shared dispatch, the V3 client and the V4 client, with the shared document
  cache invalidated on success.
- build.rs version_info and manifest API_VERSION bumped to 9 in lockstep.
- Evidence: reference_only_request_and_response_roundtrip (bincode round-trip
  of the request and both response payloads).
This commit is contained in:
Sebastian committed 2026-10-13 12:38:53 +02:00
1 parent 9cc890c911
commit 1f552038a8
8 files changed
+123 -3

No files matched your search

@@ -226,6 +226,11 @@ pub enum PluginRequest {
ListXRecords {
dictionary_path: Vec<String>,
},
/// V9 (additive): mark an entity reference-only (plugin-owned display data).
SetReferenceOnly {
handle: Handle,
reference_only: bool,
},
}
/// Responses the host sends back for `PluginRequest`.
@@ -272,6 +277,8 @@ pub enum PluginResponse {
XRecordDeleteResult(Result<crate::host::XRecord, String>),
/// V8 (additive): XRecord names under a dictionary path.
XRecordNames(Result<Vec<String>, String>),
/// V9 (additive): outcome of the reference-only designation.
SetReferenceOnlyResult(Result<(), String>),
}
/// Messages sent from the host to the plugin runner.