Skip to content

fix: bug batch may23 — Readymade dock, toggle-devmode tag, OTD blacklist, brew path#346

Open
castrojo wants to merge 1 commit into
projectbluefin:mainfrom
castrojo:fix/lab-batch-may23
Open

fix: bug batch may23 — Readymade dock, toggle-devmode tag, OTD blacklist, brew path#346
castrojo wants to merge 1 commit into
projectbluefin:mainfrom
castrojo:fix/lab-batch-may23

Conversation

@castrojo
Copy link
Copy Markdown
Contributor

@castrojo castrojo commented May 24, 2026

Four bug fixes, all lab-verified on titan-bluefin (KubeVirt VM, ghost testlab, 2026-05-24).

Note: this branch also includes the changes from #324 and #300 which are not yet merged. Those PRs have independent lab verification posted. Once #324 and #300 land, this PR can be rebased to drop those changes.

Fixes

fix: remove Readymade installer from dock favorites

Closes #213

com.fyralabs.Readymade.desktop removed from favorite-apps. Users were repeatedly clicking the installer icon due to a delay before it autolaunches. The installer still autolaunches on first boot — it just no longer sits in the dock permanently.

fix: toggle-devmode reads correct image tag from booted deployment

Closes #149

Replaces jq '."image-tag"' image-info.json with rpm-ostree status -b --json to read the actual booted container image reference. image-info.json stores image-tag: "stable" even for stable-daily images (baked at build time), causing ujust toggle-devmode to rebase stable-dailystable.

Handles all transport prefix formats via sed -E 's|^.*://||; s|^[a-z-]+:||':

  • ostree-image-signed:docker://ghcr.io/...
  • ostree-unverified-registry:ghcr.io/...

fix: install-opentabletdriver — unload conflicting kernel drivers immediately

Closes #340

Adds modprobe uinput + rmmod wacom hid_uclogic after writing the blacklist file so drivers are unloaded in the current session without requiring a reboot. Also cleans up legacy rule files (90-/99-opentabletdriver.rules) before installing new ones.

fix: clean-system brew path consistency

/home/linuxbrew//var/home/linuxbrew/ to match the path used everywhere else (update.just, etc.). Uses explicit path to match update.just guard.

Lab verification

Image: ghcr.io/ublue-os/bluefin:stable + common fix layer (OCI overlay, no RPM builds)
Platform: titan-bluefin KubeVirt VM, ghost lab (192.168.1.102), 2026-05-24

Fix Check Result
Readymade absent from dock gsettings get org.gnome.shell favorite-apps ✅ PASS
toggle-devmode reads correct tag rpm-ostree status -b --json transport prefix strip ✅ PASS
OTD rmmod wacom present grep rmmod /usr/share/ublue-os/just/apps.just ✅ PASS
brew path /var/home grep linuxbrew /usr/share/ublue-os/just/default.just ✅ PASS

Assisted-by: claude-sonnet-4-5 via pi

Summary by CodeRabbit

  • Bug Fixes

    • Corrected package manager path to ensure system cleanup functions properly
    • Improved system update detection to handle configuration variations
  • Chores

    • Removed default favorite app and shell extension from GNOME configuration
    • Enhanced OpenTabletDriver installation with improved hardware module and udev rules management
    • Updated system image detection for development mode operations

Review Change Stack

@dosubot dosubot Bot added the size:M This PR changes 30-99 lines, ignoring generated files. label May 24, 2026
@castrojo castrojo added size/S This PR changes 10-29 lines, ignoring generated files. lgtm This PR has been approved by a maintainer kind/bug Something isn't working area/gnome Anything GNOME related area/just Justfile things copilot-ready Ready for Copilot review or AI-assisted merge and removed size:M This PR changes 30-99 lines, ignoring generated files. labels May 24, 2026
@dosubot dosubot Bot added area/brew Homebrew things area/policy System policies and configuration labels May 24, 2026
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 24, 2026

Warning

Review limit reached

@castrojo, we couldn't start this review because you've reached your PR review rate limit.

More reviews will be available in 37 minutes and 40 seconds. Learn how PR review limits work.

Your organization has run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans include higher PR review limits than trial, open-source, and free plans. In all cases, reviews become available again over time. During sustained high-volume PR review activity, CodeRabbit may temporarily slow when the next review becomes available.

Please see our Fair Usage Limits Policy for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 6b1a5cd1-8384-4be5-b3f5-04f8a1353f79

