Inventory: implement AIS capability client and reconciliation #63

Closed
opened 2026-08-08 08:20:46 +00:00 by hugo · 1 comment
Owner

Objective

Implement InventoryAISClient endpoints, LLSD request/response DTOs, link handling, folder versions, partial failures, and store reconciliation.

Deliverables

  • Preserve methods, paths/query, payloads, content types, category/version updates, deletions, links, and error mapping.
  • Use injected caps HTTP and deterministic request recording.
  • Reconcile atomically enough that partial responses cannot corrupt the local tree.

Validation

  • All AIS/inventory HTTP tests pass with exact recorded payloads.
  • Cancellation/timeout/malformed response cases leave consistent state.
  • UDP fallback behavior follows the mapped public contract.

Prerequisite

Networking/client lifecycle and all foundational implementation milestones are complete; mapped APIs and translated tests are fixed.

Project constraints

  • New native Rust behavior only; no bridge or C# fallback.
  • Preserve mapped public APIs and exact translated assertions; use completed transport/data layers rather than duplicating them.
  • Bound resources, avoid locks across await/callbacks, and update docs/coverage with focused and workspace evidence.
## Objective Implement InventoryAISClient endpoints, LLSD request/response DTOs, link handling, folder versions, partial failures, and store reconciliation. ## Deliverables - Preserve methods, paths/query, payloads, content types, category/version updates, deletions, links, and error mapping. - Use injected caps HTTP and deterministic request recording. - Reconcile atomically enough that partial responses cannot corrupt the local tree. ## Validation - All AIS/inventory HTTP tests pass with exact recorded payloads. - Cancellation/timeout/malformed response cases leave consistent state. - UDP fallback behavior follows the mapped public contract. ## Prerequisite Networking/client lifecycle and all foundational implementation milestones are complete; mapped APIs and translated tests are fixed. ## Project constraints - New native Rust behavior only; no bridge or C# fallback. - Preserve mapped public APIs and exact translated assertions; use completed transport/data layers rather than duplicating them. - Bound resources, avoid locks across await/callbacks, and update docs/coverage with focused and workspace evidence.
hugo added this to the 09 - World vertical slices milestone 2026-08-08 08:20:46 +00:00
hugo added the enhancement label 2026-08-08 08:20:46 +00:00
Author
Owner

Implemented and pushed as d5c318d.

Highlights:

  • Added the native InventoryAISClient and AISResponseMeta API surface for InventoryAPIv3 and LibraryAPIv3, including exact category/item/children/links/COF/orphans/trash paths, LLSD XML bodies, transaction queries, and COPY Destination headers.
  • Added bounded parsing for embedded folders, items, and links, including legacy object/mesh attachment correction and top-level/singular response shapes.
  • Added one-transaction store reconciliation for returned objects, collateral removals, broken links, subtree deletions, and category version updates. Responses are fully parsed before the detached candidate graph replaces live state.
  • Preserved capability-optional/UDP fallback behavior, cancellation propagation, false/empty HTTP error mapping, injected HTTP recording, and no locks across await/callback boundaries.
  • Updated mappings, API coverage, documentation, and Ubuntu-only Gitea gates.

Isolated verification:

  • cargo test --manifest-path tests/compat/Cargo.toml --test inventory_ais_semantics -j 1 (10 passed)
  • cargo test -p libremetaverse inventory_ais_internal_semantics -j 1 (4 passed: exact requests, cancellation/malformed isolation, partial-response atomicity, removals/version reconciliation)
  • cargo clippy -p libremetaverse --lib --no-deps -j 1 -- -D warnings
  • cargo check --manifest-path tests/api-compile/Cargo.toml --locked -j 1
  • cargo check --workspace --all-targets --locked -j 1
  • generator, mapping, API coverage, formatting, diff, and issue-63 audit gates all passed.
Implemented and pushed as d5c318d. Highlights: - Added the native InventoryAISClient and AISResponseMeta API surface for InventoryAPIv3 and LibraryAPIv3, including exact category/item/children/links/COF/orphans/trash paths, LLSD XML bodies, transaction queries, and COPY Destination headers. - Added bounded parsing for embedded folders, items, and links, including legacy object/mesh attachment correction and top-level/singular response shapes. - Added one-transaction store reconciliation for returned objects, collateral removals, broken links, subtree deletions, and category version updates. Responses are fully parsed before the detached candidate graph replaces live state. - Preserved capability-optional/UDP fallback behavior, cancellation propagation, false/empty HTTP error mapping, injected HTTP recording, and no locks across await/callback boundaries. - Updated mappings, API coverage, documentation, and Ubuntu-only Gitea gates. Isolated verification: - cargo test --manifest-path tests/compat/Cargo.toml --test inventory_ais_semantics -j 1 (10 passed) - cargo test -p libremetaverse inventory_ais_internal_semantics -j 1 (4 passed: exact requests, cancellation/malformed isolation, partial-response atomicity, removals/version reconciliation) - cargo clippy -p libremetaverse --lib --no-deps -j 1 -- -D warnings - cargo check --manifest-path tests/api-compile/Cargo.toml --locked -j 1 - cargo check --workspace --all-targets --locked -j 1 - generator, mapping, API coverage, formatting, diff, and issue-63 audit gates all passed.
hugo closed this issue 2026-08-10 06:42:19 +00:00
Sign in to join this conversation.