@unotest/viewer 0.30.0 → 0.31.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,108 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.31.0] - 2026-09-04
4
+
5
+ ### Minor Changes
6
+
7
+ - b8e105b: Steps tree shows what a step attached to itself: a row that called
8
+ `note(...)`, `log(...)` or `assertJudge(...)` gets an `ⓘ N` chip, and the
9
+ list under it renders notes as `label → value`, log lines, and the
10
+ verdict as `judge ✓/✗ · rubric · text` — open by default under a failed
11
+ step and under a verdict that said no, with open/closed choices
12
+ remembered per scenario and step. A note from inside a helper lands
13
+ under the entry step that called it (the runner records the entry
14
+ position; older journals fall back to the step in flight). The error
15
+ card of a failed judge step carries the whole verdict. After the run the
16
+ System pane lists the scenario's `log(...)` lines with their time. The
17
+ server keeps `note` / `log` lines when it reads a finished run's journal.
18
+ - 100ab9d: Steps view reads the `step-block:*` envelopes of a run: a block's duration
19
+ is now the whole block (a step wrapping a loop of three navigations shows
20
+ the loop's 4.8s, not the last statement's 66ms), a `{tag}` step shows its
21
+ evaluated tag as a chip (the source expression before the run), a
22
+ `step.soft` block is marked `soft`, and a group with soft descendants
23
+ rolls them up as "1 of 10 soft failed" and reads as failed. A run with
24
+ soft failures gets a card above the tree listing every one with its tag,
25
+ line and error. Journals recorded before 0.31.0 render as before. The
26
+ server keeps `step-block:*` and `judge:verdict` lines when it reads a
27
+ finished run's journal from disk (it used to drop every kind it did not
28
+ list, so a verdict never reached the page); the error card under a
29
+ failed step shows that step's own error, not the run's last one; the
30
+ status bar counts soft steps ("2 of 3 soft failed").
31
+ - ad7c918: Trace view — the execution tree of a run, next to Steps and Code. Built
32
+ from the journal alone: a helper call opens into the helper's statements
33
+ and `step(...)` blocks (file named on the row), a loop into one group per
34
+ iteration (an iteration that ran nothing included), a block into its
35
+ envelope with tag and duration. Helper calls and passed iterations start
36
+ folded with a summary ("10 iterations · 1 failed"); the failed branch is
37
+ open down to the failing statement, which carries the error card.
38
+ Double-click opens the row's file — a helper too — at that line in Code.
39
+ Notes, log lines and verdicts sit under their statement; screenshots
40
+ open from the row, helper-frame captures included. The chosen view is
41
+ remembered across reloads (a debug session always opens in Code). The
42
+ inspector's flat event list is now the **Events** tab, so Trace names
43
+ one thing. The server keeps `loop:iteration` lines when it reads a
44
+ finished run's journal.
45
+
46
+ ### Patch Changes
47
+
48
+ - e048334: The viewer's editor flags an undeclared external variable
49
+ (`lint:external-variable-undeclared`), the way `unotest-web lint` and the
50
+ pre-run lint already do: a bare `UPPER_SNAKE` identifier that no
51
+ `unotest/.env` / `.secrets` file of the active environment declares is an
52
+ error in the editor, naming the files searched. Protocol:
53
+ `DslValidateContext` gains `externalNames` / `externalSources`; the
54
+ viewer supplies them from the active target + environment's layer files
55
+ (the same files the variables panel shows) and `@unotest/web`'s language
56
+ service turns them into the linter's lookup.
57
+ - dcf4c9e: Viewer editor: lint markers appear as soon as a file opens (or the page
58
+ reloads), not only after the first keystroke — the editor validates the
59
+ source it mounted with instead of waiting for a change event that a
60
+ reopened tab never fires.
61
+ - 9ae6d59: A scenario that finished in the same instant the viewer looked at it is no
62
+ longer recorded as `interrupted` with a finish an hour before its start.
63
+ The runner ends a run by appending `run:finished` and then backdating the
64
+ heartbeat; the viewer read those two files in the opposite order, so a
65
+ steps snapshot taken a few milliseconds early could meet the backdated
66
+ heartbeat, and the provisional verdict stuck in the run index while the
67
+ collection reported the scenario passed. The heartbeat is read first now.
68
+ A viewer restart (which rebuilds the index from disk) already corrected
69
+ such records; runs indexed live are right the first time.
70
+ - 13a2d51: Viewer, Home tab: the tile of a scenario that is running now breathes
71
+ through colour and shadow only — the scale pulse is gone. It moved the
72
+ tile's box every frame, so an automation driver never saw the tile as
73
+ stable and a click on it waited out its timeout. A tile that never ran
74
+ no longer carries `data-age="fresh"`: it has no age, so the attribute is
75
+ absent.
76
+ - 91fb562: Viewer, Home tab: clicking a scenario tile opens the scenario's LAST RUN —
77
+ the run whose verdict the tile's colour is showing — instead of the test
78
+ file. A tile that has never run still opens the test (there is no run to
79
+ open), and so does every tile in schedule mode, where the schedule is
80
+ edited from the test. The legend now reads "hover for history · click to
81
+ open the last run".
82
+ - dcf4c9e: Viewer, Home tab: the tile field no longer refits itself in a loop. The
83
+ header and legend take the grid's width; when the legend wrapped at one
84
+ width and not at the next, the field's height changed, the fit followed,
85
+ the width changed back — at 60 fps every tile's box moved every frame,
86
+ and an automation click on ANY tile ("element is not stable") waited out
87
+ its timeout unless forced. Header and legend now never wrap (they grow
88
+ past the grid instead), so the fit converges and tiles stay put. A run
89
+ opened from a tile is titled by its scenario, like one opened from the
90
+ Runs tree, instead of by its run id.
91
+ - Updated dependencies [b8e105b]
92
+ - Updated dependencies [b8e105b]
93
+ - Updated dependencies [9ae6d59]
94
+ - Updated dependencies [56784b3]
95
+ - Updated dependencies [e048334]
96
+ - Updated dependencies [100ab9d]
97
+ - Updated dependencies [100ab9d]
98
+ - Updated dependencies [100ab9d]
99
+ - Updated dependencies [ad7c918]
100
+ - Updated dependencies [ad7c918]
101
+ - Updated dependencies [dcf4c9e]
102
+ - @unotest/core@0.31.0
103
+ - @unotest/protocol@0.31.0
104
+ - @unotest/dsl@0.31.0
105
+
3
106
  ## [0.30.0] - 2026-09-03
4
107
 
5
108
  ### Minor Changes