DunneFlow · The dashboard
The shell
The dashboard's three panes, the top bar, the version strip, the cover and the keyboard, and how one selection travels through six views.
The dashboard is three panes under a top bar: the navigator on the left, the centre, and the inspector on the right. The important thing to understand first is that the centre is one selection read six ways, not six places to go. Pick a routine anywhere (a navigator row, a dot in the graph, a table row, a line of source) and all six views are already showing it. Switching view never loses your place.
The six views are Graph, Table and Code, Document, and Diagram and Shape.
The cover#
A map opens on the cover: the answer to what is this program, in three panels, before you have asked anything specific. Its heading gives the file, line and routine counts and when the map was analysed.
- Where to start lists the ways into the program (command-line entry points, HTTP routes, registered handlers), ranked by how much of the program each one commands. Each carries a tag for its kind and says how it was found; guessed means DunneFlow inferred it from a conventional name rather than reading a declaration.
- What it touches counts everything that leaves the program, by kind: DATABASE, FILE, STDIO, NETWORK, PROCESS, ENV, CRYPTO and so on. On a codebase you have never seen, this is the panel to read first. It tells you what kind of program you have.
- What looks wrong counts findings as Broken, Suspect and Informational, and opens the anomaly worklist.
The top bar#
The program menu switches between every program under your maps root. Its last two entries are + Analyse a directory… and × Close this map.
The source directory button opens About this map: what read it, when, and two rows that are a standing guarantee rather than placeholders:
| Row | Value |
|---|---|
| Inferred facts | none — every fact here was read, not guessed |
| Read by a model | none — this analysis is deterministic and local |
It shows the leaf of the directory the map was read from, never the full path.
The version menu picks which point in time you are reading and what it is compared with. With one version it is not drawn. See Comparing two versions.
The search box searches names and meanings (routines, tables, boundaries) across every
navigator group at once. Press / from anywhere to jump to it. The three flags beside it are
match case, whole word, and regular expression. This is a different question from the Code
group's search box, which searches the text of the source.
The scale slider is one multiplier over type, column widths, row heights, icons and graph nodes. It is not browser zoom: the layout reflows.
The version strip#
The line under the top bar is always present, so you never have to infer from an absence whether you are looking at a comparison. With nothing compared it says which kind of nothing: this program has only one version, or nothing compared (there is another version and you chose not to use it).
The navigator#
Twelve groups, each counting the program rather than reciting a fixed list:
| Group | What is in it |
|---|---|
| Ways in | Every way the program can be started, ranked by how much each commands. |
| Routines | All of them, by package. |
| Changes | What differs from the compared version. Empty until you set one. |
| Code | Every file, and a text search over the source. |
| Explore | Worth a look (measured extremes) and Kept, your shelf. |
| Packages | The largest packages, by what they hold. |
| Boundaries | Everything that leaves the program, by kind. |
| Database | Every table the code names, and who reads and writes it. |
| Structures | Classes, dataclasses, enums, type aliases. |
| Vocabulary | The glossary, the derived naming standard, stated naming rules, and which rules could be checked. |
| Algorithms | Loops and decisions, in five lanes. See Shape. |
| Anomalies | The worklist: Broken, Suspect, Informational. |
By default one group is open at a time; you can change that in Settings. No filter is ever silent: when you search, every group tells you what it did with your query, including the ones that found nothing.
The inspector#
Everything known about the current selection:
- IN: what calls it, and how sure DunneFlow is about each:
CERTAIN,INFERREDorEXTERNAL. Confidence is shown by shape and wording, never by colour alone. - OUT: what it calls, and which package each lives in.
- TOUCHES: what it moves in or out of the program, such as the SQL it runs, the files it opens, or what it writes to a stream.
- GOVERNANCE: plans, tickets and decision ids attached to it.
- THREADS TO PULL: reasons something else is worth a detour. See Chasing rabbits.
- SIGNATURE and Show source: the declaration, and the code.
An empty panel is never left blank: it says what it looked for and found nothing. Every pane collapses to a labelled rail rather than vanishing, so you can always get it back.
The anomaly worklist#
Findings are a worklist rather than a report. Each shows its severity, its confidence, its
kind, how many places it occurs, a sentence saying what it means, and its blind spot:
what would make it a false alarm. Move through them with j and k, and triage each with
one key:
- Not a bug: the blind spot applies.
- Real: acknowledged, leave it for now.
- A defect in DunneFlow, not in the program.
The third exists because a tool reading unfamiliar code will sometimes be wrong about it, and a finding dismissed that way is evidence that a detector needs fixing.
Keyboard#
| Key | Action |
|---|---|
/ | Jump to the search box. |
⌘Z / ⇧⌘Z (Ctrl+Z / Ctrl+Shift+Z on Windows and Linux) | Back and Forward along the trail, from anywhere. |
Enter | Open the detail window for whatever the pointer is over in the graph. |
s | Show or hide the source pane in the inspector. |
Esc | Close the source viewer, then the detail window. |
j / k | Next or previous finding in the anomaly worklist. |
1 / 2 / 3 | Triage the finding under the cursor. |
Something unclear or out of date? Tell us.