Repository navigation
Conversation
The default height went from 300 to 500 while the docked offset stayed at -300px, so a panel that had never been moved, and every press of the dock button, left 200px of it below the window. The offset now comes from the same constant. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Every external output port of an operator that keeps its result is stored, but results were only ever read from the first port, so a Split's second output or an If's True branch could not be shown. A pagination request can now name the output port to read, with the first port as the default, and the reply carries the port it read and that port's row count. The live result updates keep following the first port, so a client paging another port takes the count from the reply. The result store's count per operator now comes from the first port too; it was built from every stored port, so a terminal Split's second output could replace its first output's count. On the frontend, the result service gives each extra port its own pagination service, which names its port in its requests, keeps no page cache and takes its row count from each reply, and every port's service takes its schema only from replies to its own requests. The result table and its row detail can show any port. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
29221cd to
8ef2a74
Compare
Switching the table to another output port left the previous port's rows on screen when the new port was empty, with the loading state never ending, and a late reply for the previous port could replace the new port's rows. A port change now starts from an empty table, a reply for an operator or port no longer shown is dropped, and an empty page ends the loading. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…canvas Resting the pointer on an operator for half a second shows a card beside it with the operator's first rows and its size, or its error, or how to keep a result the run did not keep. A pointer passing over, dragging, or a click opens nothing, and the card lingers a moment so the pointer can move into it. An operator with several outputs says the rows are the first output's. The preview can be turned off under Layers, and stays off while the heat-map overlay is on. The first rows come from a request of their own, so a preview never moves the result table's page or reads its cache. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…tput port Pinning the hover card opens a window beside the operator with its whole result table, tied to it by a dashed line. Several windows can be open at once; each can be dragged and resized, and follows its operator when the operator or the canvas moves. An operator with more than one output gets a tab per output port in its window. The first port is the one the running execution reports on; another port is read through the port-aware result service when its tab is shown. The table in a window measures what it draws around its rows, the search bar, header, statistics and pager, and fits as many rows as the rest of the window allows, so the pager sits near the window's bottom at any size. The bottom panel keeps its own rule. The statistics row shows only when a column has statistics, which a port past the first never has. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The default height went from 300 to 500 while the docked offset stayed at -300px, so a panel that had never been moved, and every press of the dock button, left 200px of it below the window. The offset now comes from the same constant. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
An operator's result is now read beside it on the canvas, in the hover card and the pinned window, so the bottom panel drops its Result tab and holds the console alone. With no operator highlighted, the console shows every operator's messages in time order, each tagged with its operator; clicking a tag narrows to that operator, as highlighting it does. One highlighted operator shows its messages alone under a "Showing" line whose close button goes back to all. The errors that stopped a run or a compilation join the list as ERROR messages, so the Static Error tab goes too; they follow the same rule the Static Error tab did, and the same error gives the same message on every render, so the list does not jump to its end. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
8ef2a74 to
d127081
Compare
Automated Reviewer SuggestionsBased on the
|
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## main #9060 +/- ##
============================================
- Coverage 92.33% 91.75% -0.59%
- Complexity 5045 5068 +23
============================================
Files 1261 1274 +13
Lines 54120 55443 +1323
Branches 6768 7034 +266
============================================
+ Hits 49974 50871 +897
- Misses 2486 2822 +336
- Partials 1660 1750 +90
*This pull request uses carry forward flags. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
carloea2
left a comment
There was a problem hiding this comment.
One result-access regression reproduced in the rendered component tests on fresh upstream main. The added regression fails and 216 existing checks pass.
node node_modules/@angular/cli/bin/ng test --watch=false --progress=false --include=src/app/workspace/component/workflow-editor/workflow-editor.component.spec.ts --include=src/app/workspace/component/result-panel/result-panel.component.spec.ts --include=src/app/workspace/component/result-panel/console-frame/console-frame.component.spec.ts --include=src/app/workspace/service/workflow-console/workflow-console.service.spec.ts --include=src/app/workspace/component/workflow-editor/pinned-result-window/pinned-result-window.component.spec.ts
Leaving the PR as a draft.
|
Confirmed the same result-access regression in local Chromium too: 123 existing editor tests pass and the added hover-disabled regression fails. This was the repository browser-test target, not jsdom. |
With Result preview off or the heat-map on there is no hover card, and the bottom panel now holds only the console, so the right-click menu is the way to a result window. Pinning an operator already pinned keeps one window. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
carloea2
left a comment
There was a problem hiding this comment.
The result-access finding is fixed. Pinning through the right-click menu works with Result preview off and with the heat-map on, including duplicate-pin handling. The 263 focused unit tests and all 125 workflow-editor tests in real Chromium pass. Focused prettier-eslint and ESLint checks pass. Rebase over #8766 must retain its empty-result schema handling alongside the stale-reply guard. CI still needs clearing before merge.
Resolve the conflicts with apache#8766: a page with no rows takes its columns from the stored schema, and the reply still carries the port's total count and is dropped when it belongs to another operator or port. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
| config | throughput | MB/s | latency | max Δ latest / 7d | |
|---|---|---|---|---|---|
| 🔴 | bs=10 sw=10 sl=64 | 549 | 0.335 | 16,791/26,926/26,926 us | 🔴 +26.5% / 🔴 +120.3% |
| 🔴 | bs=100 sw=10 sl=64 | 1,229 | 0.75 | 81,293/114,651/114,651 us | 🔴 +23.8% / 🔴 +31.5% |
| ⚪ | bs=1000 sw=10 sl=64 | 1,468 | 0.896 | 681,197/770,171/770,171 us | ⚪ within ±5% / 🟢 -12.7% |
Baseline details
Latest main 94914a0 from same runner
| config | metric | PR | latest main | 7d avg | Δ latest | Δ 7d |
|---|---|---|---|---|---|---|
| bs=10 sw=10 sl=64 | throughput | 549 tuples/sec | 595 tuples/sec | 1,019 tuples/sec | -7.7% | -46.1% |
| bs=10 sw=10 sl=64 | MB/s | 0.335 MB/s | 0.363 MB/s | 0.622 MB/s | -7.7% | -46.1% |
| bs=10 sw=10 sl=64 | p50 | 16,791 us | 17,786 us | 10,144 us | -5.6% | +65.5% |
| bs=10 sw=10 sl=64 | p95 | 26,926 us | 21,281 us | 12,225 us | +26.5% | +120.3% |
| bs=10 sw=10 sl=64 | p99 | 26,926 us | 21,281 us | 15,527 us | +26.5% | +73.4% |
| bs=100 sw=10 sl=64 | throughput | 1,229 tuples/sec | 1,340 tuples/sec | 1,371 tuples/sec | -8.3% | -10.4% |
| bs=100 sw=10 sl=64 | MB/s | 0.75 MB/s | 0.818 MB/s | 0.837 MB/s | -8.3% | -10.4% |
| bs=100 sw=10 sl=64 | p50 | 81,293 us | 73,756 us | 79,910 us | +10.2% | +1.7% |
| bs=100 sw=10 sl=64 | p95 | 114,651 us | 92,639 us | 87,155 us | +23.8% | +31.5% |
| bs=100 sw=10 sl=64 | p99 | 114,651 us | 92,639 us | 106,643 us | +23.8% | +7.5% |
| bs=1000 sw=10 sl=64 | throughput | 1,468 tuples/sec | 1,443 tuples/sec | 1,415 tuples/sec | +1.7% | +3.7% |
| bs=1000 sw=10 sl=64 | MB/s | 0.896 MB/s | 0.881 MB/s | 0.864 MB/s | +1.7% | +3.7% |
| bs=1000 sw=10 sl=64 | p50 | 681,197 us | 689,643 us | 780,407 us | -1.2% | -12.7% |
| bs=1000 sw=10 sl=64 | p95 | 770,171 us | 758,378 us | 817,814 us | +1.6% | -5.8% |
| bs=1000 sw=10 sl=64 | p99 | 770,171 us | 758,378 us | 848,683 us | +1.6% | -9.3% |
Raw CSV
config_idx,batch_size,schema_width,string_len,num_batches,total_ms,total_tuples,total_bytes,tuples_per_sec,mb_per_sec,lat_p50_us,lat_p95_us,lat_p99_us
0,10,10,64,20,363.99,200,128000,549,0.335,16791.01,26925.61,26925.61
1,100,10,64,20,1627.89,2000,1280000,1229,0.750,81293.30,114650.60,114650.60
2,1000,10,64,20,13626.52,20000,12800000,1468,0.896,681197.46,770170.52,770170.52
What changes were proposed in this PR?
With results open beside their operators (#9063), the bottom panel drops its Result tab and keeps only the console.
With no operator selected, the console shows every operator's messages in time order, each tagged with its operator; clicking a tag narrows it to that operator, as selecting the operator does. With one operator selected, it shows that operator's messages alone, under a line naming it that closes back to all. The errors from the Static Error tab join the console as error messages, shown by the rule the tab used: an operator's own errors with it, and errors that belong to no operator when none is selected. That tab and its component are removed.
This needs #9063 and #9056, so the diff includes their commits, and those of #9058 and #9054, until they merge. The PR's own change is the last commit.
Any related issues, documentation, discussions?
Closes #9059. Part of #9052. Design discussed in #8842.
How was this PR tested?
The specs of the console, the console service and the result panel cover every operator's messages and their tags, narrowing to one operator and back, errors as console messages, and a re-render with an error present not moving the list. The full frontend suite passes. In the running app, two Python UDFs' prints and an error appear together, tagged by operator, and narrow to one operator when it is selected.
Was this PR authored or co-authored using generative AI tooling?
Generated-by: Claude Code (Claude Opus 5.5)
🤖 Generated with Claude Code