<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Jvq on SoftDevStudio.com</title>
    <link>https://softdevstudio.com/tags/jvq/</link>
    <description>Recent content in Jvq on SoftDevStudio.com</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Mon, 19 Oct 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://softdevstudio.com/tags/jvq/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>jvq Counts Instructions to Catch Small Slowdowns</title>
      <link>https://softdevstudio.com/jvq-counts-instructions-to-catch-small-slowdowns/</link>
      <pubDate>Mon, 19 Oct 2026 00:00:00 +0000</pubDate>
      <guid>https://softdevstudio.com/jvq-counts-instructions-to-catch-small-slowdowns/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://jvq.net/jvq-0.6-counts-instructions-under-valgrind-to-catch-a-2-percent-slowdown-on-a-noisy-runner/&#34;&gt;jvq 0.6.0&lt;/a&gt; adds a second way to measure. Instead of timing the benchmark, the new &lt;code&gt;instructions&lt;/code&gt; adapter runs it under valgrind&amp;rsquo;s cachegrind and counts what it executes. A count hardly moves between runs and ignores how busy the machine is, so the budget drops from 5% to 1%.&lt;/p&gt;&#xA;&lt;p&gt;On a shared 2-core VM, a real 2% slowdown passed the time gate as noise and came out at +1.9% counted, caught in 5 rounds. In the recorded scenarios, every 2% step was caught, every 0.5% step passed, and a no-change run never failed, beside a noisy neighbour too.&lt;/p&gt;</description>
    </item>
    <item>
      <title>jvq Gates Benchmarks in Any Language</title>
      <link>https://softdevstudio.com/jvq-gates-benchmarks-in-any-language/</link>
      <pubDate>Mon, 19 Oct 2026 00:00:00 +0000</pubDate>
      <guid>https://softdevstudio.com/jvq-gates-benchmarks-in-any-language/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://jvq.net/jvq-now-gates-benchmarks-in-any-language-by-timing-a-command-or-reading-a-few-lines-of-json/&#34;&gt;jvq&lt;/a&gt;, the studio&amp;rsquo;s CI gate that fails a pull request when it makes benchmarks slower than their budget, read only Go&amp;rsquo;s benchmark output in its first release. Version 0.2.0 opens it to any language. A &lt;code&gt;time&lt;/code&gt; adapter times the whole command, so a Python script or a compiled binary can be gated with no change to its code, and a &lt;code&gt;json&lt;/code&gt; adapter reads a line per result that any benchmark can print. A new &lt;code&gt;jvq compare&lt;/code&gt; judges two saved outputs with the same statistics. The &lt;a href=&#34;https://github.com/just-very-quickly/jvq/releases/latest&#34;&gt;release&lt;/a&gt; has binaries for Linux, macOS and Windows.&lt;/p&gt;</description>
    </item>
    <item>
      <title>jvq Gates GitLab Merge Requests</title>
      <link>https://softdevstudio.com/jvq-gates-gitlab-merge-requests/</link>
      <pubDate>Mon, 19 Oct 2026 00:00:00 +0000</pubDate>
      <guid>https://softdevstudio.com/jvq-gates-gitlab-merge-requests/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://jvq.net/jvq-now-gates-gitlab-merge-requests-with-a-ready-template-and-a-junit-report/&#34;&gt;jvq 0.4.0&lt;/a&gt; brings the studio&amp;rsquo;s CI benchmark gate to GitLab. A ready job ships with the &lt;a href=&#34;https://github.com/just-very-quickly/jvq/releases/latest&#34;&gt;release&lt;/a&gt;: include it, extend it, name the benchmark command, and merge requests get a gate that measures base and head in turns and fails the pipeline on a regression.&lt;/p&gt;&#xA;&lt;p&gt;The work was in the details GitLab adds. A merged results pipeline, a merge train on a project that rebases and a plain merge request pipeline each want a different base commit, and jvq now reads GitLab&amp;rsquo;s own variables to pick the right one. A new JUnit report puts the verdict in the merge request&amp;rsquo;s test summary, and Jenkins reads the same file.&lt;/p&gt;</description>
    </item>
    <item>
      <title>jvq Keeps a History of Every Run</title>
      <link>https://softdevstudio.com/jvq-keeps-a-history-of-every-run/</link>
      <pubDate>Mon, 19 Oct 2026 00:00:00 +0000</pubDate>
      <guid>https://softdevstudio.com/jvq-keeps-a-history-of-every-run/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://jvq.net/jvq-0.5-keeps-a-history-to-catch-the-slowdown-that-arrives-one-small-merge-at-a-time/&#34;&gt;jvq 0.5.0&lt;/a&gt; goes after the one slowdown a per-change gate can&amp;rsquo;t see: many small ones, each inside the budget. Runs on the default branch now add a line to a history file, and &lt;code&gt;jvq history&lt;/code&gt; shows how far each benchmark has moved in all, with an interval, run by run.&lt;/p&gt;&#xA;&lt;p&gt;Each run&amp;rsquo;s change was measured on one machine, so the changes can be chained even when CI runners differ. Each run&amp;rsquo;s interval is chained along with it, so noise widens the answer instead of passing for a trend. In the GitHub Action it&amp;rsquo;s one input, &lt;code&gt;history&lt;/code&gt;, kept in the Actions cache; the GitLab template has the same.&lt;/p&gt;</description>
    </item>
    <item>
      <title>jvq Launches, a CI Gate That Fails Pull Requests Which Make Benchmarks Slower</title>
      <link>https://softdevstudio.com/jvq-launches-a-ci-gate-that-fails-pull-requests-which-make-benchmarks-slower/</link>
      <pubDate>Mon, 19 Oct 2026 00:00:00 +0000</pubDate>
      <guid>https://softdevstudio.com/jvq-launches-a-ci-gate-that-fails-pull-requests-which-make-benchmarks-slower/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://jvq.net/performance-budgets-in-ci-only-work-when-base-and-head-run-side-by-side/&#34;&gt;jvq&lt;/a&gt;, short for just very quickly, is the studio&amp;rsquo;s nineteenth project: a performance budget gate for CI. Most teams that run benchmarks in CI compare today&amp;rsquo;s numbers with last week&amp;rsquo;s, taken on another machine, and shared runners can drift 5 to 20% between runs. The alarms stop meaning anything. jvq measures the base commit and the change in the same job, taking turns, so both sides see the same machine. Version 0.1.0 &lt;a href=&#34;https://jvq.net/first-jvq-release-fails-pull-requests-that-make-go-benchmarks-slower-than-their-budget/&#34;&gt;came out on 18 October&lt;/a&gt; for Go benchmarks, as one binary with no dependencies, with &lt;a href=&#34;https://github.com/just-very-quickly/jvq/releases/latest&#34;&gt;binaries&lt;/a&gt; for Linux, macOS and Windows and a GitHub Action that checks the download&amp;rsquo;s checksum. It&amp;rsquo;s open source under Apache 2.0.&lt;/p&gt;</description>
    </item>
    <item>
      <title>jvq Reads Four Benchmark Harnesses and Gates File Sizes</title>
      <link>https://softdevstudio.com/jvq-reads-four-benchmark-harnesses-and-gates-file-sizes/</link>
      <pubDate>Mon, 19 Oct 2026 00:00:00 +0000</pubDate>
      <guid>https://softdevstudio.com/jvq-reads-four-benchmark-harnesses-and-gates-file-sizes/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://jvq.net/jvq-now-reads-criterion-google-benchmark-pytest-benchmark-and-vitest-as-they-are-and-gates-file-sizes/&#34;&gt;jvq 0.3.0&lt;/a&gt; takes the output of four popular benchmark harnesses as it is: Rust&amp;rsquo;s criterion from &lt;code&gt;cargo bench&lt;/code&gt;, Google Benchmark&amp;rsquo;s JSON, pytest-benchmark and vitest bench. A project with one of them now needs only a line or three in jvq.toml to get a CI gate that runs base and head in turns. The &lt;a href=&#34;https://github.com/just-very-quickly/jvq/releases/latest&#34;&gt;release&lt;/a&gt; has binaries for Linux, macOS and Windows.&lt;/p&gt;&#xA;&lt;p&gt;The adapters were tested on output captured from the real tools, and the recordings run each harness end to end through jvq. On a two-core cloud VM, criterion and vitest caught all 10 runs with 20% more work and raised no false alarm in 10 without. pytest-benchmark caught all 10 too, but raised one false alarm when given only a short time per test, and the write-up says so.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
