From d64c71e4cf1fb405d1dd626b894fd1d6b11877eb Mon Sep 17 00:00:00 2001 From: sdolbec Date: Thu, 22 Oct 2026 14:21:28 -0400 Subject: [PATCH] Fix dock launcher test PID publication race --- mseries/OS9-HANDOFF.md | 10 ++++++++++ mseries/ROADMAP.md | 8 ++++++++ mseries/dock-tests/test-launcher.py | 17 ++++++++++++++--- 3 files changed, 32 insertions(+), 3 deletions(-) diff --git a/mseries/OS9-HANDOFF.md b/mseries/OS9-HANDOFF.md index dc2d86a33..5027ddbd1 100644 --- a/mseries/OS9-HANDOFF.md +++ b/mseries/OS9-HANDOFF.md @@ -1,3 +1,13 @@ +## Dock launcher regression harness startup race — 2026-10-22 + +PR #518's validation run [39770268132](https://github.com/techmore/ElementaryOS_MSeries/actions/runs/39770268132) +exposed a test-only race: the SIGHUP case treated creation of the fake dock's PID file as proof that its contents had +been written. The harness now waits for a numeric PID and stops waiting if the wrapper exits. The focused launcher suite +passes 8/8 locally. No production launcher behavior, installed software, dock service, kernel, boot or hardware state +changed. PR #518 remains blocked on its separate source-preparation failure and base-branch conflict; wip4 has not been +built or staged. Next: land this harness fix after review, then refresh #518 against current `dev` and retry only when its +pinned-source preparation is viable. + ## Compositor: lock screen shows typing again; lock on idle — 2026-10-22 (Claude Code) Owner: "the screen saved to login comes up … there is no keyboard feedback", and asked for lock on idle honouring diff --git a/mseries/ROADMAP.md b/mseries/ROADMAP.md index 9c1dc93b8..58f675ea6 100644 --- a/mseries/ROADMAP.md +++ b/mseries/ROADMAP.md @@ -61,6 +61,14 @@ suspend and controlled power remain open. Read latest handoff before proceeding. # Roadmap, features and follow-ups (MacBook Pro 14" M1 Pro, elementary OS 9 on Asahi) +## Dock launcher regression harness startup race — 2026-10-22 + +The #518 PR validation run [39770268132](https://github.com/techmore/ElementaryOS_MSeries/actions/runs/39770268132) +found that the fake dock child PID file could exist before its contents were written. The SIGHUP test now waits for a +numeric PID and detects an early wrapper exit; the focused suite passes 8/8. This changes test synchronization only and +does not qualify the wip4 kernel candidate. PR #518 remains conflicted with `dev`, and its unified72 source preparation +needs a fresh successful pinned-source fetch before kernel build or payload inspection can run. + ## Factory speaker protection wired into ARM64 images — 2026-10-21 Ubuntu Resolute `speakersafetyd` 1.1.2-4 now ships in the Apple Silicon overlay, diff --git a/mseries/dock-tests/test-launcher.py b/mseries/dock-tests/test-launcher.py index 6ce9e78fb..cf49ce637 100644 --- a/mseries/dock-tests/test-launcher.py +++ b/mseries/dock-tests/test-launcher.py @@ -70,10 +70,21 @@ def cleanup(): process.wait() self.addCleanup(cleanup) deadline = time.monotonic() + 3 - while not self.child_pid.exists() and time.monotonic() < deadline: + child = None + while time.monotonic() < deadline: + if process.poll() is not None: + break + try: + value = self.child_pid.read_text().strip() + except FileNotFoundError: + value = '' + if value.isdecimal(): + child = int(value) + break time.sleep(.01) - self.assertTrue(self.child_pid.exists()) - return process, int(self.child_pid.read_text()) + self.assertIsNotNone(child, 'dock child did not publish a PID before timeout') + self.assertGreater(child, 0) + return process, child def test_user_disabled_blocks_patched_and_stock_fallback(self): marker = self.home / '.config/mseries/dock/user-disabled'