Implement native AIS inventory reconciliation (#63)
This commit is contained in:
@@ -69,3 +69,27 @@ snapshot subscribers before invoking them. Focused coverage lives in
|
||||
`inventory_manager_semantics`, `task_inventory_semantics`, and the native
|
||||
`inventory_manager::tests` fake-packet cases for callback isolation, bulk-copy
|
||||
completion, stale folder versions, offers, capability events, and bounded Xfer.
|
||||
|
||||
## Inventory API v3
|
||||
|
||||
`InventoryAISClient` implements the `InventoryAPIv3` and `LibraryAPIv3`
|
||||
capability resources for categories, children, links, individual items, the
|
||||
current outfit folder, orphans, and trash. Requests preserve the AIS verbs and
|
||||
resource shapes, including `COPY` with its `Destination` header, transaction
|
||||
IDs, depth/subset queries, and LLSD XML request content type. The client uses
|
||||
the injected capability HTTP transport, so tests and applications can record
|
||||
requests deterministically without replacing inventory logic.
|
||||
|
||||
Successful response bodies are fully decoded and validated before any local
|
||||
state changes. Embedded folders, concrete items, and links are parsed together;
|
||||
object or mesh links with the legacy texture inventory type are corrected to
|
||||
attachments. Side-effect removals and category version updates are combined
|
||||
with returned objects and installed atomically through a detached candidate
|
||||
inventory graph. Malformed, oversized, cancelled, or timed-out responses leave
|
||||
the live store unchanged, and no store lock crosses an await or callback.
|
||||
|
||||
AIS remains capability-optional. Missing capabilities and HTTP failures return
|
||||
the fixed false/empty compatibility results, while cancellation is propagated.
|
||||
The existing `InventoryManager` UDP fallback remains the contract-correct path
|
||||
for operations whose capability is absent; AIS reconciliation shares that
|
||||
manager's transport-independent store and observer ordering.
|
||||
|
||||
Reference in New Issue
Block a user