Skip to content

chore(stats): delete the unreachable reading-stats feature - #1472

Merged
mauricecarrier7 merged 1 commit into
developfrom
chore/remove-unreachable-stats
Sep 15, 2026
Merged

mauricecarrier7 merged 1 commit into
developfrom
chore/remove-unreachable-stats

Conversation

@mauricecarrier7

@mauricecarrier7 mauricecarrier7 commented Sep 14, 2026

Copy link
Copy Markdown
Contributor

Bottom of a three-PR stack. #1477 (localization) is based on this branch and #1478 on that. Merge this first; the other two retarget as they land.

What

Deletes the reading-stats feature — 20 source files, 7 test files, and one more test that depends on a type defined inside a deleted view.

It is a prototype that was never wired in. From outside Palace/Stats/ there are zero references to it:

check refs
StatsView( constructed 0
AppTab.stats referenced 0
.stats referenced 0
In any storyboard / xib / plist 0
Deep links mentioning stats 0

case stats was declared in AppTabRouter and never used, and StatsTab gated itself behind a readingStatsEnabled remote flag nothing else reads. Twenty files compiled into both targets to render a screen no patron could open.

Why now

Found while auditing localization coverage for PP-5094: these screens were being translated into four languages before anyone asked whether they were reachable.

What was checked, not assumed

  • ReadingFormat is duplicated — a public one in the PalaceReadingPosition package used app-wide, and an internal copy in Stats. ReadingPositionTests uses the package one and only named the Stats file in a comment. Untouched.
  • Four other test files matched a grep for "Badge" in the tab-bar, app-icon and audiobook-format senses. Untouched.
  • PalaceTests/UIPolish/BadgeUnlockPhaseTests.swift is deleted — it tests BadgeUnlockPhase, defined inside BadgesView.swift.

Tooling

Adds scripts/pbxproj_remove_swift.rb, the counterpart to the existing pbxproj_add_swift.rb. A source file lives in six places across two targets and hand-editing project.pbxproj is forbidden; a partial removal leaves a dangling build file that fails with no useful message. 76 references dropped across 28 files, empty groups pruned.

Verification

  • ** TEST BUILD SUCCEEDED ** on the Palace (DRM) scheme, 0 compile errors — built on this branch alone, off develop, not alongside the localization work.
  • No submodule gitlink changes in the diff.

Not done

No test asserts the feature stays gone; a future commit could reintroduce an unreachable screen the same way and nothing would notice.

Deferred

%@ day%@ in StreakView passed the English plural morpheme "s" as a format argument and could not render correctly in German or Italian at any count. It dies with this commit — if the feature is ever revived it needs a .stringsdict entry rather than a literal suffix.

🤖 Generated with Claude Code

https://claude.ai/code/session_015xqE9uAiVMUc7kKHsXT17w

@mauricecarrier7
mauricecarrier7 force-pushed the chore/remove-unreachable-stats branch from fe64148 to 8686bf7 Compare September 15, 2026 13:32
@github-actions

github-actions Bot commented Sep 15, 2026

Copy link
Copy Markdown

🏗️ CodeAtlas Ledger Analysis

✅ All Checks Passed


♿ Accessibility (via AccessLint)

💡 Static analysis against WCAG 2.1 AA guidelines for iOS accessibility.

No accessibility issues detected


🏛️ Architecture Analysis

Metric Value ℹ️ What This Means
Components 45 Distinct modules/layers detected in your codebase
Dependency Cycles 2 Distinct circular dependencies (A→B→C→A). Goal: 0
Largest Cycle 10 components How many components are mutually tangled in the biggest cycle
Layer Violations 2 Dependencies that break architectural boundaries
Hotspots 14 Files with high complexity + frequent changes
Avg Coupling 5.02 How interconnected modules are (lower is better, <1.0 is good)

ℹ️ This diff changed 0 architecture-relevant files — the numbers above are the repo baseline, unchanged by this PR.

⚠️ 2 layer violation(s) — see Architecture Findings below for the offending dependency edge(s).

🔄 Dependency Cycles (2)

2 distinct dependency cycles (largest spans 10 components).

The analyzer reports 12 entries — those are cycle paths through the cycles listed below, not 12 separate problems. Adding one edge inside a tangle multiplies the path count without changing the architecture, so track the cycles instead.

Cycle 1 — 10 components, 18 edges between them

Accounts, AppRating, ErrorHandling, FeatureFlags, Logging, Network, Notifications, OPDS2, Settings, SignInLogic

edges
Accounts → ErrorHandling
Accounts → Network
Accounts → OPDS2
Accounts → SignInLogic
AppRating → Settings
ErrorHandling → Logging
FeatureFlags → AppRating
Logging → Accounts
Network → Accounts
Notifications → Accounts
OPDS2 → Accounts
Settings → Accounts
Settings → FeatureFlags
Settings → Notifications
Settings → SignInLogic
SignInLogic → Accounts
SignInLogic → Notifications
SignInLogic → Settings

Cycle 2 — 3 components, 4 edges between them

Audiobooks, Book, CatalogUI

edges
Audiobooks → Book
Book → Audiobooks
Book → CatalogUI
CatalogUI → Book

Discounted TriageBotUI → Palace — declared a known false positive in tools/ledger/ledger-config.json.

📋 Architecture Findings
  • hotspot: PalaceNetwork is a coupling hotspot with 14 dependents
  • hotspot: PalaceBookRegistry is a coupling hotspot with 18 dependents
  • hotspot: PalaceLogging is a coupling hotspot with 32 dependents
  • hotspot: PalaceCatalog is a coupling hotspot with 22 dependents
  • hotspot: Accounts is a coupling hotspot with 12 dependents
  • hotspot: PalaceBookModel is a coupling hotspot with 21 dependents
  • hotspot: PalacePreferences is a coupling hotspot with 15 dependents
  • hotspot: PalaceAuth is a coupling hotspot with 8 dependents
  • hotspot: Logging is a coupling hotspot with 10 dependents
  • hotspot: PalaceUIKit is a coupling hotspot with 7 dependents
  • hotspot: PalaceFeatureFlags is a coupling hotspot with 6 dependents
  • hotspot: Network is a coupling hotspot with 7 dependents
  • hotspot: TriageBotCore is a coupling hotspot with 6 dependents
  • hotspot: ErrorHandling is a coupling hotspot with 6 dependents
  • layer_violation: TriageBotUI (Presentation) depends on Palace (Application) - upward dependency
  • layer_violation: AppInfrastructure (Infrastructure) depends on PalaceBookModel (Domain) - upward dependency
  • orphan_component: BuildSupport has no dependencies and no dependents - possible orphan
  • orphan_component: Catalog has no dependencies and no dependents - possible orphan

🔍 Reachability Analysis

💡 Detects code that cannot be reached from entry points (dead code).

ℹ️ No architecture-relevant files in this diff — reachability not evaluated.


📊 0 files analyzed | 📦 Download Full Report

Powered by CodeAtlas Ledger
• Accessibility: AccessLint

@github-actions

github-actions Bot commented Sep 15, 2026

Copy link
Copy Markdown

🧪 Unit Test Results

📊 View Full Interactive Report

✅ ALL TESTS PASSED

8696 tests | 8680 passed | 0 failed | 14 skipped | ⏱️ 17m 12s | 📊 99.8% | 📈 48.8% coverage

All 991 classes (full matrix — click to expand)
Class Tests Passed Failed Skipped Duration
✅ AccessLintComplianceTests 11 11 0 0 109ms
✅ AccessibilityAnnouncementCenterTests 20 20 0 0 2.73s
✅ AccessibilityLabelTests 9 9 0 0 83ms
✅ AccessibilityPreferencesTests 26 26 0 0 1.52s
✅ AccessibilityServiceTests 11 11 0 0 448ms
✅ AccountAuthDocCarryoverTests 5 5 0 0 760ms
✅ AccountAuthSurfaceHostsTests 7 7 0 0 181ms
✅ AccountAwareNetworkTests 10 10 0 0 228ms
✅ AccountCredentialResolverTests 5 5 0 0 59ms
✅ AccountDetailCredentialStateTests 7 7 0 0 655ms
✅ AccountDetailPINVisibilityTests 25 23 0 2 4.36s
✅ AccountDetailSignOutConfirmationTests 2 2 0 0 311ms
✅ AccountDetailViewModelGapTests 1 1 0 0 44ms
✅ AccountDetailViewModelLeakTests 1 1 0 0 396ms
✅ AccountDetailViewModelSignedInDerivationTests 5 5 0 0 656ms
✅ AccountDetailViewModelTests 19 19 0 0 3.98s
✅ AccountDetailsAuthenticationIsBrowserBasedTests 10 10 0 0 197ms
✅ AccountDetailsNeedsAuthAggregateTests 10 10 0 0 72ms
✅ AccountDetailsURLTests 17 17 0 0 329ms
✅ AccountErrorReportingTests 1 1 0 0 1ms
✅ AccountModelGapTests 9 9 0 0 750ms
✅ AccountModelTests 20 20 0 0 2.17s
✅ AccountNetworkingSeamTests 2 2 0 0 188ms
✅ AccountProfileDocumentTests 25 25 0 0 2.12s
✅ AccountProfileGateLintTests 3 3 0 0 264ms
✅ AccountRegistryCacheSeamTests 3 3 0 0 32ms
✅ AccountRegistryLoaderSeamTests 3 3 0 0 11ms
✅ AccountRegistryStorePoolStarvationTests 3 2 0 1 125ms
✅ AccountRegistryStoreSeamTests 6 6 0 0 371ms
✅ AccountScopeAdapterTests 5 5 0 0 473ms
✅ AccountStateMachineTests 13 13 0 0 1.59s
✅ AccountSwitchBorrowReauthCouplingContractTests 4 4 0 0 1.32s
✅ AccountSwitchCleanupTests 8 8 0 0 208ms
✅ AccountSwitchIntegrationTests 8 8 0 0 171ms
✅ AccountSwitchLifecycleTests 9 9 0 0 1.81s
✅ AccountsManagerAccountIndexTests 7 7 0 0 531ms
✅ AccountsManagerAuthDocContractTests 1 1 0 0 121ms
✅ AccountsManagerCacheReadTests 4 4 0 0 556ms
✅ AccountsManagerCacheTests 16 16 0 0 1.36s
✅ AccountsManagerCancellationTests 5 5 0 0 688ms
✅ AccountsManagerCatalogLoadJoinTests 3 3 0 0 5.12s
✅ AccountsManagerCurrentAccountSwitchContractTests 5 5 0 0 466ms
✅ AccountsManagerFirstRunDecodeTests 3 3 0 0 489ms
✅ AccountsManagerGapTests 3 3 0 0 20ms
✅ AccountsManagerHelpersTests 12 12 0 0 316ms
✅ AccountsManagerIsolationLintTests 4 4 0 0 2.19s
✅ AccountsManagerLaunchSnapshotTests 13 13 0 0 11.29s
✅ AccountsManagerStateMachineWiringTests 18 18 0 0 10.51s
✅ AccountsManagerTests 51 48 0 3 2.14s
✅ AdobeActivationCoordinatorTests 4 4 0 0 34ms
✅ AdobeActivationDedupTests 8 8 0 0 1.71s
✅ AdobeActivationLicensorGraceTests 7 7 0 0 972ms
✅ AdobeActivationRefreshLicensorTests 16 16 0 0 2.12s
✅ AdobeActivationTests 6 6 0 0 1.10s
✅ AdobeCertificateGapTests 7 7 0 0 18ms
✅ AdobeClientTokenSplitTests 19 19 0 0 68ms
✅ AdobeDRMCharacterizationTests 21 21 0 0 489ms
✅ AdobeDRMErrorGapTests 3 3 0 0 62ms
✅ AdobeDRMErrorMappingTests 9 9 0 0 111ms
✅ AdobeDRMHandlerTests 12 12 0 0 587ms
✅ AdobeDRMServiceGapTests 2 2 0 0 189ms
✅ AdobeDeauthorizationTests 16 16 0 0 90ms
✅ AdobeLicensorRefreshTests 13 13 0 0 120ms
✅ AlertModelCoverageTests 6 6 0 0 33ms
✅ AlertModelRetryTests 7 7 0 0 131ms
✅ AlertModelTests 2 2 0 0 1ms
✅ AlertPresentationRawGuardLintTests 6 6 0 0 217ms
✅ AlertUtilsTests 20 20 0 0 1.20s
✅ AnnotationContractTests 3 3 0 0 188ms
✅ AnnotationDeviceIDTests 2 2 0 0 3ms
✅ AnnotationPostResponseContractTests 1 1 0 0 9ms
✅ AnnouncementChainTests 5 5 0 0 11ms
✅ AnnouncementTests 3 3 0 0 20ms
✅ AppContainerAudiobookFactoryTests 3 3 0 0 17ms
✅ AppContainerAuthCoordinatorRegistrationTests 3 3 0 0 3ms
✅ AppContainerImageLoaderInjectionTests 4 4 0 0 98ms
✅ AppContainerIsolationLintTests 8 8 0 0 8.40s
✅ AppContainerResetTests 5 5 0 0 241ms
✅ AppContainerTests 5 5 0 0 9ms
✅ AppContainerWithSignInModalSheetPresenterTests 2 2 0 0 12ms
✅ AppHealthViewModelTests 8 8 0 0 389ms
✅ AppLaunchTrackerExtendedTests 16 16 0 0 364ms
✅ AppLaunchTrackerTests 10 10 0 0 327ms
✅ AppLaunchTrackerWiringTests 2 2 0 0 64ms
✅ AppRatingServiceOverrideTests 3 3 0 0 13ms
✅ AppRatingServiceTests 9 9 0 0 141ms
✅ AppRouteTests 5 5 0 0 589ms
✅ AppTabHostMiniPlayerIntegrationTests 6 6 0 0 279ms
✅ AppTabHostViewBadgeCountTests 10 10 0 0 46ms
✅ AppTabRouterCoverageTests 4 4 0 0 37ms
✅ AppTabRouterGapTests 3 3 0 0 23ms
✅ AppTabSelectionBindingLintTests 2 2 0 0 44ms
✅ AppTabStackMemoryTests 11 11 0 0 221ms
✅ AppTabSwitchPreservesStacksTests 3 3 0 0 44ms
✅ ArrayExtensionsTests 6 6 0 0 651ms
✅ AudioBookmarkGapTests 6 6 0 0 203ms
✅ AudioEngineWrapperTests 8 8 0 0 182ms
✅ AudioInterruptionLogicTests 6 6 0 0 411ms
✅ AudioSessionActivatorTests 8 8 0 0 162ms
✅ AudiobookAccessibilityTests 7 7 0 0 365ms
✅ AudiobookBackgroundAudioTests 2 2 0 0 155ms
✅ AudiobookBearerTokenRecoveryTests 21 21 0 0 1.50s
✅ AudiobookBookmarkBusinessLogicConcurrencyTests 3 3 0 0 156ms
✅ AudiobookBookmarkBusinessLogicPositionWriteTests 9 9 0 0 539ms
✅ AudiobookBookmarkBusinessLogicTests 21 21 0 0 7.75s
✅ AudiobookChapterCompletionPauseTests 7 7 0 0 88ms
✅ AudiobookChapterTOCNormalizationTests 6 6 0 0 97ms
✅ AudiobookColdLoadRecoveryTests 4 4 0 0 21ms
✅ AudiobookContentGateTests 13 13 0 0 918ms
✅ AudiobookCrossVendorSmokeTests 4 4 0 0 89ms
✅ AudiobookDataManagerEmptyQueueTests 1 1 0 0 4ms
✅ AudiobookDataManagerErrorHandlingTests 5 5 0 0 335ms
✅ AudiobookDataManagerModelsTests 20 20 0 0 298ms
✅ AudiobookDataManagerNetworkSyncTests 5 5 0 0 204ms
✅ AudiobookDataManagerSaveTests 4 4 0 0 21ms
✅ AudiobookDataManagerStoreRecoveryTests 5 5 0 0 440ms
✅ AudiobookFileLoggerTests 15 15 0 0 395ms
✅ AudiobookFirstOpenHangTests 15 14 0 1 3.52s
✅ AudiobookLoadFailureSAMLReauthTests 10 10 0 0 1.03s
✅ AudiobookLoaderDispatchTests 7 7 0 0 805ms
✅ AudiobookLoaderFinalizeBuildTests 11 11 0 0 607ms
✅ AudiobookLoaderOPDSShapeMatrixTests 8 8 0 0 1.56s
✅ AudiobookLoaderPredicateTests 11 11 0 0 314ms
✅ AudiobookLoaderTests 2 2 0 0 1.21s
✅ AudiobookMorphingPlayerViewTests 26 26 0 0 470ms
✅ AudiobookNetworkValidationTests 3 3 0 0 64ms
✅ AudiobookOpenStateRaceTests 3 3 0 0 849ms
✅ AudiobookPhoneAlertContentTests 3 3 0 0 34ms
✅ AudiobookPlaybackStateTests 3 3 0 0 267ms
✅ AudiobookPlaybackTests 26 26 0 0 555ms
✅ AudiobookPlaytimesLifecycleTests 6 6 0 0 453ms
✅ AudiobookPositionAdapterContractTests 3 3 0 0 96ms
✅ AudiobookPositionPolicyValidatorTests 14 14 0 0 101ms
✅ AudiobookPositionRestoreTests 20 20 0 0 901ms
✅ AudiobookReadinessPlaybackContractTests 2 2 0 0 488ms
✅ AudiobookSAMLReauthTests 6 6 0 0 99ms
✅ AudiobookSessionErrorDescriptionTests 4 4 0 0 63ms
✅ AudiobookSessionErrorExtTests 4 4 0 0 24ms
✅ AudiobookSessionErrorTests 3 3 0 0 78ms
✅ AudiobookSessionManagerErrorMappingTests 6 6 0 0 123ms
✅ AudiobookSessionManagerFlagGatePresentationTests 4 4 0 0 167ms
✅ AudiobookSessionManagerPresenterMigrationTests 10 10 0 0 335ms
✅ AudiobookSessionManagerShutdownTests 12 12 0 0 1.29s
✅ AudiobookSessionPresenterLifecycleContractTests 3 3 0 0 403ms
✅ AudiobookSessionPresenterTests 31 31 0 0 1.68s
✅ AudiobookSessionStateTests 6 6 0 0 19ms
✅ AudiobookSessionStateTransitionTests 22 22 0 0 966ms
✅ AudiobookSkipIntervalSettingsTests 7 7 0 0 141ms
✅ AudiobookSleepTimerIntegrationTests 5 5 0 0 414ms
✅ AudiobookStorageLocationTests 3 3 0 0 25ms
✅ AudiobookTOCTests 18 18 0 0 306ms
✅ AudiobookTimeEntryTests 6 6 0 0 22ms
✅ AudiobookTimeTrackerEdgeTests 8 8 0 0 817ms
✅ AudiobookTimeTrackerLifecycleTests 5 5 0 0 1.17s
✅ AudiobookTimeTrackerTests 9 9 0 0 485ms
✅ AudiobookTrackCompletionTests 2 2 0 0 11ms
✅ AudiobookTypeRoutingTests 5 5 0 0 146ms
✅ AudiobookVendorAdapterTests 5 5 0 0 225ms
✅ AudiobookVendorRecoveryContractTests 1 1 0 0 84ms
✅ AudiobookmarkTests 4 4 0 0 38ms
✅ AuthCoordinatorTelemetryTests 5 5 0 0 461ms
✅ AuthDecisionEventEmissionTests 7 7 0 0 93ms
✅ AuthDocumentContractTests 2 2 0 0 126ms
✅ AuthDocumentLoaderSeamTests 6 6 0 0 527ms
✅ AuthDocumentVariantsContractTests 5 5 0 0 68ms
✅ AuthErrorCategoryTests 12 12 0 0 151ms
✅ AuthErrorProblemDocSeamTests 6 6 0 0 295ms
✅ AuthFlowSecurityTests 3 3 0 0 100ms
✅ AuthReducerTests 21 21 0 0 480ms
✅ AuthTypeTests 7 7 0 0 266ms
✅ AuthenticationTests 16 16 0 0 587ms
✅ BackgroundDownloadHandlerTests 28 28 0 0 747ms
✅ BackgroundDownloadTokenAccountTests 5 5 0 0 697ms
✅ BackgroundListenerTests 2 2 0 0 27ms
✅ BackgroundReconciliationContractTests 8 8 0 0 572ms
✅ BackgroundSessionRoutingTests 6 6 0 0 114ms
✅ BackupExclusionMigrationTests 3 3 0 0 73ms
✅ BasicAuthEmptyCredentialTests 4 4 0 0 6ms
✅ BearerTokenAdapterTests 5 5 0 0 139ms
✅ BearerTokenFulfillFlowTests 4 4 0 0 105ms
✅ BearerTokenRefreshTests 4 4 0 0 20ms
✅ BearerTokenResponseDetectionTests 7 7 0 0 47ms
✅ BeginningPositionPolicyTests 8 8 0 0 223ms
✅ BookAvailabilityFormatterTests 18 18 0 0 458ms
✅ BookButtonMapperHoldReadyTests 10 10 0 0 173ms
✅ BookButtonMapperTests 21 21 0 0 451ms
✅ BookButtonMapperViewModelTests 18 18 0 0 495ms
✅ BookButtonStateTests 8 8 0 0 25ms
✅ BookButtonTypeMetaTests 4 4 0 0 38ms
✅ BookButtonTypeTests 13 13 0 0 398ms
✅ BookCellModelActionTests 18 18 0 0 983ms
✅ BookCellModelCacheInvalidationTests 9 9 0 0 391ms
✅ BookCellModelCachePrefetchSafetyTests 9 9 0 0 204ms
✅ BookCellModelCacheTests 22 22 0 0 1.32s
✅ BookCellModelComputedPropertyTests 19 19 0 0 566ms
✅ BookCellModelLCPProgressTests 7 7 0 0 719ms
✅ BookCellModelOfflineTests 9 9 0 0 528ms
✅ BookCellModelProcessingStateTests 6 6 0 0 96ms
✅ BookCellModelRegistryBindingTests 4 4 0 0 1.37s
✅ BookCellModelStateTests 16 16 0 0 1.43s
✅ BookCellModelStreamingHTMLTests 2 2 0 0 162ms
✅ BookCellStateComprehensiveTests 14 14 0 0 205ms
✅ BookContentResetServiceTests 2 2 0 0 53ms
✅ BookDetailButtonRoutingTests 4 4 0 0 226ms
✅ BookDetailInfoValueLinkTests 5 5 0 0 41ms
✅ BookDetailLCPContentProgressTests 7 7 0 0 522ms
✅ BookDetailMetadataHydrationTests 6 6 0 0 70ms
✅ BookDetailMetadataMergeContractTests 5 5 0 0 399ms
✅ BookDetailOpenRoutingTests 3 3 0 0 177ms
✅ BookDetailViewModelAudiobookDismissTests 1 1 0 0 331ms
✅ BookDetailViewModelTests 91 91 0 0 7.99s
✅ BookFileManagerAccountScopingTests 5 5 0 0 680ms
✅ BookFileManagerSideloadResolutionTests 4 4 0 0 166ms
✅ BookFileManagerTests 8 8 0 0 221ms
✅ BookListViewAccessibilityTests 9 9 0 0 335ms
✅ BookPreviewTests 4 4 0 0 18ms
✅ BookRegistryReconciliationTableTests 10 10 0 0 50ms
✅ BookRegistryStoreTests 26 26 0 0 1.57s
✅ BookRegistrySyncReadinessTests 4 3 0 1 963ms
✅ BookRegistrySyncReentrancyTests 6 6 0 0 287ms
✅ BookRegistrySyncSideloadExemptionTests 2 2 0 0 189ms
✅ BookRegistrySyncTests 42 42 0 0 7.88s
✅ BookRegistrySyncTimeoutSeamTests 2 2 0 0 298ms
✅ BookReturnCleverReauthTests 1 1 0 0 23ms
✅ BookReturnServiceAuthCoordinatorTests 3 3 0 0 324ms
✅ BookReturnServiceContractTests 9 9 0 0 602ms
✅ BookReturnServiceTests 20 20 0 0 5.38s
✅ BookServiceAudiobookOpenTests 2 2 0 0 103ms
✅ BookSignInRedirectHandlerTests 8 8 0 0 202ms
✅ BookStateIntegrationTests 8 8 0 0 63ms
✅ BookmarkBusinessLogicExtendedTests 6 6 0 0 723ms
✅ BookmarkDeletionLogTests 3 3 0 0 218ms
✅ BookmarkDeviceIdMatchingTests 3 3 0 0 269ms
✅ BookmarkExistenceTests 4 4 0 0 345ms
✅ BookmarkManagerTests 24 24 0 0 1.04s
✅ BookmarkSortingTests 1 1 0 0 260ms
✅ BookmarkSyncTests 3 3 0 0 199ms
✅ BorrowAdobeActivationStepTests 6 6 0 0 77ms
✅ BorrowAndDownloadIntegrationTests 7 7 0 0 783ms
✅ BorrowErrorMessageTests 13 13 0 0 261ms
✅ BorrowErrorPresenterTests 6 6 0 0 202ms
✅ BorrowOperationAuthCoordinatorTests 6 6 0 0 392ms
✅ BorrowOperationCleverReauthTests 2 2 0 0 283ms
✅ BorrowOperationContractTests 8 8 0 0 1.10s
✅ BorrowOperationStreamingHTMLTests 3 3 0 0 45ms
✅ BorrowOperationTests 13 13 0 0 3.38s
✅ BorrowOperationTimeoutTests 3 3 0 0 231ms
✅ BorrowReauthResettingTests 4 4 0 0 341ms
✅ BorrowReducerContractTests 2 2 0 0 14ms
✅ BorrowReducerCoreContractTests 12 12 0 0 75ms
✅ BorrowReducerTests 21 21 0 0 373ms
✅ BundledRegistrySnapshotTests 5 5 0 0 250ms
✅ ButtonStateMonotonicClampTests 10 10 0 0 2.19s
✅ ButtonStateTests 16 16 0 0 118ms
✅ ButtonStyleTypeTests 2 2 0 0 21ms
✅ ButtonTapDebounceTests 7 7 0 0 120ms
✅ C64ConversionTests 6 6 0 0 6ms
✅ CarPlayAudiobookBridgePresenterMigrationTests 2 2 0 0 222ms
✅ CarPlayAuthHelperReadinessTests 3 3 0 0 8.30s
✅ CarPlayChapterListTests 3 3 0 0 104ms
✅ CarPlayIntegrationTests 2 2 0 0 564ms
✅ CarPlayLibraryRefreshTests 3 3 0 0 13ms
✅ CarPlayNowPlayingTemplateTests 4 4 0 0 525ms
✅ CarPlayOpenAppAlertTests 6 6 0 0 343ms
✅ CarPlayPlaybackErrorTests 8 8 0 0 97ms
✅ CarPlayTests 12 12 0 0 239ms
✅ CarPlayTimeTrackingTests 3 3 0 0 190ms
✅ CatalogAPIDedupeTests 3 3 0 0 454ms
✅ CatalogAPIEntryPointTests 1 1 0 0 2ms
✅ CatalogAccessibilityTests 8 8 0 0 137ms
✅ CatalogCacheKeyAndIsolationTests 12 12 0 0 1.41s
✅ CatalogCacheMetadataExactBoundaryTests 4 4 0 0 86ms
✅ CatalogCacheMetadataTests 21 21 0 0 567ms
✅ CatalogCrawlSchedulerTests 9 9 0 0 158ms
✅ CatalogFeedModelTests 4 4 0 0 48ms
✅ CatalogFilterGroupModelTests 17 17 0 0 422ms
✅ CatalogFilterModelTests 17 17 0 0 640ms
✅ CatalogFilterServiceTests 29 29 0 0 1.02s
✅ CatalogFilterTests 1 1 0 0 1ms
✅ CatalogLaneAssemblyTests 7 7 0 0 21ms
✅ CatalogLaneFilterApplicationTests 4 4 0 0 315ms
✅ CatalogLaneModelStructTests 20 20 0 0 513ms
✅ CatalogLaneModelTests 3 3 0 0 5ms
✅ CatalogLaneMoreFilterStateTests 8 8 0 0 413ms
✅ CatalogLaneMoreViewModelTests 43 43 0 0 4.00s
✅ CatalogLaneRowViewAccessibilityTests 11 11 0 0 498ms
✅ CatalogLaneSortingTests 5 5 0 0 183ms
✅ CatalogLoadIntegrationTests 6 6 0 0 98ms
✅ CatalogOPDS2NegotiationTests 12 12 0 0 1.34s
✅ CatalogPreloaderTests 6 6 0 0 175ms
✅ CatalogProblemDocumentTests 6 6 0 0 87ms
✅ CatalogRepositoryCoreTests 9 9 0 0 202ms
✅ CatalogRepositoryStaleWhileRevalidateTests 12 12 0 0 594ms
✅ CatalogRepositoryTests 19 19 0 0 822ms
✅ CatalogSearchViewModelRegistryUpdateTests 5 5 0 0 69ms
✅ CatalogSearchViewModelTests 67 67 0 0 18.71s
✅ CatalogSelectorsTests 2 2 0 0 1ms
✅ CatalogSortServiceTests 14 14 0 0 182ms
✅ CatalogStateTests 7 7 0 0 235ms
✅ CatalogViewLibraryIconTests 2 2 0 0 37ms
✅ CatalogViewModelStateMachineTests 19 19 0 0 1.19s
✅ ChaosFaultInjectionTests 5 5 0 0 44ms
✅ ChapterChangeDetectorTests 5 5 0 0 23ms
✅ ChapterScrubberChromeVisibilityTests 4 4 0 0 134ms
✅ ChapterScrubberModelTests 35 35 0 0 1.98s
✅ ChapterScrubberReadoutTests 11 11 0 0 456ms
✅ ChapterScrubberTOCResolutionTests 5 5 0 0 11ms
✅ ChapterScrubberViewTests 31 31 0 0 369ms
✅ ChapterTOCNormalizerTests 7 7 0 0 30ms
✅ CirculationAnalyticsTests 4 4 0 0 56ms
✅ ColdStartResumeIntegrationTests 10 10 0 0 2.66s
✅ ColorExtensionTests 5 5 0 0 16ms
✅ ConcurrentBookStateTests 3 3 0 0 41ms
✅ ConcurrentDownloadStateTests 3 3 0 0 30ms
✅ ConcurrentTokenRefreshTests 2 2 0 0 64ms
✅ ContinuousPlaybackTrackingTests 3 3 0 0 292ms
✅ CookiePersistenceTests 10 10 0 0 1.73s
✅ CoverSourceBadResponseCacheTests 3 3 0 0 1.38s
✅ CrawlStateTests 16 16 0 0 705ms
✅ CrawlableFeedAnalysisTests 17 17 0 0 370ms
✅ CrawlerFallbackTests 12 12 0 0 186ms
✅ CredentialEdgeCaseTests 6 6 0 0 144ms
✅ CredentialPrivacyTests 4 4 0 0 12ms
✅ CredentialPromptCoordinatorTests 4 4 0 0 122ms
✅ CredentialSnapshotInvalidationTests 5 5 0 0 514ms
✅ CredentialStoreCharacterizationTests 7 7 0 0 826ms
✅ CrossDeviceBookmarkSyncTests 12 12 0 0 95ms
✅ CrossDeviceSyncE2ETests 10 10 0 0 4.61s
✅ CrossDomain401Tests 8 8 0 0 36ms
✅ CrossFormatMappingTests 14 14 0 0 181ms
✅ DPLAErrorTests 3 3 0 0 8ms
✅ DRMAdversarialTests 4 4 0 0 85ms
✅ DRMFulfilledPublicationTests 6 6 0 0 553ms
✅ DataBase64Tests 3 3 0 0 78ms
✅ DataReceptionComparisonTests 2 2 0 0 109ms
✅ DateExtensionTests 9 9 0 0 129ms
✅ DateFormattingTests 4 4 0 0 118ms
✅ Date_NYPLAdditionsTests 7 7 0 0 488ms
✅ DebugSettingsForceSkeletonsTests 4 4 0 0 38ms
✅ DebugSettingsGapTests 4 4 0 0 13ms
✅ DebugSettingsTests 31 31 0 0 737ms
✅ DefaultCatalogAPITests 31 31 0 0 1.63s
✅ DeriveInitialStateTests 4 4 0 0 57ms
✅ DeveloperSettingsEngineeringTierTests 4 4 0 0 3ms
✅ DeveloperSettingsViewModelOverrideTests 3 3 0 0 66ms
✅ DeviceLogCollectorGapTests 2 2 0 0 36ms
✅ DeviceLogCollectorTests 13 13 0 0 157ms
✅ DeviceOrientationTests 7 7 0 0 156ms
✅ DeviceSpecificErrorMonitorTests 11 11 0 0 375ms
✅ DictionaryExtensionsTests 5 5 0 0 69ms
✅ DirectionalNavigationAdapterOwnershipTests 2 2 0 0 19ms
✅ DiskBudgetManagerTests 7 7 0 0 36ms
✅ DiskBudgetTests 2 2 0 0 8ms
✅ DownloadAccountContextAdapterTests 11 11 0 0 767ms
✅ DownloadAlertPresenterTests 8 8 0 0 266ms
✅ DownloadAnnouncementServiceTests 12 12 0 0 138ms
✅ DownloadAuthChallengeWitnessTests 13 13 0 0 1.21s
✅ DownloadAuthRetryHandlerAuthCoordinatorTests 6 6 0 0 3.27s
✅ DownloadAuthRetryHandlerTaskLifecycleTests 4 4 0 0 525ms
✅ DownloadAuthRetryHandlerTests 17 17 0 0 5.17s
✅ DownloadCancellationHandlerTests 7 7 0 0 180ms
✅ DownloadCompleteMomentTests 6 6 0 0 14ms
✅ DownloadCompletionParserTests 9 9 0 0 522ms
✅ DownloadCoordinatorIntegrationTests 10 10 0 0 204ms
✅ DownloadCoordinatorTests 11 11 0 0 589ms
✅ DownloadDiskSpaceTests 2 2 0 0 2ms
✅ DownloadErrorInfoTests 3 3 0 0 7ms
✅ DownloadErrorRecoveryPolicyTests 11 11 0 0 979ms
✅ DownloadErrorRecoveryTests 3 3 0 0 7ms
✅ DownloadFreeSpaceExhaustionTests 11 11 0 0 458ms
✅ DownloadInfoTests 5 5 0 0 11ms
✅ DownloadIntegrityTests 10 10 0 0 253ms
✅ DownloadOnlyOnWiFiTests 10 10 0 0 227ms
✅ DownloadPersistenceStoreTests 5 5 0 0 44ms
✅ DownloadProgressPublisherCoreTests 29 29 0 0 2.70s
✅ DownloadQueueIntegrationTests 3 3 0 0 23ms
✅ DownloadQueueOrchestratorTests 9 9 0 0 316ms
✅ DownloadRMSDKHandoffTests 13 13 0 0 1.29s
✅ DownloadReconciliationLaunchOrderContractTests 2 2 0 0 88ms
✅ DownloadReconciliationTests 29 29 0 0 685ms
✅ DownloadRedirectTests 7 7 0 0 219ms
✅ DownloadReissuePersistenceTests 19 19 0 0 1.69s
✅ DownloadResumeAfterKillTests 7 7 0 0 674ms
✅ DownloadSlotManagementTests 5 5 0 0 24ms
✅ DownloadStartCoordinatorContractTests 5 5 0 0 161ms
✅ DownloadStartCoordinatorTests 11 11 0 0 345ms
✅ DownloadStartDispatcherContractTests 12 12 0 0 779ms
✅ DownloadStartDispatcherTests 26 26 0 0 776ms
✅ DownloadStartReducerContractTests 24 24 0 0 192ms
✅ DownloadStateMachineIntegrationTests 15 15 0 0 615ms
✅ DownloadStateMachineTests 5 5 0 0 104ms
✅ DownloadStateManagerTests 16 16 0 0 355ms
✅ DownloadTaskLifecycleServiceTests 9 9 0 0 132ms
✅ DownloadTaskPersistenceTests 14 14 0 0 231ms
✅ DownloadThrottlingContractTests 2 2 0 0 43ms
✅ DownloadThrottlingServiceTests 10 10 0 0 458ms
✅ DownloadTransferRetryTests 6 6 0 0 2.14s
✅ DownloadWatchdogTests 3 3 0 0 7ms
✅ EPUBKeyCommandsPP4289Tests 4 4 0 0 96ms
✅ EPUBModuleTests 4 4 0 0 17ms
✅ EPUBPositionTests 10 10 0 0 195ms
✅ EPUBSearchViewModelTests 18 18 0 0 525ms
✅ EPUBToolbarToggleTests 11 11 0 0 135ms
✅ EffectBoundaryTests 6 6 0 0 51ms
✅ EmailAddressTests 16 16 0 0 242ms
✅ EpubSampleFactoryTests 5 5 0 0 34ms
✅ ErrorActivityTrackerTests 12 12 0 0 205ms
✅ ErrorDetailTests 14 14 0 0 214ms
✅ ErrorDetailViewControllerGapTests 3 3 0 0 326ms
✅ ErrorDetailViewControllerTests 14 14 0 0 307ms
✅ ErrorLogExporterTests 5 5 0 0 31ms
✅ ExecutorNetworkHermeticityTests 1 1 0 0 51ms
✅ ExpiredLoanStringsTests 5 5 0 0 35ms
✅ FCMRegistrationReadinessLintTests 18 18 0 0 179ms
✅ FacetEnumTests 3 3 0 0 41ms
✅ FacetToolbarAccessibilityTests 5 5 0 0 202ms
✅ FacetViewModelLogoDelegateTests 4 4 0 0 59ms
✅ FacetViewModelTests 18 18 0 0 865ms
✅ FetchManifestWithBearerTokenLCPSafetyTests 1 1 0 0 7ms
✅ FetchManifestWithBearerTokenTests 9 9 0 0 300ms
✅ FetchOpenAccessManifestLCPSafetyTests 4 4 0 0 11ms
✅ FileURLGenerationTests 3 3 0 0 38ms
✅ FindawayChapterStatusGuardTests 1 1 0 0 97ms
✅ FindawaySavedVsPlayedTests 1 1 0 0 70ms
✅ FloatTPPAdditionsTests 5 5 0 0 63ms
✅ FocusIndicationTests 7 7 0 0 263ms
✅ FontManagerTests 17 17 0 0 393ms
✅ ForceResetTests 6 6 0 0 188ms
✅ GeneralCacheClearOnUpdateTests 3 3 0 0 10ms
✅ GeneralCacheTests 20 20 0 0 1.13s
✅ GroupEnumTests 1 1 0 0 8ms
✅ HTMLTextViewTests 70 70 0 0 37.01s
✅ HalfSheetProgressCueTests 11 11 0 0 136ms
✅ HoldNotificationClassificationTests 2 2 0 0 3ms
✅ HoldsBadgeCountTests 9 9 0 0 71ms
✅ HoldsBookViewModelTests 8 8 0 0 496ms
✅ HoldsReducerTests 11 11 0 0 656ms
✅ HoldsSyncFailureTests 12 12 0 0 477ms
✅ HoldsViewModelTests 23 23 0 0 593ms
✅ HostFailureTrackerTests 2 2 0 0 6ms
✅ ImageCacheContinuationTests 1 1 0 0 24ms
✅ ImageCacheOffMainIsolationTests 2 2 0 0 252ms
✅ ImageCacheTypeTests 1 1 0 0 1ms
✅ ImageCoverKeyUnificationTests 2 2 0 0 2ms
✅ ImageLoaderTests 14 14 0 0 354ms
✅ InflightFeedFetchesTimeoutTests 4 4 0 0 10.46s
✅ IntExtensionsTests 4 4 0 0 49ms
✅ IsReaderActiveTrackingModifierTests 4 4 0 0 49ms
✅ KeyboardNavigationFKATests 11 11 0 0 208ms
✅ KeyboardNavigationHandlerTests 16 16 0 0 723ms
✅ KeyboardVoiceOverTests 5 5 0 0 188ms
✅ LCPAcquisitionPredicateTests 4 4 0 0 6ms
✅ LCPAdapterTests 8 8 0 0 46ms
✅ LCPAudiobookURLSchemeTests 4 4 0 0 98ms
✅ LCPAudiobooksTests 24 24 0 0 292ms
✅ LCPBotanCRLGuardTests 5 5 0 0 190ms
✅ LCPCharacterizationTests 31 31 0 0 915ms
✅ LCPClientTests 9 9 0 0 722ms
✅ LCPFulfillmentHandlerTests 18 18 0 0 443ms
✅ LCPKeychainMigrationTests 5 5 0 0 574ms
✅ LCPLibraryServiceTests 20 20 0 0 2.06s
✅ LCPLicenseDocumentDetectionTests 5 5 0 0 14ms
✅ LCPLicenseFilePathTests 3 3 0 0 2ms
✅ LCPOrphanedDownloadRegistryTests 4 4 0 0 103ms
✅ LCPPDFAcquisitionPredicateTests 5 5 0 0 170ms
✅ LCPPDFDiskExtractTests 5 5 0 0 353ms
✅ LCPPDFOpenProgressTests 13 13 0 0 567ms
✅ LCPPassphraseReadinessTests 2 2 0 0 11ms
✅ LCPSessionIdentifierTests 3 3 0 0 22ms
✅ LegacySAMLProblemDocumentPropagationTests 7 7 0 0 922ms
✅ LibrariesSectionViewModelTests 16 16 0 0 143ms
✅ LibraryCatalogMergerTests 9 9 0 0 64ms
✅ LibraryIconInertLintTests 1 1 0 0 715ms
✅ LibraryRegistryCrawlerTests 15 15 0 0 784ms
✅ LibraryRowPresentationTests 10 10 0 0 79ms
✅ LicensesServiceTests 4 4 0 0 11ms
✅ LiveCrawlableParsingTest 4 0 0 4 110ms
✅ LiveDownloadTaskBoxTests 9 9 0 0 22ms
✅ LoanEvictionPolicyTests 13 13 0 0 177ms
✅ LoanRenewalServiceTests 9 9 0 0 688ms
✅ LocalBookContentServiceTests 25 25 0 0 3.51s
✅ LocalFileAdapterTests 6 6 0 0 40ms
✅ LogTests 13 13 0 0 570ms
✅ LoginKeyboardTests 8 8 0 0 80ms
✅ MainActorHelpersTests 22 22 0 0 1.19s
✅ ManifestFixtureTests 2 2 0 0 5ms
✅ MappedCatalogBridgeTests 3 3 0 0 6ms
✅ MappedCatalogModelTests 11 11 0 0 786ms
✅ MarqueeTextTests 5 5 0 0 150ms
✅ MockBackendExpiredCredentialsTests 3 3 0 0 69ms
✅ MockBackendHoldsTests 3 3 0 0 41ms
✅ MockBackendIntegrationTests 4 4 0 0 586ms
✅ MockBackendLoanLimitTests 2 2 0 0 27ms
✅ MockBackendRouteMatchingTests 4 4 0 0 72ms
✅ MockBackendServerDownTests 1 1 0 0 49ms
✅ MockIsolationLintTests 5 5 0 0 1.97s
✅ MultiLibraryTokenIsolationTests 17 17 0 0 529ms
✅ MyBooksDownloadCenterAccountIdThreadingTests 7 7 0 0 330ms
✅ MyBooksDownloadCenterAccountScopeSeamTests 7 7 0 0 376ms
✅ MyBooksDownloadCenterAdeptGapTests 3 3 0 0 6ms
✅ MyBooksDownloadCenterCachePurgeTests 4 4 0 0 716ms
✅ MyBooksDownloadCenterConcurrencyTests 22 22 0 0 2.11s
✅ MyBooksDownloadCenterEvictionTests 7 7 0 0 193ms
✅ MyBooksDownloadCenterOfflineTests 8 8 0 0 335ms
✅ MyBooksDownloadCenterProgressPublishingTests 2 2 0 0 12ms
✅ MyBooksDownloadSessionInvalidationTests 3 3 0 0 10ms
✅ MyBooksSimplifiedBearerTokenTests 17 17 0 0 796ms
✅ MyBooksViewModelBooksPublisherTests 3 3 0 0 85ms
✅ MyBooksViewModelConcurrencyTests 4 4 0 0 231ms
✅ MyBooksViewModelDownloadStateTests 3 3 0 0 51ms
✅ MyBooksViewModelEmptyArrayTests 3 3 0 0 7ms
✅ MyBooksViewModelEmptyStateTests 4 4 0 0 1.45s
✅ MyBooksViewModelExtendedTests 15 15 0 0 572ms
✅ MyBooksViewModelFacetIntegrationTests 4 4 0 0 72ms
✅ MyBooksViewModelFacetPublisherTests 5 5 0 0 1.96s
✅ MyBooksViewModelFilterSortInteractionTests 2 2 0 0 57ms
✅ MyBooksViewModelFilterTests 9 9 0 0 91ms
✅ MyBooksViewModelGuardConditionsTests 2 2 0 0 59ms
✅ MyBooksViewModelLargeDatasetTests 2 2 0 0 322ms
✅ MyBooksViewModelLoadAccountTests 2 2 0 0 274ms
✅ MyBooksViewModelLoginStateTests 4 4 0 0 448ms
✅ MyBooksViewModelMultipleAuthorSortingTests 3 3 0 0 73ms
✅ MyBooksViewModelNotificationTests 4 4 0 0 393ms
✅ MyBooksViewModelOfflineFilteringTests 3 3 0 0 11ms
✅ MyBooksViewModelPublisherTests 7 7 0 0 10.32s
✅ MyBooksViewModelSearchEdgeCaseTests 6 6 0 0 346ms
✅ MyBooksViewModelSearchQueryTests 3 3 0 0 103ms
✅ MyBooksViewModelSortPersistenceTests 3 3 0 0 1.11s
✅ MyBooksViewModelSortingIntegrationTests 5 5 0 0 21ms
✅ MyBooksViewModelSortingTests 6 6 0 0 80ms
✅ MyBooksViewModelStateTransitionTests 3 3 0 0 326ms
✅ MyBooksViewModelUIBindingTests 3 3 0 0 14ms
✅ NSErrorAdditionsTests 7 7 0 0 67ms
✅ NSNotificationTPPTests 3 3 0 0 11ms
✅ NavigationCoordinatorHubTests 11 11 0 0 182ms
✅ NavigationCoordinatorTests 18 18 0 0 209ms
✅ NavigationFreezePreventionTests 5 5 0 0 52ms
✅ NetworkCacheClearRoutingTests 3 3 0 0 62ms
✅ NetworkExecutorCredentialGuardTests 8 8 0 0 686ms
✅ NetworkExecutorResponseRegressionTests 4 4 0 0 413ms
✅ NetworkExecutorTaskTypeTests 3 3 0 0 49ms
✅ NetworkOfflineDetectionTests 3 3 0 0 10ms
✅ NetworkQueueTests 22 22 0 0 772ms
✅ NetworkRequestQueueTests 2 2 0 0 10.19s
✅ NetworkResponderAuthChallengeWitnessTests 13 13 0 0 495ms
✅ NetworkRetryLogicTests 7 7 0 0 465ms
✅ NetworkTimeoutTests 2 2 0 0 4ms
✅ NotificationEventTypeContractTests 7 7 0 0 85ms
✅ NotificationPayloadContractTests 10 10 0 0 238ms
✅ NotificationServiceReadinessGateTests 4 4 0 0 2.05s
✅ NotificationServiceStateMachineTests 9 9 0 0 1.27s
✅ NotificationServiceTests 16 16 0 0 434ms
✅ NotificationServiceTokenTests 25 25 0 0 188ms
✅ NotificationSyncThrottleTests 5 5 0 0 53ms
✅ NotificationTokenDataTests 4 4 0 0 8ms
✅ NotificationTokenRegistrationTests 10 10 0 0 124ms
✅ NowPlayingCoordinatorBackgroundTests 6 6 0 0 3.50s
✅ NowPlayingCoordinatorTests 19 19 0 0 508ms
✅ OAuthSAMLRedirectRegressionTests 4 4 0 0 1.14s
✅ OIDCAuthDocumentParsingTests 4 4 0 0 301ms
✅ OIDCAuthTypeTests 5 5 0 0 257ms
✅ OIDCAuthenticationPropertyTests 8 8 0 0 2.22s
✅ OIDCCallbackEdgeCaseTests 9 9 0 0 1.03s
✅ OIDCCallbackHandlingTests 5 5 0 0 1.04s
✅ OIDCCallbackSchemeTests 3 3 0 0 78ms
✅ OIDCIsolationRegressionTests 6 6 0 0 784ms
✅ OIDCLoginRoutingTests 3 3 0 0 540ms
✅ OIDCMakeRequestTests 3 3 0 0 366ms
✅ OIDCNSCodingTests 1 1 0 0 119ms
✅ OIDCNetworkLayer401Tests 5 5 0 0 292ms
✅ OIDCReauthAttemptTests 9 9 0 0 27ms
✅ OIDCReauthOnExpiredTokenTests 5 5 0 0 513ms
✅ OIDCReauthRetryBehaviorTests 5 5 0 0 839ms
✅ OIDCReauthWiringLintTests 4 4 0 0 131ms
✅ OIDCRedirectURIConstructionTests 6 6 0 0 597ms
✅ OIDCRegressionTests 9 9 0 0 895ms
✅ OIDCSelectedAuthenticationTests 2 2 0 0 177ms
✅ OIDCSignOutRegressionTests 6 6 0 0 678ms
✅ OIDCTokenRefreshRegressionTests 6 6 0 0 624ms
✅ OIDCUpdateUserAccountTests 5 5 0 0 278ms
✅ OIDCViewModelRegressionTests 1 1 0 0 62ms
✅ OIDCViewModelSignInTests 2 2 0 0 146ms
✅ OPDS1BorrowEntryContractTests 4 4 0 0 131ms
✅ OPDS1CatalogGroupedContractTests 3 3 0 0 6ms
✅ OPDS1HoldEntriesContractTests 4 4 0 0 82ms
✅ OPDS1LoansFeedContractTests 6 6 0 0 56ms
✅ OPDS1ParsingTests 34 34 0 0 788ms
✅ OPDS1RevokeResponseContractTests 2 2 0 0 7ms
✅ OPDS2AuthenticationDocumentTests 18 18 0 0 73ms
✅ OPDS2AvailabilityTests 4 4 0 0 101ms
✅ OPDS2BookBridgeTests 44 44 0 0 5.20s
✅ OPDS2BorrowResponseContractTests 3 3 0 0 3ms
✅ OPDS2CatalogWiringTests 21 21 0 0 502ms
✅ OPDS2CatalogsFeedTests 3 3 0 0 240ms
✅ OPDS2ContributorTests 2 2 0 0 2ms
✅ OPDS2EmptyFeedContractTests 1 1 0 0 24ms
✅ OPDS2FeedContractTests 4 4 0 0 53ms
✅ OPDS2FeedParsingTests 11 11 0 0 594ms
✅ OPDS2FeedTests 14 14 0 0 147ms
✅ OPDS2FullMetadataTests 4 4 0 0 35ms
✅ OPDS2FullPublicationTests 13 13 0 0 496ms
✅ OPDS2IntegrationTests 18 18 0 0 407ms
✅ OPDS2LinkArrayTests 5 5 0 0 183ms
✅ OPDS2LinkComputedPropertyTests 20 20 0 0 534ms
✅ OPDS2LinkRelTests 1 1 0 0 <1ms
✅ OPDS2LinkTests 2 2 0 0 386ms
✅ OPDS2ParsingTests 38 38 0 0 2.10s
✅ OPDS2PublicationExtendedTests 53 53 0 0 5.39s
✅ OPDS2PublicationImageTests 6 6 0 0 201ms
✅ OPDS2PublicationNarratorTests 3 3 0 0 60ms
✅ OPDS2PublicationTests 2 2 0 0 69ms
✅ OPDS2SamlIDPTests 6 6 0 0 127ms
✅ OPDS2SearchResultsContractTests 3 3 0 0 36ms
✅ OPDS2SubjectTests 2 2 0 0 1ms
✅ OPDS2SupportingTypesTests 5 5 0 0 17ms
✅ OPDSAcquisitionPathExpandedTests 15 15 0 0 736ms
✅ OPDSFeedCacheTests 14 14 0 0 462ms
✅ OPDSFeedMigrationTests 11 11 0 0 12ms
✅ OPDSFeedParsingTests 2 2 0 0 131ms
✅ OPDSFeedServiceStateMachineTests 3 3 0 0 646ms
✅ OPDSFeedServiceTests 2 2 0 0 6ms
✅ OPDSFormatTests 13 13 0 0 276ms
✅ OPDSParserCoreTests 4 4 0 0 93ms
✅ OPDSParserTests 4 4 0 0 18ms
✅ OPDSParsingTests 57 57 0 0 1m 3s
✅ OfflineActionTests 29 29 0 0 722ms
✅ OfflineQueueCoordinatorTests 11 11 0 0 194ms
✅ OfflineQueueServiceExtendedTests 13 13 0 0 358ms
✅ OfflineQueueServiceTests 17 17 0 0 486ms
✅ OpenAccessAdapterTests 13 13 0 0 202ms
✅ OverdriveDeferredFulfillmentTests 6 6 0 0 11ms
✅ OverdriveDownloadHandlerTests 9 9 0 0 413ms
✅ OverdriveFulfillmentTests 25 25 0 0 1.53s
✅ PDFExtensionsTests 20 20 0 0 303ms
✅ PDFKitThumbnailProviderTests 5 5 0 0 175ms
✅ PDFReaderTests 12 12 0 0 109ms
✅ PDFSearchEmptyStateTests 4 4 0 0 255ms
✅ PP3596RegressionTests 3 3 0 0 72ms
✅ PalaceCheckPropertyTests 8 8 0 0 82ms
✅ PalaceErrorCategoryTests 20 20 0 0 1.23s
✅ PalaceErrorExtendedTests 23 23 0 0 329ms
✅ PalaceErrorTests 11 11 0 0 162ms
✅ PalaceHapticTests 4 4 0 0 18ms
✅ PalaceMotionTests 11 11 0 0 257ms
✅ PalacePDFViewTests 12 12 0 0 203ms
✅ PalacePreferencesSettingsRoundTripTests 9 9 0 0 70ms
✅ PalacePressableButtonStyleTests 6 6 0 0 79ms
✅ PalaceTestSetupObservationTests 4 4 0 0 62ms
✅ PalaceWiringTestCaseTests 4 4 0 0 107ms
✅ ParserFuzzTests 4 4 0 0 39.74s
✅ PatronProfileContractTests 4 4 0 0 75ms
✅ PerformanceMonitorTests 14 14 0 0 923ms
✅ PerformanceReportTests 14 14 0 0 13.08s
✅ PersistentLoggerTests 9 9 0 0 1.87s
✅ PlaybackBootstrapperAudioSessionTests 2 2 0 0 802ms
✅ PlaybackBootstrapperTests 8 8 0 0 336ms
✅ PlaybackFailureRecordTests 5 5 0 0 74ms
✅ PlaybackOpenPolicyTests 7 7 0 0 5ms
✅ PlaybackRateTests 18 18 0 0 2.15s
✅ PlaybackTrackingRegressionTests 5 5 0 0 204ms
⚠️ PoolResponsivenessProbeTests 5 4 0 0 899ms
✅ PositionPersistenceLogicTests 6 6 0 0 16ms
✅ PositionPersistenceTests 2 2 0 0 2ms
✅ PositionSyncServiceTests 13 13 0 0 378ms
✅ PositionSyncTests 5 5 0 0 64ms
✅ PositionWriterContractTests 6 6 0 0 428ms
✅ PostUpdateMigrationTests 5 5 0 0 284ms
✅ ProblemDocumentContractTests 4 4 0 0 39ms
✅ ProblemDocumentLoanExpiryTests 5 5 0 0 11ms
✅ ProblemDocumentTests 12 12 0 0 572ms
✅ ProblemReportEmailTests 11 11 0 0 526ms
✅ RatingCardMotionGateTests 5 5 0 0 35ms
✅ RatingEligibilityPolicyTests 17 17 0 0 891ms
✅ RatingEngagementTrackerTests 9 9 0 0 103ms
✅ RatingFeedbackPresenterTests 3 3 0 0 15ms
✅ RatingPromptPresenterTests 21 21 0 0 1.68s
✅ ReachabilityTests 10 10 0 0 20ms
✅ Reader2BookmarkContractTests 3 3 0 0 95ms
✅ Reader2PositionAdapterContractTests 4 3 0 1 314ms
✅ Reader2PositionResumeContractTests 3 3 0 0 209ms
✅ ReaderAccessibilityTests 7 7 0 0 114ms
✅ ReaderChromeToggleFadeTests 3 3 0 0 12ms
✅ ReaderEditingActionsTests 5 5 0 0 528ms
✅ ReaderErrorTests 5 5 0 0 102ms
✅ ReaderNavBarVoiceOverTests 2 2 0 0 36ms
✅ ReaderServicePDFRouteTests 3 3 0 0 101ms
✅ ReaderServiceRouteOwnershipTests 8 8 0 0 96ms
✅ ReaderServiceSyncTests 3 3 0 0 54ms
✅ ReaderThemeTests 24 24 0 0 297ms
✅ ReadingPositionTests 22 22 0 0 126ms
✅ RedirectHandlingIntegrationTests 4 4 0 0 128ms
✅ RedirectPolicyTests 9 9 0 0 196ms
✅ RegistryDownloadServicingSeamTests 3 3 0 0 133ms
✅ RegistryFileRecoveryTests 23 23 0 0 241ms
✅ RemoteFeatureFlagsGapTests 4 4 0 0 10.08s
✅ RemoteFeatureFlagsSideLoadingTests 5 5 0 0 53ms
✅ RemoteFeatureFlagsTests 21 21 0 0 47.65s
✅ ResourcePropertiesLengthTests 3 3 0 0 150ms
✅ RetryClassificationTests 17 17 0 0 216ms
✅ ReturnFlowTests 1 1 0 0 <1ms
✅ ReturnReducerContractTests 16 16 0 0 1.22s
✅ RightsManagementDetectionTests 5 5 0 0 46ms
✅ RightsManagementDispatchContractTests 8 8 0 0 133ms
✅ RightsManagementDispatcherTests 10 10 0 0 321ms
✅ RuntimeQuiescenceGateTests 11 10 0 1 4.96s
✅ RuntimeQuiescenceLintTests 5 5 0 0 1.20s
✅ SAMLCookieSyncTests 5 5 0 0 79ms
✅ SAMLLogoutCallbackDetectionTests 4 4 0 0 8ms
✅ SAMLLogoutLinkParsingTests 5 5 0 0 148ms
✅ SAMLLogoutURLTests 4 4 0 0 24ms
✅ SAMLPlusBiblioBoardExpirationTests 8 8 0 0 862ms
✅ SEMigrationsTests 6 6 0 0 192ms
✅ SafeDictionaryTests 21 21 0 0 665ms
✅ SamplePlayerErrorTests 5 5 0 0 62ms
✅ SampleTypeTests 8 8 0 0 476ms
✅ SceneDelegateTests 1 1 0 0 2ms
✅ ScopedResetTests 9 9 0 0 222ms
✅ SearchAccessibilityTests 11 11 0 0 273ms
✅ SearchFlowIntegrationTests 8 8 0 0 118ms
✅ SettingsViewModelComputedPropertyTests 6 6 0 0 35ms
✅ SettingsViewModelEdgeCaseTests 7 7 0 0 60ms
✅ SettingsViewModelGapTests 1 1 0 0 2ms
✅ SettingsViewModelSyncTests 14 14 0 0 34.22s
✅ SettingsViewModelTests 33 33 0 0 1.06s
✅ SideloadBoundaryTests 6 6 0 0 117ms
✅ SideloadImportContractTests 1 1 0 0 585ms
✅ SideloadedBookManagerTests 17 17 0 0 932ms
✅ SideloadedBookRegistryTests 14 14 0 0 391ms
✅ SideloadedLaneBridgeTests 6 6 0 0 136ms
✅ SideloadedLaneViewModelTests 7 7 0 0 860ms
✅ SignInFormPresentationTests 3 3 0 0 32ms
✅ SignInModalLifecycleTests 9 9 0 0 134ms
✅ SignInModalPredicateTests 3 3 0 0 3ms
✅ SignInModalSAMLOIDCTests 6 6 0 0 12ms
✅ SignInOAuthErrorPropagationTests 8 8 0 0 1.72s
✅ SignInRequestServiceCharacterizationTests 11 11 0 0 1.30s
✅ SignInToReadFlowIntegrationTests 5 5 0 0 1.14s
✅ SignInWebSheetIntegrationTests 3 3 0 0 2.49s
✅ SignInWebSheetViewModelTests 31 31 0 0 195ms
✅ SignOutCacheClearingTests 3 3 0 0 86ms
✅ SingletonResetRegistryTests 5 5 0 0 428ms
✅ SkeletonTests 22 22 0 0 308ms
✅ StatusAnnouncementTests 22 22 0 0 402ms
✅ StopPositionSaveTests 2 2 0 0 2ms
✅ StoreTests 5 5 0 0 166ms
✅ StreamingReaderPresentationContractTests 1 1 0 0 4ms
✅ StreamingReaderProgressStoreTests 7 7 0 0 144ms
✅ StreamingReaderViewControllerScrollRestoreTests 12 12 0 0 1.72s
✅ StreamingReaderViewModelTests 9 9 0 0 316ms
✅ StringExtensionTests 8 8 0 0 66ms
✅ StringExtensionsTests 3 3 0 0 13ms
✅ StringHTMLEntitiesTests 7 7 0 0 158ms
✅ StringNYPLAdditionsTests 4 4 0 0 8ms
✅ String_NYPLAdditionsTests 4 4 0 0 108ms
✅ SupportSectionDecisionTests 5 5 0 0 21ms
✅ SyncConflictResolutionTests 3 3 0 0 52ms
✅ SyncDeletionGuardTests 5 5 0 0 93ms
✅ SyncDeletionRatioTests 6 6 0 0 8ms
✅ SyncPermissionTests 5 5 0 0 317ms
✅ TPPAccountAuthStateEnumTests 5 5 0 0 29ms
✅ TPPAccountListDataSourceTests 3 3 0 0 44ms
✅ TPPAdobeActivationSkipTests 6 6 0 0 440ms
✅ TPPAgeCheckCompletionTests 5 5 0 0 253ms
✅ TPPAgeCheckIsValidTests 5 5 0 0 57ms
✅ TPPAgeCheckStateMachineTests 4 4 0 0 705ms
✅ TPPAgeCheckTests 6 6 0 0 2.64s
✅ TPPAgeCheckVerifyDecisionTests 5 5 0 0 193ms
✅ TPPAlertUtilsTests 45 45 0 0 3.15s
✅ TPPAnnotationsHermeticTests 27 27 0 0 2.58s
✅ TPPAnnotationsOverrideTests 4 4 0 0 121ms
✅ TPPAnnotationsTests 29 29 0 0 6.07s
✅ TPPAnnouncementManagerTests 3 3 0 0 23ms
✅ TPPAuthDocumentContractTests 3 3 0 0 665ms
✅ TPPBackgroundExecutorTests 3 3 0 0 93ms
✅ TPPBadgeImageGapTests 2 2 0 0 33ms
✅ TPPBaseReaderViewControllerInitialLocationTests 10 10 0 0 207ms
✅ TPPBasicAuthTests 13 13 0 0 224ms
✅ TPPBookAccessibilityLabelTests 8 8 0 0 255ms
✅ TPPBookAuthorCoverageTests 3 3 0 0 97ms
✅ TPPBookAuthorTests 6 6 0 0 746ms
✅ TPPBookBearerTokenTests 9 9 0 0 219ms
✅ TPPBookButtonsStateTests 7 7 0 0 476ms
✅ TPPBookContentMetadataFilesHelperTests 9 9 0 0 115ms
✅ TPPBookContentTypeConverterStreamingHTMLTests 2 2 0 0 2ms
✅ TPPBookContentTypeConverterTests 4 4 0 0 83ms
✅ TPPBookContentTypeExtendedTests 4 4 0 0 49ms
✅ TPPBookContentTypeTests 14 14 0 0 213ms
✅ TPPBookCoverCacheLookupTests 8 8 0 0 68ms
✅ TPPBookCoverRegistryTests 17 17 0 0 4.78s
✅ TPPBookCreationTests 7 7 0 0 120ms
✅ TPPBookExtensionsTests 21 21 0 0 239ms
✅ TPPBookIsDRMProtectedTests 9 9 0 0 80ms
✅ TPPBookLocationCoverageTests 7 7 0 0 99ms
✅ TPPBookLocationEdgeCaseTests 27 27 0 0 106ms
✅ TPPBookLocationKeyTests 3 3 0 0 14ms
✅ TPPBookLocationTests 11 11 0 0 38ms
✅ TPPBookModelGapTests 4 4 0 0 19ms
✅ TPPBookRegistryAccountCaptureContractTests 4 4 0 0 352ms
✅ TPPBookRegistryAsyncReadinessTests 3 3 0 0 402ms
✅ TPPBookRegistryAtomicWriteTests 7 7 0 0 886ms
✅ TPPBookRegistryBookRetrievalTests 7 7 0 0 429ms
✅ TPPBookRegistryBookmarkTests 7 7 0 0 198ms
✅ TPPBookRegistryCorruptedDataTests 5 5 0 0 64ms
✅ TPPBookRegistryDataTests 4 4 0 0 16ms
✅ TPPBookRegistryDependencyTests 4 4 0 0 215ms
✅ TPPBookRegistryFacadeContractTests 6 6 0 0 861ms
✅ TPPBookRegistryFulfillmentIdTests 4 4 0 0 67ms
✅ TPPBookRegistryLargeCorpusTests 5 5 0 0 2m 10s
✅ TPPBookRegistryLoadReentrancyTests 3 3 0 0 254ms
✅ TPPBookRegistryLocationTests 4 4 0 0 135ms
✅ TPPBookRegistryMigrationTests 16 16 0 0 1.13s
✅ TPPBookRegistryMutationContractTests 10 10 0 0 598ms
✅ TPPBookRegistryPersistenceTests 10 10 0 0 4.40s
✅ TPPBookRegistryProcessingTests 2 2 0 0 809ms
✅ TPPBookRegistryPublisherTests 6 6 0 0 322ms
✅ TPPBookRegistryRebuildRefusalContractTests 1 1 0 0 51ms
✅ TPPBookRegistryRecordPersistenceTests 3 3 0 0 14ms
✅ TPPBookRegistryRecordTests 10 10 0 0 148ms
✅ TPPBookRegistryStateConcurrencyTests 2 2 0 0 763ms
✅ TPPBookRegistryStateManagementTests 11 11 0 0 263ms
✅ TPPBookRegistrySyncContractTests 4 4 0 0 1.43s
✅ TPPBookRegistryThreadSafetyTests 3 3 0 0 333ms
✅ TPPBookRegistryUpdateAndRemoveTests 1 1 0 0 330ms
✅ TPPBookRequiresAdobeDRMTests 6 6 0 0 384ms
✅ TPPBookSerializationTests 13 13 0 0 517ms
✅ TPPBookStateInitializationTests 5 5 0 0 145ms
✅ TPPBookStateTests 4 4 0 0 294ms
✅ TPPBookTests 98 98 0 0 6.07s
✅ TPPBookmarkDeletionLogTests 11 11 0 0 350ms
✅ TPPBookmarkFactoryInitTests 2 2 0 0 5ms
✅ TPPBookmarkFactoryServerAnnotationEdgeCaseTests 5 5 0 0 117ms
✅ TPPBookmarkFactoryTests 15 15 0 0 267ms
✅ TPPBookmarkR3ConversionTests 5 5 0 0 53ms
✅ TPPBookmarkR3LocationTests 13 13 0 0 20.33s
✅ TPPBookmarkSpecTests 1 1 0 0 2ms
✅ TPPCachingTests 3 3 0 0 9ms
✅ TPPCapturedCredentialsTests 5 5 0 0 392ms
✅ TPPCirculationAnalyticsRequestShapeContractTests 2 2 0 0 114ms
✅ TPPConfigurationCustomRegistryTests 16 16 0 0 650ms
✅ TPPConfigurationTests 22 22 0 0 734ms
✅ TPPContentTypeTests 9 9 0 0 78ms
✅ TPPCredentialConcurrencyTests 3 3 0 0 38ms
✅ TPPCredentialIsolationE2ETests 5 5 0 0 1.85s
✅ TPPCredentialPersistenceTests 6 6 0 0 610ms
✅ TPPCredentialSnapshotCoherenceTests 3 3 0 0 375ms
✅ TPPCredentialSnapshotTests 8 8 0 0 154ms
✅ TPPCredentialsCoverageTests 9 9 0 0 134ms
✅ TPPCredentialsTests 26 26 0 0 277ms
✅ TPPCrossLibrarySignOutTests 6 6 0 0 1.02s
✅ TPPDRMAuthorizingMockTimeoutTests 3 3 0 0 849ms
✅ TPPDRMFailureCredentialPreservationTests 4 4 0 0 261ms
✅ TPPErrorLoggerTests 27 27 0 0 1.20s
✅ TPPIdleSignOutRegressionTests 13 13 0 0 2.14s
✅ TPPJWKConversionTest 1 1 0 0 97ms
✅ TPPKeychainManagerTests 9 9 0 0 1.19s
✅ TPPLastReadPositionPosterTests 13 13 0 0 114ms
✅ TPPLastReadPositionSynchronizerIntegrationTests 5 5 0 0 406ms
✅ TPPLastReadPositionSynchronizerTests 23 23 0 0 88ms
✅ TPPLastReadPositionSynchronizer_BehaviorDocumentationTests 5 5 0 0 30ms
✅ TPPLastReadPositionSynchronizer_BookLocationTests 9 9 0 0 45ms
✅ TPPLastReadPositionSynchronizer_ConcurrencyTests 3 3 0 0 133ms
✅ TPPLastReadPositionSynchronizer_ReadiumBookmarkTests 9 9 0 0 159ms
✅ TPPLastReadPositionSynchronizer_SyncLogicTests 10 10 0 0 28ms
✅ TPPLastReadPositionSynchronizer_WriterDelegationTests 4 4 0 0 116ms
✅ TPPLoginNoActivationTests 3 3 0 0 330ms
✅ TPPMainThreadCheckerTests 4 4 0 0 113ms
✅ TPPMigrationManagerTests 17 17 0 0 1.24s
✅ TPPNetworkExecutorAPITests 14 14 0 0 274ms
✅ TPPNetworkExecutorCancellationTests 6 6 0 0 4.76s
✅ TPPNetworkExecutorConcurrencyTests 4 4 0 0 14.13s
✅ TPPNetworkExecutorStubbedTests 17 17 0 0 408ms
✅ TPPNetworkExecutorTests 3 3 0 0 13ms
✅ TPPNetworkResponderAuthCoordinatorTests 5 5 0 0 153ms
✅ TPPNetworkResponderRetryBufferTests 5 5 0 0 37ms
✅ TPPNetworkResponderSizeLimitTests 5 5 0 0 579ms
✅ TPPNetworkResponderTests 12 12 0 0 466ms
✅ TPPOPDSAcquisitionPathTests 5 5 0 0 19ms
✅ TPPOPDSEntryTests 5 5 0 0 93ms
✅ TPPOPDSFeedTests 3 3 0 0 89ms
✅ TPPOPDSGroupSwiftTests 3 3 0 0 213ms
✅ TPPOPDSLinkTests 7 7 0 0 130ms
✅ TPPOpenSearchDescriptionExpandedTests 10 10 0 0 436ms
✅ TPPOpenSearchDescriptionTests 1 1 0 0 <1ms
✅ TPPPDFDocumentMetadataTests 15 15 0 0 271ms
✅ TPPPDFDocumentTests 8 8 0 0 29ms
✅ TPPPDFLocationCoverageTests 7 7 0 0 37ms
✅ TPPPDFLocationTests 10 10 0 0 481ms
✅ TPPPDFPageBookmarkTests 9 9 0 0 13ms
✅ TPPPDFPageTests 5 5 0 0 22ms
✅ TPPPDFReaderModeTests 6 6 0 0 45ms
✅ TPPPDFReaderSearchBindingTests 3 3 0 0 4ms
✅ TPPPerAccountIsolationTests 8 8 0 0 1.05s
✅ TPPPreferredAuthSelectionTests 8 8 0 0 2.73s
✅ TPPProblemDocumentCacheManagerTests 12 12 0 0 138ms
✅ TPPProblemDocumentTests 21 21 0 0 187ms
✅ TPPReaderAppearanceTests 4 4 0 0 23ms
✅ TPPReaderBlockNavigationTests 12 12 0 0 214ms
✅ TPPReaderBookmarksBusinessLogicTests 12 12 0 0 1.23s
✅ TPPReaderBookmarksReadinessTests 2 2 0 0 748ms
✅ TPPReaderFontTests 4 4 0 0 123ms
✅ TPPReaderFootnoteAccessibilityTests 16 16 0 0 269ms
✅ TPPReaderPageListBusinessLogicTests 27 27 0 0 118ms
✅ TPPReaderPositionReportTests 10 10 0 0 184ms
✅ TPPReaderPositionsVCTOCTests 5 5 0 0 788ms
✅ TPPReaderPreferencesLoadTests 3 3 0 0 10ms
✅ TPPReaderSettingsTests 28 28 0 0 568ms
✅ TPPReaderTOCBusinessLogicTests 15 15 0 0 339ms
✅ TPPReaderTOCFlattenTests 2 2 0 0 50ms
✅ TPPReadiumBookmarkLocationMatchingTests 5 5 0 0 7ms
✅ TPPReadiumBookmarkTests 23 23 0 0 348ms
✅ TPPReauthenticatorMockTests 2 2 0 0 65ms
✅ TPPReauthenticatorTests 4 4 0 0 14ms
✅ TPPReturnPromptHelperTests 5 5 0 0 379ms
✅ TPPSAMLCookieExpirationTests 7 7 0 0 700ms
✅ TPPSAMLFlowTests 10 10 0 0 339ms
✅ TPPSAMLReauthFlowTests 2 2 0 0 217ms
✅ TPPSAMLRegressionTests 4 4 0 0 120ms
✅ TPPSAMLSignInTests 26 26 0 0 8.02s
✅ TPPSAMLStateIsolationTests 4 4 0 0 427ms
✅ TPPSAMLStateMachineTests 6 6 0 0 369ms
✅ TPPSaveDRMCredentialsTests 4 4 0 0 3.27s
✅ TPPSettingsTests 6 6 0 0 230ms
✅ TPPSignInAdobeSkipTests 14 14 0 0 1.74s
✅ TPPSignInAuthStateTransitionTests 3 3 0 0 692ms
✅ TPPSignInBusinessLogicExtendedTests 58 58 0 0 17.68s
✅ TPPSignInBusinessLogicOAuthTests 11 11 0 0 2.41s
✅ TPPSignInBusinessLogicSignOutTests 12 12 0 0 2.43s
✅ TPPSignInBusinessLogicStateMachineTests 10 10 0 0 1.42s
✅ TPPSignInBusinessLogicTests 23 23 0 0 14.29s
✅ TPPSignInBusinessLogicTokenFlowTests 3 3 0 0 736ms
✅ TPPSignInBusinessLogicValidationCallbackOrderTests 2 2 0 0 173ms
✅ TPPSignInCapabilitiesCharacterizationTests 14 14 0 0 2.05s
✅ TPPSignInErrorHandlingTests 2 2 0 0 104ms
✅ TPPSignInProfileDocEdgeCaseTests 3 3 0 0 295ms
✅ TPPSignedInStateProviderTests 3 3 0 0 53ms
✅ TPPUserAccountAuthStateTests 6 6 0 0 55ms
✅ TPPUserAccountConcurrencyTests 1 1 0 0 2ms
✅ TPPUserAccountGapTests 4 4 0 0 54ms
✅ TPPUserAccountIsolationLintTests 3 3 0 0 959ms
✅ TPPUserAccountTestFactoryTests 7 7 0 0 85ms
✅ TPPUserFriendlyErrorTests 11 11 0 0 190ms
✅ TPPUserNotificationsTests 10 10 0 0 274ms
✅ TPPXMLSwiftTests 16 16 0 0 493ms
✅ TPPXMLTests 3 3 0 0 74ms
✅ TabBarModernizationTests 8 8 0 0 109ms
✅ TaskProvenanceTests 7 7 0 0 264ms
✅ TearDownRequiredLintTests 5 5 0 0 3.46s
✅ TestAppContainerFactoryTests 5 5 0 0 191ms
✅ TestTargetCompilationConditionsTests 2 2 0 0 2ms
⚠️ TestTargetHermeticityRegressionTests 4 3 0 0 3.93s
✅ TimeEntryTests 3 3 0 0 84ms
✅ TokenRefreshAndRetryQueueTests 9 9 0 0 4.83s
✅ TokenRefreshIntegrationTests 2 2 0 0 99ms
✅ TokenRefreshInterceptorAuthCoordinatorTests 8 8 0 0 272ms
✅ TokenRefreshInterceptorTests 24 24 0 0 800ms
✅ TokenRefreshOnForegroundTests 10 10 0 0 3.93s
✅ TokenRefreshTests 25 25 0 0 249ms
✅ TokenRefreshWatchdogTests 5 5 0 0 112ms
✅ TokenRequestCredentialGuardTests 13 13 0 0 332ms
✅ TokenRequestTests 11 11 0 0 410ms
✅ TokenResponseTests 21 21 0 0 274ms
✅ TriageBotKeyAdminTests 4 4 0 0 87ms
✅ TypographyPresetTests 21 21 0 0 244ms
✅ TypographyServiceTests 31 31 0 0 1.25s
✅ TypographySettingsViewModelTests 27 27 0 0 7.73s
✅ UIAlertCACommitGuardTests 9 9 0 0 678ms
✅ UIColor_NYPLAdditionsTests 1 1 0 0 2ms
✅ URLBackupExclusionTests 3 3 0 0 14ms
✅ URLExtensionTests 16 16 0 0 159ms
✅ URLExtensionsTests 11 11 0 0 36ms
✅ URLRequestExtensionsCoverageTests 3 3 0 0 2ms
✅ URLRequestExtensionsTests 11 11 0 0 150ms
✅ URLRequestNYPLAdditionsTests 11 11 0 0 406ms
✅ URLRequest_NYPLTests 1 1 0 0 1ms
✅ URLResponseAuthenticationTests 10 10 0 0 87ms
✅ URLResponseNYPLTests 14 14 0 0 88ms
✅ URLSessionCredentialStorageTests 3 3 0 0 35ms
✅ URLSessionStubbingResetTests 2 2 0 0 4ms
✅ URLTypeTests 2 2 0 0 4ms
✅ URLValidationTests 5 5 0 0 70ms
✅ UnifiedOPDSServiceStateMachineTests 2 2 0 0 140ms
✅ UserAccountPublisherAuthStateTests 5 5 0 0 18ms
✅ UserAccountPublisherTests 14 14 0 0 874ms
✅ UserAccountValidationTests 11 11 0 0 971ms
✅ UserDefaultsIsolationLintTests 2 2 0 0 1.08s
✅ UserProfileDocumentTests 13 13 0 0 189ms
✅ UserRetryTrackerTests 10 10 0 0 557ms
✅ VerbatimTextFieldTests 9 9 0 0 114ms
✅ WebAuthPresentationAnchorTests 5 5 0 0 16ms
✅ XCTestCase_testUserDefaultsTests 3 3 0 0 526ms
✅ iPadOnMacRMSDKGuardTests 7 7 0 0 58ms

📊 Full interactive matrix: report

📊 Testing Coverage Breakdown

Unit Test Line Coverage (testable surfaces): 48.8%

Total coverage incl. UI/lifecycle: 47.6% (17 files excluded from testable denominator — see scripts/coverage-exclude.json)

Target Lines Covered
Palace.app 47.6%

Why two coverage numbers? Testable coverage subtracts files that can't be exercised from xcodebuild — SwiftUI views, UIKit VCs, lifecycle (see scripts/coverage-exclude.json) — so raising it means more testable logic is tested, not that we shipped less UI. Total coverage is kept for continuity. The excluded paths are not covered by any CI job. They are exercised only if a maintainer opts in locally (scripts/verify-pr.sh --simdrive --chaos), which needs a booted simulator and a QA harness that is not in this repo — so on a contributor's clone, and on every CI run, nothing exercises them.

📈 What changed vs. base

Test count: +5


🔗 Interactive HTML Report | CI Run Details

Counts above were produced by this CI run's xcresult parse — reproduce via the run link.

📦 Downloadable Artifacts
Artifact Description
test-report 📄 Markdown + HTML reports
test-data 📊 JSON data for tooling
test-results 🔍 Full xcresult (open in Xcode)

The Stats feature is a prototype that was never wired in. Verified before
deleting — from outside `Palace/Stats/` there are ZERO references to it:

    StatsView( constructed          0
    AppTab.stats referenced         0
    .stats referenced               0
    in any storyboard/xib/plist     0
    deep links mentioning stats     0

`case stats` was declared in `AppTabRouter` and never used, and `StatsTab`
gated itself behind a `readingStatsEnabled` remote flag that nothing else
reads. Twenty source files compiled into both targets to render a screen no
patron could open.

Removed: 20 source files, 7 Stats test files, and
`PalaceTests/UIPolish/BadgeUnlockPhaseTests.swift`, which tests
`BadgeUnlockPhase` — a type defined inside `BadgesView.swift` and therefore
deleted with it.

Two dependencies checked and cleared rather than assumed. `ReadingFormat` is
DUPLICATED: a `public` one in the `PalaceReadingPosition` package used
app-wide, and an internal copy in Stats. `ReadingPositionTests` uses the
package one and only named the Stats file in a comment, so it is untouched.
Four other test files matched a grep for "Badge" in the tab-bar, app-icon and
audiobook-format senses; also untouched.

Adds `scripts/pbxproj_remove_swift.rb`, the counterpart to the existing
`pbxproj_add_swift.rb`. A source file lives in six places across two targets
and hand-editing `project.pbxproj` is forbidden; a partial removal leaves a
dangling build file that fails with no useful message. 76 references dropped
across 28 files, groups pruned.

Found while auditing localization coverage: the feature's strings were being
translated into four languages before anyone asked whether the screens were
reachable.

**Scope:** deletion only. No behaviour change to any shipping screen.

**Not done:** no test asserts the feature stays gone — a future commit could
reintroduce an unreachable screen the same way and nothing would notice.

**Deferred:** `%@ day%@` in `StreakView` passed the English plural morpheme
`"s"` as a format argument and could not render correctly in German or Italian
at any count. It dies with this commit; if the feature is ever revived it needs
a `.stringsdict` entry rather than a literal suffix.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015xqE9uAiVMUc7kKHsXT17w
@mauricecarrier7
mauricecarrier7 force-pushed the chore/remove-unreachable-stats branch from 8686bf7 to bc9cbc8 Compare September 15, 2026 14:59
mauricecarrier7 pushed a commit that referenced this pull request Sep 15, 2026
One flaky test re-ran the entire suite. `-retry-tests-on-failure` is meant to
re-run what FAILED; `-test-repetition-relaunch-enabled YES` silently converts it
into a repetition of the whole plan.

MEASURED, four configurations against one prebuilt bundle, a plan of one
always-failing and three always-passing tests:

    flags                                              failing  passing
    retry + iterations 3 + relaunch YES  (was CI)         3x       3x
    retry + relaunch YES                                  3x       3x
    retry + iterations 3                                  3x       1x
    retry                                                 3x       1x

The retry CAP is 3 in all four; only the passing-test count moves. `relaunch` is
the multiplier and `-test-iterations` is not — the opposite of what the flag
names suggest, and the opposite of my first reading of them. `-test-iterations 3`
stays: `man xcodebuild` says retry alone "assumes a maximum of 3", so it is
equivalent, it states the cap, and the CI_TEST_ITERATIONS=1 single-pass path
keys off it.

In CI this was 30 minutes against 53. PR #1472 timed out twice against a
60-minute step bound on tests that each PASSED on retry. ~230 wasted billable
minutes per affected run on a 10x-billed macOS runner.

## What this costs, stated plainly

A retry now re-enters the SAME process. A victim wedged by a leaked per-clone
global will fail its retries too, where relaunch would have rescued it. That is
real: of the two failures observed on 2026-09-15, one was a 120.000s wedge (would
have needed relaunch) and one a 0.031s assertion flake (would not).

Taken deliberately. `ISOLATED_SERIAL_TESTS` already quarantines the known
wedge-prone classes out of the oversubscribed parallel leg, and the per-test
fixes (DEFLAKE-PLAN P1/P2) exist to remove the wedge source. Paying in occasional
red on a genuine wedge beats paying 23-30 minutes on EVERY run that stumbles
once.

## Guard

Four assertions over the committed flag list, comments excluded so the
measurement can stay in the file it describes. Proved by reintroducing the flag:
2 of 4 go red, and green again on restore. They also assert the retry safety net
and the explicit cap are still there, so the guard cannot be satisfied by
deleting retry altogether.

**Scope:** one xcodebuild flag and the test that keeps it gone.

**Not done:** the wedge fixes themselves. This makes their absence visible
instead of paying to hide it.

**Deferred:** `-default-test-execution-time-allowance 120` still lets one wedged
test burn two minutes. That is now the dominant per-flake cost rather than a
rounding error next to a full re-run.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015xqE9uAiVMUc7kKHsXT17w
mauricecarrier7 added a commit that referenced this pull request Sep 15, 2026
…ound while we watch (#1482)

* fix(ci): the test step's 60-min bound could not fit its own retry policy

PR #1472 went red twice on `The action 'Run Palace unit tests' has timed out
after 60 minutes`. Both times `** TEST SUCCEEDED **`, no timeout or restart
lines, and every test that failed an iteration passed on retry. Different
tests each time, none related to the branch — which deletes test files and
should be the FASTEST branch in flight. The tests were fine; the clock was not.

MEASURED across three runs of the same suite on 2026-09-15:

    depth  executions  step     branch
    1x      9,200      30 min   fix/reconciliation-article-false-positive
    3x     26,118      53 min   feat/pp-5094-localization-inventory
    2x     17,594      60 min   chore/remove-unreachable-stats (timed out)

A clean pass is 30 minutes. `-test-iterations 3` repeats the WHOLE plan when
any single test fails an iteration, adding 23-30 minutes. So the workflow
enabled a retry policy costing up to 3x and budgeted for 1x: 30 fits, 53
barely fits, 60 does not. Every branch is one flake away from this, and the
failure reads as a test problem rather than a budget problem, which is how it
cost two hours of rerunning before anyone measured the step.

Step 60 -> 75; job 90 -> 105 to keep the ~15 minutes of post-processing the
job cap was sized for.

## This is a bound, not the fix

~2/3 of the wall-clock in any run that flakes once is re-running tests that
already passed. `-retry-tests-on-failure` is supposed to scope a retry to the
failing tests; measured, it does not — 8,510 of 9,097 tests ran three times
because a handful failed once. Making that scope correctly would put every run
near 30 minutes regardless of flakes and put this ceiling out of reach. Tracked
separately; the comment in the workflow says explicitly not to raise this
number again in its place.

**Scope:** two timeout values and the measurements that justify them.

**Not done:** the retry-scoping fix. It needs a controlled experiment against
`-test-repetition-relaunch-enabled` to establish which flag turns a per-test
retry into a whole-plan repetition, and that experiment is not this PR.

**Deferred:** `-default-test-execution-time-allowance 120` means one wedged
test burns two minutes per iteration. At 3x depth a single wedge costs six.
That interacts with the budget but is a different lever.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015xqE9uAiVMUc7kKHsXT17w

* perf(ci): retry the tests that failed, not all 9,100

One flaky test re-ran the entire suite. `-retry-tests-on-failure` is meant to
re-run what FAILED; `-test-repetition-relaunch-enabled YES` silently converts it
into a repetition of the whole plan.

MEASURED, four configurations against one prebuilt bundle, a plan of one
always-failing and three always-passing tests:

    flags                                              failing  passing
    retry + iterations 3 + relaunch YES  (was CI)         3x       3x
    retry + relaunch YES                                  3x       3x
    retry + iterations 3                                  3x       1x
    retry                                                 3x       1x

The retry CAP is 3 in all four; only the passing-test count moves. `relaunch` is
the multiplier and `-test-iterations` is not — the opposite of what the flag
names suggest, and the opposite of my first reading of them. `-test-iterations 3`
stays: `man xcodebuild` says retry alone "assumes a maximum of 3", so it is
equivalent, it states the cap, and the CI_TEST_ITERATIONS=1 single-pass path
keys off it.

In CI this was 30 minutes against 53. PR #1472 timed out twice against a
60-minute step bound on tests that each PASSED on retry. ~230 wasted billable
minutes per affected run on a 10x-billed macOS runner.

## What this costs, stated plainly

A retry now re-enters the SAME process. A victim wedged by a leaked per-clone
global will fail its retries too, where relaunch would have rescued it. That is
real: of the two failures observed on 2026-09-15, one was a 120.000s wedge (would
have needed relaunch) and one a 0.031s assertion flake (would not).

Taken deliberately. `ISOLATED_SERIAL_TESTS` already quarantines the known
wedge-prone classes out of the oversubscribed parallel leg, and the per-test
fixes (DEFLAKE-PLAN P1/P2) exist to remove the wedge source. Paying in occasional
red on a genuine wedge beats paying 23-30 minutes on EVERY run that stumbles
once.

## Guard

Four assertions over the committed flag list, comments excluded so the
measurement can stay in the file it describes. Proved by reintroducing the flag:
2 of 4 go red, and green again on restore. They also assert the retry safety net
and the explicit cap are still there, so the guard cannot be satisfied by
deleting retry altogether.

**Scope:** one xcodebuild flag and the test that keeps it gone.

**Not done:** the wedge fixes themselves. This makes their absence visible
instead of paying to hide it.

**Deferred:** `-default-test-execution-time-allowance 120` still lets one wedged
test burn two minutes. That is now the dominant per-flake cost rather than a
rounding error next to a full re-run.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015xqE9uAiVMUc7kKHsXT17w

---------

Co-authored-by: t <t@t.io>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
@mauricecarrier7
mauricecarrier7 merged commit 7092ca4 into develop Sep 15, 2026
5 of 7 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.

1 participant