<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://docs.tenzir.com/changelog</id>
    <title>Tenzir Changelog</title>
    <updated>2026-05-13T00:00:00.000Z</updated>
    <generator>Tenzir Changelog</generator>
    <author>
        <name>Tenzir</name>
        <uri>https://tenzir.com</uri>
    </author>
    <link rel="alternate" href="https://docs.tenzir.com/changelog"/>
    <link rel="self" href="https://docs.tenzir.com/changelog/feed.xml"/>
    <subtitle>Release notes across all Tenzir projects</subtitle>
    <icon>https://docs.tenzir.com/favicon.svg</icon>
    <entry>
        <title type="html"><![CDATA[Tenzir Platform v1.32.1]]></title>
        <id>https://docs.tenzir.com/changelog/platform/v1-32-1</id>
        <link href="https://docs.tenzir.com/changelog/platform/v1-32-1"/>
        <updated>2026-05-13T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This is a security patch release that updates dependencies to address vulnerabilities. It also shortens the default user key expiry to 15 Minutes.]]></summary>
        <content type="html"><![CDATA[<p>This is a security patch release that updates dependencies to address vulnerabilities. It also shortens the default user key expiry to 15 Minutes.</p>

<h2>Changes</h2>

<h3>Shorten default user key lifetime</h3>
<p><small>May 13, 2026 · <a href="https://github.com/lava">@lava</a></small></p>
<p>We reduced the default lifetime of user keys from one week to 15 minutes. Sessions transparently refresh, so this is invisible in normal use, but shortens the window in which a leaked key could be reused.</p>
]]></content>
        <category label="Tenzir Platform"/>
        <published>2026-05-13T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tenzir Test v1.10.1]]></title>
        <id>https://docs.tenzir.com/changelog/tenzir-test/v1-10-1</id>
        <link href="https://docs.tenzir.com/changelog/tenzir-test/v1-10-1"/>
        <updated>2026-05-13T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Project fixtures can now declare their Python package dependencies inline with PEP 723 metadata. tenzir-test installs those dependencies before loading fixtures, so regular test runs and fixture mode work for projects with self-contained fixture modules.]]></summary>
        <content type="html"><![CDATA[<p>Project fixtures can now declare their Python package dependencies inline with PEP 723 metadata. tenzir-test installs those dependencies before loading fixtures, so regular test runs and fixture mode work for projects with self-contained fixture modules.</p>

<h2>Bug Fixes</h2>

<h3>Project fixture inline dependencies</h3>
<p><small>May 13, 2026 · <a href="https://github.com/mavam">@mavam</a>, <a href="https://github.com/codex">@codex</a> · <a href="https://github.com/tenzir/test/pull/47">#47</a></small></p>
<p>Project fixtures can now declare Python package dependencies inline with PEP
723 metadata:</p>
<pre><code class="language-python"># /// script
# dependencies = ["boto3"]
# ///
</code></pre>
<p><code>tenzir-test</code> installs these dependencies with <code>uv</code> before importing fixture
modules, so fixtures used during regular test runs and <code>tenzir-test --fixture</code>
can manage their own Python package requirements.</p>
]]></content>
        <category label="Tenzir Test"/>
        <published>2026-05-13T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tenzir Test v1.10.0]]></title>
        <id>https://docs.tenzir.com/changelog/tenzir-test/v1-10-0</id>
        <link href="https://docs.tenzir.com/changelog/tenzir-test/v1-10-0"/>
        <updated>2026-05-12T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[tenzir-test now lets users select scenarios by requested fixture name, making it easier to run only tests that depend on resources such as nodes or Docker Compose. This release also requires Python 3.13 or newer.]]></summary>
        <content type="html"><![CDATA[<p>tenzir-test now lets users select scenarios by requested fixture name, making it easier to run only tests that depend on resources such as nodes or Docker Compose. This release also requires Python 3.13 or newer.</p>

<h2>Features</h2>

<h3>Fixture name test selection</h3>
<p><small>May 12, 2026 · <a href="https://github.com/mavam">@mavam</a>, <a href="https://github.com/codex">@codex</a></small></p>
<p>Select tests by requested fixture name with the new <code>--fixture-name</code> option:</p>
<pre><code class="language-sh">tenzir-test --fixture-name node
tenzir-test tests/alerts --match kafka --fixture-name docker-compose
</code></pre>
<p><code>--fixture-name</code> can be repeated and combines with <code>--fixture-tag</code> using OR
semantics before intersecting with positional test paths and <code>--match</code>.
Fixture selectors are long-only; the previous <code>-F</code> alias for <code>--fixture-tag</code>
has been removed before the CLI shape settles.</p>

<h2>Changes</h2>

<h3>Python 3.13 minimum requirement</h3>
<p><small>May 12, 2026 · <a href="https://github.com/mavam">@mavam</a>, <a href="https://github.com/codex">@codex</a> · <a href="https://github.com/tenzir/test/pull/44">#44</a></small></p>
<p><code>tenzir-test</code> now requires Python 3.13 or newer.</p>
<p>Users on Python 3.12 need to upgrade their interpreter before installing or running the CLI:</p>
<pre><code class="language-sh">uvx --python 3.13 tenzir-test --help
</code></pre>
]]></content>
        <category label="Tenzir Test"/>
        <published>2026-05-12T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tenzir Skills v1.0.0]]></title>
        <id>https://docs.tenzir.com/changelog/tenzir-skills/v1-0-0</id>
        <link href="https://docs.tenzir.com/changelog/tenzir-skills/v1-0-0"/>
        <updated>2026-05-12T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[The Tenzir skill collection is now available as its initial stable release. This release establishes the shared skill set as the stable baseline for coding agents working in and around the Tenzir ecosystem.]]></summary>
        <content type="html"><![CDATA[<p>The Tenzir skill collection is now available as its initial stable release. This release establishes the shared skill set as the stable baseline for coding agents working in and around the Tenzir ecosystem.</p>

<h2>Features</h2>

<h3>Initial stable skill collection</h3>
<p><small>May 8, 2026 · <a href="https://github.com/mavam">@mavam</a>, <a href="https://github.com/codex">@codex</a></small></p>
<p>The Tenzir skill collection is now published as its initial stable release for v1.0.0.</p>
<p>This release establishes the shared skill set as the stable baseline for coding agents working in and around the Tenzir ecosystem.</p>
]]></content>
        <category label="Tenzir Skills"/>
        <published>2026-05-12T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tenzir Test v1.9.0]]></title>
        <id>https://docs.tenzir.com/changelog/tenzir-test/v1-9-0</id>
        <link href="https://docs.tenzir.com/changelog/tenzir-test/v1-9-0"/>
        <updated>2026-05-11T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This release lets users select tests by fixture tag with the new --fixture-tag option. It makes it easier to run focused subsets such as container-backed or Docker Compose tests without naming every test path.]]></summary>
        <content type="html"><![CDATA[<p>This release lets users select tests by fixture tag with the new --fixture-tag option. It makes it easier to run focused subsets such as container-backed or Docker Compose tests without naming every test path.</p>

<h2>Features</h2>

<h3>Fixture tag test selection</h3>
<p><small>May 11, 2026 · <a href="https://github.com/mavam">@mavam</a>, <a href="https://github.com/codex">@codex</a> · <a href="https://github.com/tenzir/test/pull/42">#42</a></small></p>
<p>Select tests by fixture tag with the new <code>--fixture-tag</code> option:</p>
<pre><code class="language-sh">tenzir-test --fixture-tag container
tenzir-test --fixture-tag docker-compose
</code></pre>
<p>Fixture tags are cumulative and can be repeated. The selector intersects with positional test paths and <code>--match</code> patterns, so you can narrow a directory to container-backed tests or run only tests that request the built-in Docker Compose fixture.</p>
<p>Fixtures that use the shared container runtime helpers inherit the <code>container</code> tag automatically. Custom fixtures can pass explicit tags at registration time when they use their own abstraction.</p>
]]></content>
        <category label="Tenzir Test"/>
        <published>2026-05-11T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tenzir Test v1.8.4]]></title>
        <id>https://docs.tenzir.com/changelog/tenzir-test/v1-8-4</id>
        <link href="https://docs.tenzir.com/changelog/tenzir-test/v1-8-4"/>
        <updated>2026-05-09T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[The test harness now detects the installed Tenzir version across current and upcoming Tenzir releases. This keeps startup and version checks working during the transition to the next Tenzir release series.]]></summary>
        <content type="html"><![CDATA[<p>The test harness now detects the installed Tenzir version across current and upcoming Tenzir releases. This keeps startup and version checks working during the transition to the next Tenzir release series.</p>

<h2>Bug Fixes</h2>

<h3>Version checks with current TQL pipelines</h3>
<p><small>May 9, 2026 · <a href="https://github.com/mavam">@mavam</a>, <a href="https://github.com/codex">@codex</a> · <a href="https://github.com/tenzir/test/pull/41">#41</a></small></p>
<p>The test harness can detect the installed Tenzir version across current and upcoming Tenzir releases. This keeps startup/version checks working during the transition to the next Tenzir release series.</p>
]]></content>
        <category label="Tenzir Test"/>
        <published>2026-05-09T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tenzir Platform v1.32.0]]></title>
        <id>https://docs.tenzir.com/changelog/platform/v1-32-0</id>
        <link href="https://docs.tenzir.com/changelog/platform/v1-32-0"/>
        <updated>2026-05-07T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This release adds a timeline to the Stream view that visualizes event volume over time, segmented by schema, with automatic timestamp detection. The Explorer's table view also gains keyboard navigation between entries and a streamlined Fields popover for quicker field selection.]]></summary>
        <content type="html"><![CDATA[<p>This release adds a timeline to the Stream view that visualizes event volume over time, segmented by schema, with automatic timestamp detection. The Explorer's table view also gains keyboard navigation between entries and a streamlined Fields popover for quicker field selection.</p>

<h2>Features</h2>

<h3>Timeline in the Stream view</h3>
<p><small>May 6, 2026 · <a href="https://github.com/gitryder">@gitryder</a></small></p>
<p>The Stream view now includes a timeline that shows event volume over time,
segmented by schema. It automatically detects timestamp fields and adapts
its bucket size to the data’s time range, providing an at-a-glance view of
when events occur and which schemas are most active.</p>
<p>It also probes your data for time fields and shows availability inline,
omitting events without a recognized time field (ts, timestamp, or time).</p>

<h3>Keyboard navigation between entries in Explorer</h3>
<p><small>May 5, 2026 · <a href="https://github.com/gitryder">@gitryder</a></small></p>
<p>You can now navigate between entries in the Explorer table using arrow keys.
Press Space to toggle the inspector, then use Arrow Up and Arrow Down to move
between rows and seamlessly across pages.</p>

<h2>Changes</h2>

<h3>Improved field selection in the table view</h3>
<p><small>Apr 21, 2026 · <a href="https://github.com/gitryder">@gitryder</a></small></p>
<p>We moved field selection in the Explorer's table view into a dedicated popover. The 'Fields' button sits in the toolbar and shows how many fields are currently hidden. Opening it reveals the full field list with the same click-to-toggle and shift+click-to-focus behavior as before.</p>
]]></content>
        <category label="Tenzir Platform"/>
        <published>2026-05-07T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tenzir Test v1.8.3]]></title>
        <id>https://docs.tenzir.com/changelog/tenzir-test/v1-8-3</id>
        <link href="https://docs.tenzir.com/changelog/tenzir-test/v1-8-3"/>
        <updated>2026-05-05T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This release makes hook debug diagnostics consistent with the rest of the harness debug trace, so users get uniform output when diagnosing hook behavior.]]></summary>
        <content type="html"><![CDATA[<p>This release makes hook debug diagnostics consistent with the rest of the harness debug trace, so users get uniform output when diagnosing hook behavior.</p>

<h2>Bug Fixes</h2>

<h3>Consistent hook debug diagnostics</h3>
<p><small>May 5, 2026 · <a href="https://github.com/mavam">@mavam</a>, <a href="https://github.com/codex">@codex</a> · <a href="https://github.com/tenzir/test/pull/40">#40</a></small></p>
<p>Hook diagnostics emitted with <code>--debug</code> now use the same formatting as the rest of the harness debug trace. Previously, hook invocation messages used ad-hoc <code>debug:</code> lines, which made debug output inconsistent.</p>
]]></content>
        <category label="Tenzir Test"/>
        <published>2026-05-05T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tenzir Ship v1.7.3]]></title>
        <id>https://docs.tenzir.com/changelog/tenzir-ship/v1-7-3</id>
        <link href="https://docs.tenzir.com/changelog/tenzir-ship/v1-7-3"/>
        <updated>2026-05-04T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This release tightens changelog validation so unknown entry metadata keys are reported before they can be ignored by release workflows.]]></summary>
        <content type="html"><![CDATA[<p>This release tightens changelog validation so unknown entry metadata keys are reported before they can be ignored by release workflows.</p>

<h2>Bug Fixes</h2>

<h3>Validation for unknown entry metadata keys</h3>
<p><small>May 4, 2026 · <a href="https://github.com/mavam">@mavam</a>, <a href="https://github.com/codex">@codex</a> · <a href="https://github.com/tenzir/ship/pull/23">#23</a></small></p>
<p>The <code>validate</code> command now reports unknown changelog entry metadata keys instead of silently accepting them. This catches misspelled fields such as <code>co-authors</code> early, before they are ignored by release workflows.</p>
]]></content>
        <category label="Tenzir Ship"/>
        <published>2026-05-04T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tenzir Test v1.8.2]]></title>
        <id>https://docs.tenzir.com/changelog/tenzir-test/v1-8-2</id>
        <link href="https://docs.tenzir.com/changelog/tenzir-test/v1-8-2"/>
        <updated>2026-04-29T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This release fixes suite-level requirement checks so they apply consistently across every test runner. Mixed TQL, shell, Python, and custom test suites now evaluate required Tenzir operators independently of runner order.]]></summary>
        <content type="html"><![CDATA[<p>This release fixes suite-level requirement checks so they apply consistently across every test runner. Mixed TQL, shell, Python, and custom test suites now evaluate required Tenzir operators independently of runner order.</p>

<h2>Bug Fixes</h2>

<h3>Runner-independent suite requirements</h3>
<p><small>Apr 29, 2026 · <a href="https://github.com/mavam">@mavam</a>, <a href="https://github.com/codex">@codex</a> · <a href="https://github.com/tenzir/test/pull/39">#39</a></small></p>
<p>Suite-level <code>requires.operators</code> checks now apply consistently to every test runner. Mixed suites that combine TQL, shell, Python, or custom tests no longer depend on the first runner type to decide whether required Tenzir operators are available.</p>
]]></content>
        <category label="Tenzir Test"/>
        <published>2026-04-29T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tenzir Test v1.8.1]]></title>
        <id>https://docs.tenzir.com/changelog/tenzir-test/v1-8-1</id>
        <link href="https://docs.tenzir.com/changelog/tenzir-test/v1-8-1"/>
        <updated>2026-04-29T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This release improves suite fixture failure handling so setup and teardown errors are reported as regular test failures. The harness now continues running independent queued tests instead of aborting with a Python traceback.]]></summary>
        <content type="html"><![CDATA[<p>This release improves suite fixture failure handling so setup and teardown errors are reported as regular test failures. The harness now continues running independent queued tests instead of aborting with a Python traceback.</p>

<h2>Bug Fixes</h2>

<h3>Suite fixture failure reporting</h3>
<p><small>Apr 29, 2026 · <a href="https://github.com/mavam">@mavam</a>, <a href="https://github.com/codex">@codex</a> · <a href="https://github.com/tenzir/test/pull/38">#38</a></small></p>
<p>Suite-scoped fixture setup and teardown failures now appear as regular test failures instead of aborting the entire run with a Python traceback.</p>
<p>This lets the harness continue with independent queued tests after a fixture assertion or cleanup error.</p>
]]></content>
        <category label="Tenzir Test"/>
        <published>2026-04-29T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tenzir Test v1.8.0]]></title>
        <id>https://docs.tenzir.com/changelog/tenzir-test/v1-8-0</id>
        <link href="https://docs.tenzir.com/changelog/tenzir-test/v1-8-0"/>
        <updated>2026-04-28T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This release adds project lifecycle hooks that let projects prepare their environment before tests run. Use hooks to select local Tenzir binaries, configure project-scoped environment variables, and collect diagnostics without custom wrapper scripts.]]></summary>
        <content type="html"><![CDATA[<p>This release adds project lifecycle hooks that let projects prepare their environment before tests run. Use hooks to select local Tenzir binaries, configure project-scoped environment variables, and collect diagnostics without custom wrapper scripts.</p>

<h2>Features</h2>

<h3>Project lifecycle hooks</h3>
<p><small>Apr 27, 2026 · <a href="https://github.com/mavam">@mavam</a>, <a href="https://github.com/codex">@codex</a> · <a href="https://github.com/tenzir/test/pull/36">#36</a></small></p>
<p>Projects can now register Python hooks that run at stable <code>tenzir-test</code> lifecycle points, including before settings discovery:</p>
<pre><code class="language-python">from tenzir_test import hooks

@hooks.startup
def use_local_build(ctx):
    ctx.path.insert(0, str(ctx.root / "build" / "bin"))
    ctx.env["TENZIR_BINARY"] = str(ctx.root / "build" / "bin" / "tenzir")
    ctx.env["TENZIR_NODE_BINARY"] = str(ctx.root / "build" / "bin" / "tenzir-node")
</code></pre>
<p>This makes it possible to select local Tenzir binaries, prepare project-scoped environment variables, and collect diagnostics for failed tests without wrapping the test command in custom shell scripts. Use <code>--no-hooks</code> or <code>TENZIR_TEST_DISABLE_HOOKS=1</code> to bypass hooks when debugging.</p>
]]></content>
        <category label="Tenzir Test"/>
        <published>2026-04-28T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tenzir Test v1.7.7]]></title>
        <id>https://docs.tenzir.com/changelog/tenzir-test/v1-7-7</id>
        <link href="https://docs.tenzir.com/changelog/tenzir-test/v1-7-7"/>
        <updated>2026-04-22T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Tests can now skip only the cases that require an unavailable optional fixture instead of skipping an entire suite. This keeps unrelated tests running and makes parameterized fixture setups more reliable.]]></summary>
        <content type="html"><![CDATA[<p>Tests can now skip only the cases that require an unavailable optional fixture instead of skipping an entire suite. This keeps unrelated tests running and makes parameterized fixture setups more reliable.</p>

<h2>Bug Fixes</h2>

<h3>Per-test fixture-unavailable skips</h3>
<p><small>Apr 22, 2026 · <a href="https://github.com/mavam">@mavam</a>, <a href="https://github.com/codex">@codex</a> · <a href="https://github.com/tenzir/test/pull/35">#35</a></small></p>
<p>The test harness now honors <code>skip: {on: fixture-unavailable}</code> for fixtures that are selected by individual tests:</p>
<pre><code class="language-yaml">skip:
  on: fixture-unavailable
fixtures:
  - optional-service
</code></pre>
<p>This lets parameterized per-test fixtures skip only the tests that need the unavailable service. Suite fixtures still require the opt-in in directory-level <code>test.yaml</code>, so one test's frontmatter cannot control the whole suite.</p>
]]></content>
        <category label="Tenzir Test"/>
        <published>2026-04-22T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tenzir Platform v1.31.0]]></title>
        <id>https://docs.tenzir.com/changelog/platform/v1-31-0</id>
        <link href="https://docs.tenzir.com/changelog/platform/v1-31-0"/>
        <updated>2026-04-21T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This release introduces organizations to the Tenzir Platform, giving teams a shared home for collaborating across workspaces with admin and member roles. Workspace management has also been enhanced with rename support and a unified Users tab for managing access.]]></summary>
        <content type="html"><![CDATA[<p>This release introduces organizations to the Tenzir Platform, giving teams a shared home for collaborating across workspaces with admin and member roles. Workspace management has also been enhanced with rename support and a unified Users tab for managing access.</p>

<h2>Features</h2>

<h3>Workspace management improvements</h3>
<p><small>Apr 21, 2026 · <a href="https://github.com/lava">@lava</a>, <a href="https://github.com/gitryder">@gitryder</a></small></p>
<p>Workspace management has been enhanced with new capabilities for administrators. You can now rename workspaces directly from the workspace settings, and the Users tab now provides a unified interface for managing workspace access. Administrators can view all users with access to a workspace in a single table and easily change user roles between member and admin roles using dropdown controls.</p>

<h3>Organizations</h3>
<p><small>Apr 21, 2026 · <a href="https://github.com/lava">@lava</a>, <a href="https://github.com/gitryder">@gitryder</a></small></p>
<p>The Tenzir Platform now supports organizations, giving teams a shared home for collaborating across workspaces. Organization admins can invite members, assign admin or member roles, and manage which workspaces belong to the organization. Members get access to all workspaces owned by the organization and can leave from their user settings at any time.</p>
<p>Learn more in the <a href="https://docs.tenzir.com/guides/platform-management/manage-organizations/">organization management guide</a>.</p>
]]></content>
        <category label="Tenzir Platform"/>
        <published>2026-04-21T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tenzir Test v1.7.6]]></title>
        <id>https://docs.tenzir.com/changelog/tenzir-test/v1-7-6</id>
        <link href="https://docs.tenzir.com/changelog/tenzir-test/v1-7-6"/>
        <updated>2026-04-16T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This release fixes misleading aggregate test summary percentages in the CLI. Runs with a small number of failures now report non-perfect pass and fail rates, so mixed outcomes no longer appear as `100%` passed and `0%` failed.]]></summary>
        <content type="html"><![CDATA[<p>This release fixes misleading aggregate test summary percentages in the CLI. Runs with a small number of failures now report non-perfect pass and fail rates, so mixed outcomes no longer appear as <code>100%</code> passed and <code>0%</code> failed.</p>

<h2>Bug Fixes</h2>

<h3>Accurate aggregate pass and fail percentages</h3>
<p><small>Apr 16, 2026 · <a href="https://github.com/mavam">@mavam</a>, <a href="https://github.com/codex">@codex</a></small></p>
<p>The final aggregate summary now reports non-perfect pass and fail percentages whenever at least one executed test fails. Previously, rounding could show <code>100%</code> passed and <code>0%</code> failed for runs with a small number of failures, even though the overall result was not a full success.</p>
<p>For example, a run like <code>586 passed / 1 failed / 152 skipped</code> now renders the executed-test percentages as <code>99%</code> passed and <code>1%</code> failed. This makes mixed outcomes easier to spot at a glance in the CLI output.</p>
]]></content>
        <category label="Tenzir Test"/>
        <published>2026-04-16T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tenzir Ship v1.7.2]]></title>
        <id>https://docs.tenzir.com/changelog/tenzir-ship/v1-7-2</id>
        <link href="https://docs.tenzir.com/changelog/tenzir-ship/v1-7-2"/>
        <updated>2026-04-15T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This patch release removes the Node 20 deprecation warning from the reusable release workflow when it generates GitHub App tokens on GitHub-hosted runners. Repositories that call the shared release workflow now get clean release logs without extra configuration.]]></summary>
        <content type="html"><![CDATA[<p>This patch release removes the Node 20 deprecation warning from the reusable release workflow when it generates GitHub App tokens on GitHub-hosted runners. Repositories that call the shared release workflow now get clean release logs without extra configuration.</p>

<h2>Bug Fixes</h2>

<h3>Node 24 GitHub App tokens in reusable workflows</h3>
<p><small>Apr 15, 2026 · <a href="https://github.com/mavam">@mavam</a>, <a href="https://github.com/codex">@codex</a></small></p>
<p>The reusable release workflow no longer emits the Node 20 deprecation warning when it generates GitHub App tokens on GitHub-hosted runners.</p>
<p>Repositories that call <code>tenzir/ship/.github/workflows/release.yaml</code> now get clean release logs without extra configuration.</p>
]]></content>
        <category label="Tenzir Ship"/>
        <published>2026-04-15T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tenzir Ship v1.7.1]]></title>
        <id>https://docs.tenzir.com/changelog/tenzir-ship/v1-7-1</id>
        <link href="https://docs.tenzir.com/changelog/tenzir-ship/v1-7-1"/>
        <updated>2026-04-15T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This release updates locked Python dependencies to patched upstream versions and aligns generated release commits with `v`-prefixed tags. It keeps release publishing, local development, and CI installs on maintained versions without changing normal `tenzir-ship` usage.]]></summary>
        <content type="html"><![CDATA[<p>This release updates locked Python dependencies to patched upstream versions and aligns generated release commits with <code>v</code>-prefixed tags. It keeps release publishing, local development, and CI installs on maintained versions without changing normal <code>tenzir-ship</code> usage.</p>

<h2>Bug Fixes</h2>

<h3>Patched locked Python dependencies</h3>
<p><small>Apr 15, 2026 · <a href="https://github.com/mavam">@mavam</a>, <a href="https://github.com/codex">@codex</a></small></p>
<p>The repository's locked Python dependencies now use patched upstream releases, including fixes for the open security advisories reported by Dependabot.</p>
<p>This refresh keeps local development and CI installs on maintained versions without changing normal <code>tenzir-ship</code> usage.</p>

<h3>Release commit messages matching v tags</h3>
<p><small>Apr 15, 2026 · <a href="https://github.com/mavam">@mavam</a>, <a href="https://github.com/codex">@codex</a></small></p>
<p>The <code>release publish --commit</code> workflow now uses the tag-form version in generated release commits and annotated tag messages.</p>
<p>For example, publishing <code>v1.1.0</code> now creates <code>Release v1.1.0</code> instead of <code>Release 1.1.0</code>:</p>
<pre><code class="language-sh">tenzir-ship release publish v1.1.0 --commit --tag --yes
</code></pre>
<p>This keeps generated release commits aligned with the corresponding Git tag and avoids mismatches in automation that expects the <code>v</code>-prefixed release identifier.</p>
]]></content>
        <category label="Tenzir Ship"/>
        <published>2026-04-15T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tenzir Platform v1.30.3]]></title>
        <id>https://docs.tenzir.com/changelog/platform/v1-30-3</id>
        <link href="https://docs.tenzir.com/changelog/platform/v1-30-3"/>
        <updated>2026-04-09T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This patch release fixes an issue with the container build of the bundled seaweedFS image.]]></summary>
        <content type="html"><![CDATA[<p>This patch release fixes an issue with the container build of the bundled seaweedFS image.</p>
]]></content>
        <category label="Tenzir Platform"/>
        <published>2026-04-09T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tenzir Platform v1.30.2]]></title>
        <id>https://docs.tenzir.com/changelog/platform/v1-30-2</id>
        <link href="https://docs.tenzir.com/changelog/platform/v1-30-2"/>
        <updated>2026-04-09T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This release fixes an issue where the pipeline table stayed filtered after navigating away from a pipeline's detail page. It adds thousands separators to numeric values in the Insights tab for better readability. It also updates dependencies to address security issues.]]></summary>
        <content type="html"><![CDATA[<p>This release fixes an issue where the pipeline table stayed filtered after navigating away from a pipeline's detail page. It adds thousands separators to numeric values in the Insights tab for better readability. It also updates dependencies to address security issues.</p>

<h2>Changes</h2>

<h3>Readable numbers in the Insights tab</h3>
<p><small>Apr 7, 2026 · <a href="https://github.com/gitryder">@gitryder</a></small></p>
<p>We added thousands separators to numeric values in the pipeline Insights tab, making large numbers easier to read at a glance.</p>

<h2>Bug Fixes</h2>

<h3>Fix pipeline table filter not clearing</h3>
<p><small>Apr 7, 2026 · <a href="https://github.com/gitryder">@gitryder</a></small></p>
<p>We fixed an issue where the pipeline table stayed filtered after viewing a pipeline's detail page and navigating away to another tab. Returning to the Pipelines page would show only the previously viewed pipeline, and clearing the search had no effect.</p>
]]></content>
        <category label="Tenzir Platform"/>
        <published>2026-04-09T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tenzir Ship v1.7.0]]></title>
        <id>https://docs.tenzir.com/changelog/tenzir-ship/v1-7-0</id>
        <link href="https://docs.tenzir.com/changelog/tenzir-ship/v1-7-0"/>
        <updated>2026-04-03T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[The reusable release workflow now works out of the box in external repositories without requiring Tenzir-org-specific secrets.]]></summary>
        <content type="html"><![CDATA[<p>The reusable release workflow now works out of the box in external repositories without requiring Tenzir-org-specific secrets.</p>

<h2>Changes</h2>

<h3>Simplify reusable release workflow and decouple Tenzir org secrets</h3>
<p><small>Mar 12, 2026 · <a href="https://github.com/mavam">@mavam</a>, <a href="https://github.com/codex">@codex</a></small></p>
<p>The reusable GitHub Actions release workflow now works in external repositories by default. It falls back to the caller repository's <code>GITHUB_TOKEN</code>, makes GitHub App authentication optional, and only enables GPG signing when a caller provides a signing key and opts into commit and/or tag signing. The single <code>release.yaml</code> workflow now also exposes the advanced hooks and release controls directly, including <code>skip-publish</code> for dry runs and smoke tests. Tenzir repositories can still opt into the existing bot identity, GitHub App token flow, and signed commits and tags by passing those settings explicitly.</p>
]]></content>
        <category label="Tenzir Ship"/>
        <published>2026-04-03T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tenzir Platform v1.30.1]]></title>
        <id>https://docs.tenzir.com/changelog/platform/v1-30-1</id>
        <link href="https://docs.tenzir.com/changelog/platform/v1-30-1"/>
        <updated>2026-04-02T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This release fixes an issue that prevented users from accessing the public Tenzir Platform instance at app.tenzir.com.]]></summary>
        <content type="html"><![CDATA[<p>This release fixes an issue that prevented users from accessing the public Tenzir Platform instance at app.tenzir.com.</p>
]]></content>
        <category label="Tenzir Platform"/>
        <published>2026-04-02T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tenzir Platform v1.30.0]]></title>
        <id>https://docs.tenzir.com/changelog/platform/v1-30-0</id>
        <link href="https://docs.tenzir.com/changelog/platform/v1-30-0"/>
        <updated>2026-04-02T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This release introduces a new Stream view in the Explorer that displays pipeline results as a continuous, expandable event list. It also adds a time range selector, sortable table columns, and copyable inspector values, alongside several bug fixes for package management and the library view.]]></summary>
        <content type="html"><![CDATA[<p>This release introduces a new Stream view in the Explorer that displays pipeline results as a continuous, expandable event list. It also adds a time range selector, sortable table columns, and copyable inspector values, alongside several bug fixes for package management and the library view.</p>

<h2>Features</h2>

<h3>Field selection in the table view</h3>
<p><small>Mar 27, 2026 · <a href="https://github.com/gitryder">@gitryder</a></small></p>
<p>You can now choose which fields are visible in the Explorer's table view. When you select a schema in the sidebar, its fields are listed below. Click a field to hide its column from the table. Shift+click a field to show only that field. A "fields hidden" indicator in the table header lets you clear all hidden fields at once. Field selections are remembered per schema and reset when you run a new pipeline.</p>

<h3>Schema filtering in the Stream view</h3>
<p><small>Mar 26, 2026 · <a href="https://github.com/gitryder">@gitryder</a></small></p>
<p>You can now filter events in the Stream view by clicking schemas in the sidebar. The schemas panel shows color-coded dots matching each schema's badge color, and selecting one or more schemas limits the view to only those events. Same-name schema variants are merged into a single entry in the sidebar for easier navigation.</p>

<h3>Stream view in the Explorer</h3>
<p><small>Mar 26, 2026 · <a href="https://github.com/gitryder">@gitryder</a></small></p>
<p>We added a new Stream view to the Explorer that shows all pipeline results as a continuous list of expandable events. You can switch between the Table, Chart, and Stream views using the view selector in the toolbar. The Stream view displays events from all schemas together, with color-coded badges to distinguish between them. Each row shows a one-line preview that you can expand to inspect the full event. The view remembers your selection across pipeline runs, and the event list scrolls horizontally as a whole, with schema badges staying pinned on the left.</p>

<h3>Sortable columns in the Explorer table</h3>
<p><small>Mar 13, 2026 · <a href="https://github.com/gitryder">@gitryder</a></small></p>
<p>You can now sort the Explorer table by clicking column headers. Sortable columns show a sort indicator, and clicking cycles through ascending, descending, and unsorted states. Sorting works for both top-level and nested fields.</p>

<h3>Copyable field names and values in the inspector</h3>
<p><small>Mar 12, 2026 · <a href="https://github.com/gitryder">@gitryder</a></small></p>
<p>You can now click on field names and values in the Explorer inspector to copy them to the clipboard. Field names copy the full dot-separated path, and values copy their TQL representation.</p>

<h3>Time range selector in the Explorer</h3>
<p><small>Mar 12, 2026 · <a href="https://github.com/gitryder">@gitryder</a></small></p>
<p>You can now select a time range directly from the Explorer header. Choose from quick presets like 5 minutes or 12 hours, or open the custom popover to pick from a grid of relative durations or set an absolute date range. The selector is currently available for pipelines that start with the <code>export</code> operator.</p>

<h2>Changes</h2>

<h3>Unified package detail view in the library</h3>
<p><small>Mar 12, 2026 · <a href="https://github.com/gitryder">@gitryder</a></small></p>
<p>We combined the 'About' and 'Install' tabs in the package detail drawer into a single scrollable view. Package information, examples, and configuration options are now shown on one page instead of requiring tab switches.</p>

<h2>Bug Fixes</h2>

<h3>Show custom packages in the library view</h3>
<p><small>Mar 24, 2026 · <a href="https://github.com/gitryder">@gitryder</a></small></p>
<p>We fixed an issue where custom packages installed on a node were not visible in the library view. Previously, only packages from the official Tenzir library were shown. Custom packages are now included alongside library packages.</p>

<h3>Fix rotated text in package detail accordion</h3>
<p><small>Mar 24, 2026 · <a href="https://github.com/gitryder">@gitryder</a></small></p>
<p>We fixed a bug where operator description text on the package detail page appeared rotated 90 degrees, overlapping other content.</p>

<h3>Package installs for packages with user-defined operators</h3>
<p><small>Mar 17, 2026 · <a href="https://github.com/gitryder">@gitryder</a></small></p>
<p>Packages containing user-defined operators can again be installed through the
platform. Previously, installing such packages failed because the operator
arguments were serialized incorrectly. This only affected installs through the
platform UI—command-line package installs were not impacted.</p>
]]></content>
        <category label="Tenzir Platform"/>
        <published>2026-04-02T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tenzir Ship v1.6.1]]></title>
        <id>https://docs.tenzir.com/changelog/tenzir-ship/v1-6-1</id>
        <link href="https://docs.tenzir.com/changelog/tenzir-ship/v1-6-1"/>
        <updated>2026-03-20T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This release fixes the release candidate workflow so that superseded release candidates are properly removed from changelog history after promotion to a stable release.]]></summary>
        <content type="html"><![CDATA[<p>This release fixes the release candidate workflow so that superseded release candidates are properly removed from changelog history after promotion to a stable release.</p>

<h2>Bug Fixes</h2>

<h3>Release candidate cleanup after promotion</h3>
<p><small>Mar 20, 2026 · <a href="https://github.com/mavam">@mavam</a>, <a href="https://github.com/codex">@codex</a> · <a href="https://github.com/tenzir/ship/pull/20">#20</a></small></p>
<p>This fixes the release candidate workflow so RCs no longer remain in changelog history after they have been superseded. Creating a new <code>-rc.N</code> now replaces the previous RC for that cycle, and creating a stable release closes the RC cycle and removes its RC manifests from <code>releases/</code>.</p>
<p>For example:</p>
<pre><code class="language-sh"># Start an RC cycle for a later stable release.
tenzir-ship release create v1.2.3 --rc --yes
tenzir-ship release create v1.3.0 --yes

# Or promote the active RC to its matching stable release.
tenzir-ship release create v1.2.3 --rc --yes
tenzir-ship release create --yes
</code></pre>
<p>After the stable release is created, the RC is no longer kept in release history. Release candidates are also cumulative, so each new RC includes the previous RC's entries plus any newly added unreleased entries, while stable releases remain incremental.</p>
]]></content>
        <category label="Tenzir Ship"/>
        <published>2026-03-20T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tenzir Ship v1.6.0]]></title>
        <id>https://docs.tenzir.com/changelog/tenzir-ship/v1-6-0</id>
        <link href="https://docs.tenzir.com/changelog/tenzir-ship/v1-6-0"/>
        <updated>2026-03-19T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[tenzir-ship now supports release candidates via release create --rc, letting you iterate on -rc.N builds before promoting one to the final stable release. The new flag works across both the CLI and the bundled GitHub Actions workflows.]]></summary>
        <content type="html"><![CDATA[<p>tenzir-ship now supports release candidates via release create --rc, letting you iterate on -rc.N builds before promoting one to the final stable release. The new flag works across both the CLI and the bundled GitHub Actions workflows.</p>

<h2>Features</h2>

<h3>Release candidate workflow</h3>
<p><small>Mar 12, 2026 · <a href="https://github.com/mavam">@mavam</a>, <a href="https://github.com/codex">@codex</a></small></p>
<p><code>tenzir-ship</code> now supports release candidates via <code>release create --rc</code>. Creating a release candidate snapshots the current unreleased entries without consuming them, so you can iterate on <code>-rc.N</code> releases before promoting one to the final stable release. The stable base is inferred automatically, and rerunning the command continues the matching RC series when one already exists.</p>
<p>When you are ready to ship the stable release, rerun <code>tenzir-ship release create</code> without <code>--rc</code> and the latest outstanding release candidate becomes the matching stable release automatically. Once an RC series exists, you either continue it with <code>release create --rc</code> or promote the latest candidate with the normal stable command.</p>
<p>Publishing a release candidate now automatically creates a GitHub prerelease and prevents it from being marked as latest. <code>release version</code> and <code>show latest</code> continue to resolve the latest stable release, while <code>release publish</code> without an explicit version now targets the latest release manifest, including RCs. The bundled GitHub Actions release workflows accept <code>rc</code> so you can keep creating RCs from CI, and the default stable workflow promotes the latest outstanding candidate automatically.</p>
]]></content>
        <category label="Tenzir Ship"/>
        <published>2026-03-19T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tenzir Test v1.7.5]]></title>
        <id>https://docs.tenzir.com/changelog/tenzir-test/v1-7-5</id>
        <link href="https://docs.tenzir.com/changelog/tenzir-test/v1-7-5"/>
        <updated>2026-03-13T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This release establishes the correct v1.7.5 version tag. A double-bump bug in the release automation caused the v1.7.4 git tag to point to a commit where pyproject.toml already read 1.7.5, so 1.7.4 was never published to PyPI and the git tag was misaligned with the actual package version. The automation has been fixed by removing a redundant post-create version bump that became a double-bump once tenzir-ship v1.3.0 added automatic version-file updates.]]></summary>
        <content type="html"><![CDATA[<p>This release establishes the correct v1.7.5 version tag. A double-bump bug in the release automation caused the v1.7.4 git tag to point to a commit where pyproject.toml already read 1.7.5, so 1.7.4 was never published to PyPI and the git tag was misaligned with the actual package version. The automation has been fixed by removing a redundant post-create version bump that became a double-bump once tenzir-ship v1.3.0 added automatic version-file updates.</p>
]]></content>
        <category label="Tenzir Test"/>
        <published>2026-03-13T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tenzir Platform v1.29.2]]></title>
        <id>https://docs.tenzir.com/changelog/platform/v1-29-2</id>
        <link href="https://docs.tenzir.com/changelog/platform/v1-29-2"/>
        <updated>2026-03-12T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This release upgrades dependencies to address known security vulnerabilities and fixes an issue where the Insights tab selection could get stuck in an invalid state.]]></summary>
        <content type="html"><![CDATA[<p>This release upgrades dependencies to address known security vulnerabilities and fixes an issue where the Insights tab selection could get stuck in an invalid state.</p>

<h2>Bug Fixes</h2>

<h3>Upgrade dependencies to fix known vulnerabilities</h3>
<p><small>Mar 12, 2026 · <a href="https://github.com/lava">@lava</a></small></p>
<p>We upgraded Python dependencies and added system-level package upgrades to the Docker images to address known vulnerabilities.</p>

<h3>Fix Insights tab guard not resetting tab selection</h3>
<p><small>Mar 11, 2026 · <a href="https://github.com/realllydan">@realllydan</a></small></p>
<p>We fixed an issue where switching away from a pipeline that has the Insights tab available to one that does not could leave the tab selection in an invalid state.</p>
]]></content>
        <category label="Tenzir Platform"/>
        <published>2026-03-12T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tenzir Ship v1.5.0]]></title>
        <id>https://docs.tenzir.com/changelog/tenzir-ship/v1-5-0</id>
        <link href="https://docs.tenzir.com/changelog/tenzir-ship/v1-5-0"/>
        <updated>2026-03-12T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Release commands now handle mixed version formats consistently, making changelog automation more robust. The bundled GitHub Actions workflows are updated to Node 24-compatible action versions, keeping CI aligned with GitHub's runtime transition.]]></summary>
        <content type="html"><![CDATA[<p>Release commands now handle mixed version formats consistently, making changelog automation more robust. The bundled GitHub Actions workflows are updated to Node 24-compatible action versions, keeping CI aligned with GitHub's runtime transition.</p>

<h2>Changes</h2>

<h3>Node 24-ready GitHub Actions workflows</h3>
<p><small>Mar 11, 2026 · <a href="https://github.com/mavam">@mavam</a>, <a href="https://github.com/pi">@pi</a></small></p>
<p>The bundled GitHub Actions workflows now use Node 24-compatible action versions, which keeps CI, release, and publishing automation aligned with GitHub's runtime transition. The release and sync workflows also mint GitHub App installation tokens without relying on a deprecated JavaScript action.</p>

<h2>Bug Fixes</h2>

<h3>More robust release version normalization</h3>
<p><small>Mar 11, 2026 · <a href="https://github.com/mavam">@mavam</a>, <a href="https://github.com/pi">@pi</a></small></p>
<p>Release commands and the Python API now handle release versions more consistently when changelog data mixes tag-style versions such as <code>v1.2.3</code> with bare semantic versions such as <code>1.2.3</code>. This improves compatibility with existing changelog histories and makes release automation more reliable across commands that inspect, create, show, and publish releases.</p>
]]></content>
        <category label="Tenzir Ship"/>
        <published>2026-03-12T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tenzir Test v1.7.4]]></title>
        <id>https://docs.tenzir.com/changelog/tenzir-test/v1-7-4</id>
        <link href="https://docs.tenzir.com/changelog/tenzir-test/v1-7-4"/>
        <updated>2026-03-11T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This release fixes how skipped tests interact with baseline files. Existing baselines now stay untouched when you skip tests, which prevents unrelated baseline churn and avoids false failures when you toggle skip conditions.]]></summary>
        <content type="html"><![CDATA[<p>This release fixes how skipped tests interact with baseline files. Existing baselines now stay untouched when you skip tests, which prevents unrelated baseline churn and avoids false failures when you toggle skip conditions.</p>

<h2>Bug Fixes</h2>

<h3>Skipped tests preserve existing baseline files</h3>
<p><small>Mar 10, 2026 · <a href="https://github.com/mavam">@mavam</a>, <a href="https://github.com/codex">@codex</a></small></p>
<p>Skipping a test no longer modifies its baseline file. Previously, running
with <code>--update</code> would overwrite the baseline of a skipped test with an empty
file, and running without <code>--update</code> would fail if the baseline was non-empty.
Skipped tests now leave existing baselines untouched, so toggling a skip
condition no longer causes unrelated baseline churn.</p>
]]></content>
        <category label="Tenzir Test"/>
        <published>2026-03-11T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tenzir Ship v1.4.0]]></title>
        <id>https://docs.tenzir.com/changelog/tenzir-ship/v1-4-0</id>
        <link href="https://docs.tenzir.com/changelog/tenzir-ship/v1-4-0"/>
        <updated>2026-03-11T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[The new `init` command scaffolds changelog projects interactively or non-interactively, so you can set up a standalone or package-based project in less time. It also protects existing projects from accidental overwrites.]]></summary>
        <content type="html"><![CDATA[<p>The new <code>init</code> command scaffolds changelog projects interactively or non-interactively, so you can set up a standalone or package-based project in less time. It also protects existing projects from accidental overwrites.</p>

<h2>Features</h2>

<h3>Init command for changelog setup</h3>
<p><small>Mar 11, 2026 · <a href="https://github.com/mavam">@mavam</a>, <a href="https://github.com/pi">@pi</a></small></p>
<p>A new <code>init</code> command allows for scaffolding a new changelog project interactively or with the <code>--yes</code> flag. It supports both standalone and package modes, and prevents accidental overwriting of existing projects.</p>
<pre><code class="language-sh">tenzir-ship init
</code></pre>
<p>This reduces the manual effort required to set up a new changelog.</p>
]]></content>
        <category label="Tenzir Ship"/>
        <published>2026-03-11T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tenzir Platform v1.29.1]]></title>
        <id>https://docs.tenzir.com/changelog/platform/v1-29-1</id>
        <link href="https://docs.tenzir.com/changelog/platform/v1-29-1"/>
        <updated>2026-03-10T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This release fixes an issue where ephemeral nodes were causing the frontend to display a 500 error message or be displayed with incorrect connection status.]]></summary>
        <content type="html"><![CDATA[<p>This release fixes an issue where ephemeral nodes were causing the frontend to display a 500 error message or be displayed with incorrect connection status.</p>

<h2>Features</h2>

<h3>Add PRIVATE_WEBSOCKET_GATEWAY_ENDPOINT environment variable</h3>
<p><small>Mar 10, 2026 · <a href="https://github.com/lava">@lava</a></small></p>
<p>The app container now supports a <code>PRIVATE_WEBSOCKET_GATEWAY_ENDPOINT</code> environment variable that overrides the existing <code>PUBLIC_WEBSOCKET_GATEWAY_ENDPOINT</code> for calls in the app backend. This allows configuring different endpoints when the frontend and backend live in different networks.</p>

<h3>Add experimental Insights tab to pipeline detail view</h3>
<p><small>Mar 10, 2026 · <a href="https://github.com/realllydan">@realllydan</a></small></p>
<p>The pipeline detail modal now includes an experimental Insights tab that visualizes per-operator backpressure, helping users identify bottlenecks in their pipelines. This tab is only available for pipelines running on the experimental new executor.</p>

<h2>Bug Fixes</h2>

<h3>Fix ephemeral nodes not showing correctly in the UI</h3>
<p><small>Mar 10, 2026 · <a href="https://github.com/lava">@lava</a></small></p>
<p>We fixed an issue where ephemeral nodes were causing the frontend to fail to render or be displayed with incorrect connection status.</p>
]]></content>
        <category label="Tenzir Platform"/>
        <published>2026-03-10T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tenzir Platform v1.29.0]]></title>
        <id>https://docs.tenzir.com/changelog/platform/v1-29-0</id>
        <link href="https://docs.tenzir.com/changelog/platform/v1-29-0"/>
        <updated>2026-03-05T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[With this release, the Tenzir Platform preserves deep links through the login flow, so users are redirected to their original destination after signing in. It also includes several bug fixes and a performance improvement for loading across the platform.]]></summary>
        <content type="html"><![CDATA[<p>With this release, the Tenzir Platform preserves deep links through the login flow, so users are redirected to their original destination after signing in. It also includes several bug fixes and a performance improvement for loading across the platform.</p>

<h2>Features</h2>

<h3>Preserve deep links through login flow</h3>
<p><small>Mar 5, 2026 · <a href="https://github.com/lava">@lava</a></small></p>
<p>When you click a deep link in Tenzir Platform but aren't logged in, you're now redirected to your original destination after signing in, instead of landing on the home page.</p>

<h2>Changes</h2>

<h3>Faster loading across the platform</h3>
<p><small>Feb 18, 2026 · <a href="https://github.com/gitryder">@gitryder</a></small></p>
<p>We improved how the nodes list loads, making dependent views feel faster and more responsive across the platform.</p>

<h2>Bug Fixes</h2>

<h3>Fix blocked profile images for some login providers</h3>
<p><small>Feb 27, 2026 · <a href="https://github.com/gitryder">@gitryder</a></small></p>
<p>We fixed an issue where profile images from Gravatar and Microsoft accounts were blocked by the content security policy, causing broken or missing avatars.</p>

<h3>Fix diagnostics showing data from the wrong pipeline</h3>
<p><small>Feb 27, 2026 · <a href="https://github.com/gitryder">@gitryder</a></small></p>
<p>We fixed an issue where the diagnostics pane could show diagnostics from a different pipeline than the one currently open in the detail modal.</p>

<h3>Fix unstable context list order</h3>
<p><small>Feb 18, 2026 · <a href="https://github.com/gitryder">@gitryder</a></small></p>
<p>We fixed an issue where the context list could appear in a random order when no search was active, causing items to jump around. The list now uses a stable alphabetical order so it stays consistent and easier to interact with.</p>

<h3>Fix unintended logout on inaccessible workspace links</h3>
<p><small>Feb 18, 2026 · <a href="https://github.com/gitryder">@gitryder</a></small></p>
<p>We fixed an issue where opening a pipeline link for a workspace you don’t have access to would log you out. You are now redirected to the access page where you can open the link in your default workspace.</p>
]]></content>
        <category label="Tenzir Platform"/>
        <published>2026-03-05T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tenzir Ship v1.3.1]]></title>
        <id>https://docs.tenzir.com/changelog/tenzir-ship/v1-3-1</id>
        <link href="https://docs.tenzir.com/changelog/tenzir-ship/v1-3-1"/>
        <updated>2026-03-04T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This release improves clarity and efficacy of the releasing process in the tenzir-ship agent skill.]]></summary>
        <content type="html"><![CDATA[<p>This release improves clarity and efficacy of the releasing process in the tenzir-ship agent skill.</p>

<h2>Bug Fixes</h2>

<h3>Clarity and efficacy fixes in skill</h3>
<p><small>Mar 4, 2026 · <a href="https://github.com/mavam">@mavam</a>, <a href="https://github.com/claude">@claude</a>, <a href="https://github.com/codex">@codex</a></small></p>
<p>We improved clarity and efficacy of the releasing process in the <code>tenzir-ship</code> agent skill.</p>
]]></content>
        <category label="Tenzir Ship"/>
        <published>2026-03-04T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tenzir Ship v1.3.0]]></title>
        <id>https://docs.tenzir.com/changelog/tenzir-ship/v1-3-0</id>
        <link href="https://docs.tenzir.com/changelog/tenzir-ship/v1-3-0"/>
        <updated>2026-03-02T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This release adds automatic version file updates during release creation and introduces tooling to keep release manifests in sync across package types.]]></summary>
        <content type="html"><![CDATA[<p>This release adds automatic version file updates during release creation and introduces tooling to keep release manifests in sync across package types.</p>

<h2>Features</h2>

<h3>Pi package and skill for release engineering</h3>
<p><small>Mar 1, 2026 · <a href="https://github.com/mavam">@mavam</a>, <a href="https://github.com/claude">@claude</a>, <a href="https://github.com/codex">@codex</a> · <a href="https://github.com/tenzir/ship/pull/11">#11</a></small></p>
<p>The <code>pi-tenzir-ship</code> package provides a skill for AI coding agents to perform
release engineering tasks. Install it in Pi with:</p>
<pre><code class="language-sh">pi install npm:pi-tenzir-ship
</code></pre>
<p>Then activate it with <code>/skill:tenzir-ship</code>.</p>
<p>The skill covers adding changelog entries, cutting standard and module releases,
triggering GitHub Actions release workflows, and publishing releases to GitHub.</p>

<h3>Automatic version file updates during release creation</h3>
<p><small>Feb 28, 2026 · <a href="https://github.com/mavam">@mavam</a>, <a href="https://github.com/codex">@codex</a> · <a href="https://github.com/tenzir/ship/pull/10">#10</a></small></p>
<p>The release creation command now automatically updates version fields in package manifest files during release. When creating a release, <code>tenzir-ship</code> detects and updates <code>package.json</code>, <code>pyproject.toml</code>, <code>project.toml</code>, and <code>Cargo.toml</code> files in your project, including support for dynamic version files in monorepo workspaces.</p>
<p>You can control this behavior with the <code>release.version_bump_mode</code> configuration option in your <code>config.yaml</code>:</p>
<ul>
<li><code>auto</code> (default): Automatically detect and update version files</li>
<li><code>off</code>: Skip version file updates</li>
</ul>
<p>For more granular control, use the <code>release.version_files</code> option to explicitly specify which files to update. Auto-detection searches the project root and parent directory (for nested changelog projects) and gracefully skips files without static version fields.</p>
<p>Release version selection now defaults to automatic bumping when you run
<code>release create</code> without an explicit version and without <code>--patch</code>, <code>--minor</code>,
or <code>--major</code>. The next version is inferred from unreleased entry types:</p>
<ul>
<li>bugfix -> patch</li>
<li>feature or change -> minor</li>
<li>breaking -> major</li>
</ul>
<p>If no unreleased changelog entries exist, automatic bumping is not available.
In that case, provide an explicit version or a manual bump flag to create an
intro-only release.</p>
<p>The <code>stats</code> command now reports the computed next release version (or no value
when no automatic bump can be inferred), including in <code>stats --json</code>.</p>
]]></content>
        <category label="Tenzir Ship"/>
        <published>2026-03-02T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tenzir Ship v1.2.0]]></title>
        <id>https://docs.tenzir.com/changelog/tenzir-ship/v1-2-0</id>
        <link href="https://docs.tenzir.com/changelog/tenzir-ship/v1-2-0"/>
        <updated>2026-02-28T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This release adds support for creating releases with only introductory text and no changelog entries, and splits the reusable release workflow into minimal and advanced variants. It also fixes changelog structure validation and release progress panel display issues.]]></summary>
        <content type="html"><![CDATA[<p>This release adds support for creating releases with only introductory text and no changelog entries, and splits the reusable release workflow into minimal and advanced variants. It also fixes changelog structure validation and release progress panel display issues.</p>

<h2>Features</h2>

<h3>Allow intro-only releases</h3>
<p><small>Feb 28, 2026 · <a href="https://github.com/mavam">@mavam</a>, <a href="https://github.com/codex">@codex</a> · <a href="https://github.com/tenzir/ship/pull/9">#9</a></small></p>
<p>Create releases with only introductory text and no changelog entries by using the <code>--intro</code> or <code>--intro-file</code> flags with <code>release create</code>. This is useful when re-publishing a package after yanking a previous artifact or retrying a failed publish workflow—scenarios where you want to create a new release version without adding changelog entries.</p>
<p>Previously, you had to provide at least one changelog entry to create a release. Now the release creation allows you to skip the entries entirely if you supply intro text. The <code>--intro</code> flag accepts text directly, while <code>--intro-file</code> reads from a Markdown file.</p>

<h3>Split reusable release workflow into minimal and advanced variants</h3>
<p><small>Feb 16, 2026 · <a href="https://github.com/mavam">@mavam</a>, <a href="https://github.com/codex">@codex</a></small></p>
<p><code>reusable-release.yaml</code> now acts as a minimal opinionated wrapper around a new
<code>reusable-release-advanced.yaml</code> workflow.</p>
<p>The advanced workflow adds optional hooks and release controls for complex
consumers: pre/post publish scripts, non-main <code>--no-latest</code> publishing,
optional copy of release directories to <code>main</code>, <code>latest</code> branch updates, a
<code>skip-publish</code> dry-run mode, and workflow outputs for <code>version</code> and
<code>is_latest</code>.</p>

<h2>Bug Fixes</h2>

<h3>Enforce changelog structure for releases and command warnings</h3>
<p><small>Feb 28, 2026 · <a href="https://github.com/mavam">@mavam</a>, <a href="https://github.com/codex">@codex</a></small></p>
<p>Release commands now validate changelog directory structure before they run and fail fast when it is invalid.</p>
<p><code>release create</code> and <code>release publish</code> now stop with explicit errors when stray files or directories are detected (for example, an unexpected <code>changelog/next/</code> directory). Other commands (<code>show</code>, <code>add</code>, <code>stats</code>, and <code>release version</code>) emit warnings so layout problems are visible earlier, while <code>validate</code> reports full structural issues as regular validation errors.</p>

<h3>Fix release progress panel truncating failed commands</h3>
<p><small>Feb 15, 2026 · <a href="https://github.com/mavam">@mavam</a>, <a href="https://github.com/claude">@claude</a> · <a href="https://github.com/tenzir/ship/pull/7">#7</a></small></p>
<p>When a release step fails, the full command now prints below the progress panel so you can copy-paste it for manual recovery.</p>
<p>Previously, long commands would get truncated in the release progress panel, making it difficult to reproduce the failure manually. Now when a step fails, the complete command is displayed in full below the panel, giving you what you need to debug and retry the operation.</p>
]]></content>
        <category label="Tenzir Ship"/>
        <published>2026-02-28T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tenzir Test v1.7.3]]></title>
        <id>https://docs.tenzir.com/changelog/tenzir-test/v1-7-3</id>
        <link href="https://docs.tenzir.com/changelog/tenzir-test/v1-7-3"/>
        <updated>2026-02-27T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This release improves parallel suite scheduling reliability and adds correctness guards via suite.min_jobs in test.yaml.]]></summary>
        <content type="html"><![CDATA[<p>This release improves parallel suite scheduling reliability and adds correctness guards via suite.min_jobs in test.yaml.</p>

<h2>Bug Fixes</h2>

<h3>Improve parallel suite scheduling and correctness checks</h3>
<p><small>Feb 26, 2026 · <a href="https://github.com/mavam">@mavam</a>, <a href="https://github.com/codex">@codex</a></small></p>
<p>Parallel suites are now scheduled more reliably when running with <code>--jobs > 1</code>, so interdependent tests (for example publisher/subscriber pairs) start together sooner instead of being delayed behind large backlogs of unrelated tests.</p>
<p>This update also adds an explicit correctness guard for parallel suites: you can set <code>suite.min_jobs</code> in <code>test.yaml</code> to declare the minimum job count required for valid execution. The run now fails fast if <code>--jobs</code> is lower than <code>suite.min_jobs</code>, and it also fails hard when a parallel suite cannot reserve at least <code>min_jobs</code> workers at runtime (for example under slot contention), instead of proceeding under-provisioned.</p>
<p>In addition, the harness now warns when a parallel suite has more tests than available jobs, making it easier to spot cases where effective suite parallelism is capped by worker count.</p>
]]></content>
        <category label="Tenzir Test"/>
        <published>2026-02-27T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tenzir Test v1.7.2]]></title>
        <id>https://docs.tenzir.com/changelog/tenzir-test/v1-7-2</id>
        <link href="https://docs.tenzir.com/changelog/tenzir-test/v1-7-2"/>
        <updated>2026-02-25T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This release fixes enum serialization errors when Python fixture tests use configuration values like mode: sequential in test.yaml.]]></summary>
        <content type="html"><![CDATA[<p>This release fixes enum serialization errors when Python fixture tests use configuration values like mode: sequential in test.yaml.</p>

<h2>Bug Fixes</h2>

<h3>Enum serialization in Python fixture config</h3>
<p><small>Feb 25, 2026 · <a href="https://github.com/mavam">@mavam</a>, <a href="https://github.com/codex">@codex</a> · <a href="https://github.com/tenzir/test/pull/32">#32</a></small></p>
<p>Python fixture tests could fail with serialization errors when the test
configuration included enum values like <code>mode: sequential</code> in <code>test.yaml</code>.
These values are now properly converted to strings before being passed to
test scripts.</p>
]]></content>
        <category label="Tenzir Test"/>
        <published>2026-02-25T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tenzir Test v1.7.1]]></title>
        <id>https://docs.tenzir.com/changelog/tenzir-test/v1-7-1</id>
        <link href="https://docs.tenzir.com/changelog/tenzir-test/v1-7-1"/>
        <updated>2026-02-25T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This release adds parallel suite execution and fixes several bugs, including clean Ctrl+C handling, consistent default fixture options, and reliable shell runner defaults for .sh test files.]]></summary>
        <content type="html"><![CDATA[<p>This release adds parallel suite execution and fixes several bugs, including clean Ctrl+C handling, consistent default fixture options, and reliable shell runner defaults for .sh test files.</p>

<h2>Features</h2>

<h3>Parallel suite execution</h3>
<p><small>Feb 24, 2026 · <a href="https://github.com/mavam">@mavam</a>, <a href="https://github.com/codex">@codex</a> · <a href="https://github.com/tenzir/test/pull/29">#29</a></small></p>
<p>Test suites can now execute their members in parallel by specifying <code>mode: parallel</code> in the suite configuration. By default, suites continue to run tests sequentially for stability and predictability.</p>
<p>To enable parallel execution, set <code>mode: parallel</code> in the <code>test.yaml</code> file alongside the <code>suite</code> configuration:</p>
<pre><code class="language-yaml">suite:
  name: my-suite
  mode: parallel
fixtures:
  - node
</code></pre>
<p>Parallel suite execution is useful when tests within a suite are independent and can safely run concurrently. All suite members share the same fixtures and execute within the same fixture lifecycle, while test execution itself happens on separate threads. The suite thread pool is bounded by <code>--jobs</code>, so suite-level concurrency stays within the configured worker budget and does not scale unbounded with suite size.</p>
<p>Suite-level constraints like timeouts, fixture requirements, and capability checks still apply uniformly across all members, whether running sequentially or in parallel.</p>

<h2>Bug Fixes</h2>

<h3>Avoid Python backtraces on Ctrl+C interrupts</h3>
<p><small>Feb 25, 2026 · <a href="https://github.com/mavam">@mavam</a>, <a href="https://github.com/codex">@codex</a> · <a href="https://github.com/tenzir/test/pull/31">#31</a></small></p>
<p>Interrupting test runs with Ctrl+C now exits cleanly without leaking Python tracebacks from subprocess or fixture startup/teardown paths. Interrupt-shaped errors (including nested causes with signal-style return codes such as 130) are treated as graceful cancellation so the CLI reports interrupted tests instead of crashing.</p>

<h3>Shell test files default to shell runner</h3>
<p><small>Feb 24, 2026 · <a href="https://github.com/mavam">@mavam</a>, <a href="https://github.com/codex">@codex</a> · <a href="https://github.com/tenzir/test/pull/30">#30</a></small></p>
<p>Shell test files (<code>.sh</code>) now always default to the "shell" runner, even when a directory-level <code>test.yaml</code> file specifies a different runner (for example, <code>runner: tenzir</code>). This makes shell scripts work reliably in mixed-runner directories without requiring explicit <code>runner:</code> frontmatter in each file. Explicit <code>runner:</code> declarations in test file frontmatter still take precedence and can override this behavior if needed.</p>

<h3>Fix default fixture options in manual fixture control</h3>
<p><small>Feb 24, 2026 · <a href="https://github.com/mavam">@mavam</a>, <a href="https://github.com/codex">@codex</a></small></p>
<p>Manual fixture control now behaves consistently for fixtures that declare dataclass
options.</p>
<p>Previously, starting a fixture with <code>acquire_fixture(...)</code> could fail when no
explicit options were provided, even if the fixture defined defaults.</p>
<p>With this fix, <code>current_options(...)</code> returns default typed options in the
manual fixture-control path, so fixtures started manually and fixtures started
through normal test activation behave the same way.</p>
]]></content>
        <category label="Tenzir Test"/>
        <published>2026-02-25T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tenzir Platform v1.28.3]]></title>
        <id>https://docs.tenzir.com/changelog/platform/v1-28-3</id>
        <link href="https://docs.tenzir.com/changelog/platform/v1-28-3"/>
        <updated>2026-02-24T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This release improves the clarity and usability of Explorer charts with better legends, tooltips, and an expanded color palette. It also fixes several UI bugs including unresponsive pipeline lists and stale workspace cleanup.]]></summary>
        <content type="html"><![CDATA[<p>This release improves the clarity and usability of Explorer charts with better legends, tooltips, and an expanded color palette. It also fixes several UI bugs including unresponsive pipeline lists and stale workspace cleanup.</p>

<h2>Changes</h2>

<h3>Improved Chart Legends, Tooltips, and Colors</h3>
<p><small>Feb 18, 2026 · <a href="https://github.com/gitryder">@gitryder</a></small></p>
<p>We improved the clarity and usability of Explorer charts. Legends are now collapsible, easier to read, and support filtering series directly. Pie chart legends adapt better to available space, and tooltips provide clearer information.</p>
<p>We also expanded the chart color palette for better visual distinction between series, fixed bar chart x-axis labels overlapping when there are many data points, and refined chart layout and behavior for a smoother overall experience.</p>

<h2>Bug Fixes</h2>

<h3>Fix workspace switcher not displaying Google profile pictures</h3>
<p><small>Feb 18, 2026 · <a href="https://github.com/gitryder">@gitryder</a></small></p>
<p>Resolved an issue where your Google profile picture did not appear in the workspace switcher. The image now loads and displays correctly.</p>

<h3>Fix stale loop variables in static workspace cleanup</h3>
<p><small>Feb 17, 2026 · <a href="https://github.com/lava">@lava</a></small></p>
<p>Fixed a bug where the static workspace synchronization used stale loop
variables during cleanup, causing stale workspaces to persist and the last
configured workspace to be incorrectly deleted.</p>

<h3>Fix pipeline list not responding after pressing ESC</h3>
<p><small>Feb 17, 2026 · <a href="https://github.com/gitryder">@gitryder</a></small></p>
<p>We fixed an issue where pressing ESC to close a pipeline detail view caused the pipeline list to stop responding to clicks.</p>
]]></content>
        <category label="Tenzir Platform"/>
        <published>2026-02-24T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tenzir Test v1.7.0]]></title>
        <id>https://docs.tenzir.com/changelog/tenzir-test/v1-7-0</id>
        <link href="https://docs.tenzir.com/changelog/tenzir-test/v1-7-0"/>
        <updated>2026-02-22T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This release adds suite-level capability requirements, letting test suites declare required operators and skip gracefully when those capabilities are unavailable in the target build.]]></summary>
        <content type="html"><![CDATA[<p>This release adds suite-level capability requirements, letting test suites declare required operators and skip gracefully when those capabilities are unavailable in the target build.</p>

<h2>Features</h2>

<h3>Suite-level capability requirements and conditional skipping</h3>
<p><small>Feb 22, 2026 · <a href="https://github.com/mavam">@mavam</a>, <a href="https://github.com/codex">@codex</a> · <a href="https://github.com/tenzir/test/pull/28">#28</a></small></p>
<p>Test suites can now declare operator dependencies with a <code>requires</code> configuration key in <code>test.yaml</code>. When a required operator is unavailable in the target Tenzir build, you can gracefully skip the suite by pairing <code>requires</code> with <code>skip: {on: capability-unavailable}</code>.</p>
<p>The <code>skip.on</code> key now accepts either a single condition as a string or a list of conditions, letting you skip on either <code>fixture-unavailable</code> or <code>capability-unavailable</code> (or both). When a capability is unavailable and the suite doesn't opt into skipping, the test run fails with a clear error message listing the missing operators.</p>
<p>Example configuration in <code>test.yaml</code>:</p>
<pre><code class="language-yaml">requires:
  operators: [from_gcs, to_s3]
skip:
  on: capability-unavailable
  reason: requires from_gcs and to_s3 operators
</code></pre>
<p>This ensures test suites targeting specific capabilities only run when those capabilities are present, improving test reliability in heterogeneous build environments.</p>
]]></content>
        <category label="Tenzir Test"/>
        <published>2026-02-22T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tenzir Test v1.6.0]]></title>
        <id>https://docs.tenzir.com/changelog/tenzir-test/v1-6-0</id>
        <link href="https://docs.tenzir.com/changelog/tenzir-test/v1-6-0"/>
        <updated>2026-02-19T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This release adds fixture assertion hooks that enable post-test validation of side effects while fixtures remain active. Assertion results are tracked separately in the run summary.]]></summary>
        <content type="html"><![CDATA[<p>This release adds fixture assertion hooks that enable post-test validation of side effects while fixtures remain active. Assertion results are tracked separately in the run summary.</p>

<h2>Features</h2>

<h3>Fixture assertion hooks for post-test validation</h3>
<p><small>Feb 18, 2026 · <a href="https://github.com/mavam">@mavam</a>, <a href="https://github.com/codex">@codex</a> · <a href="https://github.com/tenzir/test/pull/27">#27</a></small></p>
<p>Fixtures can now define assertion hooks that run after test execution completes while fixtures remain active. Define assertions using the <code>assertions</code> parameter with a frozen dataclass type, then pass fixture-specific assertion payloads under <code>assertions.fixtures.&#x3C;name></code> in test frontmatter. The framework automatically invokes the <code>assert_test</code> hook with assertion data before tearing down fixtures, letting you validate side effects like HTTP requests or log output.</p>
<p>Example usage with an HTTP fixture:</p>
<pre><code class="language-yaml">fixtures: [http]
assertions:
  fixtures:
    http:
      count: 1
      method: POST
      path: /api/endpoint
      body: '{"key":"value"}'
</code></pre>
<p>The HTTP fixture receives the typed assertion payload and validates that the expected request was received. Payload structure is fixture-defined, so fixtures can choose flat fields or nested schemas as needed.</p>
<p>Assertion checks are tracked separately from test counts in the run summary as pass/fail check metrics, so fixture-level validations are visible without changing total test counts.</p>
]]></content>
        <category label="Tenzir Test"/>
        <published>2026-02-19T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tenzir Platform v1.28.2]]></title>
        <id>https://docs.tenzir.com/changelog/platform/v1-28-2</id>
        <link href="https://docs.tenzir.com/changelog/platform/v1-28-2"/>
        <updated>2026-02-17T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This release brings the Platform's dependencies up to date with the latest CVE fixes.]]></summary>
        <content type="html"><![CDATA[<p>This release brings the Platform's dependencies up to date with the latest CVE fixes.</p>

<h2>Bug Fixes</h2>

<h3>Patch security vulnerabilities</h3>
<p><small>Feb 17, 2026 · <a href="https://github.com/gitryder">@gitryder</a></small></p>
<p>We updated the Platform's underlying framework dependencies to include their latest security fixes.</p>
]]></content>
        <category label="Tenzir Platform"/>
        <published>2026-02-17T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tenzir Test v1.5.1]]></title>
        <id>https://docs.tenzir.com/changelog/tenzir-test/v1-5-1</id>
        <link href="https://docs.tenzir.com/changelog/tenzir-test/v1-5-1"/>
        <updated>2026-02-16T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This release improves error handling by showing clean messages for unavailable fixtures and avoids unnecessary fixture initialization for fully skipped test suites.]]></summary>
        <content type="html"><![CDATA[<p>This release improves error handling by showing clean messages for unavailable fixtures and avoids unnecessary fixture initialization for fully skipped test suites.</p>

<h2>Bug Fixes</h2>

<h3>Skip fixture initialization for suites with all static skips</h3>
<p><small>Feb 16, 2026 · <a href="https://github.com/mavam">@mavam</a>, <a href="https://github.com/codex">@codex</a> · <a href="https://github.com/tenzir/test/pull/26">#26</a></small></p>
<p>The test harness no longer initializes fixtures for suites where all tests are statically skipped. Previously, fixtures were activated even when no tests would run, causing unnecessary startup overhead and potential errors.</p>

<h3>Clean error messages for unavailable fixtures</h3>
<p><small>Feb 16, 2026 · <a href="https://github.com/mavam">@mavam</a>, <a href="https://github.com/codex">@codex</a> · <a href="https://github.com/tenzir/test/pull/25">#25</a></small></p>
<p>When a fixture becomes unavailable during test execution, the test harness now provides a clean error message instead of a Python traceback.</p>
]]></content>
        <category label="Tenzir Test"/>
        <published>2026-02-16T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tenzir Test v1.5.0]]></title>
        <id>https://docs.tenzir.com/changelog/tenzir-test/v1-5-0</id>
        <link href="https://docs.tenzir.com/changelog/tenzir-test/v1-5-0"/>
        <updated>2026-02-16T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This release adds fine-grained controls for running skipped tests, including a new --run-skipped-reason flag with substring and glob matching semantics.]]></summary>
        <content type="html"><![CDATA[<p>This release adds fine-grained controls for running skipped tests, including a new --run-skipped-reason flag with substring and glob matching semantics.</p>

<h2>Features</h2>

<h3>Add fine-grained run-skipped selectors</h3>
<p><small>Feb 15, 2026 · <a href="https://github.com/mavam">@mavam</a>, <a href="https://github.com/codex">@codex</a> · <a href="https://github.com/tenzir/test/pull/23">#23</a>, <a href="https://github.com/tenzir/test/pull/24">#24</a></small></p>
<p><code>tenzir-test</code> now supports both coarse and fine-grained controls for running skipped tests.</p>
<p>Use <code>--run-skipped</code> as a sledgehammer, or <code>--run-skipped-reason</code> with the same matching semantics as <code>--match</code> (bare substring or glob):</p>
<pre><code class="language-sh">tenzir-test --run-skipped
tenzir-test --run-skipped-reason 'maintenance'
tenzir-test --run-skipped-reason '*docker*'
</code></pre>
<p>If both options are provided, <code>--run-skipped</code> takes precedence.</p>
]]></content>
        <category label="Tenzir Test"/>
        <published>2026-02-16T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tenzir Test v1.4.0]]></title>
        <id>https://docs.tenzir.com/changelog/tenzir-test/v1-4-0</id>
        <link href="https://docs.tenzir.com/changelog/tenzir-test/v1-4-0"/>
        <updated>2026-02-15T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This release introduces a standalone fixture mode for starting fixtures without running tests, adds a built-in docker-compose fixture with structured options, and provides shared container runtime helpers for writing custom fixtures.]]></summary>
        <content type="html"><![CDATA[<p>This release introduces a standalone fixture mode for starting fixtures without running tests, adds a built-in docker-compose fixture with structured options, and provides shared container runtime helpers for writing custom fixtures.</p>

<h2>Features</h2>

<h3>Shared container runtime helpers for fixtures</h3>
<p><small>Feb 15, 2026 · <a href="https://github.com/mavam">@mavam</a>, <a href="https://github.com/codex">@codex</a> · <a href="https://github.com/tenzir/test/pull/22">#22</a></small></p>
<p>Writing container-based fixtures no longer requires duplicating boilerplate for
runtime detection, process management, and readiness polling.</p>
<p>The new <code>container_runtime</code> module provides reusable building blocks that handle
the common plumbing: detecting whether Docker or Podman is available, launching
containers in detached mode, polling for service readiness, and tearing down
cleanly. Custom fixtures can import these helpers and focus on their
service-specific logic instead.</p>
<p>The built-in <code>docker-compose</code> fixture and the example project now use these
shared helpers internally.</p>

<h3>Native docker-compose fixture with structured options</h3>
<p><small>Feb 14, 2026 · <a href="https://github.com/mavam">@mavam</a> · <a href="https://github.com/tenzir/test/pull/21">#21</a></small></p>
<p>Adds a built-in <code>docker-compose</code> fixture that starts and tears down Docker Compose services from structured fixture options.</p>
<p>The fixture validates Docker Compose availability, waits for service readiness (health-check first, running-state fallback), and exports deterministic service environment variables (including host-published ports).</p>

<h3>Standalone fixture mode with --fixture CLI option</h3>
<p><small>Feb 14, 2026 · <a href="https://github.com/mavam">@mavam</a>, <a href="https://github.com/claude">@claude</a> · <a href="https://github.com/tenzir/test/pull/20">#20</a></small></p>
<p>You can now start fixtures in foreground mode without running any tests by using the <code>--fixture</code> option. This lets you provision services (like a database or message broker) and use them in your workflow.</p>
<p>Specify fixture names or YAML-style configuration:</p>
<pre><code class="language-sh">uvx tenzir-test --fixture mysql
uvx tenzir-test --fixture 'kafka: {port: 9092}' --debug
</code></pre>
<p>The harness prints fixture-provided environment variables like <code>HOST</code>, <code>PORT</code>, and <code>DATABASE</code>, then keeps services running until you press <code>Ctrl+C</code>. You can repeat <code>--fixture</code> to activate multiple fixtures. The option is mutually exclusive with positional TEST arguments.</p>
]]></content>
        <category label="Tenzir Test"/>
        <published>2026-02-15T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tenzir Test v1.3.2]]></title>
        <id>https://docs.tenzir.com/changelog/tenzir-test/v1-3-2</id>
        <link href="https://docs.tenzir.com/changelog/tenzir-test/v1-3-2"/>
        <updated>2026-02-13T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This release improves the readability of configuration override log messages by using relative paths and human-friendly formatting.]]></summary>
        <content type="html"><![CDATA[<p>This release improves the readability of configuration override log messages by using relative paths and human-friendly formatting.</p>

<h2>Bug Fixes</h2>

<h3>Improved config override log readability</h3>
<p><small>Feb 13, 2026 · <a href="https://github.com/mavam">@mavam</a>, <a href="https://github.com/claude">@claude</a> · <a href="https://github.com/tenzir/test/pull/19">#19</a></small></p>
<p>Configuration override log messages now use relative paths and human-friendly formatting instead of absolute paths and raw Python repr output, making debug output easier to read.</p>
]]></content>
        <category label="Tenzir Test"/>
        <published>2026-02-13T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tenzir Test v1.3.1]]></title>
        <id>https://docs.tenzir.com/changelog/tenzir-test/v1-3-1</id>
        <link href="https://docs.tenzir.com/changelog/tenzir-test/v1-3-1"/>
        <updated>2026-02-11T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This release adds support for nested dataclass hierarchies in fixture options, enabling multi-level structured configurations in test frontmatter.]]></summary>
        <content type="html"><![CDATA[<p>This release adds support for nested dataclass hierarchies in fixture options, enabling multi-level structured configurations in test frontmatter.</p>

<h2>Features</h2>

<h3>Nested dataclass options for fixtures</h3>
<p><small>Feb 11, 2026 · <a href="https://github.com/mavam">@mavam</a>, <a href="https://github.com/claude">@claude</a> · <a href="https://github.com/tenzir/test/pull/18">#18</a></small></p>
<p>Fixture options now support nested dataclass hierarchies, allowing you to structure complex configurations with multiple levels of organization.</p>
<p>Previously, fixture options were limited to flat fields. Now you can declare nested dataclasses as field types, and tests can pass deeply structured options through frontmatter:</p>
<pre><code class="language-yaml">fixtures:
  - node:
      server:
        message:
          greeting: world
</code></pre>
<p>Type safety is preserved across all nesting levels. Optional nested fields (declared with <code>Optional[T]</code> or <code>T | None</code>) are supported, and omitted nested records use their default values. The example server fixture demonstrates this capability with a <code>message.greeting</code> field that flows through to environment variables.</p>
]]></content>
        <category label="Tenzir Test"/>
        <published>2026-02-11T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tenzir Platform v1.28.1]]></title>
        <id>https://docs.tenzir.com/changelog/platform/v1-28-1</id>
        <link href="https://docs.tenzir.com/changelog/platform/v1-28-1"/>
        <updated>2026-02-10T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This release upgrades pnpm to 9.15.0 in the frontend Docker image to address CVE-2024-53866.]]></summary>
        <content type="html"><![CDATA[<p>This release upgrades pnpm to 9.15.0 in the frontend Docker image to address CVE-2024-53866.</p>

<h2>Bug Fixes</h2>

<h3>Security update for pnpm CVE-2024-53866</h3>
<p><small>Feb 10, 2026 · <a href="https://github.com/lava">@lava</a></small></p>
<p>We upgraded pnpm to 9.15.0 in the frontend Docker image to address CVE-2024-53866.</p>
]]></content>
        <category label="Tenzir Platform"/>
        <published>2026-02-10T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tenzir Test v1.3.0]]></title>
        <id>https://docs.tenzir.com/changelog/tenzir-test/v1-3-0</id>
        <link href="https://docs.tenzir.com/changelog/tenzir-test/v1-3-0"/>
        <updated>2026-02-10T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This release adds structured configuration options for fixtures, letting tests
pass typed parameters through YAML frontmatter using frozen dataclasses.]]></summary>
        <content type="html"><![CDATA[<p>This release adds structured configuration options for fixtures, letting tests
pass typed parameters through YAML frontmatter using frozen dataclasses.</p>

<h2>Features</h2>

<h3>Structured options for fixtures</h3>
<p><small>Feb 10, 2026 · <a href="https://github.com/mavam">@mavam</a>, <a href="https://github.com/claude">@claude</a> · <a href="https://github.com/tenzir/test/pull/17">#17</a></small></p>
<p>Fixtures can now receive typed configuration options passed from test YAML files.</p>
<p>Declare options on a fixture with <code>@fixture(options=MyDataclass)</code>, where <code>MyDataclass</code> is a frozen dataclass. Tests can then provide structured options in their frontmatter using either compact syntax (for simple cases) or expanded syntax (for clarity):</p>
<pre><code class="language-yaml">fixtures:
  - node:
      tls: true
      port: 8443
  - http:
      port: 9090
</code></pre>
<p>The <code>@fixture</code> decorator validates that option keys match the dataclass fields, and the fixture retrieves its typed instance using <code>current_options(name)</code>. When options aren't provided, fixtures receive a default-constructed instance of their options class.</p>
<p>The feature maintains backward compatibility with the existing <code>fixtures: [node, http]</code> syntax for fixtures without options.</p>
]]></content>
        <category label="Tenzir Test"/>
        <published>2026-02-10T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tenzir Platform v1.28.0]]></title>
        <id>https://docs.tenzir.com/changelog/platform/v1-28-0</id>
        <link href="https://docs.tenzir.com/changelog/platform/v1-28-0"/>
        <updated>2026-02-09T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This release unifies the library's Available and Installed tabs into a single view, making package management more streamlined. It also adds pipeline activity sorting, series isolation in activity charts, a line wrap toggle in the Inspector, platform version display, and a backslash escaping fix.]]></summary>
        <content type="html"><![CDATA[<p>This release unifies the library's Available and Installed tabs into a single view, making package management more streamlined. It also adds pipeline activity sorting, series isolation in activity charts, a line wrap toggle in the Inspector, platform version display, and a backslash escaping fix.</p>

<h2>Features</h2>

<h3>Isolate series in pipeline activity chart</h3>
<p><small>Feb 6, 2026 · <a href="https://github.com/gitryder">@gitryder</a> · <a href="https://github.com/tenzir/platform/pull/64">#64</a></small></p>
<p>You can now click on the Ingress or Egress legend item to isolate that series in the activity chart. Clicking again shows both series, making it easier to analyze each metric when lines overlap.</p>

<h3>Wrap lines in the Inspector</h3>
<p><small>Feb 6, 2026 · <a href="https://github.com/gitryder">@gitryder</a></small></p>
<p>We added a toggle in the Explorer table Inspector that lets you wrap lines for easier reading.</p>

<h3>View the current platform version</h3>
<p><small>Feb 3, 2026 · <a href="https://github.com/gitryder">@gitryder</a> · <a href="https://github.com/tenzir/platform/pull/42">#42</a></small></p>
<p>We now display the current platform version at the bottom of the workspace switcher dropdown,️ making it easier to always see which version you’re on.</p>

<h3>Sort pipelines by activity</h3>
<p><small>Jan 28, 2026 · <a href="https://github.com/gitryder">@gitryder</a> · <a href="https://github.com/tenzir/platform/pull/38">#38</a></small></p>
<p>We added sorting for the Live Activity column in the pipelines table, so you can easily order pipelines by their activity level.</p>

<h2>Changes</h2>

<h3>Unified library tabs</h3>
<p><small>Jan 28, 2026 · <a href="https://github.com/gitryder">@gitryder</a> · <a href="https://github.com/tenzir/platform/pull/29">#29</a></small></p>
<p>We unified the Available and Installed library tabs into a single view, so you can see which packages are installed without switching tabs. You can also uninstall packages directly from the same page.</p>

<h2>Bug Fixes</h2>

<h3>Fixed backslash escaping in TQL string rendering</h3>
<p><small>Feb 9, 2026 · <a href="https://github.com/lava">@lava</a></small></p>
<p>We fixed a bug in the Inspector where strings containing backslashes were not displayed correctly. Backslashes were not being escaped in TQL string rendering. For example, a string like <code>Hello \World\</code> was previously rendered as <code>"Hello \World\"</code> instead of <code>"Hello \\World\\"</code>. The fix ensures backslashes are properly escaped when displayed.</p>
]]></content>
        <category label="Tenzir Platform"/>
        <published>2026-02-09T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tenzir Test v1.2.2]]></title>
        <id>https://docs.tenzir.com/changelog/tenzir-test/v1-2-2</id>
        <link href="https://docs.tenzir.com/changelog/tenzir-test/v1-2-2"/>
        <updated>2026-02-09T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This release fixes a serialization bug where Python fixture tests with `skip`
configurations in `test.yaml` failed with a JSON serialization error.]]></summary>
        <content type="html"><![CDATA[<p>This release fixes a serialization bug where Python fixture tests with <code>skip</code>
configurations in <code>test.yaml</code> failed with a JSON serialization error.</p>

<h2>Bug Fixes</h2>

<h3>Dataclass serialization in Python fixture configurations</h3>
<p><small>Feb 9, 2026 · <a href="https://github.com/mavam">@mavam</a>, <a href="https://github.com/claude">@claude</a></small></p>
<p>Python fixture tests that use <code>skip</code> in their <code>test.yaml</code> no longer fail with
<code>Object of type SkipConfig is not JSON serializable</code>.</p>
]]></content>
        <category label="Tenzir Test"/>
        <published>2026-02-09T00:00:00.000Z</published>
    </entry>
</feed>