Proof Portal

Project overview

Omarchy

ProbeLabsviewing a historical run

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.

Viewing historical run 199d112Oct 2, 2026, 02:38 AMquattro-proofBack to current
All requirements
RequirementSW-REQ-260922-MH9BSoftwareReview

When the fast signature differs, the script rebuilds rows from a full per-file scan and rewrites the rows cache plus signatures.

This requirement changed after its last recorded review, so approval is stale. Automated checks pass and 0/1 obligations are satisfied.
PriorityshallTypeguaranteeCategoryfunctionalComponentmenuAssuranceCFindingsMediumworst open

Specification

The requirement exactly as authored — its complete prose text and, where present, the formal FRETish sentence it compiles to.

Description

When the fast signature differs, the script rebuilds rows from a full per-file scan and rewrites the rows cache plus signatures.

FRETish formula
when signature_mismatch the image_selector shall eventually satisfy rows_rebuilt_and_cached
View full formal model

Rationale & tags

Why this requirement exists, and how it is categorised.

bin/omarchy-menu-images lines 125-141 (full scan) and the cache write path.

Verification & provenance

How this requirement was checked: the review trail, edit history, and the machine-analysis status terms (each ⓘ explains what it means).

Assurance levelC
Formalizationvalid
Realizabilityrealizable
Vacuitychecked_ok
Strategyfretish

Review

Status
in_review
Reviewer
Kimi Zero Warnings · AI agent
Reviewed
Sep 27, 2026, 21:25 UTC

History

Created
Sep 22, 2026, 13:34 UTC · Kimi Dogfood · AI agent
Modified
Sep 30, 2026, 07:33 UTC · Leonid Bugaev

Hazard review

Reviewed Oct 1, 2026, 21:26 UTCby agent:claude-baseline-passcatalog v1.11.0
  • scenarioreviewedboundaryedge_caseconcurrency_scale

    Worst case: a signature collision makes a stale cache look fresh and the picker shows rows that no longer match the directory - deleted or re-saved images listed, thumbnails wrong. The fast tier hashes directory mtimes plus per-image size:mtime; a repaired-in-place file that keeps mtime defeats the fast tier, which is why the slow tier re-checks on the fast-signature miss and the rebuild path drops in-place-repaired rows from cacheability outright (rows_cacheable=false). boundary: the three-tier partition (fast cmp, slow cmp, full rebuild) is exact and each tier transition is defined; the stat-race on a vanishing image drops that one row via continue instead of aborting. edge_case: the fast-signature promotion write on the slow-tier hit (line 296) is in-place rather than temp-renamed and sits outside the cache lock - a torn write only fails the next fast cmp and re-enters the slow tier, which recomputes from the authoritative signature file: one redundant rebuild, then self-heals. error_handling is dispositioned by the standing kimi-dogfood suppression (explicit per-call guards instead of set -e aborts). Catalog 1.11.0 re-review: input_domain not applicable, it scans file names and signatures, not file contents. concurrency_scale applied, the rows cache rewrite is shared state across invocations and concurrent opens.

  • propertyreviewedatomicitydeterminism

    atomicity: the rebuild rewrites rows, signature, and fast-signature under the flock -w 30 cache lock through $$.tmp temp-renames, so a concurrent picker reads the old or the new triple, never a torn mix. determinism: the scan iterates dirs in argument order with find -print0 piped through sort -z, so the signature string and row order are stable functions of directory state.

  • structuralnot applicable

    Bash over null-delimited find output (find -print0 with IFS= read -r -d %s) preserves filenames containing newlines and tabs through the signature and row build; no eval, arithmetic on sizes, or encoding transforms in the rebuild slice.

  • domainnot applicable

    Local filesystem reads and XDG cache writes with content-hash keys, plus the image-selector IPC summon; no network egress, secrets, or privilege surface in the signature-and-cache slice this requirement governs.

Change history

Every recorded revision of this requirement's source file — newest first, each with its commit message and the diff for that change.

Review history

Human and AI-agent approvals of this requirement — the 'why was this approved' lineage, each with the reviewer's justification and the code it cites.

  1. Kimi Zero Warnings · AI agentApprovedSpec conformanceSep 27, 2026 · 5 days agoREVIEW-54

    Read omarchy-menu-images. A fast-signature mismatch falls unconditionally into the rebuild branch: full per-file scan, then rewrite of the rows cache plus signatures under the same lock that publishes them. signature_mismatch models the compare-fail arm (43HQ holds the match arm). Formula conforms to the code.

    Cited code (1)

Open known issues

Findings currently open against this requirement — issues its verification surfaced that are not resolved yet. Each links to the full finding.

Obligations

What this requirement must witness to be considered satisfied — the required evidence, and the tests that discharge each one.

1 obligation · 1 deferred

Browse the catalogue
Deferred

Every cross-process call shall declare connect, read, and total deadlines; no external call is defaulted to "no timeout."

The rebuilt rows feed omarchy-shell image-selector open and the script then polls its own done_file (while [[ ! -e $done_file ]]; sleep 0.01) with no deadline and no peer-liveness probe: a selector that dies after a successful summon hangs this script and every synchronous caller. It is the image-selector instance of the KI reproduced done_file poll mechanism, so the bound is tracked with that fix rather than suppressed.

KI-MENU-SELECT-POLL-DEADLOCKOwneropencode-hazard-c
Discharging evidence0/1 required witnessed
  • nominalrequireddeferred
    Witnessing deferred — accepted while the tracking known issue stays open.

Code signals

Static-analysis signals from external scanners that bear on this requirement's obligations — the source location, the obligation each touches, and its closure status.

  • Coveredbuiltinstrict_mode_missing
    Obligation: Error handling · Scenario

    Behavior when operations fail or dependencies are unavailable.

    script runs pipelines without `set -e`/`set -o pipefail`

Formula evidence

The formal formula behind this requirement, the variables it is written over, and the tests that exercise it (each term is explained inline).

FRETish formula

when signature_mismatch the image_selector shall eventually satisfy rows_rebuilt_and_cached

Witnesses· 2 scenarios total

  • menu-images-test.sh:1
    exercises 2 condition scenarios

MC/DC truth table· 3 rows

Each row assigns the formula's conditions (T/F) and shows the Result— the formula's value for that input row, not a test pass/fail. A row proves a condition when flipping only that condition flips the outcome. The test that covers each row is linked.

Covereda test exercises this rowExempteda reviewed mcdc:ignoreNo-actionfalse-result row satisfied by designUncoveredneeds a covering test
#rows_rebuilt_and_cachedsignature_mismatchResultProvesCovering test
1FFTsignature_mismatch
2FTFrows_rebuilt_and_cachedExempted · defensive — a full-signature mismatch falls unconditionally into the rebuild branch that rewrites and re-signs the rows; a mismatch without a rebuild needs a broken branch (reviewed: REVIEW-M6)
3TTTrows_rebuilt_and_cached

Its place

How this requirement connects — what proves it, what it affects, and what it rests on. Authored links only here; automatically derived links come from the audit index.

Loading graph…

Trace evidence

The concrete artifacts linked to this requirement — implementing code, verifying tests, documents, and the findings raised against it.

Impact

Blast radius — authored trace links only (automatically derived links come from the audit index and aren't shown here).

If you change this

Requirements
0
Files
1
Tests
1
At-risk contracts
0

Files to re-check (1)

  • omarchy-menu-imagesbin/omarchy-menu-images

Tests to re-run (1)

  • menu-images-test.shtest/shell.d/menu-images-test.sh

What this rests on

Discussions

Discuss this with the proof team. Nothing changes in your audit automatically — you open a request and a staff member records any outcome inside the thread.

Sign in to discuss this with the proof team.Sign in