All checks were successful
Native code generation / deterministic (push) Successful in 12m18s
Imaging and meshing gate / native (push) Successful in 4m2s
JPEG 2000 feature / linux (push) Successful in 2m34s
Native Rust workspace compile / compile (push) Successful in 4m4s
Skia feature / linux (push) Successful in 31m2s
77 lines
3.1 KiB
Python
77 lines
3.1 KiB
Python
#!/usr/bin/env python3
|
|
"""Audit issue 61's native inventory model, store, and cache boundary."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from pathlib import Path
|
|
import re
|
|
|
|
import generate_api_shims
|
|
|
|
|
|
ROOT = Path(__file__).resolve().parents[1]
|
|
SOURCE = ROOT / "crates" / "libremetaverse" / "src" / "inventory.rs"
|
|
DOC = ROOT / "docs" / "inventory.md"
|
|
STORE_TESTS = ROOT / "tests" / "compat" / "tests" / "inventory_store_semantics.rs"
|
|
LINK_TESTS = ROOT / "tests" / "compat" / "tests" / "misclassified_link_semantics.rs"
|
|
STUB_RE = re.compile(r"\b(?:not_implemented|unimplemented_api)\b|\b(?:todo|unimplemented)!\s*\(")
|
|
|
|
REQUIRED_TYPES = {
|
|
"T:LibreMetaverse.Inventory",
|
|
"T:LibreMetaverse.InventoryAnimation",
|
|
"T:LibreMetaverse.InventoryAttachment",
|
|
"T:LibreMetaverse.InventoryBase",
|
|
"T:LibreMetaverse.InventoryCallingCard",
|
|
"T:LibreMetaverse.InventoryCategory",
|
|
"T:LibreMetaverse.InventoryFolder",
|
|
"T:LibreMetaverse.InventoryGesture",
|
|
"T:LibreMetaverse.InventoryItem",
|
|
"T:LibreMetaverse.InventoryLSL",
|
|
"T:LibreMetaverse.InventoryLandmark",
|
|
"T:LibreMetaverse.InventoryMaterial",
|
|
"T:LibreMetaverse.InventoryNode",
|
|
"T:LibreMetaverse.InventoryNodeDictionary",
|
|
"T:LibreMetaverse.InventoryNotecard",
|
|
"T:LibreMetaverse.InventoryObject",
|
|
"T:LibreMetaverse.InventoryObjectAddedEventArgs",
|
|
"T:LibreMetaverse.InventoryObjectRemovedEventArgs",
|
|
"T:LibreMetaverse.InventoryObjectUpdatedEventArgs",
|
|
"T:LibreMetaverse.InventorySettings",
|
|
"T:LibreMetaverse.InventorySnapshot",
|
|
"T:LibreMetaverse.InventorySound",
|
|
"T:LibreMetaverse.InventoryTexture",
|
|
"T:LibreMetaverse.InventoryWearable",
|
|
"T:LibreMetaverse.Permissions",
|
|
}
|
|
|
|
|
|
def require_markers(path: Path, markers: tuple[str, ...]) -> None:
|
|
text = path.read_text()
|
|
missing = [marker for marker in markers if marker not in text]
|
|
if missing:
|
|
raise SystemExit(f"{path.name}: audit evidence missing: " + ", ".join(missing))
|
|
|
|
|
|
def main() -> None:
|
|
missing = sorted(REQUIRED_TYPES - generate_api_shims.NATIVE_TYPES.keys())
|
|
if missing:
|
|
raise SystemExit("issue 61 native types missing: " + ", ".join(missing))
|
|
if STUB_RE.search(SOURCE.read_text()):
|
|
raise SystemExit("issue 61 owned Rust stubs remain in inventory.rs")
|
|
require_markers(SOURCE, (
|
|
"MAX_CACHE_BYTES", "MAX_CACHE_RECORDS", "MAX_HIERARCHY_DEPTH",
|
|
"rebuild_indexes_and_counts", "replace_file", "would_create_cycle",
|
|
"callbacks_run_after_store_lock_is_released",
|
|
"cache_rejects_corruption_and_unknown_versions",
|
|
"cache_round_trip_preserves_roots_concrete_type_and_permissions",
|
|
"system_folders_sort_first_and_are_discoverable",
|
|
))
|
|
require_markers(DOC, ("misclassified-link", "64 MiB", "rollback", "No inventory"))
|
|
require_markers(STORE_TESTS, ("concurrent_add_move_remove_stress", "link_index_updates_on_asset_change"))
|
|
require_markers(LINK_TESTS, ("inventory_store_indexer_returns_wearable", "resolved_item_id_on_misclassified_texture_link"))
|
|
print("issue 61 audit: native models, concrete hierarchy storage, bounded cache, lock-free callbacks, and compatibility regressions are present")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|