Skip to content

Hide internal qubes from selection#291

Merged
marmarek merged 1 commit into
QubesOS:mainfrom
ben-grande:preload-hide
Feb 26, 2026
Merged

Hide internal qubes from selection#291
marmarek merged 1 commit into
QubesOS:mainfrom
ben-grande:preload-hide

Conversation

@ben-grande

@ben-grande ben-grande commented Jan 13, 2026

Copy link
Copy Markdown

For: QubesOS/qubes-issues#1512


The idea is to hide internal management qubes, disposable templates, and other types of qubes via filter when it shouldn't be displayed on the row box.


Requires:

QubesOS/qubes-core-admin-client#422


TODO:

  • tests

@codecov

codecov Bot commented Jan 13, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 92.97%. Comparing base (a89069d) to head (4c5b368).
⚠️ Report is 3 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##             main     #291      +/-   ##
==========================================
- Coverage   92.98%   92.97%   -0.02%     
==========================================
  Files          64       64              
  Lines       13291    13312      +21     
==========================================
+ Hits        12359    12377      +18     
- Misses        932      935       +3     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@marmarek

marmarek commented Feb 7, 2026

Copy link
Copy Markdown
Member

openQArun TEST=system_tests_gui_tools MACHINE=64bit

1 similar comment
@marmarek

marmarek commented Feb 8, 2026

Copy link
Copy Markdown
Member

openQArun TEST=system_tests_gui_tools MACHINE=64bit

@marmarek

marmarek commented Feb 8, 2026

Copy link
Copy Markdown
Member

There is a conflict now.

@ben-grande

Copy link
Copy Markdown
Author

There is a conflict now.

By the amount of times I seen you type this, maybe it is a time to have a bot do that. For easy identification, it could tag/label, but for notifications, PR authors need to receive a comment to be notified.

@marmarta marmarta left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Given that you add this filtering to every/almost every dropdown, I think it might be more sensible to add the check to the VMListModeler and if needed, add a parameter to allow internal for some select cases.

Also, what will happen if any of those properties/features/etc/ is set to an existing internal qube? I think in such a case the qube should be shown, but not selectable? (also add tests for such a case, right now I think Weird Shit Will Happen)

return vm.klass != "TemplateVM"
return (
vm.klass != "TemplateVM"
and not getattr(vm, "template_for_dispvms", False)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

why not? I don't see a reason why this should be prohibited

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

(and the same comment in other places you add this particular condition; btw, for such choices, this really should be justified in the commit message, because you are adding a completely different condition while saying in the commit message you are doing something else)

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

Disposable templates shouldn't be used directly, they are not supposed to be service qubes.

Will fix the commit message.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Ok, but you added this rule to only some select kind of options without any pattern I can discern?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Anyway, I remain unconvinced this is a sensible change, and I don't like smuggling it with the 'internal' change.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Well, I'm not approving it unless I am convinced this is a logical change and the dropdowns you selected make sense. Please don't reply to requests for justification with "I'm just doing to sensible thing" - explain why this is sensible. Why those dropdowns and not others? Why not default netvm for example? Hiding internal qubes from GUI makes sense because they are not supposed to be touched by the GUI at all. Hiding dispvm templates requires actual justification that is not "one developer has a lot of qubes".

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

Templates nor disposable templates shouldn't be service qubes. They are not intended to be used directly or by RPC services, they are just intended to create disposables out of it.

Setting a clockvm to a disposable template means that the disposable template always has to be running. This means that we can't refresh the private volume of the disposables if they need updating.

Same thing for devices, you shouldn't attach devices to disposable templates. That is why I am removing it from:

  • Device Assignments:
    • Device Assignment
    • Require Devices

But not from

  • Device Assignements:
    • Device Attachment policy (deny list)

I also don't want to encourage templates or disposable templates to be a key qube in "Split GPG". To no encourage bad behavior of saving keys to a qube that is shared among disposables.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

Why those dropdowns and not others?

I am doing what I can, from what I have checked...

Why not default netvm for example?

Because it's filter is already fine. It only shows netvms and not disposable template is a netvm by default... although it could become one at user's will.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I can imagine reasons to attach devices to disposable template (I want to put e.g. a config file in the template and the file is on a usb stick with my backup)...

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Encouraging unsecure behavior is one thing (on clockvm you make a good point), but it is easy to go too far in the other direction and end up all "let's remove the middle click" like certain desktop environments.

@qubesos-bot

qubesos-bot commented Feb 11, 2026

Copy link
Copy Markdown

OpenQA test summary

Complete test suite and dependencies: https://openqa.qubes-os.org/tests/overview?distri=qubesos&version=4.3&build=2026021104-4.3&flavor=pull-requests

Test run included the following:

New failures, excluding unstable

Compared to: https://openqa.qubes-os.org/tests/overview?distri=qubesos&version=4.3&build=2026020304-devel&flavor=update

  • system_tests_audio

    • TC_20_AudioVM_Pulse_whonix-workstation-18: test_225_audio_rec_unmuted_hvm (failure)
      AssertionError: too short audio, expected 10s, got 7.92344671201814...
  • system_tests_audio@hw1

  • system_tests_qwt_win10_seamless@hw13

  • system_tests_dispvm_perf@hw7

    • TC_00_DispVMPerf_whonix-workstation-18: test_800_dom0_vm_api (failure + timed out)
      AssertionError: Timeout while waiting for VM test-inst-dvm shutdown
  • system_tests_gpu_passthrough@hw13

    • gpu_passthrough: Failed (test died)
      # Test died: command 'qvm-template install debian-12-xfce' failed a...
  • system_tests_qwt_win10@hw13

    • windows_install: Failed (test died)
      # Test died: Install failed with code 1 at qubesos/tests/windows_in...

Failed tests

8 failures
  • system_tests_network_updates

    • TC_00_Dom0Upgrade_whonix-gateway-18: test_000_update_salt (error)
      subprocess.CalledProcessError: Command 'timeout=120; while ! tor-ci...
  • system_tests_audio

    • TC_20_AudioVM_Pulse_whonix-workstation-18: test_225_audio_rec_unmuted_hvm (failure)
      AssertionError: too short audio, expected 10s, got 7.92344671201814...
  • system_tests_audio@hw1

  • system_tests_qwt_win10_seamless@hw13

    • windows_clipboard_and_filecopy: unnamed test (unknown)
    • windows_clipboard_and_filecopy: Failed (test died)
      # Test died: no candidate needle with tag(s) 'windows-Edge-complete...
  • system_tests_dispvm_perf@hw7

    • TC_00_DispVMPerf_whonix-workstation-18: test_800_dom0_vm_api (failure + timed out)
      AssertionError: Timeout while waiting for VM test-inst-dvm shutdown
  • system_tests_gpu_passthrough@hw13

    • gpu_passthrough: Failed (test died)
      # Test died: command 'qvm-template install debian-12-xfce' failed a...
  • system_tests_qwt_win10@hw13

    • windows_install: Failed (test died)
      # Test died: Install failed with code 1 at qubesos/tests/windows_in...

Fixed failures

Compared to: https://openqa.qubes-os.org/tests/166096#dependencies

33 fixed
  • system_tests_whonix

    • whonixcheck: fail (unknown)
      Whonixcheck for anon-whonix failed...

    • whonixcheck: wait_serial (wait serial expected)
      # wait_serial expected: qr/D8rIe-\d+-/...

    • whonixcheck: Failed (test died + timed out)
      # Test died: command 'qvm-run -ap whonix-gateway-18 'LC_ALL=C whon...

  • system_tests_network

  • system_tests_gui_interactive

    • collect_logs: wait_serial (wait serial expected)
      # wait_serial expected: qr/m~uU4-\d+-/...

    • collect_logs: Failed (test died + timed out)
      # Test died: command 'curl --form upload=@journalctl.log --form upn...

  • system_tests_network_ipv6

  • system_tests_dispvm

    • system_tests: Fail (unknown)
      Tests qubes.tests.integ.dispvm failed (exit code 1), details report...

    • system_tests: Failed (test died)
      # Test died: Some tests failed at qubesos/tests/system_tests.pm lin...

    • TC_20_DispVM_whonix-workstation-18: test_015_preload_race_more (error)
      raise TimeoutError from exc_val... TimeoutError

  • system_tests_audio

  • system_tests_qwt_win10_seamless@hw13

  • system_tests_qwt_win11@hw13

    • windows_clipboard_and_filecopy: unnamed test (unknown)
    • windows_clipboard_and_filecopy: Failed (test died)
      # Test died: no candidate needle with tag(s) 'personal-text-editor'...
  • system_tests_guivm_vnc_gui_interactive

    • guivm_manager: unnamed test (unknown)

    • guivm_manager: Failed (test died)
      # Test died: no candidate needle with tag(s) 'menu-qubes-tools' mat...

    • guivm_manager: wait_serial (wait serial expected)
      # wait_serial expected: qr/yp0HG-\d+-/...

  • system_tests_pvgrub_salt_storage

    • system_tests: Fail (unknown)
      Tests qubes.tests.integ.grub failed (exit code 1), details reported...

    • system_tests: Failed (test died)
      # Test died: Some tests failed at qubesos/tests/system_tests.pm lin...

    • TC_41_HVMGrub_fedora-42-xfce: test_000_standalone_vm (error)
      qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...

    • TC_41_HVMGrub_fedora-42-xfce: test_010_template_based_vm (error)
      qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...

  • system_tests_qwt_win10@hw13

    • windows_clipboard_and_filecopy: unnamed test (unknown)
    • windows_clipboard_and_filecopy: Failed (test died)
      # Test died: no candidate needle with tag(s) 'windows-Edge-setup-no...

Unstable tests

Details

Performance Tests

Performance degradation:

12 performance degradations
  • fedora-42-xfce_exec-data-duplex-root: 104.75 🔻 ( previous job: 93.21, degradation: 112.38%)
  • dom0_root_seq1m_q8t1_read 3:read_bandwidth_kb: 257445.00 🔻 ( previous job: 415606.00, degradation: 61.94%)
  • dom0_root_seq1m_q1t1_read 3:read_bandwidth_kb: 79257.00 🔻 ( previous job: 93351.00, degradation: 84.90%)
  • dom0_root_rnd4k_q32t1_read 3:read_bandwidth_kb: 10876.00 🔻 ( previous job: 18745.00, degradation: 58.02%)
  • dom0_root_rnd4k_q1t1_write 3:write_bandwidth_kb: 612.00 🔻 ( previous job: 2205.00, degradation: 27.76%)
  • dom0_varlibqubes_rnd4k_q32t1_write 3:write_bandwidth_kb: 7434.00 🔻 ( previous job: 10453.00, degradation: 71.12%)
  • dom0_varlibqubes_rnd4k_q1t1_read 3:read_bandwidth_kb: 7725.00 🔻 ( previous job: 8763.00, degradation: 88.15%)
  • fedora-42-xfce_root_seq1m_q8t1_write 3:write_bandwidth_kb: 98389.00 🔻 ( previous job: 118833.00, degradation: 82.80%)
  • fedora-42-xfce_root_seq1m_q1t1_read 3:read_bandwidth_kb: 313101.00 🔻 ( previous job: 349641.00, degradation: 89.55%)
  • fedora-42-xfce_root_rnd4k_q1t1_write 3:write_bandwidth_kb: 796.00 🔻 ( previous job: 905.00, degradation: 87.96%)
  • fedora-42-xfce_private_seq1m_q8t1_write 3:write_bandwidth_kb: 105770.00 🔻 ( previous job: 136438.00, degradation: 77.52%)
  • debian-13-xfce_dom0-vm-api (mean:0.045): 0.54 🔻 ( previous job: 0.41, degradation: 130.75%)

Remaining performance tests:

98 tests
  • debian-13-xfce_exec: 5.46 🟢 ( previous job: 6.30, improvement: 86.70%)
  • debian-13-xfce_exec-root: 27.65 🔻 ( previous job: 27.04, degradation: 102.24%)
  • debian-13-xfce_socket: 8.32 🟢 ( previous job: 8.42, improvement: 98.73%)
  • debian-13-xfce_socket-root: 8.49 🔻 ( previous job: 8.42, degradation: 100.81%)
  • debian-13-xfce_exec-data-simplex: 68.16 🔻 ( previous job: 67.13, degradation: 101.53%)
  • debian-13-xfce_exec-data-duplex: 68.09 🟢 ( previous job: 70.17, improvement: 97.04%)
  • debian-13-xfce_exec-data-duplex-root: 82.86 🔻 ( previous job: 80.31, degradation: 103.18%)
  • debian-13-xfce_socket-data-duplex: 134.87 🔻 ( previous job: 134.11, degradation: 100.57%)
  • fedora-42-xfce_exec: 9.06 🟢 ( previous job: 9.13, improvement: 99.23%)
  • fedora-42-xfce_exec-root: 58.83 🟢 ( previous job: 60.02, improvement: 98.01%)
  • fedora-42-xfce_socket: 8.23 🔻 ( previous job: 8.19, degradation: 100.48%)
  • fedora-42-xfce_socket-root: 8.53 🟢 ( previous job: 8.70, improvement: 98.06%)
  • fedora-42-xfce_exec-data-simplex: 65.77 🟢 ( previous job: 68.14, improvement: 96.52%)
  • fedora-42-xfce_exec-data-duplex: 69.93 🔻 ( previous job: 68.13, degradation: 102.65%)
  • fedora-42-xfce_socket-data-duplex: 133.64 🟢 ( previous job: 138.56, improvement: 96.45%)
  • whonix-gateway-18_exec: 7.63 🔻 ( previous job: 7.35, degradation: 103.82%)
  • whonix-gateway-18_exec-root: 129.16 🟢 ( previous job: 131.64, improvement: 98.12%)
  • whonix-gateway-18_socket: 7.82 🔻 ( previous job: 7.40, degradation: 105.78%)
  • whonix-gateway-18_socket-root: 7.50 🟢 ( previous job: 7.65, improvement: 98.05%)
  • whonix-gateway-18_exec-data-simplex: 58.48 🟢 ( previous job: 72.83, improvement: 80.30%)
  • whonix-gateway-18_exec-data-duplex: 70.02 🟢 ( previous job: 75.39, improvement: 92.87%)
  • whonix-gateway-18_exec-data-duplex-root: 137.97 🟢 ( previous job: 152.93, improvement: 90.21%)
  • whonix-gateway-18_socket-data-duplex: 141.27 🟢 ( previous job: 146.64, improvement: 96.34%)
  • whonix-workstation-18_exec: 7.44 🟢 ( previous job: 8.13, improvement: 91.56%)
  • whonix-workstation-18_exec-root: 132.90 🟢 ( previous job: 139.53, improvement: 95.25%)
  • whonix-workstation-18_socket: 8.09 🟢 ( previous job: 8.51, improvement: 95.02%)
  • whonix-workstation-18_socket-root: 8.01 🔻 ( previous job: 8.00, degradation: 100.12%)
  • whonix-workstation-18_exec-data-simplex: 71.30 🔻 ( previous job: 67.80, degradation: 105.16%)
  • whonix-workstation-18_exec-data-duplex: 72.83 🟢 ( previous job: 73.26, improvement: 99.41%)
  • whonix-workstation-18_exec-data-duplex-root: 146.66 🟢 ( previous job: 146.76, improvement: 99.93%)
  • whonix-workstation-18_socket-data-duplex: 140.26 🔻 ( previous job: 138.51, degradation: 101.26%)
  • dom0_root_seq1m_q8t1_write 3:write_bandwidth_kb: 179627.00 🟢 ( previous job: 71899.00, improvement: 249.83%)
  • dom0_root_seq1m_q1t1_write 3:write_bandwidth_kb: 24011.00 🟢 ( previous job: 22755.00, improvement: 105.52%)
  • dom0_root_rnd4k_q32t1_write 3:write_bandwidth_kb: 1249.00 🟢 ( previous job: 258.00, improvement: 484.11%)
  • dom0_root_rnd4k_q1t1_read 3:read_bandwidth_kb: 12051.00 🟢 ( previous job: 9986.00, improvement: 120.68%)
  • dom0_varlibqubes_seq1m_q8t1_read 3:read_bandwidth_kb: 412176.00 🟢 ( previous job: 81191.00, improvement: 507.66%)
  • dom0_varlibqubes_seq1m_q8t1_write 3:write_bandwidth_kb: 148582.00 🟢 ( previous job: 66870.00, improvement: 222.20%)
  • dom0_varlibqubes_seq1m_q1t1_read 3:read_bandwidth_kb: 443372.00 🟢 ( previous job: 425213.00, improvement: 104.27%)
  • dom0_varlibqubes_seq1m_q1t1_write 3:write_bandwidth_kb: 169545.00 🟢 ( previous job: 167196.00, improvement: 101.40%)
  • dom0_varlibqubes_rnd4k_q32t1_read 3:read_bandwidth_kb: 105465.00 🟢 ( previous job: 104460.00, improvement: 100.96%)
  • dom0_varlibqubes_rnd4k_q1t1_write 3:write_bandwidth_kb: 4438.00 🟢 ( previous job: 3931.00, improvement: 112.90%)
  • fedora-42-xfce_root_seq1m_q8t1_read 3:read_bandwidth_kb: 398849.00 🟢 ( previous job: 282711.00, improvement: 141.08%)
  • fedora-42-xfce_root_seq1m_q1t1_write 3:write_bandwidth_kb: 63335.00 🔻 ( previous job: 69093.00, degradation: 91.67%)
  • fedora-42-xfce_root_rnd4k_q32t1_read 3:read_bandwidth_kb: 78384.00 🔻 ( previous job: 80558.00, degradation: 97.30%)
  • fedora-42-xfce_root_rnd4k_q32t1_write 3:write_bandwidth_kb: 1912.00 🟢 ( previous job: 1680.00, improvement: 113.81%)
  • fedora-42-xfce_root_rnd4k_q1t1_read 3:read_bandwidth_kb: 8851.00 🔻 ( previous job: 9096.00, degradation: 97.31%)
  • fedora-42-xfce_private_seq1m_q8t1_read 3:read_bandwidth_kb: 344133.00 🟢 ( previous job: 273565.00, improvement: 125.80%)
  • fedora-42-xfce_private_seq1m_q1t1_read 3:read_bandwidth_kb: 339015.00 🔻 ( previous job: 357875.00, degradation: 94.73%)
  • fedora-42-xfce_private_seq1m_q1t1_write 3:write_bandwidth_kb: 59454.00 🟢 ( previous job: 51291.00, improvement: 115.92%)
  • fedora-42-xfce_private_rnd4k_q32t1_read 3:read_bandwidth_kb: 90782.00 🟢 ( previous job: 23101.00, improvement: 392.98%)
  • fedora-42-xfce_private_rnd4k_q32t1_write 3:write_bandwidth_kb: 3529.00 🟢 ( previous job: 2605.00, improvement: 135.47%)
  • fedora-42-xfce_private_rnd4k_q1t1_read 3:read_bandwidth_kb: 8907.00 🟢 ( previous job: 8753.00, improvement: 101.76%)
  • fedora-42-xfce_private_rnd4k_q1t1_write 3:write_bandwidth_kb: 1058.00 🟢 ( previous job: 719.00, improvement: 147.15%)
  • fedora-42-xfce_volatile_seq1m_q8t1_read 3:read_bandwidth_kb: 379643.00 🟢 ( previous job: 338906.00, improvement: 112.02%)
  • fedora-42-xfce_volatile_seq1m_q8t1_write 3:write_bandwidth_kb: 203453.00 🟢 ( previous job: 114705.00, improvement: 177.37%)
  • fedora-42-xfce_volatile_seq1m_q1t1_read 3:read_bandwidth_kb: 285949.00 🔻 ( previous job: 315931.00, degradation: 90.51%)
  • fedora-42-xfce_volatile_seq1m_q1t1_write 3:write_bandwidth_kb: 71361.00 🟢 ( previous job: 60295.00, improvement: 118.35%)
  • fedora-42-xfce_volatile_rnd4k_q32t1_read 3:read_bandwidth_kb: 83848.00 🔻 ( previous job: 89810.00, degradation: 93.36%)
  • fedora-42-xfce_volatile_rnd4k_q32t1_write 3:write_bandwidth_kb: 2885.00 🟢 ( previous job: 2192.00, improvement: 131.61%)
  • fedora-42-xfce_volatile_rnd4k_q1t1_read 3:read_bandwidth_kb: 7805.00 🔻 ( previous job: 8251.00, degradation: 94.59%)
  • fedora-42-xfce_volatile_rnd4k_q1t1_write 3:write_bandwidth_kb: 1619.00 🟢 ( previous job: 1339.00, improvement: 120.91%)
  • debian-13-xfce_dom0-dispvm-api (mean:6.177): 74.12 🟢 ( previous job: 79.83, improvement: 92.85%)
  • debian-13-xfce_dom0-dispvm-gui-api (mean:7.607): 91.29 🟢 ( previous job: 92.49, improvement: 98.70%)
  • debian-13-xfce_dom0-dispvm-preload-2-api (mean:3.15): 37.81 🟢 ( previous job: 44.94, improvement: 84.12%)
  • debian-13-xfce_dom0-dispvm-preload-2-delay-0-api (mean:2.882): 34.58 🟢 ( previous job: 41.46, improvement: 83.40%)
  • debian-13-xfce_dom0-dispvm-preload-2-delay-minus-1d2-api (mean:3.316): 39.79 🟢 ( previous job: 47.01, improvement: 84.64%)
  • debian-13-xfce_dom0-dispvm-preload-4-api (mean:2.402): 28.82 🟢 ( previous job: 37.67, improvement: 76.51%)
  • debian-13-xfce_dom0-dispvm-preload-4-delay-0-api (mean:2.526): 30.31 🟢 ( previous job: 36.76, improvement: 82.45%)
  • debian-13-xfce_dom0-dispvm-preload-4-delay-minus-1d2-api (mean:2.529): 30.35 🟢 ( previous job: 37.87, improvement: 80.15%)
  • debian-13-xfce_dom0-dispvm-preload-2-gui-api (mean:4.428): 53.14 🟢 ( previous job: 55.58, improvement: 95.60%)
  • debian-13-xfce_dom0-dispvm-preload-4-gui-api (mean:3.729): 44.74 🟢 ( previous job: 47.73, improvement: 93.76%)
  • debian-13-xfce_dom0-dispvm-preload-6-gui-api (mean:3.554): 42.65 🟢 ( previous job: 47.11, improvement: 90.53%)
  • debian-13-xfce_dom0-vm-gui-api (mean:0.038): 0.45 🟢 ( previous job: 0.48, improvement: 93.76%)
  • fedora-42-xfce_dom0-dispvm-api (mean:6.562): 78.75 🟢 ( previous job: 84.64, improvement: 93.03%)
  • fedora-42-xfce_dom0-dispvm-gui-api (mean:8.544): 102.53 🔻 ( previous job: 99.96, degradation: 102.56%)
  • fedora-42-xfce_dom0-dispvm-preload-2-api (mean:3.359): 40.30 🟢 ( previous job: 47.97, improvement: 84.02%)
  • fedora-42-xfce_dom0-dispvm-preload-2-delay-0-api (mean:3.189): 38.26 🟢 ( previous job: 48.54, improvement: 78.83%)
  • fedora-42-xfce_dom0-dispvm-preload-2-delay-minus-1d2-api (mean:3.563): 42.76 🟢 ( previous job: 50.22, improvement: 85.14%)
  • fedora-42-xfce_dom0-dispvm-preload-4-api (mean:2.608): 31.30 🟢 ( previous job: 39.46, improvement: 79.32%)
  • fedora-42-xfce_dom0-dispvm-preload-4-delay-0-api (mean:2.81): 33.72 🟢 ( previous job: 40.12, improvement: 84.06%)
  • fedora-42-xfce_dom0-dispvm-preload-4-delay-minus-1d2-api (mean:2.772): 33.26 🟢 ( previous job: 42.41, improvement: 78.42%)
  • fedora-42-xfce_dom0-dispvm-preload-2-gui-api (mean:4.85): 58.20 🟢 ( previous job: 62.27, improvement: 93.46%)
  • fedora-42-xfce_dom0-dispvm-preload-4-gui-api (mean:4.146): 49.75 🟢 ( previous job: 54.33, improvement: 91.57%)
  • fedora-42-xfce_dom0-dispvm-preload-6-gui-api (mean:3.384): 40.61 🟢 ( previous job: 54.25, improvement: 74.86%)
  • fedora-42-xfce_dom0-vm-api (mean:0.041): 0.49 🟢 ( previous job: 0.50, improvement: 96.83%)
  • fedora-42-xfce_dom0-vm-gui-api (mean:0.039): 0.47 🟢 ( previous job: 0.49, improvement: 94.72%)
  • whonix-workstation-18_dom0-dispvm-api (mean:7.975): 95.69 🟢 ( previous job: 110.52, improvement: 86.59%)
  • whonix-workstation-18_dom0-dispvm-gui-api (mean:10.429): 125.15 🔻 ( previous job: 121.96, degradation: 102.62%)
  • whonix-workstation-18_dom0-dispvm-preload-2-api (mean:4.756): 57.07 🟢 ( previous job: 64.20, improvement: 88.90%)
  • whonix-workstation-18_dom0-dispvm-preload-2-delay-0-api (mean:4.037): 48.45 🟢 ( previous job: 61.89, improvement: 78.28%)
  • whonix-workstation-18_dom0-dispvm-preload-2-delay-minus-1d2-api (mean:5.072): 60.87 🟢 ( previous job: 69.42, improvement: 87.68%)
  • whonix-workstation-18_dom0-dispvm-preload-4-api (mean:3.537): 42.44 🟢 ( previous job: 56.66, improvement: 74.90%)
  • whonix-workstation-18_dom0-dispvm-preload-4-delay-0-api (mean:4.008): 48.09 🟢 ( previous job: 60.57, improvement: 79.40%)
  • whonix-workstation-18_dom0-dispvm-preload-4-delay-minus-1d2-api (mean:3.676): 44.12 🟢 ( previous job: 59.37, improvement: 74.30%)
  • whonix-workstation-18_dom0-dispvm-preload-2-gui-api (mean:6.353): 76.23 🟢 ( previous job: 77.58, improvement: 98.25%)
  • whonix-workstation-18_dom0-dispvm-preload-4-gui-api (mean:5.161): 61.93 🟢 ( previous job: 69.81, improvement: 88.71%)
  • whonix-workstation-18_dom0-dispvm-preload-6-gui-api (mean:4.583): 54.99 🟢 ( previous job: 68.61, improvement: 80.15%)
  • whonix-workstation-18_dom0-vm-gui-api (mean:0.053): 0.64 🟢 ( previous job: 0.65, improvement: 98.30%)

@ben-grande

Copy link
Copy Markdown
Author

Given that you add this filtering to every/almost every dropdown, I think it might be more sensible to add the check to the VMListModeler and if needed, add a parameter to allow internal for some select cases.

Good, will do that. Didn't imagine things would get to this scale...

Also, what will happen if any of those properties/features/etc/ is set to an existing internal qube? I think in such a case the qube should be shown, but not selectable? (also add tests for such a case, right now I think Weird Shit Will Happen)

Set the clockvm to an internal qube, it loads global config correctly, the qube name appears but not its icon. When listing, it also appears the qube, I don't see this as a issue, as the qube is there anyway. I will try to fix the icon loading, if possible.

@ben-grande

Copy link
Copy Markdown
Author

Tested hiding internal qubes in VMListModeler and it is working fine, found a way to show the icon.

@marmarta

Copy link
Copy Markdown
Member

Set the clockvm to an internal qube, it loads global config correctly, the qube name appears but not its icon. When listing, it also appears the qube, I don't see this as a issue, as the qube is there anyway. I will try to fix the icon loading, if possible.

check also if it behaves correctly if user changes selection to another qube, changes back to the originally selected internal qube, makes some other changes on the page, presses save (should not change this qube, should work rn? I hope)

@ben-grande

Copy link
Copy Markdown
Author

check also if it behaves correctly if user changes selection to another qube, changes back to the originally selected internal qube, makes some other changes on the page, presses save (should not change this qube, should work rn? I hope)

Yes, works fine.

@ben-grande

Copy link
Copy Markdown
Author

ben-grande added a commit to ben-grande/qubes-core-admin-client that referenced this pull request Feb 13, 2026
@ben-grande

Copy link
Copy Markdown
Author

Video to show the differences, will also help checking if everything is as expected.

2026-02-13-113856.webm

@ben-grande ben-grande changed the title Hide internal qubes Hide unreasonable qube from selection Feb 13, 2026
TestService * @anyvm vault allow target=test-blue
"""

for qube in test_qapp.domains:

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

we have those nice wrappers to avoid setting default calls, you can set a feature to a value and then update_vm_calls

@marmarta

Copy link
Copy Markdown
Member

Also please update PR description to cover in detail what the PR does. It's growing to be ever bigger, the changes are pretty opinionated, so I think to get a decent chance of discussing it (and getting other people's input which might be useful) it would help to have a full list of what this actually does in the PR description. It can be copy paste from commit messages (except that the one for U2F is pretty vague still).

@marmarta

Copy link
Copy Markdown
Member

After a moment of thought: let's split this. Leave the internal change here (it's pretty indisputable and looks good to me rn) and make a new PR with all the other changes with justification for them, so that it's easier to discuss them and not block the internal change.

ben-grande added a commit to ben-grande/qubes-core-admin-client that referenced this pull request Feb 16, 2026
@ben-grande ben-grande changed the title Hide unreasonable qube from selection Hide internal qubes from selection Feb 16, 2026
ben-grande added a commit to ben-grande/qubes-core-admin-client that referenced this pull request Feb 16, 2026
ben-grande added a commit to ben-grande/qubes-core-admin-client that referenced this pull request Feb 16, 2026
@ben-grande

Copy link
Copy Markdown
Author
=========================== short test summary info ============================
FAILED qubes_config/tests/test_gtk_widgets.py::test_vmmodeler_filter_include_internal - AssertionError: assert ['test-blue', 'test-red', 'test-vm'] == ['disp-mgmt', 'test-blue', 'test-red', 'test-vm']
  At index 0 diff: 'test-blue' != 'disp-mgmt'
  Right contains one more item: 'test-vm'
  Full diff:
  - ['disp-mgmt', 'test-blue', 'test-red', 'test-vm']
  ?  -------------
  + ['test-blue', 'test-red', 'test-vm']

Test is failing because it requires:

@marmarek

Copy link
Copy Markdown
Member

PipelineRetry

@ben-grande

Copy link
Copy Markdown
Author

Tests are failing because some recent additions to mock_app, fixing in another PR:

@marmarek

Copy link
Copy Markdown
Member

PipelineRetry

@ben-grande

Copy link
Copy Markdown
Author

PipelineRetryFailed

@ben-grande

Copy link
Copy Markdown
Author

Passed CI.

@marmarek

Copy link
Copy Markdown
Member

looks good to me rn

I treat is as approval of the reduced PR.

@marmarek marmarek left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

But I have one request:

Comment thread qubes_config/widgets/gtk_widgets.py Outdated
for domain in self.qapp.domains:
if filter_function and not filter_function(domain):
continue
if get_boolean_feature(domain, "internal") and not self.show_internal:

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Please switch order here, to not fetch internal feature if not needed.

The early load of icon for any qube is to prevent a qube that is not
supposed to be listed, to be able to load an icon if it is the default
value. Example: set a property to a qube that has the internal feature
set, it should be listed in the GUI and should load the icon.
@marmarek marmarek merged commit d56bb9e into QubesOS:main Feb 26, 2026
3 of 5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants