Skip to content

Sync lgse/strata#1771..#1816: QA scenarios replace the E2E suite, Omarchy variants per theme, ZIP root markers, Properties Copy path - #34

Merged
wmfeht merged 12 commits into
claude/friendly-cray-5931o5from
claude/friendly-cray-ftedea
Oct 24, 2026
Merged

wmfeht merged 12 commits into
claude/friendly-cray-5931o5from
claude/friendly-cray-ftedea

Conversation

@wmfeht

@wmfeht wmfeht commented Oct 22, 2026

Copy link
Copy Markdown
Owner

Closes #33

Stacked on #32. This PR's base is #32's branch (claude/friendly-cray-5931o5). It extends that open sync rather than starting from main, so this diff shows only the new range. When #32 merges, retarget this PR to main; it carries #32's commits underneath. (This session could push only to its own branch, so it could not add commits to #32 directly.)

Upstream range

4b9a6ace71017888b3a2124d7d911c5c664cc767 (#32's watermark) → c94eeb0020fa1154e11c741888f1b56d92ce70d6: 6 PRs and no direct pushes. sources.yaml holds the new watermark. The original watermark on main is fd632726…; #32 covers that part of the range.

The gh CLI is unauthenticated here and GraphQL is blocked, so drift and qa --pr ran on data/prs.jsonl rows built from the local upstream clone: first-parent merge commit, file list, and UTC commit time. PR bodies, issues and comments were read through the GitHub MCP tools. As in #28 and #32, data/prs.jsonl is not committed.

PR Type History row on
lgse/strata#1771 in-process QA harness feat(qa), triage app/infrastructure (fallback)
lgse/strata#1805 Properties Copy path fix(properties) browser/properties
lgse/strata#1809 pr-review skill chore(skills) app/infrastructure
lgse/strata#1807 QA scenarios are the only GUI suite test!, triage app/infrastructure (fallback)
lgse/strata#1816 Omarchy surfaces, variants per theme feat(theme) settings/themes
lgse/strata#1814 ZIP root directory entries fix(archives) operations/archives

Per node

No new or promoted nodes.

  • app/infrastructure
    • Three rows: #1807, #1809, #1771.
    • Now owns the qa harness and its tooling:
      • src/qa.rs, src/qa/**, src/ui/accessibility/qa.rs
      • scripts/qa*, scripts/headless/**, scripts/image_*.py
      • tests/container/**, tests/fixtures/harness.json
      • tests/qa.rs, tests/qa/*.rs, tests/qa/baselines/**, tests/qa/scenarios/visual_baselines
      • the agent skills, .gitignore, release.yml, test-image.yml, CONTRIBUTING.md, .dockerignore, .cursor/CLOUD.md, scripts/check.sh
    • Dropped the deleted E2E runner, workflow and harness paths.
    • docs moved from docs/e2e-testing.md to docs/testing.md.
    • New Design bullets, all citing #1771/#1806/#1807:
      • the qa Cargo feature is never in releases, enforced by CI and release checks;
      • the runner reads the widget tree, not AT-SPI;
      • the container guard;
      • QA scenarios are the only GUI suite, and QA runs in CI only on manual dispatch.
  • browser/properties (#1805)
    • The Copy path bullet recorded the bug as behavior. It now says a file gets no trailing / and a folder keeps one.
    • Two QA scenarios added to tests.
  • browser/view-modes/columns: new mirror bullet for #1771's commit 13e56a9, marked unverified. With Mirror columns on, Return on a folder still validating opens it.
  • operations/archives (#1814)
    • ZIP, 7Z and TAR directory entries naming only the root (., ./, ././, ZIP .\) are skipped.
    • A member that is only a file named ., or a directory ../ or foo/../, still fails.
    • New Design bullet: the check lives in one place, ExtractionSession::extract_member.
    • The encrypted-archive fixture was added to tests.
  • settings/themes: #1816 row; Design doc links bumped.
  • settings/themes/omarchy (#1816, #1815)
    • Summary, Following, a new Surfaces group, Variants (Lighter / Darker default / Contrast), a new Per-theme memory group with legacy migration, and Design rewritten.
    • color8 and the Original/High contrast names are gone.
  • app/accessibility
    • Design now explains why the QA reader records labels.
    • Adds the own-label over stand-in-label rule.
  • Test-path remap (#1807), about 60 nodes:
    • tests/e2e/scenarios/test_X.py → tests/qa/scenarios/X.
    • Mutations and fixtures moved to tests/qa/{mutations,fixtures}.
    • 13 mutation patches, mostly new, went to the nodes whose behavior they break: click-modes, keyboard-navigation, selection, location-bar, clipboard, conflicts, create, rename, and trash.
    • Seven scenarios deleted with no replacement were dropped: column_headers, preselected_hover, preview_media_controls, settings_search, thumbnail_size, kdeconnect_provider, integrations. The deleted preview-scrollbar.patch was dropped too.
    • tests/qa/scenarios/hidden_files went to settings/preferences.
  • reviewed_at → c94eeb0 on every drift-listed node, plus operations/trash, which needed the trash patch. Nodes whose content changed are review: draft. Nodes with only a SHA change kept their review state, such as app/packaging/aur and preview/quick-preview/folder-peek.

QA

Sweeps touched: all 8. Every sweep's reviewed_at is now c94eeb0, and every tools path now points at the QA tooling (scripts/qa.sh, scripts/qa-mutation.sh, scripts/qa-drive.sh, tests/qa/keyboard.rs, tests/fixtures/harness.json, scripts/headless/environment.py, docs/testing.md).

Probes added:

  • operations/archives: TAR .\ and RAR root markers; an encrypted ZIP with a ./ marker; Compress into child, parent and deep columns.
  • operations/rename, copy-or-move: coverage #1807 pruned.
  • browser/properties: Copy path from the current-folder dialog and from symlinks.
  • browser/view-modes/columns: an open still validating on a stalled or chmod-000 folder.
  • settings/themes/omarchy: missing or equal surface keys; mode against brightness; three themes in two windows; theme.name spellings; legacy high_contrast; a mixed valid and invalid [omarchy_variants].
  • integration: Open With without Always use; the action editor; Batch rename with Confirm on. These replace pruned scenarios.
  • app/infrastructure: --qa on plain and release builds.

Probes retired or reworded:

  • Retired the old Darker/High contrast probe names.
  • Retired rail accessible-name probes in app and devices; #1771's labels change nothing observable (see Review loop).
  • Reworded keyboard-layout lines: QA scenarios cover only the harness.json layout entries, so ch, cz, is and dvorak are manual-only.

Tier-1 plans (qa --pr N --tier 1):

  • #1805: primary browser/properties; sweep browser.
  • #1809: primary app/infrastructure; sweep app.
  • #1814: primary operations/archives; sweep operations.
  • #1816: primary settings/themes and omarchy, plus shared-test nodes; sweeps app (forced by src/style.css), browser and settings (preferences.rs and locale triggers).
  • #1771: 25 primaries across 6 sweeps; forced app (src/ui/window.rs) and browser (browser.rs, browser/events.rs).
  • #1807: 51 primaries across 7 sweeps.

Every changed file that exists at head now has an owner. The remaining "Unmapped changes" are files deleted later in the range: the tests/e2e/** suite, the test_-prefixed scenario folders #1807 renamed, docs/e2e-testing.md, and the scripts/e2e* scripts.

Needs a person

  • Tooling still assumes the E2E suite (people-owned, not edited):
    • scripts/featuremap.py E2E_PREFIX = "tests/e2e/", so index/qa.md now lists every node under "Nodes without E2E scenarios". It should probably recognize tests/qa/scenarios/.
    • qa --pr prints ./scripts/e2e.sh … commands.
    • qa/README.md cites tests/e2e/harness/**, scripts/e2e*, environment.py, browser.py, interaction.py, fixtures.py, scripts/e2e.sh and docs/e2e-testing.md, all gone at head. The replacements are scripts/qa.sh, scripts/qa-drive.sh, scripts/headless/environment.py, tests/fixtures/harness.json and docs/testing.md.
    • AGENTS.md's examples also cite tests/e2e/scenarios/….
  • Triage placements:
    • #1771 and #1807 rows sit on the fallback app/infrastructure; the QA harness is not shipped behavior.
    • #1771's one shipped fix, the columns mirror (commit 13e56a9, in no PR text), is cited on browser/view-modes/columns without a row. A person may want it to have a row.
  • Review state on path-only remaps: a test-path remap was treated as a content change, so those nodes are draft. One example is operations/drag-and-drop, which was reviewed. Decide whether a remap should keep reviewed.
  • Shortcut footer hover (#1816, second commit): a hovered F1 footer button gets an accent tint. It is not recorded, because only the commit states it and src/style.css is a sweep trigger, not node code. app/shortcut-reference already has a style-only hover bullet from #1680 as precedent.
  • settings/themes/omarchy tests: legacy_omarchy_variant_migrates_to_the_active_theme lives in the shared src/ui/preferences/tests/preferences.rs, owned by settings/preferences/storage.
  • Possible upstream bugs, found by code reading. A search of lgse/strata issues found none covering them:
    • One invalid value under [omarchy_variants] drops the whole table, because parse_preferences salvages per top-level key (src/ui/preferences.rs ~1968-2000). Every theme then falls back to Darker. docs/preferences.md says invalid values fall back "without resetting other preferences".
    • The legacy global omarchy_variant = "high_contrast" is lost if a save happens before Strata reads a valid Omarchy state, because it is never written back.
    • docs/file-providers.md says the file_providers QA scenarios exercise "sustained events", but #1807 deleted provider-continuous-events-progress and no remaining scenario creates the storm trigger.
    • #1771's body says scenario settings-text-size-keeps-switches is skipped "until its app race is fixed". No issue was found.
    • Double-clicking an archive right after extracting it does not extract again lgse/strata#1772 (archive double-click after extraction) is closed with no closing PR, and no node cites it.
  • Site (release-docs run, not this sync):
    • site/src/reference/archives.md still says only TAR ./ is skipped.
    • site/src/reference/themes.md and site/src/guide/themes.md still name Original/High contrast and omarchy_variant.
  • (unverified) claims added:
    • app/infrastructure Design:
      • without the qa feature, launch_mode treats --qa as the plain launch mode;
      • CI's x11rb check and the release usage: strata --qa check.
    • browser/properties: after Copy path, the button reads "Copied"; a non-native location copies its display path without a trailing /. Both are split out of an existing unverified bullet.
    • browser/view-modes/columns: the Mirror-on open of a folder still validating.
    • operations/archives: TAR and 7Z .\ entries, and a RAR root-only directory entry, are skipped.
    • settings/themes/omarchy:
      • an invalid optional color is ignored;
      • the hover, selection and border fallbacks (10%, 25%, 36%);
      • the variant row description;
      • Contrast syntax colors are measured against the window and pane surfaces only;
      • the 0.45 luminance and mode rule;
      • a whitespace-trimmed theme.name key;
      • omarchy_variant is never written back.

Review loop

Two rounds ran; round 2 had no blocking findings.

  • Round 1: 7 reviewers.
    • Blocking, refuted by a verifier: several reviewers held that #1771's explicit accessible labels changed shipped behavior on preview, browser and devices controls.
      • Before #1771, the E2E suite already found those controls over AT-SPI by the same names; GTK derived them from the tooltips. Examples: test_quick_preview.py uses name="Close preview (Space)", and test_preview_session.py uses "Open in default application".
      • The labels exist so the --qa reader, which has no GTK getter, can see them.
      • So no Behavior bullets were added. The writer's two rail-label bullets on app/accessibility and the rail-name probes were removed under the same reasoning.
    • Blocking, accepted: the columns mirror bullet rests on a commit message, so it is now (unverified) and states the Mirror-on condition.
    • Minor, fixed:
      • archives: the still-refused bullet is limited to an only member and includes links; the .\ bullets were consolidated; Design reworded;
      • Omarchy Contrast and luminance wording;
      • infrastructure: --qa and container-guard wording;
      • window: the prgname clause;
      • a missing Properties scenario;
      • sentence lengths;
      • integration portal setup and two probes;
      • preview layout steps;
      • settings probes.
  • Round 2: 4 reviewers, no blocking findings. Minor fixes:
    • the Omarchy mode rule covers unknown values;
    • hidden_files moved to settings/preferences;
    • operations probes for coverage #1807 pruned;
    • an #1771 citation on the invariant-checks bullet;
    • the #1807 row shortened;
    • the qa-drive Setup line.
  • Disputed, left as is: the browser reviewer flagged that keyboard_dispatch.rs, the only test of the mirror fix, is not in columns' tests. It is a shared app/window test module, so it stays there.

Generated by Claude Code

…rchy variants per theme, ZIP root markers, Properties Copy path

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016cpLemtNiNbF8xyDV5PcFB
…ording, columns mirror, probes

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016cpLemtNiNbF8xyDV5PcFB
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016cpLemtNiNbF8xyDV5PcFB
…ndow titles, signed installer, activation GDK_DEBUG, reopen closed tabs

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Fazi6bx93e32CsuE8zqzMx
…r, tabs, thumbnails

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Fazi6bx93e32CsuE8zqzMx
…taller, preview gaps

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Fazi6bx93e32CsuE8zqzMx
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Fazi6bx93e32CsuE8zqzMx
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Fazi6bx93e32CsuE8zqzMx
Sync lgse/strata#1822..#1800: Enter target, STL thumbnails, folder window titles, signed installer, activation GDK_DEBUG, reopen closed tabs
@wmfeht
wmfeht merged commit 0906a76 into claude/friendly-cray-5931o5 Oct 24, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants