Skip to content

fix(ci): resolve cargo-deny + MSRV + binary smoke failures - #13

Merged
forkwright merged 2 commits into
mainfrom
fix/ci-cargo-deny-msrv
Apr 19, 2026
Merged

fix(ci): resolve cargo-deny + MSRV + binary smoke failures#13
forkwright merged 2 commits into
mainfrom
fix/ci-cargo-deny-msrv

Conversation

@forkwright

Copy link
Copy Markdown
Owner

Summary

Three CI failures, two root causes. Both blocking PRs #11 and #12.

Root cause 1 — Cargo.toml multi-line inline tables (breaks MSRV + cargo-deny)

Commit ea46514 (fix: resolve 1 lint violations via local, Qwen3.5-35B) rewrote
rustls, serde, serde_json, and tokio workspace dependencies as multi-line
inline tables to satisfy the TOML/inline-table-too-long kanon lint:

rustls = {
version = "0.23",
default-features = false,
features = [...],}

That syntax is TOML 1.1, supported by cargo only since Rust 1.94.0. hamma's
declared MSRV is 1.85, so the root manifest fails to parse under 1.85's toml
crate:

error: invalid inline table
expected `}`
--> Cargo.toml:48:11
48 | rustls = {
| ^

This failure mode hit both the MSRV (1.85) job and the cargo-deny job (its
bundled parser is also pre-1.1), which is why two seemingly unrelated jobs
failed simultaneously.

standards/TOML.md already prescribes the correct fix: expanded
[workspace.dependencies.X] blocks when an inline table exceeds 80 columns
(lines 87-102), with the explicit note that multi-line inline tables must not
be used in repos whose MSRV predates 1.94 (lines 9-11). The local-model lint
fix violated the standard; this PR restores compliance by converting the four
offending entries to expanded-block form. Trailing newline on Cargo.toml also
restored (it had been dropped by the same auto-fix).

Root cause 2 — unset smoke-test placeholders (breaks binary smoke test)

.github/workflows/rust.yml was generated from the forkwright template and
never customized — the smoke job still ran cargo build --release -p BINARY_CRATE and ./target/release/BINARY_NAME. cargo errored with
package ID specification BINARY_CRATE did not match any packages.

hamma is library-only (dictyon + hamma-core, no [[bin]] targets), so there
is no binary to smoke-test. The job has been removed with an in-place comment
explaining when it should be re-added (once a CLI or daemon crate lands,
pinning real names).

Commits

  • 3a00a58 fix(toml): expand multi-line inline tables to named blocks
  • 895f8fb fix(ci): remove broken binary smoke test job

Gates (local, main-equivalent worktree)

  • rustup run 1.85.0 cargo check --workspace — clean
  • cargo deny check — advisories ok, bans ok, licenses ok, sources ok
  • cargo fmt --check — clean
  • cargo clippy --workspace --all-targets -- -D warnings — clean
  • cargo nextest run --workspace — 61 tests run, 61 passed
  • kanon lint . --summary — 0 open violations
  • kanon gate — PASS

Follow-up

After merge, PRs #11 and #12 should go green on rebase.

Cody Kickertz added 2 commits April 18, 2026 22:28
The local-model lint fix in ea46514 rewrote three workspace.dependencies
entries as multi-line inline tables (`rustls = { \n version = ...\n }`).
That syntax is TOML 1.1, supported by cargo only since Rust 1.94.0. hamma's
declared MSRV is 1.85, so the root manifest fails to parse under 1.85's
toml crate — which broke both the MSRV CI job and cargo-deny (whose bundled
parser is also pre-1.1).
Standards (standards/TOML.md, lines 9-11, 87-102) already state that
multi-line inline tables are off-limits when MSRV predates 1.94, and that
dependencies exceeding 80 columns should use expanded `[dependencies.X]`
blocks. Convert rustls, serde, serde_json, and tokio to that form.
Also restore the trailing newline dropped by the earlier auto-fix.
Gates:
- rustup run 1.85.0 cargo check --workspace: clean
- cargo deny check: advisories ok, bans ok, licenses ok, sources ok
- cargo fmt --check, cargo clippy -Dwarnings, cargo nextest run: clean
- kanon lint . --summary: no open violations
Gate-Passed: kanon 0.1.0
The `smoke` job in rust.yml was copied from the forkwright template and
still referenced placeholder values (`cargo build --release -p BINARY_CRATE`
and `./target/release/BINARY_NAME`). cargo fails immediately with
"package ID specification `BINARY_CRATE` did not match any packages",
so the job has been failing on every PR.
hamma is a library-only workspace (dictyon + hamma-core, no [[bin]] targets),
so there is no binary to smoke-test. Remove the job and leave a note
explaining the conditions under which it should be re-added (i.e. when a
CLI or daemon crate lands), pinning real crate/binary names.
Gate-Passed: kanon 0.1.0
@forkwright
forkwright merged commit 6693613 into mainApr 19, 2026
12 checks passed
@forkwright
forkwright deleted the fix/ci-cargo-deny-msrv branch April 19, 2026 03:58
forkwright added a commit that referenced this pull request May 29, 2026
* fix(toml): expand multi-line inline tables to named blocks
The local-model lint fix in 0d4aa84 rewrote three workspace.dependencies
entries as multi-line inline tables (`rustls = { \n version = ...\n }`).
That syntax is TOML 1.1, supported by cargo only since Rust 1.94.0. hamma's
declared MSRV is 1.85, so the root manifest fails to parse under 1.85's
toml crate — which broke both the MSRV CI job and cargo-deny (whose bundled
parser is also pre-1.1).
Standards (standards/TOML.md, lines 9-11, 87-102) already state that
multi-line inline tables are off-limits when MSRV predates 1.94, and that
dependencies exceeding 80 columns should use expanded `[dependencies.X]`
blocks. Convert rustls, serde, serde_json, and tokio to that form.
Also restore the trailing newline dropped by the earlier auto-fix.
Gates:
- rustup run 1.85.0 cargo check --workspace: clean
- cargo deny check: advisories ok, bans ok, licenses ok, sources ok
- cargo fmt --check, cargo clippy -Dwarnings, cargo nextest run: clean
- kanon lint . --summary: no open violations
Gate-Passed: kanon 0.1.0
* fix(ci): remove broken binary smoke test job
The `smoke` job in rust.yml was copied from the forkwright template and
still referenced placeholder values (`cargo build --release -p BINARY_CRATE`
and `./target/release/BINARY_NAME`). cargo fails immediately with
"package ID specification `BINARY_CRATE` did not match any packages",
so the job has been failing on every PR.
hamma is a library-only workspace (dictyon + hamma-core, no [[bin]] targets),
so there is no binary to smoke-test. Remove the job and leave a note
explaining the conditions under which it should be re-added (i.e. when a
CLI or daemon crate lands), pinning real crate/binary names.
Gate-Passed: kanon 0.1.0
---------
Co-authored-by: Cody Kickertz <cody@forkwright.com>
@github-actionsgithub-actionsBot mentioned this pull request Jul 16, 2026
forkwright pushed a commit that referenced this pull request Jul 28, 2026
🤖 I have created a release *beep* *boop*
---
<details><summary>0.2.0</summary>
## [0.2.0](v0.1.0...v0.2.0)
(2026-07-28)
### Features
* **_llm:** add T0 corpus per
[#667](https://github.com/forkwright/hamma/issues/667) /
[#673](https://github.com/forkwright/hamma/issues/673) fleet rollout
([#10](#10))
([0568f51](0568f51))
* **control:** instrument async control client entry points
([#37](#37))
([e80622f](e80622f)),
closes [#20](#20)
* **control:** support zstd map responses
([dd5ab90](dd5ab90))
* **dictyon:** add TCP/TLS connection, registration, and map streaming
([a311d8a](a311d8a))
* **dictyon:** control protocol types and map response parser
([dfc25c7](dfc25c7))
* **dictyon:** migrate tracing init to koinon
([e5a4260](e5a4260))
* **dictyon:** Noise IK handshake, key types, HTTP transport skeleton
([aafea4f](aafea4f))
* **dictyon:** trace wire noise transport phases
([#38](#38))
([2d80231](2d80231)),
closes [#20](#20)
### Bug Fixes
* **cargo:** track lockfile for pinned rust toolchain
([#30](#30))
([e6a2f01](e6a2f01)),
closes [#29](#29)
* **ci:** resolve cargo-deny + MSRV + binary smoke failures
([#13](#13))
([9bb4533](9bb4533))
* **ci:** waive gate attestation by PR author, not by github.actor
([#69](#69))
([764422e](764422e)),
closes [#68](#68)
* **control:** accept node id peer removals
([7debc6b](7debc6b))
* **control:** apply peer patch map deltas
([#33](#33))
([dfc3731](dfc3731))
* **core:** parse peer patch map fields
([0686a66](0686a66))
* **deps:** clear RUSTSEC-2026-0190 via anyhow lockfile bump
([#56](#56))
([2423485](2423485))
* **lint:** add non_exhaustive to public error enums, mark public-key
fields
([0355297](0355297))
* **lint:** mechanical wins — allow→expect, indexing/slicing, casts,
http→https
([9e339db](9e339db))
* **lint:** resolve clippy warnings in hamma-core and wire integration
test ([#42](#42))
([079ad5e](079ad5e))
* **lint:** suppress pub-visibility for library API surface
([6d54674](6d54674))
* **lint:** unblock kanon gate
([f93ff63](f93ff63))
* **release:** bump the internal hamma-core pin and Cargo.lock with the
release ([#71](#71))
([dfdfc35](dfdfc35)),
closes [#70](#70)
* resolve 1 lint violations via local
([#8](#8))
([0d4aa84](0d4aa84))
### Refactoring
* **dictyon:** replace expect with ? and rename test helper
([#9](#9))
([655b783](655b783))
* **lint:** split oversized modules; add hamma-core integration tests
([fa8f54f](fa8f54f))
* rename plegma→hamma, plegma-core→hamma-core
([a67f792](a67f792))
### Documentation
* add CLAUDE.md precedence preamble
(forge[#153](https://github.com/forkwright/hamma/issues/153))
([e91ebea](e91ebea))
* add CONTRIBUTING.md for 05e cutover
([#1](#1))
([9dd5f87](9dd5f87))
* add llms.txt per kanon doc standards (refs
[#10](#10))
([#11](#11))
([e869fe1](e869fe1))
* **agents:** add AGENTS.md per fleet repo-structure standard
([#40](#40))
([0382da1](0382da1))
* **hamma:** align pre-alpha status
([#6](#6))
([873a6c3](873a6c3))
* **hamma:** replace standards copy with kanon pointer
([#8](#8))
([324ff18](324ff18))
* sanitize local bootstrap docs
([4c57d40](4c57d40))
* **standards:** add canonical standards from kanon
([#1](#1))
([81e5007](81e5007))
</details>
---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@forkwright