search and net screens into explore; drop both commands.
`explore` was already a superset of `search` (4 columns: module → type → filtered children → detail, with parts/signals/connections — vs search's 2 columns of parts/signals only). It now also subsumes the former `net` screen: when a signal entry is selected, the detail pane shows the local pins followed by a `Net members (across connections)` section listing every `(module, signal, type)` reachable through the BFS over `Connection::pin_map`, with the count + dominant type and an INCONSISTENT flag in the signal-detail header. Removed: - `src/tui/screen_search.cpp`, `src/tui/screen_net.cpp`. - `commands["search"]`, `commands["net"]` (including its textual inline form). The `find_net` / `Net` API stays for explore's BFS panel and the analyze screen's net-mix check. - `[s]` and `[n]` letter shortcuts on the dashboard. - `net_*` and `search_*` state members + builders + constructor inits. screen_idx renumbering (the slots vacated by search + net are removed, not left dead): 0 = console (unchanged) 1 = connect 2 = set-connector-type 3 = explore (unchanged number, but now subsumes search + net) 4 = dashboard (boot) 5 = analyze Palette signal items now jump to `explore` prefilled on the signals tab with the child filter seeded to the exact signal name; the BFS section in the detail pane is what shows the cross-module net. Net-member rows in the detail pane are deliberately read-only for now (Enter is a no-op): the signal-type popup is scoped to the currently selected module, so opening it on a peer-module member would mis-fire. Cross-module Enter navigation can come later if needed. DESIGN.md and user docs updated accordingly. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
essim — system digital twin
Interactive simulator for the inter-card connections inside a system. Built around a domain model of modules → parts → pins / signals → connections, with importers for Mentor Graphics, Altium and ODS pinout sheets, a TUI shell with scripting, snapshots and BFS net analysis.
Status: early work-in-progress.
Quick start
cmake -S . -B build
cmake --build build -j
./build/essim
Requirements:
- A C++17 compiler.
- CMake 3.14+.
- System packages:
libzipandpugixml(Arch:pacman -S libzip pugixml). - FTXUI (v6.1.9) and doctest (v2.4.11) are fetched at configure time via
FetchContent.
Inside the shell, type help for the live command list — or read the
auto-generated reference at doc/user/commands.md.
A worked bring-up script is at test/system.essim;
load it with source test/system.essim.
Tests
./build/essim_tests
# or
ctest --test-dir build
Skip building tests entirely:
cmake -S . -B build -DBUILD_TESTING=OFF
Documentation
doc/user/— user guide, command reference, scripting.doc/api/— auto-generated C++ API reference.DESIGN.md— implementation notes (domain conventions, TUI internals, gotchas).doc/README.md— how the doc pipeline is wired.
Regenerate auto-generated parts after substantive code changes:
cmake --build build --target doc # needs doxygen + python3
Project layout
src/system/ domain model (Module/Part/Pin/Signal, Connection, Transform, …)
src/imports/ Mentor / Altium / ODS netlist importers
src/tui/ FTXUI shell (commands, screens, completion, history)
tests/ doctest suite
doc/ api/ + user/ Markdown trees, Doxyfile.in, gen_api_md.py
test/ sample netlists + system.essim bring-up script
Full layout & rationale in DESIGN.md.
Licence
Copyright (c) 2026 François Dausseur
Licensed under the European Union Public Licence (EUPL), Version 1.2 —
the "Licence". You may not use this work except in compliance with the
Licence. You may obtain a copy of the Licence in the LICENSE
file or at https://joinup.ec.europa.eu/software/page/eupl.
Unless required by applicable law or agreed to in writing, software distributed under the Licence is distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the Licence for the specific language governing permissions and limitations under the Licence.
SPDX-License-Identifier: EUPL-1.2