diff --git a/src/tui/screen_dashboard.cpp b/src/tui/screen_dashboard.cpp index 75e4b13..4c65a8c 100644 --- a/src/tui/screen_dashboard.cpp +++ b/src/tui/screen_dashboard.cpp @@ -149,6 +149,26 @@ Component Tui::BuildDashboardScreen() { "NC: " + std::to_string(orph_total) + " orphan pin(s) (" + std::to_string(orph_imported) + " imported, " + std::to_string(orph_dropped) + " dropped)")); + // Detail nested directly under the NC row it explains. "dropped" = the + // pin was the only one on its net, so essim detached it (a heuristic; + // listing them lets the user spot a false positive). Imported NCs were + // explicit in the netlist, so they are not expanded. + if (orph_dropped > 0) { + health_rows.push_back( + text(" ↳ dropped (only 1 pin on the net):") | dim); + for (auto &dkv : dropped_by_module) { + std::sort(dkv.second.begin(), dkv.second.end(), NaturalLess); + std::string csv; + for (size_t i = 0; i < dkv.second.size(); ++i) { + if (i) csv += ", "; + csv += dkv.second[i]; + } + health_rows.push_back(hbox({ + text(" " + dkv.first + ": ") | bold, + text(csv) | dim, + })); + } + } // Model-driven checks (BSDL pin specs, JTAG chain, source conflicts), // reusing the nets computed above. @@ -253,27 +273,6 @@ Component Tui::BuildDashboardScreen() { lines.push_back(separator()); lines.push_back(text(" Health") | bold); for (auto &h : health_rows) lines.push_back(std::move(h)); - // Detail rows for the dropped-singleton NCs. Imported NCs are not - // expanded — they were already explicit in the netlist. Dropped NCs - // come from a heuristic, so listing them gives the user a chance to - // spot a false positive. - if (orph_dropped > 0) { - lines.push_back(hbox({ - text(" dropped — net has only 1 pin (NC):") | dim, - })); - for (auto &dkv : dropped_by_module) { - std::sort(dkv.second.begin(), dkv.second.end(), NaturalLess); - std::string csv; - for (size_t i = 0; i < dkv.second.size(); ++i) { - if (i) csv += ", "; - csv += dkv.second[i]; - } - lines.push_back(hbox({ - text(" " + dkv.first + ": ") | bold, - text(csv), - })); - } - } lines.push_back(separator()); lines.push_back(text(" Analysis") | bold); lines.push_back(hbox({text(" • ") | dim,