API catalog: extract authoritative .NET public metadata #2

Closed
opened 2026-08-08 08:11:51 +00:00 by hugo · 1 comment
Owner

Objective

Build a development-only extractor that emits the complete public surface of all LibreMetaverse library assemblies after their source generators run.

Deliverables

  • Build the pinned upstream projects into temporary output without modifying the reference checkout.
  • Extract stable documentation IDs, namespaces, nesting, generic parameters and constraints, base types, interfaces, constructors, methods, overloads, parameters, properties, indexers, fields, constants, events, delegates, enum values, attributes, and nullability.
  • Include public APIs emitted by all six C# source generators.
  • Write deterministic api/public-api.json with the pinned commit and assembly identities.

Validation

  • Run extraction twice and compare byte-identical output.
  • Cross-check catalog counts against compiled assembly metadata and investigate every mismatch.
  • Confirm published Rust crates do not depend on the extractor, .NET, or generated assemblies.

Prerequisite

Stage 0 project setup is complete. Do not implement production behavior in this milestone.

Project constraints

  • Implement the public surface in native Rust only; no CLR hosting, FFI bridge, subprocess, RPC, or C# fallback.
  • Preserve recognizable API concepts while applying the documented Rust mapping rules.
  • Do not weaken parity requirements or add functional behavior outside this issue.
  • Update the API mapping, coverage report, public docs, and relevant handover status in the same change.
## Objective Build a development-only extractor that emits the complete public surface of all LibreMetaverse library assemblies after their source generators run. ## Deliverables - Build the pinned upstream projects into temporary output without modifying the reference checkout. - Extract stable documentation IDs, namespaces, nesting, generic parameters and constraints, base types, interfaces, constructors, methods, overloads, parameters, properties, indexers, fields, constants, events, delegates, enum values, attributes, and nullability. - Include public APIs emitted by all six C# source generators. - Write deterministic `api/public-api.json` with the pinned commit and assembly identities. ## Validation - Run extraction twice and compare byte-identical output. - Cross-check catalog counts against compiled assembly metadata and investigate every mismatch. - Confirm published Rust crates do not depend on the extractor, .NET, or generated assemblies. ## Prerequisite Stage 0 project setup is complete. Do not implement production behavior in this milestone. ## Project constraints - Implement the public surface in native Rust only; no CLR hosting, FFI bridge, subprocess, RPC, or C# fallback. - Preserve recognizable API concepts while applying the documented Rust mapping rules. - Do not weaken parity requirements or add functional behavior outside this issue. - Update the API mapping, coverage report, public docs, and relevant handover status in the same change.
hugo added this to the 02 - Full public API signature shim milestone 2026-08-08 08:11:51 +00:00
hugo added the enhancement label 2026-08-08 08:11:51 +00:00
Author
Owner

Implemented and pushed in a3e11bc.

Implementation:

  • Added a development-only compiled-metadata extractor for all 13 LibreMetaverse library assemblies at the pinned commit after all six source generators run.
  • Added deterministic api/public-api.json with stable documentation IDs, complete type/member signatures, nullability, constraints, bases/interfaces, overloads, parameters, accessors, fields/constants, events/delegates, enum values, attributes, and assembly identities.
  • Added independent reflection versus ECMA-335 count checks: 3,066 public types and 30,789 public members, with no mismatches or duplicate documentation IDs.
  • Added 142 external signature-type replacement obligations across 19 assemblies, each with exact LibreMetaverse usage sites; external member APIs are not copied and remain pending native Rust mapping.
  • Added catalog documentation, handover status, and the repository-wide Linux/macOS/Windows mapping rule.

Verification:

  • Clean temporary net10.0 build succeeded and both extraction passes were byte-identical.
  • All six generator outputs were present and hashed.
  • cargo fmt --all -- --check passed.
  • cargo check --workspace --all-targets passed.
  • cargo test --workspace --no-run passed.
  • cargo clippy --workspace --all-targets --all-features -- -D warnings passed.
  • cargo doc --workspace --no-deps passed.
  • dotnet format tools/api-catalog/ApiCatalog.csproj --verify-no-changes --no-restore passed.
  • Cargo manifests contain no extractor, CLR, or .NET dependency.
Implemented and pushed in a3e11bc. Implementation: - Added a development-only compiled-metadata extractor for all 13 LibreMetaverse library assemblies at the pinned commit after all six source generators run. - Added deterministic api/public-api.json with stable documentation IDs, complete type/member signatures, nullability, constraints, bases/interfaces, overloads, parameters, accessors, fields/constants, events/delegates, enum values, attributes, and assembly identities. - Added independent reflection versus ECMA-335 count checks: 3,066 public types and 30,789 public members, with no mismatches or duplicate documentation IDs. - Added 142 external signature-type replacement obligations across 19 assemblies, each with exact LibreMetaverse usage sites; external member APIs are not copied and remain pending native Rust mapping. - Added catalog documentation, handover status, and the repository-wide Linux/macOS/Windows mapping rule. Verification: - Clean temporary net10.0 build succeeded and both extraction passes were byte-identical. - All six generator outputs were present and hashed. - cargo fmt --all -- --check passed. - cargo check --workspace --all-targets passed. - cargo test --workspace --no-run passed. - cargo clippy --workspace --all-targets --all-features -- -D warnings passed. - cargo doc --workspace --no-deps passed. - dotnet format tools/api-catalog/ApiCatalog.csproj --verify-no-changes --no-restore passed. - Cargo manifests contain no extractor, CLR, or .NET dependency.
hugo closed this issue 2026-08-08 09:16:01 +00:00
Sign in to join this conversation.