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 67b0e44Oct 1, 2026, 12:54 PMquattro-proofBack to current
All requirements
RequirementSW-REQ-260922-43HQSoftwareReview

When the fast signature (directory path + mtime per image dir) matches, the script serves cached rows without rescanning image files.

This requirement changed after its last recorded review, so approval is stale. Automated checks pass.
PriorityshallTypeguaranteeCategoryfunctionalComponentmenuAssuranceCFindingsnone 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 (directory path + mtime per image dir) matches, the script serves cached rows without rescanning image files.

FRETish formula
when dirs_unchanged the image_selector shall eventually satisfy cached_rows_reused
View full formal model

Rationale & tags

Why this requirement exists, and how it is categorised.

bin/omarchy-menu-images lines 116-123 (fast signature v3 compare at line 124).

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 27, 2026, 21:25 UTC · Kimi Zero Warnings · AI agent

Hazard review

Reviewed Sep 30, 2026, 07:00 UTCby agent:opencode-hazard-bcatalog v1.10.1
  • scenarioreviewedboundaryedge_caseconcurrent

    Worst case: rows served from cache describe image files that no longer exist or have changed - a user picks an entry whose target was deleted or renamed under a preserved mtime. The fast signature (dir path + dir mtime) gates reuse; a lost fast-signature file falls back to the per-image size:mtime full compare, which vouches for the same rows without a rebuild. boundary: missing rows cache, missing fast signature, empty image dir, and the v3->v4 schema bump are the tested partition edges. edge_case: an edit that preserves both size and mtime slips past both signatures - the honest residual of mtime-based coherence, graded low because the actor is the same user and the cost is a stale picker row, not a wrong write. concurrent: two selectors opening the same cache must not interleave a half-written rows file with its signature - rows and signatures publish together under the cache lock, and the concurrent-runs scenario is witnessed.

  • propertyreviewedidempotency

    A reuse run over unchanged dirs is observably identical to the previous run - same rows, no thumbnail regeneration, no signature rewrite; the vipsthumbnail-spy witness proves the second run performs no rebuild. Determinism of the signature string (fixed stat format, sorted find order) is what makes the cmp gate sound.

  • structuralnot applicable

    Bash stat/cmp string building over trusted cache-path components; no arithmetic beyond line counts, no encoding transform, no memory surface. The one stat-race (file vanishing between find and stat) is dispositioned in the code as a bare continue with a tooling-limit record.

  • domainreviewedcache_version_coherent

    The rows cache is version-dependent data: the signature files carry explicit schema versions (v4 full, v3 fast) that the witness asserts on the first line, so a stale-schema cache cannot be served after the row format changes - the generation-gated lookup this class demands is implemented, not just claimed. Worst case it closes: an old-format cache left by a previous release silently parsed as new rows, mislabeling or mislaunching every image entry.

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-35

    Read omarchy-menu-images and menu-images-test.sh. The script computes a fast signature (directory path + mtime per image dir) and the reuse branch loads the cached rows file before any rebuild path when the signature matches; rows and signatures publish together under one lock. The dirs_unchanged condition models the signature-compare branch; no silent precondition. Formula conforms to the code.

    Cited code (1)

Obligations

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

The tests that discharge each obligation aren't available for a historical run

The evidence matrix behind each obligation comes from the live audit index, which can't be rebuilt for a past commit. Nothing here means unknown — not that the requirement has no obligations.

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 dirs_unchanged the image_selector shall eventually satisfy cached_rows_reused

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
#cached_rows_reuseddirs_unchangedResultProvesCovering test
1FFTdirs_unchanged
2FTFcached_rows_reusedExempted · defensive — a matching fast signature loads the rows file before any rebuild path runs, and rows plus signatures are published together under one lock; unchanged dirs with the reuse skipped needs a broken signature compare (reviewed: REVIEW-M6)
3TTTcached_rows_reused

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.

No findings affect this requirement

Nothing was flagged against this requirement in the pinned run.

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