Skip to content

Lint marker debt: 7 unwired-dead-code-untracked sites need real tracking refs + 1 crate-name-collision (koinon) #264

Description

@forkwright

Finding

kanon lint now enforces WORKFLOW/unwired-dead-code-untracked (error severity) — every #[allow(dead_code)]/#[expect(dead_code, reason = "...")] must carry a #NNN tracking reference or one of the closed-benign markers (RAII/held/keeps-alive/guard/test-fixture/schema-contract) in its reason. This rule postdates the akroasis#261 baseline (which does not cover it), so it is currently live-blocking kanon gate --stamp independent of any baseline expiry. 7 of the 12 flagged sites are genuinely forward-looking/awaiting-integration code (not test-only), so they need a real tracking ref rather than a benign marker. The other 5 (test-only or an existing tracked gap) are handled inline in the same pass as this issue — see akroasis#244 (kerykeion/store_forward.rs) and the test-fixture marker sites.

Evidence

kanon lint . --min-severity error @ main (8506c10), 2026-07-16 — the 7 sites this issue tracks:

  • crates/akroasis/src/main.rs:7mod mesh; suppression says "mesh helpers used by daemon; unused in CLI binary build". Verified: format_node_row, build_status_table, build_nodes_table, format_gateway_health have zero production callers anywhere in the tree (grep -rn across all crates) — only exercised by mesh::mod's own unit tests. No daemon/server crate currently calls them; print_status/print_nodes render hardcoded placeholder tables instead of calling these helpers. The "used by daemon" claim does not hold against current tree state.
  • crates/akroasis/src/main.rs:60Config.config_path field, reason "reserved for future CLI options" — no consumer exists yet.
  • crates/syntonia/src/baofeng/constants.rs:8 — protocol constants gated #![cfg_attr(not(feature = "hardware-serial"), expect(dead_code, ...))]; permanently "dead" in any build without the feature.
  • crates/syntonia/src/baofeng/variant.rs:5 — same feature-gate pattern for the variant API.
  • crates/syntonia/src/hardware/warnings.rs:66,94,113collect_scan_warnings, collect_detection_warnings, port_access_denied, reason "crate-local warning helpers are staged for the akroasis hardware backend" — no hardware backend currently calls them.

Why this matters

Dead-code suppressions without a live tracking ref are exactly the pattern that hid the already-filed unwired-capability gaps in this repo (akroasis#235, #236, #238, #244 all began as an unremarked #[allow(dead_code)]). The rule exists to stop that recurring silently. Right now these 7 sites fail the letter of the rule (no ref, no accurate benign marker) while also being real instances of the pattern the rule is designed to catch — the main.rs:7 mesh case in particular has a reason string that is no longer true against current tree state.

Desired correction

Per site, one of:

  • Wire the code into a real caller and drop the suppression, or
  • Confirm the code is genuinely staged for a specific, named future integration and reference this issue's number in the reason string (already done for the sites above as part of the pass that filed this issue).

Track resolution here; close individual sites out via the kanon lint --refs-live sweep once each is either wired or the reason is otherwise satisfied.

Done when: kanon lint . --min-severity error shows zero WORKFLOW/unwired-dead-code-untracked findings whose reason cites this issue AND either the code has been wired into a real caller or the "staged for future work" framing has been confirmed still accurate.

Note — separate finding, same lint pass

VOCAB/crate-name-collision (warning, non-blocking): crates/koinon/Cargo.toml — the akroasis workspace's koinon crate ("κοινόν — common/shared types for the Akroasis workspace") collides in name with the standalone fleet repo koinon. kanon lint flags this as fixable only by adding a distinct_concepts block to kanon's hub-words.toml (fleet-wide config, lives in the kanon repo, not akroasis) or renaming one of the two. This is a cross-repo naming call outside a single-repo lint fix and is left for an explicit naming decision rather than resolved unilaterally here.

Metadata

Metadata

Assignees

No one assigned

    Labels

    tech-debtTechnical debt and cleanup

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions