Stable release 2026.08.28.05 - #90
Conversation
Sync main into dev
# Conflicts: # docs/sbom.cdx.json # folderview.plus.plg
Sync main into dev
Sync main into dev
# Conflicts: # docs/sbom.cdx.json # folderview.plus.plg
Sync main into dev
# Conflicts: # scripts/workflow_self_check.sh
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 292eedce1a
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| function fvplusWebuiProfileCleanString($value, int $maxBytes): string { | ||
| $clean = preg_replace('/[\x00-\x1F\x7F]/u', '', (string)$value); | ||
| $trimmed = trim(is_string($clean) ? $clean : ''); | ||
| return strlen($trimmed) <= $maxBytes ? $trimmed : substr($trimmed, 0, $maxBytes); |
There was a problem hiding this comment.
Preserve UTF-8 when truncating WebUI profile strings
When a localized profile name exceeds 80 bytes, this byte-based substr can split a multibyte character and return invalid UTF-8; for example, a 27-character CJK name is accepted by the editor's 80-character limit but is cut after 80 of its 81 bytes. The resulting profile then makes json_encode fail in the durable folder writer, so users cannot save the folder. Truncate on Unicode character boundaries or reject the over-limit value without producing malformed text.
Useful? React with 👍 / 👎.
| const pending = Array.from(doc?.querySelectorAll?.(`[${DOCKER_LIFECYCLE_SURFACE_PENDING_ATTRIBUTE}="true"]`) || []); | ||
| const surfaces = Array.from(new Set([...matched, ...pending])); |
There was a problem hiding this comment.
Clear pending state only for the completed container
When lifecycle operations on two containers overlap, finalizing either request includes every globally pending preview surface here, not just the surfaces matched to that request. Consequently, the still-running operation loses its spinner and aria-busy state before it settles; the per-request match computed immediately above is defeated by unioning it with the global pending set. Cleanup should remain scoped to the completed container while separately handling genuinely stale requests.
Useful? React with 👍 / 👎.
Stable release
Publishes FolderView Plus
2026.08.28.05from the fully validateddevrelease candidate.docs/releases/2026.08.28.05.md.scripts/release_prepare.sh.f71ee236840caadc58c6e22630a311670fa39d39f48293d086182cf0bb4dae88.This PR exists because the protected
mainruleset requires CodeQL results for the exact release commit before it can entermain.