Skip to main content

Module roundtrip_lint

Module roundtrip_lint 

Source
Expand description

Structural type-round-trip lint (C6b; governing principle: feedback_no_auto_string_conversion).

Detects DAG paths where a value’s type is modulated to another type and then restored — T → Y → … → T — purely through conversion / formatting machinery during synthesis. Native types must stay native through data passing; a round trip means some hand-off point was expressed in a foreign type (usually text) and re-parsed, which loses type fidelity, costs work, and turns downstream type checks into liars. The canonical instance is the retired identity-shadow bug (VecF32 → printf → Str → parse → VecF32); this lint subsumes that string case in one structural rule.

Classification is derived from the adapter catalogs themselves (boundary_adapter enumerated over the closed PortType surface), so the conversion-node registry cannot drift from the catalog. Formatting combinators (printf, str_concat, select_str) and identity are carriers: walks pass through them to find the typed value that entered the text domain.

Sanctioned intermediaries are exempt: a restore FROM Json is by-design (JSON is a declared text hand-off format), so T → Json → T is never reported.

Severity: one RoundTripFinding per restoring node; the caller (assembly resolve) reports findings as compile warnings by default and as a hard error under strict-values mode.

Structs§

RoundTripFinding
One detected round trip: restored left the native domain through departure_node (or entered a formatting carrier natively) and was restored by restore_node via the via type.