Conversation
…ainer in the simulator
…nd Back and Forward by key equivalent
|
Preview deployment for your docs. Learn more about Mintlify Previews.
💡 Tip: Enable Automations to automatically generate PRs for you. |
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 failures behind every red
Docs,iOS TestsandmacOS Testsrun onmain. Each one has a root cause below. None of them is a timeout bump or a quarantine.Docs:
check-links.pyrejects a valid anchorfeatures/sql-editor.mdxlinks to/databases/oracle#pl%2Fsql(#2988).mint broken-links --check-anchorsaccepts it, butcheck-links.pyfailed it because the script made up its own slugs: every run of non-alphanumerics became-, so it expectedpl-sql. Mintlify does something else. It percent-encodes the title, keeps the escapes, and compares both sides aftercleanHeadingId. So "PL/SQL" becomespl/sql, and#pl%2Fsqlmatches it.The script now uses Mintlify's own rules (
slugifyandcleanHeadingIdfrom@mintlify/common4.2.816, the version CI pins), deduplication suffixes included. It checked out both ways:#pl-sql,#plsql,#ssl-tls) and accept the same six good ones.verify.sh docsnever ran this script, so the broken link passed a local check. It runs now.iOS: the test host traps before the first test
Every
iOS Testsrun since #2980 dies with "Test crashed with signal trap before establishing connection". The crash report in the result bundle shows the path:ConnectionListView's.task(id: isSyncEnabled)runs.IOSSyncCoordinator.accountStatus(), which builds aCloudKitSyncEngine.CKContainer, and CloudKit traps: "your process must have a com.apple.developer.icloud-services entitlement".CI builds the host with
CODE_SIGNING_ALLOWED=NO, so it has no entitlements. The engine already handles that case:hasICloudEntitlement()lets it skip the container. But the check readSecTaskon macOS and returnedtrueon every other platform. #2980 was the first change to reach CloudKit at launch while sync is off.CloudKitEntitlementnow answers the question on each platform:SecTask, as before.__TEXT,__entitlementssection Xcode embeds in the main executable when it signs a simulator build. An unsigned build has no section.true, because an iOS app cannot launch without the signature that carries its entitlements.A service only counts when it is
CloudKitorCloudKit-Anonymous, which is CloudKit's own rule.iOS: tests the crash had been hiding
Both came in with #2986, after the host had already stopped launching, so neither had ever run on CI. The first CI run of this PR got past the launch. It then lost
BottomSafeAreaBarLayoutTests/barClearsTheTabBar()to its one-minute limit, and the timeout took the host down, so 284 later tests never ran.barClearsTheTabBarwaited for a layout change with no bound. If the final layout never met its condition, it waited until the time limit. It passes on iOS 26.5 and iOS 27 simulators built with the Xcode 27 SDK. CI builds with Xcode 26.4.1, which I cannot reproduce locally. The wait now gives up after 10 quiet seconds and fails with the measured geometry: the list inset, the tab bar band and the marker frame. If it still fails on CI, the message says whether the bar really sits under the tab bar there.sealingLeavesMainActorFreespun onTask.yield()until the sealing task had started, andTask.yieldpromises nothing about ordering. In one full local run on iOS 26.5 the check ran after sealing had already finished. The sealing task now signals through anAsyncStreamthe moment it starts. That puts the test's continuation on the main queue before sealing can resume, whatever the load. Negative control: withConnectionExportCrypto.encryptchanged from@concurrentto@MainActor, the test fails. With@concurrentit passes.The same
Task.yield()spin in three more places: the second CI run lostScenePresenterTests/releasedEditorLetsGo()to the one-minute limit. That test spins onTask.yield()on the main actor, waiting for a@MainActortask thatSceneEditorHold.deinitstarts.QueryEditorViewModelTests(two cases) andQueryActivityControllerTestsspin the same way. All four now wait on the event itself:ObservedCondition.wait(until:)suspends onwithObservationTrackinguntil the@Observablemodel changes.endparks.Nothing in
TableProMobileTestsspins onTask.yield()any more.macOS UI: two causes behind every intermittent failure
Even the green run 35375539350 only passed because retries covered five first-attempt failures. All of them come from the two causes below.
"The sample database never finished opening" hit a different test on nearly every run.
Track, and its 1,000 rows usually reach the grid before the table list reaches the sidebar.The element trees from the failing runs all show the sidebar spinning and "Rows 1-1,000" in the grid. The comment that blamed runner contention for the 90s timeout was wrong: each shard runs on its own
macos-26VM. Two changes:objectBrowser(in:)), so a miss costs a few dozen elements.UITestPollnow pauses for at least as long as the check that missed took, so no query can take more than half the app's main thread. This covers every other wait in the suite too.The timeout goes back to 30s.
NavigationHistoryUITests.testForwardReturnsToTheTableBackSteppedAwayFromfailed both attempts in two of the last four runs.The test still waits for the item to validate as enabled in the open View menu. It then closes the menu and sends the item's key equivalent (⌃⌘[ or ⌃⌘]), which goes through
NSMenu.performKeyEquivalentand needs no screen position.Verification
TableProMobileTests, unsigned, on the iPhone 18 Pro simulator:mainit crashes the same way CI does (CloudKitSyncEngine.swift:41).TableProSyncTests: 129 pass, including the 6 newCloudKitEntitlementTests.verify.sh docs: PASS.check-links.pygives the same verdict asmint broken-linkson every anchor, as above.macOS Testsrun is their verification.swiftlint lint --stricton the changed Swift files: clean.UITestCase.swifthas two existingstorage_environment_defaultsfindings on lines this PR does not touch.Not addressed
The View menu scrolls on a 768pt-tall screen. A Go menu for Back and Forward, as Finder, Safari and Xcode have, or a submenu for the four result-tab commands, would shorten it. That is a product change and is not part of this PR.
No CHANGELOG entry: a signed app behaves the same as before. Only unsigned simulator builds, the docs checker and the tests change.