Summary
promote-to-testing in .github/workflows/post-testing-e2e.yml has been skipped
on essentially every run since 2026-06-22, because the matrix leg
run-e2e / smoke,common / GNOME 50 — smoke-a fails. The failure is not
6 days old — it is ~46 days old and 100% reproducible.
Filed because this has had no tracking issue.
1. Blast radius
gh run list --workflow post-testing-e2e.yml --limit 300 (back to 2026-06-16):
| conclusion |
runs |
| failure |
209 |
| skipped |
89 |
| success |
2 |
The only two successes were 27922429853 and 27922740150, both on
2026-06-22. Every run since has been failure (or skipped when the
upstream build didn't qualify). promote-to-testing has therefore been dead
for ~46 days.
Registry state (skopeo inspect docker://ghcr.io/projectbluefin/bluefin:testing):
Digest: sha256:bf615b200faefc44b50232ecc8a3eb21490e88dd9316b528b27f54472122611d
Created: 2026-08-04T16:32:43Z
Tags on this version: testing, testing-20260804, testing-44.20260804
So :testing is ~2.5 days stale as of 2026-08-07.
⚠️ Secondary finding — the gate is being bypassed
sha256:bf615b20… is the exact digest that run
30931237054
tested and FAILED (IMAGE: ghcr.io/projectbluefin/bluefin@sha256:bf615b20…),
and in that run promote-to-testing was skipped.
build-image-testing.yml passes publish_stream_tag: "false", and
projectbluefin/actions/.github/workflows/reusable-build.yml@v1 (compute-push-tags,
~L375–392) is supposed to exclude the bare stream tag for exactly this reason.
Yet the bare testing tag landed on that digest anyway. No other workflow in
this repo writes :testing (promote-testing-to-main.yml does not; nightly.yml
and pr-validation.yml only read it).
This needs investigation in projectbluefin/actions: either the
compute-push-tags output is not honored by the push step (e.g. just tag-images
tags DEFAULT_TAG locally and a later push publishes all local tags), or something
else re-tags. Net effect: :testing is both stale and pointing at an
e2e-failing digest — the worst of both worlds.
2. The exact error
Failing leg: run-e2e / smoke,common / GNOME 50 — smoke-a.
Identical across every run sampled (30931237054 / 30833806016 / 30758889324,
and as far back as 28148474893 on 2026-06-25).
The whole firefox.feature file fails, and survives both @retry passes:
Failing scenarios:
bluefin-tests/tests/smoke/features/firefox.feature:17 Address bar is present and focusable
bluefin-tests/tests/smoke/features/firefox.feature:21 Navigating to about:blank loads successfully
bluefin-tests/tests/smoke/features/firefox.feature:26 New tab opens via Ctrl+T and tab count increases
bluefin-tests/tests/smoke/features/firefox.feature:30 Closing tab via Ctrl+W reduces tab count
bluefin-tests/tests/smoke/features/firefox.feature:35 Navigating to a real URL loads the page
bluefin-tests/tests/smoke/features/firefox.feature:40 Firefox closes cleanly via Ctrl+Q
0 features passed, 1 failed, 0 skipped
0 scenarios passed, 6 failed, 2 skipped
Traceback:
File "bluefin-tests/tests/smoke/features/steps/firefox_steps.py", line 103, in address_bar_is_present
context.firefox_address_bar = _address_bar(context)
File "bluefin-tests/tests/smoke/features/steps/firefox_steps.py", line 63, in _address_bar
assert matches or bars, "Firefox address bar not found"
AssertionError: Firefox address bar not found
and, for the Ctrl+T/Ctrl+W scenarios:
AssertionError: Firefox tab list not found (_tab_count, roleName == "page tab list")
AssertionError: Firefox is still visible in the AT-SPI tree (Ctrl+Q teardown)
Interpretation: Firefox starts and is present in the AT-SPI tree, but its
internal accessible tree is never populated — no entry, no page tab list.
The preceding scenario "Firefox launches and main window is accessible" passes,
but that is a false pass: _firefox_window() accepts roleName in {"frame", "filler"},
and a bare filler stub satisfies it even when Firefox's ATK bridge never activated.
Consistent with Firefox not having accessibility enabled at process start
(GNOME_ACCESSIBILITY=1 / accessibility.force_disabled=0) in the headless
QEMU GNOME 50 session. The suite launches it as a plain firefox command
(FIREFOX_LAUNCH_TARGETS[0]) with no a11y env.
AT-SPI itself is up in the VM — from the same journal:
at-spi2-registryd[6001]: SpiRegistry daemon is running with well-known name - org.a11y.atspi.Registry
Started org.gnome.SettingsDaemon.A11ySettings.service - GNOME accessibility service.
which is why the separate gnome_accessibility.feature:33 AT-SPI registry daemon is running
first-pass failure also looks like a bad assertion (it is dbus-activated as
dbus-:1.19-org.a11y.atspi.Registry@0.service, not a statically named unit).
Other first-pass-only failures that clear on retry (i.e. flake, not the blocker):
bluefin_desktop.feature:18 Dash to Dock is visible and
gnome_apps.feature:6 Ptyxis terminal launches successfully.
Only firefox.feature fails deterministically through all retries.
3. First bad run
- Last green: 27922740150 — 2026-06-22T00:38:22Z
- First red after it: 28148474893 — 2026-06-25T05:14:07Z
(job 83360626356), already failing the identical six firefox.feature
scenarios. Everything between was skipped.
Nothing in bluefin's own tree explains it. projectbluefin/testsuite
tests/smoke/features/steps/firefox_steps.py has been untouched since
774f7696 (2026-06-21), and firefox.feature since f66fb71f (2026-06-22T04:23Z) —
i.e. the last change to the Firefox feature file landed between the last green
run and the first red one. ~50 other testsuite commits landed in that same window
(2026-06-22 → 2026-06-25), including a wave of GNOME 50 quarantine/AT-SPI fixes
(3f2d10cd, 6a289153, 6b48898c, 984d2eaa), and 51238645
"docs(ops): document common suite runner model and pre-existing smoke failures".
4. Root-cause classification
Broken test in projectbluefin/testsuite, not a bluefin image regression.
- Bluefin ships Firefox as an RPM (
build_files/packages/base.toml), unchanged.
- The failure is a missing AT-SPI subtree, not a Firefox launch failure —
Firefox does start.
- No bluefin-side change correlates with 2026-06-22 → 2026-06-25.
- The fix (enable Firefox accessibility before launch, and stop treating a bare
filler node as a healthy main window) belongs in
projectbluefin/testsuite/tests/smoke/features/steps/firefox_steps.py.
Plus the separate projectbluefin/actions stream-tag leak described in §1.
5. Unblock criteria
- testsuite: launch Firefox with
GNOME_ACCESSIBILITY=1 (and/or set
accessibility.force_disabled=0 in the profile) before the smoke run, and
tighten _firefox_window() so a filler-only tree fails "main window is
accessible" instead of falsely passing.
- testsuite: fix
gnome_accessibility.feature:33 to accept the
dbus-activated org.a11y.atspi.Registry unit name.
- testsuite: stabilise or
@retry-tag the Dash-to-Dock and Ptyxis
first-pass flakes.
- actions: confirm
publish_stream_tag: "false" actually prevents the bare
:testing tag from being pushed; add a regression guard.
- bluefin: once (1)–(3) land, one green
Post-Testing E2E run with
promote-to-testing: success closes this.
Explicitly NOT the fix
Do not add always(), continue-on-error, or drop run-e2e from
promote-to-testing's needs:. That promotes an unverified digest and is the
failure mode a sibling PR was already closed for.
Related
Filed by an automated diagnosis pass; evidence gathered from
gh run view --log on runs 30931237054, 30833806016, 30758889324, 29736070134,
28148474893, and skopeo inspect of ghcr.io/projectbluefin/bluefin:testing.
Summary
promote-to-testingin.github/workflows/post-testing-e2e.ymlhas beenskippedon essentially every run since 2026-06-22, because the matrix leg
run-e2e / smoke,common / GNOME 50 — smoke-afails. The failure is not6 days old — it is ~46 days old and 100% reproducible.
Filed because this has had no tracking issue.
1. Blast radius
gh run list --workflow post-testing-e2e.yml --limit 300(back to 2026-06-16):The only two successes were
27922429853and27922740150, both on2026-06-22. Every run since has been
failure(orskippedwhen theupstream build didn't qualify).
promote-to-testinghas therefore been deadfor ~46 days.
Registry state (
skopeo inspect docker://ghcr.io/projectbluefin/bluefin:testing):So
:testingis ~2.5 days stale as of 2026-08-07.sha256:bf615b20…is the exact digest that run30931237054
tested and FAILED (
IMAGE: ghcr.io/projectbluefin/bluefin@sha256:bf615b20…),and in that run
promote-to-testingwasskipped.build-image-testing.ymlpassespublish_stream_tag: "false", andprojectbluefin/actions/.github/workflows/reusable-build.yml@v1(compute-push-tags,~L375–392) is supposed to exclude the bare stream tag for exactly this reason.
Yet the bare
testingtag landed on that digest anyway. No other workflow inthis repo writes
:testing(promote-testing-to-main.ymldoes not;nightly.ymland
pr-validation.ymlonly read it).This needs investigation in
projectbluefin/actions: either thecompute-push-tagsoutput is not honored by the push step (e.g.just tag-imagestags
DEFAULT_TAGlocally and a later push publishes all local tags), or somethingelse re-tags. Net effect:
:testingis both stale and pointing at ane2e-failing digest — the worst of both worlds.
2. The exact error
Failing leg:
run-e2e / smoke,common / GNOME 50 — smoke-a.Identical across every run sampled (30931237054 / 30833806016 / 30758889324,
and as far back as 28148474893 on 2026-06-25).
The whole
firefox.featurefile fails, and survives both@retrypasses:Traceback:
and, for the Ctrl+T/Ctrl+W scenarios:
Interpretation: Firefox starts and is present in the AT-SPI tree, but its
internal accessible tree is never populated — no
entry, nopage tab list.The preceding scenario "Firefox launches and main window is accessible" passes,
but that is a false pass:
_firefox_window()acceptsroleName in {"frame", "filler"},and a bare
fillerstub satisfies it even when Firefox's ATK bridge never activated.Consistent with Firefox not having accessibility enabled at process start
(
GNOME_ACCESSIBILITY=1/accessibility.force_disabled=0) in the headlessQEMU GNOME 50 session. The suite launches it as a plain
firefoxcommand(
FIREFOX_LAUNCH_TARGETS[0]) with no a11y env.AT-SPI itself is up in the VM — from the same journal:
which is why the separate
gnome_accessibility.feature:33 AT-SPI registry daemon is runningfirst-pass failure also looks like a bad assertion (it is dbus-activated as
dbus-:1.19-org.a11y.atspi.Registry@0.service, not a statically named unit).Other first-pass-only failures that clear on retry (i.e. flake, not the blocker):
bluefin_desktop.feature:18 Dash to Dock is visibleandgnome_apps.feature:6 Ptyxis terminal launches successfully.Only
firefox.featurefails deterministically through all retries.3. First bad run
(job
83360626356), already failing the identical sixfirefox.featurescenarios. Everything between was
skipped.Nothing in bluefin's own tree explains it.
projectbluefin/testsuitetests/smoke/features/steps/firefox_steps.pyhas been untouched since774f7696(2026-06-21), andfirefox.featuresincef66fb71f(2026-06-22T04:23Z) —i.e. the last change to the Firefox feature file landed between the last green
run and the first red one. ~50 other testsuite commits landed in that same window
(2026-06-22 → 2026-06-25), including a wave of GNOME 50 quarantine/AT-SPI fixes
(
3f2d10cd,6a289153,6b48898c,984d2eaa), and51238645"docs(ops): document common suite runner model and pre-existing smoke failures".
4. Root-cause classification
Broken test in
projectbluefin/testsuite, not a bluefin image regression.build_files/packages/base.toml), unchanged.Firefox does start.
fillernode as a healthy main window) belongs inprojectbluefin/testsuite/tests/smoke/features/steps/firefox_steps.py.Plus the separate
projectbluefin/actionsstream-tag leak described in §1.5. Unblock criteria
GNOME_ACCESSIBILITY=1(and/or setaccessibility.force_disabled=0in the profile) before the smoke run, andtighten
_firefox_window()so afiller-only tree fails "main window isaccessible" instead of falsely passing.
gnome_accessibility.feature:33to accept thedbus-activated
org.a11y.atspi.Registryunit name.@retry-tag the Dash-to-Dock and Ptyxisfirst-pass flakes.
publish_stream_tag: "false"actually prevents the bare:testingtag from being pushed; add a regression guard.Post-Testing E2Erun withpromote-to-testing: successcloses this.Explicitly NOT the fix
Do not add
always(),continue-on-error, or droprun-e2efrompromote-to-testing'sneeds:. That promotes an unverified digest and is thefailure mode a sibling PR was already closed for.
Related
run-upgrade-test(lifecycle) is already disabled as a gate for thesame class of GNOME 50 AT-SPI breakage, and is blocked behind this same
instability.
of this).
Filed by an automated diagnosis pass; evidence gathered from
gh run view --logon runs 30931237054, 30833806016, 30758889324, 29736070134,28148474893, and
skopeo inspectofghcr.io/projectbluefin/bluefin:testing.