Skip to content

Sync develop to main - #381

Merged
ptr727 merged 9 commits into
mainfrom
develop
May 25, 2026
Merged

Sync develop to main#381
ptr727 merged 9 commits into
mainfrom
develop

Conversation

@ptr727

@ptr727 ptr727 commented May 25, 2026

Copy link
Copy Markdown
Owner

Summary

Rolls up commits from develop. Brings the upstream-aligned currentOsVariantOverride=docker runtime injection, the README ignoreRootTool deviation note, refreshed compose examples (tmpfs /tmp, /dev/dri passthrough, storage-pool comments), and dependency bumps onto main.

Why so many commits

Initial #380 attempted a build-time RUN that worked for fresh installs but Copilot caught two bind-mount problems:

Subsequent iterations cleaned up the idempotence check (#383 — match the key alone, not the value) and made the write robust against non-writable bind mounts (#384 — guard the redirect, log a clear warning).

Visible behavior changes for main

  • mediaserver.conf gets currentOsVariantOverride=docker appended on container start if the key is not already present. Injection happens in entrypoint.sh for non-LSIO and init-nx-relocate/run for LSIO. Match is key-only (^currentOsVariantOverride=) so a user-set value is never overridden and never duplicated.
  • README's Known Issues > Licensing now documents that upstream's ignoreRootTool=true deviation is deliberately not adopted.
  • Compose examples include tmpfs: /tmp:size=1g,mode=1777 for RAM-backed temp files / Unix socket; production example shows /dev/dri iGPU passthrough and storage-pool layout.
  • Dependabot bumps (nuget-deps, actions-deps) included.

Test plan

The injection now happens on container start, so you must let the entrypoint run — docker run --rm --entrypoint=cat ... will skip it and produce a false negative.

  • Post-merge push to main fires publish-release.yml automatically.
  • Non-LSIO: start a container with the README compose example, then docker exec <container> cat /opt/networkoptix/mediaserver/etc/mediaserver.conf | grep currentOsVariantOverride shows the line.
  • LSIO: start with an empty /config volume, then docker exec <container> cat /config/etc/mediaserver.conf | grep currentOsVariantOverride shows the line.
  • Restart either container and confirm the line is not duplicated (idempotence).
  • Pre-populate mediaserver.conf with currentOsVariantOverride=something-else, start the container, confirm the existing value is preserved (no override).
  • Bind-mount a read-only etc directory in non-LSIO, start the container, confirm the entrypoint logs the "failed to write" warning to stderr and mediaserver still starts.

dependabot Bot and others added 3 commits May 24, 2026 21:38
Bumps the actions-deps group with 2 updates:
[softprops/action-gh-release](https://github.com/softprops/action-gh-release)
and
[dependabot/fetch-metadata](https://github.com/dependabot/fetch-metadata).

Updates `softprops/action-gh-release` from 2 to 3
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/softprops/action-gh-release/releases">softprops/action-gh-release's
releases</a>.</em></p>
<blockquote>
<h2>v3.0.0</h2>
<p><code>3.0.0</code> is a major release that moves the action runtime
from Node 20 to Node 24.
Use <code>v3</code> on GitHub-hosted runners and self-hosted fleets that
already support the
Node 24 Actions runtime. If you still need the last Node 20-compatible
line, stay on
<code>v2.6.2</code>.</p>
<h2>What's Changed</h2>
<h3>Other Changes 🔄</h3>
<ul>
<li>Move the action runtime and bundle target to Node 24</li>
<li>Update <code>@types/node</code> to the Node 24 line and allow future
Dependabot updates</li>
<li>Keep the floating major tag on <code>v3</code>; <code>v2</code>
remains pinned to the latest <code>2.x</code> release</li>
</ul>
<h2>v2.6.2</h2>
<!-- raw HTML omitted -->
<h2>What's Changed</h2>
<h3>Other Changes 🔄</h3>
<ul>
<li>chore(deps): bump picomatch from 4.0.3 to 4.0.4 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/softprops/action-gh-release/pull/775">softprops/action-gh-release#775</a></li>
<li>chore(deps): bump brace-expansion from 5.0.4 to 5.0.5 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/softprops/action-gh-release/pull/777">softprops/action-gh-release#777</a></li>
<li>chore(deps): bump vite from 8.0.0 to 8.0.5 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/softprops/action-gh-release/pull/781">softprops/action-gh-release#781</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/softprops/action-gh-release/compare/v2...v2.6.2">https://github.com/softprops/action-gh-release/compare/v2...v2.6.2</a></p>
<h2>v2.6.1</h2>
<p><code>2.6.1</code> is a patch release focused on restoring linked
discussion thread creation when
<code>discussion_category_name</code> is set. It fixes
<code>[#764](https://github.com/softprops/action-gh-release/issues/764)</code>,
where the draft-first publish flow
stopped carrying the discussion category through the final publish
step.</p>
<p>If you still hit an issue after upgrading, please open a report with
the bug template and include a minimal repro or sanitized workflow
snippet where possible.</p>
<h2>What's Changed</h2>
<h3>Bug fixes 🐛</h3>
<ul>
<li>fix: preserve discussion category on publish by <a
href="https://github.com/chenrui333"><code>@​chenrui333</code></a> in <a
href="https://redirect.github.com/softprops/action-gh-release/pull/765">softprops/action-gh-release#765</a></li>
</ul>
<h2>v2.6.0</h2>
<p><code>2.6.0</code> is a minor release centered on
<code>previous_tag</code> support for
<code>generate_release_notes</code>,
which lets workflows pin GitHub's comparison base explicitly instead of
relying on the default range.
It also includes the recent concurrent asset upload recovery fix, a
<code>working_directory</code> docs sync,
a checked-bundle freshness guard for maintainers, and clearer
immutable-prerelease guidance where
GitHub platform behavior imposes constraints on how prerelease asset
uploads can be published.</p>
<p>If you still hit an issue after upgrading, please open a report with
the bug template and include a minimal repro or sanitized workflow
snippet where possible.</p>
<h2>What's Changed</h2>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/softprops/action-gh-release/blob/master/CHANGELOG.md">softprops/action-gh-release's
changelog</a>.</em></p>
<blockquote>
<h2>0.1.13</h2>
<ul>
<li>fix issue with multiple runs concatenating release bodies <a
href="https://redirect.github.com/softprops/action-gh-release/pull/145">#145</a></li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/softprops/action-gh-release/commit/b4309332981a82ec1c5618f44dd2e27cc8bfbfda"><code>b430933</code></a>
release: cut v3.0.0 for Node 24 upgrade (<a
href="https://redirect.github.com/softprops/action-gh-release/issues/670">#670</a>)</li>
<li><a
href="https://github.com/softprops/action-gh-release/commit/c2e35e05a74208bafbfcbdae5ebc9da7236e980f"><code>c2e35e0</code></a>
chore(deps): bump the npm group across 1 directory with 7 updates (<a
href="https://redirect.github.com/softprops/action-gh-release/issues/783">#783</a>)</li>
<li>See full diff in <a
href="https://github.com/softprops/action-gh-release/compare/v2...v3">compare
view</a></li>
</ul>
</details>
<br />

Updates `dependabot/fetch-metadata` from 2.5.0 to 3.1.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/dependabot/fetch-metadata/releases">dependabot/fetch-metadata's
releases</a>.</em></p>
<blockquote>
<h2>v3.1.0</h2>
<h2>What's Changed</h2>
<ul>
<li>Add permissions to all workflows by <a
href="https://github.com/truggeri"><code>@​truggeri</code></a> in <a
href="https://redirect.github.com/dependabot/fetch-metadata/pull/687">dependabot/fetch-metadata#687</a></li>
<li>build(deps-dev): bump globals from 16.0.0 to 17.4.0 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/dependabot/fetch-metadata/pull/690">dependabot/fetch-metadata#690</a></li>
<li>build(deps-dev): bump esbuild from 0.27.4 to 0.28.0 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/dependabot/fetch-metadata/pull/693">dependabot/fetch-metadata#693</a></li>
<li>build(deps-dev): bump <code>@​hono/node-server</code> from 1.19.10
to 1.19.13 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/dependabot/fetch-metadata/pull/694">dependabot/fetch-metadata#694</a></li>
<li>build(deps-dev): bump hono from 4.12.7 to 4.12.12 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/dependabot/fetch-metadata/pull/695">dependabot/fetch-metadata#695</a></li>
<li>Dynamically update the tracking tag in action by <a
href="https://github.com/truggeri"><code>@​truggeri</code></a> in <a
href="https://redirect.github.com/dependabot/fetch-metadata/pull/696">dependabot/fetch-metadata#696</a></li>
<li>fix: handle duplicate dependency names in parseMetadataLinks by <a
href="https://github.com/devantler"><code>@​devantler</code></a> in <a
href="https://redirect.github.com/dependabot/fetch-metadata/pull/700">dependabot/fetch-metadata#700</a></li>
<li>fix: remove $ anchor from updateFragment regex to handle pip
directory suffixes by <a
href="https://github.com/devantler"><code>@​devantler</code></a> in <a
href="https://redirect.github.com/dependabot/fetch-metadata/pull/698">dependabot/fetch-metadata#698</a></li>
<li>Updates to README for permissions clarification by <a
href="https://github.com/truggeri"><code>@​truggeri</code></a> in <a
href="https://redirect.github.com/dependabot/fetch-metadata/pull/697">dependabot/fetch-metadata#697</a></li>
<li>fix: resolve update-type null for Python, Composer, and Terraform
PRs by <a
href="https://github.com/vitorsdcs"><code>@​vitorsdcs</code></a> in <a
href="https://redirect.github.com/dependabot/fetch-metadata/pull/704">dependabot/fetch-metadata#704</a></li>
<li>build(deps-dev): bump globals from 17.4.0 to 17.5.0 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/dependabot/fetch-metadata/pull/703">dependabot/fetch-metadata#703</a></li>
<li>build(deps): bump actions/create-github-app-token from 3.0.0 to
3.1.1 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/dependabot/fetch-metadata/pull/701">dependabot/fetch-metadata#701</a></li>
<li>build(deps): bump <code>@​actions/github</code> from 9.0.0 to 9.1.0
in the dependencies group across 1 directory by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/dependabot/fetch-metadata/pull/702">dependabot/fetch-metadata#702</a></li>
<li>build(deps-dev): bump hono from 4.12.12 to 4.12.14 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/dependabot/fetch-metadata/pull/705">dependabot/fetch-metadata#705</a></li>
<li>v3.1.0 by <a
href="https://github.com/fetch-metadata-action-automation"><code>@​fetch-metadata-action-automation</code></a>[bot]
in <a
href="https://redirect.github.com/dependabot/fetch-metadata/pull/692">dependabot/fetch-metadata#692</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/devantler"><code>@​devantler</code></a>
made their first contribution in <a
href="https://redirect.github.com/dependabot/fetch-metadata/pull/700">dependabot/fetch-metadata#700</a></li>
<li><a href="https://github.com/vitorsdcs"><code>@​vitorsdcs</code></a>
made their first contribution in <a
href="https://redirect.github.com/dependabot/fetch-metadata/pull/704">dependabot/fetch-metadata#704</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/dependabot/fetch-metadata/compare/v3...v3.1.0">https://github.com/dependabot/fetch-metadata/compare/v3...v3.1.0</a></p>
<h2>v3.0.0</h2>
<p>The breaking change is requiring Node.js version v24 as the Actions
runtime.</p>
<h2>What's Changed</h2>
<ul>
<li>feat: Parse versions from metadata links by <a
href="https://github.com/ppkarwasz"><code>@​ppkarwasz</code></a> in <a
href="https://redirect.github.com/dependabot/fetch-metadata/pull/632">dependabot/fetch-metadata#632</a></li>
<li>Upgrade actions core and actions github packages by <a
href="https://github.com/truggeri"><code>@​truggeri</code></a> in <a
href="https://redirect.github.com/dependabot/fetch-metadata/pull/649">dependabot/fetch-metadata#649</a></li>
<li>docs: Add notes for using <code>alert-lookup</code> with App Token
by <a href="https://github.com/sue445"><code>@​sue445</code></a> in <a
href="https://redirect.github.com/dependabot/fetch-metadata/pull/656">dependabot/fetch-metadata#656</a></li>
<li>feat!: update Node.js version to v24 by <a
href="https://github.com/sturman"><code>@​sturman</code></a> in <a
href="https://redirect.github.com/dependabot/fetch-metadata/pull/671">dependabot/fetch-metadata#671</a></li>
<li>Switch build tooling from ncc to esbuild by <a
href="https://github.com/truggeri"><code>@​truggeri</code></a> in <a
href="https://redirect.github.com/dependabot/fetch-metadata/pull/676">dependabot/fetch-metadata#676</a></li>
<li>Add --legal-comments=none to esbuild build commands by <a
href="https://github.com/jeffwidman"><code>@​jeffwidman</code></a> in <a
href="https://redirect.github.com/dependabot/fetch-metadata/pull/679">dependabot/fetch-metadata#679</a></li>
<li>Bump tsconfig target from es2022 to es2024 by <a
href="https://github.com/jeffwidman"><code>@​jeffwidman</code></a> in <a
href="https://redirect.github.com/dependabot/fetch-metadata/pull/680">dependabot/fetch-metadata#680</a></li>
<li>Remove vestigial outDir from tsconfig.json by <a
href="https://github.com/jeffwidman"><code>@​jeffwidman</code></a> in <a
href="https://redirect.github.com/dependabot/fetch-metadata/pull/681">dependabot/fetch-metadata#681</a></li>
<li>Switch tsconfig module resolution to bundler by <a
href="https://github.com/jeffwidman"><code>@​jeffwidman</code></a> in <a
href="https://redirect.github.com/dependabot/fetch-metadata/pull/682">dependabot/fetch-metadata#682</a></li>
<li>Remove skipLibCheck from tsconfig.json by <a
href="https://github.com/jeffwidman"><code>@​jeffwidman</code></a> in <a
href="https://redirect.github.com/dependabot/fetch-metadata/pull/683">dependabot/fetch-metadata#683</a></li>
<li>Add typecheck step to CI by <a
href="https://github.com/jeffwidman"><code>@​jeffwidman</code></a> in <a
href="https://redirect.github.com/dependabot/fetch-metadata/pull/685">dependabot/fetch-metadata#685</a></li>
<li>Enable noImplicitAny in tsconfig.json by <a
href="https://github.com/jeffwidman"><code>@​jeffwidman</code></a> in <a
href="https://redirect.github.com/dependabot/fetch-metadata/pull/684">dependabot/fetch-metadata#684</a></li>
<li>Upgrade <code>@​actions/core</code> to ^3.0.0 by <a
href="https://github.com/truggeri"><code>@​truggeri</code></a> in <a
href="https://redirect.github.com/dependabot/fetch-metadata/pull/677">dependabot/fetch-metadata#677</a></li>
<li>Upgrade <code>@​actions/github</code> to ^9.0.0 and
<code>@​octokit/request-error</code> to ^7.1.0 by <a
href="https://github.com/truggeri"><code>@​truggeri</code></a> in <a
href="https://redirect.github.com/dependabot/fetch-metadata/pull/678">dependabot/fetch-metadata#678</a></li>
<li>Bump qs from 6.14.0 to 6.14.1 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/dependabot/fetch-metadata/pull/651">dependabot/fetch-metadata#651</a></li>
<li>Bump hono from 4.11.1 to 4.11.4 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/dependabot/fetch-metadata/pull/652">dependabot/fetch-metadata#652</a></li>
<li>Bump hono from 4.11.4 to 4.11.7 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/dependabot/fetch-metadata/pull/653">dependabot/fetch-metadata#653</a></li>
<li>Bump hono from 4.11.7 to 4.12.0 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/dependabot/fetch-metadata/pull/657">dependabot/fetch-metadata#657</a></li>
<li>Bump qs from 6.14.1 to 6.14.2 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/dependabot/fetch-metadata/pull/655">dependabot/fetch-metadata#655</a></li>
<li>Bump <code>@​modelcontextprotocol/sdk</code> from 1.25.1 to 1.26.0
by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/dependabot/fetch-metadata/pull/654">dependabot/fetch-metadata#654</a></li>
<li>Bump <code>@​hono/node-server</code> from 1.19.9 to 1.19.10 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/dependabot/fetch-metadata/pull/665">dependabot/fetch-metadata#665</a></li>
<li>Bump hono from 4.12.2 to 4.12.5 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/dependabot/fetch-metadata/pull/664">dependabot/fetch-metadata#664</a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/dependabot/fetch-metadata/commit/25dd0e34f4fe68f24cc83900b1fe3fe149efef98"><code>25dd0e3</code></a>
v3.1.0 (<a
href="https://redirect.github.com/dependabot/fetch-metadata/issues/692">#692</a>)</li>
<li><a
href="https://github.com/dependabot/fetch-metadata/commit/e073f50d732cb48d48fb80afedb4fa61361626e9"><code>e073f50</code></a>
Merge pull request <a
href="https://redirect.github.com/dependabot/fetch-metadata/issues/705">#705</a>
from dependabot/dependabot/npm_and_yarn/hono-4.12.14</li>
<li><a
href="https://github.com/dependabot/fetch-metadata/commit/0670e167df1fbee1b0d07121de6a182ddebdd674"><code>0670e16</code></a>
build(deps-dev): bump hono from 4.12.12 to 4.12.14</li>
<li><a
href="https://github.com/dependabot/fetch-metadata/commit/7a7fe10a42310e65df80af6c771e9aa5d59842d1"><code>7a7fe10</code></a>
Merge pull request <a
href="https://redirect.github.com/dependabot/fetch-metadata/issues/702">#702</a>
from dependabot/dependabot/npm_and_yarn/dependencies-...</li>
<li><a
href="https://github.com/dependabot/fetch-metadata/commit/5168191cea3d4daa635bff6c796b4f0faeba522d"><code>5168191</code></a>
Updating dist build</li>
<li><a
href="https://github.com/dependabot/fetch-metadata/commit/23882e175b2f16bc495c89aa50940399c6a17504"><code>23882e1</code></a>
build(deps): bump <code>@​actions/github</code> in the dependencies
group</li>
<li><a
href="https://github.com/dependabot/fetch-metadata/commit/1072469591c13fda1d8dba1d1ac2e80187e247d7"><code>1072469</code></a>
Merge pull request <a
href="https://redirect.github.com/dependabot/fetch-metadata/issues/701">#701</a>
from dependabot/dependabot/github_actions/actions/cre...</li>
<li><a
href="https://github.com/dependabot/fetch-metadata/commit/43f8a0055c8e32587be67e097dff89a6823c9752"><code>43f8a00</code></a>
build(deps): bump actions/create-github-app-token from 3.0.0 to
3.1.1</li>
<li><a
href="https://github.com/dependabot/fetch-metadata/commit/b4d904a50935c8ebe744da148ea8a18a43fe72e1"><code>b4d904a</code></a>
Merge pull request <a
href="https://redirect.github.com/dependabot/fetch-metadata/issues/703">#703</a>
from dependabot/dependabot/npm_and_yarn/globals-17.5.0</li>
<li><a
href="https://github.com/dependabot/fetch-metadata/commit/c8046bb877d9989cc848797de1b944bc3e93ef82"><code>c8046bb</code></a>
build(deps-dev): bump globals from 17.4.0 to 17.5.0</li>
<li>Additional commits viewable in <a
href="https://github.com/dependabot/fetch-metadata/compare/21025c705c08248db411dc16f3619e6b5f9ea21a...25dd0e34f4fe68f24cc83900b1fe3fe149efef98">compare
view</a></li>
</ul>
</details>
<br />


Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Updated
[Microsoft.Extensions.Http.Resilience](https://github.com/dotnet/extensions)
from 10.4.0 to 10.6.0.

<details>
<summary>Release notes</summary>

_Sourced from [Microsoft.Extensions.Http.Resilience's
releases](https://github.com/dotnet/extensions/releases)._

## 10.6.0

Version 10.6.0 stabilizes the response continuation token and
background-response APIs in Microsoft.Extensions.AI.Abstractions. Most
other AI work for May shipped in 10.5.1; this monthly release rolls
those changes up alongside dependency updates and a small Resource
Monitoring cleanup.

## Experimental API Changes

### Now Stable

* ResponseContinuationToken and background-response APIs are now stable
(previously `MEAI001`) #​7512

## What's Changed

### AI

* Stabilize ResponseContinuationToken / background-response APIs #​7512
by @​jozkee (co-authored by @​Copilot)

## Repository Infrastructure Updates

* Update version to 10.6.0 #​7458 by @​jeffhandley
* [main] Update dependencies from dotnet/arcade #​7451
* Bump follow-redirects from 1.15.11 to 1.16.0 in
/src/Libraries/Microsoft.Extensions.AI.Evaluation.Reporting/TypeScript/azure-devops-report/tasks/PublishAIEvaluationReport
#​7469
* Merge release/10.5 into main #​7470 by @​jeffhandley
* Bump microsoft.visualstudio.slngen.tool from 12.0.13 to 12.0.32 #​7484
* Bump postcss from 8.5.9 to 8.5.12 in
/src/Libraries/Microsoft.Extensions.AI.Evaluation.Reporting/TypeScript
#​7494
* Bump dotnet-reportgenerator-globaltool from 5.5.7 to 5.5.9 #​7504
* Rename release-notes skill to write-release-notes #​7511 by
@​jeffhandley (co-authored by @​Copilot)

## Acknowledgements

* @​wtgodbe @​tarekgh @​peterwald @​JeremyLikness @​eiriktsarpalis
@​ericstj @​evgenyfedorov2 reviewed pull requests

**Full Changelog**:
dotnet/extensions@v10.5.2...v10.6.0


## 10.5.2

This patch release ships a single fix to
`Microsoft.Extensions.VectorData.Abstractions`, correcting `StorageName`
resolution when external serialization is enabled.
`Microsoft.Extensions.VectorData.ConformanceTests`,
`Microsoft.Extensions.AI.Abstractions`, `Microsoft.Extensions.AI`, and
`Microsoft.Extensions.AI.OpenAI` are published alongside it for version
coherency — they contain no code changes from 10.5.1.

## Packages in this release

| Package | Version |
| --- | --- |
| Microsoft.Extensions.VectorData.Abstractions | 10.5.2 |
| Microsoft.Extensions.VectorData.ConformanceTests | 10.5.2 |
| Microsoft.Extensions.AI.Abstractions | 10.5.2 |
| Microsoft.Extensions.AI | 10.5.2 |
| Microsoft.Extensions.AI.OpenAI | 10.5.2 |

## What's Changed

### Microsoft.Extensions.VectorData.Abstractions

- Minor fixes to MEVD.Abstractions: correct `StorageName` behavior when
external serialization is enabled, and disable a warning for `net462`.
(by @​roji in [#​7475](dotnet/extensions#7475))

**Full Changelog**:
dotnet/extensions@v10.5.1...v10.5.2


## 10.5.1

Version 10.5.1 of the Microsoft.Extensions.AI packages stabilizes
CodeInterpreter, WebSearch, and ImageGeneration tool content types. The
release adds new experimental tool search and OpenAI request policy
hooks. And the OpenTelemetry gen-ai semantic conventions are updated to
align with v1.41.

The 'aiagent-webapi' project template in
Microsoft.Agents.AI.ProjectTemplates is updated to align with v1.3.0 of
Agent Framework, updating the OpenTelemetry dependencies within the
template projects as well.

## Packages in this release

| Package | Version |
|---------|---------|
| Microsoft.Extensions.AI | 10.5.1 |
| Microsoft.Extensions.AI.Abstractions | 10.5.1 |
| Microsoft.Extensions.AI.OpenAI | 10.5.1 |
| Microsoft.Extensions.AI.Templates | 10.5.1-preview.3.26251.3 |
| Microsoft.Agents.AI.ProjectTemplates | 1.3.0-preview.1.26251.3 |

## Experimental API Changes

### Now Stable

The following types previously emitted the `MEAI001` experimental
diagnostic and are now stable.

* CodeInterpreter and WebSearch tool content types are now stable #​7493
  * `CodeInterpreterToolCallContent`
  * `CodeInterpreterToolResultContent`
  * `WebSearchToolCallContent`
  * `WebSearchToolResultContent`
* ImageGeneration tool content types and tool are now stable #​7476
  * `ImageGenerationToolCallContent`
  * `ImageGenerationToolResultContent`
  * `HostedImageGenerationTool`
  * `ImageGenerationOptions`
* `ImageGenerationResponseFormat` (the `Hosted` enum value remains
experimental)
* `IImageGenerator` and the rest of the image generation infrastructure
also remain experimental

### New Experimental APIs

The following new APIs emit the `MEAI001` experimental diagnostic.

* New experimental API: `HostedToolSearchTool` with `DeferredTools` for
tool-search-driven deferred tool loading #​7471
* New experimental API: `OpenAIRequestPolicies` extension hook for
appending `System.ClientModel.PipelinePolicy` instances to outgoing
OpenAI requests #​7495

### Breaking Changes to Experimental APIs

* `WebSearchToolResultContent.Results` was renamed to `Outputs` as part
of the stabilization in #​7493, aligning with
`CodeInterpreterToolResultContent.Outputs`. The original `Results`
property was included in version 10.4.0 and 10.5.0; this is a binary
breaking change and consumers need to update to consume the updated
property.

  ```diff
  WebSearchToolResultContent content = ...;
  - IList<AIContent>? items = content.Results;
  + IList<AIContent>? items = content.Outputs;
  ```

 ... (truncated)

## 10.5.0

HTTP Logging Middleware APIs in
`Microsoft.AspNetCore.Diagnostics.Middleware` are now stable. This
release also transfers `Microsoft.Extensions.VectorData.Abstractions`
and `Microsoft.Extensions.VectorData.ConformanceTests` from the
[Semantic Kernel](https://github.com/microsoft/semantic-kernel)
repository into dotnet/extensions, jumping from 10.1.0 to 10.5.0 for
consistent versioning. The release also delivers fixes across the AI
libraries, AI Evaluation, and Service Discovery.

## Breaking Changes

1. **Rename `VectorStoreVectorAttribute` constructor parameter #​7460**
* The `Dimensions` parameter was renamed to `dimensions` (lowercase).
This is a source-breaking change only — binary compatibility is
preserved.
* If you use the named argument syntax `new
VectorStoreVectorAttribute(Dimensions: 1536)`, update it to `new
VectorStoreVectorAttribute(dimensions: 1536)`.

## Experimental API Changes

### Now Stable

* HTTP Logging Middleware APIs are now stable (previously `EXTEXP0013`):
`AddHttpLogEnricher<T>`, `IHttpLogEnricher`, and
`RequestHeadersLogEnricherOptions.HeadersDataClasses` #​7380

## What's Changed

### AI

* Fix OpenAIResponsesChatClient to respect "store":false in responses
#​7417 by @​stephentoub
* Fix InvalidOperationException in CoalesceWebSearchToolCallContent
#​7419 by @​stephentoub
* Handle F# optional parameters in AIFunctionFactory schema generation
#​7439 by @​eiriktsarpalis
* Fix ComputerCallResponseItem using Item.Id instead of CallId #​7446 by
@​jozkee
* Fix HostedFileContent with image MIME type sent as input_file instead
of input_image #​7438 by @​stephentoub (co-authored by @​copilot)
* Guard Activity.Current restore with null check in OpenTelemetry
streaming clients #​7443 by @​stephentoub (co-authored by @​copilot)
* Enable stateless mode in remote MCP server template (released as
v1.2.0 on 2026-04-01) #​7441 by @​jeffhandley

### Vector Data

* Move Microsoft.Extensions.VectorData.Abstractions over from Semantic
Kernel #​7434 by @​roji
* Rename VectorStoreVectorAttribute dimensions constructor parameter
#​7460 by @​roji

### AI Evaluation

* Add Path Validation for DiskBasedResponseCache and
DiskBasedResultStore #​7397 by @​peterwald
* Update brace-expansion for CVE-2026-33750 #​7457 by @​SamMonoRT

### ASP.NET Core Extensions

* Removing experimental attribute from Http logging middleware #​7380 by
@​mariamgerges

### Service Discovery

* Implement RFC6761 reserved DNS names handling #​6924 by @​rzikm

## Documentation Updates

* Remove per-library CHANGELOG.md files #​7413 by @​jeffhandley

## Test Improvements

 ... (truncated)

## 10.4.1

This release of the Microsoft.Extensions.AI packages adds new
experimental APIs for Realtime client sessions and Text-to-Speech, along
with OpenTelemetry and middleware improvements.

## Packages in this release

| Package | Version |
|---------|---------|
| Microsoft.Extensions.AI.Abstractions | 10.4.1 |
| Microsoft.Extensions.AI | 10.4.1 |
| Microsoft.Extensions.AI.OpenAI | 10.4.1 |

## Experimental API Changes

### New Experimental APIs

* New experimental API: Realtime Client Sessions #​7285 and #​7399
* New experimental API: Text-to-Speech Client #​7381

### Changes to Experimental APIs

* Hosted File Download Stream: write-path methods now explicitly throw
`NotSupportedException` #​7394

## What's Changed

### AI

* Add `ITextToSpeechClient` abstraction, middleware, and OpenAI
implementation #​7381 by @​stephentoub
* Realtime Client Proposal #​7285 by @​tarekgh
* Add `VoiceActivityDetection` options to realtime session abstractions
#​7399 by @​tarekgh
* Make `UriContent` `mediaType` parameter optional with inference from
URI file extension #​7398 by @​stephentoub (co-authored by @​Copilot)
* Emit `gen_ai.client.operation.exception` via `ILogger LoggerMessage`
on OpenTelemetry instrumentation classes #​7379 by @​stephentoub
(co-authored by @​Copilot)
* Support `invoke_workflow` as an equivalent parent span to
`invoke_agent` in `FunctionInvokingChatClient` #​7382 by @​stephentoub
(co-authored by @​Copilot)
* Make `HostedFileDownloadStream` explicitly read-only #​7394 by
@​stephentoub (co-authored by @​Copilot)

## Documentation Updates

* Document JSON schema derivation for return types in AIFunctionFactory
#​7400 by @​stephentoub (co-authored by @​Copilot)

## Test Improvements

* Fix test warnings #​7369 by @​jozkee
* Add tests for JSON deserialization of serializable types #​7373 by
@​stephentoub (co-authored by @​Copilot)

## Repository Infrastructure Updates

* Update Package Validation Baseline to 10.4.0 #​7389 by @​jeffhandley
(co-authored by @​Copilot)
* Update ModelContextProtocol libraries to version 1.0.0 #​7340 by
@​stephentoub (co-authored by @​Copilot)

## Acknowledgements

* @​eiriktsarpalis @​ericstj @​CodeBlanch @​lmolkova @​adamsitnik
@​joperezr reviewed pull requests
 ... (truncated)

Commits viewable in [compare
view](dotnet/extensions@v10.4.0...v10.6.0).
</details>

Updated [Microsoft.NET.Test.Sdk](https://github.com/microsoft/vstest)
from 18.4.0 to 18.5.1.

<details>
<summary>Release notes</summary>

_Sourced from [Microsoft.NET.Test.Sdk's
releases](https://github.com/microsoft/vstest/releases)._

## 18.5.1

## What's Changed
* Fix System.Collections.Immutable binding mismatch in Common.dll
(rel/18.5) by @​nohwnd in microsoft/vstest#15720
* Port verify-binding-redirects.ps1 to rel/18.5 by @​nohwnd in
microsoft/vstest#15719
* Bump to 18.5.1 by @​nohwnd in
microsoft/vstest#15721


**Full Changelog**:
microsoft/vstest@v18.5.0...v18.5.1

## 18.5.0

⚠️ Unlisted on Nuget, because of #​15718 

## What's Changed
* Add runtime configs by @​nohwnd in
microsoft/vstest#15377
* Add net8.0 target for TranslationLayer by @​nohwnd in
microsoft/vstest#15375
* Determine architecture of remote process on windows by @​nohwnd in
microsoft/vstest#15396
* Updating System.Collections.Immutable package reference to version
9.0.0 by @​MSLukeWest in microsoft/vstest#15392
* Dump via netcore tool on windows by @​nohwnd in
microsoft/vstest#15397
* Fix answer file splitting by @​nohwnd in
microsoft/vstest#15381
* Run tests against vsix runner by @​nohwnd in
microsoft/vstest#15419

**Full Changelog**:
microsoft/vstest@v18.4.0...v18.5.0

Commits viewable in [compare
view](microsoft/vstest@v18.4.0...v18.5.1).
</details>

Updated [System.CommandLine](https://github.com/dotnet/dotnet) from
2.0.5 to 2.0.8.

<details>
<summary>Release notes</summary>

_Sourced from [System.CommandLine's
releases](https://github.com/dotnet/dotnet/releases)._

No release notes found for this version range.

Commits viewable in [compare
view](https://github.com/dotnet/dotnet/commits).
</details>

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
## Summary

Closes part of #326 (investigation of Nx upstream Docker tweaks). Plan
deliberately scoped to three changes:

1. **Adopt `currentOsVariantOverride=docker`** — append the line to
`mediaserver.conf` at build time via `CreateMatrix/Dockerfile.cs`,
regenerating 10 product Dockerfiles. Mirrors upstream's
[`54bbd16`](networkoptix/nxvms-docker@54bbd16)
(CI-3164). The two base images are untouched (they don't install
mediaserver).
2. **Document upstream's `ignoreRootTool=true` deviation** — add a
sub-bullet under Known Issues > Licensing noting that upstream's
[`4285f93`](networkoptix/nxvms-docker@4285f93)
(VMS-60430) disabled root-tool entirely, and explaining why NxWitness
deliberately does not follow (license enforcement depends on root-tool).
3. **Refresh README compose examples** — add `tmpfs /tmp` (matches
upstream's VMS-60430 switch) to all four compose snippets; bring the
headline production example up to a real homelab pattern (`devices:
/dev/dri` for iGPU passthrough, storage-pool comments, Traefik routing
tweaks).

## Deliberately not adopted (rationale in plan)

- **`ignoreRootTool=true` as a build-time default** — would break
license enforcement for paying users; opposite of NxWitness's
architecture.
- **Plugin-extension Dockerfile pattern** (upstream's
`extentions/nxai-plugin/Dockerfile`) — no point shipping example code we
can't test end-to-end with a real plugin.
- **`ENTRYPOINT_SCRIPTS_DIR` user init script hook** — same "untested
surface area" reason; revisit if a concrete need arises.

## File-by-file

- [`CreateMatrix/Dockerfile.cs`](CreateMatrix/Dockerfile.cs) — one new
RUN step inserted in `CreateInstall()` after the mediaserver deb
install, before the LSIO/non-LSIO branching. Applies to both variants.
- `Docker/*.Dockerfile` (10 files) — regenerated via `Make/Create.sh`;
mechanical 5-line addition per product image, no other diff.
- [`README.md`](README.md) — one new bullet under Licensing; `tmpfs`
added to 4 compose blocks; production example expanded with `devices`,
comments, routing label.

## Test plan

- [x] `dotnet build CreateMatrix/CreateMatrix.csproj` — clean (0
warnings, 0 errors).
- [x] `dotnet test CreateMatrixTests/CreateMatrixTests.csproj` — 16/16
pass.
- [x] `grep -c currentOsVariantOverride=docker Docker/*.Dockerfile` —
10/10 product images, 0/2 base images.
- [ ] (post-merge) Build any product image and `docker run --rm
--entrypoint=cat <img> /opt/<company>/mediaserver/etc/mediaserver.conf |
grep currentOsVariantOverride` shows the line.
- [ ] CI matrix on this branch passes (same workflow that validated PR
#374).
Copilot AI review requested due to automatic review settings May 25, 2026 13:55

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Rolls develop into main, bringing in the upstream-aligned currentOsVariantOverride=docker behavior (build-time for non-LSIO, runtime for LSIO), documentation refreshes, and dependency updates for both .NET and GitHub Actions workflows.

Changes:

  • Append currentOsVariantOverride=docker to mediaserver.conf in non-LSIO product images; inject the same setting at runtime for LSIO via s6 init.
  • Refresh README.md Compose examples (tmpfs /tmp, /dev/dri passthrough, updated Traefik host rule) and document Nx upstream’s ignoreRootTool=true deviation.
  • Bump .NET NuGet dependencies and update pinned GitHub Action dependencies.

Reviewed changes

Copilot reviewed 12 out of 12 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
README.md Updates Compose examples (tmpfs, /dev/dri, routing) and adds licensing note about upstream ignoreRootTool change.
Docker/NxWitness.Dockerfile Appends currentOsVariantOverride=docker to packaged mediaserver.conf at build time (non-LSIO).
Docker/NxMeta.Dockerfile Same build-time mediaserver.conf append for NxMeta (non-LSIO).
Docker/NxGo.Dockerfile Same build-time mediaserver.conf append for NxGo (non-LSIO).
Docker/DWSpectrum.Dockerfile Same build-time mediaserver.conf append for DW Spectrum (non-LSIO).
Docker/WisenetWAVE.Dockerfile Same build-time mediaserver.conf append for Wisenet WAVE (non-LSIO).
Docker/s6-overlay/s6-rc.d/init-nx-relocate/run Adds runtime injection of currentOsVariantOverride=docker into /config/etc/mediaserver.conf (LSIO).
CreateMatrix/Dockerfile.cs Updates Dockerfile generation logic to include the new non-LSIO build step and documents LSIO runtime injection rationale.
CreateMatrix/CreateMatrix.csproj Bumps Microsoft.Extensions.Http.Resilience and System.CommandLine versions.
CreateMatrixTests/CreateMatrixTests.csproj Bumps Microsoft.NET.Test.Sdk version.
.github/workflows/merge-bot-pull-request.yml Updates pinned dependabot/fetch-metadata to v3.1.0 commit.
.github/workflows/build-release-task.yml Updates softprops/action-gh-release from v2 to v3.

Comment thread CreateMatrix/Dockerfile.cs Outdated
## Summary

Follow-up to #380. Copilot review on PR #381 (develop → main sync)
caught that the non-LSIO build-time RUN from #380 is shadowed by the
README's recommended bind-mount of
`/opt/${COMPANY_NAME}/mediaserver/etc` — the host's etc directory hides
the image's pre-edited `mediaserver.conf` at runtime.

Same shape as the LSIO bug Copilot caught in PR #380's round 1, just for
the other variant. Fix mirrors the LSIO approach: drop the build-time
RUN and inject idempotently at container start.

## Changes

- [`CreateMatrix/Dockerfile.cs`](CreateMatrix/Dockerfile.cs) — remove
the build-time RUN from the non-LSIO `else` branch; add a comment
pointing readers to the runtime equivalent.
- [`Docker/entrypoint.sh`](Docker/entrypoint.sh) — add the same
idempotent `grep -q && echo >>` pattern used in
[`init-nx-relocate/run`](Docker/s6-overlay/s6-rc.d/init-nx-relocate/run)
for LSIO. Runs after root-tool launch and before `exec mediaserver`.
- 5 non-LSIO product Dockerfiles regenerate to drop the RUN. LSIO
Dockerfiles unchanged.

After this, both variants follow the same pattern: build is
mediaserver-only; mediaserver.conf injection happens at runtime in the
variant-appropriate init path.

## Test plan

- [x] `dotnet test CreateMatrixTests/CreateMatrixTests.csproj` — 16/16
pass.
- [x] `grep -c currentOsVariantOverride=docker Docker/*.Dockerfile` —
0/0 (all moved to runtime scripts).
- [ ] Build a non-LSIO image, run with a bind-mounted empty etc dir,
then `cat <bound-etc>/mediaserver.conf` shows the line.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated 2 comments.

Comment thread Docker/entrypoint.sh Outdated
Comment thread Docker/s6-overlay/s6-rc.d/init-nx-relocate/run Outdated

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated 7 comments.

Comment thread Docker/entrypoint.sh Outdated
Comment thread Docker/entrypoint.sh
Comment thread README.md Outdated
Comment thread README.md Outdated
Comment thread README.md Outdated
Comment thread README.md Outdated
Comment thread README.md Outdated
## Summary

Copilot review on PR #381 round 2 flagged two related edge cases in the
runtime injection added by #380 / #382:

1. **False positive on prefix match** — `grep -q
"^currentOsVariantOverride=docker"` matches
`currentOsVariantOverride=docker2` (or anything starting with `docker`).
2. **No upgrade path on existing different value** — if the user had
previously set `currentOsVariantOverride=<other>`, the check fails and
we append a *second* line for the same key, leaving precedence up to the
parser.

## Fix

In both [`Docker/entrypoint.sh`](Docker/entrypoint.sh) (non-LSIO) and
[`Docker/s6-overlay/s6-rc.d/init-nx-relocate/run`](Docker/s6-overlay/s6-rc.d/init-nx-relocate/run)
(LSIO), match the **key alone** — `^currentOsVariantOverride=` — and
only append when the key is absent. This:

- Avoids prefix-match false positives.
- Never produces duplicate lines.
- Respects a user's explicit setting (don't override what they typed).

## Test plan

- [x] `dotnet test CreateMatrixTests/CreateMatrixTests.csproj` — 16/16
pass.
- [ ] CI matrix passes.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated 7 comments.

Comment thread Docker/entrypoint.sh Outdated
Comment thread Docker/entrypoint.sh
Comment thread README.md Outdated
Comment thread README.md Outdated
Comment thread README.md Outdated
Comment thread README.md Outdated
Comment thread README.md Outdated
## Summary

Round-3 follow-up from Copilot's review on PR #381 (develop -> main
sync). Six findings; this PR addresses the substantive ones; the seventh
(PR #381's test plan referencing a build-time verification that no
longer applies) will be fixed by editing #381's description directly.

## Changes

- [`Docker/entrypoint.sh`](Docker/entrypoint.sh) — guard the
`mediaserver.conf` append. The entrypoint runs as the unprivileged
`${COMPANY_NAME}` user, so the bind-mounted etc directory must be
writable by that user. Previously the `>>` would silently error if not
writable. Now wraps the redirect in a conditional and logs a clear
stderr warning identifying the required ownership.
- [`README.md`](README.md) (4 lines) — capitalize "Unix" in "Unix
socket" tmpfs comments. Proper-noun consistency.
- [`README.md`](README.md) (1 line) — replace "recently disabled
`root-tool`" with "disabled `root-tool` in late 2025". Less
time-relative, ages better.

## Test plan

- [x] `dotnet test CreateMatrixTests/CreateMatrixTests.csproj` — 16/16
pass.
- [ ] CI matrix passes.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated 2 comments.

Comment thread Docker/s6-overlay/s6-rc.d/init-nx-relocate/run Outdated
Comment thread Docker/entrypoint.sh
## Summary

Round-4 follow-up from Copilot's review on PR #381. The LSIO init script
([`init-nx-relocate/run`](Docker/s6-overlay/s6-rc.d/init-nx-relocate/run))
appended to `/config/etc/mediaserver.conf` without checking the result.
The script runs as root, but the underlying `/config` mount can be on a
read-only filesystem or otherwise rejected, so a silent failure would
leave mediaserver running without the OS variant override.

## Fix

Apply the same defensive pattern non-LSIO already uses in
[`Docker/entrypoint.sh`](Docker/entrypoint.sh) (added in #384): wrap the
append in an `if`, log a clear stderr warning on failure, and only
`chown` on successful write. Both variants now log "Added" on success
and "Warning: failed to write" on failure with a hint about what to
check.

## Test plan

- [x] `dotnet test CreateMatrixTests/CreateMatrixTests.csproj` — 16/16
pass.
- [ ] CI matrix passes.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated 3 comments.

Comment thread Docker/s6-overlay/s6-rc.d/init-nx-relocate/run Outdated
Comment thread README.md
Comment thread .github/workflows/build-release-task.yml
@ptr727
ptr727 requested a review from Copilot May 25, 2026 16:55

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated 2 comments.

Comment thread Docker/s6-overlay/s6-rc.d/init-nx-relocate/run Outdated
Comment thread README.md
## Summary

Copilot flagged on PR #381
([round-5](#381 (comment))
and
[round-6](#381 (comment)))
that the production compose example uses service/hostname `nxmeta` but
the Traefik `HostRegexp` matches `^nxmeta-web...`. The reviewer's
concern was that the example would be unreachable through Traefik.

The mismatch is intentional. The container is multi-homed:

- **Bare `nxmeta`** resolves to the dedicated macvlan IP set via
`${NXMETA_IP}` / `${NXMETA_MAC}` in the compose, used for direct access.
- **`nxmeta-web`** is a CNAME pointing at the Traefik host for SSL
termination. Only the `-web` hostname is fronted by Traefik; the bare
hostname bypasses it.

This is the real-world pattern from the user's homelab. Without the
inline rationale, future readers (and future automated reviews) hit the
same question.

## Change

Four lines of comment in [`README.md`](README.md) inside the Traefik
labels block.

## Test plan

- [x] Markdown rendering checked — comment lines render as part of the
YAML fenced block.
- [ ] CI matrix passes.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated 1 comment.

Comment thread Docker/s6-overlay/s6-rc.d/init-nx-relocate/run Outdated
## Summary

Copilot flagged on PR #381 (round-5 & round-6) that the `chown` added by
#385 sits at the end of the success path in the LSIO init script.
Because `init-nx-relocate` is an s6-rc **oneshot** service, a non-zero
exit from its last command fails the service and breaks container init —
even though the actual conf write succeeded. Filesystems that don't
support ownership changes (SMB/NFS/Windows-backed) trigger this.

## Fix

Wrap the `chown` in an `if`-guard. On failure, log a clear stderr
warning ("filesystem may not support ownership changes — continuing")
and fall through; the outer `fi` always evaluates to 0, so the script
exits cleanly. The actual conf-write outcome still drives the
user-facing success/failure messaging.

## Test plan

- [x] `dotnet test CreateMatrixTests/CreateMatrixTests.csproj` — 16/16
pass.
- [ ] CI matrix passes.
- [ ] Manual: mount a `/config` volume backed by an exFAT or similar
non-chown filesystem, start the LSIO container, confirm the s6 oneshot
completes (container reaches running state, mediaserver launches) and
the warning appears in container logs.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated no new comments.

@ptr727
ptr727 merged commit f113f6c into main May 25, 2026
100 checks passed
@ptr727
ptr727 deleted the develop branch May 25, 2026 19:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants