diff --git a/docs/viewer-launch-changelog.md b/docs/viewer-launch-changelog.md index 71b2a2e10..593ba632c 100644 --- a/docs/viewer-launch-changelog.md +++ b/docs/viewer-launch-changelog.md @@ -143,6 +143,8 @@ These describe `codegraph ui` and its screens. They were taken out of `## [Unrel ## Fixes — Steps — what a call does, and when +- **A Steps picture with nothing past its anchor says why.** Starting Steps from a helper that only computes drew one box and no explanation. The panel now says that nothing it sets in motion is a step the picture draws, explains that calls between plain functions fold into the lines, and links to the symbol's callers and callees. + - **Steps no longer goes blank on a function full of checks.** Reading a function in its code's order doubled the ways forward at every `if` with no `else`. A body with dozens of checks that draw nothing, like jsoup's `parse`, never finished, and the page died with a stack overflow. Ways that arrive at the same place are now one way, carrying only the conditions they all share. - **A Swift app's Steps picture labels what a call leaves for correctly.** `rawValue.data(using: .utf8)` was drawn as a network call, Foundation's `Timer` as telemetry, `Calendar` and a SiriKit `intent` as device calls, and `viewModel.votes.firstIndex(of:)` as a database read. Now only a session's `data`, `upload` and `download` are network, `Timer`, `Calendar` and `intent` are no effect at all, a view model is not a table, and a keychain is storage. A call through a type the app declares itself, like IceCubes' `Notifications` endpoint enum, is no longer read as the library of the same name. diff --git a/ui/src/views/StepsView.svelte b/ui/src/views/StepsView.svelte index 51d0dee2e..2775f89d0 100644 --- a/ui/src/views/StepsView.svelte +++ b/ui/src/views/StepsView.svelte @@ -843,6 +843,15 @@ {/if} {/each}

+ {#if payload.steps.length === 1 && payload.truncated.steps === 0 && payload.truncated.hubs === 0} + +

+ Nothing this sets in motion is a step the picture draws — no reply, database, queue, network or + other {kindWord('screen', payload.project)} within {payload.depth} calls. Calls between plain functions + fold into the lines between steps, so a helper that only computes is drawn alone. + {#if payload.anchor}Its callers and callees →{/if} +

+ {/if} {#if readAs === 'order'}

● The anchor is at the top, and each row down is what happens next: a line