From b7acaf61e6d4168cd9cfc81fc32efab30d6c02fa Mon Sep 17 00:00:00 2001
From: HANCORE-linux <230438592+HANCORE-linux@users.noreply.github.com>
Date: Fri, 23 Oct 2026 09:33:30 +0200
Subject: [PATCH 1/9] fix(cli): accept renamed Omarchy appearance menu keys
---
scripts/shibumi_suite/cli.py | 9 +++-
scripts/shibumi_suite/menu_extension.py | 61 ++++++++++++++++---------
2 files changed, 47 insertions(+), 23 deletions(-)
diff --git a/scripts/shibumi_suite/cli.py b/scripts/shibumi_suite/cli.py
index c0ff08b..696c5fb 100644
--- a/scripts/shibumi_suite/cli.py
+++ b/scripts/shibumi_suite/cli.py
@@ -358,18 +358,25 @@ def install_picker_menu_extension(
source_path = stock_path
stock_menu = read_extension(source_path)
source_path = menu_path
- payload = install_picker_routing(raw, stock_menu).encode("utf-8")
+ warnings: list[str] = []
+ payload = install_picker_routing(raw, stock_menu, warnings=warnings).encode("utf-8")
except MenuExtensionError as error:
if isinstance(error, StockMenuError):
source_path = stock_path
+ if not error.unparsable:
+ raise CliError(f"cannot update Omarchy menu {stock_path}: {error}") from error
remedy = (
"restore the Omarchy stock menu, then retry the same command"
+ if isinstance(error, StockMenuError) and error.unparsable else
+ "check that the stock menu is readable, then retry the same command"
if source_path == stock_path else
"fix the JSONC syntax or routing markers in this regular file, then retry the same command"
)
raise CliError(f"cannot update Omarchy menu {source_path}: {error}; {remedy}") from error
transaction.write_menu_extension(payload)
runtime.refresh_menu()
+ for warning in warnings:
+ print(f"shibumi-suite: warning: {stock_path}: {warning}", file=sys.stderr)
previous = (
previous_state.get("menuExtension")
if isinstance(previous_state, dict) else None
diff --git a/scripts/shibumi_suite/menu_extension.py b/scripts/shibumi_suite/menu_extension.py
index 2edb411..a6a2a53 100644
--- a/scripts/shibumi_suite/menu_extension.py
+++ b/scripts/shibumi_suite/menu_extension.py
@@ -11,6 +11,10 @@ class MenuExtensionError(RuntimeError):
class StockMenuError(MenuExtensionError):
"""The host defaults, not the user's extension, failed validation."""
+ def __init__(self, message: str, *, unparsable: bool = False):
+ super().__init__(message)
+ self.unparsable = unparsable
+
START_MARKER = "// shibumi-picker-routing-start"
END_MARKER = "// shibumi-picker-routing-end"
@@ -202,28 +206,41 @@ def remove_picker_routing(raw: str) -> str:
return result
-def install_picker_routing(raw: str | None, stock_menu: str | None = None) -> str:
+def install_picker_routing(
+ raw: str | None, stock_menu: str | None = None, *, warnings: list[str] | None = None
+) -> str:
# Default actions are the stable host contract. The lifecycle supplies the
# actual host menu so forward hosts retain their native theme-picker route.
+ base = raw if raw and raw.strip() else EMPTY_EXTENSION
+ base = remove_picker_routing(base)
+ decoded = _decoded(base)
+ family = "style"
stock_actions = {
- "style.theme": 'theme=$(omarchy-theme-switcher); [[ -n $theme ]] && omarchy-theme-set "$theme"',
- "style.background": 'background=$(omarchy-theme-bg-switcher); [[ -n $background ]] && omarchy-theme-bg-set "$background"',
+ "theme": 'theme=$(omarchy-theme-switcher); [[ -n $theme ]] && omarchy-theme-set "$theme"',
+ "background": 'background=$(omarchy-theme-bg-switcher); [[ -n $background ]] && omarchy-theme-bg-set "$background"',
}
if stock_menu is not None:
try:
stock = _decoded(stock_menu)
- stock = stock.get("items", stock)
- for key in stock_actions:
- entry = stock.get(key) if isinstance(stock, dict) else None
- action = entry.get("action") if isinstance(entry, dict) else None
- if not isinstance(action, str) or not action.strip():
- raise MenuExtensionError(f"Omarchy stock menu has no action for {key}")
- stock_actions[key] = action
except MenuExtensionError as error:
- raise StockMenuError(str(error)) from error
- base = raw if raw and raw.strip() else EMPTY_EXTENSION
- base = remove_picker_routing(base)
- decoded = _decoded(base)
+ raise StockMenuError(str(error), unparsable=True) from error
+ stock = stock.get("items", stock)
+ if isinstance(stock, dict) and "style.theme" in stock:
+ family = "style"
+ elif isinstance(stock, dict) and "appearance.theme" in stock:
+ family = "appearance"
+ else:
+ if warnings is not None:
+ warnings.append("stock menu has neither style.theme nor appearance.theme; picker routing skipped")
+ return base
+ for suffix in stock_actions:
+ key = f"{family}.{suffix}"
+ entry = stock.get(key)
+ action = entry.get("action") if isinstance(entry, dict) else None
+ if not isinstance(action, str) or not action.strip():
+ raise StockMenuError(f"Omarchy stock menu has no action for {key} (family {family})")
+ stock_actions[suffix] = action
+ theme_key, background_key = f"{family}.theme", f"{family}.background"
root_start, root_end = _root_object(base)
items = decoded.get("items")
target = _items_object(base, root_start, root_end) if isinstance(items, dict) else None
@@ -247,17 +264,17 @@ def install_picker_routing(raw: str | None, stock_menu: str | None = None) -> st
has_trailing_comma = cursor > target_start and untrimmed[cursor] == ","
separator = indent + ",\n" if target_value and not has_trailing_comma else ""
entries = {
- "style.theme": {
+ theme_key: {
"icon": "",
"label": "Theme",
"aliases": ["theme", "themes"],
- "action": f'if [[ -x {ROUTER} ]]; then {ROUTER} theme; else {stock_actions["style.theme"]}; fi',
+ "action": f'if [[ -x {ROUTER} ]]; then {ROUTER} theme; else {stock_actions["theme"]}; fi',
},
- "style.background": {
+ background_key: {
"icon": "",
"label": "Background",
"aliases": ["background", "wallpaper"],
- "action": f'if [[ -x {ROUTER} ]]; then {ROUTER} wallpaper; else {stock_actions["style.background"]}; fi',
+ "action": f'if [[ -x {ROUTER} ]]; then {ROUTER} wallpaper; else {stock_actions["background"]}; fi',
},
}
block = (
@@ -267,17 +284,17 @@ def install_picker_routing(raw: str | None, stock_menu: str | None = None) -> st
+ "\n"
+ separator
+ indent
- + json.dumps("style.theme")
+ + json.dumps(theme_key)
+ ": "
+ json.dumps(
- entries["style.theme"], ensure_ascii=False, separators=(",", ":")
+ entries[theme_key], ensure_ascii=False, separators=(",", ":")
)
+ ",\n"
+ indent
- + json.dumps("style.background")
+ + json.dumps(background_key)
+ ": "
+ json.dumps(
- entries["style.background"],
+ entries[background_key],
ensure_ascii=False,
separators=(",", ":"),
)
From 07c71f5d0ef0038232186a770474e415c87cd763 Mon Sep 17 00:00:00 2001
From: HANCORE-linux <230438592+HANCORE-linux@users.noreply.github.com>
Date: Fri, 23 Oct 2026 09:33:30 +0200
Subject: [PATCH 2/9] test(cli): cover appearance routing and unknown menu
families
---
tests/test_shibumi_suite.py | 18 ++++++++++++------
1 file changed, 12 insertions(+), 6 deletions(-)
diff --git a/tests/test_shibumi_suite.py b/tests/test_shibumi_suite.py
index 645fa5b..e652564 100755
--- a/tests/test_shibumi_suite.py
+++ b/tests/test_shibumi_suite.py
@@ -2157,11 +2157,12 @@ def test_picker_routes_fall_back_only_when_router_is_not_executable(self) -> Non
background = 'background=$(omarchy-theme-bg-switcher); [[ -n $background ]] && omarchy-theme-bg-set "$background"'
stock_menu = self.paths.omarchy_root / "default/omarchy/omarchy-menu.jsonc"
stock_menu.parent.mkdir(parents=True)
- for theme, theme_calls in (
- ('theme=$(omarchy-theme-switcher); [[ -n $theme ]] && omarchy-theme-set "$theme"', "theme-switcher\ntheme-set:\n"),
- ('omarchy-shell shell summon omarchy.image-picker \'{"source":"themes"}\'', 'native:<{"source":"themes"}>\n'),
+ for family, theme, theme_calls in (
+ ('style', 'theme=$(omarchy-theme-switcher); [[ -n $theme ]] && omarchy-theme-set "$theme"', "theme-switcher\ntheme-set:\n"),
+ ('style', 'omarchy-shell shell summon omarchy.image-picker \'{"source":"themes"}\'', 'native:<{"source":"themes"}>\n'),
+ ('appearance', 'omarchy-shell shell summon omarchy.image-picker \'{"source":"themes"}\'', 'native:<{"source":"themes"}>\n'),
):
- stock_menu.write_text(json.dumps({"style.theme": {"action": theme}, "style.background": {"action": background}}))
+ stock_menu.write_text(json.dumps({f"{family}.theme": {"action": theme}, f"{family}.background": {"action": background}}))
legacy_actions = {"style.theme": "theme", "style.background": "wallpaper"}
legacy = "{\n" + START_MARKER + "\n" + ",\n".join(json.dumps(key) + ": " + json.dumps({"action": '\"$HOME/.config/omarchy/plugins/hancore.shibumi.quick-access/scripts/shibumi-picker-route\" ' + value}) for key, value in legacy_actions.items()) + "\n" + END_MARKER + "\n}\n"
self.paths.menu_extension_file.parent.mkdir(parents=True, exist_ok=True)
@@ -2170,17 +2171,19 @@ def test_picker_routes_fall_back_only_when_router_is_not_executable(self) -> Non
transaction = SimpleNamespace(paths=self.paths, menu_extension_existed=True, write_menu_extension=payloads.append)
install_picker_menu_extension(transaction, self.runtime)
rendered = payloads[-1].decode()
+ self.assertEqual(set(_decoded(rendered)), {f"{family}.theme", f"{family}.background"})
+ self.assertEqual([entry["action"].split("; else ", 1)[1] for entry in _decoded(rendered).values()], [theme + "; fi", background + "; fi"])
self.assertEqual((rendered.count(START_MARKER), rendered.count(END_MARKER), remove_picker_routing(rendered)), (1, 1, "{\n}\n"))
for mode in ("missing", "non-executable", "present", "failing"):
router.unlink(missing_ok=True)
if mode != "missing":
router.write_text('#!/bin/bash\nprintf "router:<%s>\\n" "$1" >>"$ROUTE_LOG"\nexit ' + ("17" if mode == "failing" else "0") + "\n")
router.chmod(0o600 if mode == "non-executable" else 0o700)
- for key, argument in legacy_actions.items():
+ for key, argument in ((f"{family}.theme", "theme"), (f"{family}.background", "wallpaper")):
with self.subTest(theme=theme, mode=mode, route=key):
log.write_text("")
result = subprocess.run(["/bin/bash", "--noprofile", "--norc", "-c", _decoded(rendered)[key]["action"]], env={"HOME": str(home), "PATH": str(commands), "ROUTE_LOG": str(log)}, capture_output=True, text=True, timeout=3)
- expected = (theme_calls if key == "style.theme" else "background-switcher\nbackground-set:\n") if mode in ("missing", "non-executable") else "router:<" + argument + ">\n"
+ expected = (theme_calls if argument == "theme" else "background-switcher\nbackground-set:\n") if mode in ("missing", "non-executable") else "router:<" + argument + ">\n"
self.assertEqual((result.returncode, log.read_text()), (17 if mode == "failing" else 0, expected), result.stderr)
def test_menu_extension_supports_items_wrapper(self) -> None:
@@ -2195,6 +2198,9 @@ def test_menu_extension_supports_items_wrapper(self) -> None:
installed = install_picker_routing(original)
self.assertIn('"style.background"', installed)
self.assertEqual(remove_picker_routing(installed), original)
+ warnings = []
+ skipped = install_picker_routing(installed, '{"items": {}}', warnings=warnings)
+ self.assertEqual((skipped, warnings), (original, ["stock menu has neither style.theme nor appearance.theme; picker routing skipped"]))
def test_menu_refresh_retries_quattro_not_ready_response(self) -> None:
runtime = OmarchyRuntime()
From 92b936b42b01bc4274a7bd0ff6d514861cf44b81 Mon Sep 17 00:00:00 2001
From: HANCORE-linux <230438592+HANCORE-linux@users.noreply.github.com>
Date: Fri, 23 Oct 2026 09:33:30 +0200
Subject: [PATCH 3/9] fix(reactor): accept sequence-typed quote choices on Qt
6.12
---
hancore.shibumi.audio/AudioModel.js | 3 ++-
hancore.shibumi.bar/Bar.qml | 3 +++
hancore.shibumi.bar/styles/shibumi/ReactorEventLayer.qml | 3 ++-
3 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/hancore.shibumi.audio/AudioModel.js b/hancore.shibumi.audio/AudioModel.js
index 247c849..1a16a84 100644
--- a/hancore.shibumi.audio/AudioModel.js
+++ b/hancore.shibumi.audio/AudioModel.js
@@ -150,7 +150,8 @@ function streamRepresentsMprisPlayer(streamLabelValue, playerLabel) {
}
function mprisLabelsFor(players, predicate) {
- var values = Array.isArray(players) ? players : []
+ var values = players && typeof players.length === "number"
+ ? Array.prototype.slice.call(players) : []
var playing = []
var candidates = []
var playingProxies = []
diff --git a/hancore.shibumi.bar/Bar.qml b/hancore.shibumi.bar/Bar.qml
index f286956..9bc997e 100644
--- a/hancore.shibumi.bar/Bar.qml
+++ b/hancore.shibumi.bar/Bar.qml
@@ -3413,6 +3413,9 @@ Item {
admitted: root.restoreAdmitted && !providerSnapshotTransition.busy
&& !stateTransition.busy
onSettledContext: function(serial, result, context) {
+ // Qt 6.12 marshals nested signal arrays as sequences; keep validators strict.
+ if (context !== null && context !== undefined)
+ context = JSON.parse(JSON.stringify(context))
root.lastProviderUndoReceipt = null
const intent = context && context.intent ? context.intent : null
const saved = root.lastCatalogTransitionSnapshot
diff --git a/hancore.shibumi.bar/styles/shibumi/ReactorEventLayer.qml b/hancore.shibumi.bar/styles/shibumi/ReactorEventLayer.qml
index 112dced..ae2f569 100644
--- a/hancore.shibumi.bar/styles/shibumi/ReactorEventLayer.qml
+++ b/hancore.shibumi.bar/styles/shibumi/ReactorEventLayer.qml
@@ -52,7 +52,8 @@ Item {
quote: event.profile === "quote",
count: Math.max(1, Math.min(36, Number(event.count) || 1)),
gain: Math.max(0.1, Math.min(1, Number(event.gain) || 1)),
- choices: Array.isArray(event.choices) ? event.choices.slice(0, 64) : [],
+ choices: event.choices && typeof event.choices.length === "number"
+ ? Array.prototype.slice.call(event.choices, 0, 64) : [],
grid: null
}
if (pulse.kind === "text") {
From a269304da78a0b8ef05a55db2b7f5c8a02aed14d Mon Sep 17 00:00:00 2001
From: HANCORE-linux <230438592+HANCORE-linux@users.noreply.github.com>
Date: Fri, 23 Oct 2026 09:33:30 +0200
Subject: [PATCH 4/9] chore(validation): pin the Omarchy 4.0.6 validation host
---
.github/workflows/package-release.yml | 1 +
AGENTS.md | 4 +-
README.md | 4 +-
.../omarchy-forward-compat-246f33a2.json | 2 +-
.../omarchy-installed-package-v4.0.6.json | 56 +++++++++++++++++++
...marchy-installed-source-parity-v4.0.6.json | 42 ++++++++++++++
docs/architecture/quattro-compatibility.md | 55 +++++++++---------
docs/development/release.md | 13 +++--
docs/development/testing.md | 29 ++++++----
docs/development/validation-host.md | 27 ++++++---
scripts/collect-release-evidence | 31 ++++++----
scripts/generate-forward-baseline.py | 2 +-
tests/baseline-contract-regression.sh | 38 ++++++++-----
tests/contract-regression.sh | 1 +
.../native-runtime/catalog-resource-probe.py | 6 +-
tests/lib/baselines.sh | 33 +++++++++--
tests/lib/qs-runner.sh | 1 +
tests/native-catalog-resource-contract.py | 4 +-
tests/native-catalog-resource-regression.py | 16 ++++--
...alled-source-parity-contract-regression.sh | 2 +-
tests/panel-window-geometry-regression.sh | 3 +-
tests/quattro-contract-regression.sh | 2 +-
tests/test_package_release.py | 6 +-
23 files changed, 276 insertions(+), 102 deletions(-)
create mode 100644 contracts/baselines/omarchy-installed-package-v4.0.6.json
create mode 100644 contracts/baselines/omarchy-installed-source-parity-v4.0.6.json
diff --git a/.github/workflows/package-release.yml b/.github/workflows/package-release.yml
index 80af8f3..483ed64 100644
--- a/.github/workflows/package-release.yml
+++ b/.github/workflows/package-release.yml
@@ -108,6 +108,7 @@ jobs:
- name: Run the revision-bound lifecycle and host gate
env:
SHIBUMI_INSTALLED_SOURCE_OMARCHY_PATH: ${{ vars.SHIBUMI_INSTALLED_SOURCE_OMARCHY_PATH }}
+ SHIBUMI_NATIVE_CATALOG_OMARCHY_PATH: ${{ vars.SHIBUMI_NATIVE_CATALOG_OMARCHY_PATH }}
SHIBUMI_AGENTS_OMARCHY_PATH: ${{ vars.SHIBUMI_AGENTS_OMARCHY_PATH }}
SHIBUMI_FORWARD_COMPAT_OMARCHY_PATH: ${{ vars.SHIBUMI_FORWARD_COMPAT_OMARCHY_PATH }}
run: |
diff --git a/AGENTS.md b/AGENTS.md
index 0cb3f63..4cc379f 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -47,7 +47,7 @@ For host-facing changes, run all four pinned compatibility gates:
```bash
./tests/omarchy-installed-package-contract-regression.sh
-SHIBUMI_INSTALLED_SOURCE_OMARCHY_PATH=/tmp/omarchy-installed-source-v4.0.4 \
+SHIBUMI_INSTALLED_SOURCE_OMARCHY_PATH=/tmp/omarchy-installed-source-v4.0.6 \
./tests/omarchy-installed-source-parity-contract-regression.sh
SHIBUMI_AGENTS_OMARCHY_PATH=/tmp/omarchy-v4.0.0 \
./tests/omarchy-agents-contract-regression.sh
@@ -57,6 +57,8 @@ SHIBUMI_FORWARD_COMPAT_OMARCHY_PATH=/tmp/omarchy-forward-compat-246f33a2 \
The forward reference is exactly `246f33a2fef66411c990860d88e0823ae83987fc`;
its admission does not transfer fixture evidence to a live or differently packaged host.
+Native catalog resource validation separately retains v4.0.4 (`c668141e`), supplied
+through `SHIBUMI_NATIVE_CATALOG_OMARCHY_PATH`; do not substitute the stable 4.0.6 checkout.
Live acceptance must record what was actually exercised and must not claim unavailable hardware, credentials, multi-monitor, nested-compositor, or clean-chroot evidence as passed. Physical hardware gates require raw setup details, relevant command output, screenshots or video, and sanitized logs; fixtures cannot replace them.
diff --git a/README.md b/README.md
index 0aef764..8944947 100644
--- a/README.md
+++ b/README.md
@@ -19,8 +19,8 @@ process.
`0.1.1-beta.16.5` is the target GitHub prerelease. See the
[release notes](.github/release-notes/v0.1.1-beta.16.5.md) for changes. Before using an older version, read the
[backup and downgrade warning](docs/install.md#backup-before-downgrade).
-The current pinned host contracts use Omarchy and Omarchy Settings `4.0.4-1`
-(source tag `v4.0.4`, revision `c668141e`) with Quickshell `0.3.1-1`; the
+The current pinned host contracts use Omarchy and Omarchy Settings `4.0.6-1`
+(source tag `v4.0.6`, revision `237f1b40`) with Quickshell `0.3.2.r7.g2b4501a-1`; the
4.0.3 and 4.0.2 manifests remain optional compatibility baselines.
Multi-output acceptance was not run. See the
[Shibumi host compatibility record](docs/architecture/quattro-compatibility.md)
diff --git a/contracts/baselines/omarchy-forward-compat-246f33a2.json b/contracts/baselines/omarchy-forward-compat-246f33a2.json
index e281392..dc855c7 100644
--- a/contracts/baselines/omarchy-forward-compat-246f33a2.json
+++ b/contracts/baselines/omarchy-forward-compat-246f33a2.json
@@ -10,7 +10,7 @@
},
"quickshellPackage": {
"name": "quickshell",
- "version": "0.3.1-1"
+ "version": "0.3.2.r7.g2b4501a-1"
},
"subtrees": [
{
diff --git a/contracts/baselines/omarchy-installed-package-v4.0.6.json b/contracts/baselines/omarchy-installed-package-v4.0.6.json
new file mode 100644
index 0000000..aae96df
--- /dev/null
+++ b/contracts/baselines/omarchy-installed-package-v4.0.6.json
@@ -0,0 +1,56 @@
+{
+ "schemaVersion": 2,
+ "id": "installed-package-v4.0.6",
+ "profile": "installed-package",
+ "repository": "https://github.com/basecamp/omarchy",
+ "sourceRevision": "237f1b4071a0bff2296c6d740ba2b9fd695ebfa0",
+ "provenance": {
+ "kind": "package",
+ "packages": [
+ {
+ "name": "omarchy",
+ "version": "4.0.6-1"
+ },
+ {
+ "name": "omarchy-settings",
+ "version": "4.0.6-1"
+ }
+ ],
+ "subtreeOwners": {
+ "bin": "omarchy",
+ "config": "omarchy-settings",
+ "shell": "omarchy"
+ }
+ },
+ "quickshellPackage": {
+ "name": "quickshell",
+ "version": "0.3.2.r7.g2b4501a-1"
+ },
+ "notes": "Shell/config match the official v4.0.6 source exactly. Package bin has 446 entries versus 449 in source: omarchy-debug, omarchy-debug-idle and omarchy-upload-log are source-only. The cached official 4.0.6-1 package confirms these omissions; all shared executable bytes match. No identical bin-roster claim.",
+ "subtrees": [
+ {
+ "path": "shell",
+ "entryPolicy": "regular-files",
+ "entryCount": 222,
+ "inventorySha256": "be094886de039e6569034aebe40777521b799df2f4d4cf006e90655cadf0fb63",
+ "structureSha256": "beb84ff10f06fe0ae77660bf28f235fffeed89094de9e07b76cabd80b0e6dc66",
+ "contentSha256": "cd2f30c76300622ead687148eda7ce5bc8bfbc7816f2e2bbc75f234222ac9176"
+ },
+ {
+ "path": "bin",
+ "entryPolicy": "absolute-symlinks",
+ "entryCount": 446,
+ "inventorySha256": "0c907e83e9e849c6ef14433350d913a774d217c14c2d7d9b3a50913e3997b816",
+ "structureSha256": "2f204b9c8efa86afe90fff6a1de74d3652731c219a6d644e8db78a6553579683",
+ "contentSha256": "3575f16366ec21da3292f11df6ca801e0cc67e582256e9cb02cd07def8fae255"
+ },
+ {
+ "path": "config",
+ "entryPolicy": "regular-files",
+ "entryCount": 75,
+ "inventorySha256": "33995e20ae22ffef7a5710c859a5f5577429aae2ecc0976d1b7978838d4277fa",
+ "structureSha256": "0d2f5855e27b9bada33e17730c99a99fa6d5e4bd971cef722c0ec7d50c4e467f",
+ "contentSha256": "adb203e2024c62c397b77fd9b30627f41675f0fd6e1525ba3634061088cf036a"
+ }
+ ]
+}
diff --git a/contracts/baselines/omarchy-installed-source-parity-v4.0.6.json b/contracts/baselines/omarchy-installed-source-parity-v4.0.6.json
new file mode 100644
index 0000000..ce0f956
--- /dev/null
+++ b/contracts/baselines/omarchy-installed-source-parity-v4.0.6.json
@@ -0,0 +1,42 @@
+{
+ "schemaVersion": 2,
+ "id": "installed-source-parity-v4.0.6",
+ "profile": "installed-source-parity",
+ "repository": "https://github.com/basecamp/omarchy",
+ "sourceRevision": "237f1b4071a0bff2296c6d740ba2b9fd695ebfa0",
+ "provenance": {
+ "kind": "git",
+ "revision": "237f1b4071a0bff2296c6d740ba2b9fd695ebfa0"
+ },
+ "quickshellPackage": {
+ "name": "quickshell",
+ "version": "0.3.2.r7.g2b4501a-1"
+ },
+ "notes": "Shell/config match the installed 4.0.6-1 packages exactly. Source bin has 449 entries versus 446 packaged: omarchy-debug, omarchy-debug-idle and omarchy-upload-log are source-only. All shared executable bytes match; bin inventories remain independently pinned.",
+ "subtrees": [
+ {
+ "path": "shell",
+ "entryPolicy": "regular-files",
+ "entryCount": 222,
+ "inventorySha256": "be094886de039e6569034aebe40777521b799df2f4d4cf006e90655cadf0fb63",
+ "structureSha256": "beb84ff10f06fe0ae77660bf28f235fffeed89094de9e07b76cabd80b0e6dc66",
+ "contentSha256": "cd2f30c76300622ead687148eda7ce5bc8bfbc7816f2e2bbc75f234222ac9176"
+ },
+ {
+ "path": "bin",
+ "entryPolicy": "regular-files",
+ "entryCount": 449,
+ "inventorySha256": "2ebcf2fe4f323438858510c6cbfed017aa1646d3728d2a2686f8257b55b4d730",
+ "structureSha256": "107b94159d2f7ceabbf72f57be22522ebf5a080145d9b1cc59bc463299bfa8b0",
+ "contentSha256": "093e8400903a92709137a145d8fe865ea43ef648ae17b714a0d441cf7007180e"
+ },
+ {
+ "path": "config",
+ "entryPolicy": "regular-files",
+ "entryCount": 75,
+ "inventorySha256": "33995e20ae22ffef7a5710c859a5f5577429aae2ecc0976d1b7978838d4277fa",
+ "structureSha256": "0d2f5855e27b9bada33e17730c99a99fa6d5e4bd971cef722c0ec7d50c4e467f",
+ "contentSha256": "adb203e2024c62c397b77fd9b30627f41675f0fd6e1525ba3634061088cf036a"
+ }
+ ]
+}
diff --git a/docs/architecture/quattro-compatibility.md b/docs/architecture/quattro-compatibility.md
index 433709e..8945c5a 100644
--- a/docs/architecture/quattro-compatibility.md
+++ b/docs/architecture/quattro-compatibility.md
@@ -8,51 +8,51 @@ by this evidence.
## Current pinned host
-Beta.16.3 retains Beta.16's exact official Omarchy 4.0.4 baseline. These pins are not
+Beta.16.5.1 pins the exact official Omarchy 4.0.6 validation baseline. These pins are not
physical release acceptance. The historical Beta.13 physical host acceptance
below applies to its recorded single-output Omarchy 4.0.3 setup:
| Component | Observed value |
| --- | --- |
-| Pinned Omarchy package reference | `omarchy 4.0.4-1`, `omarchy-settings 4.0.4-1` |
-| Pinned official Omarchy source tag | `v4.0.4` (`c668141e9c42b13c80c9ca4ea108e11708c5e8a5`) |
-| Pinned source-parity revision | `c668141e9c42b13c80c9ca4ea108e11708c5e8a5` |
+| Pinned Omarchy package reference | `omarchy 4.0.6-1`, `omarchy-settings 4.0.6-1` |
+| Pinned official Omarchy source tag | `v4.0.6` (`237f1b4071a0bff2296c6d740ba2b9fd695ebfa0`) |
+| Pinned source-parity revision | `237f1b4071a0bff2296c6d740ba2b9fd695ebfa0` |
+| Native catalog source-only reference | `v4.0.4` (`c668141e9c42b13c80c9ca4ea108e11708c5e8a5`, 183 shell files) |
| Immutable Agents reference | `v4.0.0` (`f0020448ca87329199de7cb12f2015ebc4a3e5e7`) |
| Immutable forward-compatibility revision | `246f33a2fef66411c990860d88e0823ae83987fc` |
-| Quickshell package | `quickshell 0.3.1-1` |
+| Quickshell package | `quickshell 0.3.2.r7.g2b4501a-1` |
| Recorded Beta.13 physical validation date (4.0.3) | 2026-09-13 |
The installed package is the primary host-build identity. The new complete
-source-parity checkout is pinned to the official `v4.0.4` tag. The 4.0.3 and
-4.0.2 package and source manifests remain immutable optional compatibility
-references. The older Agents-only gate remains explicitly pinned to `v4.0.0`;
+source-parity checkout is pinned to the official `v4.0.6` tag. The 4.0.4, 4.0.3 and
+4.0.2 package/source manifests and 4.0.5 source manifest remain immutable history. The older Agents-only gate remains explicitly pinned to `v4.0.0`;
the separate
`246f33a2` snapshot supersedes `4c1b4cb3` as the bounded forward reference;
all earlier manifests remain unchanged.
-Manifest, panel geometry and focused Quattro/style checks pass; this is not a
-complete candidate forward-gate pass and does not follow a moving branch.
+Historical focused forward checks do not establish a new-stack candidate pass;
+complete candidate gates must be recorded separately. No pin follows a moving branch.
The package-managed baseline records these authoritative production anchors:
| Contract-sensitive file | SHA-256 |
| --- | --- |
| `shell/services/PluginRegistry.qml` | `8466127c53037b80b582544610b0bdf78a86764e4f037a3b9ce360d107359803` |
-| `shell/shell.qml` | `4a4b7694e5b9e0bd952ce0efa2d6dc2cea44cdfa98cc2f442e40fe41cbc1beab` |
-| `shell/Ui/KeyboardPanel.qml` | `96245f2da8d38baa0017caa285d596c485bd19a3a4d2cd1675bee9d84ffba42d` |
-| `shell/plugins/bar/Bar.qml` | `9874c0f36271840b43002890ae333c83097df7f4cff0bade81536a41ed83590b` |
+| `shell/shell.qml` | `1c390bb1703a8372a7d3a614bc44513b6cc91eee21f4bd507198e8601310e617` |
+| `shell/Ui/KeyboardPanel.qml` | `c8b3b0fd52d8a79469675e925ff851e1dd0588eb1eeb90bd4df004a4c7d72a0a` |
+| `shell/plugins/bar/Bar.qml` | `a8f27b3d8f29f8b8c14a5e578ad0617e6035375ccab0178a28c435e80a2822f0` |
| `shell/plugins/bar/BarModel.js` | `908f30edce60dcba46d2039ba3d501fd0faa35fa1f90b7dbda69439288f8a8d0` |
The table is a human-readable set of important anchors, not the complete
machine identity. Three separate manifests bind every file or symlink below the
consumed `shell`, `bin`, and `config` subtrees without conflating their claims:
-- [`omarchy-installed-package-v4.0.4.json`](../../contracts/baselines/omarchy-installed-package-v4.0.4.json)
- records the package-managed `omarchy 4.0.4-1` and
- `omarchy-settings 4.0.4-1` layout;
-- [`omarchy-installed-source-parity-v4.0.4.json`](../../contracts/baselines/omarchy-installed-source-parity-v4.0.4.json)
- records the full Git checkout of the official `v4.0.4` source tag;
+- [`omarchy-installed-package-v4.0.6.json`](../../contracts/baselines/omarchy-installed-package-v4.0.6.json)
+ records the package-managed `omarchy 4.0.6-1` and
+ `omarchy-settings 4.0.6-1` layout;
+- [`omarchy-installed-source-parity-v4.0.6.json`](../../contracts/baselines/omarchy-installed-source-parity-v4.0.6.json)
+ records the full Git checkout of the official `v4.0.6` source tag;
- the immutable 4.0.3 package/source manifests retain the previous physical
- acceptance baseline without claiming that acceptance for 4.0.4;
+ acceptance baseline without claiming that acceptance for 4.0.6;
- [`omarchy-forward-compat-246f33a2.json`](../../contracts/baselines/omarchy-forward-compat-246f33a2.json)
records the immutable forward-compatibility snapshot at the recorded upstream
revision. It does not follow the moving remote branch.
@@ -122,12 +122,13 @@ shared panel click-forwarding implementation remains unchanged.
### Quickshell provenance and evidence limits
-The forward manifest records the independently verified Arch `quickshell 0.3.1-1`
-validation package (package ownership and all 123 installed files checked).
-The upstream install list names unversioned `quickshell`; migration `1787399318`
-records the return to 0.3.1's synchronous termination. A reported edge host uses
-Omarchy-repository `0.3.2-6`; no result here establishes that package's live
-acceptance. Source contracts and isolated component fixtures do not establish
+The active package/parity/forward manifests record Omarchy-repository
+`quickshell 0.3.2.r7.g2b4501a-1`, binary revision
+`2b4501a282689792b62e94f3fb30d8f512324fe6`. Historical Arch `0.3.1-1`
+validation is not relabeled. The upstream install list names unversioned
+`quickshell`; migration `1787399318` is historical context, not current package
+provenance. A reported edge host uses `0.3.2-6`; no result here establishes
+that package's live acceptance. Source contracts and isolated component fixtures do not establish
real stock-bar switching, physical output behavior or desktop acceptance on it.
## What Shibumi validates
@@ -154,7 +155,7 @@ Run the repository contract suite separately against all four host proof gates:
```bash
./tests/omarchy-installed-package-contract-regression.sh
-SHIBUMI_INSTALLED_SOURCE_OMARCHY_PATH=/path/to/omarchy-v4.0.4 \
+SHIBUMI_INSTALLED_SOURCE_OMARCHY_PATH=/path/to/omarchy-v4.0.6 \
./tests/omarchy-installed-source-parity-contract-regression.sh
SHIBUMI_AGENTS_OMARCHY_PATH=/path/to/omarchy-v4.0.0 \
./tests/omarchy-agents-contract-regression.sh
@@ -162,7 +163,7 @@ SHIBUMI_FORWARD_COMPAT_OMARCHY_PATH=/path/to/omarchy-forward-compat-246f33a2 \
./tests/omarchy-forward-compat-contract-regression.sh
```
-The 4.0.4 manifest records exact observed bytes and package provenance; it
+The 4.0.6 manifests record exact observed bytes and package provenance; it
does not by itself establish live acceptance. If any recorded host file changes,
Shibumi remains on the previous accepted baseline until the affected contracts
and live workflows pass again.
diff --git a/docs/development/release.md b/docs/development/release.md
index aa60f36..5894b1c 100644
--- a/docs/development/release.md
+++ b/docs/development/release.md
@@ -114,15 +114,15 @@ Run the complete contract against all four pinned Quattro proof axes. Every
external baseline variable must name a clean, canonical, absolute Git checkout
root at the revision pinned by its baseline manifest. In particular,
`SHIBUMI_INSTALLED_SOURCE_OMARCHY_PATH` must be a clean absolute checkout at
-`c668141e9c42b13c80c9ca4ea108e11708c5e8a5`; tracked, staged, untracked, or
+`237f1b4071a0bff2296c6d740ba2b9fd695ebfa0`; tracked, staged, untracked, or
submodule dirt fails the gate.
```bash
cd /path/to/shibumi
./tests/omarchy-installed-package-contract-regression.sh
-SHIBUMI_INSTALLED_SOURCE_OMARCHY_PATH=/path/to/omarchy-v4.0.4 \
+SHIBUMI_INSTALLED_SOURCE_OMARCHY_PATH=/path/to/omarchy-v4.0.6 \
./tests/omarchy-installed-source-parity-contract-regression.sh
-SHIBUMI_INSTALLED_SOURCE_OMARCHY_PATH=/path/to/omarchy-v4.0.4 \
+SHIBUMI_NATIVE_CATALOG_OMARCHY_PATH=/path/to/omarchy-v4.0.4 \
python3 tests/native-catalog-resource-regression.py
SHIBUMI_AGENTS_OMARCHY_PATH=/path/to/omarchy-v4.0.0 \
./tests/omarchy-agents-contract-regression.sh
@@ -133,10 +133,11 @@ SHIBUMI_FORWARD_COMPAT_OMARCHY_PATH=/path/to/omarchy-forward-compat-246f33a2 \
The forward checkout must be exactly `246f33a2fef66411c990860d88e0823ae83987fc`.
Private forward-alignment patches do not authorize runner reprovisioning,
Actions-variable changes, installation, or publication. Record Quickshell
-package provenance and keep `0.3.1-1` fixture results separate from edge
-`0.3.2-6` live acceptance.
+package provenance: active package/parity/forward gates require Omarchy-repository
+`0.3.2.r7.g2b4501a-1`. Historical `0.3.1-1` fixtures and edge `0.3.2-6`
+live acceptance are separate evidence.
-The release-evidence runner preflights all three external checkouts before any long host gate. Every path component must be canonical and must not be a symbolic link. The runner passes the accepted canonical paths to every gate. It verifies each checkout root, pinned HEAD commit, Git tree, cleanliness, complete tracked/untracked working-tree digest, file count, file type, and mode. Malformed, relative, missing, dirty, or wrong-revision inputs fail closed. The NativeCatalog resource regression is a required gate and resolves its unchanged pinned 4.0.4 shell assertion from `SHIBUMI_INSTALLED_SOURCE_OMARCHY_PATH/shell`; its existing warmup and resource ceilings are not release-runner overrides.
+The release-evidence runner preflights all four external checkouts before any long host gate. Every path component must be canonical and must not be a symbolic link. The runner passes the accepted canonical paths to every gate. It verifies each checkout root, pinned HEAD commit, Git tree, cleanliness, complete tracked/untracked working-tree digest, file count, file type, and mode. Malformed, relative, missing, dirty, or wrong-revision inputs fail closed. The NativeCatalog resource regression is a required gate and resolves its unchanged pinned 4.0.4 shell assertion from `SHIBUMI_NATIVE_CATALOG_OMARCHY_PATH/shell`; its existing warmup and resource ceilings are not release-runner overrides.
The candidate and all external-baseline identities are revalidated immediately before and after every evidence gate and once more after the final gate. Candidate content, mode, staged-state, untracked-state, commit, or tree drift and baseline cleanliness, revision, tree, content, or mode drift invalidate the evidence. These checks detect drift present at a validation boundary; they do not detect an input that is changed and restored entirely while one gate is running. The validation runner therefore remains a trusted, access-controlled system, and concurrent writers must be excluded for the full run. Gate commands are repository-owned tests from the exact reviewed commit, so a malicious gate means the candidate itself is already compromised and is outside the collector's threat model. Same-UID replacement of in-progress log or archive paths and symlink manipulation of output-parent directories are accepted release-machine risks; use a clean, non-symlinked output tree with no untrusted or concurrent writers.
diff --git a/docs/development/testing.md b/docs/development/testing.md
index 531826b..4db39cc 100644
--- a/docs/development/testing.md
+++ b/docs/development/testing.md
@@ -49,16 +49,16 @@ baseline jobs. The installed-package job defaults to the package-managed host:
```
The installed-source-parity job requires an explicit clean Git checkout of the
-official `v4.0.4` source revision used by the installed package:
+official `v4.0.6` source revision used by the installed package:
```bash
-SHIBUMI_INSTALLED_SOURCE_OMARCHY_PATH=/path/to/omarchy-v4.0.4 \
+SHIBUMI_INSTALLED_SOURCE_OMARCHY_PATH=/path/to/omarchy-v4.0.6 \
./tests/omarchy-installed-source-parity-contract-regression.sh
```
-For an additional 4.0.2 compatibility run, invoke the aggregate contract with
-the historical selector and its exact checkout. Release jobs themselves pin
-4.0.4 and never inherit this selector:
+Historical 4.0.2 compatibility requires its recorded Quickshell package as well
+as the exact source checkout. The following historical command is not a current
+validation-host gate. Release jobs pin 4.0.6 and never inherit this selector:
```bash
OMARCHY_PATH=/path/to/omarchy-v4.0.2 \
@@ -90,10 +90,16 @@ Every host-bound test both imports `tests/lib/baselines.sh` and invokes its
loader. The complete-host jobs select three repository-owned manifests with
non-overlapping claims; the Agents job selects its separate narrower manifest:
-- `contracts/baselines/omarchy-installed-package-v4.0.4.json` binds the
- package-managed `omarchy 4.0.4-1`, `omarchy-settings 4.0.4-1` layout;
-- `contracts/baselines/omarchy-installed-source-parity-v4.0.4.json` binds the
- official `v4.0.4` source form at `c668141e9c42b13c80c9ca4ea108e11708c5e8a5`;
+- `contracts/baselines/omarchy-installed-package-v4.0.6.json` binds the
+ package-managed `omarchy 4.0.6-1`, `omarchy-settings 4.0.6-1` layout;
+- `contracts/baselines/omarchy-installed-source-parity-v4.0.6.json` binds the
+ official `v4.0.6` source form at `237f1b4071a0bff2296c6d740ba2b9fd695ebfa0`;
+- 4.0.4 package/source and 4.0.5 source manifests remain historical. The native
+ catalog resource/runtime source remains 4.0.4 (`c668141e`, 183 shell files).
+ Supply `SHIBUMI_NATIVE_CATALOG_OMARCHY_PATH=/path/to/omarchy-v4.0.4` for the
+ resource gate; explicit `--native-shell` inputs to native runtime/fallback
+ fixtures retain the same pin. This fourth collector input does not assert the
+ historical manifest's old Quickshell package on the current host;
- the `contracts/baselines/omarchy-installed-package-v4.0.3.json` and
`contracts/baselines/omarchy-installed-source-parity-v4.0.3.json` manifests
remain immutable optional compatibility references alongside 4.0.2; choose
@@ -101,8 +107,9 @@ non-overlapping claims; the Agents job selects its separate narrower manifest:
`SHIBUMI_OMARCHY_BASELINE_VERSION=4.0.2`;
- `contracts/baselines/omarchy-forward-compat-246f33a2.json` records
`246f33a2fef66411c990860d88e0823ae83987fc` for the separate forward gate.
- Its Quickshell provenance is the independently verified Arch `0.3.1-1`
- validation package; edge-host `0.3.2-6` results require separate evidence.
+ Its active Quickshell provenance is the independently verified Omarchy-repository
+ `0.3.2.r7.g2b4501a-1` package, also required for 4.0.6 package/parity gates;
+ historical Arch `0.3.1-1` and edge-host `0.3.2-6` results remain separate.
Six native layout sections must remain distinct from three presentation regions.
Use the existing State/lifecycle and inline-delta fixtures; tray data is deferred,
not dropped. The stable 37-step bar-switch and 140-case renderer rest checks,
diff --git a/docs/development/validation-host.md b/docs/development/validation-host.md
index a2b2743..8140324 100644
--- a/docs/development/validation-host.md
+++ b/docs/development/validation-host.md
@@ -10,7 +10,7 @@ See [release workflow](release.md) and [testing](testing.md).
## 1. Host and trust boundary
-- Require Omarchy and Omarchy Settings `4.0.4-1`, Quickshell `0.3.1-1`, an active
+- Require Omarchy and Omarchy Settings `4.0.6-1`, Quickshell `0.3.2.r7.g2b4501a-1`, an active
unlocked Wayland session, and the tools required by the repository gates.
Record `pacman -Q omarchy omarchy-settings quickshell` and package provenance.
A new host version needs new contract review, not edited pins to bypass failure.
@@ -113,14 +113,16 @@ reviewed Shibumi checkout, match these manifest `sourceRevision` values exactly:
| Profile / manifest in `contracts/baselines/` | Revision | Repository variable |
| --- | --- | --- |
-| `omarchy-installed-source-parity-v4.0.4.json` | `c668141e9c42b13c80c9ca4ea108e11708c5e8a5` | `SHIBUMI_INSTALLED_SOURCE_OMARCHY_PATH` |
+| `omarchy-installed-source-parity-v4.0.6.json` | `237f1b4071a0bff2296c6d740ba2b9fd695ebfa0` | `SHIBUMI_INSTALLED_SOURCE_OMARCHY_PATH` |
+| `omarchy-installed-source-parity-v4.0.4.json` (native catalog source only) | `c668141e9c42b13c80c9ca4ea108e11708c5e8a5` | `SHIBUMI_NATIVE_CATALOG_OMARCHY_PATH` |
| `omarchy-agents-v4.0.0.json` | `f0020448ca87329199de7cb12f2015ebc4a3e5e7` | `SHIBUMI_AGENTS_OMARCHY_PATH` |
| `omarchy-forward-compat-246f33a2.json` | `246f33a2fef66411c990860d88e0823ae83987fc` | `SHIBUMI_FORWARD_COMPAT_OMARCHY_PATH` |
-The private Beta.16.5 alignment round uses an isolated reference checkout and
-Arch Quickshell `0.3.1-1` (package ownership/integrity independently checked).
-It does not reprovision the runner or change its Actions variable. Reported edge
-Quickshell `0.3.2-6` is a separate validation variable, not covered by that manifest.
+Beta.16.5.1 records the installed Omarchy-repository Quickshell package above,
+whose binary is `Quickshell 0.3.2 (revision 2b4501a282689792b62e94f3fb30d8f512324fe6, distributed by Omarchy)`.
+Historical Beta.16.5 fixtures used Arch `0.3.1-1`; their results are not relabeled.
+Reported edge `0.3.2-6` remains a separate validation variable.
+Repository wiring does not authorize runner provisioning or Actions-variable writes.
After provisioning approval, clone `https://github.com/basecamp/omarchy` separately
for each profile and `git checkout --detach `. Check `HEAD^{commit}`,
@@ -129,13 +131,20 @@ A tag name or clean status alone is not a byte/inventory proof. Use the existing
`tests/lib/baselines.sh` validator, not a new checksum implementation. From the
Shibumi checkout, in a fresh Bash process for each profile, supply `OMARCHY_PATH`
and `SHIBUMI_OMARCHY_BASELINE_PROFILE` (`installed-source-parity`, `agents-current`,
-or `forward-compat`), set `SHIBUMI_OMARCHY_BASELINE_VERSION=4.0.4`, then run:
+or `forward-compat`), set `SHIBUMI_OMARCHY_BASELINE_VERSION=4.0.6`, then run:
```bash
source tests/lib/baselines.sh
shibumi_load_omarchy_baseline
```
+For the native catalog source, set `SHIBUMI_NATIVE_CATALOG_OMARCHY_PATH` to its
+separate clean 4.0.4 checkout and call `shibumi_load_native_catalog_baseline`
+instead. This validates the historical source tree, not its old Quickshell
+package claim. Native runtime/resource fixtures retain the c668141e 183-file
+shell inventory; warm PSS growth has a reviewed 768 KiB ceiling for the new
+host stack, with other bounds unchanged. These are not 4.0.6 source proofs.
+
Repeat for `installed-package` against the actual installed `/usr/share/omarchy`;
never relocate or rewrite it to mimic package provenance. Validators check the
manifest schema, exact source revision, consumed hashes/subtree inventories and
@@ -146,7 +155,7 @@ baseline identities at gate boundaries. No concurrent writers are permitted.
## 5. Repository settings and controlled release window
-- Set the three repository **Actions variables** above to the accepted absolute
+- Set the four repository **Actions variables** above to the accepted absolute
paths on the validation host, not shell expressions like `$HOME` or `~`. They
are paths, not secrets. Each variable write needs its own approval.
- Treat the repository as public/untrusted input: require approval for **all
@@ -162,7 +171,7 @@ baseline identities at gate boundaries. No concurrent writers are permitted.
- Protect release branches and enforce immutable `v*` tags (no update/deletion,
no routine bypass; restrict creation to authorized maintainers). Record actual
settings and repository visibility; do not claim they are configured from docs.
-- After separate collector Go: clean accepted commit, `umask 022`, all three
+- After separate collector Go: clean accepted commit, `umask 022`, all four
baseline variables, no ambient Git overrides, serial collector **14/14**.
Use the release workflow's exact-commit procedure; no `--allow-dirty` acceptance.
Any red gate stops the sequence for diagnosis, not blind retry or a weaker gate.
diff --git a/scripts/collect-release-evidence b/scripts/collect-release-evidence
index 3dbf2e1..aebeec6 100755
--- a/scripts/collect-release-evidence
+++ b/scripts/collect-release-evidence
@@ -19,19 +19,24 @@ from typing import Any, Callable
ROOT = Path(__file__).resolve().parents[1]
-HOST_PROBE_MANIFEST = Path("contracts/baselines/omarchy-installed-package-v4.0.4.json")
+HOST_PROBE_MANIFEST = Path("contracts/baselines/omarchy-installed-package-v4.0.6.json")
def host_probe_expectations() -> tuple[tuple, dict[str, str]]:
raw = (ROOT / HOST_PROBE_MANIFEST).read_bytes()
manifest = json.loads(raw)
- versions = {p["name"]: p["version"].rsplit("-", 1)[0]
+ versions = {p["name"]: p["version"]
for p in [*manifest["provenance"]["packages"], manifest["quickshellPackage"]]}
+ # Reviewed package-to-binary mapping: the VCS pkgver suffix is not part of
+ # the binary's semantic version. Unknown packages require a new review.
+ binary_version = {
+ "0.3.2.r7.g2b4501a-1": "Quickshell 0.3.2 (revision 2b4501a282689792b62e94f3fb30d8f512324fe6, distributed by Omarchy)",
+ }[versions["quickshell"]]
probes = (
- ("omarchyPackage", ("pacman", "-Q", "omarchy"), f"omarchy {versions['omarchy']}-"),
- ("omarchySettingsPackage", ("pacman", "-Q", "omarchy-settings"), f"omarchy-settings {versions['omarchy-settings']}-"),
- ("quickshellPackage", ("pacman", "-Q", "quickshell"), f"quickshell {versions['quickshell']}-"),
- ("quickshellVersion", ("quickshell", "--version"), f"Quickshell {versions['quickshell']}"),
+ ("omarchyPackage", ("pacman", "-Q", "omarchy"), f"omarchy {versions['omarchy']}"),
+ ("omarchySettingsPackage", ("pacman", "-Q", "omarchy-settings"), f"omarchy-settings {versions['omarchy-settings']}"),
+ ("quickshellPackage", ("pacman", "-Q", "quickshell"), f"quickshell {versions['quickshell']}"),
+ ("quickshellVersion", ("quickshell", "--version"), binary_version),
)
return probes, {"path": str(HOST_PROBE_MANIFEST), "sha256": hashlib.sha256(raw).hexdigest()}
@@ -56,6 +61,10 @@ IDENTITY_FIELDS = (
EXTERNAL_BASELINES: tuple[tuple[str, Path], ...] = (
(
"SHIBUMI_INSTALLED_SOURCE_OMARCHY_PATH",
+ ROOT / "contracts/baselines/omarchy-installed-source-parity-v4.0.6.json",
+ ),
+ (
+ "SHIBUMI_NATIVE_CATALOG_OMARCHY_PATH",
ROOT / "contracts/baselines/omarchy-installed-source-parity-v4.0.4.json",
),
(
@@ -838,7 +847,7 @@ def run_guarded_evidence_gate(
def probe_host_identity(
- name: str, command: tuple[str, ...], expected_prefix: str
+ name: str, command: tuple[str, ...], expected: str, *, exact: bool = True
) -> dict[str, Any]:
try:
result = subprocess.run(
@@ -859,7 +868,9 @@ def probe_host_identity(
"error": str(error),
}
output = (result.stdout or result.stderr).strip()
- valid = result.returncode == 0 and output.startswith(expected_prefix)
+ valid = result.returncode == 0 and (
+ output == expected if exact else output.startswith(expected)
+ )
return {
"name": name,
"command": list(command),
@@ -871,13 +882,13 @@ def probe_host_identity(
def probe_omarchy_package() -> dict[str, Any]:
stable = probe_host_identity(
- "omarchyPackage", ("pacman", "-Q", "omarchy"), "omarchy "
+ "omarchyPackage", ("pacman", "-Q", "omarchy"), "omarchy ", exact=False
)
if stable["valid"]:
return stable
development = probe_host_identity(
- "omarchyDevPackage", ("pacman", "-Q", "omarchy-dev"), "omarchy-dev "
+ "omarchyDevPackage", ("pacman", "-Q", "omarchy-dev"), "omarchy-dev ", exact=False
)
if development["valid"]:
# This is useful diagnostic evidence for development hosts, but it is
diff --git a/scripts/generate-forward-baseline.py b/scripts/generate-forward-baseline.py
index ed1d1b7..284a3b9 100755
--- a/scripts/generate-forward-baseline.py
+++ b/scripts/generate-forward-baseline.py
@@ -66,4 +66,4 @@ def digest(data):
print(json.dumps(dict(schemaVersion=2, id="forward-compat-" + revision[:8],
profile="forward-compat", repository="https://github.com/basecamp/omarchy",
sourceRevision=revision, provenance=dict(kind="git", revision=revision),
- quickshellPackage=dict(name="quickshell", version="0.3.1-1"), subtrees=subtrees), indent=2))
+ quickshellPackage=dict(name="quickshell", version="0.3.2.r7.g2b4501a-1"), subtrees=subtrees), indent=2))
diff --git a/tests/baseline-contract-regression.sh b/tests/baseline-contract-regression.sh
index aa4fdc1..3e58732 100755
--- a/tests/baseline-contract-regression.sh
+++ b/tests/baseline-contract-regression.sh
@@ -4,8 +4,10 @@ set -euo pipefail
repo_root=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/.." && pwd)
helper="$repo_root/tests/lib/baselines.sh"
-installed_package_baseline="$repo_root/contracts/baselines/omarchy-installed-package-v4.0.4.json"
-installed_source_baseline="$repo_root/contracts/baselines/omarchy-installed-source-parity-v4.0.4.json"
+installed_package_baseline="$repo_root/contracts/baselines/omarchy-installed-package-v4.0.6.json"
+installed_source_baseline="$repo_root/contracts/baselines/omarchy-installed-source-parity-v4.0.6.json"
+native_package_baseline="$repo_root/contracts/baselines/omarchy-installed-package-v4.0.4.json"
+native_source_baseline="$repo_root/contracts/baselines/omarchy-installed-source-parity-v4.0.4.json"
previous_package_baseline="$repo_root/contracts/baselines/omarchy-installed-package-v4.0.3.json"
previous_source_baseline="$repo_root/contracts/baselines/omarchy-installed-source-parity-v4.0.3.json"
compat_package_baseline="$repo_root/contracts/baselines/omarchy-installed-package-v4.0.2.json"
@@ -68,6 +70,8 @@ source "$helper"
for manifest in \
"$installed_package_baseline" \
"$installed_source_baseline" \
+ "$native_package_baseline" \
+ "$native_source_baseline" \
"$repo_root/contracts/baselines/omarchy-installed-source-parity-v4.0.5.json" \
"$previous_package_baseline" \
"$previous_source_baseline" \
@@ -81,20 +85,20 @@ for manifest in \
done
jq -e '
- .id == "installed-package-v4.0.4"
+ .id == "installed-package-v4.0.6"
and .profile == "installed-package"
- and .sourceRevision == "c668141e9c42b13c80c9ca4ea108e11708c5e8a5"
+ and .sourceRevision == "237f1b4071a0bff2296c6d740ba2b9fd695ebfa0"
and .provenance.kind == "package"
and ([.provenance.packages[] | [.name, .version]] | sort) == ([
- ["omarchy", "4.0.4-1"],
- ["omarchy-settings", "4.0.4-1"]
+ ["omarchy", "4.0.6-1"],
+ ["omarchy-settings", "4.0.6-1"]
] | sort)
and .provenance.subtreeOwners == {
"bin": "omarchy",
"config": "omarchy-settings",
"shell": "omarchy"
}
- and .quickshellPackage == {"name": "quickshell", "version": "0.3.1-1"}
+ and .quickshellPackage == {"name": "quickshell", "version": "0.3.2.r7.g2b4501a-1"}
and ([.subtrees[] | select(.path == "bin" and .entryPolicy == "absolute-symlinks")] | length) == 1
and all(.subtrees[] | select(.path != "bin"); .entryPolicy == "regular-files")
' "$installed_package_baseline" >/dev/null \
@@ -133,19 +137,25 @@ jq -e '
|| fail 'historical source-parity baseline identity is invalid'
jq -e '
- .id == "installed-source-parity-v4.0.4"
+ .id == "installed-source-parity-v4.0.6"
and .profile == "installed-source-parity"
- and .sourceRevision == "c668141e9c42b13c80c9ca4ea108e11708c5e8a5"
+ and .sourceRevision == "237f1b4071a0bff2296c6d740ba2b9fd695ebfa0"
and .provenance.kind == "git"
and .provenance.revision == .sourceRevision
- and .quickshellPackage == {"name": "quickshell", "version": "0.3.1-1"}
+ and .quickshellPackage == {"name": "quickshell", "version": "0.3.2.r7.g2b4501a-1"}
and all(.subtrees[]; .entryPolicy == "regular-files")
' "$installed_source_baseline" >/dev/null \
|| fail 'installed-source-parity baseline identity or provenance is invalid'
[[ $(sha256sum "$installed_package_baseline" | awk '{print $1}') \
+ == 4a62fa1b0def2e1618ddca2696b12ba7e0d50e14ab00663722e88c3c9320b258 ]] \
+ || fail 'Omarchy 4.0.6 installed-package manifest bytes drifted'
+[[ $(sha256sum "$installed_source_baseline" | awk '{print $1}') \
+ == 13b3309b6c3b3fea25f24a7e6cd259a01979052b884b3a7540ae1880f02c1469 ]] \
+ || fail 'Omarchy 4.0.6 source-parity manifest bytes drifted'
+[[ $(sha256sum "$native_package_baseline" | awk '{print $1}') \
== 9dfb421f339f282d762a1d0a000dc038bbe6f13e1b5f65c1f5e428d9522152c2 ]] \
|| fail 'Omarchy 4.0.4 installed-package manifest bytes drifted'
-[[ $(sha256sum "$installed_source_baseline" | awk '{print $1}') \
+[[ $(sha256sum "$native_source_baseline" | awk '{print $1}') \
== 96229f17b4c18a077f484c681d1331865a3558b8c27c19b3cafaf047f91042dc ]] \
|| fail 'Omarchy 4.0.4 source-parity manifest bytes drifted'
[[ $(sha256sum "$previous_package_baseline" | awk '{print $1}') \
@@ -181,7 +191,7 @@ for parity_subtree in shell config; do
source_row=$(jq -c --arg path "$parity_subtree" \
'.subtrees[] | select(.path == $path)' "$installed_source_baseline")
[[ $package_row == "$source_row" ]] \
- || fail "Omarchy 4.0.4 package/source parity drifted: $parity_subtree"
+ || fail "Omarchy 4.0.6 package/source parity drifted: $parity_subtree"
done
jq -e '
@@ -190,7 +200,7 @@ jq -e '
and .sourceRevision == "246f33a2fef66411c990860d88e0823ae83987fc"
and .provenance.kind == "git"
and .provenance.revision == .sourceRevision
- and .quickshellPackage == {"name": "quickshell", "version": "0.3.1-1"}
+ and .quickshellPackage == {"name": "quickshell", "version": "0.3.2.r7.g2b4501a-1"}
and all(.subtrees[]; .entryPolicy == "regular-files")
' "$forward_compat_baseline" >/dev/null \
|| fail 'forward-compat baseline identity or provenance is invalid'
@@ -308,7 +318,7 @@ shibumi_validate_omarchy_baseline_schema "$agents_fixture" \
|| fail 'baseline replacement probe could not capture its initial snapshot'
printf '{"sourceRevision":"replaced"}\n' >"$agents_fixture"
[[ $(jq -r '.sourceRevision' "$agents_fixture") \
- == c668141e9c42b13c80c9ca4ea108e11708c5e8a5 ]] \
+ == 237f1b4071a0bff2296c6d740ba2b9fd695ebfa0 ]] \
|| fail 'baseline replacement changed an already accepted snapshot'
if shibumi_validate_omarchy_baseline_schema \
"$agents_fixture" >/dev/null 2>&1; then
diff --git a/tests/contract-regression.sh b/tests/contract-regression.sh
index 5bb7169..bbb1448 100755
--- a/tests/contract-regression.sh
+++ b/tests/contract-regression.sh
@@ -1,6 +1,7 @@
#!/usr/bin/env bash
set -euo pipefail
+export QT_FORCE_STDERR_LOGGING=1
repo_root=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/.." && pwd)
source "$repo_root/tests/lib/baselines.sh"
diff --git a/tests/fixtures/native-runtime/catalog-resource-probe.py b/tests/fixtures/native-runtime/catalog-resource-probe.py
index 6ec1cb0..00b49b6 100644
--- a/tests/fixtures/native-runtime/catalog-resource-probe.py
+++ b/tests/fixtures/native-runtime/catalog-resource-probe.py
@@ -30,9 +30,9 @@
RELEASE_QUIET_SECONDS = 5.2
COLD_INITIALIZATION_CYCLES = 3
WARM_CYCLES = 3
-# The 512 KiB warm-state allowance is unchanged. Cold reconstruction is measured
-# separately, and the third cold-cycle sample becomes the warm-state baseline.
-PSS_GROWTH_CEILING_KIB = 512
+# The reviewed 768 KiB warm-state allowance matches the resource wrapper.
+# Cold reconstruction is separate; the third cold sample is the warm baseline.
+PSS_GROWTH_CEILING_KIB = 768
# Warm acquisitions include the host and every observed acquisition descendant.
# The allowance leaves headroom over calibrated positives but rejects a 1s burn
# in either QML or the launcher/custodian/IPC tree.
diff --git a/tests/lib/baselines.sh b/tests/lib/baselines.sh
index 7adc91c..b612d97 100644
--- a/tests/lib/baselines.sh
+++ b/tests/lib/baselines.sh
@@ -170,7 +170,11 @@ shibumi_validate_omarchy_baseline_schema() {
|| shibumi_baseline_fail \
"baseline provenance must be an object: $manifest" || return
jq -e '
- if .id == "installed-package-v4.0.4"
+ if .id == "installed-package-v4.0.6"
+ or .id == "installed-source-parity-v4.0.6"
+ or .id == "forward-compat-246f33a2" then
+ .quickshellPackage == {"name": "quickshell", "version": "0.3.2.r7.g2b4501a-1"}
+ elif .id == "installed-package-v4.0.4"
or .id == "installed-source-parity-v4.0.4"
or .id == "installed-source-parity-v4.0.5"
or .id == "installed-package-v4.0.3"
@@ -180,8 +184,7 @@ shibumi_validate_omarchy_baseline_schema() {
or .id == "forward-compat-ed7bae4a"
or .id == "forward-compat-50d687a1"
or .id == "forward-compat-e71a816e"
- or .id == "forward-compat-4c1b4cb3"
- or .id == "forward-compat-246f33a2" then
+ or .id == "forward-compat-4c1b4cb3" then
.quickshellPackage == {"name": "quickshell", "version": "0.3.1-1"}
elif .id == "installed-package-v4.0.0"
or .id == "installed-source-parity-v4.0.0" then
@@ -251,7 +254,8 @@ shibumi_validate_omarchy_baseline_schema() {
case $profile in
installed-package)
jq -e '
- if .id == "installed-package-v4.0.4"
+ if .id == "installed-package-v4.0.6"
+ or .id == "installed-package-v4.0.4"
or .id == "installed-package-v4.0.3"
or .id == "installed-package-v4.0.2" then
.provenance.kind == "package"
@@ -557,7 +561,8 @@ shibumi_validate_installed_package_provenance() {
shibumi_validate_omarchy_baseline_schema "$requested_manifest" || return
fi
[[ $(jq -r '.profile' "$requested_manifest") == installed-package \
- && ( $(jq -r '.id' "$requested_manifest") == installed-package-v4.0.4 \
+ && ( $(jq -r '.id' "$requested_manifest") == installed-package-v4.0.6 \
+ || $(jq -r '.id' "$requested_manifest") == installed-package-v4.0.4 \
|| $(jq -r '.id' "$requested_manifest") == installed-package-v4.0.3 \
|| $(jq -r '.id' "$requested_manifest") == installed-package-v4.0.2 ) ]] \
|| shibumi_baseline_fail \
@@ -705,16 +710,30 @@ shibumi_validate_agents_baseline() {
SHIBUMI_VALIDATED_OMARCHY_BASELINE=$canonical_manifest
}
+# Native catalog fixtures retain the historical source, not its old host package.
+# Validate its complete source tree without asserting historical Quickshell provenance.
+shibumi_load_native_catalog_baseline() {
+ local manifest="$shibumi_baseline_repo_root/contracts/baselines/omarchy-installed-source-parity-v4.0.4.json"
+ local requested_path=${SHIBUMI_NATIVE_CATALOG_OMARCHY_PATH:-}
+ shibumi_preflight_clean_git_checkout "$requested_path" \
+ c668141e9c42b13c80c9ca4ea108e11708c5e8a5 native-catalog || return
+ shibumi_validate_omarchy_tree "$requested_path" "$manifest" || return
+ SHIBUMI_NATIVE_CATALOG_OMARCHY_PATH=$SHIBUMI_VALIDATED_OMARCHY_PATH
+ export SHIBUMI_NATIVE_CATALOG_OMARCHY_PATH
+}
+
shibumi_load_omarchy_baseline() {
shibumi_require_baseline_tools || return
local profile=${SHIBUMI_OMARCHY_BASELINE_PROFILE:-installed-package}
- local baseline_version=${SHIBUMI_OMARCHY_BASELINE_VERSION:-4.0.4}
+ local baseline_version=${SHIBUMI_OMARCHY_BASELINE_VERSION:-4.0.6}
local requested_path manifest
case $profile in
installed-package)
requested_path=/usr/share/omarchy
case $baseline_version in
+ 4.0.6)
+ manifest="$shibumi_baseline_repo_root/contracts/baselines/omarchy-installed-package-v4.0.6.json" ;;
4.0.4)
manifest="$shibumi_baseline_repo_root/contracts/baselines/omarchy-installed-package-v4.0.4.json" ;;
4.0.3)
@@ -733,6 +752,8 @@ shibumi_load_omarchy_baseline() {
|| shibumi_baseline_fail \
'OMARCHY_PATH is required for installed-source-parity' || return
case $baseline_version in
+ 4.0.6)
+ manifest="$shibumi_baseline_repo_root/contracts/baselines/omarchy-installed-source-parity-v4.0.6.json" ;;
4.0.5)
manifest="$shibumi_baseline_repo_root/contracts/baselines/omarchy-installed-source-parity-v4.0.5.json" ;;
4.0.4)
diff --git a/tests/lib/qs-runner.sh b/tests/lib/qs-runner.sh
index 87b82f6..f06d7ef 100644
--- a/tests/lib/qs-runner.sh
+++ b/tests/lib/qs-runner.sh
@@ -24,6 +24,7 @@ env = dict(os.environ)
if entries and entries[0] == '-i':
env = {}; entries = entries[1:]
env.update(entry.split('=', 1) for entry in entries)
+env['QT_FORCE_STDERR_LOGGING'] = '1'
source = fixture.parent if fixture.name == 'shell.qml' else fixture
command = [sys.argv[5], '-p', str(source), *sys.argv[7 + count:]]
signal.signal(signal.SIGTERM, signal.default_int_handler)
diff --git a/tests/native-catalog-resource-contract.py b/tests/native-catalog-resource-contract.py
index d53ca2f..c6179d0 100644
--- a/tests/native-catalog-resource-contract.py
+++ b/tests/native-catalog-resource-contract.py
@@ -56,7 +56,7 @@ def measurement_output(cold=None, warm=None):
"maximumPssOverBaselineKiB": 2,
"pssKiB": [129, 132, 131],
"requestSerials": [6, 7, 8],
- "unchangedCeilingKiB": 512,
+ "unchangedCeilingKiB": 768,
}
if cold is not None:
cold_record = cold
@@ -90,7 +90,7 @@ def test_three_plus_three_parser_rejects_ambiguous_numbers_and_serials(self):
warm["baselinePssKiB"] = 130.0
cases.append(("float warm baseline", measurement_output(warm=warm)))
warm = copy.deepcopy(base_warm)
- warm["unchangedCeilingKiB"] = 512.0
+ warm["unchangedCeilingKiB"] = 768.0
cases.append(("float ceiling", measurement_output(warm=warm)))
cold = copy.deepcopy(base_cold)
cold.update({
diff --git a/tests/native-catalog-resource-regression.py b/tests/native-catalog-resource-regression.py
index f8cb9ae..6f98f4b 100644
--- a/tests/native-catalog-resource-regression.py
+++ b/tests/native-catalog-resource-regression.py
@@ -34,7 +34,9 @@
EXPECTED_NATIVE_FINGERPRINT = "2cd0ffb0c38f31868e28c3556f0efc530f4fcd04765856ec157bc070eac748a0"
BETA13_COMMIT = "2760cdb8272255790d5e4613fed8a48cb63c3555"
BETA13_VERSION = "0.1.1-beta.13"
-PSS_GROWTH_CEILING_KIB = 512
+# Maintainer-reviewed host maintenance, 22/23 Oct 2026: old stack 400 KiB;
+# new stack tag 448, candidate 508/552 KiB (408-evidence/gate11-* and collector-gate11).
+PSS_GROWTH_CEILING_KIB = 768
MAX_GIT_ARCHIVE_BYTES = 16 * 1024 * 1024
MAX_GIT_BLOB_BYTES = 1024 * 1024
MAX_GIT_DIAGNOSTIC_BYTES = 64 * 1024
@@ -490,12 +492,16 @@ def main():
args = parser.parse_args()
native_shell = args.native_shell
if native_shell is None:
- installed_source = os.environ.get("SHIBUMI_INSTALLED_SOURCE_OMARCHY_PATH")
- if not installed_source:
+ native_source = os.environ.get("SHIBUMI_NATIVE_CATALOG_OMARCHY_PATH")
+ if not native_source:
parser.error(
- "--native-shell or SHIBUMI_INSTALLED_SOURCE_OMARCHY_PATH is required"
+ "--native-shell or SHIBUMI_NATIVE_CATALOG_OMARCHY_PATH is required"
)
- native_shell = Path(installed_source) / "shell"
+ subprocess.run([
+ "bash", "-c", 'source "$1"; shibumi_load_native_catalog_baseline',
+ "native-catalog-baseline", str(ROOT / "tests/lib/baselines.sh"),
+ ], check=True, timeout=30)
+ native_shell = Path(native_source) / "shell"
native = load_native_runner()
admitted = native.admitted_native(native_shell)
diff --git a/tests/omarchy-installed-source-parity-contract-regression.sh b/tests/omarchy-installed-source-parity-contract-regression.sh
index 1ed78e6..bb27bd7 100755
--- a/tests/omarchy-installed-source-parity-contract-regression.sh
+++ b/tests/omarchy-installed-source-parity-contract-regression.sh
@@ -12,7 +12,7 @@ if [[ $source_path != /* || ! -d $source_path ]]; then
fi
export SHIBUMI_OMARCHY_BASELINE_PROFILE=installed-source-parity
-export SHIBUMI_OMARCHY_BASELINE_VERSION=4.0.4
+export SHIBUMI_OMARCHY_BASELINE_VERSION=4.0.6
export OMARCHY_PATH=$source_path
exec "$repo_root/tests/contract-regression.sh"
diff --git a/tests/panel-window-geometry-regression.sh b/tests/panel-window-geometry-regression.sh
index 2a05674..758d370 100755
--- a/tests/panel-window-geometry-regression.sh
+++ b/tests/panel-window-geometry-regression.sh
@@ -25,7 +25,8 @@ elif [[ $SHIBUMI_OMARCHY_SOURCE_REVISION == 4c1b4cb3a94447aff39af98e2fcc0490a9fb
keyboard_panel_sha=b7243c0397608a0a2a2dc2a3202a88c1e4b4b35d8da37895a1db8993422ce36f
elif [[ $SHIBUMI_OMARCHY_SOURCE_REVISION == 246f33a2fef66411c990860d88e0823ae83987fc ]]; then
keyboard_panel_sha=7a5dc2284b1990b2bf53a806221458c6a64ea538cb92b4787dca846c7cc33a54
-elif [[ $SHIBUMI_OMARCHY_SOURCE_REVISION == 94a8fbc2d67eec5673c7f16b8c5e8a9c8452ffdc ]]; then
+elif [[ $SHIBUMI_OMARCHY_SOURCE_REVISION == 94a8fbc2d67eec5673c7f16b8c5e8a9c8452ffdc \
+ || $SHIBUMI_OMARCHY_SOURCE_REVISION == 237f1b4071a0bff2296c6d740ba2b9fd695ebfa0 ]]; then
keyboard_panel_sha=c8b3b0fd52d8a79469675e925ff851e1dd0588eb1eeb90bd4df004a4c7d72a0a
fi
[[ $(sha256sum "$keyboard_panel" | awk '{print $1}') == "$keyboard_panel_sha" ]] \
diff --git a/tests/quattro-contract-regression.sh b/tests/quattro-contract-regression.sh
index bbe05a0..c6a67aa 100755
--- a/tests/quattro-contract-regression.sh
+++ b/tests/quattro-contract-regression.sh
@@ -104,7 +104,7 @@ for needle in \
done
case $SHIBUMI_OMARCHY_SOURCE_REVISION in
- 0534987009061cbe2dacdde4ad564092ab698d12|c668141e9c42b13c80c9ca4ea108e11708c5e8a5|94a8fbc2d67eec5673c7f16b8c5e8a9c8452ffdc|50d687a1f27063513cf42e6f33c3a4fcb17c24ed|e71a816e9032f040225e086c7256f73e8080ae45|4c1b4cb3a94447aff39af98e2fcc0490a9fb32e7|246f33a2fef66411c990860d88e0823ae83987fc)
+ 0534987009061cbe2dacdde4ad564092ab698d12|c668141e9c42b13c80c9ca4ea108e11708c5e8a5|94a8fbc2d67eec5673c7f16b8c5e8a9c8452ffdc|237f1b4071a0bff2296c6d740ba2b9fd695ebfa0|50d687a1f27063513cf42e6f33c3a4fcb17c24ed|e71a816e9032f040225e086c7256f73e8080ae45|4c1b4cb3a94447aff39af98e2fcc0490a9fb32e7|246f33a2fef66411c990860d88e0823ae83987fc)
for needle in \
'target.shell = shell.pluginShellFor(manifest)' \
'target.manifest = shell.publicPluginManifest(manifest)' \
diff --git a/tests/test_package_release.py b/tests/test_package_release.py
index 918c390..b499f0f 100644
--- a/tests/test_package_release.py
+++ b/tests/test_package_release.py
@@ -965,9 +965,13 @@ def test_release_evidence_host_probes_fail_closed_and_logs_are_redacted(self) ->
self.assertFalse(
module.probe_host_identity(name, command, prefix)["valid"]
)
+ with self.subTest(probe=name, failure="trailing-identity"):
+ result = subprocess.CompletedProcess(command, 0, prefix + "-wrong\n", "")
+ with patch.object(module.subprocess, "run", return_value=result):
+ self.assertFalse(module.probe_host_identity(name, command, prefix)["valid"])
with self.subTest(probe=name, result="valid"):
result = subprocess.CompletedProcess(
- command, 0, prefix + "test-version\n", ""
+ command, 0, prefix + "\n", ""
)
with patch.object(module.subprocess, "run", return_value=result):
self.assertTrue(
From c04a6da856216fb16e7893e182f42ed638594037 Mon Sep 17 00:00:00 2001
From: HANCORE-linux <230438592+HANCORE-linux@users.noreply.github.com>
Date: Fri, 23 Oct 2026 09:33:30 +0200
Subject: [PATCH 5/9] chore(release): prepare Beta 16.5.1 package identity
---
README.md | 14 ++---
VERSION | 2 +-
contracts/lifecycle-predecessors-v1.json | 63 +++++++++++++++++++
contracts/plugin-suite-v1.json | 2 +-
docs/development/packaging.md | 2 +-
docs/install.md | 19 +++---
docs/plugins/README.md | 2 +-
hancore.shibumi.ai/Service.qml | 2 +-
hancore.shibumi.ai/manifest.json | 2 +-
hancore.shibumi.audio/Service.qml | 2 +-
hancore.shibumi.audio/manifest.json | 2 +-
hancore.shibumi.bar/Bar.qml | 2 +-
hancore.shibumi.bar/manifest.json | 2 +-
hancore.shibumi.battery/manifest.json | 2 +-
hancore.shibumi.bluetooth/Service.qml | 2 +-
hancore.shibumi.bluetooth/manifest.json | 2 +-
hancore.shibumi.brightness/Service.qml | 2 +-
hancore.shibumi.brightness/manifest.json | 2 +-
hancore.shibumi.center/Service.qml | 2 +-
hancore.shibumi.center/manifest.json | 2 +-
.../PluginUpdateService.qml | 2 +-
hancore.shibumi.control-center/manifest.json | 2 +-
hancore.shibumi.cpu/Service.qml | 2 +-
hancore.shibumi.cpu/manifest.json | 2 +-
hancore.shibumi.gpu/manifest.json | 2 +-
hancore.shibumi.media/Service.qml | 2 +-
hancore.shibumi.media/manifest.json | 2 +-
hancore.shibumi.memory/manifest.json | 2 +-
hancore.shibumi.network/Service.qml | 2 +-
hancore.shibumi.network/manifest.json | 2 +-
hancore.shibumi.power-profile/manifest.json | 2 +-
hancore.shibumi.power-state/Service.qml | 2 +-
hancore.shibumi.power-state/manifest.json | 2 +-
hancore.shibumi.quick-access/Service.qml | 2 +-
hancore.shibumi.quick-access/manifest.json | 2 +-
hancore.shibumi.reactor/Service.qml | 2 +-
hancore.shibumi.reactor/manifest.json | 2 +-
hancore.shibumi.state/Service.qml | 2 +-
hancore.shibumi.state/manifest.json | 2 +-
hancore.shibumi.state/runtime/Runtime.qml | 2 +-
hancore.shibumi.status/Service.qml | 2 +-
hancore.shibumi.status/manifest.json | 2 +-
hancore.shibumi.storage/Service.qml | 2 +-
hancore.shibumi.storage/manifest.json | 2 +-
hancore.shibumi.telemetry/Service.qml | 2 +-
hancore.shibumi.telemetry/manifest.json | 2 +-
hancore.shibumi.temperature/manifest.json | 2 +-
hancore.shibumi.update-center/Service.qml | 2 +-
hancore.shibumi.update-center/manifest.json | 2 +-
.../WorkspaceService.qml | 2 +-
hancore.shibumi.workspaces/manifest.json | 2 +-
packaging/aur/.SRCINFO | 4 +-
packaging/aur/PKGBUILD | 2 +-
packaging/package-metadata.json | 2 +-
scripts/check-aur-package | 2 +-
.../audio-native-backend-seam-regression.qml | 2 +-
tests/audio-runtime-smoke.qml | 6 +-
tests/bar-catalog-consumer-smoke.qml | 14 ++---
tests/bar-visibility-ipc-smoke.qml | 2 +-
tests/catalog-service-smoke.qml | 2 +-
tests/core-services-smoke.qml | 6 +-
tests/fixtures/native-runtime/probe.py | 2 +-
tests/fixtures/release-predecessor.json | 14 ++---
tests/gpu-selection-state-smoke.qml | 4 +-
tests/host-registry-prime-smoke.qml | 8 +--
tests/media-spectrum-service-smoke.qml | 2 +-
tests/plugin-update-service-smoke.qml | 2 +-
tests/power-deferred-smoke.qml | 2 +-
tests/power-runtime-smoke.qml | 6 +-
tests/power-service-runtime-smoke.qml | 2 +-
tests/reactor-plugin-smoke.qml | 4 +-
tests/reactor-runtime-smoke.qml | 10 +--
tests/scoped-state-regression.qml | 2 +-
tests/shared-runtime-regression.qml | 16 ++---
tests/state-service-smoke.qml | 2 +-
tests/status-plugin-smoke.qml | 6 +-
tests/telemetry-plugins-smoke.qml | 4 +-
tests/telemetry-runtime-smoke.qml | 4 +-
tests/test_package_release.py | 12 +++-
tests/theme-palette-runtime-smoke.qml | 2 +-
tests/third-party-integration-smoke.qml | 4 +-
tests/widget-pipeline-diagnostics-smoke.qml | 6 +-
tests/workspaces-plugin-smoke.qml | 2 +-
tests/workspaces-runtime-smoke.qml | 6 +-
84 files changed, 215 insertions(+), 141 deletions(-)
diff --git a/README.md b/README.md
index 8944947..a5778c4 100644
--- a/README.md
+++ b/README.md
@@ -16,8 +16,8 @@ process.
[Documentation](docs/README.md) ·
[Release status](docs/release-readiness.md)
-`0.1.1-beta.16.5` is the target GitHub prerelease. See the
-[release notes](.github/release-notes/v0.1.1-beta.16.5.md) for changes. Before using an older version, read the
+`0.1.1-beta.16.5.1` is the target GitHub prerelease. See the
+[release notes](.github/release-notes/v0.1.1-beta.16.5.1.md) for changes. Before using an older version, read the
[backup and downgrade warning](docs/install.md#backup-before-downgrade).
The current pinned host contracts use Omarchy and Omarchy Settings `4.0.6-1`
(source tag `v4.0.6`, revision `237f1b40`) with Quickshell `0.3.2.r7.g2b4501a-1`; the
@@ -68,7 +68,7 @@ for the latest validated host versions.
sudo pacman -S --needed python jq curl networkmanager power-profiles-daemon upower xdg-utils libnotify wl-clipboard ttf-material-symbols-variable ttf-jetbrains-mono-nerd-basic noto-fonts-cjk adwaita-fonts
git clone https://github.com/HANCORE-linux/Shibumi-Shell.git
cd Shibumi-Shell
-git checkout v0.1.1-beta.16.5
+git checkout v0.1.1-beta.16.5.1
./scripts/shibumi-suite install --yes
```
@@ -76,15 +76,15 @@ Run the Pacman line yourself; it installs the runtime commands and fonts and
is the only step that needs `sudo`. The Shibumi suite never calls Pacman: it
runs as the desktop user and writes only user-scoped plugin state.
-Update an admitted Beta.16.4 source installation to Beta.16.5.
-The exact Beta.16.4 tag (`64b9369`) and its main integration merge (`aec6c0a`)
-are admitted predecessors. Exact identities, not a version range, govern
+Update an admitted Beta.16.4 or Beta.16.5 source installation to Beta.16.5.1.
+The exact Beta.16.4 tag (`64b9369`) and merge (`aec6c0a`), and Beta.16.5
+tag (`8b34d030`) and merge (`1d7a00b2`), are admitted predecessors. Exact identities, not a version range, govern
admission; see the [update guide](docs/install.md#update).
```sh
cd Shibumi-Shell
git fetch --tags
-git checkout v0.1.1-beta.16.5
+git checkout v0.1.1-beta.16.5.1
./scripts/shibumi-suite update --dry-run
./scripts/shibumi-suite update --yes
./scripts/shibumi-suite status
diff --git a/VERSION b/VERSION
index e78874c..f8d81e7 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-0.1.1-beta.16.5
+0.1.1-beta.16.5.1
diff --git a/contracts/lifecycle-predecessors-v1.json b/contracts/lifecycle-predecessors-v1.json
index 961125a..b82dc4e 100644
--- a/contracts/lifecycle-predecessors-v1.json
+++ b/contracts/lifecycle-predecessors-v1.json
@@ -1066,9 +1066,72 @@
],
"settingsStorageVersion": 1,
"sourceRevisions": [
+ "8b34d030a303aa35d6033923c8f3c38c4c25b29b",
+ "1d7a00b2742fb4d479774a4f722c6c2ef96d0601",
"package:0.1.1-beta.16.5"
],
"suiteVersion": "0.1.1-beta.16.5"
+ },
+ {
+ "id": "public-beta.16.5.1",
+ "payloadDigest": "a4a0b43a04603a9b40354df1498e74b4b42e55158c1d3f9d68c9460db30802cf",
+ "pluginDigests": {
+ "hancore.shibumi.bar": "1d1a47515cafa53176338645f8525f8e6e5021f124948eff6794b708d02aacc9",
+ "hancore.shibumi.state": "22328fdf2ecd627db310a76ced163ca05a49d4cfafb724c3f4881b4e4dc2b178",
+ "hancore.shibumi.control-center": "82cb345955cb2f0c0eb1b214bf013f730d51c09725cc46617e26d4af49d0917d",
+ "hancore.shibumi.reactor": "d6b8f38de80b09abeac9789ded26650f0213208923b62597acbfa58c449ea9cb",
+ "hancore.shibumi.telemetry": "75fc48d3ffbc3a14f4df3cd296ab93623fff10244e83d0af0cace9f096cabde5",
+ "hancore.shibumi.power-state": "0e4727de0b2611faa7f289d79e7090e3db0460138d5ede2409ae1b5a6a7c9fe3",
+ "hancore.shibumi.workspaces": "59cc5627a465f22562e3a7afa0d30f7c8567ecd83fb7c6329b809541561c7280",
+ "hancore.shibumi.update-center": "ad8fb3564ff3953bdb8cd86359483baa7aeb355dcfd133a2c6f12a962c0da387",
+ "hancore.shibumi.status": "da0f8012856223ecab3dc6ea7e6967701fe9630b5d9ecff6e3f2e954becead3d",
+ "hancore.shibumi.memory": "7de6243824ec33bbe793c0e2be74dc849494b258b8a56eff18c319115a734196",
+ "hancore.shibumi.cpu": "3f255ec4c90967ac42e9376d5bd5f99f3b9c55e60f82f4343860df78b6ff5eac",
+ "hancore.shibumi.audio": "7cb7693721fc4fb75e405d565a1579d8a32c5dc1fea6177dbba6c518127ac79e",
+ "hancore.shibumi.ai": "2482b5468ac8dcf8a5afaf0d4f50ca15be63698d53dd62b75e7def10a39dcf17",
+ "hancore.shibumi.center": "84d211c187643f2eaa9e2ea1bd6b12ad0290a7fd768de422d190361f065f9dd1",
+ "hancore.shibumi.media": "c30e513978e1cb5be1bfdc7592d851980094144dd42bb67035b3a5e840b55c49",
+ "hancore.shibumi.quick-access": "d36db702d2ab65ac035ad2c0ec555e8ef713eee7aed7a9dd01f5b5e88b554aa3",
+ "hancore.shibumi.network": "5f5cbf5963e7110eb09b10ed9e519627a2082c7a94cd928b2e4289928db67337",
+ "hancore.shibumi.battery": "2ac5f7e49ff237fab5301312b041547eef1cd076608985b5df4448cd44445d4a",
+ "hancore.shibumi.brightness": "4614cf5aa35917063b98a28d5a03d5b9d84c72190084c10b651f8ff393d9ca6d",
+ "hancore.shibumi.power-profile": "f0687c709da571d20eeb861ca36497bdf54c864ca0f2114dc5844bff804a56bf",
+ "hancore.shibumi.bluetooth": "554b5cc954e26acd07f1b7950bd9d2bb9564a061f69685f111a6a1fc998e3e26",
+ "hancore.shibumi.temperature": "208d750c66099d3da6f1f6fae04fa83762b4b6a4d9603ad15383c4b53f0a8632",
+ "hancore.shibumi.gpu": "b3cbde40eb3492d16943ba967b9f806c060066d2664f733d4a09d7a02ce6d8bd",
+ "hancore.shibumi.storage": "52167d83e786165b0b32594a02c1d001866dbaf05a7c3bb18be10288a5f2ebe7"
+ },
+ "pluginIds": [
+ "hancore.shibumi.bar",
+ "hancore.shibumi.state",
+ "hancore.shibumi.control-center",
+ "hancore.shibumi.reactor",
+ "hancore.shibumi.telemetry",
+ "hancore.shibumi.power-state",
+ "hancore.shibumi.workspaces",
+ "hancore.shibumi.update-center",
+ "hancore.shibumi.status",
+ "hancore.shibumi.memory",
+ "hancore.shibumi.cpu",
+ "hancore.shibumi.audio",
+ "hancore.shibumi.ai",
+ "hancore.shibumi.center",
+ "hancore.shibumi.media",
+ "hancore.shibumi.quick-access",
+ "hancore.shibumi.network",
+ "hancore.shibumi.battery",
+ "hancore.shibumi.brightness",
+ "hancore.shibumi.power-profile",
+ "hancore.shibumi.bluetooth",
+ "hancore.shibumi.temperature",
+ "hancore.shibumi.gpu",
+ "hancore.shibumi.storage"
+ ],
+ "settingsStorageVersion": 1,
+ "sourceRevisions": [
+ "package:0.1.1-beta.16.5.1"
+ ],
+ "suiteVersion": "0.1.1-beta.16.5.1"
}
]
}
diff --git a/contracts/plugin-suite-v1.json b/contracts/plugin-suite-v1.json
index 3c7e00f..2937a71 100644
--- a/contracts/plugin-suite-v1.json
+++ b/contracts/plugin-suite-v1.json
@@ -1,7 +1,7 @@
{
"schemaVersion": 1,
"suiteId": "hancore.shibumi",
- "suiteVersion": "0.1.1-beta.16.5",
+ "suiteVersion": "0.1.1-beta.16.5.1",
"settingsStorageVersion": 1,
"hostContract": "contracts/host-facade-v1.json",
"retiredPlugins": [
diff --git a/docs/development/packaging.md b/docs/development/packaging.md
index f0a949a..35c1b79 100644
--- a/docs/development/packaging.md
+++ b/docs/development/packaging.md
@@ -1,6 +1,6 @@
# Source installation and planned OPR packaging
-Status: install `0.1.1-beta.16.5` from source. OPR (omarchy-pkgs) packaging
+Status: install `0.1.1-beta.16.5.1` from source. OPR (omarchy-pkgs) packaging
is planned; AUR publication is no longer the target.
Shibumi ships one versioned suite containing 24 separately validated Omarchy
diff --git a/docs/install.md b/docs/install.md
index ef2ea39..0cd172b 100644
--- a/docs/install.md
+++ b/docs/install.md
@@ -6,8 +6,8 @@ Shibumi installs 24 independent plugin roots into Omarchy's normal plugin
directory. The repository root is a suite source, not a single installable
Omarchy plugin.
-`0.1.1-beta.16.5` is the target GitHub prerelease. See the
-[release notes](../.github/release-notes/v0.1.1-beta.16.5.md) for changes.
+`0.1.1-beta.16.5.1` is the target GitHub prerelease. See the
+[release notes](../.github/release-notes/v0.1.1-beta.16.5.1.md) for changes.
Install from the release tag using the source workflow below.
Do not install or update from `main`.
@@ -31,7 +31,7 @@ For an intentional non-interactive installation:
sudo pacman -S --needed python jq curl networkmanager power-profiles-daemon upower xdg-utils libnotify wl-clipboard ttf-material-symbols-variable ttf-jetbrains-mono-nerd-basic noto-fonts-cjk adwaita-fonts
git clone https://github.com/HANCORE-linux/Shibumi-Shell.git
cd Shibumi-Shell
-git checkout v0.1.1-beta.16.5
+git checkout v0.1.1-beta.16.5.1
./scripts/shibumi-suite install --yes
```
@@ -47,7 +47,7 @@ To inspect the transaction before installing:
sudo pacman -S --needed python jq curl networkmanager power-profiles-daemon upower xdg-utils libnotify wl-clipboard ttf-material-symbols-variable ttf-jetbrains-mono-nerd-basic noto-fonts-cjk adwaita-fonts
git clone https://github.com/HANCORE-linux/Shibumi-Shell.git
cd Shibumi-Shell
-git checkout v0.1.1-beta.16.5
+git checkout v0.1.1-beta.16.5.1
./scripts/shibumi-suite install --dry-run
./scripts/shibumi-suite install
```
@@ -127,14 +127,15 @@ Pacman updating `/usr/share/shibumi-shell` does not silently change a running
desktop. The explicit update validates, stages, reloads, and verifies all 24
plugins as one transaction.
-Update an admitted Beta.16.4 source installation to Beta.16.5 from its
-trusted checkout. The exact published Beta.16.4 tag (`64b9369`) and its main
-integration merge (`aec6c0a`) are admitted predecessors:
+Update an admitted Beta.16.4 or Beta.16.5 source installation to Beta.16.5.1
+from its trusted checkout. The exact Beta.16.4 tag (`64b9369`) and merge
+(`aec6c0a`), and Beta.16.5 tag (`8b34d030`) and merge (`1d7a00b2`), are admitted
+predecessors:
```bash
cd Shibumi-Shell
git fetch --tags
-git checkout v0.1.1-beta.16.5
+git checkout v0.1.1-beta.16.5.1
./scripts/shibumi-suite update --dry-run
./scripts/shibumi-suite update --yes
./scripts/shibumi-suite status
@@ -387,7 +388,7 @@ then install the published tag. For example, only if the recorded revision is
```bash
git checkout e92d8ee1ce9821d0b203a9d4d5dd9932d2e460fb
./scripts/shibumi-suite uninstall --keep-settings --yes
-git checkout v0.1.1-beta.16.5
+git checkout v0.1.1-beta.16.5.1
./scripts/shibumi-suite install --yes
```
diff --git a/docs/plugins/README.md b/docs/plugins/README.md
index 48e8612..a063911 100644
--- a/docs/plugins/README.md
+++ b/docs/plugins/README.md
@@ -2,7 +2,7 @@
Status: reference
-Shibumi `0.1.1-beta.16.5` contains 24 independently registered Omarchy plugins. The
+Shibumi `0.1.1-beta.16.5.1` contains 24 independently registered Omarchy plugins. The
default suite profile installs all of them as one verified transaction.
The authoritative inventory is
diff --git a/hancore.shibumi.ai/Service.qml b/hancore.shibumi.ai/Service.qml
index c309cfc..8ad1979 100644
--- a/hancore.shibumi.ai/Service.qml
+++ b/hancore.shibumi.ai/Service.qml
@@ -19,7 +19,7 @@ Item {
SuiteRuntime.HostShell { id: suiteShell; host: root.shell }
SuiteRuntime.Provider {
pluginId: "hancore.shibumi.ai"
- implementationVersion: "0.1.1-beta.16.5"
+ implementationVersion: "0.1.1-beta.16.5.1"
owner: root
host: root.shell
manifest: root.manifest
diff --git a/hancore.shibumi.ai/manifest.json b/hancore.shibumi.ai/manifest.json
index 441c25a..c59b8f0 100644
--- a/hancore.shibumi.ai/manifest.json
+++ b/hancore.shibumi.ai/manifest.json
@@ -2,7 +2,7 @@
"schemaVersion": 1,
"id": "hancore.shibumi.ai",
"name": "Shibumi AI Usage",
- "version": "0.1.1-beta.16.5",
+ "version": "0.1.1-beta.16.5.1",
"author": "HANCORE",
"license": "MIT",
"description": "Shibumi Claude, Codex, and OpenCode usage presentation.",
diff --git a/hancore.shibumi.audio/Service.qml b/hancore.shibumi.audio/Service.qml
index 6e926ef..6e16883 100644
--- a/hancore.shibumi.audio/Service.qml
+++ b/hancore.shibumi.audio/Service.qml
@@ -14,7 +14,7 @@ Item {
SuiteRuntime.Provider {
id: runtimeProvider
pluginId: "hancore.shibumi.audio"
- implementationVersion: "0.1.1-beta.16.5"
+ implementationVersion: "0.1.1-beta.16.5.1"
owner: root
host: root.shell
manifest: root.manifest
diff --git a/hancore.shibumi.audio/manifest.json b/hancore.shibumi.audio/manifest.json
index 4915f16..16698e0 100644
--- a/hancore.shibumi.audio/manifest.json
+++ b/hancore.shibumi.audio/manifest.json
@@ -2,7 +2,7 @@
"schemaVersion": 1,
"id": "hancore.shibumi.audio",
"name": "Shibumi Audio",
- "version": "0.1.1-beta.16.5",
+ "version": "0.1.1-beta.16.5.1",
"author": "HANCORE",
"license": "MIT",
"description": "Shibumi audio presentation over Omarchy's PipeWire owner.",
diff --git a/hancore.shibumi.bar/Bar.qml b/hancore.shibumi.bar/Bar.qml
index 9bc997e..66c44da 100644
--- a/hancore.shibumi.bar/Bar.qml
+++ b/hancore.shibumi.bar/Bar.qml
@@ -28,7 +28,7 @@ Item {
SuiteRuntime.Provider {
id: barRuntimeProvider
pluginId: "hancore.shibumi.bar"
- implementationVersion: "0.1.1-beta.16.5"
+ implementationVersion: "0.1.1-beta.16.5.1"
owner: root
host: suiteHostShell.host
manifest: root.manifest
diff --git a/hancore.shibumi.bar/manifest.json b/hancore.shibumi.bar/manifest.json
index d483728..d09d112 100644
--- a/hancore.shibumi.bar/manifest.json
+++ b/hancore.shibumi.bar/manifest.json
@@ -2,7 +2,7 @@
"schemaVersion": 1,
"id": "hancore.shibumi.bar",
"name": "Shibumi Bar",
- "version": "0.1.1-beta.16.5",
+ "version": "0.1.1-beta.16.5.1",
"author": "HANCORE",
"license": "MIT",
"description": "The Shibumi full-bar host for Omarchy Shell.",
diff --git a/hancore.shibumi.battery/manifest.json b/hancore.shibumi.battery/manifest.json
index e64f847..ab28180 100644
--- a/hancore.shibumi.battery/manifest.json
+++ b/hancore.shibumi.battery/manifest.json
@@ -2,7 +2,7 @@
"schemaVersion": 1,
"id": "hancore.shibumi.battery",
"name": "Shibumi Battery",
- "version": "0.1.1-beta.16.5",
+ "version": "0.1.1-beta.16.5.1",
"author": "HANCORE",
"license": "MIT",
"description": "Shibumi battery status and detailed battery panel.",
diff --git a/hancore.shibumi.bluetooth/Service.qml b/hancore.shibumi.bluetooth/Service.qml
index d25d964..d53cc2d 100644
--- a/hancore.shibumi.bluetooth/Service.qml
+++ b/hancore.shibumi.bluetooth/Service.qml
@@ -15,7 +15,7 @@ Item {
SuiteRuntime.HostShell { id: suiteShell; host: root.shell }
SuiteRuntime.Provider {
pluginId: "hancore.shibumi.bluetooth"
- implementationVersion: "0.1.1-beta.16.5"
+ implementationVersion: "0.1.1-beta.16.5.1"
owner: root
host: root.shell
manifest: root.manifest
diff --git a/hancore.shibumi.bluetooth/manifest.json b/hancore.shibumi.bluetooth/manifest.json
index 1bb818a..e22ab85 100644
--- a/hancore.shibumi.bluetooth/manifest.json
+++ b/hancore.shibumi.bluetooth/manifest.json
@@ -2,7 +2,7 @@
"schemaVersion": 1,
"id": "hancore.shibumi.bluetooth",
"name": "Shibumi Bluetooth",
- "version": "0.1.1-beta.16.5",
+ "version": "0.1.1-beta.16.5.1",
"author": "HANCORE",
"license": "MIT",
"description": "Shibumi Bluetooth presentation with a native BlueZ and audio backend.",
diff --git a/hancore.shibumi.brightness/Service.qml b/hancore.shibumi.brightness/Service.qml
index ffc9781..eab40a6 100644
--- a/hancore.shibumi.brightness/Service.qml
+++ b/hancore.shibumi.brightness/Service.qml
@@ -13,7 +13,7 @@ Item {
property var manifest: null
SuiteRuntime.Provider {
pluginId: "hancore.shibumi.brightness"
- implementationVersion: "0.1.1-beta.16.5"
+ implementationVersion: "0.1.1-beta.16.5.1"
owner: root
host: root.shell
manifest: root.manifest
diff --git a/hancore.shibumi.brightness/manifest.json b/hancore.shibumi.brightness/manifest.json
index 59167ef..aae48fc 100644
--- a/hancore.shibumi.brightness/manifest.json
+++ b/hancore.shibumi.brightness/manifest.json
@@ -2,7 +2,7 @@
"schemaVersion": 1,
"id": "hancore.shibumi.brightness",
"name": "Shibumi Brightness",
- "version": "0.1.1-beta.16.5",
+ "version": "0.1.1-beta.16.5.1",
"author": "HANCORE",
"license": "MIT",
"description": "Shibumi brightness and display presentation over Omarchy's monitor owner.",
diff --git a/hancore.shibumi.center/Service.qml b/hancore.shibumi.center/Service.qml
index 7830d91..5ff8429 100644
--- a/hancore.shibumi.center/Service.qml
+++ b/hancore.shibumi.center/Service.qml
@@ -10,7 +10,7 @@ Item {
property var manifest: null
SuiteRuntime.Provider {
pluginId: "hancore.shibumi.center"
- implementationVersion: "0.1.1-beta.16.5"
+ implementationVersion: "0.1.1-beta.16.5.1"
owner: root
host: root.shell
manifest: root.manifest
diff --git a/hancore.shibumi.center/manifest.json b/hancore.shibumi.center/manifest.json
index 01b421a..74f31d7 100644
--- a/hancore.shibumi.center/manifest.json
+++ b/hancore.shibumi.center/manifest.json
@@ -2,7 +2,7 @@
"schemaVersion": 1,
"id": "hancore.shibumi.center",
"name": "Shibumi Center",
- "version": "0.1.1-beta.16.5",
+ "version": "0.1.1-beta.16.5.1",
"author": "HANCORE",
"license": "MIT",
"description": "Shibumi clock, calendar, weather, status, and update center.",
diff --git a/hancore.shibumi.control-center/PluginUpdateService.qml b/hancore.shibumi.control-center/PluginUpdateService.qml
index 619862d..c678ccd 100644
--- a/hancore.shibumi.control-center/PluginUpdateService.qml
+++ b/hancore.shibumi.control-center/PluginUpdateService.qml
@@ -20,7 +20,7 @@ Item {
SuiteRuntime.Provider {
id: runtimeProvider
pluginId: "hancore.shibumi.control-center"
- implementationVersion: "0.1.1-beta.16.5"
+ implementationVersion: "0.1.1-beta.16.5.1"
owner: root
host: root.shell
manifest: root.manifest
diff --git a/hancore.shibumi.control-center/manifest.json b/hancore.shibumi.control-center/manifest.json
index 1264f59..9ab1c8a 100644
--- a/hancore.shibumi.control-center/manifest.json
+++ b/hancore.shibumi.control-center/manifest.json
@@ -2,7 +2,7 @@
"schemaVersion": 1,
"id": "hancore.shibumi.control-center",
"name": "Shibumi Control Center",
- "version": "0.1.1-beta.16.5",
+ "version": "0.1.1-beta.16.5.1",
"author": "HANCORE",
"license": "MIT",
"description": "Shibumi G1 presentation and bar configuration panel.",
diff --git a/hancore.shibumi.cpu/Service.qml b/hancore.shibumi.cpu/Service.qml
index 7a6fc26..8e27aa0 100644
--- a/hancore.shibumi.cpu/Service.qml
+++ b/hancore.shibumi.cpu/Service.qml
@@ -13,7 +13,7 @@ Item {
SuiteRuntime.Provider {
id: runtimeProvider
pluginId: "hancore.shibumi.cpu"
- implementationVersion: "0.1.1-beta.16.5"
+ implementationVersion: "0.1.1-beta.16.5.1"
owner: root
host: root.shell
manifest: root.manifest
diff --git a/hancore.shibumi.cpu/manifest.json b/hancore.shibumi.cpu/manifest.json
index aeb83cd..fa475e4 100644
--- a/hancore.shibumi.cpu/manifest.json
+++ b/hancore.shibumi.cpu/manifest.json
@@ -2,7 +2,7 @@
"schemaVersion": 1,
"id": "hancore.shibumi.cpu",
"name": "Shibumi CPU",
- "version": "0.1.1-beta.16.5",
+ "version": "0.1.1-beta.16.5.1",
"author": "HANCORE",
"license": "MIT",
"description": "Shibumi CPU widget, GPU sampler, and detailed usage panel.",
diff --git a/hancore.shibumi.gpu/manifest.json b/hancore.shibumi.gpu/manifest.json
index 0af2fce..7ba02b5 100644
--- a/hancore.shibumi.gpu/manifest.json
+++ b/hancore.shibumi.gpu/manifest.json
@@ -2,7 +2,7 @@
"schemaVersion": 1,
"id": "hancore.shibumi.gpu",
"name": "Shibumi GPU",
- "version": "0.1.1-beta.16.5",
+ "version": "0.1.1-beta.16.5.1",
"author": "HANCORE",
"license": "MIT",
"description": "Lazy GPU load, hardware, driver, temperature, and VRAM widget.",
diff --git a/hancore.shibumi.media/Service.qml b/hancore.shibumi.media/Service.qml
index afa06a1..8efb910 100644
--- a/hancore.shibumi.media/Service.qml
+++ b/hancore.shibumi.media/Service.qml
@@ -19,7 +19,7 @@ Item {
SuiteRuntime.Provider {
id: runtimeProvider
pluginId: "hancore.shibumi.media"
- implementationVersion: "0.1.1-beta.16.5"
+ implementationVersion: "0.1.1-beta.16.5.1"
owner: root
host: root.shell
manifest: root.manifest
diff --git a/hancore.shibumi.media/manifest.json b/hancore.shibumi.media/manifest.json
index dea5770..7a6f998 100644
--- a/hancore.shibumi.media/manifest.json
+++ b/hancore.shibumi.media/manifest.json
@@ -2,7 +2,7 @@
"schemaVersion": 1,
"id": "hancore.shibumi.media",
"name": "Shibumi Media",
- "version": "0.1.1-beta.16.5",
+ "version": "0.1.1-beta.16.5.1",
"author": "HANCORE",
"license": "MIT",
"description": "Shibumi media controls over Omarchy's MPRIS service.",
diff --git a/hancore.shibumi.memory/manifest.json b/hancore.shibumi.memory/manifest.json
index e60935b..911727f 100644
--- a/hancore.shibumi.memory/manifest.json
+++ b/hancore.shibumi.memory/manifest.json
@@ -2,7 +2,7 @@
"schemaVersion": 1,
"id": "hancore.shibumi.memory",
"name": "Shibumi Memory",
- "version": "0.1.1-beta.16.5",
+ "version": "0.1.1-beta.16.5.1",
"author": "HANCORE",
"license": "MIT",
"description": "Shibumi memory widget and detailed memory panel.",
diff --git a/hancore.shibumi.network/Service.qml b/hancore.shibumi.network/Service.qml
index 103d417..d24b610 100644
--- a/hancore.shibumi.network/Service.qml
+++ b/hancore.shibumi.network/Service.qml
@@ -15,7 +15,7 @@ Item {
property var manifest: null
SuiteRuntime.Provider {
pluginId: "hancore.shibumi.network"
- implementationVersion: "0.1.1-beta.16.5"
+ implementationVersion: "0.1.1-beta.16.5.1"
owner: root
host: root.shell
manifest: root.manifest
diff --git a/hancore.shibumi.network/manifest.json b/hancore.shibumi.network/manifest.json
index 0369eec..d9f8ab8 100644
--- a/hancore.shibumi.network/manifest.json
+++ b/hancore.shibumi.network/manifest.json
@@ -2,7 +2,7 @@
"schemaVersion": 1,
"id": "hancore.shibumi.network",
"name": "Shibumi Network",
- "version": "0.1.1-beta.16.5",
+ "version": "0.1.1-beta.16.5.1",
"author": "HANCORE",
"license": "MIT",
"description": "Native Shibumi NetworkManager ownership, telemetry, actions, QR, and speed testing.",
diff --git a/hancore.shibumi.power-profile/manifest.json b/hancore.shibumi.power-profile/manifest.json
index 919d768..8ec77b4 100644
--- a/hancore.shibumi.power-profile/manifest.json
+++ b/hancore.shibumi.power-profile/manifest.json
@@ -2,7 +2,7 @@
"schemaVersion": 1,
"id": "hancore.shibumi.power-profile",
"name": "Shibumi Power Profile",
- "version": "0.1.1-beta.16.5",
+ "version": "0.1.1-beta.16.5.1",
"author": "HANCORE",
"license": "MIT",
"description": "Shibumi power-profile status and profile selector.",
diff --git a/hancore.shibumi.power-state/Service.qml b/hancore.shibumi.power-state/Service.qml
index 05d61c1..933ecb7 100644
--- a/hancore.shibumi.power-state/Service.qml
+++ b/hancore.shibumi.power-state/Service.qml
@@ -23,7 +23,7 @@ Item {
SuiteRuntime.Provider {
id: runtimeProvider
pluginId: "hancore.shibumi.power-state"
- implementationVersion: "0.1.1-beta.16.5"
+ implementationVersion: "0.1.1-beta.16.5.1"
owner: root
host: root.shell
manifest: root.manifest
diff --git a/hancore.shibumi.power-state/manifest.json b/hancore.shibumi.power-state/manifest.json
index e0b885f..c5b9efb 100644
--- a/hancore.shibumi.power-state/manifest.json
+++ b/hancore.shibumi.power-state/manifest.json
@@ -2,7 +2,7 @@
"schemaVersion": 1,
"id": "hancore.shibumi.power-state",
"name": "Shibumi Power State",
- "version": "0.1.1-beta.16.5",
+ "version": "0.1.1-beta.16.5.1",
"author": "HANCORE",
"license": "MIT",
"description": "Shared battery and power-profile state for Shibumi widgets.",
diff --git a/hancore.shibumi.quick-access/Service.qml b/hancore.shibumi.quick-access/Service.qml
index e6a8a72..703a218 100644
--- a/hancore.shibumi.quick-access/Service.qml
+++ b/hancore.shibumi.quick-access/Service.qml
@@ -18,7 +18,7 @@ Item {
SuiteRuntime.HostShell { id: suiteShell; host: root.shell }
SuiteRuntime.Provider {
pluginId: "hancore.shibumi.quick-access"
- implementationVersion: "0.1.1-beta.16.5"
+ implementationVersion: "0.1.1-beta.16.5.1"
owner: root
host: root.shell
manifest: root.manifest
diff --git a/hancore.shibumi.quick-access/manifest.json b/hancore.shibumi.quick-access/manifest.json
index bb5c317..c4a898e 100644
--- a/hancore.shibumi.quick-access/manifest.json
+++ b/hancore.shibumi.quick-access/manifest.json
@@ -2,7 +2,7 @@
"schemaVersion": 1,
"id": "hancore.shibumi.quick-access",
"name": "Shibumi Quick Access",
- "version": "0.1.1-beta.16.5",
+ "version": "0.1.1-beta.16.5.1",
"author": "HANCORE",
"license": "MIT",
"description": "Shibumi idle inhibitor and theme, wallpaper, screenshot, and video pickers.",
diff --git a/hancore.shibumi.reactor/Service.qml b/hancore.shibumi.reactor/Service.qml
index 9c33627..e2580d2 100644
--- a/hancore.shibumi.reactor/Service.qml
+++ b/hancore.shibumi.reactor/Service.qml
@@ -18,7 +18,7 @@ Item {
SuiteRuntime.Provider {
id: runtimeProvider
pluginId: "hancore.shibumi.reactor"
- implementationVersion: "0.1.1-beta.16.5"
+ implementationVersion: "0.1.1-beta.16.5.1"
owner: root
host: root.shell
manifest: root.manifest
diff --git a/hancore.shibumi.reactor/manifest.json b/hancore.shibumi.reactor/manifest.json
index 5bab44b..40422d0 100644
--- a/hancore.shibumi.reactor/manifest.json
+++ b/hancore.shibumi.reactor/manifest.json
@@ -2,7 +2,7 @@
"schemaVersion": 1,
"id": "hancore.shibumi.reactor",
"name": "Shibumi Reactor",
- "version": "0.1.1-beta.16.5",
+ "version": "0.1.1-beta.16.5.1",
"author": "HANCORE",
"license": "MIT",
"description": "Shibumi event and quote Reactor service for compatible bar styles.",
diff --git a/hancore.shibumi.state/Service.qml b/hancore.shibumi.state/Service.qml
index ab869cc..2194db3 100644
--- a/hancore.shibumi.state/Service.qml
+++ b/hancore.shibumi.state/Service.qml
@@ -16,7 +16,7 @@ Item {
SuiteRuntime.Provider {
id: runtimeProvider
pluginId: "hancore.shibumi.state"
- implementationVersion: "0.1.1-beta.16.5"
+ implementationVersion: "0.1.1-beta.16.5.1"
owner: root
host: root.shell
manifest: root.manifest
diff --git a/hancore.shibumi.state/manifest.json b/hancore.shibumi.state/manifest.json
index 28ad71a..39adaba 100644
--- a/hancore.shibumi.state/manifest.json
+++ b/hancore.shibumi.state/manifest.json
@@ -2,7 +2,7 @@
"schemaVersion": 1,
"id": "hancore.shibumi.state",
"name": "Shibumi State",
- "version": "0.1.1-beta.16.5",
+ "version": "0.1.1-beta.16.5.1",
"author": "HANCORE",
"license": "MIT",
"description": "Normalized Shibumi configuration and theme palette state.",
diff --git a/hancore.shibumi.state/runtime/Runtime.qml b/hancore.shibumi.state/runtime/Runtime.qml
index afb003b..f676810 100644
--- a/hancore.shibumi.state/runtime/Runtime.qml
+++ b/hancore.shibumi.state/runtime/Runtime.qml
@@ -11,7 +11,7 @@ QtObject {
id: runtime
readonly property int contractVersion: 1
- readonly property string suiteVersion: "0.1.1-beta.16.5"
+ readonly property string suiteVersion: "0.1.1-beta.16.5.1"
readonly property var providerIds: [
"hancore.shibumi.state", "hancore.shibumi.control-center",
"hancore.shibumi.reactor", "hancore.shibumi.telemetry",
diff --git a/hancore.shibumi.status/Service.qml b/hancore.shibumi.status/Service.qml
index d21ecda..152fe05 100644
--- a/hancore.shibumi.status/Service.qml
+++ b/hancore.shibumi.status/Service.qml
@@ -16,7 +16,7 @@ Item {
SuiteRuntime.HostShell { id: suiteShell; host: root.shell }
SuiteRuntime.Provider {
pluginId: "hancore.shibumi.status"
- implementationVersion: "0.1.1-beta.16.5"
+ implementationVersion: "0.1.1-beta.16.5.1"
owner: root
host: root.shell
manifest: root.manifest
diff --git a/hancore.shibumi.status/manifest.json b/hancore.shibumi.status/manifest.json
index d747fc5..92ad744 100644
--- a/hancore.shibumi.status/manifest.json
+++ b/hancore.shibumi.status/manifest.json
@@ -2,7 +2,7 @@
"schemaVersion": 1,
"id": "hancore.shibumi.status",
"name": "Shibumi Status",
- "version": "0.1.1-beta.16.5",
+ "version": "0.1.1-beta.16.5.1",
"author": "HANCORE",
"license": "MIT",
"description": "Shibumi tray and notification composition with shared desktop status state.",
diff --git a/hancore.shibumi.storage/Service.qml b/hancore.shibumi.storage/Service.qml
index d0d5950..62145a5 100644
--- a/hancore.shibumi.storage/Service.qml
+++ b/hancore.shibumi.storage/Service.qml
@@ -13,7 +13,7 @@ Item {
SuiteRuntime.Provider {
id: runtimeProvider
pluginId: "hancore.shibumi.storage"
- implementationVersion: "0.1.1-beta.16.5"
+ implementationVersion: "0.1.1-beta.16.5.1"
owner: root
host: root.shell
manifest: root.manifest
diff --git a/hancore.shibumi.storage/manifest.json b/hancore.shibumi.storage/manifest.json
index 89d2905..701672c 100644
--- a/hancore.shibumi.storage/manifest.json
+++ b/hancore.shibumi.storage/manifest.json
@@ -2,7 +2,7 @@
"schemaVersion": 1,
"id": "hancore.shibumi.storage",
"name": "Shibumi Storage",
- "version": "0.1.1-beta.16.5",
+ "version": "0.1.1-beta.16.5.1",
"author": "HANCORE",
"license": "MIT",
"description": "Read-only root usage and physical drive inventory.",
diff --git a/hancore.shibumi.telemetry/Service.qml b/hancore.shibumi.telemetry/Service.qml
index ab7190b..5c1fe85 100644
--- a/hancore.shibumi.telemetry/Service.qml
+++ b/hancore.shibumi.telemetry/Service.qml
@@ -15,7 +15,7 @@ Item {
SuiteRuntime.Provider {
id: runtimeProvider
pluginId: "hancore.shibumi.telemetry"
- implementationVersion: "0.1.1-beta.16.5"
+ implementationVersion: "0.1.1-beta.16.5.1"
owner: root
host: root.shell
manifest: root.manifest
diff --git a/hancore.shibumi.telemetry/manifest.json b/hancore.shibumi.telemetry/manifest.json
index f916b2d..23df8d7 100644
--- a/hancore.shibumi.telemetry/manifest.json
+++ b/hancore.shibumi.telemetry/manifest.json
@@ -2,7 +2,7 @@
"schemaVersion": 1,
"id": "hancore.shibumi.telemetry",
"name": "Shibumi Telemetry",
- "version": "0.1.1-beta.16.5",
+ "version": "0.1.1-beta.16.5.1",
"author": "HANCORE",
"license": "MIT",
"description": "Demand-driven CPU and memory telemetry shared by Shibumi widgets.",
diff --git a/hancore.shibumi.temperature/manifest.json b/hancore.shibumi.temperature/manifest.json
index 7057ca9..1a7a2e0 100644
--- a/hancore.shibumi.temperature/manifest.json
+++ b/hancore.shibumi.temperature/manifest.json
@@ -2,7 +2,7 @@
"schemaVersion": 1,
"id": "hancore.shibumi.temperature",
"name": "Shibumi Temperature",
- "version": "0.1.1-beta.16.5",
+ "version": "0.1.1-beta.16.5.1",
"author": "HANCORE",
"license": "MIT",
"description": "Demand-driven hardware temperature widget and sensor panel.",
diff --git a/hancore.shibumi.update-center/Service.qml b/hancore.shibumi.update-center/Service.qml
index 3124ff0..ef1cbbe 100644
--- a/hancore.shibumi.update-center/Service.qml
+++ b/hancore.shibumi.update-center/Service.qml
@@ -12,7 +12,7 @@ Item {
property var manifest: null
SuiteRuntime.Provider {
pluginId: "hancore.shibumi.update-center"
- implementationVersion: "0.1.1-beta.16.5"
+ implementationVersion: "0.1.1-beta.16.5.1"
owner: root
host: root.shell
manifest: root.manifest
diff --git a/hancore.shibumi.update-center/manifest.json b/hancore.shibumi.update-center/manifest.json
index 44a476b..2bc4f9f 100644
--- a/hancore.shibumi.update-center/manifest.json
+++ b/hancore.shibumi.update-center/manifest.json
@@ -2,7 +2,7 @@
"schemaVersion": 1,
"id": "hancore.shibumi.update-center",
"name": "Shibumi Update Center",
- "version": "0.1.1-beta.16.5",
+ "version": "0.1.1-beta.16.5.1",
"author": "HANCORE",
"license": "MIT",
"description": "Safe repository package and user theme update status for Shibumi.",
diff --git a/hancore.shibumi.workspaces/WorkspaceService.qml b/hancore.shibumi.workspaces/WorkspaceService.qml
index 60c24c8..2ede268 100644
--- a/hancore.shibumi.workspaces/WorkspaceService.qml
+++ b/hancore.shibumi.workspaces/WorkspaceService.qml
@@ -14,7 +14,7 @@ Item {
SuiteRuntime.Provider {
id: runtimeProvider
pluginId: "hancore.shibumi.workspaces"
- implementationVersion: "0.1.1-beta.16.5"
+ implementationVersion: "0.1.1-beta.16.5.1"
owner: root
host: root.shell
manifest: root.manifest
diff --git a/hancore.shibumi.workspaces/manifest.json b/hancore.shibumi.workspaces/manifest.json
index f07f578..8c22974 100644
--- a/hancore.shibumi.workspaces/manifest.json
+++ b/hancore.shibumi.workspaces/manifest.json
@@ -2,7 +2,7 @@
"schemaVersion": 1,
"id": "hancore.shibumi.workspaces",
"name": "Shibumi Workspaces",
- "version": "0.1.1-beta.16.5",
+ "version": "0.1.1-beta.16.5.1",
"author": "HANCORE",
"license": "MIT",
"description": "Shared Hyprland workspace state with the Shibumi workspace presentation.",
diff --git a/packaging/aur/.SRCINFO b/packaging/aur/.SRCINFO
index e2cdfbe..f67c4e9 100644
--- a/packaging/aur/.SRCINFO
+++ b/packaging/aur/.SRCINFO
@@ -1,6 +1,6 @@
pkgbase = shibumi-shell
pkgdesc = Transactional Shibumi desktop shell plugins for Omarchy Quattro
- pkgver = 0.1.1beta.16.5
+ pkgver = 0.1.1beta.16.5.1
pkgrel = 1
url = https://github.com/HANCORE-linux/Shibumi-Shell
arch = any
@@ -30,7 +30,7 @@ pkgbase = shibumi-shell
optdepends = btop: battery panel system monitor action
optdepends = nvidia-utils: NVIDIA GPU telemetry
optdepends = git: source-checkout diagnostics and migration
- source = shibumi-shell-0.1.1-beta.16.5.tar.gz::https://github.com/HANCORE-linux/Shibumi-Shell/releases/download/v0.1.1-beta.16.5/shibumi-shell-0.1.1-beta.16.5.tar.gz
+ source = shibumi-shell-0.1.1-beta.16.5.1.tar.gz::https://github.com/HANCORE-linux/Shibumi-Shell/releases/download/v0.1.1-beta.16.5.1/shibumi-shell-0.1.1-beta.16.5.1.tar.gz
sha256sums = 2eac5b0c462dc4a7b3c3fcfa1fd457f3e31ac62ba5113d3c09f55ac0a9f299ce
pkgname = shibumi-shell
diff --git a/packaging/aur/PKGBUILD b/packaging/aur/PKGBUILD
index 031b966..cb4af59 100644
--- a/packaging/aur/PKGBUILD
+++ b/packaging/aur/PKGBUILD
@@ -1,6 +1,6 @@
# Maintainer: HANCORE Linux
pkgname=shibumi-shell
-_upstream_version=0.1.1-beta.16.5
+_upstream_version=0.1.1-beta.16.5.1
_source_sha256=2eac5b0c462dc4a7b3c3fcfa1fd457f3e31ac62ba5113d3c09f55ac0a9f299ce
pkgver=${_upstream_version//-/}
pkgrel=1
diff --git a/packaging/package-metadata.json b/packaging/package-metadata.json
index 618f433..5be623f 100644
--- a/packaging/package-metadata.json
+++ b/packaging/package-metadata.json
@@ -1,5 +1,5 @@
{
"schemaVersion": 1,
"packageName": "shibumi-shell",
- "version": "0.1.1-beta.16.5"
+ "version": "0.1.1-beta.16.5.1"
}
diff --git a/scripts/check-aur-package b/scripts/check-aur-package
index 53cb682..acc469f 100755
--- a/scripts/check-aur-package
+++ b/scripts/check-aur-package
@@ -46,7 +46,7 @@ jq -e '.schemaVersion == 1
"source-beta.14", "public-beta.14.1", "public-beta.15", "public-beta.15.1",
"public-beta.15.2", "public-beta.15.3", "public-beta.15.4", "public-beta.16",
"public-beta.16.1", "public-beta.16.2", "public-beta.16.3", "public-beta.16.4",
- "public-beta.16.5"
+ "public-beta.16.5", "public-beta.16.5.1"
]' \
contracts/lifecycle-predecessors-v1.json >/dev/null
grep -Fq 'contracts/lifecycle-predecessors-v1.json' "$pkgbuild" || {
diff --git a/tests/audio-native-backend-seam-regression.qml b/tests/audio-native-backend-seam-regression.qml
index 2eedc41..b3eb36f 100644
--- a/tests/audio-native-backend-seam-regression.qml
+++ b/tests/audio-native-backend-seam-regression.qml
@@ -174,7 +174,7 @@ ShellRoot {
Audio.Service {
id: service
shell: serviceHost
- manifest: ({id: "hancore.shibumi.audio", version: "0.1.1-beta.16.5", kinds: ["service"]})
+ manifest: ({id: "hancore.shibumi.audio", version: "0.1.1-beta.16.5.1", kinds: ["service"]})
nativeBackendEnabled: true
nativeBackendOverride: fakeBackend
}
diff --git a/tests/audio-runtime-smoke.qml b/tests/audio-runtime-smoke.qml
index 8a70b9c..89af44c 100644
--- a/tests/audio-runtime-smoke.qml
+++ b/tests/audio-runtime-smoke.qml
@@ -11,7 +11,7 @@ ShellRoot {
property var savedPanel: null
property real originalRadius: 0
property var audioManifest: ({id: "hancore.shibumi.audio",
- version: "0.1.1-beta.16.5", kinds: ["service", "bar-widget"]})
+ version: "0.1.1-beta.16.5.1", kinds: ["service", "bar-widget"]})
function check(value, message) {
if (value) return
console.error("audio-runtime-smoke:", message)
@@ -48,9 +48,9 @@ ShellRoot {
SuiteRuntime.Provider {
id: stateProvider
pluginId: "hancore.shibumi.state"
- implementationVersion: "0.1.1-beta.16.5"
+ implementationVersion: "0.1.1-beta.16.5.1"
owner: tokenState
- manifest: ({id: "hancore.shibumi.state", version: "0.1.1-beta.16.5", kinds: ["service"]})
+ manifest: ({id: "hancore.shibumi.state", version: "0.1.1-beta.16.5.1", kinds: ["service"]})
}
Fixtures.AudioRuntimeBackend { id: backend }
Audio.Service { id: service; nativeBackendOverride: backend }
diff --git a/tests/bar-catalog-consumer-smoke.qml b/tests/bar-catalog-consumer-smoke.qml
index 5ab62d6..2b6142e 100644
--- a/tests/bar-catalog-consumer-smoke.qml
+++ b/tests/bar-catalog-consumer-smoke.qml
@@ -67,10 +67,10 @@ ShellRoot {
SuiteRuntime.Provider {
id: stateProvider
pluginId: "hancore.shibumi.state"
- implementationVersion: "0.1.1-beta.16.5"
+ implementationVersion: "0.1.1-beta.16.5.1"
owner: stateService
host: stateHost
- manifest: ({ id: "hancore.shibumi.state", version: "0.1.1-beta.16.5",
+ manifest: ({ id: "hancore.shibumi.state", version: "0.1.1-beta.16.5.1",
kinds: ["service"] })
}
@@ -92,7 +92,7 @@ ShellRoot {
id: fakePluginRegistry
property string pluginId: "hancore.shibumi.bar"
property var manifest: ({ id: "hancore.shibumi.bar",
- version: "0.1.1-beta.16.5", kinds: ["bar"] })
+ version: "0.1.1-beta.16.5.1", kinds: ["bar"] })
property bool enabled: true
property var _entryPointUrl: null
readonly property var installedPlugins: {
@@ -138,11 +138,11 @@ ShellRoot {
property int catalogReadSerial: currentObservation ? currentObservation.serial : 0
property int catalogGeneration: currentObservation ? currentObservation.generation : 0
property var providerManifest: ({ id: "hancore.shibumi.control-center",
- version: "0.1.1-beta.16.5", kinds: ["service"] })
+ version: "0.1.1-beta.16.5.1", kinds: ["service"] })
QtObject { id: serviceHost; property string pluginId: "hancore.shibumi.control-center" }
SuiteRuntime.Provider {
pluginId: "hancore.shibumi.control-center"
- implementationVersion: "0.1.1-beta.16.5"
+ implementationVersion: "0.1.1-beta.16.5.1"
owner: service
host: serviceHost
manifest: service.providerManifest
@@ -192,7 +192,7 @@ ShellRoot {
root.bar = barFactory.createObject(root, {
omarchyPath: "/fixture/omarchy",
shell: scopedBarHost,
- manifest: ({ id: "hancore.shibumi.bar", version: "0.1.1-beta.16.5",
+ manifest: ({ id: "hancore.shibumi.bar", version: "0.1.1-beta.16.5.1",
kinds: ["bar"] }),
pluginRegistry: fakePluginRegistry,
barWidgetRegistry: fakeWidgetRegistry,
@@ -339,7 +339,7 @@ ShellRoot {
} else if (root.stage === 4) {
if (root.firstService.acquireCalls !== 2) return
root.firstService.providerManifest = ({ id: "invalid",
- version: "0.1.1-beta.16.5", kinds: ["service"] })
+ version: "0.1.1-beta.16.5.1", kinds: ["service"] })
root.stage = 5; root.waits = 0
} else if (root.stage === 5) {
if (root.firstService.releaseCalls !== 2) return
diff --git a/tests/bar-visibility-ipc-smoke.qml b/tests/bar-visibility-ipc-smoke.qml
index d423c0b..a0c307e 100644
--- a/tests/bar-visibility-ipc-smoke.qml
+++ b/tests/bar-visibility-ipc-smoke.qml
@@ -60,7 +60,7 @@ ShellRoot {
shell: fakeShell
manifest: ({
id: "hancore.shibumi.bar",
- version: "0.1.1-beta.16.5",
+ version: "0.1.1-beta.16.5.1",
kinds: ["bar"]
})
pluginRegistry: fakePluginRegistry
diff --git a/tests/catalog-service-smoke.qml b/tests/catalog-service-smoke.qml
index a37224a..241d635 100644
--- a/tests/catalog-service-smoke.qml
+++ b/tests/catalog-service-smoke.qml
@@ -62,7 +62,7 @@ Scope {
}
}
function manifest(valid) {
- return {id: "hancore.shibumi.control-center", version: valid ? "0.1.1-beta.16.5" : "invalid",
+ return {id: "hancore.shibumi.control-center", version: valid ? "0.1.1-beta.16.5.1" : "invalid",
kinds: ["service", "bar-widget"]}
}
function changedCatalogOutput() {
diff --git a/tests/core-services-smoke.qml b/tests/core-services-smoke.qml
index 08611fc..54138f3 100644
--- a/tests/core-services-smoke.qml
+++ b/tests/core-services-smoke.qml
@@ -20,14 +20,14 @@ ShellRoot {
id: telemetry
shell: fakeShell
thermalProbeEnabled: false
- manifest: ({id: "hancore.shibumi.telemetry", version: "0.1.1-beta.16.5", kinds: ["service"]})
+ manifest: ({id: "hancore.shibumi.telemetry", version: "0.1.1-beta.16.5.1", kinds: ["service"]})
}
Cpu.Service {
id: cpu
shell: fakeShell
gpuProbeEnabled: false
- manifest: ({id: "hancore.shibumi.cpu", version: "0.1.1-beta.16.5", kinds: ["service"]})
+ manifest: ({id: "hancore.shibumi.cpu", version: "0.1.1-beta.16.5.1", kinds: ["service"]})
}
QtObject {
@@ -40,7 +40,7 @@ ShellRoot {
PowerState.Service {
id: power
shell: fakeShell
- manifest: ({id: "hancore.shibumi.power-state", version: "0.1.1-beta.16.5", kinds: ["service"]})
+ manifest: ({id: "hancore.shibumi.power-state", version: "0.1.1-beta.16.5.1", kinds: ["service"]})
batterySnapshotOverride: ({ready: false})
commandOverrides: ({}) // This pure projection smoke may never launch helpers.
}
diff --git a/tests/fixtures/native-runtime/probe.py b/tests/fixtures/native-runtime/probe.py
index 5251118..0d0d3f1 100644
--- a/tests/fixtures/native-runtime/probe.py
+++ b/tests/fixtures/native-runtime/probe.py
@@ -132,7 +132,7 @@ def catalog_probe():
"actual native catalog identity DTO mismatch")
control = ready["snapshot"]["byId"]["hancore.shibumi.control-center"]
check(control["description"] and control["author"] == "HANCORE"
- and control["version"] == "0.1.1-beta.16.5"
+ and control["version"] == "0.1.1-beta.16.5.1"
and control["barWidget"]["defaultSection"] == "left",
"package-bound catalog presentation metadata was lost")
check(host_config() == original, "read-only catalog changed native config")
diff --git a/tests/fixtures/release-predecessor.json b/tests/fixtures/release-predecessor.json
index b7c9ab7..4632538 100644
--- a/tests/fixtures/release-predecessor.json
+++ b/tests/fixtures/release-predecessor.json
@@ -1,11 +1,11 @@
{
"schemaVersion": 1,
- "version": "0.1.1-beta.16.4",
- "tag": "v0.1.1-beta.16.4",
- "revision": "64b9369559b0de2ffdc1faf1c563326c8173035c",
- "payloadDigest": "bc60b476803f72d5604e592647db7f50c1f00723b986ae87e7730cba79779d34",
- "releaseId": 413874192,
- "releaseUrl": "https://github.com/HANCORE-linux/Shibumi-Shell/releases/tag/v0.1.1-beta.16.4",
- "publishedAt": "2026-10-15T13:55:25Z",
+ "version": "0.1.1-beta.16.5",
+ "tag": "v0.1.1-beta.16.5",
+ "revision": "8b34d030a303aa35d6033923c8f3c38c4c25b29b",
+ "payloadDigest": "a090b82858c554f02d44030755f779b2827ae51e55bca750b7163d5b330472dd",
+ "releaseId": 420819799,
+ "releaseUrl": "https://github.com/HANCORE-linux/Shibumi-Shell/releases/tag/v0.1.1-beta.16.5",
+ "publishedAt": "2026-10-22T14:24:11Z",
"prerelease": true
}
diff --git a/tests/gpu-selection-state-smoke.qml b/tests/gpu-selection-state-smoke.qml
index e2004fd..451598d 100644
--- a/tests/gpu-selection-state-smoke.qml
+++ b/tests/gpu-selection-state-smoke.qml
@@ -25,13 +25,13 @@ ShellRoot {
id: stateService
shell: fakeShell
omarchyPath: Quickshell.env("OMARCHY_PATH")
- manifest: ({id: "hancore.shibumi.state", version: "0.1.1-beta.16.5", kinds: ["service"]})
+ manifest: ({id: "hancore.shibumi.state", version: "0.1.1-beta.16.5.1", kinds: ["service"]})
}
Cpu.Service {
id: cpuService
shell: fakeShell
- manifest: ({id: "hancore.shibumi.cpu", version: "0.1.1-beta.16.5", kinds: ["service"]})
+ manifest: ({id: "hancore.shibumi.cpu", version: "0.1.1-beta.16.5.1", kinds: ["service"]})
gpuProbeEnabled: false
}
diff --git a/tests/host-registry-prime-smoke.qml b/tests/host-registry-prime-smoke.qml
index 5163ac4..dbae333 100644
--- a/tests/host-registry-prime-smoke.qml
+++ b/tests/host-registry-prime-smoke.qml
@@ -50,11 +50,11 @@ ShellRoot {
Shared.Provider {
id: stateProvider
pluginId: "hancore.shibumi.state"
- implementationVersion: "0.1.1-beta.16.5"
+ implementationVersion: "0.1.1-beta.16.5.1"
owner: stateOwner
host: stateHost
manifest: ({ id: "hancore.shibumi.state",
- version: "0.1.1-beta.16.5", kinds: ["service"] })
+ version: "0.1.1-beta.16.5.1", kinds: ["service"] })
}
QtObject {
@@ -77,11 +77,11 @@ ShellRoot {
}
Shared.Provider {
pluginId: "hancore.shibumi.bar"
- implementationVersion: "0.1.1-beta.16.5"
+ implementationVersion: "0.1.1-beta.16.5.1"
owner: owner
host: owner.providerHost
manifest: ({ id: "hancore.shibumi.bar",
- version: "0.1.1-beta.16.5", kinds: ["bar"] })
+ version: "0.1.1-beta.16.5.1", kinds: ["bar"] })
}
}
}
diff --git a/tests/media-spectrum-service-smoke.qml b/tests/media-spectrum-service-smoke.qml
index d00f345..e5e78cb 100644
--- a/tests/media-spectrum-service-smoke.qml
+++ b/tests/media-spectrum-service-smoke.qml
@@ -48,7 +48,7 @@ ShellRoot {
Media.Service {
id: spectrum
shell: fakeShell
- manifest: ({id: "hancore.shibumi.media", version: "0.1.1-beta.16.5", kinds: ["service", "bar-widget"]})
+ manifest: ({id: "hancore.shibumi.media", version: "0.1.1-beta.16.5.1", kinds: ["service", "bar-widget"]})
}
Timer {
diff --git a/tests/plugin-update-service-smoke.qml b/tests/plugin-update-service-smoke.qml
index a8e8efa..76810f6 100644
--- a/tests/plugin-update-service-smoke.qml
+++ b/tests/plugin-update-service-smoke.qml
@@ -209,7 +209,7 @@ ShellRoot {
if (service.available || service.check(true))
return root.fail("scoped update worker started before manifest admission")
service.manifest = {id: "hancore.shibumi.control-center",
- version: "0.1.1-beta.16.5", kinds: ["service", "bar-widget"]}
+ version: "0.1.1-beta.16.5.1", kinds: ["service", "bar-widget"]}
root.phase++
root.ticks = 0
return
diff --git a/tests/power-deferred-smoke.qml b/tests/power-deferred-smoke.qml
index 4283cf8..42e9346 100644
--- a/tests/power-deferred-smoke.qml
+++ b/tests/power-deferred-smoke.qml
@@ -57,7 +57,7 @@ ShellRoot {
PowerState.Service {
id: power
shell: host
- manifest: root.allowed ? ({id: "hancore.shibumi.power-state", version: "0.1.1-beta.16.5", kinds: ["service"]}) : null
+ manifest: root.allowed ? ({id: "hancore.shibumi.power-state", version: "0.1.1-beta.16.5.1", kinds: ["service"]}) : null
batterySnapshotOverride: battery
commandOverrides: ({
profiles: ["/usr/bin/python3", "-I", root.helper, root.directory, "profiles"],
diff --git a/tests/power-runtime-smoke.qml b/tests/power-runtime-smoke.qml
index be4ad38..9b68442 100644
--- a/tests/power-runtime-smoke.qml
+++ b/tests/power-runtime-smoke.qml
@@ -24,7 +24,7 @@ ShellRoot {
readonly property var power: serviceLoader.item
readonly property string fixturePath: Quickshell.env("SHIBUMI_POWER_SCOPE_DIR")
readonly property string helper: decodeURIComponent(String(Qt.resolvedUrl("fixtures/power-runtime-helper.py")).substring(7))
- readonly property var validManifest: ({ id: "hancore.shibumi.power-state", version: "0.1.1-beta.16.5", kinds: ["service"], entryPoints: { service: "Service.qml" } })
+ readonly property var validManifest: ({ id: "hancore.shibumi.power-state", version: "0.1.1-beta.16.5.1", kinds: ["service"], entryPoints: { service: "Service.qml" } })
readonly property var fakeCommands: ({
profiles: ["/usr/bin/python3", "-I", helper, fixturePath, "profiles"],
activeProfile: ["/usr/bin/python3", "-I", helper, fixturePath, "activeProfile"],
@@ -55,10 +55,10 @@ ShellRoot {
}
SuiteRuntime.Provider {
pluginId: "hancore.shibumi.state"
- implementationVersion: "0.1.1-beta.16.5"
+ implementationVersion: "0.1.1-beta.16.5.1"
owner: state
host: root.stateEnabled ? stateHost : null
- manifest: ({ id: "hancore.shibumi.state", version: "0.1.1-beta.16.5", kinds: ["service"] })
+ manifest: ({ id: "hancore.shibumi.state", version: "0.1.1-beta.16.5.1", kinds: ["service"] })
}
QtObject {
id: battery
diff --git a/tests/power-service-runtime-smoke.qml b/tests/power-service-runtime-smoke.qml
index 6cab4ea..e19ed49 100644
--- a/tests/power-service-runtime-smoke.qml
+++ b/tests/power-service-runtime-smoke.qml
@@ -14,7 +14,7 @@ ShellRoot {
PowerState.Service {
id: power
shell: scopedHost
- manifest: ({ id: "hancore.shibumi.power-state", version: "0.1.1-beta.16.5",
+ manifest: ({ id: "hancore.shibumi.power-state", version: "0.1.1-beta.16.5.1",
kinds: ["service"], entryPoints: { service: "Service.qml" } })
batterySnapshotOverride: ({ ready: false })
commandOverrides: ({
diff --git a/tests/reactor-plugin-smoke.qml b/tests/reactor-plugin-smoke.qml
index 02decf9..369350f 100644
--- a/tests/reactor-plugin-smoke.qml
+++ b/tests/reactor-plugin-smoke.qml
@@ -76,7 +76,7 @@ ShellRoot {
Audio.Service {
id: fakeAudio
shell: fakeShell
- manifest: ({id: "hancore.shibumi.audio", version: "0.1.1-beta.16.5", kinds: ["service"]})
+ manifest: ({id: "hancore.shibumi.audio", version: "0.1.1-beta.16.5.1", kinds: ["service"]})
nativeBackendEnabled: false
}
@@ -115,7 +115,7 @@ ShellRoot {
Reactor.Service {
id: reactorService
- manifest: ({id: "hancore.shibumi.reactor", version: "0.1.1-beta.16.5", kinds: ["service"]})
+ manifest: ({id: "hancore.shibumi.reactor", version: "0.1.1-beta.16.5.1", kinds: ["service"]})
shell: fakeShell
runtimeProbesEnabled: false
}
diff --git a/tests/reactor-runtime-smoke.qml b/tests/reactor-runtime-smoke.qml
index c753966..84ec5df 100644
--- a/tests/reactor-runtime-smoke.qml
+++ b/tests/reactor-runtime-smoke.qml
@@ -16,7 +16,7 @@ ShellRoot {
property int beforeLoss: 0
property var cachedMode: null
property var cachedTest: null
- readonly property var manifest: ({id: "hancore.shibumi.reactor", version: "0.1.1-beta.16.5", kinds: ["service"]})
+ readonly property var manifest: ({id: "hancore.shibumi.reactor", version: "0.1.1-beta.16.5.1", kinds: ["service"]})
function check(value, message) {
if (value) return
console.error("reactor-runtime:", message)
@@ -44,14 +44,14 @@ ShellRoot {
property bool outputMuted: true
}
SuiteRuntime.Provider {
- pluginId: "hancore.shibumi.state"; implementationVersion: "0.1.1-beta.16.5"
+ pluginId: "hancore.shibumi.state"; implementationVersion: "0.1.1-beta.16.5.1"
owner: state; host: root.stateEnabled ? stateHost : null
- manifest: ({id: "hancore.shibumi.state", version: "0.1.1-beta.16.5", kinds: ["service"]})
+ manifest: ({id: "hancore.shibumi.state", version: "0.1.1-beta.16.5.1", kinds: ["service"]})
}
SuiteRuntime.Provider {
- pluginId: "hancore.shibumi.audio"; implementationVersion: "0.1.1-beta.16.5"
+ pluginId: "hancore.shibumi.audio"; implementationVersion: "0.1.1-beta.16.5.1"
owner: audio; host: root.audioEnabled ? audioHost : null
- manifest: ({id: "hancore.shibumi.audio", version: "0.1.1-beta.16.5", kinds: ["service"]})
+ manifest: ({id: "hancore.shibumi.audio", version: "0.1.1-beta.16.5.1", kinds: ["service"]})
}
Reactor.Service { id: service; runtimeProbesEnabled: false }
Reactor.Service { id: duplicate; runtimeProbesEnabled: false }
diff --git a/tests/scoped-state-regression.qml b/tests/scoped-state-regression.qml
index 243b0d6..1372c3a 100644
--- a/tests/scoped-state-regression.qml
+++ b/tests/scoped-state-regression.qml
@@ -36,7 +36,7 @@ ShellRoot {
id: state
shell: host
omarchyPath: Quickshell.env("OMARCHY_PATH")
- manifest: ({ id: "hancore.shibumi.state", version: "0.1.1-beta.16.5",
+ manifest: ({ id: "hancore.shibumi.state", version: "0.1.1-beta.16.5.1",
kinds: ["service"], __sourceDir: Quickshell.env("DECOY_MARKER_DIR") })
}
BarProbe.Marker {
diff --git a/tests/shared-runtime-regression.qml b/tests/shared-runtime-regression.qml
index fe36605..ae3f13a 100644
--- a/tests/shared-runtime-regression.qml
+++ b/tests/shared-runtime-regression.qml
@@ -54,7 +54,7 @@ ShellRoot {
id: state
shell: stateApi
omarchyPath: Quickshell.env("OMARCHY_PATH")
- manifest: ({id: "hancore.shibumi.state", version: "0.1.1-beta.16.5", kinds: ["service"]})
+ manifest: ({id: "hancore.shibumi.state", version: "0.1.1-beta.16.5.1", kinds: ["service"]})
}
BarProbe.Marker { id: markerBar }
Item {
@@ -66,10 +66,10 @@ ShellRoot {
Shared.Provider {
id: barProvider
pluginId: "hancore.shibumi.bar"
- implementationVersion: "0.1.1-beta.16.5"
+ implementationVersion: "0.1.1-beta.16.5.1"
owner: barOwner
host: barOwner.injectedHost
- manifest: ({id: "hancore.shibumi.bar", version: "0.1.1-beta.16.5", kinds: ["bar"]})
+ manifest: ({id: "hancore.shibumi.bar", version: "0.1.1-beta.16.5.1", kinds: ["bar"]})
}
}
Shared.HostShell { id: client; host: stateApi }
@@ -82,7 +82,7 @@ ShellRoot {
property int value: 0
Shared.Provider {
pluginId: "hancore.shibumi.audio"
- implementationVersion: "0.1.1-beta.16.5"
+ implementationVersion: "0.1.1-beta.16.5.1"
owner: peer
host: peer.injectedHost
manifest: peer.injectedManifest
@@ -152,7 +152,7 @@ ShellRoot {
check(left.state === null && right.state === null && !state.ready && !state.writePending,
"version drift retained State authority or queued intent")
check(!state.setGroupSetting("G4", "compact", true), "revoked State accepted intent")
- state.manifest = {id: "hancore.shibumi.state", version: "0.1.1-beta.16.5", kinds: ["service"]}
+ state.manifest = {id: "hancore.shibumi.state", version: "0.1.1-beta.16.5.1", kinds: ["service"]}
check(left.state === state && Shared.Runtime._selected("hancore.shibumi.state") !== oldLease,
"State did not register a new lifetime")
Shared.Runtime.unregisterProvider(oldLease)
@@ -161,10 +161,10 @@ ShellRoot {
check(first !== null && client.serviceFor("hancore.shibumi.audio") === null,
"parentless service published before injection")
first.injectedHost = audioApi
- first.injectedManifest = {id: "hancore.shibumi.audio", version: "0.1.1-beta.16.5", kinds: ["service"]}
+ first.injectedManifest = {id: "hancore.shibumi.audio", version: "0.1.1-beta.16.5.1", kinds: ["service"]}
check(client.serviceFor("hancore.shibumi.audio") === first, "provider registration failed")
second = serviceFactory.createObject(null, {injectedHost: audioApi,
- injectedManifest: {id: "hancore.shibumi.audio", version: "0.1.1-beta.16.5", kinds: ["service"]}})
+ injectedManifest: {id: "hancore.shibumi.audio", version: "0.1.1-beta.16.5.1", kinds: ["service"]}})
check(client.serviceFor("hancore.shibumi.audio") === null,
"duplicate provider was last-writer-wins: second=" + JSON.stringify({
manifest: second.injectedManifest, kindsArray: Array.isArray(second.injectedManifest.kinds),
@@ -192,7 +192,7 @@ ShellRoot {
first.injectedHost = audioApi
check(client.serviceFor("hancore.shibumi.audio") === first, "scope recovery stayed unavailable")
let getterReached = false
- const malformed = {version: "0.1.1-beta.16.5", kinds: ["service"]}
+ const malformed = {version: "0.1.1-beta.16.5.1", kinds: ["service"]}
Object.defineProperty(malformed, "id", {get: function() {
getterReached = true
throw new Error("controlled malformed metadata getter")
diff --git a/tests/state-service-smoke.qml b/tests/state-service-smoke.qml
index f5f5fb9..90abba7 100644
--- a/tests/state-service-smoke.qml
+++ b/tests/state-service-smoke.qml
@@ -55,7 +55,7 @@ ShellRoot {
id: state
omarchyPath: Quickshell.env("OMARCHY_PATH")
shell: fakeShell
- manifest: ({id: "hancore.shibumi.state", version: "0.1.1-beta.16.5", kinds: ["service"]})
+ manifest: ({id: "hancore.shibumi.state", version: "0.1.1-beta.16.5.1", kinds: ["service"]})
}
Component.onCompleted: steps = [
function() {
diff --git a/tests/status-plugin-smoke.qml b/tests/status-plugin-smoke.qml
index b1e71ec..bed7928 100644
--- a/tests/status-plugin-smoke.qml
+++ b/tests/status-plugin-smoke.qml
@@ -204,11 +204,11 @@ ShellRoot {
SuiteRuntime.Provider {
id: leasedBarProvider
pluginId: "hancore.shibumi.bar"
- implementationVersion: "0.1.1-beta.16.5"
+ implementationVersion: "0.1.1-beta.16.5.1"
owner: leasedBarOwner
host: leasedBarOwner.providerHost
manifest: ({ id: "hancore.shibumi.bar",
- version: "0.1.1-beta.16.5", kinds: ["bar"] })
+ version: "0.1.1-beta.16.5.1", kinds: ["bar"] })
}
}
@@ -226,7 +226,7 @@ ShellRoot {
Status.Service {
shell: rawScopedStatusShell
manifest: ({ id: "hancore.shibumi.status",
- version: "0.1.1-beta.16.5", kinds: ["service"] })
+ version: "0.1.1-beta.16.5.1", kinds: ["service"] })
actionRunner: actionRecorder
runtimeProbesEnabled: false
}
diff --git a/tests/telemetry-plugins-smoke.qml b/tests/telemetry-plugins-smoke.qml
index f40ac4b..2206e25 100644
--- a/tests/telemetry-plugins-smoke.qml
+++ b/tests/telemetry-plugins-smoke.qml
@@ -27,7 +27,7 @@ ShellRoot {
Telemetry.Service {
id: telemetryService
shell: fakeShell
- manifest: ({id: "hancore.shibumi.telemetry", version: "0.1.1-beta.16.5", kinds: ["service"]})
+ manifest: ({id: "hancore.shibumi.telemetry", version: "0.1.1-beta.16.5.1", kinds: ["service"]})
// Keep this fixture isolated from machine-specific hwmon inventory.
thermalProbeEnabled: false
}
@@ -35,7 +35,7 @@ ShellRoot {
Cpu.Service {
id: cpuService
shell: fakeShell
- manifest: ({id: "hancore.shibumi.cpu", version: "0.1.1-beta.16.5", kinds: ["service"]})
+ manifest: ({id: "hancore.shibumi.cpu", version: "0.1.1-beta.16.5.1", kinds: ["service"]})
gpuProbeEnabled: false
}
diff --git a/tests/telemetry-runtime-smoke.qml b/tests/telemetry-runtime-smoke.qml
index 52c0cbc..7122b78 100644
--- a/tests/telemetry-runtime-smoke.qml
+++ b/tests/telemetry-runtime-smoke.qml
@@ -22,7 +22,7 @@ ShellRoot {
Qt.exit(1)
throw new Error(message)
}
- function manifest(id) { return {id: id, version: "0.1.1-beta.16.5", kinds: ["service"]} }
+ function manifest(id) { return {id: id, version: "0.1.1-beta.16.5.1", kinds: ["service"]} }
component ScopedHost: QtObject {
property string pluginId: ""
function serviceFor(id) { root.check(false, "raw scoped lookup: " + id); return null }
@@ -43,7 +43,7 @@ ShellRoot {
}
SuiteRuntime.Provider {
pluginId: "hancore.shibumi.state"
- implementationVersion: "0.1.1-beta.16.5"
+ implementationVersion: "0.1.1-beta.16.5.1"
host: stateHost
owner: state
manifest: root.manifest("hancore.shibumi.state")
diff --git a/tests/test_package_release.py b/tests/test_package_release.py
index b499f0f..e04e893 100644
--- a/tests/test_package_release.py
+++ b/tests/test_package_release.py
@@ -263,10 +263,20 @@ def test_lifecycle_contract_pins_exact_release_identities(self) -> None:
},
"public-beta.16.5": {
"suiteVersion": "0.1.1-beta.16.5",
- "sourceRevisions": ["package:0.1.1-beta.16.5"],
+ "sourceRevisions": [
+ "8b34d030a303aa35d6033923c8f3c38c4c25b29b",
+ "1d7a00b2742fb4d479774a4f722c6c2ef96d0601",
+ "package:0.1.1-beta.16.5",
+ ],
"settingsStorageVersion": 1,
"payloadDigest": "a090b82858c554f02d44030755f779b2827ae51e55bca750b7163d5b330472dd",
},
+ "public-beta.16.5.1": {
+ "suiteVersion": "0.1.1-beta.16.5.1",
+ "sourceRevisions": ["package:0.1.1-beta.16.5.1"],
+ "settingsStorageVersion": 1,
+ "payloadDigest": "a4a0b43a04603a9b40354df1498e74b4b42e55158c1d3f9d68c9460db30802cf",
+ },
}
self.assertEqual(set(states), set(expected))
for identity_id, pinned in expected.items():
diff --git a/tests/theme-palette-runtime-smoke.qml b/tests/theme-palette-runtime-smoke.qml
index a772d5a..eaaee7c 100644
--- a/tests/theme-palette-runtime-smoke.qml
+++ b/tests/theme-palette-runtime-smoke.qml
@@ -26,7 +26,7 @@ ShellRoot {
id: state
shell: fakeShell
omarchyPath: Quickshell.env("OMARCHY_PATH")
- manifest: ({id: "hancore.shibumi.state", version: "0.1.1-beta.16.5", kinds: ["service"]})
+ manifest: ({id: "hancore.shibumi.state", version: "0.1.1-beta.16.5.1", kinds: ["service"]})
}
function colorText(value) {
diff --git a/tests/third-party-integration-smoke.qml b/tests/third-party-integration-smoke.qml
index e0e91dd..8a57f51 100644
--- a/tests/third-party-integration-smoke.qml
+++ b/tests/third-party-integration-smoke.qml
@@ -38,14 +38,14 @@ ShellRoot {
AudioOwner.Service {
shell: fakeShell
nativeBackendEnabled: false // Controlled peak stub; this fixture tests IPC.
- manifest: ({ id: "hancore.shibumi.audio", version: "0.1.1-beta.16.5", kinds: ["service"] })
+ manifest: ({ id: "hancore.shibumi.audio", version: "0.1.1-beta.16.5.1", kinds: ["service"] })
}
StateOwner.Service {
shell: fakeShell
omarchyPath: ""
manifest: ({
- id: "hancore.shibumi.state", version: "0.1.1-beta.16.5", kinds: ["service"]
+ id: "hancore.shibumi.state", version: "0.1.1-beta.16.5.1", kinds: ["service"]
})
}
diff --git a/tests/widget-pipeline-diagnostics-smoke.qml b/tests/widget-pipeline-diagnostics-smoke.qml
index e523423..d0ec148 100644
--- a/tests/widget-pipeline-diagnostics-smoke.qml
+++ b/tests/widget-pipeline-diagnostics-smoke.qml
@@ -237,11 +237,11 @@ ShellRoot {
Shared.Provider {
id: stateProvider
pluginId: "hancore.shibumi.state"
- implementationVersion: "0.1.1-beta.16.5"
+ implementationVersion: "0.1.1-beta.16.5.1"
owner: stateOwner
host: stateHost
manifest: ({ id: "hancore.shibumi.state",
- version: "0.1.1-beta.16.5", kinds: ["service"] })
+ version: "0.1.1-beta.16.5.1", kinds: ["service"] })
}
QtObject {
@@ -290,7 +290,7 @@ ShellRoot {
barWidgetRegistry: scopedWidgetRegistry
manifest: ({
id: "hancore.shibumi.bar",
- version: "0.1.1-beta.16.5",
+ version: "0.1.1-beta.16.5.1",
kinds: ["bar"]
})
barConfig: ({
diff --git a/tests/workspaces-plugin-smoke.qml b/tests/workspaces-plugin-smoke.qml
index fe48147..7758699 100644
--- a/tests/workspaces-plugin-smoke.qml
+++ b/tests/workspaces-plugin-smoke.qml
@@ -125,7 +125,7 @@ ShellRoot {
Workspaces.WorkspaceService {
id: workspaceState
shell: fakeShell
- manifest: ({id: "hancore.shibumi.workspaces", version: "0.1.1-beta.16.5", kinds: ["service"]})
+ manifest: ({id: "hancore.shibumi.workspaces", version: "0.1.1-beta.16.5.1", kinds: ["service"]})
stateService: preferenceState
backendOverride: QtObject {
property var focusedWorkspace: ({ id: 8 })
diff --git a/tests/workspaces-runtime-smoke.qml b/tests/workspaces-runtime-smoke.qml
index 51d1669..5ac9109 100644
--- a/tests/workspaces-runtime-smoke.qml
+++ b/tests/workspaces-runtime-smoke.qml
@@ -15,7 +15,7 @@ ShellRoot {
property var cachedPreference: null
property int callsBeforeLoss: 0
property int writesBeforeLoss: 0
- readonly property var validManifest: ({id: "hancore.shibumi.workspaces", version: "0.1.1-beta.16.5", kinds: ["service"]})
+ readonly property var validManifest: ({id: "hancore.shibumi.workspaces", version: "0.1.1-beta.16.5.1", kinds: ["service"]})
function check(value, message) {
if (value) return
console.error("workspaces-runtime:", message)
@@ -44,10 +44,10 @@ ShellRoot {
}
SuiteRuntime.Provider {
pluginId: "hancore.shibumi.state"
- implementationVersion: "0.1.1-beta.16.5"
+ implementationVersion: "0.1.1-beta.16.5.1"
owner: state
host: root.stateEnabled ? stateHost : null
- manifest: ({id: "hancore.shibumi.state", version: "0.1.1-beta.16.5", kinds: ["service"]})
+ manifest: ({id: "hancore.shibumi.state", version: "0.1.1-beta.16.5.1", kinds: ["service"]})
}
QtObject {
id: backend
From bd3473f37cc97d765c28d5d61eb2e57e1643e0f6 Mon Sep 17 00:00:00 2001
From: HANCORE-linux <230438592+HANCORE-linux@users.noreply.github.com>
Date: Fri, 23 Oct 2026 10:28:30 +0200
Subject: [PATCH 6/9] test(bar): accept Qt 6.12 native color warnings in the
bar-switch guard
---
tests/bar-switch-regression.py | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/tests/bar-switch-regression.py b/tests/bar-switch-regression.py
index 12afe04..fe3b34d 100644
--- a/tests/bar-switch-regression.py
+++ b/tests/bar-switch-regression.py
@@ -87,7 +87,10 @@ def main():
print("BAR_SWITCH_CLEANUP "+json.dumps({"removed":not base.exists()}), flush=True)
rows = [json.loads(line.split("BAR_SWITCH_STEP ",1)[1]) for line in text.splitlines() if "BAR_SWITCH_STEP " in line]
census = [json.loads(line.split("BAR_SWITCH_CENSUS ",1)[1]) for line in text.splitlines() if "BAR_SWITCH_CENSUS " in line]
- allowed = r'^\s*(?:INFO: (?:Launching config:|Shell ID:|Saving logs to|Configuration Loaded)|WARN quickshell.qmlscanner: Module path contains invalid characters for a module name:|DEBUG qml: BAR_SWITCH_)'
+ # Quickshell 0.3.2 / Qt 6.12 (Omarchy 4.0.6) report the embedded native Ui color bindings as
+ # undefined while bars are created and torn down; the unchanged Beta 16.5 fixture shows the
+ # same three lines on that stack (hotfix 16.5.1, round 408 gate 16).
+ allowed = r'^\s*(?:INFO: (?:Launching config:|Shell ID:|Saving logs to|Configuration Loaded)|WARN quickshell.qmlscanner: Module path contains invalid characters for a module name:|DEBUG qml: BAR_SWITCH_|WARN scene: @Ui/(?:WidgetButton|Panel)\.qml\[\d+:\d+\]: Unable to assign \[undefined\] to QColor$)'
unexpected = [line for line in text.splitlines() if line.strip() and not re.match(allowed,line)]
assert result.returncode == 0 and "BAR_SWITCH_DONE" in text, "fixture failed"
assert not unexpected, unexpected
From 6f7ada50991b281c1983de91dd40c69ee58433d9 Mon Sep 17 00:00:00 2001
From: HANCORE-linux <230438592+HANCORE-linux@users.noreply.github.com>
Date: Fri, 23 Oct 2026 11:27:48 +0200
Subject: [PATCH 7/9] test(validation): pin the installed-package contract to
Omarchy 4.0.6
---
tests/omarchy-installed-package-contract-regression.sh | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tests/omarchy-installed-package-contract-regression.sh b/tests/omarchy-installed-package-contract-regression.sh
index 25dcc99..0e71c0e 100755
--- a/tests/omarchy-installed-package-contract-regression.sh
+++ b/tests/omarchy-installed-package-contract-regression.sh
@@ -4,7 +4,7 @@ set -euo pipefail
repo_root=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/.." && pwd)
export SHIBUMI_OMARCHY_BASELINE_PROFILE=installed-package
-export SHIBUMI_OMARCHY_BASELINE_VERSION=4.0.4
+export SHIBUMI_OMARCHY_BASELINE_VERSION=4.0.6
export OMARCHY_PATH=/usr/share/omarchy
exec "$repo_root/tests/contract-regression.sh"
From 4870ce9f9d7a533486323f82935c8ac759598c41 Mon Sep 17 00:00:00 2001
From: HANCORE-linux <230438592+HANCORE-linux@users.noreply.github.com>
Date: Fri, 23 Oct 2026 09:36:53 +0200
Subject: [PATCH 8/9] docs(release): document the Beta 16.5.1 hotfixes
---
.github/release-notes/v0.1.1-beta.16.5.1.md | 45 ++++++
CHANGELOG.md | 19 +++
docs/configuration.md | 2 +-
docs/development/validation-host.md | 9 ++
docs/release-readiness.md | 157 ++++++++++++++++++--
5 files changed, 219 insertions(+), 13 deletions(-)
create mode 100644 .github/release-notes/v0.1.1-beta.16.5.1.md
diff --git a/.github/release-notes/v0.1.1-beta.16.5.1.md b/.github/release-notes/v0.1.1-beta.16.5.1.md
new file mode 100644
index 0000000..516beaf
--- /dev/null
+++ b/.github/release-notes/v0.1.1-beta.16.5.1.md
@@ -0,0 +1,45 @@
+# Shibumi v0.1.1-beta.16.5.1
+
+Hotfix for Omarchy's renamed Appearance menu and for Reactor quotes on Qt 6.12.
+
+## Fixed: Omarchy Appearance menu keys
+
+Omarchy commit `6bee248a3` (2026-10-20) renamed `style.theme` and `style.background` to `appearance.theme` and `appearance.background`. Beta 16.5 rejected that intact stock menu during install, update, repair or migrate (`Omarchy stock menu has no action for style.theme`) and rolled back to the previous installation. This hotfix accepts either key family, overrides the matching host items and keeps the host's native fallback actions. If neither family exists, picker routing is omitted with a warning instead of aborting the transaction.
+
+The regression affects Omarchy master/Edge from that commit onward and any later release that contains it. Omarchy 4.0.4–4.0.6 and 4.5.0-rc1 predate the rename and are not affected. Picker-provider behavior is unchanged.
+
+## Fixed: Reactor quote text on Qt 6.12
+
+On Omarchy 4.0.6's Qt 6.12 stack, arrays delivered through QML signals arrive as sequences rather than JavaScript Arrays. Reactor discarded the quote choices, so quote events showed no text. This hotfix accepts those sequences without changing the renderer's timing or geometry. The settled Bar layout context is normalized once at its signal boundary so provider groups and native sections reach the existing strict validators intact, and Audio stream-label resolution accepts Quickshell's player sequences without dropping entries.
+
+## Install and update
+
+For a new source installation, use the published release tag:
+
+```bash
+sudo pacman -S --needed python jq curl networkmanager power-profiles-daemon upower xdg-utils libnotify wl-clipboard ttf-material-symbols-variable ttf-jetbrains-mono-nerd-basic noto-fonts-cjk adwaita-fonts
+git clone https://github.com/HANCORE-linux/Shibumi-Shell.git
+cd Shibumi-Shell
+git checkout v0.1.1-beta.16.5.1
+./scripts/shibumi-suite install --yes
+```
+
+Update an admitted Beta 16.4 or Beta 16.5 installation from its existing checkout:
+
+```bash
+git fetch --tags
+git checkout v0.1.1-beta.16.5.1
+./scripts/shibumi-suite update --dry-run
+./scripts/shibumi-suite update --yes
+./scripts/shibumi-suite status
+```
+
+The exact Beta 16.5 tag (`8b34d03`) and its main integration merge (`1d7a00b`) are admitted predecessors; older supported identities retain their exact revision and payload checks. Do not install or update from `main`, or delete lifecycle state to bypass admission. See the [installation and recovery guide](https://github.com/HANCORE-linux/Shibumi-Shell/blob/v0.1.1-beta.16.5.1/docs/install.md). AUR publication remains deferred.
+
+## Validation
+
+Validated on Omarchy 4.0.6 / Quickshell 0.3.2 / Qt 6.12 and against the forward compatibility reference `246f33a2`. The renamed menu was verified against the stock menu file of Omarchy `6bee248a3` in the suite's tests and an offline replay; no live host with that revision was available for this release.
+
+## Known points
+
+Unchanged from Beta 16.5.
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 5503019..c6ad4c3 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,24 @@
# Changelog
+## [0.1.1-beta.16.5.1] - 2026-10-23
+
+### Fixed
+
+- Accept Omarchy's renamed `appearance.theme` and `appearance.background` menu
+ keys while retaining `style.*` support and the host's native fallback actions.
+ Install, update, repair and migrate no longer reject an intact newer stock
+ menu. If neither key family exists, remove stale picker routing and warn
+ rather than aborting the transaction.
+- Restore Reactor quote text on Qt 6.12. Arrays delivered through QML signals
+ arrive as sequences rather than JavaScript Arrays; retain those quote choices
+ instead of discarding them before rendering. Normalize settled Bar layout
+ context at its signal boundary, preserving strict downstream validators, and
+ accept Quickshell's player sequences when resolving Audio stream labels.
+
+### Validation
+
+- The validation host is re-pinned to Omarchy 4.0.6 / Quickshell 0.3.2 (Qt 6.12) with the native catalog reference kept at Omarchy 4.0.4; the collector warm-PSS ceiling is 768 KiB on that stack, and QML fixtures force stderr logging under Qt 6.12. The forward compatibility reference stays `246f33a2`.
+
## [0.1.1-beta.16.5] - 2026-10-22
### Highlights
diff --git a/docs/configuration.md b/docs/configuration.md
index 21cc22d..94b21da 100644
--- a/docs/configuration.md
+++ b/docs/configuration.md
@@ -184,7 +184,7 @@ authoritative menu actions:
- **Hearthstone** opens the Shibumi Hearthstone picker.
During installation, Shibumi adds reversible overrides for Quattro's
-authoritative `style.theme` and `style.background` actions to the official
+authoritative `style.theme` / `style.background` (or `appearance.theme` / `appearance.background`) actions to the official
user extension at `~/.config/omarchy/extensions/omarchy-menu.jsonc`. Existing
user and plugin entries remain in place, updates are idempotent, and uninstall
removes only the Shibumi-managed block. Shibumi does not patch Quattro,
diff --git a/docs/development/validation-host.md b/docs/development/validation-host.md
index 8140324..78c9c9e 100644
--- a/docs/development/validation-host.md
+++ b/docs/development/validation-host.md
@@ -22,6 +22,15 @@ See [release workflow](release.md) and [testing](testing.md).
Keep source, evidence and baseline paths canonical, non-symlinked and exclusive.
- Plan disk/RAM capacity and serial execution. Preserve gate timeout/log budgets;
do not raise limits or run resource measurements concurrently to obtain a pass.
+- Set `QT_FORCE_STDERR_LOGGING=1` for fixture processes. This Qt 6.12 build sends
+ non-TTY Qt diagnostics to journald otherwise, leaving captured aggregate logs
+ incomplete. The aggregate and shared fixture launcher enforce stderr logging;
+ native runtime/resource sandbox environments already set it explicitly.
+- On Quickshell 0.3.2 / Qt 6.12 the bar-switch fixture reports `Unable to assign
+ [undefined] to QColor` from the embedded native `Ui/WidgetButton.qml` and
+ `Ui/Panel.qml` bindings while bars are created and torn down. The unchanged
+ Beta 16.5 fixture shows the same three lines on this stack; the fixture's log
+ guard lists exactly these lines and nothing else.
## 2. Download and register the runner (separate approvals)
diff --git a/docs/release-readiness.md b/docs/release-readiness.md
index 1465b18..f566737 100644
--- a/docs/release-readiness.md
+++ b/docs/release-readiness.md
@@ -1,10 +1,141 @@
-# Shibumi 0.1.1-beta.16.5 release readiness
+# Shibumi 0.1.1-beta.16.5.1 release readiness
> **Document status: Revision-bound validation record.** This page separates
> recorded product evidence from release, package, and physical acceptance.
> It cannot override [`../ARCHITECTURE.md`](../ARCHITECTURE.md).
-## Accepted Beta.16.5 product series and validation boundary
+## Beta 16.5.1 hotfix and validation boundary
+
+The approved release date is **2026-10-23**. The release branch starts from
+main integration merge `1d7a00b2742fb4d479774a4f722c6c2ef96d0601`, whose tree
+equals published Beta 16.5 tag `8b34d030a303aa35d6033923c8f3c38c4c25b29b`.
+Both revisions are admitted with unchanged published payload pins. The rolling
+predecessor fixture now records that published Beta 16.5 release.
+
+The hotfix accepts both `style.*` and `appearance.*` picker menu keys, preserving
+the host actions and warning without a routing block when neither family is
+present. The affected lifecycle paths are install, update, repair and migrate.
+Release-identity maintenance changes no QML behavior. The product fix separately
+restores Reactor quote text on Qt 6.12: arrays crossing a QML `var` signal arrive
+as sequences, so an Array-only guard discarded every quote choice. The fix
+converts the sequence without changing renderer timing or geometry. The settled
+Bar layout context is JSON-cloned once at the receive boundary, preserving strict
+provider-group/native-section validators. Audio stream-label resolution converts
+Quickshell player sequences to local arrays while retaining QObject identity.
+
+The accepted candidate is tag + patches 01–05 + replacement 06-r2, snapshot
+`1dc8c3be2ed076401e0fd90cdf235a9aaa17c63e`, tree
+`6677721db7289df940ab76042763c0c4fe476139`. Its payload identities are:
+
+- Suite (24 plugins): `a4a0b43a04603a9b40354df1498e74b4b42e55158c1d3f9d68c9460db30802cf`.
+- Bar: `1d1a47515cafa53176338645f8525f8e6e5021f124948eff6794b708d02aacc9`.
+- Audio: `7cb7693721fc4fb75e405d565a1579d8a32c5dc1fea6177dbba6c518127ac79e`.
+
+Only the current candidate's Bar and Audio payload pins change in 06-r2; all
+published predecessor pins remain unchanged. The release cut preserves these
+product bytes. The source archive checksum is a separate finalisation step.
+
+**Candidate gates:** all 13 requested groups passed on that exact snapshot.
+
+| Gate | Candidate result |
+| --- | --- |
+| Suite | 180/180 in each of five forms: 4.0.6 script/module, retained 4.0.4 script/module, forward script. |
+| Package / admission / baseline | 27/27, 40/40, and baseline contract PASS. |
+| Lifecycle | Both complete stable/forward groups passed 9/9, including dry-run. |
+| Native catalog resource (gate 11) | One run; candidate warm growth 424 KiB against 768 KiB. Exact Beta 13 control 0 KiB, below-CPU control 4 KiB, restored candidate 388 KiB; all seven mutants failed as intended. |
+| Complete aggregates | Stable 4.0.6 and forward `246f33a2` completed with exit 0, including renderer PASS and the final complete-contract markers. |
+
+Candidate and all four external baseline identities remained unchanged before
+and after every group and at the final audit. All 13 outer roots and 18 recorded
+owned cgroups were absent afterward, with no reported survivors. These are
+candidate results, not exact-final release or physical acceptance.
+
+**Menu proof:** the forward pin
+`246f33a2fef66411c990860d88e0823ae83987fc` predates the rename and does not prove
+appearance-family routing. Suite coverage and Hermes's offline replay use the
+real stock menu from Omarchy `6bee248a3`: Beta 16.5 rejects it, the candidate
+routes it, and removal restores the original bytes. No live host with that
+revision was available; machine2 and .140 could not be powered on. The Maintainer
+accepted this offline proof in place of the live appearance-menu check. Later
+Phase D live acceptance runs on main only; it has not run for this release.
+
+The first exact-final run on `3ec5346e` stopped at gate 16's bar-switch log
+guard on native Ui color warnings under Quickshell 0.3.2 / Qt 6.12; Hermes
+reproduced the same diagnostic lines with unchanged Beta 16.5 code and attributed
+the red to the host stack. The preceding test-only fix-up commit applies the
+approved native-Ui warning allowance without changing product code. The second
+exact-final run on `8b8fa237` passed all 26 release gates but stopped at collector
+gate 9: Hermes attributed it to the installed-package regression's stale 4.0.4
+version pin on the same unchanged Omarchy 4.0.6 host. A further preceding
+test-only fix-up corrects that pin to 4.0.6 without changing product code.
+No exact-final pass transfers from either stopped run; results for this re-cut
+remain pending against literal `FINAL_SHA`.
+
+**Final release boundary:** exact-final gates remain pending against `FINAL_SHA`:
+26 release gates, the complete 14-gate collector, separate 37-step bar-switch,
+local package rehearsal, clean-status and reproducible archive verification.
+Standalone renderer-rest and audio/media results must also be bound to the
+exact final commit; the candidate aggregates do not relabel them as completed
+standalone gates. Independent release review and applicable live/physical
+acceptance remain separate. The candidate snapshot is not the tag target.
+
+### Preserved attribution and earlier attempts
+
+On the initial fix-only tree, five suite runs passed 180/180, package 27/27 and
+admission 40/40. Lifecycle stopped on Quickshell package drift. Resource gate 11
+recorded 552 KiB warm PSS growth against 512 KiB. The authorized unchanged-tag
+control and candidate repeat passed at 448 KiB and 508 KiB respectively on the
+updated host stack, with all controls passing; the original failure is retained.
+No ceiling changed during attribution. Historical Beta 16.5 exact-final measured
+400 KiB on the old stack. The fixture never executes the changed lifecycle
+Python. The Maintainer subsequently authorized **768 KiB** warm-growth fixture
+maintenance for the Omarchy 4.0.6 / Quickshell 0.3.2.r7 / Qt 6.12 stack. Wrapper,
+probe and parser fixtures are synchronized; CPU/cadence and the separate
+512 * 1024 host-PSS bound remain unchanged. None of the original observations
+is erased by the accepted candidate's 424 KiB result.
+
+Patch 5 pins Omarchy/Settings 4.0.6-1 and Omarchy-repository Quickshell
+0.3.2.r7.g2b4501a-1 from recorded pacman identity/provenance. The observed stack
+also has Qt Base 6.12.0-3, Qt Declarative 6.12.0-2 and Mesa 1:26.2.5-1; these
+are evidence, not additional manifest pins. The Quickshell binary reports
+`Quickshell 0.3.2 (revision 2b4501a282689792b62e94f3fb30d8f512324fe6, distributed by Omarchy)`.
+Collector probes match exact package and binary identities, including pkgrel.
+
+The 4.0.6 package/source shell and config inventories are exact. Package bin has
+446 entries, source 449: `omarchy-debug`, `omarchy-debug-idle` and
+`omarchy-upload-log` are source-only, confirmed against the cached official
+4.0.6-1 archive. All shared executable bytes match; each bin roster stays pinned
+independently. `pacman -Qkk` found no altered Omarchy/Quickshell files; its exit 1
+reflects four unreadable Settings `/etc/sudoers.d/omarchy-*` files. Full Settings
+package integrity is not claimed; no permission changes were made.
+
+Stable gates move to 4.0.6 (`237f1b40`). Native catalog runtime/resource source
+proof stays at 4.0.4 (`c668141e`, 183 shell files), independently supplied by
+`SHIBUMI_NATIVE_CATALOG_OMARCHY_PATH`; the collector now binds four external
+inputs. Old manifest bytes stay unchanged; warm growth uses the reviewed 768 KiB ceiling.
+This source-only historical pin does not assert old Quickshell provenance on
+the new host. Actions-variable changes and exact-final acceptance remain separate.
+
+The tag + patches 01–05 snapshot passed reduced gates, both complete lifecycle
+groups and its single gate 11 run (392 KiB warm growth under 768 KiB), but both
+aggregates exited 1. Their logs ended after a passing ShibumiConfig fixture
+because Qt 6.12 sent later non-TTY console output to journald. Read-only tag
+diagnosis attributed both reds to `reactor-renderer-regression.qml`:
+`quote fit did not skip an oversized candidate`. Theme-palette and reactor-model
+had passed silently in between. The existing renderer fixture is the observed-red
+coverage for patch 6; no new test is added. `QT_FORCE_STDERR_LOGGING=1` is now
+explicit in aggregate/shared fixture launches; native runtime/resource sandbox
+environments already set it. Both complete 06-r2 aggregates passed as recorded
+above; earlier passes or silent logs are not substituted for them.
+
+The initial patch 6 snapshot `f114ba1c` passed all five suite forms but stopped
+at package tests (27 tests, one failure): the candidate payload literal in the
+package fixture had not been updated. No later gate ran in that attempt. The
+replacement 06-r2 corrects only that literal above `f114ba1c`; product bytes and
+payload are unchanged. Its complete 13-group run is the accepted result above.
+The original failed attempt and its cleanup audit remain preserved.
+
+## Historical Beta.16.5 product series and validation boundary
The accepted local C1–C8 series is based on
`aec6c0a3266d71f6a5f9cfa17562d8bec0ce9b17`, the main integration merge of
@@ -89,7 +220,8 @@ commit externally. No predecessor gate result transfers to this candidate.
Beta.16.3 was published on 2026-10-10 as a GitHub prerelease from
`1a13d6be7d5b4bc9aa03590b77b6531aefcad497`. It was the frozen rolling
predecessor for Beta.16.4; [`release-predecessor.json`](../tests/fixtures/release-predecessor.json)
-now records Beta.16.4 for the private Beta.16.5 preparation.
+recorded Beta.16.4 during Beta.16.5 preparation and now records Beta.16.5
+for the hotfix.
That exact tag checkout and the source-installation integration merge
`494fa69b9e348fa595eb4d55d2e11b4aa2fd4470` (PR #77) are admitted by
[`lifecycle-predecessors-v1.json`](../contracts/lifecycle-predecessors-v1.json),
@@ -126,21 +258,22 @@ permit another run. Real Polkit/root and owner-loss acceptance remain separate.
## Pinned host contracts
The release's installed-package and source-parity contracts target Omarchy
-4.0.4. Pinned configuration is not a physical-acceptance claim.
+4.0.6. Pinned configuration is not a physical-acceptance claim.
| Component | Required identity |
| --- | --- |
-| Omarchy | `omarchy 4.0.4-1` |
-| Omarchy Settings | `omarchy-settings 4.0.4-1` |
-| Quickshell | `quickshell 0.3.1-1` |
-| Installed package profile | `installed-package-v4.0.4` |
-| Source parity | `installed-source-parity-v4.0.4`, `c668141e9c42b13c80c9ca4ea108e11708c5e8a5` |
+| Omarchy | `omarchy 4.0.6-1` |
+| Omarchy Settings | `omarchy-settings 4.0.6-1` |
+| Quickshell | `quickshell 0.3.2.r7.g2b4501a-1` |
+| Installed package profile | `installed-package-v4.0.6` |
+| Source parity | `installed-source-parity-v4.0.6`, `237f1b4071a0bff2296c6d740ba2b9fd695ebfa0` |
+| Native catalog source-only reference | `v4.0.4`, `c668141e9c42b13c80c9ca4ea108e11708c5e8a5` |
| Agents reference | `v4.0.0`, `f0020448ca87329199de7cb12f2015ebc4a3e5e7` |
| Forward reference | `246f33a2fef66411c990860d88e0823ae83987fc` |
The manifests in [`contracts/baselines/`](../contracts/baselines/) bind consumed
-files and subtrees. Historical 4.0.3/4.0.2 manifests remain explicit compatibility
-references, not substitutes for the release jobs' 4.0.4 pins. Provisioning is
+files and subtrees. Historical 4.0.4/4.0.3/4.0.2 package/source and 4.0.5 source
+manifests remain unchanged, not substitutes for the release jobs' 4.0.6 pins. Provisioning is
covered by the [validation-host runbook](development/validation-host.md);
[host compatibility](architecture/quattro-compatibility.md) describes the proof axes.
@@ -232,4 +365,4 @@ release checklist. Beta.16's published changes and limits remain in its
revision `30746f5` passed the complete contract and 32-generation runtime;
those fixtures retained known teardown warnings and did not establish blanket
hardware acceptance. Earlier readiness snapshots remain in Git history; none
-confers acceptance on Beta.16.5.
+confers acceptance on Beta 16.5.1.
From 20108270fb408cf562e0117de19e56978ca529a8 Mon Sep 17 00:00:00 2001
From: HANCORE-linux <230438592+HANCORE-linux@users.noreply.github.com>
Date: Fri, 23 Oct 2026 11:29:22 +0200
Subject: [PATCH 9/9] chore(release): pin the Beta 16.5.1 source archive
checksum
---
packaging/aur/.SRCINFO | 2 +-
packaging/aur/PKGBUILD | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/packaging/aur/.SRCINFO b/packaging/aur/.SRCINFO
index f67c4e9..2ff4e87 100644
--- a/packaging/aur/.SRCINFO
+++ b/packaging/aur/.SRCINFO
@@ -31,6 +31,6 @@ pkgbase = shibumi-shell
optdepends = nvidia-utils: NVIDIA GPU telemetry
optdepends = git: source-checkout diagnostics and migration
source = shibumi-shell-0.1.1-beta.16.5.1.tar.gz::https://github.com/HANCORE-linux/Shibumi-Shell/releases/download/v0.1.1-beta.16.5.1/shibumi-shell-0.1.1-beta.16.5.1.tar.gz
- sha256sums = 2eac5b0c462dc4a7b3c3fcfa1fd457f3e31ac62ba5113d3c09f55ac0a9f299ce
+ sha256sums = 6a058cfbc8e4e83128a4d2bd815fae89e0a488320e078c2d40fb3dfc4091ce96
pkgname = shibumi-shell
diff --git a/packaging/aur/PKGBUILD b/packaging/aur/PKGBUILD
index cb4af59..3888fcf 100644
--- a/packaging/aur/PKGBUILD
+++ b/packaging/aur/PKGBUILD
@@ -1,7 +1,7 @@
# Maintainer: HANCORE Linux
pkgname=shibumi-shell
_upstream_version=0.1.1-beta.16.5.1
-_source_sha256=2eac5b0c462dc4a7b3c3fcfa1fd457f3e31ac62ba5113d3c09f55ac0a9f299ce
+_source_sha256=6a058cfbc8e4e83128a4d2bd815fae89e0a488320e078c2d40fb3dfc4091ce96
pkgver=${_upstream_version//-/}
pkgrel=1
pkgdesc="Transactional Shibumi desktop shell plugins for Omarchy Quattro"