Skip to content

[BLOCKER] Publish the tdbin Rust runtime crate — generated codecs reference a crate that exists nowhere #60

Description

@MelbourneDeveloper

Problem

docs/tdbin.html instructs consumers to depend on the runtime like this:

[dependencies]
tdbin = { path = "../typeDiagram/crates/tdbin" }

A relative path dependency into a sibling checkout is not a distribution channel. It cannot be used by any repository that:

  • builds in CI containers that only clone the consumer repo,
  • cross-compiles release artifacts (our release job builds 6 target triples),
  • publishes its own crates, or
  • vendors dependencies.

tdbin is not on crates.io:

$ curl -s https://crates.io/api/v1/crates/tdbin
{"errors":[{"detail":"crate `tdbin` does not exist"}]}

$ curl -s 'https://crates.io/api/v1/crates?q=tdbin'   # → []
$ curl -s 'https://crates.io/api/v1/crates?q=typediagram'  # → []

Meanwhile typediagram encode emits code that references it unconditionally:

impl tdbin::Struct for CacheStats {
    const DATA_WORDS: u16 = 2;
    const PTR_WORDS: u16 = 0;
    const LAYOUT_HASH: u64 = 0x71f0_bb61_837c_895a;

    fn write_struct(&self, w: &mut tdbin::Writer, at: usize) -> Result<(), tdbin::EncodeError> {}
    fn read_struct(r: &tdbin::Reader<'_>, at: usize) -> Result<Self, tdbin::DecodeError> {}
}

So the generator's output does not compile anywhere outside the typeDiagram monorepo. That makes tdbin unadoptable today, regardless of how good the format is.

Ask

  1. Publish tdbin to crates.io with a real semver line and a documented MSRV.
  2. Pin the relationship between the CLI version and the runtime version. Generated code already embeds LAYOUT_HASH; it should also be checkable against a runtime version so a typediagram CLI bump cannot silently pair with an incompatible runtime.
  3. Replace the path = "../typeDiagram/crates/tdbin" snippet in docs/tdbin.html with the registry form.
  4. State the crate's feature flags (std, alloc, packed framing, columnar layout major 2) in the docs, since consumers building for constrained targets need to know what is optional.

Context — why we care

Deslop (deslop-lsp, deslop-mcp, the VS Code extension, the JetBrains plugin) generates all of its wire models from a single .td schema and currently ships them as newline-delimited JSON over a private loopback IPC channel. One live report in our own repo is 797 KB / 712 clusters / 1688 occurrences across 475 files, and it is re-serialised and re-parsed on every incremental generation. tdbin is exactly the right answer for that channel. We cannot start until the runtime is installable.

Metadata

Metadata

Assignees

No one assigned

    Labels

    CRITICALCritical severity — fix immediately

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions