Skip to content

make publish is broken: three connectors are unpublished and a dev-dependency cycle blocks any ordering #242

Description

@lxsaah

Problem

make publish cannot complete. It would fail at step 5/16, cargo publish -p aimdb-tokio-adapter, and reordering the list does not fix it.

Three workspace library crates are absent from the publish list entirely:

  • aimdb-uds-connector
  • aimdb-serial-connector
  • aimdb-tcp-connector

None of them exist on crates.io. Two published crates need them anyway:

  • aimdb-client has optional dependencies on all three (transport-uds,
    transport-serial, transport-tcp). cargo publish requires every
    dependency to resolve on the registry, optional ones included.
  • aimdb-tokio-adapter has a versioned dev-dependency on
    aimdb-uds-connector 0.1.0 —
    aimdb-tokio-adapter/Cargo.toml:64.

Reordering alone is not enough

Two reasons.

The three crates are missing, not misplaced — no permutation of a 16-item list
adds them.

And the full dependency graph is cyclic, so no valid ordering exists at all.
Nine crates are tangled: aimdb-cli, aimdb-client, aimdb-mcp,
aimdb-serial-connector, aimdb-sync, aimdb-tcp-connector,
aimdb-tokio-adapter, aimdb-uds-connector, aimdb-websocket-connector.

Every edge forming that cycle is a versioned dev-dependency. Restricted to
normal and build dependencies, the graph is acyclic and sorts cleanly into all
19 crates:

 1. aimdb-codegen           8. aimdb-uds-connector      15. aimdb-wasm-adapter
 2. aimdb-derive            9. aimdb-knx-connector      16. aimdb-websocket-connector
 3. aimdb-core             10. aimdb-mqtt-connector     17. aimdb-client
 4. aimdb-data-contracts   11. aimdb-persistence-sqlite 18. aimdb-cli
 5. aimdb-embassy-adapter  12. aimdb-serial-connector   19. aimdb-mcp
 6. aimdb-persistence      13. aimdb-sync
 7. aimdb-tokio-adapter    14. aimdb-tcp-connector

Proposed change

Three edits, no code movement.

1. Add the three connectors to make publish.

2. Reorder to the topological order above.

3. Drop version = from the dev-dependencies that form the cycle, keeping
path. Cargo strips path-only dev-dependencies when packaging, so the cycle
disappears at publish time while local cargo test still resolves through the
path. Verified on a scratch two-crate workspace: the packaged Cargo.toml comes
back with an empty [dev-dependencies] section and the dependency gone.

manifest dev-dependency status
aimdb-tokio-adapter/Cargo.toml:64 aimdb-uds-connector = "0.1.0" fatal — unpublished, and uds publishes after tokio-adapter
aimdb-uds-connector/Cargo.toml:34 aimdb-tokio-adapter = "0.6.0" resolves today, but forms the cycle
aimdb-websocket-connector/Cargo.toml:109 aimdb-tokio-adapter = "0.6.0" resolves today, but forms the cycle

Only the first blocks publishing right now — the other two resolve against
already-published 0.6.0 releases. They are still worth fixing: as written, each
crate's packaged tests reference whatever was last on crates.io rather than the
code being released.

Also worth knowing

make publish-check cannot catch this in advance. cargo package -p aimdb-uds-connector currently fails with failed to select a version for aimdb-core, because local aimdb-core is 1.2.0 and that version is not
published yet. That is normal mid-release — the run publishes core first — but
it means the dry run validates very little, which the Makefile already concedes
at Makefile:520-522.

Out of scope

Deciding whether the three connectors should be public API. This issue assumes
yes, because aimdb-client already exposes them behind features. If the answer
is no, the fix is different: make aimdb-client's transport features
non-publishable, which is a larger design question.

Acceptance

  • The three connectors appear in make publish
  • Publish order is topologically valid (normal + build dependencies)
  • Cycle-forming dev-dependencies carry path but no version
  • make publish completes end to end against crates.io

Found while working on #207, which declares rust-version on all 19 crates and
so had to take a position on the three connectors.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions