Skip to content

Release 7.0.16-beta - #1068

Merged
justcoding121 merged 42 commits into
betafrom
develop
Oct 4, 2026
Merged

justcoding121 merged 42 commits into
betafrom
develop

Conversation

@justcoding121

Copy link
Copy Markdown
Owner

Summary

  • Cut v7.0.16-beta from develop (ba81d61a). VersionPrefix is 7.0.16.
  • Inspector session-list work stays off the UI thread. H1 terminate-lite shell pool, H2 credit-sized DATA frames, and H3 per-stream scratch frames.
  • Performance wiki re-measured at 0386b2aa. Chocolatey stays skipped (SKIP_CATALOG_PUBLISH=true). Winget PRs and the Homebrew tap are not part of this beta.

Test plan

  • .NET / build, ui-portable and cli-e2e on Windows, Linux, and macOS
  • RPS compare-spot on ubuntu-latest, windows-latest, and macos-15-intel
  • Path guard
  • SonarCloud quality gate OK

Cap the macOS ramp at 40m with an INCOMPLETE marker so partial CSVs upload, flush ProbeLog and emit arm heartbeats, run nginx peers last with a stray-process sweep, document finer Mac shard counts, and add a serial Mac publish waiter.
ConvertFrom-Json may already materialize created_at as DateTime; TrimEnd on that threw and left dispatched Mac runs untracked.
Nine-way product shards need ~39-45m at repeats=3; the 40m safety cap marked them INCOMPLETE and caused redispatch churn. Healthy Silicon jobs already survive past 48m — keep the incomplete marker for true hangs.
Matches the workflow cap after nine-way shards were timing out at 40m.
…4ade

Re-paste product, heavier, gRPC/WS and Editions tables from the 41f4ade
Win/Linux runs and regenerate the Windows/Linux practical charts. Update
prose ratios to match. macOS Apple Silicon sections are marked pending
re-measure until the Mac shards finish.
Pin the Linux H2/H3/WS baseline at c6b3916 and note that the published WS H2 Linux row used a Nagle-on probe client.
Set NoDelay and write each frame header and payload as one TLS record. The old client sent two records with Nagle on, which waits out the 40 ms delayed ACK.
…ady granted

When at least 4 KiB is available and it is short of a full frame, read that many bytes instead of parking for one more byte after 48 KiB. ReserveAsync stays all-or-nothing.
Consume the QuicStream write before the scratch can be reused or returned to the pool, so a sync-complete write cannot repeat the e781b00 body corruption.
These runs are the re-measure for the WebSocket harness fix, the 256 KiB H2 frame trim, and the H3 scratch. Do not mix them with the c6b3916 baseline.
Linux moves from about 1.5k to 42,050 after the probe sets NoDelay and writes one TLS record. HAProxy on the same client moves with it. Windows and macOS rows are from the same harness SHA.
Fill the macOS product, heavier, saturation, and TLS-cost tables from the
finished macos-15 shards and regenerate both Mac charts. Keep the later
HTTP/3 Block C re-measure, and stop the Mac waiter from retrying empty gRPC shards.
Paste the be4d4e8 Windows and Linux compare-cross-version runs against the committed 6.0 baselines.
Rank OS-possible peers 1st–3rd by sustain (RSS/CPU tie-break) so podium medals appear consistently, and teach the paste scripts the same rule.
Silver and bronze cluttered the tables; mark the sustain winner only, and match the paste scripts.
… + interlocked count instead of ConcurrentBag.Count)

ConcurrentBag.Count freezes every per-thread list under Monitor and Rent/Release run on different
workers, so the hot path serialized (about 7% of proxy-tree CPU in a Linux perf profile of
reverse-http1-tls). Same-VM paired A/B (6 counterbalanced pairs, c=32, VM-only): reverse-http1
RPS +5.6% [+3.1,+8.0], CPU/req -8.0%; reverse-http1-tls RPS +6.3% [+1.1,+11.4], CPU/req -9.5%.
justcoding121 and others added 12 commits October 3, 2026 13:42
Approximation tildes were rendering as strikethrough. Keep the current ratios on the Performance page and record the H1 POST ratio on the profiling page.
Clear, remove, filter, import, and export walked every row and touched HAR files on the UI thread, so about 10k sessions froze the window. Update the grid in one reset and read or delete HAR files in the background.
…oor (#1063)

* ci(rps): sample cpu-clock when perf has no hardware counters

Cloud VMs report cycles as not supported. profile-arm.sh falls back to cpu-clock so the same call-stack capture still runs.

* docs(wiki): classify the unprofiled Linux body, POST and new-connection rows

A 4 vCPU cloud profile found no Titanium self frame above the 1.5% gate, so those rows stay a C# floor or handshake noise and no product change was kept.

* fix(inspector): publish archive and HAR status on the dispatcher

Off-thread export and import resumed through the UI sync context, which headless RunJobs does not drain, so StatusText stayed on Exporting or Importing. Post the outcome and flush the toast while the app is still up.

* ci: let a maintainer-owned PR touch NC paths when a bot pushes

The path guard keyed only off github.actor, so a cloud agent push to a justcoding121 pull request was rejected even though the PR author is a maintainer.

* test(e2e): wait for archive export status before copying the zip

File.Exists becomes true when the zip is created, before the central
directory is written. Copying at that point imports a corrupt archive.

* fix(inspector): skip window toasts when the host is headless

WindowNotificationManager.Show posts the card and closes it from Task.Delay.
Headless drains that post before the animation clock exists, and the close
later runs off the UI thread and crashes the test host. Status text is unchanged.

* test(inspector): allow Windows working-set noise in the spill backstop

A spilled capture grew 181MB on the Windows build job with bodies already
on disk. The in-memory body cap remains the leak check.

* fix(inspector): present HAR and archive status after the dispatcher is live

Headless Dispatch runs queued jobs in ResetForUnitTests before IGlobalClock exists. The notification Show is async void, so that toast threw and its Close resumed off the UI thread.

* test(e2e): snapshot the session list while capture is still adding rows

The Ubuntu UI job enumerated Sessions on the test thread while the capture reader mutated it, so Any threw Collection was modified.

* test(inspector): cover deferred archive UI for the coverage gate

The new-code gate only counts the Windows unit-suite report. Exercise the
live-dispatcher queue, failure reports, and background read/write paths
from that suite.

* ci(rps): use the same 345-minute ramp cap on macOS

Unsherded Mac compare-product hit the 180-minute step limit (run 37110567901) while Linux/Windows still had headroom.

* test(inspector): cover live-dispatcher HAR export and import status

New code coverage was 54.8 percent, under the 80 percent gate. The headless dispatcher path was only exercised by UI tests, which are outside the coverage run.

---------

Co-authored-by: justcoding121 <justcoding121@users.noreply.github.com>
…#1064)

* perf(rps): retire the 7.0 vs 6.0 cross-version comparison

Drop the Cross-version wiki table, the compare-cross-version mode, validate-cross-version.ps1 and the committed 6.0 baseline CSVs. The 7.0-vs-6.0 release gate is retired; compare-bridges (protocol bridging) stays.

* perf(rps): run one wiki row per job

Add a comparison-group key to --arm-shard and --print-groups, and an RPS suite workflow that runs each wiki row as its own job on each OS. A row leg is capped at 60 minutes of ramp so a wedged runner loses one row, and the suite fails unless every row reports success.

---------

Co-authored-by: justcoding121 <justcoding121@users.noreply.github.com>
The suite prep job lists comparison groups before the runner has libmsquic, so QuicListener was unsupported and every HTTP/3 wiki row was silently dropped on all three OS. The group list is now host-independent; the legs still apply the real capability filters when they ramp.

Co-authored-by: justcoding121 <justcoding121@users.noreply.github.com>
Piping a single comparison group through ConvertTo-Json emitted a string, so saturation, editions, and the WebSocket modes never started their OS jobs.

Co-authored-by: justcoding121 <justcoding121@users.noreply.github.com>
One SHA covers product, heavier, saturation, editions, gRPC, and WebSocket. Paste and chart scripts now read every shard CSV in a run, so a suite folder is not reduced to its first row.

Co-authored-by: justcoding121 <justcoding121@users.noreply.github.com>
@sonarqubecloud

sonarqubecloud Bot commented Oct 4, 2026

Copy link
Copy Markdown

@justcoding121
justcoding121 merged commit c90624f into beta Oct 4, 2026
26 checks passed

This branch was successfully deployed

1 active deployment
github-pages — a409490a Deployed Oct 4, 2026 by justcoding121 via deploy #599
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant