master
Drew Owens Share frozen native Rust mechanical development checkpoint and qualification scope b2d7cdb 26d ago

Native material lookup

R14 ports the read-only material_list operation to Rust with typed Autodesk C++ getter glue. It lists loaded library IDs/names/material counts and the selected source's material IDs/names. Omitted or empty libraryId reads document materials; a nonempty ID must uniquely identify one loaded library. Display names are never selectors. Unicode lowercase substring search, a default limit of 100 (1–1000), full matching count and truthful completeness preserve the existing lookup behavior within the stated bounds.

The explicit native-material-catalog-v1 header is required. All earlier headers remain accepted for their earlier operations; the new header also supports those operations. The normal exact runtime/document registry handles targeting. The optional revision is material-catalog-projection-v1: it covers the exact document ID, selected source, every loaded library row and every selected-source material row before filtering. Search and pagination limits do not redefine the revision. This is not the legacy full-model revision.

Rust captures the complete bounded catalog twice and requires equality. IDs must be nonempty and unique within their catalog; same names remain distinct rows. Missing libraries, failed SDK getters, changed counts/data, invalid strings or bounds refuse the whole response. There is no partial SDK success. Limits are 64 loaded libraries, 20,000 selected-source materials, 4096 bytes per ID/name, 1024 query bytes and 1 MiB for the full encoded projection/result. Collections larger than these bounds are refused, even if the requested page is small.

All catalog SDK references are temporary typed locals released on the SDK thread within their getter call. No material/library holder survives a request. The adapter uses no load, copy, add, assign or name-based lookup API. Material physical properties, appearances and material assignment are outside this port. The response explicitly says assignmentSupported:false; no full legacy parity is claimed.

Validation includes document/library selection, duplicate IDs and duplicate display names, Unicode queries, empty catalogs and searches, revision changes outside a query, stale/foreign targets, every backend getter failure, a changing second capture, collection/string/encoded-byte bounds, the accepted 64-library/20,000-material maximum, protocol header parsing and earlier capability preservation. Full source/Linux/GNU/SDK compilation evidence and Windows/runtime acceptance are recorded separately. This candidate is not installed or publicly released.