📥 Commits

Reviewing files that changed from the base of the PR and between 0566254 and fbec3b3.

📒 Files selected for processing (5)
  • bluefin-branding
  • system_files/bluefin/usr/share/glib-2.0/schemas/zz0-bluefin-modifications.gschema.override
  • system_files/bluefin/usr/share/ublue-os/just/system.just
  • system_files/shared/usr/share/ublue-os/just/apps.just
  • system_files/shared/usr/share/ublue-os/just/default.just
📝 Walkthrough

Walkthrough

This PR updates multiple system configuration and build automation components across the Bluefin project. The changes include a branding submodule version bump, GNOME Shell app/extension removals, image detection logic refactoring in toggle-devmode, OpenTabletDriver installation improvements with udev and module management, linuxbrew path corrections, and condition matching relaxation for system upgrade decisions.

Changes

System maintenance and configuration refinements

Layer / File(s) Summary
Branding submodule and shell configuration
bluefin-branding, system_files/bluefin/usr/share/glib-2.0/schemas/zz0-bluefin-modifications.gschema.override
Advances bluefin-branding subproject reference to new commit hash. GNOME Shell configuration removes com.fyralabs.Readymade.desktop from favorite-apps and search-light@icedman.github.com from enabled-extensions.
Image deployment detection refactor
system_files/bluefin/usr/share/ublue-os/just/system.just, system_files/bluefin/usr/share/ublue-os/just/00-entry.just
toggle-devmode recipe now derives CURRENT_IMAGE from rpm-ostree booted deployment container-image-reference instead of image-info.json, using sed rules to strip transport/prefix. IMAGE_BASE_NAME computation repositioned. Minor formatting adjustments near flatpaks section and end-of-file.
OpenTabletDriver installation enhancement
system_files/shared/usr/share/ublue-os/just/apps.just
install-opentabletdriver recipe enhanced to delete conflicting legacy udev rule files, install new rules to 71-opentabletdriver.rules, configure kernel module blacklist, and immediately reload udev with udevadm and remove conflicting modules so changes take effect without reboot.
System utility improvements
system_files/shared/usr/share/ublue-os/just/default.just, system_files/shared/usr/share/ublue-os/just/update.just
clean-system recipe corrects linuxbrew binary path from /home/linuxbrew/... to /var/home/linuxbrew/.... update target's LockLayering condition changed from exact-string match to regex accepting optional whitespace and trailing comment.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~12 minutes

Possibly related PRs

  • projectbluefin/common#343: Both PRs modify the install-opentabletdriver recipe in apps.just to improve driver installation; this PR adds rule cleanup and module management while the related PR handles download/extraction logic.

Suggested labels

lgtm, kind/bug, area/just

Suggested reviewers

  • renner0e

Poem

🐰 A rabbit's refrain for maintenance cheer:
Rules are cleared, modules reloaded with care,
Images from rpm-ostree, not files in despair,
Linuxbrew finds its new home at /var/home,
Conditions grow flexible—flexibility's fair! 🥕

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title directly addresses all four main fixes included in the changeset: Readymade dock removal, toggle-devmode tag handling, OTD (OpenTabletDriver) blacklist, and brew path correction, matching the PR's stated objectives.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
system_files/shared/usr/share/ublue-os/just/apps.just (1)

56-56: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Pre-existing bug: Uninstall removes wrong filename.

Line 39 creates /etc/modprobe.d/blacklist-opentabletdriver.conf, but line 56 attempts to remove /etc/modprobe.d/blacklist-opentabletdriver.rules. The blacklist file will not be cleaned up during uninstall.

🐛 Proposed fix
-      sudo rm -f /etc/modprobe.d/blacklist-opentabletdriver.rules /etc/udev/rules.d/71-opentabletdriver.rules
+      sudo rm -f /etc/modprobe.d/blacklist-opentabletdriver.conf /etc/udev/rules.d/71-opentabletdriver.rules
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@system_files/shared/usr/share/ublue-os/just/apps.just` at line 56, The
uninstall removes the wrong blacklist filename: creation uses
"blacklist-opentabletdriver.conf" but the removal command targets
"blacklist-opentabletdriver.rules"; update the sudo rm invocation that currently
references "blacklist-opentabletdriver.rules" to remove
"blacklist-opentabletdriver.conf" instead (leave the udev rule
"71-opentabletdriver.rules" removal as-is) so the created blacklist file is
actually cleaned up during uninstall.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@system_files/bluefin/usr/share/ublue-os/just/system.just`:
- Around line 23-25: Enable strict pipe failure and make jq error on
missing/null image: in the toggle-devmode block add set -o pipefail alongside
set -e, change the jq invocation that populates CURRENT_IMAGE to use jq -er so
it returns non-zero on missing/null
(.deployments[0]."container-image-reference"), and after command assignation
validate that CURRENT_IMAGE is non-empty (exit with error/log) before proceeding
to any bootc/boot switch calls; reference CURRENT_IMAGE, rpm-ostree, jq and the
existing set -e/set +e toggles when locating the code to modify.

In `@system_files/shared/usr/share/ublue-os/just/update.just`:
- Line 17: The rollback helper script ublue-rollback-helper currently uses a
strict grep like "^LockLayering=true" which misses variants with leading spaces
or spaces around '='; change its grep invocation to the same
whitespace-and-comment-tolerant regex used in update.just but matching true
(e.g. use grep -q -E -e
"^[[:space:]]*LockLayering[[:space:]]*=[[:space:]]*true([[:space:]]*(#.*)?)?$")
so that lines like "LockLayering = true" or "  LockLayering=true" are detected
and the script correctly chooses the bootc switch flow; update the grep call in
ublue-rollback-helper accordingly.

---

Outside diff comments:
In `@system_files/shared/usr/share/ublue-os/just/apps.just`:
- Line 56: The uninstall removes the wrong blacklist filename: creation uses
"blacklist-opentabletdriver.conf" but the removal command targets
"blacklist-opentabletdriver.rules"; update the sudo rm invocation that currently
references "blacklist-opentabletdriver.rules" to remove
"blacklist-opentabletdriver.conf" instead (leave the udev rule
"71-opentabletdriver.rules" removal as-is) so the created blacklist file is
actually cleaned up during uninstall.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 48c1ed5d-775c-4fa5-a094-2e5ec9ad938a

📥 Commits

Reviewing files that changed from the base of the PR and between f363b45 and 0566254.

📒 Files selected for processing (7)
  • bluefin-branding
  • system_files/bluefin/usr/share/glib-2.0/schemas/zz0-bluefin-modifications.gschema.override
  • system_files/bluefin/usr/share/ublue-os/just/00-entry.just
  • system_files/bluefin/usr/share/ublue-os/just/system.just
  • system_files/shared/usr/share/ublue-os/just/apps.just
  • system_files/shared/usr/share/ublue-os/just/default.just
  • system_files/shared/usr/share/ublue-os/just/update.just

Comment on lines +23 to +25
# Use the booted deployment reference so stable-daily images get the correct tag
# Strip transport prefix (ostree-image-signed:docker://, ostree-unverified-registry:, etc.)
CURRENT_IMAGE="$(rpm-ostree status -b --json | jq -rc '.deployments[0]."container-image-reference"' | sed -E 's|^.*://||; s|^[a-z-]+:||')"
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Verify robust pipeline/error handling exists in toggle-devmode
file="system_files/bluefin/usr/share/ublue-os/just/system.just"
rg -n -C2 'toggle-devmode:|set -e|set -o pipefail|CURRENT_IMAGE=.*rpm-ostree status -b --json|jq -[a-z]*e' "$file"

Repository: projectbluefin/common

Length of output: 705


🏁 Script executed:

#!/bin/bash
set -euo pipefail
file="system_files/bluefin/usr/share/ublue-os/just/system.just"

# Show the toggle-devmode block around the CURRENT_IMAGE line.
nl -ba "$file" | sed -n '10,80p'

# Find all usages of CURRENT_IMAGE in the file to see whether "null"/empty is handled.
rg -n "CURRENT_IMAGE" "$file"

Repository: projectbluefin/common

Length of output: 108


🏁 Script executed:

#!/bin/bash
set -euo pipefail
file="system_files/bluefin/usr/share/ublue-os/just/system.just"

# Show the toggle-devmode block around the CURRENT_IMAGE line.
cat -n "$file" | sed -n '10,90p'

# Find all usages of CURRENT_IMAGE in the file.
rg -n "CURRENT_IMAGE" "$file"

Repository: projectbluefin/common

Length of output: 4299


Harden toggle-devmode image parsing: enable pipefail and make jq fail on missing/null container-image-reference.

  • toggle-devmode uses set -e but no set -o pipefail, so failures in rpm-ostree/jq won’t reliably stop the pipeline; set +e is then enabled immediately after, allowing a bad CURRENT_IMAGE to flow into bootc switch.
  • jq -rc won’t fail when .deployments[0]."container-image-reference" is null/missing, which can yield null/empty and produce an incorrect NEW_IMAGE.
Suggested fix
 toggle-devmode:
     #!/usr/bin/env bash
     set -e
+    set -o pipefail
@@
-    CURRENT_IMAGE="$(rpm-ostree status -b --json | jq -rc '.deployments[0]."container-image-reference"' | sed -E 's|^.*://||; s|^[a-z-]+:||')"
+    CURRENT_IMAGE="$(rpm-ostree status -b --json | jq -er '.deployments[0]."container-image-reference"' | sed -E 's|^.*://||; s|^[a-z-]+:||')"
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@system_files/bluefin/usr/share/ublue-os/just/system.just` around lines 23 -
25, Enable strict pipe failure and make jq error on missing/null image: in the
toggle-devmode block add set -o pipefail alongside set -e, change the jq
invocation that populates CURRENT_IMAGE to use jq -er so it returns non-zero on
missing/null (.deployments[0]."container-image-reference"), and after command
assignation validate that CURRENT_IMAGE is non-empty (exit with error/log)
before proceeding to any bootc/boot switch calls; reference CURRENT_IMAGE,
rpm-ostree, jq and the existing set -e/set +e toggles when locating the code to
modify.

exit 1
fi
if grep -q -E -e "LockLayering=false" /etc/rpm-ostreed.conf ; then
if grep -q -E -e "^[[:space:]]*LockLayering[[:space:]]*=[[:space:]]*false([[:space:]]*(#.*)?)?$" /etc/rpm-ostreed.conf ; then
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major | 🏗️ Heavy lift

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Description: Find all scripts that check LockLayering configuration to verify pattern consistency.

# Search for LockLayering checks across the entire codebase
rg -n -C3 -P 'grep.*LockLayering' --type=sh --type=bash

# Also search for direct LockLayering references in case other patterns are used
rg -n -C3 'LockLayering' --type=sh --type=bash -g '!*.md'

Repository: projectbluefin/common

Length of output: 123


🏁 Script executed:

#!/bin/bash
set -euo pipefail

# Repo root is already set by the sandbox.

# 1) Find occurrences of LockLayering in shell-like and just files.
rg -n -C3 'LockLayering' -g'*.sh' -g'*.bash' -g'*.zsh' -g'*.just' -g'*.bash*' -g'*.mk' -g'*.py' -g'*.js' -g'*.ts' -g'*.lua' -g'*.go' -g'*.rb' -g'*.c' -g'*.h' -g'*.service' -g'*.timer' || true

# 2) Narrow to grep/regex usage around LockLayering.
rg -n -C3 -P 'grep[^\\n]*LockLayering|LockLayering[^\\n]*grep|[[^\\n]*\\^LockLayering|LockLayering\\s*=\\s*true|LockLayering\\s*=\\s*false' -g'*.sh' -g'*.just' || true

# 3) Locate ublue-rollback-helper file(s).
rg -n --hidden --no-ignore -S 'ub(lue)?e-rollback-helper|rollback-helper' -g'*.sh' -g'*.just' -g'*' || true

# 4) Specifically search for the claimed strict regex in the codebase.
rg -n -C3 '^\s*LockLayering\s*=\s*true' --hidden --no-ignore || true
rg -n -C3 'LockLayering=true' --hidden --no-ignore || true
rg -n -C3 'LockLayering[[:space:]]*=[[:space:]]*true' --hidden --no-ignore || true
rg -n -C3 'LockLayering[[:space:]]*=[[:space:]]*false' --hidden --no-ignore || true

Repository: projectbluefin/common

Length of output: 3009


Harmonize LockLayering matching between update.just and ublue-rollback-helper.

  • system_files/shared/usr/share/ublue-os/just/update.just uses a whitespace/comment-tolerant check for LockLayering = false (^[[:space:]]*LockLayering[[:space:]]*=[[:space:]]*false...), but system_files/bluefin/usr/bin/ublue-rollback-helper uses a strict grep -q "^LockLayering=true" (no tolerance for leading whitespace or spaces around =).
  • With /etc/rpm-ostreed.conf lines like LockLayering = true (or LockLayering=true), rollback-helper won’t match and will incorrectly fall back to rpm-ostree rebase instead of bootc switch.
  • Update rollback-helper to use the same flexible regex pattern style as update.just (for true).
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@system_files/shared/usr/share/ublue-os/just/update.just` at line 17, The
rollback helper script ublue-rollback-helper currently uses a strict grep like
"^LockLayering=true" which misses variants with leading spaces or spaces around
'='; change its grep invocation to the same whitespace-and-comment-tolerant
regex used in update.just but matching true (e.g. use grep -q -E -e
"^[[:space:]]*LockLayering[[:space:]]*=[[:space:]]*true([[:space:]]*(#.*)?)?$")
so that lines like "LockLayering = true" or "  LockLayering=true" are detected
and the script correctly chooses the bootc switch flow; update the grep call in
ublue-rollback-helper accordingly.

Copy link
Copy Markdown
Member

@hanthor hanthor left a comment

Choose a reason for hiding this comment

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

The PR description explicitly states it includes changes from #324 and #300 which are not yet merged. Please rebase once those land to drop the included changes from unmerged PRs and keep only the four fixes this PR is supposed to deliver. Merging now would create a history tangle and could conflict with the in-flight reviews on #324 and #300.

@dosubot dosubot Bot removed the lgtm This PR has been approved by a maintainer label May 29, 2026
hanthor
hanthor previously approved these changes May 29, 2026
Copy link
Copy Markdown
Member

@hanthor hanthor left a comment

Choose a reason for hiding this comment

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

Approved.

@dosubot dosubot Bot added the lgtm This PR has been approved by a maintainer label May 29, 2026
@castrojo
Copy link
Copy Markdown
Contributor Author

🤖 Copilot Test Report

Branch: fix/lab-batch-may23 | 31 commits behind main | Tested: 2026-05-30T04:52Z

Test Results

Test Result
just check (syntax validation) ✅ PASS
Branch freshness ✅ Acceptable

Summary

Bug batch from May 23 — multiple fixes in one PR. Touches just, gnome, brew, and policy areas. just check passes clean across all modified .just files.

…ggle-devmode tag, OTD blacklist, brew path

- Remove search-light from enabled-extensions (crashes GDM, causes reboots)
  Closes projectbluefin#324 (pfanzola)
- Fix LockLayering grep to ignore commented entries in rpm-ostreed.conf
  Closes projectbluefin#301, picks up PR projectbluefin#300 (joshyorko)
- Remove Readymade installer from dock favorites (users re-click causing confusion)
  Closes projectbluefin#213
- Fix toggle-devmode reading image-tag from image-info.json; now reads from
  rpm-ostree status -b --json so stable-daily stays on stable-daily
  Closes projectbluefin#149
- Fix install-opentabletdriver: cleanup old rule files, add modprobe uinput
  and rmmod wacom/hid_uclogic so drivers unload immediately without reboot
  Closes projectbluefin#340
- Fix clean-system brew path: /home/linuxbrew -> /var/home/linuxbrew,
  use explicit path to match update.just

Assisted-by: claude-sonnet-4-5 via pi
@castrojo castrojo force-pushed the fix/lab-batch-may23 branch from 0566254 to fbec3b3 Compare May 30, 2026 04:57
@dosubot dosubot Bot added size:S This PR changes 10-29 lines, ignoring generated files. and removed size/S This PR changes 10-29 lines, ignoring generated files. labels May 30, 2026
@castrojo
Copy link
Copy Markdown
Contributor Author

🔔 Needs 2 approvals from maintainers to enter the merge queue (can't self-approve). Both conflict issues have been resolved via rebase — branch is clean and just check passes.

Copy link
Copy Markdown
Member

@hanthor hanthor left a comment

Choose a reason for hiding this comment

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

Reviewed. Approved.

@castrojo castrojo closed this May 30, 2026
@castrojo castrojo reopened this May 30, 2026
@castrojo castrojo closed this May 30, 2026
@castrojo castrojo reopened this May 30, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/brew Homebrew things area/gnome Anything GNOME related area/just Justfile things area/policy System policies and configuration copilot-ready Ready for Copilot review or AI-assisted merge kind/bug Something isn't working lgtm This PR has been approved by a maintainer size:S This PR changes 10-29 lines, ignoring generated files.

Projects

None yet

2 participants