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
Found while working on #207, which declares rust-version on all 19 crates and
so had to take a position on the three connectors.
Problem
make publishcannot 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-connectoraimdb-serial-connectoraimdb-tcp-connectorNone of them exist on crates.io. Two published crates need them anyway:
aimdb-clienthas optional dependencies on all three (transport-uds,transport-serial,transport-tcp).cargo publishrequires everydependency to resolve on the registry, optional ones included.
aimdb-tokio-adapterhas a versioned dev-dependency onaimdb-uds-connector0.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:
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, keepingpath. Cargo strips path-only dev-dependencies when packaging, so the cycledisappears at publish time while local
cargo teststill resolves through thepath. Verified on a scratch two-crate workspace: the packaged
Cargo.tomlcomesback with an empty
[dev-dependencies]section and the dependency gone.aimdb-tokio-adapter/Cargo.toml:64aimdb-uds-connector = "0.1.0"aimdb-uds-connector/Cargo.toml:34aimdb-tokio-adapter = "0.6.0"aimdb-websocket-connector/Cargo.toml:109aimdb-tokio-adapter = "0.6.0"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-checkcannot catch this in advance.cargo package -p aimdb-uds-connectorcurrently fails withfailed to select a version for aimdb-core, because localaimdb-coreis 1.2.0 and that version is notpublished 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-clientalready exposes them behind features. If the answeris no, the fix is different: make
aimdb-client's transport featuresnon-publishable, which is a larger design question.
Acceptance
make publishpathbut noversionmake publishcompletes end to end against crates.ioFound while working on #207, which declares
rust-versionon all 19 crates andso had to take a position on the three connectors.