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.

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

    tech-debtTechnical debt and cleanup

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions