Proof Portal

Project overview

Omarchy

ProbeLabs65 findings · 95 requirements

A proof layer — requirements, tests and verified fixes — for two of Omarchy's subsystems: the application menu (launcher scripts, QML model, JSONC config, search and selection) and the lock screen (lock scripts, QML, PAM authentication). Scope is deliberately limited to those components of omacom/omarchy; the rest of the distribution is not covered.

Inbox
ReportR-1791GitHub issuePublicValidated· Refuted

Quickshell segfaults when typing in the omarchy-menu search box (crash inside QML JIT via displayModel.append)

Reported by tk-ls · filed Aug 16, 2026 · open at source

Validation verdict: Refuted. An engine-executed run exited 0: the expected (correct) behaviour. Awaiting a human decision.

At a glance

1 · What is claimed?
  • RefutedViolates SYS-REQ-260922-V7W6: a filter keystroke in the open omarchy-menu search box kills the shell with SIGSEGV before the query narrows the rows
  • RefutedReproducible: quickshell dies with SIGSEGV while a menu filter keystroke rebuilds displayModel (displayModel.append -> QQmlBinding::update -> Qt V4 fault)
  • RefutedAffects the menu component
2 · What does it affect?
AreaIn the audited areamenu· Decided by agents · verified
3 · Is it reproducible?
An engine-executed run exited 0: the expected (correct) behaviour. See reproducer
4 · What remains unclear?
  • Open question for maintainers: Root cause is unsettled: a Qt QML-engine bug (string/GC lifetime behind QV4::Heap::StringOrSymbol::createHashValue during a binding re-evaluation while ListModel is mid-fill) versus memory corrupted earlier by something else. A symbolized run under a debugger, or an instrumented Qt, would settle it; the anchor's faulting frames were JIT-generated and unsymbolized except for the commenter's core.
  • Open question for maintainers: Whether the crash needs a hybrid GPU topology (the anchor: AMD Radeon 780M + Intel i915 driving a real Hyprland desktop) or a long-lived session's JIT/GC state (the anchor crashed ~36 min into a session and again after a crash-relaunch; a commenter crashed six times across days of use). This run had hardware GL on the same Radeon 780M family but a fresh headless sway session on a single iGPU.
  • Open question for maintainers: Whether the contained mitigation a prior trace sketched (compute the card height from the plain rows array that rebuildDisplay builds, instead of reading displayModel from the visibleRowsHeight binding) prevents the crash - untestable without a reproduction, so it stays a lead.
5 · What happens next?
Our staff decide whether the report is valid. Where this project allows it, agents decide whether it duplicates another report or a known issue. So far: in the audited area (menu) — decided by agents · verified; matches no known issue — decided by agents · verified. The outcome (valid, duplicate, not a bug, …) is not decided yet. See the decision.

Original report

Quickshell segfaults when typing in the omarchy-menu search box (crash inside QML JIT via displayModel.append)revision 1 · captured 2026-09-28 21:29 UTC via poll

What happened

Quickshell (the Omarchy shell) segfaulted twice in one session, ~36 minutes apart, both times immediately after opening omarchy-menu (Hyprland IPC logged openlayer>>omarchy-menu right before each crash). The second crash is quickshell's own automatic crash-relaunch of itself, crashing again on the same trigger — so this is one bug firing twice, not two separate incidents.

Both crash reports (written by quickshell's built-in crash handler) show the same shape:

key press → QQuickKeysAttached::keyPressed
  → QML/JS calls (JIT-compiled, unresolvable)
    → QQmlListModel::append()
      → QQmlBinding::update() (property binding notified by the append)
        → more JIT-compiled JS calls
          → SIGSEGV inside JIT-generated code

This matches plugins/menu/Menu.qml's Keys.onPressed handler (around line 1075): any printable keystroke calls root.setFilter(), which drives rebuildDisplay() / rebuildDmenuDisplay() (lines ~510–640). Both of those do displayModel.clear() followed by a loop of displayModel.append(row) for each matching entry — exactly the call shape in the crash.

The actual faulting frames are inside Qt's V4 JIT-generated code (no symbol, no library — n/a (n/a+0x0)), so I can't point at the exact defective line; it may be a Qt QML engine bug rather than something wrong in Menu.qml itself, but the trigger path is entirely through Omarchy's bundled shell config (/usr/share/omarchy/shell/shell.qml), not a user config.

Expected

Typing into the omarchy-menu search box filters the list without crashing quickshell.

Steps to reproduce

  1. Open omarchy-menu.
  2. Type a character to filter the list.
  3. (Intermittent — reproduced twice in one session, not on every keystroke.)

System info

  • Omarchy: 4.0.0-1
  • quickshell-git: 0.3.0.r20.g28771c7-1 (installed same day as the crash, as part of a fresh Omarchy install)
  • qt6-declarative: 6.11.1-3
  • qt6-base: 6.11.1-1
  • GPU: hybrid — AMD (amdgpu, PCI 03:00.0, 1002:7424) + Intel (i915, PCI 00:02.0, 8086:a780)
  • No memory pressure at crash time (14G free, no OOM kill in journal)

Stack trace (crash 1, PID 18800, 2026-08-16 20:21:31)

Full symbolized backtrace
Signal: Segmentation fault (11)
Config Path: /usr/share/omarchy/shell/shell.qml

#0  0x00007fa36403e6ef at /usr/bin/../lib/libc.so.6
#1  0x00007fa36577c69c at /usr/bin/../lib/libQt6Qml.so.6
#2  0x00007fa36546a70c at /usr/bin/../lib/libQt6Qml.so.6
#3  0x00007fa3653b8776 at /usr/bin/../lib/libQt6Qml.so.6
#4  QV4::Runtime::CallPropertyLookup::call(...) at libQt6Qml.so.6
#5  0x00007fa340226bc6  (JIT-compiled, unresolvable)
#6  0x00007fa36546a70c at libQt6Qml.so.6
#7  0x00007fa3653b8776 at libQt6Qml.so.6
#8  QV4::Runtime::CallQmlContextPropertyLookup::call(...) at libQt6Qml.so.6
#9  0x00007fa3402262c6  (JIT-compiled, unresolvable)
#10 0x00007fa36546a70c at libQt6Qml.so.6
#11 0x00007fa3653aa173 at libQt6Qml.so.6
#12 QQmlJavaScriptExpression::evaluate(...) at libQt6Qml.so.6
#13 QQmlBinding::evaluate(bool*) at libQt6Qml.so.6
#14 QQmlBinding::doUpdate(...) at libQt6Qml.so.6
#15 QQmlBinding::update(...) at libQt6Qml.so.6
#16 QQmlNotifier::emitNotify(...) at libQt6Qml.so.6
#17 0x00007fa3649f077e at libQt6Core.so.6
#18 QQmlListModel::append(QQmlV4Function*) at libQt6QmlModels.so.6
#19 QQmlListModel::qt_metacall(...) at libQt6QmlModels.so.6
#20 0x00007fa365567362 at libQt6Qml.so.6
#21 QV4::QObjectMethod::callInternal(...) const at libQt6Qml.so.6
#22 QV4::Runtime::CallPropertyLookup::call(...) at libQt6Qml.so.6
#23 0x00007fa340210066  (JIT-compiled, unresolvable)
#24 0x00007fa36546a70c at libQt6Qml.so.6
#25 0x00007fa3653b8776 at libQt6Qml.so.6
#26 QV4::Runtime::CallPropertyLookup::call(...) at libQt6Qml.so.6
#27 0x00007fa350be6c3c  (JIT-compiled, unresolvable)
#28 0x00007fa36546a70c at libQt6Qml.so.6
#29 0x00007fa3653b8776 at libQt6Qml.so.6
#30 QV4::Runtime::CallPropertyLookup::call(...) at libQt6Qml.so.6
#31 0x00007fa350be9b47  (JIT-compiled, unresolvable)
#32 0x00007fa36546a70c at libQt6Qml.so.6
#33 0x00007fa3653aa173 at libQt6Qml.so.6
#34 QV4::Function::call(...) at libQt6Qml.so.6
#35 QQmlJavaScriptExpression::evaluate(...) at libQt6Qml.so.6
#36 QQmlBoundSignalExpression::evaluate(...) at libQt6Qml.so.6
#37 0x00007fa3654b2000 at libQt6Qml.so.6
#38 QQmlNotifier::emitNotify(...) at libQt6Qml.so.6
#39 0x00007fa3649f077e at libQt6Core.so.6
#40 QQuickKeysAttached::keyPressed(QKeyEvent*, bool) at libQt6Quick.so.6
#41 QQuickItemPrivate::filterKeyEvent(...) at libQt6Quick.so.6
#42 QQuickItemPrivate::deliverKeyEvent(...) at libQt6Quick.so.6
#43 QQuickItem::event(QEvent*) at libQt6Quick.so.6
#44 QCoreApplication::notifyInternal2(...) at libQt6Core.so.6
#45 QQuickDeliveryAgentPrivate::deliverKeyEvent(...) at libQt6Quick.so.6
#46 QWindow::event(QEvent*) at libQt6Gui.so.6
#47 QCoreApplication::notifyInternal2(...) at libQt6Core.so.6
#48 QGuiApplicationPrivate::processKeyEvent(...) at libQt6Gui.so.6
#49 QWindowSystemInterface::sendWindowSystemEvents(...) at libQt6Gui.so.6
#50 0x00007fa365f83523 at libQt6Gui.so.6
#51-53 glib main context iteration (libglib-2.0.so.0)
#54 QEventDispatcherGlib::processEvents(...) at libQt6Core.so.6
#55 QEventLoop::exec(...) at libQt6Core.so.6
#56 QCoreApplication::exec() at libQt6Core.so.6
#57 qs::launch::launch(...) at quickshell/src/launch/launch.cpp:320:35
#58 launchFromCommand at quickshell/src/launch/command.cpp:482:15
#59 qs::launch::runCommand(...) at quickshell/src/launch/command.cpp:580:27
#60 qs::launch::main(int, char**) at quickshell/src/launch/main.cpp:130:24
#61 main at quickshell/src/main.cpp:3:58

Log tail immediately before crash:

20:21:29.000 INFO  quickshell.ipc: New IPC connection ...
20:21:29.000 DEBUG quickshell.hyprland.ipc.events: Received event: "openlayer>>omarchy-menu" parsed as "openlayer" "omarchy-menu"

Stack trace (crash 2, PID 32680, 2026-08-16 20:57:38 AEST — quickshell's own auto-relaunch, crashing again on the same trigger)

Full symbolized backtrace
Signal: Segmentation fault (11)
Config Path: /usr/share/omarchy/shell/shell.qml

(identical shape to crash 1 through the QML/JIT chain, same frames:
 QQuickKeysAttached::keyPressed → ... → QV4::Runtime::CallPropertyLookup::call
 → QQmlListModel::append → QQmlListModel::qt_metacall → ... →
 QQmlBinding::update → QQmlNotifier::emitNotify → JIT-compiled JS → SIGSEGV)

#57 qs::launch::launch(...) at quickshell/src/launch/launch.cpp:320:35
#58 checkCrashRelaunch at quickshell/src/launch/main.cpp:74:10
#59 qs::launch::main(int, char**) at quickshell/src/launch/main.cpp:129:20
#60 main at quickshell/src/main.cpp:3:58

Log tail immediately before crash:

20:57:35.000 DEBUG quickshell.hyprland.ipc.events: Received event: "closelayer>>omarchy-menu" parsed as "closelayer" "omarchy-menu"
20:57:36.000 INFO  quickshell.ipc: New IPC connection ...
20:57:36.000 DEBUG quickshell.hyprland.ipc.events: Received event: "openlayer>>omarchy-menu" parsed as "openlayer" "omarchy-menu"

Filed by Claude Sonnet 5 via Claude Code.

View raw text
## What happened

Quickshell (the Omarchy shell) segfaulted twice in one session, ~36 minutes apart, both times immediately after opening omarchy-menu (Hyprland IPC logged `openlayer>>omarchy-menu` right before each crash). The second crash is quickshell's own automatic crash-relaunch of itself, crashing again on the same trigger — so this is one bug firing twice, not two separate incidents.

Both crash reports (written by quickshell's built-in crash handler) show the same shape:

```
key press → QQuickKeysAttached::keyPressed
  → QML/JS calls (JIT-compiled, unresolvable)
    → QQmlListModel::append()
      → QQmlBinding::update() (property binding notified by the append)
        → more JIT-compiled JS calls
          → SIGSEGV inside JIT-generated code
```

This matches `plugins/menu/Menu.qml`'s `Keys.onPressed` handler (around line 1075): any printable keystroke calls `root.setFilter()`, which drives `rebuildDisplay()` / `rebuildDmenuDisplay()` (lines ~510–640). Both of those do `displayModel.clear()` followed by a loop of `displayModel.append(row)` for each matching entry — exactly the call shape in the crash.

The actual faulting frames are inside Qt's V4 JIT-generated code (no symbol, no library — `n/a (n/a+0x0)`), so I can't point at the exact defective line; it may be a Qt QML engine bug rather than something wrong in `Menu.qml` itself, but the trigger path is entirely through Omarchy's bundled shell config (`/usr/share/omarchy/shell/shell.qml`), not a user config.

## Expected

Typing into the omarchy-menu search box filters the list without crashing quickshell.

## Steps to reproduce

1. Open omarchy-menu.
2. Type a character to filter the list.
3. (Intermittent — reproduced twice in one session, not on every keystroke.)

## System info

- Omarchy: 4.0.0-1
- quickshell-git: 0.3.0.r20.g28771c7-1 (installed same day as the crash, as part of a fresh Omarchy install)
- qt6-declarative: 6.11.1-3
- qt6-base: 6.11.1-1
- GPU: hybrid — AMD (amdgpu, PCI 03:00.0, 1002:7424) + Intel (i915, PCI 00:02.0, 8086:a780)
- No memory pressure at crash time (14G free, no OOM kill in journal)

## Stack trace (crash 1, PID 18800, 2026-08-16 20:21:31)

<details>
<summary>Full symbolized backtrace</summary>

```
Signal: Segmentation fault (11)
Config Path: /usr/share/omarchy/shell/shell.qml

#0  0x00007fa36403e6ef at /usr/bin/../lib/libc.so.6
#1  0x00007fa36577c69c at /usr/bin/../lib/libQt6Qml.so.6
#2  0x00007fa36546a70c at /usr/bin/../lib/libQt6Qml.so.6
#3  0x00007fa3653b8776 at /usr/bin/../lib/libQt6Qml.so.6
#4  QV4::Runtime::CallPropertyLookup::call(...) at libQt6Qml.so.6
#5  0x00007fa340226bc6  (JIT-compiled, unresolvable)
#6  0x00007fa36546a70c at libQt6Qml.so.6
#7  0x00007fa3653b8776 at libQt6Qml.so.6
#8  QV4::Runtime::CallQmlContextPropertyLookup::call(...) at libQt6Qml.so.6
#9  0x00007fa3402262c6  (JIT-compiled, unresolvable)
#10 0x00007fa36546a70c at libQt6Qml.so.6
#11 0x00007fa3653aa173 at libQt6Qml.so.6
#12 QQmlJavaScriptExpression::evaluate(...) at libQt6Qml.so.6
#13 QQmlBinding::evaluate(bool*) at libQt6Qml.so.6
#14 QQmlBinding::doUpdate(...) at libQt6Qml.so.6
#15 QQmlBinding::update(...) at libQt6Qml.so.6
#16 QQmlNotifier::emitNotify(...) at libQt6Qml.so.6
#17 0x00007fa3649f077e at libQt6Core.so.6
#18 QQmlListModel::append(QQmlV4Function*) at libQt6QmlModels.so.6
#19 QQmlListModel::qt_metacall(...) at libQt6QmlModels.so.6
#20 0x00007fa365567362 at libQt6Qml.so.6
#21 QV4::QObjectMethod::callInternal(...) const at libQt6Qml.so.6
#22 QV4::Runtime::CallPropertyLookup::call(...) at libQt6Qml.so.6
#23 0x00007fa340210066  (JIT-compiled, unresolvable)
#24 0x00007fa36546a70c at libQt6Qml.so.6
#25 0x00007fa3653b8776 at libQt6Qml.so.6
#26 QV4::Runtime::CallPropertyLookup::call(...) at libQt6Qml.so.6
#27 0x00007fa350be6c3c  (JIT-compiled, unresolvable)
#28 0x00007fa36546a70c at libQt6Qml.so.6
#29 0x00007fa3653b8776 at libQt6Qml.so.6
#30 QV4::Runtime::CallPropertyLookup::call(...) at libQt6Qml.so.6
#31 0x00007fa350be9b47  (JIT-compiled, unresolvable)
#32 0x00007fa36546a70c at libQt6Qml.so.6
#33 0x00007fa3653aa173 at libQt6Qml.so.6
#34 QV4::Function::call(...) at libQt6Qml.so.6
#35 QQmlJavaScriptExpression::evaluate(...) at libQt6Qml.so.6
#36 QQmlBoundSignalExpression::evaluate(...) at libQt6Qml.so.6
#37 0x00007fa3654b2000 at libQt6Qml.so.6
#38 QQmlNotifier::emitNotify(...) at libQt6Qml.so.6
#39 0x00007fa3649f077e at libQt6Core.so.6
#40 QQuickKeysAttached::keyPressed(QKeyEvent*, bool) at libQt6Quick.so.6
#41 QQuickItemPrivate::filterKeyEvent(...) at libQt6Quick.so.6
#42 QQuickItemPrivate::deliverKeyEvent(...) at libQt6Quick.so.6
#43 QQuickItem::event(QEvent*) at libQt6Quick.so.6
#44 QCoreApplication::notifyInternal2(...) at libQt6Core.so.6
#45 QQuickDeliveryAgentPrivate::deliverKeyEvent(...) at libQt6Quick.so.6
#46 QWindow::event(QEvent*) at libQt6Gui.so.6
#47 QCoreApplication::notifyInternal2(...) at libQt6Core.so.6
#48 QGuiApplicationPrivate::processKeyEvent(...) at libQt6Gui.so.6
#49 QWindowSystemInterface::sendWindowSystemEvents(...) at libQt6Gui.so.6
#50 0x00007fa365f83523 at libQt6Gui.so.6
#51-53 glib main context iteration (libglib-2.0.so.0)
#54 QEventDispatcherGlib::processEvents(...) at libQt6Core.so.6
#55 QEventLoop::exec(...) at libQt6Core.so.6
#56 QCoreApplication::exec() at libQt6Core.so.6
#57 qs::launch::launch(...) at quickshell/src/launch/launch.cpp:320:35
#58 launchFromCommand at quickshell/src/launch/command.cpp:482:15
#59 qs::launch::runCommand(...) at quickshell/src/launch/command.cpp:580:27
#60 qs::launch::main(int, char**) at quickshell/src/launch/main.cpp:130:24
#61 main at quickshell/src/main.cpp:3:58
```

Log tail immediately before crash:
```
20:21:29.000 INFO  quickshell.ipc: New IPC connection ...
20:21:29.000 DEBUG quickshell.hyprland.ipc.events: Received event: "openlayer>>omarchy-menu" parsed as "openlayer" "omarchy-menu"
```

</details>

## Stack trace (crash 2, PID 32680, 2026-08-16 20:57:38 AEST — quickshell's own auto-relaunch, crashing again on the same trigger)

<details>
<summary>Full symbolized backtrace</summary>

```
Signal: Segmentation fault (11)
Config Path: /usr/share/omarchy/shell/shell.qml

(identical shape to crash 1 through the QML/JIT chain, same frames:
 QQuickKeysAttached::keyPressed → ... → QV4::Runtime::CallPropertyLookup::call
 → QQmlListModel::append → QQmlListModel::qt_metacall → ... →
 QQmlBinding::update → QQmlNotifier::emitNotify → JIT-compiled JS → SIGSEGV)

#57 qs::launch::launch(...) at quickshell/src/launch/launch.cpp:320:35
#58 checkCrashRelaunch at quickshell/src/launch/main.cpp:74:10
#59 qs::launch::main(int, char**) at quickshell/src/launch/main.cpp:129:20
#60 main at quickshell/src/main.cpp:3:58
```

Log tail immediately before crash:
```
20:57:35.000 DEBUG quickshell.hyprland.ipc.events: Received event: "closelayer>>omarchy-menu" parsed as "closelayer" "omarchy-menu"
20:57:36.000 INFO  quickshell.ipc: New IPC connection ...
20:57:36.000 DEBUG quickshell.hyprland.ipc.events: Received event: "openlayer>>omarchy-menu" parsed as "openlayer" "omarchy-menu"
```

</details>

---
Filed by Claude Sonnet 5 via Claude Code.

Validation

AI validator opencode-promoter-1 (xiaomi-token-plan-sgp/mimo-v2.6-pro) · evaluated revision 1 at product commit 0e375665e323 · sealed 2026-10-10T07:15:30Z

Validator's summary (commentary, not evidence)

The report says a printable keystroke in the open omarchy-menu search box takes quickshell down with SIGSEGV in the QML engine: QQuickKeysAttached::keyPressed -> setFilter -> rebuildDisplay()/rebuildDmenuDisplay() -> displayModel.clear() plus a loop of displayModel.append(row), with the visibleRowsHeight binding (on displayModel.count) re-evaluating on every append, and the faulting frame inside Qt's V4 (a commenter's symbolized frame: QV4::String::virtualIsEqualTo / createHashValue under strictEqual). SYS-REQ-260922-V7W6 requires a filter query to narrow the rows ('A filter query narrows to visible, selectable rows whose name or description matches every term, ranked by match quality'); a keystroke that kills the shell before it filters violates that clause. The draft records the crash as INTERMITTENT ('Not every keystroke crashes'); a prior trace ran ~15,000 filter rebuilds without a crash. This validation drives the exact reported trigger at the audited baseline: the shipped shell and shipped default menu (no user extension), private headless sway, real key events via wtype into Keys.onPressed, thousands of filter keystrokes whose one-char queries fill displayModel with current plus drilldown rows (so rowListHeight's row.section strictEqual runs per append), on hardware GPU rendering (WLR_RENDERER=gles2, AMD Radeon 780M - the anchor's GPU family). A quickshell SIGSEGV (crash report under ~/.cache/quickshell/crashes, or death by signal 11) is the defect signal. The stress completed with the shell alive and filtering correctly throughout, refuting the crash hypothesis FOR THIS RUN only: the draft's own intermittency and the earlier clean ~15,000-rebuild trace mean a bounded no-crash run cannot establish absence. Nor can it confirm the report: the anchor crashed on quickshell-git 0.3.0 / Qt 6.11.1 in a long-lived Hyprland session with hybrid AMD+Intel GPUs (again after a crash-relaunch), a commenter six times on 0.3.1 / 6.11.2 across days of use; this worker ran 0.3.1 / 6.11.2 in a fresh short-lived headless sway on one AMD iGPU with wtype input. Versions match the second report; compositor identity, hybrid-GPU topology, real USB/HID input and session length/JIT-heat do not, and no declared capability check covers those aspects. The promotion decision therefore records needs_environment, not a rejection: two independent symbolized user crashes cannot be declared absent from this environment.

  • Violates SYS-REQ-260922-V7W6: a filter keystroke in the open omarchy-menu search box kills the shell with SIGSEGV before the query narrows the rows

    Engine: engine-executed run exited 0: the expected (correct) behaviour

    Evidence: requirement SYS-REQ-260922-V7W6 · file pocs/reproducers/a withheld known issue/repro.sh

    Validator's rationale (commentary): SYS-REQ-260922-V7W6 states: 'A filter query narrows to visible, selectable rows whose name or description matches every term, ranked by match quality.' The reproducer asserts that clause on the reported path: a printable keystroke enters the filter (Menu.qml Keys.onPressed -> setFilter) and the query must narrow the rows while the shell stays up. The report's crash (SIGSEGV in the append -> binding -> V4 path inside that keystroke's rebuild) means the narrowing never completes: the shell dies instead of showing matching rows. The requirement link is direct (the filtering behaviour is the requirement's own subject), not a stretch; the faulting frames being inside Qt's V4 engine does not move the violation: the requirement is on the product's filter behaviour, and the trigger path is the product's own Menu.qml rebuild.

  • RefutedReproducible

    Reproducible: quickshell dies with SIGSEGV while a menu filter keystroke rebuilds displayModel (displayModel.append -> QQmlBinding::update -> Qt V4 fault)

    Engine: engine-executed run exited 0: the expected (correct) behaviour

    Evidence: file pocs/reproducers/a withheld known issue/repro.sh

    Validator's rationale (commentary): The claim under test: the engine-executed run of pocs/reproducers/a withheld known issue/repro.sh at the evaluated commit shows the shell dying of SIGSEGV while the reported trigger (filter keystrokes driving rebuildDisplay's clear + per-row append with the visibleRowsHeight binding re-evaluating per append) is driven. The reproducer prints PROOF-REPRODUCER: defect-present a withheld known issue only on a SIGSEGV witness. The draft defines the defect as intermittent, so a completed stress without the crash refutes this claim for the run only; how far that reaches is the promotion decision's call (see its environmentMatch).

  • RefutedAffects a componentmenu

    Affects the menu component

    Engine: the recorded run shows the expected behaviour: engine-executed run exited 0: the expected (correct) behaviour

    Validator's rationale (commentary): The trigger path is the menu component's own: shell/plugins/menu/Menu.qml Keys.onPressed -> setFilter -> rebuildDisplay()/rebuildDmenuDisplay() (the aiScope verdict and the area decision both name component menu). The claim is confirmed only with a confirmed violates a requirement; with an inconclusive run it stays unverified here.

Engine reference checks at 920fc884a895 (10/10 ok)
  • okcommit920fc884a89564d5e3a0752cbcdfe157861431a9
  • okbase commit0e375665e3233b541d5f0a761228a3dfe62acfa5
  • okbase ancestry0e375665e3233b541d5f0a761228a3dfe62acfa5
  • okproduct code untouchedthis report's reproducer branch
  • okbranchthis report's reproducer branch
  • okfilepocs/reproducers/a withheld known issue/repro.sh
  • okrequirementSYS-REQ-260922-V7W6
  • okcomponentmenu
  • okknown issueKI-MENU-OPEN-QUADRATIC
  • okknown issueKI-MENU-SEARCH-SCORE-CRASH-NAN

The engine's own check, at validation time, that the commits, the reproducer branch (touching only reproducer files), the reproducer files and every mapped requirement / component / known issue really exist.

1 earlier check — superseded by the newest one above

Each new check of the report replaces the previous one; only the newest result above counts. Earlier results are kept for the record.

  • Refuted— checked report revision 1 on Oct 10, 2026; earlier check, superseded

Validator-authored hypothesis. Each claim's verification is engine-computed: confirmed only from an engine-executed reproducer run recorded in this record, refuted when recorded evidence contradicts it. Prose is commentary. The disposition of the report is a human decision.

Reproducer

engine-runexit 0 · expected exit 0 · defect exit 1 · 246349 ms · 2026-10-10T07:11:23Z→ showed the correct behaviour
pocs/reproducers/a withheld known issue/repro.shon this report's reproducer branch @ 920fc884a8Reproducer source not available here yet
bash pocs/reproducers/a withheld known issue/repro.sh

Setup failure: exit 2 means the reproducer could not set up (e.g. the product did not build) — such a run decides nothing.

Defect signal: output contains PROOF-REPRODUCER: defect-present a withheld known issue

Observed output · 3442 bytes
progress: round=5 elapsed=3s keystrokes=112
progress: round=10 elapsed=7s keystrokes=240
progress: round=15 elapsed=10s keystrokes=352
progress: round=20 elapsed=14s keystrokes=480
progress: round=25 elapsed=18s keystrokes=592
progress: round=30 elapsed=22s keystrokes=720
progress: round=35 elapsed=25s keystrokes=832
progress: round=40 elapsed=29s keystrokes=960
progress: round=45 elapsed=33s keystrokes=1072
progress: round=50 elapsed=36s keystrokes=1200
progress: round=55 elapsed=40s keystrokes=1312
progress: round=60 elapsed=44s keystrokes=1440
progress: round=65 elapsed=47s keystrokes=1552
progress: round=70 elapsed=51s keystrokes=1680
progress: round=75 elapsed=54s keystrokes=1792
progress: round=80 elapsed=59s keystrokes=1920
progress: round=85 elapsed=62s keystrokes=2032
progress: round=90 elapsed=66s keystrokes=2160
progress: round=95 elapsed=69s keystrokes=2272
progress: round=100 elapsed=73s keystrokes=2400
progress: round=105 elapsed=77s keystrokes=2512
progress: round=110 elapsed=80s keystrokes=2640
progress: round=115 elapsed=84s keystrokes=2752
progress: round=120 elapsed=88s keystrokes=2880
progress: round=125 elapsed=91s keystrokes=2992
progress: round=130 elapsed=95s keystrokes=3120
progress: round=135 elapsed=98s keystrokes=3232
progress: round=140 elapsed=103s keystrokes=3360
progress: round=145 elapsed=106s keystrokes=3472
progress: round=150 elapsed=110s keystrokes=3600
progress: round=155 elapsed=113s keystrokes=3712
progress: round=160 elapsed=117s keystrokes=3840
progress: round=165 elapsed=121s keystrokes=3952
progress: round=170 elapsed=124s keystrokes=4080
progress: round=175 elapsed=128s keystrokes=4192
progress: round=180 elapsed=132s keystrokes=4320
progress: round=185 elapsed=135s keystrokes=4432
progress: round=190 elapsed=139s keystrokes=4560
progress: round=195 elapsed=142s keystrokes=4672
progress: round=200 elapsed=147s keystrokes=4800
progress: round=205 elapsed=150s keystrokes=4912
progress: round=210 elapsed=154s keystrokes=5040
progress: round=215 elapsed=157s keystrokes=5152
progress: round=220 elapsed=161s keystrokes=5280
progress: round=225 elapsed=165s keystrokes=5392
progress: round=230 elapsed=168s keystrokes=5520
progress: round=235 elapsed=172s keystrokes=5632
progress: round=240 elapsed=176s keystrokes=5760
progress: round=245 elapsed=179s keystrokes=5872
progress: round=250 elapsed=183s keystrokes=6000
progress: round=255 elapsed=186s keystrokes=6112
progress: round=260 elapsed=191s keystrokes=6240
progress: round=265 elapsed=194s keystrokes=6352
progress: round=270 elapsed=198s keystrokes=6480
progress: round=275 elapsed=201s keystrokes=6592
progress: round=280 elapsed=205s keystrokes=6720
progress: round=285 elapsed=209s keystrokes=6832
progress: round=290 elapsed=212s keystrokes=6960
progress: round=295 elapsed=216s keystrokes=7072
progress: round=300 elapsed=220s keystrokes=7200
progress: round=305 elapsed=223s keystrokes=7312
progress: round=310 elapsed=227s keystrokes=7440
progress: round=315 elapsed=230s keystrokes=7552
progress: round=320 elapsed=235s keystrokes=7680
progress: round=325 elapsed=238s keystrokes=7792
stress complete: rounds=327 keystrokes=7840 in 242s on sway=WLR_RENDERER:gles2 qt=auto (OpenGL when EGL starts); quickshell still alive (pid 122554); no crash report under /tmp/a withheld known issue.9Nj6fl/.cache/quickshell/crashes
PROOF-REPRODUCER: defect-absent a withheld known issue no-sigsegv-in-7840-filter-keystrokes

Needs: linux · amd64 · linux-session · toolchain · ran on linux/amd64 · Private headless sway (wlroots headless, output HEADLESS-1) with WLR_RENDERER=gles2 hardware GL: Qt Quick reports OpenGL 4.6 on AMD Radeon 780M (radeonsi, Mesa 26.2.3) - the anchor reporter's GPU family (PCI 1002:7424). quickshell 0.3.1-1, Qt 6.11.2. Shipped default menu only (empty HOME); keystrokes via wtype virtual keyboard. Falls back to pixman/software (QT_QUICK_BACKEND=software) and prints which path ran when no GL renderer can be created. NOT available here: the anchor's hybrid AMD+Intel GPU topology, Hyprland as compositor (this is headless sway), real USB/HID input, and a long-lived session's JIT/GC heat - see the promotion decision's environmentMatch.

Linked

Not linked to any known issue, other report or change yet.

Decision

Decisions are recorded by our staff — or, where this project allows it, by agents: checked by a second, independent agent, or by a single agent where the project's policy says so. Any decision reached so far is shown below.

  • Decided by agents · verified: in the audited area (menu)
  • Decided by agents · verified: matches no known issue

The outcome (valid, duplicate, not a bug, …) is not decided yet.