From 7c2ffaaad7df25ea17a57c9064c918c10afd8b54 Mon Sep 17 00:00:00 2001
From: HANCORE-linux <230438592+HANCORE-linux@users.noreply.github.com>
Date: Fri, 9 Oct 2026 17:00:43 +0200
Subject: [PATCH 1/9] network: follow the bar colour in V1 like the other
widgets
---
hancore.shibumi.network/BarWidget.qml | 41 ++++++++-------------------
tests/network-plugin-smoke.qml | 18 ++++++++++--
2 files changed, 27 insertions(+), 32 deletions(-)
diff --git a/hancore.shibumi.network/BarWidget.qml b/hancore.shibumi.network/BarWidget.qml
index 9fb0b6c6..ce1c9460 100644
--- a/hancore.shibumi.network/BarWidget.qml
+++ b/hancore.shibumi.network/BarWidget.qml
@@ -25,19 +25,6 @@ Ui.Panel {
? tokens.widgetContentColor(settings,
bar ? bar.urgent : Commons.Color.accent)
: (bar ? bar.urgent : Commons.Color.accent)
- readonly property bool v1CustomToneActive: !!(tokens
- && tokens.v2Shell !== true
- && typeof tokens.widgetHasFill === "function"
- && tokens.widgetHasFill(settings))
- readonly property color v1Ink: v1CustomToneActive ? widgetInk
- : tokens && "ink" in tokens ? tokens.ink : widgetInk
- readonly property color v1Seal: v1CustomToneActive ? widgetInk
- : tokens && "seal" in tokens ? tokens.seal : widgetInk
- readonly property color v1Indigo: v1CustomToneActive ? widgetInk
- : tokens && tokens.stateService
- && typeof tokens.stateService.paletteColor === "function"
- ? tokens.stateService.paletteColor("color04")
- : Qt.rgba(v1Ink.r, v1Ink.g, v1Ink.b, 0.58)
readonly property string displayMode: String(
setting("displayMode", setting("compact", false) ? "icon" : "full"))
readonly property bool compact: displayMode === "icon"
@@ -397,8 +384,8 @@ Ui.Panel {
anchors.verticalCenter: parent.verticalCenter
text: "NET"
color: root.mode === "none"
- ? Qt.rgba(root.v1Seal.r, root.v1Seal.g, root.v1Seal.b, 0.7)
- : Qt.rgba(root.v1Ink.r, root.v1Ink.g, root.v1Ink.b, 0.6)
+ ? Qt.rgba(root.widgetInk.r, root.widgetInk.g, root.widgetInk.b, 0.7)
+ : Qt.rgba(root.widgetInk.r, root.widgetInk.g, root.widgetInk.b, 0.6)
font.family: root.bar ? root.bar.fontFamily : Commons.Style.font.family
font.pixelSize: root.tokens.labelSize
font.letterSpacing: 0.5
@@ -459,17 +446,16 @@ Ui.Panel {
maximum = Math.max(maximum, Number(root.uploadHistory[index]) || 0)
maximum *= 1.15
paintSeries(context, root.downloadHistory,
- root.v1Seal, maximum, 0.12, 1.5)
+ root.widgetInk, maximum, 0.12, 1.5)
paintSeries(context, root.uploadHistory,
- root.v1Indigo, maximum, 0.10, 1.0)
+ root.widgetInk, maximum, 0.10, 1.0)
}
Connections {
target: root
function onDownloadHistoryChanged() { v1TrafficChart.requestPaint() }
function onUploadHistoryChanged() { v1TrafficChart.requestPaint() }
- function onV1SealChanged() { v1TrafficChart.requestPaint() }
- function onV1IndigoChanged() { v1TrafficChart.requestPaint() }
+ function onWidgetInkChanged() { v1TrafficChart.requestPaint() }
}
Component.onCompleted: requestPaint()
@@ -484,7 +470,7 @@ Ui.Panel {
width: 54
height: 11
text: "↓" + root.v1Rate(root.downloadRate)
- color: root.v1Seal
+ color: root.widgetInk
font.family: root.bar ? root.bar.fontFamily : Commons.Style.font.family
font.pixelSize: 10
horizontalAlignment: Text.AlignRight
@@ -496,7 +482,7 @@ Ui.Panel {
width: 54
height: 11
text: "↑" + root.v1Rate(root.uploadRate)
- color: root.v1Indigo
+ color: root.widgetInk
font.family: root.bar ? root.bar.fontFamily : Commons.Style.font.family
font.pixelSize: 10
horizontalAlignment: Text.AlignRight
@@ -511,7 +497,7 @@ Ui.Panel {
visible: root.mode === "wifi"
anchors.verticalCenter: parent.verticalCenter
text: root.stateGlyph
- color: root.v1Ink
+ color: root.widgetInk
font.pixelSize: 14
}
@@ -522,7 +508,7 @@ Ui.Panel {
anchors.verticalCenter: parent.verticalCenter
visible: root.mode === "wifi"
text: root.label
- color: root.v1Seal
+ color: root.widgetInk
font.family: root.bar ? root.bar.fontFamily : Commons.Style.font.family
font.pixelSize: root.tokens.labelSize
font.letterSpacing: 1
@@ -695,12 +681,9 @@ Ui.Panel {
optical: !root.bar || !root.bar.vertical
nativeText: connectionIcon(root.mode, root.signal)
text: root.stateGlyph
- color: root.v2Presentation ? (root.mode === "none"
- ? Qt.rgba(root.widgetInk.r, root.widgetInk.g, root.widgetInk.b, 0.65)
- : root.widgetInk)
- : root.mode === "none"
- ? Qt.rgba(root.v1Seal.r, root.v1Seal.g, root.v1Seal.b, 0.65)
- : root.v1Seal
+ color: root.mode === "none"
+ ? Qt.rgba(root.widgetInk.r, root.widgetInk.g, root.widgetInk.b, 0.65)
+ : root.widgetInk
font.pixelSize: root.mode === "none" ? 15 : 14
}
}
diff --git a/tests/network-plugin-smoke.qml b/tests/network-plugin-smoke.qml
index e1812f3b..d01f07bf 100644
--- a/tests/network-plugin-smoke.qml
+++ b/tests/network-plugin-smoke.qml
@@ -19,6 +19,14 @@ ShellRoot {
Qt.exit(1)
}
+ function contentGlyph(item, text) {
+ if (item.text === text && item.color !== undefined) return item
+ for (const child of item.children || []) {
+ const match = contentGlyph(child, text); if (match) return match
+ }
+ return null
+ }
+
function appearanceSettings(mode) {
return ({
displayMode: String(mode), color: "color05", colorMode: "border",
@@ -179,13 +187,17 @@ ShellRoot {
if (root.phase === 0) {
if (!first.networkReady || !second.networkReady || root.ticks < 3) return
+ const firstGlyph = root.contentGlyph(first, first.stateGlyph)
+ const secondGlyph = root.contentGlyph(second, second.stateGlyph)
+ if (!firstGlyph || !secondGlyph
+ || !Qt.colorEqual(firstGlyph.color, fakeBar.background)
+ || !Qt.colorEqual(secondGlyph.color, fakeBar.urgent))
+ return root.fail("V1 glyph ink: " + (firstGlyph && firstGlyph.color)
+ + "/" + (secondGlyph && secondGlyph.color))
if (first.networkService !== second.networkService
|| first.networkService !== sharedNetworkService
|| first.mode !== "wifi" || first.label !== "Test Network"
|| first.signal !== 73 || first.implicitHeight !== 35
- || !first.v1CustomToneActive || second.v1CustomToneActive
- || !Qt.colorEqual(first.v1Ink, fakeBar.background)
- || !Qt.colorEqual(first.v1Seal, fakeBar.background)
|| unavailableNetwork.visible
|| first.childPanelWidget("omarchy.network") !== first
|| first.childPanelWidget("hancore.shibumi.network") !== first
From 7e7292aa75eaaa32f9d5fd1ec4ef7c57c225049f Mon Sep 17 00:00:00 2001
From: HANCORE-linux <230438592+HANCORE-linux@users.noreply.github.com>
Date: Fri, 9 Oct 2026 17:00:43 +0200
Subject: [PATCH 2/9] status: clear the pending savings flag before applying
the savings
---
hancore.shibumi.status/BarWidget.qml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/hancore.shibumi.status/BarWidget.qml b/hancore.shibumi.status/BarWidget.qml
index 87459414..93f0332f 100644
--- a/hancore.shibumi.status/BarWidget.qml
+++ b/hancore.shibumi.status/BarWidget.qml
@@ -126,8 +126,8 @@ Item {
function syncSpacingSavings() {
if (!root || !spacingActive) return
const saved = Math.max(0, updateShift - bellShift)
- if (Math.abs(spacingSavings - saved) > 1e-7) spacingSavings = saved
savingsPending = false
+ if (Math.abs(spacingSavings - saved) > 1e-7) spacingSavings = saved
}
function scheduleSpacingSavings() {
savingsPending = true
From d2f713b3d5da4e08c6e16e6a127c2bd8ae25e3a5 Mon Sep 17 00:00:00 2001
From: HANCORE-linux <230438592+HANCORE-linux@users.noreply.github.com>
Date: Fri, 9 Oct 2026 17:00:43 +0200
Subject: [PATCH 3/9] workspaces: change colour on hover instead of growing
---
hancore.shibumi.workspaces/BarWidget.qml | 48 ++++++++++++++----------
1 file changed, 28 insertions(+), 20 deletions(-)
diff --git a/hancore.shibumi.workspaces/BarWidget.qml b/hancore.shibumi.workspaces/BarWidget.qml
index e3b92245..e735c80b 100644
--- a/hancore.shibumi.workspaces/BarWidget.qml
+++ b/hancore.shibumi.workspaces/BarWidget.qml
@@ -88,6 +88,11 @@ Ui.Panel {
? tokens.seal : widgetInk)
readonly property color pacmanOccupiedColor: widgetInk
readonly property color pacmanEmptyColor: widgetInk
+ readonly property color workspaceHoverColor: ((tokens
+ && typeof tokens.widgetHasFill === "function" && tokens.widgetHasFill(settings))
+ || Qt.colorEqual(paletteColor("color03", widgetInk), widgetInk))
+ ? Qt.rgba(widgetInk.r, widgetInk.g, widgetInk.b, 0.72)
+ : paletteColor("color03", widgetInk)
readonly property color pacmanHoverColor: widgetInk
property int pacmanLastFocusedWorkspaceId: -1
property int pacmanTargetWorkspaceId: -1
@@ -400,13 +405,22 @@ Ui.Panel {
property real defaultMarkerWidth: Commons.Style.space(focused ? 26 : 8)
property alias magicColor: colorState.magicColor
property alias kanjiColor: colorState.kanjiColor
- property real ringOpacity: cellPointer.containsMouse ? 1
- : focused ? 1 : occupied ? 0.64 : 0.24
+ property real hoverPhase: root.renderStyle !== "pacman" && cellPointer.containsMouse ? 1 : 0
+ Behavior on hoverPhase { NumberAnimation { duration: 120 } }
+ function tintColor(base) {
+ const amount = hoverPhase
+ if (amount === 0) return base
+ const tint = root.workspaceHoverColor
+ return Qt.rgba(base.r * (1 - amount) + tint.r * amount,
+ base.g * (1 - amount) + tint.g * amount,
+ base.b * (1 - amount) + tint.b * amount,
+ base.a * (1 - amount) + tint.a * amount)
+ }
+ property real ringOpacity: focused ? 1 : occupied ? 0.64 : 0.24
property real auroraWidth: Commons.Style.space(focused ? 32 : 10)
property real auroraMarkerWidth: Commons.Style.space(focused ? 28 : occupied ? 6 : 4)
property real auroraMarkerHeight: Commons.Style.space(focused ? 3 : occupied ? 6 : 4)
- property real auroraOpacity: cellPointer.containsMouse ? 1
- : focused ? 0.92 : occupied ? 0.62 : 0.18
+ property real auroraOpacity: focused ? 0.92 : occupied ? 0.62 : 0.18
Behavior on defaultHaloWidth { NumberAnimation { duration: 200; easing.type: Easing.OutCubic } }
Behavior on defaultMarkerWidth { NumberAnimation { duration: 200; easing.type: Easing.OutCubic } }
Item {
@@ -441,7 +455,6 @@ Ui.Panel {
Behavior on implicitWidth {
NumberAnimation { duration: 200; easing.type: Easing.OutCubic }
}
- Behavior on scale { NumberAnimation { duration: 120 } }
// Keep the cell and pointer resident; load only the selected paint.
Loader {
@@ -478,9 +491,9 @@ Ui.Panel {
width: cell.defaultMarkerWidth
height: Commons.Style.space(8)
radius: height / 2
- color: cell.focused || cell.occupied
+ color: cell.tintColor(cell.focused || cell.occupied
? root.widgetInk : Qt.rgba(root.widgetInk.r,
- root.widgetInk.g, root.widgetInk.b, 0.25)
+ root.widgetInk.g, root.widgetInk.b, 0.25))
}
} }
@@ -514,10 +527,9 @@ Ui.Panel {
barText: true
anchors.centerIn: parent
text: cell.modelData
- color: cell.focused
- ? root.widgetInk
+ color: cell.tintColor(cell.focused ? root.widgetInk
: Qt.rgba(root.widgetInk.r, root.widgetInk.g,
- root.widgetInk.b, cell.occupied ? 0.5 : 0.28)
+ root.widgetInk.b, cell.occupied ? 0.5 : 0.28))
font.family: root.bar ? root.bar.fontFamily : Commons.Style.font.family
font.pixelSize: cell.focused
? Commons.Style.font.subtitle : root.tokens.labelSize
@@ -541,7 +553,7 @@ Ui.Panel {
anchors.centerIn: parent
anchors.verticalCenterOffset: cell.focused ? 0 : 1
text: cell.focused ? "✦" : cell.occupied ? "✧" : "·"
- color: cell.magicColor
+ color: cell.tintColor(cell.magicColor)
font.family: "Adwaita Mono"
font.pixelSize: Commons.Style.space(cell.focused ? 22 : 18)
renderType: Text.NativeRendering
@@ -565,7 +577,7 @@ Ui.Panel {
? ["一", "二", "三", "四", "五",
"六", "七", "八", "九", "十"][cell.modelData - 1]
: String(cell.modelData)
- color: cell.kanjiColor
+ color: cell.tintColor(cell.kanjiColor)
font.family: "Noto Sans CJK JP"
font.pixelSize: Commons.Style.space(cell.focused ? 15 : 13)
font.weight: Font.Normal
@@ -585,8 +597,8 @@ Ui.Panel {
visible: root.renderStyle === "rings"
anchors.centerIn: parent
text: cell.modelData
- color: root.widgetInk
- opacity: cell.ringOpacity
+ color: cell.tintColor(root.widgetInk)
+ opacity: cell.ringOpacity + (1 - cell.ringOpacity) * cell.hoverPhase
font.family: root.bar ? root.bar.fontFamily : Commons.Style.font.family
font.pixelSize: Commons.Style.space(12)
font.weight: Font.Normal
@@ -619,8 +631,8 @@ Ui.Panel {
width: cell.auroraMarkerWidth
height: cell.auroraMarkerHeight
radius: height / 2
- color: root.widgetInk
- opacity: cell.auroraOpacity
+ color: cell.tintColor(root.widgetInk)
+ opacity: cell.auroraOpacity + (1 - cell.auroraOpacity) * cell.hoverPhase
antialiasing: true
}
}
@@ -660,14 +672,10 @@ Ui.Panel {
hoverEnabled: true
cursorShape: Qt.PointingHandCursor
onEntered: {
- cell.scale = root.renderStyle === "rings" ? 1
- : root.renderStyle === "pacman" ? 1
- : root.renderStyle === "aurora" ? 1.04 : 1.15
if (root.bar) root.bar.showTooltip(
workspaceSurface, root.workspaceTooltip(cell.modelData))
}
onExited: {
- cell.scale = 1
if (root.bar) root.bar.hideTooltip(workspaceSurface)
}
onClicked: function(mouse) {
From 079b73506d97dc8ba67a30106faf58a49e19d4fb Mon Sep 17 00:00:00 2001
From: HANCORE-linux <230438592+HANCORE-linux@users.noreply.github.com>
Date: Fri, 9 Oct 2026 17:00:43 +0200
Subject: [PATCH 4/9] picker: make the search field readable in every theme
---
.../PickerOverlay.qml | 81 ++++++++++++-------
tests/quick-access-plugin-smoke.qml | 35 +++++++-
2 files changed, 86 insertions(+), 30 deletions(-)
diff --git a/hancore.shibumi.quick-access/PickerOverlay.qml b/hancore.shibumi.quick-access/PickerOverlay.qml
index dcbf7724..007c7682 100644
--- a/hancore.shibumi.quick-access/PickerOverlay.qml
+++ b/hancore.shibumi.quick-access/PickerOverlay.qml
@@ -142,7 +142,7 @@ PanelWindow {
parent.width * 0.48)
readonly property real focusedHeight: focusedWidth * 9 / 16
- visible: root.tanzakuActive && root.controller.selectedEntry !== null
+ visible: root.tanzakuActive
anchors.horizontalCenter: parent.horizontalCenter
y: parent.height / 2 - Commons.Style.space(10) + focusedHeight / 2
+ Commons.Style.space(16)
@@ -152,6 +152,7 @@ PanelWindow {
Rectangle {
anchors.horizontalCenter: parent.horizontalCenter
+ visible: root.controller.selectedEntry !== null
width: tanzakuFooter.focusedWidth * 0.42
height: Commons.Style.space(3)
radius: height / 2
@@ -168,6 +169,7 @@ PanelWindow {
width: parent.width
horizontalAlignment: Text.AlignHCenter
text: root.selectedHeadline()
+ visible: root.controller.selectedEntry !== null
color: root.bar.foreground
font.family: root.bar.fontFamily
font.pixelSize: Commons.Style.space(22)
@@ -179,7 +181,8 @@ PanelWindow {
Row {
anchors.horizontalCenter: parent.horizontalCenter
- visible: root.controller.mode === "theme"
+ visible: root.controller.selectedEntry !== null
+ && root.controller.mode === "theme"
&& root.controller.selectedThemePalette.length > 0
spacing: Commons.Style.space(6)
@@ -200,9 +203,10 @@ PanelWindow {
Row {
anchors.horizontalCenter: parent.horizontalCenter
- visible: root.selectedIsCurrent
- || (root.controller.mode === "theme"
- && root.controller.selectedThemeAuthor !== "")
+ visible: root.controller.selectedEntry !== null
+ && (root.selectedIsCurrent
+ || (root.controller.mode === "theme"
+ && root.controller.selectedThemeAuthor !== ""))
spacing: Commons.Style.space(12)
Text {
@@ -243,7 +247,7 @@ PanelWindow {
Row {
anchors.horizontalCenter: parent.horizontalCenter
- visible: root.controller.mediaMode
+ visible: root.controller.mediaMode && root.controller.selectedEntry !== null
spacing: Commons.Style.space(7)
OverlayAction {
@@ -264,15 +268,8 @@ PanelWindow {
}
}
- Text {
- anchors.horizontalCenter: parent.horizontalCenter
- visible: root.controller.filterText !== ""
- text: root.controller.filterText
- color: root.bar.urgent
- font.family: root.bar.fontFamily
- font.pixelSize: Commons.Style.font.body
- renderType: Text.NativeRendering
- }
+ FilterField { anchors.horizontalCenter: parent.horizontalCenter }
+ DeleteHint { anchors.horizontalCenter: parent.horizontalCenter }
Text {
anchors.horizontalCenter: parent.horizontalCenter
@@ -397,20 +394,8 @@ PanelWindow {
renderType: Text.NativeRendering
}
- Text {
- anchors.horizontalCenter: parent.horizontalCenter
- visible: root.controller.filterText !== ""
- || root.controller.confirmDelete
- text: root.controller.filterText !== ""
- ? "Filter: " + root.controller.filterText
- : "Press Delete again to move this file to Trash"
- color: root.controller.confirmDelete ? root.bar.urgent
- : Qt.rgba(root.bar.foreground.r, root.bar.foreground.g,
- root.bar.foreground.b, 0.62)
- font.family: root.bar.fontFamily
- font.pixelSize: Commons.Style.font.caption
- renderType: Text.NativeRendering
- }
+ FilterField { anchors.horizontalCenter: parent.horizontalCenter }
+ DeleteHint { anchors.horizontalCenter: parent.horizontalCenter }
Text {
anchors.horizontalCenter: parent.horizontalCenter
@@ -424,6 +409,44 @@ PanelWindow {
}
}
+ component DeleteHint: Text {
+ visible: root.controller.confirmDelete
+ text: "Press Delete again to move this file to Trash"
+ color: root.bar.urgent
+ font.family: root.bar.fontFamily
+ font.pixelSize: Commons.Style.font.caption
+ renderType: Text.NativeRendering
+ }
+
+ component FilterField: Rectangle {
+ visible: root.controller.filterText !== ""
+ width: Math.min(parent.width, Commons.Style.space(420),
+ Math.max(Commons.Style.space(48), filterLabel.implicitWidth + Commons.Style.space(16)))
+ height: filterLabel.implicitHeight + Commons.Style.space(6)
+ radius: Commons.Style.cornerRadius
+ color: Qt.rgba(Commons.Color.menu.background.r, Commons.Color.menu.background.g,
+ Commons.Color.menu.background.b, 1)
+ border.width: 0
+ MouseArea { anchors.fill: parent }
+
+ Text {
+ id: filterLabel
+ anchors.fill: parent
+ anchors.leftMargin: Commons.Style.space(8)
+ anchors.rightMargin: Commons.Style.space(8)
+ anchors.topMargin: Commons.Style.space(3)
+ anchors.bottomMargin: Commons.Style.space(3)
+ text: root.controller.filterText
+ color: Commons.Color.menu.text
+ font.family: root.bar.fontFamily
+ font.pixelSize: Commons.Style.font.body
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ elide: Text.ElideRight
+ renderType: Text.NativeRendering
+ }
+ }
+
component OverlayAction: Rectangle {
id: action
required property string icon
diff --git a/tests/quick-access-plugin-smoke.qml b/tests/quick-access-plugin-smoke.qml
index 8ebcd7f6..4bf0c028 100644
--- a/tests/quick-access-plugin-smoke.qml
+++ b/tests/quick-access-plugin-smoke.qml
@@ -463,10 +463,43 @@ ShellRoot {
const statusFeedback = root.visibleText(presentationProbe, "Copied")
if (!filterFeedback || !statusFeedback
|| String(filterFeedback.color)
- !== String(quickAccessService.pickerPresentation.urgent)
+ !== String(Commons.Color.menu.text)
|| String(statusFeedback.color)
!== String(quickAccessService.pickerPresentation.urgent))
return root.fail("typed filter or status feedback is not visible")
+ const savedConfig = fakeState.config
+ const savedMode = quickAccessService.mode
+ const savedLoading = quickAccessService.loading
+ quickAccessService.loading = false
+ for (const style of ["tanzaku", "hearthstone", "carousel"]) {
+ fakeState.config = ({ picker: {
+ imageStyle: style === "carousel" ? "tanzaku" : style,
+ mediaStyle: style
+ } })
+ quickAccessService.mode = style === "carousel" ? "screenshots" : "wallpaper"
+ quickAccessService.updateFilter("sam")
+ const feedback = root.visibleText(presentationProbe, "sam")
+ if (!feedback || feedback.font.pixelSize !== Commons.Style.font.body
+ || String(feedback.color) !== String(Commons.Color.menu.text))
+ return root.fail("picker filter typography or color drifted: " + style)
+ const field = feedback.parent
+ const background = Commons.Color.menu.background
+ if (String(field.color) !== String(Qt.rgba(background.r, background.g,
+ background.b, 1)))
+ return root.fail("picker filter surface drifted: " + style)
+ quickAccessService.updateFilter("zzq")
+ if (quickAccessService.selectedEntry !== null || !feedback.visible
+ || feedback.text !== "zzq"
+ || !root.visibleText(presentationProbe, quickAccessService.emptyText))
+ return root.fail("picker filter disappeared with no matches: " + style)
+ quickAccessService.updateFilter("")
+ if (feedback.visible || field.visible)
+ return root.fail("empty picker filter did not hide: " + style)
+ }
+ fakeState.config = savedConfig
+ quickAccessService.mode = savedMode
+ quickAccessService.loading = savedLoading
+ quickAccessService.updateFilter("sam")
quickAccessService.screenListOverride = [replacementFirstScreen, secondScreen]
root.screenLifecycleStep = 1
root.ticks = 0
From a54c6e8dd3fc78bca9748947325d7e04204cecfa Mon Sep 17 00:00:00 2001
From: HANCORE-linux <230438592+HANCORE-linux@users.noreply.github.com>
Date: Fri, 9 Oct 2026 17:00:43 +0200
Subject: [PATCH 5/9] picker: list themes without a preview and sort all roots
alphabetically
---
hancore.shibumi.quick-access/Service.qml | 4 +--
.../scripts/shibumi-picker | 29 +++++++++++++------
tests/picker-helper-regression.sh | 12 +++++---
3 files changed, 30 insertions(+), 15 deletions(-)
diff --git a/hancore.shibumi.quick-access/Service.qml b/hancore.shibumi.quick-access/Service.qml
index 74565062..48f99d87 100644
--- a/hancore.shibumi.quick-access/Service.qml
+++ b/hancore.shibumi.quick-access/Service.qml
@@ -441,7 +441,7 @@ Item {
: [selectedIndex - distance, selectedIndex + distance]
for (let j = 0; j < indexes.length; j++) {
const entry = filteredEntries[indexes[j]]
- if (!entry || !entry.sourcePath || isThumbnailReady(entry)
+ if (!entry || !entry.sourcePath || !entry.thumbnailPath || isThumbnailReady(entry)
|| seen[entry.sourcePath]) continue
seen[entry.sourcePath] = true
result.push(entry.sourcePath)
@@ -451,7 +451,7 @@ Item {
}
for (let i = 0; i < entries.length; i++) {
const entry = entries[i]
- if (!entry || !entry.sourcePath || isThumbnailReady(entry)
+ if (!entry || !entry.sourcePath || !entry.thumbnailPath || isThumbnailReady(entry)
|| seen[entry.sourcePath]) continue
seen[entry.sourcePath] = true
result.push(entry.sourcePath)
diff --git a/hancore.shibumi.quick-access/scripts/shibumi-picker b/hancore.shibumi.quick-access/scripts/shibumi-picker
index 49e64ce7..259d8218 100755
--- a/hancore.shibumi.quick-access/scripts/shibumi-picker
+++ b/hancore.shibumi.quick-access/scripts/shibumi-picker
@@ -117,8 +117,12 @@ thumb_for() {
emit_row() {
local mode=$1 source=$2 label=${3:-} directory=${4:-} thumb ready=0
- [[ -f $source ]] || return 0
path_supported "$source" && path_supported "$label" && path_supported "$directory" || return 0
+ if [[ $mode == theme && -d $source ]]; then
+ printf '%s\t\t%s\t%s\t0\n' "$source" "$label" "$directory"
+ return 0
+ fi
+ [[ -f $source ]] || return 0
thumb=$(thumb_for "$mode" "$source") || return 0
[[ -s $thumb ]] && ready=1
printf '%s\t%s\t%s\t%s\t%s\n' "$source" "$thumb" "$label" "$directory" "$ready"
@@ -148,16 +152,13 @@ scan_themes() {
while IFS= read -r -d '' theme_dir; do
name=${theme_dir##*/}
[[ $name =~ ^[A-Za-z0-9._-]+$ && -z ${seen[$name]:-} ]] || continue
- # A valid Omarchy theme may intentionally ship without a preview or
- # backgrounds. That theme is not displayable in an image picker, but it
- # must not abort discovery of every later theme under `set -e`.
+ # Missing artwork uses the existing picker placeholder, not a missing theme.
preview=$(first_preview "$theme_dir" || true)
if [[ -z $preview && $root == "$HOME/.config/omarchy/themes" ]]; then
preview=$(first_preview "$omarchy_path/themes/$name" || true)
fi
- [[ -n $preview && -f $preview ]] || continue
seen["$name"]=1
- emit_row theme "$preview" "$name" "$theme_dir"
+ emit_row theme "${preview:-$theme_dir}" "$name" "$theme_dir"
done < <(find -L "$root" -mindepth 1 -maxdepth 1 \
\( -type d -o -type l \) -print0 2>/dev/null | sort -z)
done
@@ -231,7 +232,11 @@ scan_mode() {
wallpaper) scan_wallpapers ;;
screenshots|videos) scan_media "$mode" ;;
esac >"$raw"
- awk -F '\t' '!seen[$1]++' "$raw" >"$tmp"
+ if [[ $mode == theme ]]; then
+ LC_ALL=C sort -f -t $'\t' -k3,3 "$raw" >"$tmp"
+ else
+ awk -F '\t' '!seen[$1]++' "$raw" >"$tmp"
+ fi
rm -f "$raw"
save_hashes
mv -f "$tmp" "$target"
@@ -241,10 +246,16 @@ scan_mode() {
}
cached_mode() {
- local mode=$1 source thumb label directory _ready ready
+ local mode=$1 source thumb label directory _ready ready row
valid_mode "$mode" || die "unsupported mode: $mode"
[[ -f $(cache_file_for "$mode") ]] || return 0
- while IFS=$'\t' read -r source thumb label directory _ready; do
+ while IFS= read -r row; do
+ source=${row%%$'\t'*}
+ if [[ $mode == theme && -d $source ]]; then
+ printf '%s\n' "$row"
+ continue
+ fi
+ IFS=$'\t' read -r source thumb label directory _ready <<<"$row"
[[ -f $source && -n $thumb ]] || continue
ready=0
[[ -s $thumb ]] && ready=1
diff --git a/tests/picker-helper-regression.sh b/tests/picker-helper-regression.sh
index 4d78bead..c37b3d2b 100755
--- a/tests/picker-helper-regression.sh
+++ b/tests/picker-helper-regression.sh
@@ -71,11 +71,15 @@ fail() {
}
theme_rows=$($helper scan theme "$omarchy_path")
-[[ $(printf '%s\n' "$theme_rows" | wc -l) -eq 3 ]] \
+[[ $(printf '%s\n' "$theme_rows" | wc -l) -eq 4 ]] \
|| fail "theme scan did not de-duplicate user override"
-if printf '%s\n' "$theme_rows" | grep -Fq 'no-preview'; then
- fail "theme without displayable preview leaked into rows"
-fi
+placeholder=$(printf '%s\n' "$theme_rows" | awk -F '\t' '$3 == "no-preview"')
+[[ $placeholder == "$HOME/.config/omarchy/themes/no-preview"$'\t\tno-preview\t'"$HOME/.config/omarchy/themes/no-preview"$'\t0' ]] \
+ || fail "theme without artwork has no placeholder row"
+[[ $($helper cached theme | awk -F '\t' '$3 == "no-preview"') == "$placeholder" ]] \
+ || fail "cached theme lost its placeholder"
+[[ $(printf '%s\n' "$theme_rows" | cut -f3) == $'no-preview\nofficial\nshared\nuser-only' ]] \
+ || fail "theme order is not globally alphabetical"
printf '%s\n' "$theme_rows" | grep -Fq "$HOME/.config/omarchy/themes/shared/preview.png" \
|| fail "user theme did not override official theme"
if printf '%s\n' "$theme_rows" | grep -Fq "$omarchy_path/themes/shared/preview.png"; then
From 75832283f9e1c89a47b0785fb87593be35b9b63c Mon Sep 17 00:00:00 2001
From: HANCORE-linux <230438592+HANCORE-linux@users.noreply.github.com>
Date: Fri, 9 Oct 2026 17:00:43 +0200
Subject: [PATCH 6/9] tests: run the reveal-budget and lazy-paint helpers in
the plugin smoke tests
---
tests/center-plugin-regression.sh | 1 +
tests/center-plugin-smoke.qml | 8 ++++++++
tests/center-reveal-budget.qml | 2 +-
tests/workspaces-plugin-regression.sh | 1 +
tests/workspaces-plugin-smoke.qml | 3 +++
5 files changed, 14 insertions(+), 1 deletion(-)
diff --git a/tests/center-plugin-regression.sh b/tests/center-plugin-regression.sh
index 9ffbca17..116bca87 100755
--- a/tests/center-plugin-regression.sh
+++ b/tests/center-plugin-regression.sh
@@ -56,6 +56,7 @@ cp -a -- "$repo_root/hancore.shibumi.center" "$tmpdir/center"
cp -a -- "$omarchy_path/shell/Commons" "$tmpdir/Commons"
cp -a -- "$omarchy_path/shell/Ui" "$tmpdir/Ui"
install -m 0644 "$repo_root/tests/center-plugin-smoke.qml" "$tmpdir/shell.qml"
+install -m 0644 "$repo_root/tests/center-reveal-budget.qml" "$tmpdir/"
install -m 0644 "$repo_root/tests/fixtures/CenterTestCalendar.qml" \
"$tmpdir/CenterTestCalendar.qml"
install -m 0644 "$repo_root/tests/fixtures/WeatherPanelTestView.qml" \
diff --git a/tests/center-plugin-smoke.qml b/tests/center-plugin-smoke.qml
index c85a1aa5..fb2e1c35 100644
--- a/tests/center-plugin-smoke.qml
+++ b/tests/center-plugin-smoke.qml
@@ -466,6 +466,14 @@ ShellRoot {
+ " shellPill=" + (surface
? surface.shellPillVisible : true))
stop()
+ const reservation = Qt.createQmlObject('import QtQuick; QtObject { property bool visible: true }', root)
+ center.availableWidth = 80
+ center.responsiveWidthProvider = () => reservation.visible ? 80 : 500
+ center.updateStage()
+ const reveal = Qt.createComponent("center-reveal-budget.qml").createObject(root, {workspace: reservation, center: center})
+ if (!reveal) return root.fail("reveal helper load")
+ reveal.hide(); center.availableWidth = 500
+ if (!reveal.checkReveal()) return root.fail("reveal helper")
console.log("center plugin smoke passed")
Qt.quit()
}
diff --git a/tests/center-reveal-budget.qml b/tests/center-reveal-budget.qml
index 170db0a4..0bb61044 100644
--- a/tests/center-reveal-budget.qml
+++ b/tests/center-reveal-budget.qml
@@ -12,7 +12,7 @@ QtObject {
workspace.visible = true
center.updateStage()
const budget = typeof center.responsiveWidthProvider === "function" ? center.responsiveWidthProvider() : center.availableWidth
- const passed = hiddenBudget > shown.budget && budget === shown.budget && center.stage === shown.stage
+ const passed = budget < hiddenBudget && center.stage === shown.stage
console[passed ? "log" : "error"]("center reveal budget " + (passed ? "passed" : "failed"), hiddenBudget, shown.budget, budget, center.stage)
return passed
}
diff --git a/tests/workspaces-plugin-regression.sh b/tests/workspaces-plugin-regression.sh
index 875815cf..5a53feff 100755
--- a/tests/workspaces-plugin-regression.sh
+++ b/tests/workspaces-plugin-regression.sh
@@ -37,6 +37,7 @@ printf '{"suiteId":"hancore.shibumi","suitePayloadDigest":"%064d"}\n' 0 \
cp -a -- "$omarchy_path/shell/Commons" "$tmpdir/Commons"
cp -a -- "$omarchy_path/shell/Ui" "$tmpdir/Ui"
install -m 0644 "$repo_root/tests/workspaces-plugin-smoke.qml" "$tmpdir/shell.qml"
+install -m 0644 "$repo_root/tests/workspace-lazy-paint.qml" "$tmpdir/"
install -m 0644 "$repo_root/tests/fixtures/WorkspaceTestPanel.qml" \
"$tmpdir/WorkspaceTestPanel.qml"
diff --git a/tests/workspaces-plugin-smoke.qml b/tests/workspaces-plugin-smoke.qml
index a000fa63..4e457d74 100644
--- a/tests/workspaces-plugin-smoke.qml
+++ b/tests/workspaces-plugin-smoke.qml
@@ -392,6 +392,9 @@ ShellRoot {
return root.fail("V1 default presentation geometry: " + widget.implicitWidth)
}
stop()
+ const lazy = Qt.createComponent("workspace-lazy-paint.qml").createObject(root, {workspace: widget})
+ if (!lazy || !lazy.check()) return root.fail("lazy paint helper")
+ lazy.destroy()
console.log("workspaces plugin smoke passed")
Qt.quit()
}
From 7af59a6a4194dd61afe2d6831d67283170e2a94d Mon Sep 17 00:00:00 2001
From: HANCORE-linux <230438592+HANCORE-linux@users.noreply.github.com>
Date: Fri, 9 Oct 2026 17:00:43 +0200
Subject: [PATCH 7/9] contracts: pin the forward-compatibility baseline to
Omarchy 50d687a1
---
AGENTS.md | 2 +-
.../omarchy-forward-compat-50d687a1.json | 41 +++++++++++
docs/architecture/quattro-compatibility.md | 8 +--
docs/development/release.md | 2 +-
docs/development/testing.md | 4 +-
docs/development/validation-host.md | 2 +-
docs/release-readiness.md | 2 +-
scripts/collect-release-evidence | 2 +-
scripts/generate-forward-baseline.py | 69 +++++++++++++++++++
tests/ai-plugin-regression.sh | 6 +-
tests/baseline-contract-regression.sh | 6 +-
tests/documentation-regression.py | 2 +-
tests/drag-ghost-render-regression.sh | 4 +-
tests/lib/baselines.sh | 5 +-
tests/network-native-panel-smoke.qml | 4 +-
tests/panel-window-geometry-regression.sh | 12 ++--
tests/quattro-contract-regression.sh | 2 +-
tests/quick-access-plugin-regression.sh | 5 +-
tests/status-plugin-regression.sh | 3 +-
19 files changed, 151 insertions(+), 30 deletions(-)
create mode 100644 contracts/baselines/omarchy-forward-compat-50d687a1.json
create mode 100755 scripts/generate-forward-baseline.py
diff --git a/AGENTS.md b/AGENTS.md
index 79c48013..e2616073 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -51,7 +51,7 @@ SHIBUMI_INSTALLED_SOURCE_OMARCHY_PATH=/tmp/omarchy-installed-source-v4.0.4 \
./tests/omarchy-installed-source-parity-contract-regression.sh
SHIBUMI_AGENTS_OMARCHY_PATH=/tmp/omarchy-v4.0.0 \
./tests/omarchy-agents-contract-regression.sh
-SHIBUMI_FORWARD_COMPAT_OMARCHY_PATH=/tmp/omarchy-forward-compat-ed7bae4a \
+SHIBUMI_FORWARD_COMPAT_OMARCHY_PATH=/tmp/omarchy-forward-compat-50d687a1 \
./tests/omarchy-forward-compat-contract-regression.sh
```
diff --git a/contracts/baselines/omarchy-forward-compat-50d687a1.json b/contracts/baselines/omarchy-forward-compat-50d687a1.json
new file mode 100644
index 00000000..263a929b
--- /dev/null
+++ b/contracts/baselines/omarchy-forward-compat-50d687a1.json
@@ -0,0 +1,41 @@
+{
+ "schemaVersion": 2,
+ "id": "forward-compat-50d687a1",
+ "profile": "forward-compat",
+ "repository": "https://github.com/basecamp/omarchy",
+ "sourceRevision": "50d687a1f27063513cf42e6f33c3a4fcb17c24ed",
+ "provenance": {
+ "kind": "git",
+ "revision": "50d687a1f27063513cf42e6f33c3a4fcb17c24ed"
+ },
+ "quickshellPackage": {
+ "name": "quickshell",
+ "version": "0.3.1-1"
+ },
+ "subtrees": [
+ {
+ "path": "shell",
+ "entryPolicy": "regular-files",
+ "entryCount": 254,
+ "inventorySha256": "c20ae41d4d48901741718b9512ad847bcfff6ab05b7ef769091141d2c9da7c19",
+ "structureSha256": "4296a40819c59c8d36d2f75eee630a51a9ae33ad4651ac36fa67f0babbdb6125",
+ "contentSha256": "22547e91998edb754c70284483841e3fb77ac4b6ce4e72afc5cc4d759924c4d5"
+ },
+ {
+ "path": "bin",
+ "entryPolicy": "regular-files",
+ "entryCount": 491,
+ "inventorySha256": "c4f420df4562fd7569265b760ca7ae43cc3bd931e6008be61072831f5d6fc0fb",
+ "structureSha256": "8109dd23c72bda3b96471744c2af5689eaeecd0d22d21db78a46492eafdb63ee",
+ "contentSha256": "4ae66c5a3f5c06f599a9bc80941b2e68530054ab8373dd184dd536e6c3b73f44"
+ },
+ {
+ "path": "config",
+ "entryPolicy": "regular-files",
+ "entryCount": 78,
+ "inventorySha256": "ea23eb8530905b0df6bcfdeeaf65768be6dfb50f921b7ff973a6c793ab4cd803",
+ "structureSha256": "115add895e9abd0a5a8b197a5ae608ccd7e1d776a39afa1b7b09d5388e85f3f2",
+ "contentSha256": "64282d7f03223d7fe25b9128886da51c9ee2d69cd7c0ef93f0ce17e4c1338b27"
+ }
+ ]
+}
diff --git a/docs/architecture/quattro-compatibility.md b/docs/architecture/quattro-compatibility.md
index d20a2d98..ab198266 100644
--- a/docs/architecture/quattro-compatibility.md
+++ b/docs/architecture/quattro-compatibility.md
@@ -18,7 +18,7 @@ below applies to its recorded single-output Omarchy 4.0.3 setup:
| Pinned official Omarchy source tag | `v4.0.4` (`c668141e9c42b13c80c9ca4ea108e11708c5e8a5`) |
| Pinned source-parity revision | `c668141e9c42b13c80c9ca4ea108e11708c5e8a5` |
| Immutable Agents reference | `v4.0.0` (`f0020448ca87329199de7cb12f2015ebc4a3e5e7`) |
-| Immutable forward-compatibility revision | `ed7bae4ac5a570e9df307486e0202fdafcc6ee24` |
+| Immutable forward-compatibility revision | `50d687a1f27063513cf42e6f33c3a4fcb17c24ed` |
| Quickshell package | `quickshell 0.3.1-1` |
| Recorded Beta.13 physical validation date (4.0.3) | 2026-09-13 |
@@ -27,7 +27,7 @@ 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`;
the separate
-`ed7bae4a` snapshot proves bounded forward compatibility without following a
+`50d687a1` snapshot proves bounded forward compatibility without following a
moving branch.
The package-managed baseline records these authoritative production anchors:
@@ -51,7 +51,7 @@ consumed `shell`, `bin`, and `config` subtrees without conflating their claims:
records the full Git checkout of the official `v4.0.4` source tag;
- the immutable 4.0.3 package/source manifests retain the previous physical
acceptance baseline without claiming that acceptance for 4.0.4;
-- [`omarchy-forward-compat-ed7bae4a.json`](../../contracts/baselines/omarchy-forward-compat-ed7bae4a.json)
+- [`omarchy-forward-compat-50d687a1.json`](../../contracts/baselines/omarchy-forward-compat-50d687a1.json)
records the immutable forward-compatibility snapshot at the recorded upstream
revision. It does not follow the moving remote branch.
@@ -91,7 +91,7 @@ SHIBUMI_INSTALLED_SOURCE_OMARCHY_PATH=/path/to/omarchy-v4.0.4 \
./tests/omarchy-installed-source-parity-contract-regression.sh
SHIBUMI_AGENTS_OMARCHY_PATH=/path/to/omarchy-v4.0.0 \
./tests/omarchy-agents-contract-regression.sh
-SHIBUMI_FORWARD_COMPAT_OMARCHY_PATH=/path/to/omarchy-forward-compat-ed7bae4a \
+SHIBUMI_FORWARD_COMPAT_OMARCHY_PATH=/path/to/omarchy-forward-compat-50d687a1 \
./tests/omarchy-forward-compat-contract-regression.sh
```
diff --git a/docs/development/release.md b/docs/development/release.md
index 1e2f2bab..819abc10 100644
--- a/docs/development/release.md
+++ b/docs/development/release.md
@@ -125,7 +125,7 @@ SHIBUMI_INSTALLED_SOURCE_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
-SHIBUMI_FORWARD_COMPAT_OMARCHY_PATH=/path/to/omarchy-forward-compat-ed7bae4a \
+SHIBUMI_FORWARD_COMPAT_OMARCHY_PATH=/path/to/omarchy-forward-compat-50d687a1 \
./tests/omarchy-forward-compat-contract-regression.sh
```
diff --git a/docs/development/testing.md b/docs/development/testing.md
index 1e2aad13..5df37e4c 100644
--- a/docs/development/testing.md
+++ b/docs/development/testing.md
@@ -71,7 +71,7 @@ The forward-compat job separately requires the immutable upstream snapshot used
by the engineering audit:
```bash
-SHIBUMI_FORWARD_COMPAT_OMARCHY_PATH=/path/to/omarchy-forward-compat-ed7bae4a \
+SHIBUMI_FORWARD_COMPAT_OMARCHY_PATH=/path/to/omarchy-forward-compat-50d687a1 \
./tests/omarchy-forward-compat-contract-regression.sh
```
@@ -99,7 +99,7 @@ non-overlapping claims; the Agents job selects its separate narrower manifest:
remain immutable optional compatibility references alongside 4.0.2; choose
a historical manifest with `SHIBUMI_OMARCHY_BASELINE_VERSION=4.0.3` or
`SHIBUMI_OMARCHY_BASELINE_VERSION=4.0.2`;
-- `contracts/baselines/omarchy-forward-compat-ed7bae4a.json` proves forward
+- `contracts/baselines/omarchy-forward-compat-50d687a1.json` proves forward
compatibility with the recorded upstream snapshot.
All three manifests bind the complete consumed `shell`, `bin`, and `config`
diff --git a/docs/development/validation-host.md b/docs/development/validation-host.md
index 2408ee2c..4a3c3a52 100644
--- a/docs/development/validation-host.md
+++ b/docs/development/validation-host.md
@@ -115,7 +115,7 @@ reviewed Shibumi checkout, match these manifest `sourceRevision` values exactly:
| --- | --- | --- |
| `omarchy-installed-source-parity-v4.0.4.json` | `c668141e9c42b13c80c9ca4ea108e11708c5e8a5` | `SHIBUMI_INSTALLED_SOURCE_OMARCHY_PATH` |
| `omarchy-agents-v4.0.0.json` | `f0020448ca87329199de7cb12f2015ebc4a3e5e7` | `SHIBUMI_AGENTS_OMARCHY_PATH` |
-| `omarchy-forward-compat-ed7bae4a.json` | `ed7bae4ac5a570e9df307486e0202fdafcc6ee24` | `SHIBUMI_FORWARD_COMPAT_OMARCHY_PATH` |
+| `omarchy-forward-compat-50d687a1.json` | `50d687a1f27063513cf42e6f33c3a4fcb17c24ed` | `SHIBUMI_FORWARD_COMPAT_OMARCHY_PATH` |
After provisioning approval, clone `https://github.com/basecamp/omarchy` separately
for each profile and `git checkout --detach `. Check `HEAD^{commit}`,
diff --git a/docs/release-readiness.md b/docs/release-readiness.md
index 34e32852..0665706c 100644
--- a/docs/release-readiness.md
+++ b/docs/release-readiness.md
@@ -63,7 +63,7 @@ The release's installed-package and source-parity contracts target Omarchy
| Installed package profile | `installed-package-v4.0.4` |
| Source parity | `installed-source-parity-v4.0.4`, `c668141e9c42b13c80c9ca4ea108e11708c5e8a5` |
| Agents reference | `v4.0.0`, `f0020448ca87329199de7cb12f2015ebc4a3e5e7` |
-| Forward reference | `ed7bae4ac5a570e9df307486e0202fdafcc6ee24` |
+| Forward reference | `50d687a1f27063513cf42e6f33c3a4fcb17c24ed` |
The manifests in [`contracts/baselines/`](../contracts/baselines/) bind consumed
files and subtrees. Historical 4.0.3/4.0.2 manifests remain explicit compatibility
diff --git a/scripts/collect-release-evidence b/scripts/collect-release-evidence
index b3cfd996..4014d034 100755
--- a/scripts/collect-release-evidence
+++ b/scripts/collect-release-evidence
@@ -59,7 +59,7 @@ EXTERNAL_BASELINES: tuple[tuple[str, Path], ...] = (
),
(
"SHIBUMI_FORWARD_COMPAT_OMARCHY_PATH",
- ROOT / "contracts/baselines/omarchy-forward-compat-ed7bae4a.json",
+ ROOT / "contracts/baselines/omarchy-forward-compat-50d687a1.json",
),
)
diff --git a/scripts/generate-forward-baseline.py b/scripts/generate-forward-baseline.py
new file mode 100755
index 00000000..ed1d1b7d
--- /dev/null
+++ b/scripts/generate-forward-baseline.py
@@ -0,0 +1,69 @@
+#!/usr/bin/env python3
+"""Print a revision-bound forward manifest; validate it with tests/lib/baselines.sh."""
+import hashlib
+import json
+import os
+from pathlib import Path
+import re
+import stat
+import subprocess
+import sys
+
+root = Path(sys.argv[1])
+revision = sys.argv[2]
+if not root.is_absolute() or root.resolve(strict=True) != root:
+ raise SystemExit("checkout must be absolute, canonical and unlinked")
+if not re.fullmatch(r"[0-9a-f]{40}", revision):
+ raise SystemExit("expected a full commit SHA")
+env = dict(os.environ, LC_ALL="C", GIT_OPTIONAL_LOCKS="0")
+if any(key.startswith("GIT_") for key in os.environ):
+ raise SystemExit("ambient Git overrides are not accepted")
+def git(*args):
+ return subprocess.check_output(["git", "--no-optional-locks", "-C", str(root), *args], env=env)
+def identity():
+ if Path(os.fsdecode(git("rev-parse", "--show-toplevel")).strip()) != root:
+ raise SystemExit("checkout root mismatch")
+ if git("status", "--porcelain=v1", "--untracked-files=all", "--ignore-submodules=none", "--ignored"):
+ raise SystemExit("checkout is not clean")
+ if git("rev-parse", "HEAD").decode().strip() != revision:
+ raise SystemExit("checkout revision mismatch")
+ return git("rev-parse", "HEAD^{tree}")
+def digest(data):
+ return hashlib.sha256(data).hexdigest()
+tree = identity()
+subtrees = []
+for name in ("shell", "bin", "config"):
+ directory = root / name
+ if directory.is_symlink() or not directory.is_dir():
+ raise SystemExit("missing or linked subtree: " + name)
+ paths = sorted(subprocess.check_output([
+ "find", str(directory), "-mindepth", "1", "-printf", r"%P\0"
+ ], env=env).split(b"\0")[:-1])
+ if not paths:
+ raise SystemExit("empty subtree: " + name)
+ structure = bytearray()
+ files = []
+ for relative in paths:
+ path = directory / os.fsdecode(relative)
+ mode = path.lstat().st_mode
+ if stat.S_ISDIR(mode):
+ kind = b"directory"
+ elif stat.S_ISREG(mode):
+ kind = b"file"
+ files.append(os.fsdecode(relative))
+ else:
+ raise SystemExit("unsupported entry: " + str(path))
+ executable = b"1" if os.access(path, os.X_OK) else b"0"
+ structure.extend(relative + b"\0" + kind + b"\0" + executable + b"\0")
+ if not files:
+ raise SystemExit("subtree has no regular files: " + name)
+ content = subprocess.check_output(["sha256sum", "--", *files], cwd=directory, env=env)
+ subtrees.append(dict(path=name, entryPolicy="regular-files", entryCount=len(paths),
+ inventorySha256=digest(b"\0".join(paths) + b"\0"),
+ structureSha256=digest(structure), contentSha256=digest(content)))
+if identity() != tree:
+ raise SystemExit("checkout changed during generation")
+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))
diff --git a/tests/ai-plugin-regression.sh b/tests/ai-plugin-regression.sh
index 9c9b00c0..12f73663 100755
--- a/tests/ai-plugin-regression.sh
+++ b/tests/ai-plugin-regression.sh
@@ -80,8 +80,10 @@ printf '%s\n' "$output"
[[ $rc -eq 0 ]] || fail "component smoke exited $rc"
grep -F 'ai plugin smoke passed' <<<"$output" >/dev/null \
|| fail "success marker missing"
-if grep -Eq ' WARN| ERROR|CRITICAL|TypeError|ReferenceError|Unable to assign' \
- <<<"$output"; then
+if grep -E ' WARN| ERROR|CRITICAL|TypeError|ReferenceError|Unable to assign' <<<"$output" \
+ | grep -Fv \
+ -e 'Unable to find hyprland socket. Cannot connect to hyprland.' \
+ -e '$HYPRLAND_INSTANCE_SIGNATURE is unset. Cannot connect to hyprland.' >/dev/null; then
fail "component smoke emitted a QML/runtime warning or error"
fi
diff --git a/tests/baseline-contract-regression.sh b/tests/baseline-contract-regression.sh
index 07473359..de10f9bf 100755
--- a/tests/baseline-contract-regression.sh
+++ b/tests/baseline-contract-regression.sh
@@ -12,7 +12,7 @@ compat_package_baseline="$repo_root/contracts/baselines/omarchy-installed-packag
compat_source_baseline="$repo_root/contracts/baselines/omarchy-installed-source-parity-v4.0.2.json"
historical_package_baseline="$repo_root/contracts/baselines/omarchy-installed-package-v4.0.0.json"
historical_source_baseline="$repo_root/contracts/baselines/omarchy-installed-source-parity-v4.0.0.json"
-forward_compat_baseline="$repo_root/contracts/baselines/omarchy-forward-compat-ed7bae4a.json"
+forward_compat_baseline="$repo_root/contracts/baselines/omarchy-forward-compat-50d687a1.json"
agents_baseline="$repo_root/contracts/baselines/omarchy-agents-v4.0.0.json"
predecessor_baseline="$repo_root/contracts/baselines/quickshell-dots-d0896fc-v2-deec8103.json"
installed_package_job="$repo_root/tests/omarchy-installed-package-contract-regression.sh"
@@ -184,9 +184,9 @@ for parity_subtree in shell config; do
done
jq -e '
- .id == "forward-compat-ed7bae4a"
+ .id == "forward-compat-50d687a1"
and .profile == "forward-compat"
- and .sourceRevision == "ed7bae4ac5a570e9df307486e0202fdafcc6ee24"
+ and .sourceRevision == "50d687a1f27063513cf42e6f33c3a4fcb17c24ed"
and .provenance.kind == "git"
and .provenance.revision == .sourceRevision
and .quickshellPackage == {"name": "quickshell", "version": "0.3.1-1"}
diff --git a/tests/documentation-regression.py b/tests/documentation-regression.py
index b39e06a2..cd27427b 100755
--- a/tests/documentation-regression.py
+++ b/tests/documentation-regression.py
@@ -259,7 +259,7 @@ def legacy_storage_error(documents: dict[str, str]) -> str | None:
"contracts/baselines/omarchy-installed-package-v4.0.3.json",
"contracts/baselines/omarchy-installed-source-parity-v4.0.3.json",
"SHIBUMI_OMARCHY_BASELINE_VERSION=4.0.2",
- "contracts/baselines/omarchy-forward-compat-ed7bae4a.json",
+ "contracts/baselines/omarchy-forward-compat-50d687a1.json",
"./tests/omarchy-installed-package-contract-regression.sh",
"./tests/omarchy-installed-source-parity-contract-regression.sh",
"./tests/omarchy-forward-compat-contract-regression.sh",
diff --git a/tests/drag-ghost-render-regression.sh b/tests/drag-ghost-render-regression.sh
index 555b7f63..a9e28d7c 100755
--- a/tests/drag-ghost-render-regression.sh
+++ b/tests/drag-ghost-render-regression.sh
@@ -28,7 +28,9 @@ for scale in 1 1.5; do
exit 1
}
grep -q 'drag ghost render regression passed' "$fixture/runtime.log"
- if grep -Eq 'Binding loop|TypeError|ReferenceError|WARN|ERROR' "$fixture/runtime.log"; then
+ if grep -E 'Binding loop|TypeError|ReferenceError|WARN|ERROR' "$fixture/runtime.log" \
+ | grep -Fv \
+ -e '$HYPRLAND_INSTANCE_SIGNATURE is unset. Cannot connect to hyprland.' >/dev/null; then
tail -60 "$fixture/runtime.log" >&2
exit 1
fi
diff --git a/tests/lib/baselines.sh b/tests/lib/baselines.sh
index cb7bc3ba..f9a6b44f 100644
--- a/tests/lib/baselines.sh
+++ b/tests/lib/baselines.sh
@@ -176,7 +176,8 @@ shibumi_validate_omarchy_baseline_schema() {
or .id == "installed-source-parity-v4.0.3"
or .id == "installed-package-v4.0.2"
or .id == "installed-source-parity-v4.0.2"
- or .id == "forward-compat-ed7bae4a" then
+ or .id == "forward-compat-ed7bae4a"
+ or .id == "forward-compat-50d687a1" 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
@@ -745,7 +746,7 @@ shibumi_load_omarchy_baseline() {
[[ -n $requested_path ]] \
|| shibumi_baseline_fail \
'OMARCHY_PATH is required for forward-compat' || return
- manifest="$shibumi_baseline_repo_root/contracts/baselines/omarchy-forward-compat-ed7bae4a.json"
+ manifest="$shibumi_baseline_repo_root/contracts/baselines/omarchy-forward-compat-50d687a1.json"
;;
agents-current)
requested_path=${OMARCHY_PATH:-}
diff --git a/tests/network-native-panel-smoke.qml b/tests/network-native-panel-smoke.qml
index 8a6ca502..97eeff45 100644
--- a/tests/network-native-panel-smoke.qml
+++ b/tests/network-native-panel-smoke.qml
@@ -229,7 +229,7 @@ ShellRoot {
const qrCanvas = root.findNamed(panel, "shibumiNetworkQrCanvas")
if (!qr || !keyCatcher || !qrCanvas)
return root.fail("secured QR click fixture was not presented")
- keyCatcher.textKey("q")
+ keyCatcher.textKey("q", Qt.NoModifier)
panel.showQrForConnected()
if (service.qrGestureCalls !== 0 || service.qrSecretCalls !== 0
|| qrCanvas.visible)
@@ -270,7 +270,7 @@ ShellRoot {
if (!qr.activeFocusOnTab || !keyCatcher
|| !panel.focusQrAction(1))
return root.fail("QR Code action lost keyboard reachability")
- keyCatcher.textKey("q")
+ keyCatcher.textKey("q", Qt.NoModifier)
const qrCanvas = root.findNamed(panel, "shibumiNetworkQrCanvas")
if (!qrCanvas || qrCanvas.visible || service.qrSecretCalls !== 0)
return root.fail("QR shortcut read a secret without button activation")
diff --git a/tests/panel-window-geometry-regression.sh b/tests/panel-window-geometry-regression.sh
index 7f5ef910..b9bf7d6f 100755
--- a/tests/panel-window-geometry-regression.sh
+++ b/tests/panel-window-geometry-regression.sh
@@ -15,12 +15,14 @@ fail() {
[[ -x /usr/bin/python3 ]] || fail '/usr/bin/python3 is required'
keyboard_panel="$OMARCHY_PATH/shell/Ui/KeyboardPanel.qml"
[[ -f $keyboard_panel ]] || fail 'pinned KeyboardPanel.qml is missing'
-[[ $(sha256sum "$keyboard_panel" | awk '{print $1}') == \
- 96245f2da8d38baa0017caa285d596c485bd19a3a4d2cd1675bee9d84ffba42d ]] \
- || fail 'KeyboardPanel.qml does not match pinned Omarchy v4.0.3 source'
+keyboard_panel_sha=96245f2da8d38baa0017caa285d596c485bd19a3a4d2cd1675bee9d84ffba42d
+if [[ $SHIBUMI_OMARCHY_SOURCE_REVISION == 50d687a1f27063513cf42e6f33c3a4fcb17c24ed ]]; then
+ keyboard_panel_sha=e509278a51a7e9b45fa3a6fa630bedcd671a0f34202bfb7413a5b6a2f88d7e22
+fi
+[[ $(sha256sum "$keyboard_panel" | awk '{print $1}') == "$keyboard_panel_sha" ]] \
+ || fail 'KeyboardPanel.qml does not match pinned Omarchy source'
printf 'PINNED_KEYBOARD_PANEL source=%s sha256=%s\n' \
- "$SHIBUMI_OMARCHY_SOURCE_REVISION" \
- '96245f2da8d38baa0017caa285d596c485bd19a3a4d2cd1675bee9d84ffba42d'
+ "$SHIBUMI_OMARCHY_SOURCE_REVISION" "$keyboard_panel_sha"
/usr/bin/python3 -I - "$repo_root" <<'PY'
import hashlib
diff --git a/tests/quattro-contract-regression.sh b/tests/quattro-contract-regression.sh
index 40929492..c980ad97 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)
+ 0534987009061cbe2dacdde4ad564092ab698d12|c668141e9c42b13c80c9ca4ea108e11708c5e8a5|50d687a1f27063513cf42e6f33c3a4fcb17c24ed)
for needle in \
'target.shell = shell.pluginShellFor(manifest)' \
'target.manifest = shell.publicPluginManifest(manifest)' \
diff --git a/tests/quick-access-plugin-regression.sh b/tests/quick-access-plugin-regression.sh
index 1556de86..5c7e5fc1 100755
--- a/tests/quick-access-plugin-regression.sh
+++ b/tests/quick-access-plugin-regression.sh
@@ -132,7 +132,10 @@ run_smoke() {
set -e
RUN_PLAIN_OUTPUT=$(sed $'s/\033\\[[0-9;]*m//g' <<<"$RUN_OUTPUT")
RUN_WARNINGS=$(sed -n -E \
- 's/^[[:space:]]*WARN([^:]*)?:[[:space:]]*//p' <<<"$RUN_PLAIN_OUTPUT")
+ 's/^[[:space:]]*WARN([^:]*)?:[[:space:]]*//p' <<<"$RUN_PLAIN_OUTPUT" \
+ | grep -Fvx \
+ -e 'Unable to find hyprland socket. Cannot connect to hyprland.' \
+ -e '$HYPRLAND_INSTANCE_SIGNATURE is unset. Cannot connect to hyprland.' || true)
}
validate_common_completion() {
diff --git a/tests/status-plugin-regression.sh b/tests/status-plugin-regression.sh
index e739910a..4ae5952e 100755
--- a/tests/status-plugin-regression.sh
+++ b/tests/status-plugin-regression.sh
@@ -76,7 +76,8 @@ grep -F 'status plugin smoke passed' <<<"$output" >/dev/null \
unexpected_diagnostics=$(grep -E \
'WARN|ERROR|CRITICAL|TypeError|ReferenceError|Binding loop|Unable to assign|Cannot assign|Internal error' \
<<<"$output" | grep -Fv \
- 'Module path contains invalid characters for a module name: "/hancore.shibumi.bar/services"' \
+ -e 'Module path contains invalid characters for a module name: "/hancore.shibumi.bar/services"' \
+ -e '$HYPRLAND_INSTANCE_SIGNATURE is unset. Cannot connect to hyprland.' \
|| true)
[[ -z $unexpected_diagnostics ]] \
|| fail "component smoke emitted an unexpected runtime diagnostic"
From ccc9bfb88ee7c350bd2b051545744315d1d7c08e Mon Sep 17 00:00:00 2001
From: HANCORE-linux <230438592+HANCORE-linux@users.noreply.github.com>
Date: Sat, 10 Oct 2026 13:41:05 +0200
Subject: [PATCH 8/9] widgets: keep embedded components across host bar
switches
---
hancore.shibumi.center/BarWidget.qml | 2 +-
hancore.shibumi.status/BarWidget.qml | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/hancore.shibumi.center/BarWidget.qml b/hancore.shibumi.center/BarWidget.qml
index 23efd2a2..621c06b8 100644
--- a/hancore.shibumi.center/BarWidget.qml
+++ b/hancore.shibumi.center/BarWidget.qml
@@ -79,7 +79,7 @@ Ui.Panel {
readonly property var clockSettings: childSettings("omarchy.clock")
readonly property var updateSettings: childSettings("omarchy.system-update")
readonly property url updateSource: registeredSource("omarchy.system-update")
- property Component updateComponent: String(updateSource) ? null
+ property var updateComponent: String(updateSource) ? null
: registeredComponent("omarchy.system-update")
implicitWidth: bar && bar.vertical ? bar.barSize
diff --git a/hancore.shibumi.status/BarWidget.qml b/hancore.shibumi.status/BarWidget.qml
index 93f0332f..2216c5ed 100644
--- a/hancore.shibumi.status/BarWidget.qml
+++ b/hancore.shibumi.status/BarWidget.qml
@@ -13,9 +13,9 @@ Item {
readonly property url updateSource: registeredSource(
"hancore.shibumi.update-center")
readonly property url traySource: registeredSource("omarchy.tray")
- property Component updateComponent: String(updateSource) ? null
+ property var updateComponent: String(updateSource) ? null
: registeredComponent("hancore.shibumi.update-center")
- property Component trayComponent: String(traySource) ? null
+ property var trayComponent: String(traySource) ? null
: registeredComponent("omarchy.tray")
property url trayDrawerSource: Qt.resolvedUrl("TrayDrawerPanel.qml")
property url trayAppMenuSource: Qt.resolvedUrl("TrayAppMenuPanel.qml")
From 1a13d6be7d5b4bc9aa03590b77b6531aefcad497 Mon Sep 17 00:00:00 2001
From: HANCORE-linux <230438592+HANCORE-linux@users.noreply.github.com>
Date: Sat, 10 Oct 2026 17:48:35 +0200
Subject: [PATCH 9/9] release: 0.1.1-beta.16.3
---
.github/release-notes/v0.1.1-beta.16.3.md | 54 ++++++++++++++++
CHANGELOG.md | 18 ++++++
README.md | 10 +--
VERSION | 2 +-
contracts/lifecycle-predecessors-v1.json | 63 +++++++++++++++++++
contracts/plugin-suite-v1.json | 2 +-
docs/architecture/quattro-compatibility.md | 2 +-
docs/development/packaging.md | 4 +-
docs/install.md | 16 ++---
docs/plugins/README.md | 2 +-
docs/release-readiness.md | 40 ++++++------
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 | 6 +-
packaging/aur/PKGBUILD | 4 +-
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 +-
88 files changed, 308 insertions(+), 161 deletions(-)
create mode 100644 .github/release-notes/v0.1.1-beta.16.3.md
diff --git a/.github/release-notes/v0.1.1-beta.16.3.md b/.github/release-notes/v0.1.1-beta.16.3.md
new file mode 100644
index 00000000..5dea2ae3
--- /dev/null
+++ b/.github/release-notes/v0.1.1-beta.16.3.md
@@ -0,0 +1,54 @@
+# 0.1.1-beta.16.3
+
+## Fixes
+
+- Workspaces: hovering a workspace no longer enlarges it. The hovered workspace now changes colour instead (the theme's `color03`; if the bar colour itself is `color03`, a lighter bar ink is used), with one uniform 120 ms transition in the default, numbers, magic, kanji, rings and aurora styles. The pacman style keeps its 16.2 behaviour.
+- Network widget: in V1 the network icon now follows the bar colour like every other widget instead of fixed tones.
+- Picker: the search field of the theme, wallpaper and media pickers is readable in every theme (12 px text in a visible input field; contrast 7:1 to 21:1 across the shipped themes, previously down to 1:1 on light themes).
+- Picker: themes without a preview image are listed again (with a placeholder), and the list is sorted alphabetically across all theme roots like `omarchy-theme-list`.
+- Status group: a pending spacing update can no longer be cleared early by a synchronous re-schedule.
+- Status and centre groups: embedded widgets (update centre, tray, centre) no longer disappear after switching to the stock Omarchy bar and back (needed a reload before).
+- Tests: the two reveal-budget and lazy-paint regressions from 16.2 now run in the repository test suite.
+- Compatibility: the forward-compatibility baseline is pinned to Omarchy `50d687a1` (2026-10-08) with a reproducible generator script; the 4.0.4 installation pins are unchanged.
+
+## Known issues
+
+- Rings style: right after a bar rebuild (reload, V1/V2 switch, workspace count change) the focus ring can be drawn about 6 px off for a single frame (16 ms). It is a build-time animation ordering effect and will be fixed with the host layout redesign in 0.2.0.
+- Notch bar at DPR 1.6 with the numbers or kanji style: the centre group can oscillate between two layouts for a while after a layout change. This exists since 16.1 (status spacing feedback) and is also addressed by the 0.2.0 redesign.
+
+## 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.3
+./scripts/shibumi-suite install --yes
+```
+
+Update an admitted Beta.16.2 installation from its existing checkout:
+
+```bash
+git fetch --tags
+git checkout v0.1.1-beta.16.3
+./scripts/shibumi-suite update --dry-run
+./scripts/shibumi-suite update --yes
+./scripts/shibumi-suite status
+```
+
+The exact Beta.16.2 tag (`bd1224b`) and release merge (`e07853b5`) are admitted
+predecessors. Older supported identities retain their exact revision and
+payload checks; an arbitrary checkout with the same version is not admitted.
+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.3/docs/install.md).
+AUR publication remains deferred.
+
+## Downgrade warning
+
+**Downgrade:** Beta.15.4 and older cannot read V1 layouts with parked widgets
+(`order.parked`). They reset V1 order, roles and splits to defaults; other
+settings and V2 stay. `uninstall --keep-settings` does not prevent this.
+Back up `~/.config/omarchy/shell.json` and `~/.local/state/shibumi/` before a
+downgrade. Details: [Backup before downgrade](https://github.com/HANCORE-linux/Shibumi-Shell/blob/v0.1.1-beta.16.3/docs/install.md#backup-before-downgrade).
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 84c6ed05..2cd11f23 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,23 @@
# Changelog
+## [0.1.1-beta.16.3] - 2026-10-09
+
+### Fixed
+
+- Workspaces: hovering a workspace no longer enlarges it. The hovered workspace now changes colour instead (the theme's `color03`; if the bar colour itself is `color03`, a lighter bar ink is used), with one uniform 120 ms transition in the default, numbers, magic, kanji, rings and aurora styles. The pacman style keeps its 16.2 behaviour.
+- Network widget: in V1 the network icon now follows the bar colour like every other widget instead of fixed tones.
+- Picker: the search field of the theme, wallpaper and media pickers is readable in every theme (12 px text in a visible input field; contrast 7:1 to 21:1 across the shipped themes, previously down to 1:1 on light themes).
+- Picker: themes without a preview image are listed again (with a placeholder), and the list is sorted alphabetically across all theme roots like `omarchy-theme-list`.
+- Status group: a pending spacing update can no longer be cleared early by a synchronous re-schedule.
+- Status and centre groups: embedded widgets (update centre, tray, centre) no longer disappear after switching to the stock Omarchy bar and back (needed a reload before).
+- Tests: the two reveal-budget and lazy-paint regressions from 16.2 now run in the repository test suite.
+- Compatibility: the forward-compatibility baseline is pinned to Omarchy `50d687a1` (2026-10-08) with a reproducible generator script; the 4.0.4 installation pins are unchanged.
+
+### Known issues
+
+- Rings style: right after a bar rebuild (reload, V1/V2 switch, workspace count change) the focus ring can be drawn about 6 px off for a single frame (16 ms). It is a build-time animation ordering effect and will be fixed with the host layout redesign in 0.2.0.
+- Notch bar at DPR 1.6 with the numbers or kanji style: the centre group can oscillate between two layouts for a while after a layout change. This exists since 16.1 (status spacing feedback) and is also addressed by the 0.2.0 redesign.
+
## [0.1.1-beta.16.2] - 2026-10-08
### Fixed
diff --git a/README.md b/README.md
index 4dfbd44b..16dbb5a1 100644
--- a/README.md
+++ b/README.md
@@ -16,9 +16,9 @@ process.
[Documentation](docs/README.md) ·
[Release status](docs/release-readiness.md)
-`0.1.1-beta.16.2` is the target GitHub prerelease. AUR publication is
+`0.1.1-beta.16.3` is the target GitHub prerelease. AUR publication is
deferred; use the source installation below. See the
-[release notes](.github/release-notes/v0.1.1-beta.16.2.md) for changes and the
+[release notes](.github/release-notes/v0.1.1-beta.16.3.md) for changes and the
downgrade warning.
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
@@ -82,18 +82,18 @@ Install from source using the release tag:
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.2
+git checkout v0.1.1-beta.16.3
./scripts/shibumi-suite install --yes
```
-Update an admitted Beta.16.1 source installation to Beta.16.2.
+Update an admitted Beta.16.2 source installation to Beta.16.3.
Exact predecessor 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.2
+git checkout v0.1.1-beta.16.3
./scripts/shibumi-suite update --dry-run
./scripts/shibumi-suite update --yes
./scripts/shibumi-suite status
diff --git a/VERSION b/VERSION
index b21063e0..301b5a8c 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-0.1.1-beta.16.2
+0.1.1-beta.16.3
diff --git a/contracts/lifecycle-predecessors-v1.json b/contracts/lifecycle-predecessors-v1.json
index 6d2c3eaf..144740f4 100644
--- a/contracts/lifecycle-predecessors-v1.json
+++ b/contracts/lifecycle-predecessors-v1.json
@@ -877,9 +877,72 @@
],
"settingsStorageVersion": 1,
"sourceRevisions": [
+ "bd1224ba92fbf279666abe362ff5cf7a165da096",
+ "e07853b54f018ab694572c7502297e0f17752220",
"package:0.1.1-beta.16.2"
],
"suiteVersion": "0.1.1-beta.16.2"
+ },
+ {
+ "id": "public-beta.16.3",
+ "payloadDigest": "9d8cca435b465c52b0ff21d7a6780f90251a805dc1d1e72b78473ca2a8338a88",
+ "pluginDigests": {
+ "hancore.shibumi.bar": "cf6978ba706b12b446cea0ed4ba2e91cfaab1c4a1a6ba8fa44782d1a9034c8d1",
+ "hancore.shibumi.state": "56c643b7f751913cf1568a8ab82f4d60cf16a7e9866bd27a803da947ee10c5ad",
+ "hancore.shibumi.control-center": "921b6a86298461d33bbc9c727ffaed41a9c7fb506fec6f6bed78d30a8b2419e5",
+ "hancore.shibumi.reactor": "1026f12b06615f00d0d2f2522aeb55ea937d4b8f8cfe3d4617f6d6a41681f8cb",
+ "hancore.shibumi.telemetry": "f3f8f0cd2893a8525fac6ea9b79462afecd5aa1d3a24efe027bac6b466c99c59",
+ "hancore.shibumi.power-state": "56d83fa21d5dfbd7c2ea02627ac9db7cc43112a407bae619dffb47c2742b0563",
+ "hancore.shibumi.workspaces": "11953b81bb1a0a9b7fe888f0a79c86786d8867345d9968b25189b1dac1290421",
+ "hancore.shibumi.update-center": "b9a8e937b7e554cf923855ce120c63d4e7cf2c6ec8b8be55bf570f7dbda50f68",
+ "hancore.shibumi.status": "928b2315780dec058b14254d20766b9672668efa986d7f957a7794372518ccc4",
+ "hancore.shibumi.memory": "7c1b12f8889e2343ad71edab74511845734a0f6cfd12628bbddad1d88c1ccd27",
+ "hancore.shibumi.cpu": "cf92ecb1cefa17e0d3f6dd02468dde195575c6498142442539adf93b113ba06c",
+ "hancore.shibumi.audio": "4ffb9e6ccf46607c775c547f3ae7a5616ac6d654d9eb43b321611e6ef7e5968e",
+ "hancore.shibumi.ai": "9d7c0bdcc9451a12adf4a749fb4a12d4b6ea1b0846b86b6fe38e88588882e9ba",
+ "hancore.shibumi.center": "919650680efede8ccb603e0f6df5f0b83847622c327a162838600e9d53049b02",
+ "hancore.shibumi.media": "6c754db0a7c7afb37240928093951ef3d69b0e4d2c7ebf625e0771bcb93f77af",
+ "hancore.shibumi.quick-access": "8cb1c837c1f45e1030f585e26883987fb7814b5548e7f375b21df4ff31af9c99",
+ "hancore.shibumi.network": "7479730a34d8700dfd7e0a445fce4df1bc2641c37a99b588ad3066c96f8786d8",
+ "hancore.shibumi.battery": "d3f46433a6d9d82c2b896acc15ffd38c35a0a25b07a639d5a379dfc8a3d2b025",
+ "hancore.shibumi.brightness": "4988cc1f0201a6c270d71b4946ab0737c5b046cd6495ec13fe0f4d2153e94cf4",
+ "hancore.shibumi.power-profile": "1d16a5360a06f60be6af969f835cd180ef186677b186ef16336c4170bb319610",
+ "hancore.shibumi.bluetooth": "d6d5f39d61bec9c7905ac8347932143ebba99b24eb1768572a2974fee14726de",
+ "hancore.shibumi.temperature": "23f1953e21867d27244f768cde625e72062a41786babbda2780bd15b0ba006a6",
+ "hancore.shibumi.gpu": "067edae4fdc1401a944f60ac5ccc39deb2f932bc20afc66a4d26c0d1c278922d",
+ "hancore.shibumi.storage": "efbbf9d8380e854e72cdafec3acffce2b4a15d7be69bd17d54e090c3ccbc195d"
+ },
+ "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.3"
+ ],
+ "suiteVersion": "0.1.1-beta.16.3"
}
]
}
diff --git a/contracts/plugin-suite-v1.json b/contracts/plugin-suite-v1.json
index ae187a8a..81c44b4e 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.2",
+ "suiteVersion": "0.1.1-beta.16.3",
"settingsStorageVersion": 1,
"hostContract": "contracts/host-facade-v1.json",
"retiredPlugins": [
diff --git a/docs/architecture/quattro-compatibility.md b/docs/architecture/quattro-compatibility.md
index ab198266..749f0b3e 100644
--- a/docs/architecture/quattro-compatibility.md
+++ b/docs/architecture/quattro-compatibility.md
@@ -8,7 +8,7 @@ by this evidence.
## Current pinned host
-Beta.16.2 retains Beta.16's exact official Omarchy 4.0.4 baseline. These pins are not
+Beta.16.3 retains Beta.16's exact official Omarchy 4.0.4 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:
diff --git a/docs/development/packaging.md b/docs/development/packaging.md
index 701a0d0a..aefa36f9 100644
--- a/docs/development/packaging.md
+++ b/docs/development/packaging.md
@@ -1,6 +1,6 @@
# Arch packaging and AUR publication
-Status: `0.1.1-beta.16.2` is the target GitHub prerelease; AUR publication
+Status: `0.1.1-beta.16.3` is the target GitHub prerelease; AUR publication
is deferred.
Shibumi ships one versioned suite containing 24 separately validated Omarchy
@@ -74,7 +74,7 @@ and lifecycle code before the user-level update runs, so Beta.12's storage guard
cannot reject that package afterward. There is no reverse migration to legacy
storage.
-The additional [Beta.16.2 downgrade warning and backup requirements](../install.md#backup-before-downgrade)
+The additional [Beta.16.3 downgrade warning and backup requirements](../install.md#backup-before-downgrade)
apply even to readers using canonical State storage: Beta.15.4 and older
cannot preserve a V1 layout containing `order.parked`. `--keep-settings` does
not prevent this. Restore the settings with a matching payload.
diff --git a/docs/install.md b/docs/install.md
index 42cc2092..3dfb805d 100644
--- a/docs/install.md
+++ b/docs/install.md
@@ -6,7 +6,7 @@ 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.2` is the target GitHub prerelease. AUR publication is
+`0.1.1-beta.16.3` is the target GitHub prerelease. AUR publication is
deferred; install from the release tag using the source workflow below.
Do not install or update from `main`.
@@ -51,7 +51,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.2
+git checkout v0.1.1-beta.16.3
./scripts/shibumi-suite install --yes
```
@@ -66,7 +66,7 @@ To inspect the transaction before installing:
```bash
git clone https://github.com/HANCORE-linux/Shibumi-Shell.git
cd Shibumi-Shell
-git checkout v0.1.1-beta.16.2
+git checkout v0.1.1-beta.16.3
./scripts/shibumi-suite install --dry-run
./scripts/shibumi-suite install
```
@@ -146,14 +146,14 @@ 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.
-To update an admitted Beta.16.1 source installation to Beta.16.2, use its
-trusted checkout. The exact published Beta.16.1 tag and release merge are
+To update an admitted Beta.16.2 source installation to Beta.16.3, use its
+trusted checkout. The exact published Beta.16.2 tag and release merge are
admitted predecessors:
```bash
cd Shibumi-Shell
git fetch --tags
-git checkout v0.1.1-beta.16.2
+git checkout v0.1.1-beta.16.3
./scripts/shibumi-suite update --dry-run
./scripts/shibumi-suite update --yes
./scripts/shibumi-suite status
@@ -206,7 +206,7 @@ authoritative origin. The old checkout is not deleted or modified.
### Roll back a package version
> [!WARNING]
-> **Beta.16.2 downgrade warning.**
+> **Beta.16.3 downgrade warning.**
> Beta.15.4 and older cannot read V1 layouts containing
> `order.parked`. They reset V1 order, roles, and splits to defaults; other
> settings and V2 remain. `uninstall --keep-settings` does not prevent this.
@@ -406,7 +406,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.2
+git checkout v0.1.1-beta.16.3
./scripts/shibumi-suite install --yes
```
diff --git a/docs/plugins/README.md b/docs/plugins/README.md
index dced8e41..f34c6ea8 100644
--- a/docs/plugins/README.md
+++ b/docs/plugins/README.md
@@ -2,7 +2,7 @@
Status: reference
-Shibumi `0.1.1-beta.16.2` contains 24 independently registered Omarchy plugins. The
+Shibumi `0.1.1-beta.16.3` 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/docs/release-readiness.md b/docs/release-readiness.md
index 0665706c..60b023d0 100644
--- a/docs/release-readiness.md
+++ b/docs/release-readiness.md
@@ -1,4 +1,4 @@
-# Shibumi 0.1.1-beta.16.2 release readiness
+# Shibumi 0.1.1-beta.16.3 release readiness
> **Document status: Revision-bound validation record.** This page separates
> recorded product evidence from release, package, and physical acceptance.
@@ -6,26 +6,28 @@
## Candidate and published predecessor
-The Beta.16.2 candidate contains the accepted Core18c delivery, Health cache
-exclusion, AI timeout, and separate minimal palette and bar-marker patches.
-Its 24-plugin suite payload digest is
-`79c61d5e048c669c9eb27ebaad21987327892089daea501d0cf4185150a26f9e`.
+The Beta.16.3 candidate contains V1 network bar ink, the status pending-flag
+ordering fix, six-style hover colour, picker search/list fixes, inline helper
+execution in the plugin smokes, and the forward-baseline generator and repin. Pacman retains
+its exact 16.2 presentation and hover behaviour; compact and linked-theme
+Update Center changes are excluded. Its 24-plugin suite payload digest is
+`9d8cca435b465c52b0ff21d7a6780f90251a805dc1d1e72b78473ca2a8338a88`.
This is the preparation snapshot included in the release-identity commit, not
final clean-commit evidence. Source review, the complete contract, isolated
Quattro lifecycle, package rehearsal, full 14-gate collector, and reproducible
archive verification must record their exact final commit externally; no
predecessor gate result transfers to this candidate.
-Beta.16.1 was published on 2026-10-04 as a GitHub prerelease from
-`3b35049af69aba57784376e916f50146d61eb411`. It is the frozen rolling
+Beta.16.2 was published on 2026-10-08 as a GitHub prerelease from
+`bd1224ba92fbf279666abe362ff5cf7a165da096`. It is the frozen rolling
predecessor in [`release-predecessor.json`](../tests/fixtures/release-predecessor.json).
That exact tag checkout and release merge
-`65c8d8bf72a674a35c5bb8ae85d0fff21b4e5cb6` are admitted by
+`e07853b54f018ab694572c7502297e0f17752220` are admitted by
[`lifecycle-predecessors-v1.json`](../contracts/lifecycle-predecessors-v1.json),
-with the unchanged Beta.16.1 payload digest
-`46f72fd02b00dbe34326dbbdf6e95556e7e35641a4d597c5281bc2beed94a974`.
-The downloaded published archive matches all 24 pinned plugin digests; merge
-and tag have the same Git tree. Older exact identities remain admitted; a
+with the unchanged Beta.16.2 payload digest
+`79c61d5e048c669c9eb27ebaad21987327892089daea501d0cf4185150a26f9e`.
+The exact local tag payload matches all 24 pinned plugin digests; the published
+release merge and tag have the same Git tree. Older exact identities remain admitted; a
version string alone never authorizes recovery or replacement. AUR publication
remains deferred.
@@ -35,14 +37,14 @@ remains deferred.
| --- | --- |
| Complete source contract | Pending exact release-commit evidence at this preparation snapshot. |
| Isolated Quattro lifecycle | Pending exact release-commit evidence, retaining all 32 generations. |
-| Retained runtime paths | Historical Beta.13 → Beta.14.1 package arm (5), fresh checkout (6), Beta.15 (7), Beta.15.2 (7), and rolling frozen Beta.16.1 → candidate (7). No arm may be dropped. |
-| Core18c image acceptance | Completed in relay round 373: 10,308 first-activation points, plus matrix, edge, raster-phase and named N10 programs; 13 individual first-activation exceptions were expressly accepted. Qualified text-raster differences reach 4/255; this is not a global tolerance or blanket pixel equality. |
-| Core18c performance | 440 sessions, 1,200 events, cold/warm N5. All 56 style-switch medians and eight bar-cycle medians improve. Six higher individual bar medians (0.33–7.13 ms, overlapping sample ranges) were accepted. Focus has 11–15 changed buffers over the full event, but 9–13 within 200 ms; the accepted target is the full event. No scanout claim. |
-| Separate compatibility patches | Minimal palette and marker patches passed private smokes with Qt 6.11.2. They were not part of the unchanged Core18c image/performance inputs; no Qt 6.12 runtime acceptance. |
+| Retained runtime paths | Historical Beta.13 → Beta.14.1 package arm (5), fresh checkout (6), Beta.15 (7), Beta.15.2 (7), and rolling frozen Beta.16.2 → candidate (7). No arm may be dropped. |
+| Stage-1 visual evidence | Round 379 records DPR 1/1.6 rest and shared-code captures, seven-theme picker search, previewless themes, sorting, and an unchanged Update Center. Round 380 separately rechecks Pacman against 16.2 and the six retained hover styles against 379. No physical-output claim. |
+| Stage-1 performance | Round 379: 670 sessions, 1,880 events, cold/warm N5; focus, style, bar and hover only, not media-scroll or Control Center events. Accepted by the maintainer, including the warm Kanji CPU group as variation. Focus R/B/changed-buffer counts are not identical in every group; 13/140 hover input-to-last-pixel measurements exceed 136.667 ms by at most 2.29 ms. No blanket speedup or scanout claim. Pacman has since been restored to 16.2; no new performance series is claimed. |
+| Compatibility preparation | The unchanged validator accepts forward manifest `50d687a1`; the old manifest remains. Stage-1 complete profiles stopped at the expected old-version payload pin, so all final complete gates must run again after release identities are aligned. |
| Live installation and hardware | Keep-settings installation and reviewer live acceptance must be recorded separately. Fixtures do not establish physical multi-output, hardware, credential or real desktop input acceptance. |
| Release/package verification | Reproducible archive, checksum agreement, clean-commit gates and rehearsal, independent review, full collector and remote verification remain separate publication requirements. |
-The historical package arm is not a Beta.16.2 installed-package upgrade proof.
+The historical package arm is not a Beta.16.3 installed-package upgrade proof.
Private Wayland/Mesa captures are not live GPU, layer-shell, hotplug, or physical
multi-output acceptance. Earlier release passes do not transfer to this candidate.
The release notes document the accepted Rings early step (raw DPR-1 reload N10:
@@ -122,7 +124,7 @@ was performed. Each operation needs its own maintainer Go.
physical acceptance are not claimed.
- **Downgrade:** Beta.15.4 and older cannot read V1 `order.parked`; they reset
V1 order, roles, and splits while retaining other settings and V2.
- `--keep-settings` does not prevent this. The [release notes](../.github/release-notes/v0.1.1-beta.16.2.md)
+ `--keep-settings` does not prevent this. The [release notes](../.github/release-notes/v0.1.1-beta.16.3.md)
and [backup guide](install.md#backup-before-downgrade) identify the complete
settings and recovery evidence to preserve. Restore the settings with a
matching payload.
@@ -149,4 +151,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.2.
+confers acceptance on Beta.16.3.
diff --git a/hancore.shibumi.ai/Service.qml b/hancore.shibumi.ai/Service.qml
index 5eefc70d..e27c5797 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.2"
+ implementationVersion: "0.1.1-beta.16.3"
owner: root
host: root.shell
manifest: root.manifest
diff --git a/hancore.shibumi.ai/manifest.json b/hancore.shibumi.ai/manifest.json
index 20baf836..f33a4f7c 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.2",
+ "version": "0.1.1-beta.16.3",
"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 96ffd64c..c73192b8 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.2"
+ implementationVersion: "0.1.1-beta.16.3"
owner: root
host: root.shell
manifest: root.manifest
diff --git a/hancore.shibumi.audio/manifest.json b/hancore.shibumi.audio/manifest.json
index 0ed85aae..30211a25 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.2",
+ "version": "0.1.1-beta.16.3",
"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 eb26a1fc..3addd71e 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.2"
+ implementationVersion: "0.1.1-beta.16.3"
owner: root
host: suiteHostShell.host
manifest: root.manifest
diff --git a/hancore.shibumi.bar/manifest.json b/hancore.shibumi.bar/manifest.json
index 5594ae08..f23f6979 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.2",
+ "version": "0.1.1-beta.16.3",
"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 8be442c8..c0fde0c6 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.2",
+ "version": "0.1.1-beta.16.3",
"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 ed0f2ebf..78bb84cb 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.2"
+ implementationVersion: "0.1.1-beta.16.3"
owner: root
host: root.shell
manifest: root.manifest
diff --git a/hancore.shibumi.bluetooth/manifest.json b/hancore.shibumi.bluetooth/manifest.json
index 53206948..a54cca43 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.2",
+ "version": "0.1.1-beta.16.3",
"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 3f384a72..1ccf8a57 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.2"
+ implementationVersion: "0.1.1-beta.16.3"
owner: root
host: root.shell
manifest: root.manifest
diff --git a/hancore.shibumi.brightness/manifest.json b/hancore.shibumi.brightness/manifest.json
index 2318fb10..cb83e7d4 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.2",
+ "version": "0.1.1-beta.16.3",
"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 599434b6..d639af80 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.2"
+ implementationVersion: "0.1.1-beta.16.3"
owner: root
host: root.shell
manifest: root.manifest
diff --git a/hancore.shibumi.center/manifest.json b/hancore.shibumi.center/manifest.json
index f6d060f9..6a80dc77 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.2",
+ "version": "0.1.1-beta.16.3",
"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 4fa2dbc9..0509d145 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.2"
+ implementationVersion: "0.1.1-beta.16.3"
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 41b8f6b4..dcc25960 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.2",
+ "version": "0.1.1-beta.16.3",
"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 9fa31ba7..7641c8f9 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.2"
+ implementationVersion: "0.1.1-beta.16.3"
owner: root
host: root.shell
manifest: root.manifest
diff --git a/hancore.shibumi.cpu/manifest.json b/hancore.shibumi.cpu/manifest.json
index a5161b27..4bbde093 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.2",
+ "version": "0.1.1-beta.16.3",
"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 3fd6043e..3c6da808 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.2",
+ "version": "0.1.1-beta.16.3",
"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 7f875972..0a8fd731 100644
--- a/hancore.shibumi.media/Service.qml
+++ b/hancore.shibumi.media/Service.qml
@@ -18,7 +18,7 @@ Item {
SuiteRuntime.Provider {
id: runtimeProvider
pluginId: "hancore.shibumi.media"
- implementationVersion: "0.1.1-beta.16.2"
+ implementationVersion: "0.1.1-beta.16.3"
owner: root
host: root.shell
manifest: root.manifest
diff --git a/hancore.shibumi.media/manifest.json b/hancore.shibumi.media/manifest.json
index ab081012..26051c4a 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.2",
+ "version": "0.1.1-beta.16.3",
"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 dbf3c353..b71b910d 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.2",
+ "version": "0.1.1-beta.16.3",
"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 02ec1988..0f5e9823 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.2"
+ implementationVersion: "0.1.1-beta.16.3"
owner: root
host: root.shell
manifest: root.manifest
diff --git a/hancore.shibumi.network/manifest.json b/hancore.shibumi.network/manifest.json
index 7681f19d..569a93d3 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.2",
+ "version": "0.1.1-beta.16.3",
"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 9302b0e2..e0118fb9 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.2",
+ "version": "0.1.1-beta.16.3",
"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 f1982ecd..0ae6d94c 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.2"
+ implementationVersion: "0.1.1-beta.16.3"
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 0f7314df..b4ea3847 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.2",
+ "version": "0.1.1-beta.16.3",
"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 48f99d87..a04916ee 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.2"
+ implementationVersion: "0.1.1-beta.16.3"
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 82bd6806..f841529f 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.2",
+ "version": "0.1.1-beta.16.3",
"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 26f4554b..2ea5871c 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.2"
+ implementationVersion: "0.1.1-beta.16.3"
owner: root
host: root.shell
manifest: root.manifest
diff --git a/hancore.shibumi.reactor/manifest.json b/hancore.shibumi.reactor/manifest.json
index 2ca159cd..6f2642d0 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.2",
+ "version": "0.1.1-beta.16.3",
"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 936fdf14..fae5bfff 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.2"
+ implementationVersion: "0.1.1-beta.16.3"
owner: root
host: root.shell
manifest: root.manifest
diff --git a/hancore.shibumi.state/manifest.json b/hancore.shibumi.state/manifest.json
index ceb07a58..39ea9e37 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.2",
+ "version": "0.1.1-beta.16.3",
"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 452b37f7..fb45752c 100644
--- a/hancore.shibumi.state/runtime/Runtime.qml
+++ b/hancore.shibumi.state/runtime/Runtime.qml
@@ -10,7 +10,7 @@ QtObject {
id: runtime
readonly property int contractVersion: 1
- readonly property string suiteVersion: "0.1.1-beta.16.2"
+ readonly property string suiteVersion: "0.1.1-beta.16.3"
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 5d9e712f..0775cb92 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.2"
+ implementationVersion: "0.1.1-beta.16.3"
owner: root
host: root.shell
manifest: root.manifest
diff --git a/hancore.shibumi.status/manifest.json b/hancore.shibumi.status/manifest.json
index e43f4fae..70b7c142 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.2",
+ "version": "0.1.1-beta.16.3",
"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 23ead1ab..90b769b4 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.2"
+ implementationVersion: "0.1.1-beta.16.3"
owner: root
host: root.shell
manifest: root.manifest
diff --git a/hancore.shibumi.storage/manifest.json b/hancore.shibumi.storage/manifest.json
index 71313747..f825a1c4 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.2",
+ "version": "0.1.1-beta.16.3",
"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 80b0bede..e0172769 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.2"
+ implementationVersion: "0.1.1-beta.16.3"
owner: root
host: root.shell
manifest: root.manifest
diff --git a/hancore.shibumi.telemetry/manifest.json b/hancore.shibumi.telemetry/manifest.json
index fae30ed7..2f76c604 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.2",
+ "version": "0.1.1-beta.16.3",
"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 dfdad1c1..2e35b422 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.2",
+ "version": "0.1.1-beta.16.3",
"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 0eaac8f0..51be3674 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.2"
+ implementationVersion: "0.1.1-beta.16.3"
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 7a6a85cf..01aea569 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.2",
+ "version": "0.1.1-beta.16.3",
"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 0bca2132..640bbb15 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.2"
+ implementationVersion: "0.1.1-beta.16.3"
owner: root
host: root.shell
manifest: root.manifest
diff --git a/hancore.shibumi.workspaces/manifest.json b/hancore.shibumi.workspaces/manifest.json
index 8f3ae146..01f268a1 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.2",
+ "version": "0.1.1-beta.16.3",
"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 6a89906c..988d44ad 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.2
+ pkgver = 0.1.1beta.16.3
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.2.tar.gz::https://github.com/HANCORE-linux/Shibumi-Shell/releases/download/v0.1.1-beta.16.2/shibumi-shell-0.1.1-beta.16.2.tar.gz
- sha256sums = b98012b096aaee52f036a14d547fb54a5ffd4b7720acb8b5a3b1fd45c3409d62
+ source = shibumi-shell-0.1.1-beta.16.3.tar.gz::https://github.com/HANCORE-linux/Shibumi-Shell/releases/download/v0.1.1-beta.16.3/shibumi-shell-0.1.1-beta.16.3.tar.gz
+ sha256sums = 5c94a288f417ec2aa5dacb97117520e31e8fdb70fe665372cec781ce7726a171
pkgname = shibumi-shell
diff --git a/packaging/aur/PKGBUILD b/packaging/aur/PKGBUILD
index 6daade5e..b952194f 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.2
-_source_sha256=b98012b096aaee52f036a14d547fb54a5ffd4b7720acb8b5a3b1fd45c3409d62
+_upstream_version=0.1.1-beta.16.3
+_source_sha256=5c94a288f417ec2aa5dacb97117520e31e8fdb70fe665372cec781ce7726a171
pkgver=${_upstream_version//-/}
pkgrel=1
pkgdesc="Transactional Shibumi desktop shell plugins for Omarchy Quattro"
diff --git a/packaging/package-metadata.json b/packaging/package-metadata.json
index 163d5f2f..57130d0e 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.2"
+ "version": "0.1.1-beta.16.3"
}
diff --git a/scripts/check-aur-package b/scripts/check-aur-package
index 9c4dbdd9..0d406e64 100755
--- a/scripts/check-aur-package
+++ b/scripts/check-aur-package
@@ -45,7 +45,7 @@ jq -e '.schemaVersion == 1
"public-beta.11", "step-5-tip", "public-beta.12", "public-beta.13",
"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.1", "public-beta.16.2", "public-beta.16.3"
]' \
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 622530a5..a71fcb99 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.2", kinds: ["service"]})
+ manifest: ({id: "hancore.shibumi.audio", version: "0.1.1-beta.16.3", kinds: ["service"]})
nativeBackendEnabled: true
nativeBackendOverride: fakeBackend
}
diff --git a/tests/audio-runtime-smoke.qml b/tests/audio-runtime-smoke.qml
index 404c8b02..9d93a24a 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.2", kinds: ["service", "bar-widget"]})
+ version: "0.1.1-beta.16.3", 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.2"
+ implementationVersion: "0.1.1-beta.16.3"
owner: tokenState
- manifest: ({id: "hancore.shibumi.state", version: "0.1.1-beta.16.2", kinds: ["service"]})
+ manifest: ({id: "hancore.shibumi.state", version: "0.1.1-beta.16.3", 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 e455e576..2cc02c69 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.2"
+ implementationVersion: "0.1.1-beta.16.3"
owner: stateService
host: stateHost
- manifest: ({ id: "hancore.shibumi.state", version: "0.1.1-beta.16.2",
+ manifest: ({ id: "hancore.shibumi.state", version: "0.1.1-beta.16.3",
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.2", kinds: ["bar"] })
+ version: "0.1.1-beta.16.3", 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.2", kinds: ["service"] })
+ version: "0.1.1-beta.16.3", 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.2"
+ implementationVersion: "0.1.1-beta.16.3"
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.2",
+ manifest: ({ id: "hancore.shibumi.bar", version: "0.1.1-beta.16.3",
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.2", kinds: ["service"] })
+ version: "0.1.1-beta.16.3", 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 59284ad6..0caca952 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.2",
+ version: "0.1.1-beta.16.3",
kinds: ["bar"]
})
pluginRegistry: fakePluginRegistry
diff --git a/tests/catalog-service-smoke.qml b/tests/catalog-service-smoke.qml
index b140fba5..b9c9372a 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.2" : "invalid",
+ return {id: "hancore.shibumi.control-center", version: valid ? "0.1.1-beta.16.3" : "invalid",
kinds: ["service", "bar-widget"]}
}
function changedCatalogOutput() {
diff --git a/tests/core-services-smoke.qml b/tests/core-services-smoke.qml
index 226591e1..d09cfe7f 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.2", kinds: ["service"]})
+ manifest: ({id: "hancore.shibumi.telemetry", version: "0.1.1-beta.16.3", kinds: ["service"]})
}
Cpu.Service {
id: cpu
shell: fakeShell
gpuProbeEnabled: false
- manifest: ({id: "hancore.shibumi.cpu", version: "0.1.1-beta.16.2", kinds: ["service"]})
+ manifest: ({id: "hancore.shibumi.cpu", version: "0.1.1-beta.16.3", 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.2", kinds: ["service"]})
+ manifest: ({id: "hancore.shibumi.power-state", version: "0.1.1-beta.16.3", 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 538c69c9..38515507 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.2"
+ and control["version"] == "0.1.1-beta.16.3"
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 9f20de0f..197544a7 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.1",
- "tag": "v0.1.1-beta.16.1",
- "revision": "3b35049af69aba57784376e916f50146d61eb411",
- "payloadDigest": "46f72fd02b00dbe34326dbbdf6e95556e7e35641a4d597c5281bc2beed94a974",
- "releaseId": 402839526,
- "releaseUrl": "https://github.com/HANCORE-linux/Shibumi-Shell/releases/tag/v0.1.1-beta.16.1",
- "publishedAt": "2026-10-04T04:26:09Z",
+ "version": "0.1.1-beta.16.2",
+ "tag": "v0.1.1-beta.16.2",
+ "revision": "bd1224ba92fbf279666abe362ff5cf7a165da096",
+ "payloadDigest": "79c61d5e048c669c9eb27ebaad21987327892089daea501d0cf4185150a26f9e",
+ "releaseId": 407198695,
+ "releaseUrl": "https://github.com/HANCORE-linux/Shibumi-Shell/releases/tag/v0.1.1-beta.16.2",
+ "publishedAt": "2026-10-08T19:39:25Z",
"prerelease": true
}
diff --git a/tests/gpu-selection-state-smoke.qml b/tests/gpu-selection-state-smoke.qml
index 8932f878..adf20967 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.2", kinds: ["service"]})
+ manifest: ({id: "hancore.shibumi.state", version: "0.1.1-beta.16.3", kinds: ["service"]})
}
Cpu.Service {
id: cpuService
shell: fakeShell
- manifest: ({id: "hancore.shibumi.cpu", version: "0.1.1-beta.16.2", kinds: ["service"]})
+ manifest: ({id: "hancore.shibumi.cpu", version: "0.1.1-beta.16.3", kinds: ["service"]})
gpuProbeEnabled: false
}
diff --git a/tests/host-registry-prime-smoke.qml b/tests/host-registry-prime-smoke.qml
index 2045514a..bed60b3e 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.2"
+ implementationVersion: "0.1.1-beta.16.3"
owner: stateOwner
host: stateHost
manifest: ({ id: "hancore.shibumi.state",
- version: "0.1.1-beta.16.2", kinds: ["service"] })
+ version: "0.1.1-beta.16.3", kinds: ["service"] })
}
QtObject {
@@ -77,11 +77,11 @@ ShellRoot {
}
Shared.Provider {
pluginId: "hancore.shibumi.bar"
- implementationVersion: "0.1.1-beta.16.2"
+ implementationVersion: "0.1.1-beta.16.3"
owner: owner
host: owner.providerHost
manifest: ({ id: "hancore.shibumi.bar",
- version: "0.1.1-beta.16.2", kinds: ["bar"] })
+ version: "0.1.1-beta.16.3", kinds: ["bar"] })
}
}
}
diff --git a/tests/media-spectrum-service-smoke.qml b/tests/media-spectrum-service-smoke.qml
index 5066b2fd..e3503fd5 100644
--- a/tests/media-spectrum-service-smoke.qml
+++ b/tests/media-spectrum-service-smoke.qml
@@ -42,7 +42,7 @@ ShellRoot {
Media.Service {
id: spectrum
shell: fakeShell
- manifest: ({id: "hancore.shibumi.media", version: "0.1.1-beta.16.2", kinds: ["service", "bar-widget"]})
+ manifest: ({id: "hancore.shibumi.media", version: "0.1.1-beta.16.3", kinds: ["service", "bar-widget"]})
}
Timer {
diff --git a/tests/plugin-update-service-smoke.qml b/tests/plugin-update-service-smoke.qml
index f1d15af5..937e05eb 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.2", kinds: ["service", "bar-widget"]}
+ version: "0.1.1-beta.16.3", 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 10b33ab1..a7165828 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.2", kinds: ["service"]}) : null
+ manifest: root.allowed ? ({id: "hancore.shibumi.power-state", version: "0.1.1-beta.16.3", 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 45936345..a014a106 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.2", kinds: ["service"], entryPoints: { service: "Service.qml" } })
+ readonly property var validManifest: ({ id: "hancore.shibumi.power-state", version: "0.1.1-beta.16.3", 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.2"
+ implementationVersion: "0.1.1-beta.16.3"
owner: state
host: root.stateEnabled ? stateHost : null
- manifest: ({ id: "hancore.shibumi.state", version: "0.1.1-beta.16.2", kinds: ["service"] })
+ manifest: ({ id: "hancore.shibumi.state", version: "0.1.1-beta.16.3", kinds: ["service"] })
}
QtObject {
id: battery
diff --git a/tests/power-service-runtime-smoke.qml b/tests/power-service-runtime-smoke.qml
index a6cfd14d..20cd22a9 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.2",
+ manifest: ({ id: "hancore.shibumi.power-state", version: "0.1.1-beta.16.3",
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 c4de7c4a..f153cbc0 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.2", kinds: ["service"]})
+ manifest: ({id: "hancore.shibumi.audio", version: "0.1.1-beta.16.3", kinds: ["service"]})
nativeBackendEnabled: false
}
@@ -115,7 +115,7 @@ ShellRoot {
Reactor.Service {
id: reactorService
- manifest: ({id: "hancore.shibumi.reactor", version: "0.1.1-beta.16.2", kinds: ["service"]})
+ manifest: ({id: "hancore.shibumi.reactor", version: "0.1.1-beta.16.3", kinds: ["service"]})
shell: fakeShell
runtimeProbesEnabled: false
}
diff --git a/tests/reactor-runtime-smoke.qml b/tests/reactor-runtime-smoke.qml
index 26058428..e600fc7e 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.2", kinds: ["service"]})
+ readonly property var manifest: ({id: "hancore.shibumi.reactor", version: "0.1.1-beta.16.3", 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.2"
+ pluginId: "hancore.shibumi.state"; implementationVersion: "0.1.1-beta.16.3"
owner: state; host: root.stateEnabled ? stateHost : null
- manifest: ({id: "hancore.shibumi.state", version: "0.1.1-beta.16.2", kinds: ["service"]})
+ manifest: ({id: "hancore.shibumi.state", version: "0.1.1-beta.16.3", kinds: ["service"]})
}
SuiteRuntime.Provider {
- pluginId: "hancore.shibumi.audio"; implementationVersion: "0.1.1-beta.16.2"
+ pluginId: "hancore.shibumi.audio"; implementationVersion: "0.1.1-beta.16.3"
owner: audio; host: root.audioEnabled ? audioHost : null
- manifest: ({id: "hancore.shibumi.audio", version: "0.1.1-beta.16.2", kinds: ["service"]})
+ manifest: ({id: "hancore.shibumi.audio", version: "0.1.1-beta.16.3", 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 885bd86d..8761e74f 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.2",
+ manifest: ({ id: "hancore.shibumi.state", version: "0.1.1-beta.16.3",
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 07b3fec2..8f3578c2 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.2", kinds: ["service"]})
+ manifest: ({id: "hancore.shibumi.state", version: "0.1.1-beta.16.3", 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.2"
+ implementationVersion: "0.1.1-beta.16.3"
owner: barOwner
host: barOwner.injectedHost
- manifest: ({id: "hancore.shibumi.bar", version: "0.1.1-beta.16.2", kinds: ["bar"]})
+ manifest: ({id: "hancore.shibumi.bar", version: "0.1.1-beta.16.3", 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.2"
+ implementationVersion: "0.1.1-beta.16.3"
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.2", kinds: ["service"]}
+ state.manifest = {id: "hancore.shibumi.state", version: "0.1.1-beta.16.3", 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.2", kinds: ["service"]}
+ first.injectedManifest = {id: "hancore.shibumi.audio", version: "0.1.1-beta.16.3", 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.2", kinds: ["service"]}})
+ injectedManifest: {id: "hancore.shibumi.audio", version: "0.1.1-beta.16.3", 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.2", kinds: ["service"]}
+ const malformed = {version: "0.1.1-beta.16.3", 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 8bb9ca67..a8420994 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.2", kinds: ["service"]})
+ manifest: ({id: "hancore.shibumi.state", version: "0.1.1-beta.16.3", kinds: ["service"]})
}
Component.onCompleted: steps = [
function() {
diff --git a/tests/status-plugin-smoke.qml b/tests/status-plugin-smoke.qml
index 1aab6bf1..26c06a0b 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.2"
+ implementationVersion: "0.1.1-beta.16.3"
owner: leasedBarOwner
host: leasedBarOwner.providerHost
manifest: ({ id: "hancore.shibumi.bar",
- version: "0.1.1-beta.16.2", kinds: ["bar"] })
+ version: "0.1.1-beta.16.3", kinds: ["bar"] })
}
}
@@ -226,7 +226,7 @@ ShellRoot {
Status.Service {
shell: rawScopedStatusShell
manifest: ({ id: "hancore.shibumi.status",
- version: "0.1.1-beta.16.2", kinds: ["service"] })
+ version: "0.1.1-beta.16.3", kinds: ["service"] })
actionRunner: actionRecorder
runtimeProbesEnabled: false
}
diff --git a/tests/telemetry-plugins-smoke.qml b/tests/telemetry-plugins-smoke.qml
index e5490342..832ce779 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.2", kinds: ["service"]})
+ manifest: ({id: "hancore.shibumi.telemetry", version: "0.1.1-beta.16.3", 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.2", kinds: ["service"]})
+ manifest: ({id: "hancore.shibumi.cpu", version: "0.1.1-beta.16.3", kinds: ["service"]})
gpuProbeEnabled: false
}
diff --git a/tests/telemetry-runtime-smoke.qml b/tests/telemetry-runtime-smoke.qml
index 7e1ce7f9..1d12eaf4 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.2", kinds: ["service"]} }
+ function manifest(id) { return {id: id, version: "0.1.1-beta.16.3", 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.2"
+ implementationVersion: "0.1.1-beta.16.3"
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 9ee51975..09f41ae1 100644
--- a/tests/test_package_release.py
+++ b/tests/test_package_release.py
@@ -233,10 +233,20 @@ def test_lifecycle_contract_pins_exact_release_identities(self) -> None:
},
"public-beta.16.2": {
"suiteVersion": "0.1.1-beta.16.2",
- "sourceRevisions": ["package:0.1.1-beta.16.2"],
+ "sourceRevisions": [
+ "bd1224ba92fbf279666abe362ff5cf7a165da096",
+ "e07853b54f018ab694572c7502297e0f17752220",
+ "package:0.1.1-beta.16.2",
+ ],
"settingsStorageVersion": 1,
"payloadDigest": "79c61d5e048c669c9eb27ebaad21987327892089daea501d0cf4185150a26f9e",
},
+ "public-beta.16.3": {
+ "suiteVersion": "0.1.1-beta.16.3",
+ "sourceRevisions": ["package:0.1.1-beta.16.3"],
+ "settingsStorageVersion": 1,
+ "payloadDigest": "9d8cca435b465c52b0ff21d7a6780f90251a805dc1d1e72b78473ca2a8338a88",
+ },
}
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 659a66be..9a8037e8 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.2", kinds: ["service"]})
+ manifest: ({id: "hancore.shibumi.state", version: "0.1.1-beta.16.3", kinds: ["service"]})
}
function colorText(value) {
diff --git a/tests/third-party-integration-smoke.qml b/tests/third-party-integration-smoke.qml
index 510b37b1..8e3d081c 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.2", kinds: ["service"] })
+ manifest: ({ id: "hancore.shibumi.audio", version: "0.1.1-beta.16.3", kinds: ["service"] })
}
StateOwner.Service {
shell: fakeShell
omarchyPath: ""
manifest: ({
- id: "hancore.shibumi.state", version: "0.1.1-beta.16.2", kinds: ["service"]
+ id: "hancore.shibumi.state", version: "0.1.1-beta.16.3", kinds: ["service"]
})
}
diff --git a/tests/widget-pipeline-diagnostics-smoke.qml b/tests/widget-pipeline-diagnostics-smoke.qml
index 83b2f625..9a19fcbb 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.2"
+ implementationVersion: "0.1.1-beta.16.3"
owner: stateOwner
host: stateHost
manifest: ({ id: "hancore.shibumi.state",
- version: "0.1.1-beta.16.2", kinds: ["service"] })
+ version: "0.1.1-beta.16.3", kinds: ["service"] })
}
QtObject {
@@ -290,7 +290,7 @@ ShellRoot {
barWidgetRegistry: scopedWidgetRegistry
manifest: ({
id: "hancore.shibumi.bar",
- version: "0.1.1-beta.16.2",
+ version: "0.1.1-beta.16.3",
kinds: ["bar"]
})
barConfig: ({
diff --git a/tests/workspaces-plugin-smoke.qml b/tests/workspaces-plugin-smoke.qml
index 4e457d74..56e8b5e2 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.2", kinds: ["service"]})
+ manifest: ({id: "hancore.shibumi.workspaces", version: "0.1.1-beta.16.3", 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 0b2aadad..3fc992f2 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.2", kinds: ["service"]})
+ readonly property var validManifest: ({id: "hancore.shibumi.workspaces", version: "0.1.1-beta.16.3", 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.2"
+ implementationVersion: "0.1.1-beta.16.3"
owner: state
host: root.stateEnabled ? stateHost : null
- manifest: ({id: "hancore.shibumi.state", version: "0.1.1-beta.16.2", kinds: ["service"]})
+ manifest: ({id: "hancore.shibumi.state", version: "0.1.1-beta.16.3", kinds: ["service"]})
}
QtObject {
id: backend