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
Added a development-only compiled-metadata extractor for all 13 LibreMetaverse library assemblies at the pinned commit after all six source generators run.
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.
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.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Objective
Build a development-only extractor that emits the complete public surface of all LibreMetaverse library assemblies after their source generators run.
Deliverables
api/public-api.jsonwith the pinned commit and assembly identities.Validation
Prerequisite
Stage 0 project setup is complete. Do not implement production behavior in this milestone.
Project constraints
Implemented and pushed in
a3e11bc.Implementation:
Verification: