9e57bfd451
**F41 — public-api baselines (M6 DoD bullet 5)**
`design/public-api/{crate}.txt` for all 9 workspace crates, generated
via `cargo +nightly public-api --simplified -p <crate>`. Per-crate
baseline sizes:
- mxaccess-codec: 2516 lines
- mxaccess-asb: 1258 lines
- mxaccess-rpc: 1273 lines
- mxaccess-asb-nettcp: 708 lines
- mxaccess: 542 lines
- mxaccess-galaxy: 374 lines
- mxaccess-callback: 170 lines
- mxaccess-compat: 123 lines
- mxaccess-nmx: 118 lines
`design/public-api/README.md` documents the update procedure
(install nightly + cargo-public-api, regenerate the affected baseline
on intentional API changes, commit alongside).
`.github/workflows/rust.yml` gains a `public-api` job that runs the
same diff against the committed baseline; drift fails CI with a
unified diff in the log so the PR author can either revert or
update the baseline.
**F44 reconciliation — multi-record DataUpdate codec**
Cherry-picked from the F44 sub-agent's worktree (commit `aec6a0c`):
`subscription_message.rs::parse_data_update` now loops over
`record_count` like `parse_subscription_status` does, accepting any
positive count. The .NET reference still hard-throws on
`record_count != 1`; the Rust codec deliberately diverges per the F44
evidence walk against `captures/094-frida-buffered-separate-writer/
frida-events.tsv:145` (a `0x33` DataUpdate body with `record_count = 2`,
inner_length = 23 (preamble) + 2 * 19 (records) = 61, post a
separate-session writer triggering two value changes inside one
`SetBufferedUpdateInterval(1000)` window).
Two new round-trip tests:
- `data_update_multi_record_round_trip` — synthesises a 2-record body,
parses, asserts both records decode to expected Int32 values.
- `data_update_capture_094_truncated_record_errors` — truncates the
capture-094 fixture mid-second-record, asserts CodecError::Decode.
New wire-byte fixtures under `crates/mxaccess-codec/tests/fixtures/m6-buffered/`:
- `094-line145-dataupdate-recordcount2.bin` (57 bytes, `0x33` multi-record)
- `094-line48-substatus-recordcount2.bin` (101 bytes, `0x32` multi-record)
R2 in `design/70-risks-and-open-questions.md` updated from
"single-sample (settled silently)" to "settled per option (a) — codec
relaxed; multi-record observed in production-stack tracing."
`design/followups.md`: F44's verdict updated to reflect the
contradiction-then-relaxation, with reference to the new tests +
fixtures.
Workspace 792 → 794 tests pass; clippy clean; rustdoc clean.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
119 lines
16 KiB
Plaintext
119 lines
16 KiB
Plaintext
pub mod mxaccess_nmx
|
|
pub use mxaccess_nmx::WriteValue
|
|
pub mod mxaccess_nmx::client
|
|
pub use mxaccess_nmx::client::WriteValue
|
|
#[non_exhaustive] pub enum mxaccess_nmx::client::NmxClientError
|
|
pub mxaccess_nmx::client::NmxClientError::Codec(mxaccess_codec::error::CodecError)
|
|
pub mxaccess_nmx::client::NmxClientError::EmptyTransferDataBody
|
|
pub mxaccess_nmx::client::NmxClientError::EndpointResolution
|
|
pub mxaccess_nmx::client::NmxClientError::EndpointResolution::reason: alloc::string::String
|
|
pub mxaccess_nmx::client::NmxClientError::NonZeroHresult
|
|
pub mxaccess_nmx::client::NmxClientError::NonZeroHresult::hresult: i32
|
|
pub mxaccess_nmx::client::NmxClientError::NonZeroHresult::operation: &'static str
|
|
pub mxaccess_nmx::client::NmxClientError::Transport(mxaccess_rpc::transport::TransportError)
|
|
pub mxaccess_nmx::client::NmxClientError::UnsupportedDataType(mxaccess_galaxy::metadata::UnsupportedDataType)
|
|
impl core::convert::From<mxaccess_codec::error::CodecError> for mxaccess_nmx::client::NmxClientError
|
|
pub fn mxaccess_nmx::client::NmxClientError::from(source: mxaccess_codec::error::CodecError) -> Self
|
|
impl core::convert::From<mxaccess_galaxy::metadata::UnsupportedDataType> for mxaccess_nmx::client::NmxClientError
|
|
pub fn mxaccess_nmx::client::NmxClientError::from(source: mxaccess_galaxy::metadata::UnsupportedDataType) -> Self
|
|
impl core::convert::From<mxaccess_rpc::transport::TransportError> for mxaccess_nmx::client::NmxClientError
|
|
pub fn mxaccess_nmx::client::NmxClientError::from(source: mxaccess_rpc::transport::TransportError) -> Self
|
|
impl core::error::Error for mxaccess_nmx::client::NmxClientError
|
|
pub fn mxaccess_nmx::client::NmxClientError::source(&self) -> core::option::Option<&(dyn core::error::Error + 'static)>
|
|
impl core::fmt::Debug for mxaccess_nmx::client::NmxClientError
|
|
pub fn mxaccess_nmx::client::NmxClientError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
|
|
impl core::fmt::Display for mxaccess_nmx::client::NmxClientError
|
|
pub fn mxaccess_nmx::client::NmxClientError::fmt(&self, __formatter: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
|
|
impl core::marker::Freeze for mxaccess_nmx::client::NmxClientError
|
|
impl core::marker::Send for mxaccess_nmx::client::NmxClientError
|
|
impl core::marker::Sync for mxaccess_nmx::client::NmxClientError
|
|
impl core::marker::Unpin for mxaccess_nmx::client::NmxClientError
|
|
impl core::marker::UnsafeUnpin for mxaccess_nmx::client::NmxClientError
|
|
impl !core::panic::unwind_safe::RefUnwindSafe for mxaccess_nmx::client::NmxClientError
|
|
impl !core::panic::unwind_safe::UnwindSafe for mxaccess_nmx::client::NmxClientError
|
|
pub struct mxaccess_nmx::client::NmxClient
|
|
impl mxaccess_nmx::client::NmxClient
|
|
pub async fn mxaccess_nmx::client::NmxClient::add_subscriber_engine(&mut self, local_engine_id: i32, subscriber_galaxy_id: i32, subscriber_platform_id: i32, subscriber_engine_id: i32) -> core::result::Result<i32, mxaccess_nmx::client::NmxClientError>
|
|
pub async fn mxaccess_nmx::client::NmxClient::advise_supervisory(&mut self, local_engine_id: i32, tag: &mxaccess_galaxy::metadata::GalaxyTagMetadata, item_correlation_id: [u8; 16], galaxy_id: u8, source_galaxy_id: i32, source_platform_id: i32) -> core::result::Result<i32, mxaccess_nmx::client::NmxClientError>
|
|
pub async fn mxaccess_nmx::client::NmxClient::connect(addr: core::net::socket_addr::SocketAddr, service_ipid: mxaccess_rpc::guid::Guid, ntlm: mxaccess_rpc::ntlm::NtlmClientContext) -> core::result::Result<Self, mxaccess_nmx::client::NmxClientError>
|
|
pub async fn mxaccess_nmx::client::NmxClient::connect_engine(&mut self, local_engine_id: i32, remote_galaxy_id: i32, remote_platform_id: i32, remote_engine_id: i32) -> core::result::Result<i32, mxaccess_nmx::client::NmxClientError>
|
|
pub fn mxaccess_nmx::client::NmxClient::from_bound_transport(transport: mxaccess_rpc::transport::DceRpcTcpClient, service_ipid: mxaccess_rpc::guid::Guid) -> Self
|
|
pub async fn mxaccess_nmx::client::NmxClient::get_partner_version(&mut self, galaxy_id: i32, platform_id: i32, engine_id: i32) -> core::result::Result<i32, mxaccess_nmx::client::NmxClientError>
|
|
pub async fn mxaccess_nmx::client::NmxClient::register_engine_2(&mut self, local_engine_id: i32, engine_name: &str, version: i32, callback_obj_ref: &[u8]) -> core::result::Result<i32, mxaccess_nmx::client::NmxClientError>
|
|
pub async fn mxaccess_nmx::client::NmxClient::register_engine_2_without_callback(&mut self, local_engine_id: i32, engine_name: &str, version: i32) -> core::result::Result<i32, mxaccess_nmx::client::NmxClientError>
|
|
pub async fn mxaccess_nmx::client::NmxClient::register_reference(&mut self, local_engine_id: i32, route_tag: &mxaccess_galaxy::metadata::GalaxyTagMetadata, message: &mxaccess_codec::reference_registration::NmxReferenceRegistrationMessage, galaxy_id: u8, source_galaxy_id: i32, source_platform_id: i32) -> core::result::Result<i32, mxaccess_nmx::client::NmxClientError>
|
|
pub async fn mxaccess_nmx::client::NmxClient::remove_subscriber_engine(&mut self, local_engine_id: i32, subscriber_galaxy_id: i32, subscriber_platform_id: i32, subscriber_engine_id: i32) -> core::result::Result<i32, mxaccess_nmx::client::NmxClientError>
|
|
pub async fn mxaccess_nmx::client::NmxClient::send_observed_pre_advise_metadata(&mut self, local_engine_id: i32, item_correlation_id: [u8; 16], galaxy_id: u8, source_galaxy_id: i32, source_platform_id: i32) -> core::result::Result<i32, mxaccess_nmx::client::NmxClientError>
|
|
pub fn mxaccess_nmx::client::NmxClient::service_ipid(&self) -> mxaccess_rpc::guid::Guid
|
|
pub async fn mxaccess_nmx::client::NmxClient::set_heartbeat_send_interval(&mut self, ticks_per_beat: i32, max_missed_ticks: i32) -> core::result::Result<i32, mxaccess_nmx::client::NmxClientError>
|
|
pub async fn mxaccess_nmx::client::NmxClient::transfer_data(&mut self, remote_galaxy_id: i32, remote_platform_id: i32, remote_engine_id: i32, message_body: &[u8]) -> core::result::Result<i32, mxaccess_nmx::client::NmxClientError>
|
|
pub async fn mxaccess_nmx::client::NmxClient::un_advise(&mut self, local_engine_id: i32, tag: &mxaccess_galaxy::metadata::GalaxyTagMetadata, item_correlation_id: [u8; 16], galaxy_id: u8, source_galaxy_id: i32, source_platform_id: i32) -> core::result::Result<i32, mxaccess_nmx::client::NmxClientError>
|
|
pub async fn mxaccess_nmx::client::NmxClient::unregister_engine(&mut self, local_engine_id: i32) -> core::result::Result<i32, mxaccess_nmx::client::NmxClientError>
|
|
pub async fn mxaccess_nmx::client::NmxClient::write(&mut self, local_engine_id: i32, tag: &mxaccess_galaxy::metadata::GalaxyTagMetadata, value: &mxaccess_codec::write_message::WriteValue, write_index: i32, client_token: u32, galaxy_id: u8, source_galaxy_id: i32, source_platform_id: i32) -> core::result::Result<i32, mxaccess_nmx::client::NmxClientError>
|
|
pub async fn mxaccess_nmx::client::NmxClient::write2(&mut self, local_engine_id: i32, tag: &mxaccess_galaxy::metadata::GalaxyTagMetadata, value: &mxaccess_codec::write_message::WriteValue, timestamp_filetime: i64, write_index: i32, client_token: u32, galaxy_id: u8, source_galaxy_id: i32, source_platform_id: i32) -> core::result::Result<i32, mxaccess_nmx::client::NmxClientError>
|
|
pub async fn mxaccess_nmx::client::NmxClient::write_secured2(&mut self, local_engine_id: i32, tag: &mxaccess_galaxy::metadata::GalaxyTagMetadata, value: &mxaccess_codec::write_message::WriteValue, timestamp_filetime: i64, client_name: &str, current_user_id: i32, verifier_user_id: i32, write_index: i32, client_token: u32, galaxy_id: u8, source_galaxy_id: i32, source_platform_id: i32) -> core::result::Result<i32, mxaccess_nmx::client::NmxClientError>
|
|
impl !core::marker::Freeze for mxaccess_nmx::client::NmxClient
|
|
impl core::marker::Send for mxaccess_nmx::client::NmxClient
|
|
impl core::marker::Sync for mxaccess_nmx::client::NmxClient
|
|
impl core::marker::Unpin for mxaccess_nmx::client::NmxClient
|
|
impl core::marker::UnsafeUnpin for mxaccess_nmx::client::NmxClient
|
|
impl core::panic::unwind_safe::RefUnwindSafe for mxaccess_nmx::client::NmxClient
|
|
impl core::panic::unwind_safe::UnwindSafe for mxaccess_nmx::client::NmxClient
|
|
#[non_exhaustive] pub enum mxaccess_nmx::NmxClientError
|
|
pub mxaccess_nmx::NmxClientError::Codec(mxaccess_codec::error::CodecError)
|
|
pub mxaccess_nmx::NmxClientError::EmptyTransferDataBody
|
|
pub mxaccess_nmx::NmxClientError::EndpointResolution
|
|
pub mxaccess_nmx::NmxClientError::EndpointResolution::reason: alloc::string::String
|
|
pub mxaccess_nmx::NmxClientError::NonZeroHresult
|
|
pub mxaccess_nmx::NmxClientError::NonZeroHresult::hresult: i32
|
|
pub mxaccess_nmx::NmxClientError::NonZeroHresult::operation: &'static str
|
|
pub mxaccess_nmx::NmxClientError::Transport(mxaccess_rpc::transport::TransportError)
|
|
pub mxaccess_nmx::NmxClientError::UnsupportedDataType(mxaccess_galaxy::metadata::UnsupportedDataType)
|
|
impl core::convert::From<mxaccess_codec::error::CodecError> for mxaccess_nmx::client::NmxClientError
|
|
pub fn mxaccess_nmx::client::NmxClientError::from(source: mxaccess_codec::error::CodecError) -> Self
|
|
impl core::convert::From<mxaccess_galaxy::metadata::UnsupportedDataType> for mxaccess_nmx::client::NmxClientError
|
|
pub fn mxaccess_nmx::client::NmxClientError::from(source: mxaccess_galaxy::metadata::UnsupportedDataType) -> Self
|
|
impl core::convert::From<mxaccess_rpc::transport::TransportError> for mxaccess_nmx::client::NmxClientError
|
|
pub fn mxaccess_nmx::client::NmxClientError::from(source: mxaccess_rpc::transport::TransportError) -> Self
|
|
impl core::error::Error for mxaccess_nmx::client::NmxClientError
|
|
pub fn mxaccess_nmx::client::NmxClientError::source(&self) -> core::option::Option<&(dyn core::error::Error + 'static)>
|
|
impl core::fmt::Debug for mxaccess_nmx::client::NmxClientError
|
|
pub fn mxaccess_nmx::client::NmxClientError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
|
|
impl core::fmt::Display for mxaccess_nmx::client::NmxClientError
|
|
pub fn mxaccess_nmx::client::NmxClientError::fmt(&self, __formatter: &mut core::fmt::Formatter<'_>) -> core::fmt::Result
|
|
impl core::marker::Freeze for mxaccess_nmx::client::NmxClientError
|
|
impl core::marker::Send for mxaccess_nmx::client::NmxClientError
|
|
impl core::marker::Sync for mxaccess_nmx::client::NmxClientError
|
|
impl core::marker::Unpin for mxaccess_nmx::client::NmxClientError
|
|
impl core::marker::UnsafeUnpin for mxaccess_nmx::client::NmxClientError
|
|
impl !core::panic::unwind_safe::RefUnwindSafe for mxaccess_nmx::client::NmxClientError
|
|
impl !core::panic::unwind_safe::UnwindSafe for mxaccess_nmx::client::NmxClientError
|
|
pub struct mxaccess_nmx::NmxClient
|
|
impl mxaccess_nmx::client::NmxClient
|
|
pub async fn mxaccess_nmx::client::NmxClient::add_subscriber_engine(&mut self, local_engine_id: i32, subscriber_galaxy_id: i32, subscriber_platform_id: i32, subscriber_engine_id: i32) -> core::result::Result<i32, mxaccess_nmx::client::NmxClientError>
|
|
pub async fn mxaccess_nmx::client::NmxClient::advise_supervisory(&mut self, local_engine_id: i32, tag: &mxaccess_galaxy::metadata::GalaxyTagMetadata, item_correlation_id: [u8; 16], galaxy_id: u8, source_galaxy_id: i32, source_platform_id: i32) -> core::result::Result<i32, mxaccess_nmx::client::NmxClientError>
|
|
pub async fn mxaccess_nmx::client::NmxClient::connect(addr: core::net::socket_addr::SocketAddr, service_ipid: mxaccess_rpc::guid::Guid, ntlm: mxaccess_rpc::ntlm::NtlmClientContext) -> core::result::Result<Self, mxaccess_nmx::client::NmxClientError>
|
|
pub async fn mxaccess_nmx::client::NmxClient::connect_engine(&mut self, local_engine_id: i32, remote_galaxy_id: i32, remote_platform_id: i32, remote_engine_id: i32) -> core::result::Result<i32, mxaccess_nmx::client::NmxClientError>
|
|
pub fn mxaccess_nmx::client::NmxClient::from_bound_transport(transport: mxaccess_rpc::transport::DceRpcTcpClient, service_ipid: mxaccess_rpc::guid::Guid) -> Self
|
|
pub async fn mxaccess_nmx::client::NmxClient::get_partner_version(&mut self, galaxy_id: i32, platform_id: i32, engine_id: i32) -> core::result::Result<i32, mxaccess_nmx::client::NmxClientError>
|
|
pub async fn mxaccess_nmx::client::NmxClient::register_engine_2(&mut self, local_engine_id: i32, engine_name: &str, version: i32, callback_obj_ref: &[u8]) -> core::result::Result<i32, mxaccess_nmx::client::NmxClientError>
|
|
pub async fn mxaccess_nmx::client::NmxClient::register_engine_2_without_callback(&mut self, local_engine_id: i32, engine_name: &str, version: i32) -> core::result::Result<i32, mxaccess_nmx::client::NmxClientError>
|
|
pub async fn mxaccess_nmx::client::NmxClient::register_reference(&mut self, local_engine_id: i32, route_tag: &mxaccess_galaxy::metadata::GalaxyTagMetadata, message: &mxaccess_codec::reference_registration::NmxReferenceRegistrationMessage, galaxy_id: u8, source_galaxy_id: i32, source_platform_id: i32) -> core::result::Result<i32, mxaccess_nmx::client::NmxClientError>
|
|
pub async fn mxaccess_nmx::client::NmxClient::remove_subscriber_engine(&mut self, local_engine_id: i32, subscriber_galaxy_id: i32, subscriber_platform_id: i32, subscriber_engine_id: i32) -> core::result::Result<i32, mxaccess_nmx::client::NmxClientError>
|
|
pub async fn mxaccess_nmx::client::NmxClient::send_observed_pre_advise_metadata(&mut self, local_engine_id: i32, item_correlation_id: [u8; 16], galaxy_id: u8, source_galaxy_id: i32, source_platform_id: i32) -> core::result::Result<i32, mxaccess_nmx::client::NmxClientError>
|
|
pub fn mxaccess_nmx::client::NmxClient::service_ipid(&self) -> mxaccess_rpc::guid::Guid
|
|
pub async fn mxaccess_nmx::client::NmxClient::set_heartbeat_send_interval(&mut self, ticks_per_beat: i32, max_missed_ticks: i32) -> core::result::Result<i32, mxaccess_nmx::client::NmxClientError>
|
|
pub async fn mxaccess_nmx::client::NmxClient::transfer_data(&mut self, remote_galaxy_id: i32, remote_platform_id: i32, remote_engine_id: i32, message_body: &[u8]) -> core::result::Result<i32, mxaccess_nmx::client::NmxClientError>
|
|
pub async fn mxaccess_nmx::client::NmxClient::un_advise(&mut self, local_engine_id: i32, tag: &mxaccess_galaxy::metadata::GalaxyTagMetadata, item_correlation_id: [u8; 16], galaxy_id: u8, source_galaxy_id: i32, source_platform_id: i32) -> core::result::Result<i32, mxaccess_nmx::client::NmxClientError>
|
|
pub async fn mxaccess_nmx::client::NmxClient::unregister_engine(&mut self, local_engine_id: i32) -> core::result::Result<i32, mxaccess_nmx::client::NmxClientError>
|
|
pub async fn mxaccess_nmx::client::NmxClient::write(&mut self, local_engine_id: i32, tag: &mxaccess_galaxy::metadata::GalaxyTagMetadata, value: &mxaccess_codec::write_message::WriteValue, write_index: i32, client_token: u32, galaxy_id: u8, source_galaxy_id: i32, source_platform_id: i32) -> core::result::Result<i32, mxaccess_nmx::client::NmxClientError>
|
|
pub async fn mxaccess_nmx::client::NmxClient::write2(&mut self, local_engine_id: i32, tag: &mxaccess_galaxy::metadata::GalaxyTagMetadata, value: &mxaccess_codec::write_message::WriteValue, timestamp_filetime: i64, write_index: i32, client_token: u32, galaxy_id: u8, source_galaxy_id: i32, source_platform_id: i32) -> core::result::Result<i32, mxaccess_nmx::client::NmxClientError>
|
|
pub async fn mxaccess_nmx::client::NmxClient::write_secured2(&mut self, local_engine_id: i32, tag: &mxaccess_galaxy::metadata::GalaxyTagMetadata, value: &mxaccess_codec::write_message::WriteValue, timestamp_filetime: i64, client_name: &str, current_user_id: i32, verifier_user_id: i32, write_index: i32, client_token: u32, galaxy_id: u8, source_galaxy_id: i32, source_platform_id: i32) -> core::result::Result<i32, mxaccess_nmx::client::NmxClientError>
|
|
impl !core::marker::Freeze for mxaccess_nmx::client::NmxClient
|
|
impl core::marker::Send for mxaccess_nmx::client::NmxClient
|
|
impl core::marker::Sync for mxaccess_nmx::client::NmxClient
|
|
impl core::marker::Unpin for mxaccess_nmx::client::NmxClient
|
|
impl core::marker::UnsafeUnpin for mxaccess_nmx::client::NmxClient
|
|
impl core::panic::unwind_safe::RefUnwindSafe for mxaccess_nmx::client::NmxClient
|
|
impl core::panic::unwind_safe::UnwindSafe for mxaccess_nmx::client::NmxClient
|