Repository navigation
fix(shell): the catalog tests read the build's apps, not other tests' probes - #293
Merged
Merged
Conversation
The supervisor saw the kernel end (its stdout closing, or its exit status) and read the stderr tail at once, but stderr is copied into the tail by a task of its own. The line the kernel wrote just before it exited could still be in the pipe, so the reason lost it: CI's `a_kernel_that_dies_closes_its_connections_with_its_last_words` failed with "the kernel closed its output: fake kernel up", without the "asked to exit" the fake kernel wrote last. The tail is now read after the kernel is stopped and the stderr task has reached the end of the pipe (bounded at 2 s, for a process the kernel started that still holds the pipe). Failed reasons get the same complete tail. The test asks for the last words themselves, not just "exit". Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… probes The glance tile tests register probe system apps (os.glancetile, os.glanceinput, os.glancequiet, os.glancesweep) in App Hub's system-app registry. That registry is process-wide, has no removal, and is the one `system_card_apps` lists, so a catalog test running after a glance test in the same process saw the probes as launcher rows: `bundled_apps_open_without_catalog_files_or_child_processes` failed its catalog comparison 7 of 10 times beside `glance_card::` on main, and `the_system_apps_ship_as_card_apps` compares the same list. Tests now register their system apps through `apps::test_system_apps::register`, which notes the id before it registers it, and the tests of the build's own catalog leave noted ids out. Production code is unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ymote
force-pushed
the
fix/flaky-bundled-apps-catalog
branch
from
October 2, 2026 20:57
11f34b4 to
57d36f3
Compare
Contributor
Author
|
Merged in a merge train; local CI (Mac with rom toolchain + --linux-host) passed on the train head 72e5d55, which contains this PR.
The train was #291, #293, #297, #294, #298, #295, #296, #299, #300 and #292, on main f6678b5. After the last merge, main 301be0c has the tested head's tree. |
This was referenced Oct 2, 2026
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes the shell test that fails beside the glance tile tests,
apps::tests::bundled_apps_open_without_catalog_files_or_child_processes, and its siblingapps::tests::the_system_apps_ship_as_card_apps, which compares the same list.Cause
The glance tile tests register probe system apps (
os.glancetile,os.glanceinput,os.glancequiet,os.glancesweep) withoctosense_appstore::system::register_system_app. That registry is process-wide, has no removal, and is exactly whatsystem_card_apps(), and with itbundled_catalog(), lists. Any catalog test that ran after a glance test in the same process therefore saw the probes as launcher rows. Which test ran first decided the outcome.Fix
Only test code changes; production code is untouched.
apps::test_system_apps(cfg(test)):registernotes a test's system-app id, then registers it.is_test_appanswers whether an id was noted.register_test_appregisters through it.bundled_apps_open_without_catalog_files_or_child_processes,bundled_apps_receive_same_base_theme_without_recreation,the_system_apps_ship_as_card_apps) read the catalog, then drop rows whose manifest id a test noted (build_rows). The note comes before the registration and the filter after the read, so a probe the catalog lists has always been noted. Anything else unexpected still fails the comparison.The scenario tests'
os.newsfixture is left as it is: it runs only withOCTOS_SCENARIO_TEST_KERNEL, in its own filtered run.Evidence
All runs were on the Linux build host. "main" is the shell test binary built at b221f7b; "fix" is this branch.
apps::tests::bundled_apps_open_without_catalog_files_or_child_processes apps::tests::the_system_apps_ship_as_card_apps glance_card::, 50×app_chat:: apps::tests:: glance_card::, 50×octosense-shell --libsuite with the real kernel, 50×cargo test --locked --features mobile-apps -p octosense-shell --lib)Not part of this flake, and seen in both columns of the whole-suite runs:
app_chat::tests::the_panel_opens_a_sharing_context_and_sends_person_turns_there(1 of 50 on main, 5 of 50 with the fix) is an existing race on the process-wide approvals store.approvals::tests::the_relay_gets_decisions_made_before_it_was_installedcallsinit_memory()unconditionally, which drops app_chat's consent mid-test. Besideapprovals::alone it fails 50 of 50 on main.mobile_island::tests::a_fourth_activity_docks_the_oldest_finished_else_the_least_important(1 of 30 on both).sandbox::tests::a_program_reached_through_a_link_outside_its_roots_starts(ETXTBSY).clients::tests::every_registered_app_names_a_real_cratefailed in every run on both binaries. It needs cargo's[env], which a test binary run directly does not have.🤖 Generated with Claude Code