Skip to content

epic: freeze the public Rust API #271

Description

@mfw78

Decide the public Rust API before the tag makes it permanent.

Why one epic

Three questions freeze together at v1 and none of them has an owner today.
After the tag each is a breaking change; before it, each is free.

Children

Typed errors at the boundary. The library returns anyhow::Result from its entry points and from the public Extension trait, while the typed Refusal vocabulary already exists and is discarded at exactly the seam a caller would match on.

The front door. Fifteen bare pub mod lines and zero pub use, so every internal module path is public API. Plus #[must_use] absent from roughly fourteen consuming builder methods, and #[non_exhaustive] applied to the error enums but not to the all-pub-field config structs, which is inverted.

The crate partition. One 23,000-line crate with no primitives layer, so anything wanting to parse a component.toml pulls wasmtime, redb, alloy-provider and hyper.

The standard being applied

reth and alloy, deliberately. reth confines eyre to binaries and returns typed errors from libraries, splits its surface across many crates and keeps its primitives layer dependency-light. alloy re-exports its core types at the facade root and treats anything reachable in a public signature as something the facade must re-export.

The tree already matches them in several places worth not regressing: additive feature flags, builders that consume self, newtypes over primitive obsession, sealed traits, #[non_exhaustive] on wire enums, and a clippy.toml used as capability policy that is more disciplined than either upstream.

Exit

Each question is answered and recorded, whether the answer is a change or a deliberate acceptance.

Metadata

Metadata

Assignees

No one assigned

    Labels

    debtRefactor/cleanup: typed replacements for stringly code, dedup, right-sizingepicUmbrella issue tracking a milestone-scale bundle of child work

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions