The Swift Package Index logo.Swift Package Index

Build Information

Successful build of BLESwift, reference main (e71d51), with Swift 6.3 for macOS (SPM) on 3 Sep 2026 17:43:40 UTC.

Swift 6 data race errors: 0

Build Command

env DEVELOPER_DIR=/Applications/Xcode-26.5.0.app xcrun swift build --arch arm64

Build Log

========================================
RunAll
========================================
Builder version: 5.0.2
Interrupt handler set up.
========================================
Checkout
========================================
Clone URL: https://github.com/kylebrowning/BLESwift.git
Reference: main
Initialized empty Git repository in /Users/admin/builder/spi-builder-workspace/.git/
From https://github.com/kylebrowning/BLESwift
 * branch            main       -> FETCH_HEAD
 * [new branch]      main       -> origin/main
HEAD is now at e71d514 Release 2.1.0: iOS Simulator support
Cloned https://github.com/kylebrowning/BLESwift.git
Revision (git rev-parse @):
e71d514da165bb594fda2719f4b7a2abb63563c3
SPI manifest file found: $PWD/.spi.yml
SUCCESS checkout https://github.com/kylebrowning/BLESwift.git at main
Fetching https://github.com/apple/swift-log.git
Fetching https://github.com/swiftlang/swift-docc-plugin
Fetching https://github.com/swiftlang/swift-docc-symbolkit
[1/2345] Fetching swift-docc-plugin
[72/10344] Fetching swift-docc-plugin, swift-log
[1996/14162] Fetching swift-docc-plugin, swift-log, swift-docc-symbolkit
Fetched https://github.com/apple/swift-log.git from cache (1.46s)
Fetched https://github.com/swiftlang/swift-docc-symbolkit from cache (1.46s)
Fetched https://github.com/swiftlang/swift-docc-plugin from cache (1.46s)
Computing version for https://github.com/apple/swift-log.git
Computed https://github.com/apple/swift-log.git at 1.14.0 (2.03s)
Computing version for https://github.com/swiftlang/swift-docc-plugin
Computed https://github.com/swiftlang/swift-docc-plugin at 1.5.0 (2.74s)
Computing version for https://github.com/swiftlang/swift-docc-symbolkit
Computed https://github.com/swiftlang/swift-docc-symbolkit at 1.0.0 (0.66s)
Creating working copy for https://github.com/swiftlang/swift-docc-plugin
Working copy of https://github.com/swiftlang/swift-docc-plugin resolved at 1.5.0
Creating working copy for https://github.com/apple/swift-log.git
Working copy of https://github.com/apple/swift-log.git resolved at 1.14.0
Creating working copy for https://github.com/swiftlang/swift-docc-symbolkit
Working copy of https://github.com/swiftlang/swift-docc-symbolkit resolved at 1.0.0
========================================
ResolveProductDependencies
========================================
Resolving dependencies ...
{
  "identity": ".resolve-product-dependencies",
  "name": "resolve-dependencies",
  "url": "/Users/admin/builder/spi-builder-workspace/.resolve-product-dependencies",
  "version": "unspecified",
  "path": "/Users/admin/builder/spi-builder-workspace/.resolve-product-dependencies",
  "traits": [
    "default"
  ],
  "dependencies": [
    {
      "identity": "bleswift",
      "name": "BLESwift",
      "url": "https://github.com/kylebrowning/BLESwift.git",
      "version": "unspecified",
      "path": "/Users/admin/builder/spi-builder-workspace/.resolve-product-dependencies/.build/checkouts/BLESwift",
      "traits": [
        "default"
      ],
      "dependencies": [
        {
          "identity": "swift-log",
          "name": "swift-log",
          "url": "https://github.com/apple/swift-log.git",
          "version": "1.15.0",
          "path": "/Users/admin/builder/spi-builder-workspace/.resolve-product-dependencies/.build/checkouts/swift-log",
          "traits": [
          ],
          "dependencies": [
          ]
        }
      ]
    }
  ]
}
Fetching https://github.com/kylebrowning/BLESwift.git
[1/3251] Fetching bleswift
Fetched https://github.com/kylebrowning/BLESwift.git from cache (1.34s)
Fetching https://github.com/apple/swift-log.git from cache
Fetched https://github.com/apple/swift-log.git from cache (0.65s)
Computing version for https://github.com/apple/swift-log.git
Computed https://github.com/apple/swift-log.git at 1.15.0 (1.21s)
Creating working copy for https://github.com/apple/swift-log.git
Working copy of https://github.com/apple/swift-log.git resolved at 1.15.0
Creating working copy for https://github.com/kylebrowning/BLESwift.git
Working copy of https://github.com/kylebrowning/BLESwift.git resolved at main (e71d514)
Found 1 product dependencies
  - swift-log
========================================
Build
========================================
Selected platform:         macosSpm
Swift version:             6.3
Building package at path:  $PWD
https://github.com/kylebrowning/BLESwift.git
Running build ...
env DEVELOPER_DIR=/Applications/Xcode-26.5.0.app xcrun swift build --arch arm64
[1/1] Compiling plugin Swift-DocC Preview
[2/2] Compiling plugin Swift-DocC
Building for debugging...
[2/23] Write sources
[5/23] Write bleswift-provider-entitlement.plist
[9/23] Write sources
[12/23] Copying BLESwiftLink.docc
[13/23] Copying BLESwiftCore.docc
[13/23] Copying BLESwiftSimulatorLink.docc
[13/23] Copying BLESwiftProvider.docc
[16/23] Copying BLESwiftTestSupport.docc
[17/23] Copying BLESwiftProfiles.docc
[18/23] Copying BLESwift.docc
[19/23] Write swift-version-69A768CDF2A0BEE1.txt
[21/84] Compiling Logging LoggingSystem.swift
[22/85] Compiling Logging Logger+Attributes.swift
[23/85] Compiling Logging Logger+With.swift
[24/85] Compiling Logging LogEvent.swift
[25/85] Compiling Logging LogHandler.swift
[26/85] Compiling Logging Logger.swift
[27/85] Compiling Logging MetadataProvider.swift
[28/85] Emitting module Logging
[29/85] Compiling BLESwiftCore AdvertisementData.swift
[30/85] Compiling BLESwiftCore Discovery.swift
[31/85] Compiling Logging Locks.swift
[32/85] Compiling Logging SwiftLogNoOpLogHandler.swift
[33/85] Compiling BLESwiftCore DescriptorIdentifier.swift
[34/85] Compiling BLESwiftCore PeripheralIdentifier.swift
[35/85] Compiling BLESwiftCore ServiceIdentifier.swift
[36/85] Compiling BLESwiftCore UUIDNormalization.swift
[37/85] Compiling BLESwiftCore RestoredPeripheralState.swift
[40/85] Compiling BLESwiftCore PeripheralAdvertisement.swift
[41/85] Compiling BLESwiftCore GATTAssignedNumbers+Characteristics.swift
[42/85] Compiling BLESwiftCore GATTAssignedNumbers+Descriptors.swift
[43/85] Compiling BLESwiftCore GATTAssignedNumbers+Services.swift
[44/85] Emitting module BLESwiftCore
[45/85] Compiling BLESwiftCore GATTAssignedNumbers.swift
[46/85] Compiling BLESwiftCore Identifier+Name.swift
[47/85] Compiling BLESwiftCore BackendRegistry.swift
[48/85] Compiling BLESwiftCore CentralEvent.swift
[49/85] Compiling BLESwiftCore CentralManaging.swift
[50/85] Compiling BLESwiftCore CharacteristicProperties.swift
[51/85] Compiling BLESwiftCore AttributePermissions.swift
[52/85] Compiling BLESwiftCore GATTCharacteristic.swift
[53/85] Compiling BLESwiftCore GATTService.swift
[54/85] Compiling BLESwiftCore ReadRequest.swift
[55/85] Compiling BLESwiftCore RequestToken.swift
[56/90] Compiling BLESwiftCore PeripheralRemote.swift
[57/90] Compiling BLESwiftCore ScanOptions.swift
[58/90] Compiling BLESwiftCore WriteType.swift
[59/90] Compiling BLESwiftCore WarningOptions.swift
[60/90] Compiling BLESwiftCore BLESwiftError.swift
[61/90] Compiling BLESwiftCore ATTError.swift
[62/90] Compiling BLESwiftCore L2CAPChannelRemote.swift
[63/90] Compiling BLESwiftCore L2CAPPSM.swift
[64/90] Compiling BLESwiftCore PeripheralConnectionState.swift
[65/90] Compiling BLESwiftCore PeripheralEvent.swift
[66/90] Compiling BLESwiftCore PeripheralHostEvent.swift
[67/90] Compiling BLESwiftCore PeripheralManaging.swift
[68/90] Compiling BLESwiftCore RestoredState.swift
[69/90] Compiling BLESwiftCore StartupBackgroundTask.swift
[70/90] Compiling BLESwiftCore ScanFilter.swift
[71/90] Compiling BLESwiftCore Combine.swift
[72/90] Compiling BLESwiftCore Data+Extractable.swift
[73/90] Compiling BLESwiftCore Subscriber.swift
[74/90] Compiling BLESwiftCore SubscriptionEvent.swift
[75/90] Compiling BLESwiftCore WriteRequest.swift
[76/90] Compiling BLESwiftCore GATTCompatibility.swift
[77/90] Compiling BLESwiftCore CharacteristicIdentifier.swift
[78/90] Compiling BLESwiftCore Data+Identity.swift
[79/90] Compiling BLESwiftCore DataPadding.swift
[80/90] Compiling BLESwiftCore Integer+Transferable.swift
[81/90] Compiling BLESwiftCore Receivable.swift
[82/90] Compiling BLESwiftCore String+Transferable.swift
[83/90] Compiling BLESwiftCore Transmittable.swift
[84/90] Compiling BLESwiftCore BluetoothAuthorization.swift
[85/90] Compiling BLESwiftCore CentralState.swift
[86/90] Compiling BLESwiftCore SystemConnectionEvent.swift
[87/90] Compiling BLESwiftCore resource_bundle_accessor.swift
[88/158] Compiling BLESwiftTestSupport resource_bundle_accessor.swift
[89/158] Compiling BLESwift RestoredState+CB.swift
[90/158] Compiling BLESwift WarningOptions+CB.swift
[91/158] Compiling BLESwift WriteType+CB.swift
[92/158] Compiling BLESwift Exports.swift
[93/158] Compiling BLESwift ANCSAuthorizationRegistry.swift
[94/162] Compiling BLESwift BluetoothAuthorization+CB.swift
[95/162] Compiling BLESwift CentralState+CB.swift
[96/162] Compiling BLESwift CharacteristicProperties+CB.swift
[97/162] Compiling BLESwift Identifiers+CBUUID.swift
[98/162] Compiling BLESwift PeripheralConnectionState+CB.swift
[99/162] Compiling BLESwift ConnectionState.swift
[100/162] Compiling BLESwift L2CAPChannel.swift
[101/162] Compiling BLESwift Peripheral+ANCS.swift
[102/162] Compiling BLESwift Peripheral+Chunked.swift
[103/162] Compiling BLESwift Peripheral+Composite.swift
[104/162] Compiling BLESwift UIKitStartupBackgroundTask.swift
[105/162] Compiling BLESwift ActiveScan.swift
[106/162] Compiling BLESwift ScanEvent.swift
[107/162] Compiling BLESwift resource_bundle_accessor.swift
[108/162] Compiling BLESwift PeripheralDelegateProxy.swift
[109/162] Compiling BLESwift PeripheralManagerDelegateProxy.swift
[110/162] Compiling BLESwift ATTError+CB.swift
[111/162] Compiling BLESwift AdvertisementData+CB.swift
[112/162] Compiling BLESwift AttributePermissions+CB.swift
[113/162] Compiling BLESwiftTestSupport FakeStartupBackgroundTask.swift
[114/162] Compiling BLESwiftTestSupport FakePeripheralManager.swift
[115/162] Compiling BLESwiftTestSupport FakeL2CAPChannel.swift
[116/162] Compiling BLESwiftTestSupport FakeGATTBridge.swift
[117/162] Compiling BLESwiftTestSupport FakeCentral.swift
[118/162] Emitting module BLESwiftTestSupport
[119/162] Compiling BLESwiftTestSupport FakePeripheral.swift
[120/162] Compiling BLESwiftLink LinkListener.swift
[121/163] Compiling BLESwiftLink LinkConnection.swift
[122/163] Compiling BLESwift PeripheralRestorationConfiguration.swift
[123/163] Compiling BLESwift PeripheralRestorationEvent.swift
[124/163] Compiling BLESwift RestorationConfiguration.swift
[125/163] Compiling BLESwift RestorationEvent.swift
[126/163] Compiling BLESwift Broadcaster.swift
[127/163] Compiling BLESwift ServiceChangesRegistry.swift
[128/163] Compiling BLESwift ThrowingBroadcaster.swift
[129/163] Compiling BLESwift WithTimeout.swift
[130/163] Compiling BLESwift PeripheralHost.swift
[131/163] Compiling BLESwift Peripheral+GATT.swift
[132/163] Compiling BLESwift Peripheral+L2CAP.swift
[133/163] Compiling BLESwift Peripheral+Notifications.swift
[134/163] Compiling BLESwift Peripheral.swift
[135/163] Compiling BLESwift ReconnectPolicy.swift
[136/163] Compiling BLESwift CBCentralManager+CentralManaging.swift
[137/163] Compiling BLESwift CBL2CAPChannelTransport.swift
[138/163] Compiling BLESwift CBPeripheral+PeripheralRemote.swift
[139/163] Compiling BLESwift CBPeripheralManager+PeripheralManaging.swift
[140/163] Compiling BLESwift CentralDelegateProxy.swift
[141/163] Compiling BLESwiftLink resource_bundle_accessor.swift
[144/163] Compiling BLESwiftLink WireLengthValidation.swift
[147/163] Compiling BLESwiftLink WireTypes.swift
[148/163] Compiling BLESwift Configuration.swift
[149/163] Compiling BLESwift BufferingPolicy.swift
[150/163] Emitting module BLESwiftLink
[151/163] Compiling BLESwift Central+Retrieval.swift
[152/163] Compiling BLESwift Central.swift
[153/163] Compiling BLESwift ConnectionEvent.swift
[155/171] Compiling BLESwiftSimulatorLink resource_bundle_accessor.swift
[156/171] Compiling BLESwiftSimulatorLink LinkPeripheral.swift
[157/171] Compiling BLESwiftSimulatorLink SimulatorLink.swift
[158/171] Compiling BLESwiftSimulatorLink LinkPeripheralManager.swift
[159/171] Compiling BLESwiftSimulatorLink LinkClientSession.swift
[160/171] Compiling BLESwiftSimulatorLink LinkL2CAPChannel.swift
[161/171] Emitting module BLESwiftSimulatorLink
[162/171] Compiling BLESwiftSimulatorLink LinkCentral.swift
[163/171] Emitting module BLESwift
[169/200] Compiling BLESwiftProfiles Peripheral+Profiles.swift
[170/200] Compiling BLESwiftProfiles IEEE11073Float.swift
[171/201] Compiling BLESwiftProvider CoreBluetoothBackends.swift
[172/201] Compiling BLESwiftProvider HeldMessageSize.swift
[173/201] Compiling BLESwiftProfiles GATTDateTime.swift
[174/201] Compiling BLESwiftProfiles HeartRateMeasurement.swift
[175/201] Compiling BLESwiftProfiles TemperatureMeasurement.swift
[176/201] Compiling BLESwiftProvider CompositeCentral.swift
[177/201] Compiling BLESwiftProvider CompositePeripheralManager.swift
[178/201] Compiling BLESwiftProfiles DeviceInformation.swift
[179/201] Emitting module BLESwiftProfiles
[180/201] Compiling BLESwiftProfiles CyclingPowerMeasurement.swift
[181/201] Compiling BLESwiftProfiles resource_bundle_accessor.swift
[182/201] Compiling BLESwiftProvider FixtureDeviceHandler.swift
[183/201] Compiling BLESwiftProvider VirtualCentralBackend.swift
[184/202] Emitting module BLESwiftProvider
[185/202] Compiling BLESwiftProvider VirtualDevice.swift
[186/202] Compiling BLESwiftProvider VirtualPeripheralManagerBackend.swift
[187/202] Compiling BLESwiftProvider VirtualPeripheralRemote.swift
[188/202] Compiling BLESwiftProvider VirtualRadio.swift
[191/202] Compiling BLESwiftProvider resource_bundle_accessor.swift
[192/202] Compiling BLESwiftProvider Provider.swift
[193/202] Compiling BLESwiftProvider ProviderCommandLine.swift
[194/202] Compiling BLESwiftProvider ProviderConfiguration.swift
[195/202] Compiling BLESwiftProvider CentralSession+L2CAP.swift
[198/202] Compiling BLESwiftProvider CentralSession.swift
[199/202] Compiling BLESwiftProvider HostSession.swift
[200/204] Emitting module bleswift_provider
[201/204] Compiling bleswift_provider main.swift
[201/204] Write Objects.LinkFileList
[202/204] Linking bleswift-provider
[203/204] Applying bleswift-provider
Build complete! (16.60s)
Build complete.
{
  "dependencies" : [
    {
      "identity" : "swift-docc-plugin",
      "requirement" : {
        "range" : [
          {
            "lower_bound" : "1.5.0",
            "upper_bound" : "2.0.0"
          }
        ]
      },
      "type" : "sourceControl",
      "url" : "https://github.com/swiftlang/swift-docc-plugin"
    },
    {
      "identity" : "swift-log",
      "requirement" : {
        "range" : [
          {
            "lower_bound" : "1.6.0",
            "upper_bound" : "2.0.0"
          }
        ]
      },
      "type" : "sourceControl",
      "url" : "https://github.com/apple/swift-log.git"
    }
  ],
  "manifest_display_name" : "BLESwift",
  "name" : "BLESwift",
  "path" : "/Users/admin/builder/spi-builder-workspace",
  "platforms" : [
    {
      "name" : "ios",
      "version" : "18.0"
    },
    {
      "name" : "macos",
      "version" : "15.0"
    },
    {
      "name" : "watchos",
      "version" : "11.0"
    },
    {
      "name" : "tvos",
      "version" : "18.0"
    },
    {
      "name" : "visionos",
      "version" : "2.0"
    }
  ],
  "products" : [
    {
      "name" : "BLESwift",
      "targets" : [
        "BLESwift"
      ],
      "type" : {
        "library" : [
          "automatic"
        ]
      }
    },
    {
      "name" : "BLESwiftCore",
      "targets" : [
        "BLESwiftCore"
      ],
      "type" : {
        "library" : [
          "automatic"
        ]
      }
    },
    {
      "name" : "BLESwiftProfiles",
      "targets" : [
        "BLESwiftProfiles"
      ],
      "type" : {
        "library" : [
          "automatic"
        ]
      }
    },
    {
      "name" : "BLESwiftTestSupport",
      "targets" : [
        "BLESwiftTestSupport"
      ],
      "type" : {
        "library" : [
          "automatic"
        ]
      }
    },
    {
      "name" : "BLESwiftLink",
      "targets" : [
        "BLESwiftLink"
      ],
      "type" : {
        "library" : [
          "automatic"
        ]
      }
    },
    {
      "name" : "BLESwiftSimulatorLink",
      "targets" : [
        "BLESwiftSimulatorLink"
      ],
      "type" : {
        "library" : [
          "automatic"
        ]
      }
    },
    {
      "name" : "BLESwiftProvider",
      "targets" : [
        "BLESwiftProvider"
      ],
      "type" : {
        "library" : [
          "automatic"
        ]
      }
    },
    {
      "name" : "bleswift-provider",
      "targets" : [
        "bleswift-provider"
      ],
      "type" : {
        "executable" : null
      }
    }
  ],
  "targets" : [
    {
      "c99name" : "bleswift_provider",
      "module_type" : "SwiftTarget",
      "name" : "bleswift-provider",
      "path" : "Sources/bleswift-provider",
      "product_memberships" : [
        "bleswift-provider"
      ],
      "sources" : [
        "main.swift"
      ],
      "target_dependencies" : [
        "BLESwiftProvider"
      ],
      "type" : "executable"
    },
    {
      "c99name" : "BLESwiftTests",
      "module_type" : "SwiftTarget",
      "name" : "BLESwiftTests",
      "path" : "Tests/BLESwiftTests",
      "sources" : [
        "ANCSTests.swift",
        "AdvertisementDataTests.swift",
        "BLESwiftErrorTests.swift",
        "BroadcasterTests.swift",
        "CentralTests.swift",
        "CharacteristicPropertiesTests.swift",
        "ChunkedWriteTests.swift",
        "CompatibilityTests.swift",
        "CompositeTests.swift",
        "ConcurrentConnectRegressionTests.swift",
        "ConnectionEventsTests.swift",
        "ConnectionTests.swift",
        "CoreBluetoothBridgingTests.swift",
        "CrossRoleEndToEndTests.swift",
        "DataExtractionTests.swift",
        "DescriptorTests.swift",
        "FakesSmokeTests.swift",
        "GATTAssignedNumbersTests.swift",
        "GATTEnumerationTests.swift",
        "GATTTests.swift",
        "IdentifierTests.swift",
        "L2CAPTests.swift",
        "MultiPeripheralGATTIsolationTests.swift",
        "NotificationReconnectTests.swift",
        "NotificationTests.swift",
        "PeripheralDisconnectTests.swift",
        "PeripheralHostCancellationTests.swift",
        "PeripheralHostRestorationTests.swift",
        "PeripheralHostTests.swift",
        "PrimitiveRoundTripTests.swift",
        "ProfilesPeripheralTests.swift",
        "ProfilesTests.swift",
        "RestorationTests.swift",
        "RetrievalTests.swift",
        "ScanFilterTests.swift",
        "ScanTests.swift",
        "ServiceChangesRegistryTests.swift",
        "TestHelpers.swift",
        "ThrowingBroadcasterTests.swift"
      ],
      "target_dependencies" : [
        "BLESwift",
        "BLESwiftCore",
        "BLESwiftProfiles",
        "BLESwiftTestSupport"
      ],
      "type" : "test"
    },
    {
      "c99name" : "BLESwiftTestSupport",
      "module_type" : "SwiftTarget",
      "name" : "BLESwiftTestSupport",
      "path" : "Sources/BLESwiftTestSupport",
      "product_memberships" : [
        "BLESwiftTestSupport"
      ],
      "resources" : [
        {
          "path" : "/Users/admin/builder/spi-builder-workspace/Sources/BLESwiftTestSupport/BLESwiftTestSupport.docc",
          "rule" : {
            "copy" : {
            }
          }
        }
      ],
      "sources" : [
        "FakeCentral.swift",
        "FakeGATTBridge.swift",
        "FakeL2CAPChannel.swift",
        "FakePeripheral.swift",
        "FakePeripheralManager.swift",
        "FakeStartupBackgroundTask.swift"
      ],
      "target_dependencies" : [
        "BLESwiftCore"
      ],
      "type" : "library"
    },
    {
      "c99name" : "BLESwiftSimulatorLink",
      "module_type" : "SwiftTarget",
      "name" : "BLESwiftSimulatorLink",
      "path" : "Sources/BLESwiftSimulatorLink",
      "product_dependencies" : [
        "Logging"
      ],
      "product_memberships" : [
        "BLESwiftSimulatorLink"
      ],
      "resources" : [
        {
          "path" : "/Users/admin/builder/spi-builder-workspace/Sources/BLESwiftSimulatorLink/BLESwiftSimulatorLink.docc",
          "rule" : {
            "copy" : {
            }
          }
        }
      ],
      "sources" : [
        "LinkCentral.swift",
        "LinkClientSession.swift",
        "LinkL2CAPChannel.swift",
        "LinkPeripheral.swift",
        "LinkPeripheralManager.swift",
        "SimulatorLink.swift"
      ],
      "target_dependencies" : [
        "BLESwiftCore",
        "BLESwiftLink"
      ],
      "type" : "library"
    },
    {
      "c99name" : "BLESwiftProvider",
      "module_type" : "SwiftTarget",
      "name" : "BLESwiftProvider",
      "path" : "Sources/BLESwiftProvider",
      "product_dependencies" : [
        "Logging"
      ],
      "product_memberships" : [
        "BLESwiftProvider",
        "bleswift-provider"
      ],
      "resources" : [
        {
          "path" : "/Users/admin/builder/spi-builder-workspace/Sources/BLESwiftProvider/BLESwiftProvider.docc",
          "rule" : {
            "copy" : {
            }
          }
        }
      ],
      "sources" : [
        "Composite/CompositeCentral.swift",
        "Composite/CompositePeripheralManager.swift",
        "CoreBluetoothBackends.swift",
        "HeldMessageSize.swift",
        "Provider.swift",
        "ProviderCommandLine.swift",
        "ProviderConfiguration.swift",
        "Sessions/CentralSession+L2CAP.swift",
        "Sessions/CentralSession.swift",
        "Sessions/HostSession.swift",
        "VirtualRadio/FixtureDeviceHandler.swift",
        "VirtualRadio/VirtualCentralBackend.swift",
        "VirtualRadio/VirtualDevice.swift",
        "VirtualRadio/VirtualPeripheralManagerBackend.swift",
        "VirtualRadio/VirtualPeripheralRemote.swift",
        "VirtualRadio/VirtualRadio.swift"
      ],
      "target_dependencies" : [
        "BLESwift",
        "BLESwiftLink"
      ],
      "type" : "library"
    },
    {
      "c99name" : "BLESwiftProfiles",
      "module_type" : "SwiftTarget",
      "name" : "BLESwiftProfiles",
      "path" : "Sources/BLESwiftProfiles",
      "product_memberships" : [
        "BLESwiftProfiles"
      ],
      "resources" : [
        {
          "path" : "/Users/admin/builder/spi-builder-workspace/Sources/BLESwiftProfiles/BLESwiftProfiles.docc",
          "rule" : {
            "copy" : {
            }
          }
        }
      ],
      "sources" : [
        "BatteryLevel.swift",
        "BodySensorLocation.swift",
        "CSCMeasurement.swift",
        "CurrentTime.swift",
        "CyclingPowerMeasurement.swift",
        "DeviceInformation.swift",
        "GATTDateTime.swift",
        "HeartRateMeasurement.swift",
        "IEEE11073Float.swift",
        "Peripheral+Profiles.swift",
        "TemperatureMeasurement.swift"
      ],
      "target_dependencies" : [
        "BLESwift"
      ],
      "type" : "library"
    },
    {
      "c99name" : "BLESwiftLinkTests",
      "module_type" : "SwiftTarget",
      "name" : "BLESwiftLinkTests",
      "path" : "Tests/BLESwiftLinkTests",
      "sources" : [
        "BackendRegistrySerializedTests.swift",
        "CentralEndToEndTests.swift",
        "CentralSessionLimitsTests.swift",
        "CompositeBackendTests.swift",
        "FixtureTests.swift",
        "HostEndToEndTests.swift",
        "HostSessionLimitsTests.swift",
        "L2CAPLinkTests.swift",
        "LinkCentralTests.swift",
        "LinkClientSessionTests.swift",
        "LinkCodecTests.swift",
        "LinkEndpointTests.swift",
        "LinkFramingTests.swift",
        "LinkPeripheralManagerTests.swift",
        "LinkPeripheralTests.swift",
        "LinkTestHelpers.swift",
        "ParityTests.swift",
        "PassthroughWiringTests.swift",
        "ProviderBacklogTests.swift",
        "ProviderCommandLineTests.swift",
        "ProviderLifecycleTests.swift",
        "TransportLoopbackTests.swift",
        "VirtualPeripheralManagerTests.swift",
        "VirtualRadioTests.swift",
        "WireIdentifierValidationTests.swift",
        "WireLengthValidationTests.swift",
        "WireMessageTests.swift"
      ],
      "target_dependencies" : [
        "BLESwift",
        "BLESwiftCore",
        "BLESwiftTestSupport",
        "BLESwiftLink",
        "BLESwiftSimulatorLink",
        "BLESwiftProvider"
      ],
      "type" : "test"
    },
    {
      "c99name" : "BLESwiftLink",
      "module_type" : "SwiftTarget",
      "name" : "BLESwiftLink",
      "path" : "Sources/BLESwiftLink",
      "product_dependencies" : [
        "Logging"
      ],
      "product_memberships" : [
        "BLESwiftLink",
        "BLESwiftSimulatorLink",
        "BLESwiftProvider",
        "bleswift-provider"
      ],
      "resources" : [
        {
          "path" : "/Users/admin/builder/spi-builder-workspace/Sources/BLESwiftLink/BLESwiftLink.docc",
          "rule" : {
            "copy" : {
            }
          }
        }
      ],
      "sources" : [
        "Fixtures/Fixture.swift",
        "LinkCodec.swift",
        "LinkEndpoint.swift",
        "LinkFraming.swift",
        "LinkProtocol.swift",
        "Messages/CentralMessages.swift",
        "Messages/Handshake.swift",
        "Messages/HostMessages.swift",
        "Messages/LinkMessage.swift",
        "Messages/WireIdentifierValidation.swift",
        "Messages/WireLengthValidation.swift",
        "Messages/WireTypes.swift",
        "Transport/LinkConnection.swift",
        "Transport/LinkListener.swift"
      ],
      "target_dependencies" : [
        "BLESwiftCore"
      ],
      "type" : "library"
    },
    {
      "c99name" : "BLESwiftCore",
      "module_type" : "SwiftTarget",
      "name" : "BLESwiftCore",
      "path" : "Sources/BLESwiftCore",
      "product_memberships" : [
        "BLESwift",
        "BLESwiftCore",
        "BLESwiftProfiles",
        "BLESwiftTestSupport",
        "BLESwiftLink",
        "BLESwiftSimulatorLink",
        "BLESwiftProvider",
        "bleswift-provider"
      ],
      "resources" : [
        {
          "path" : "/Users/admin/builder/spi-builder-workspace/Sources/BLESwiftCore/BLESwiftCore.docc",
          "rule" : {
            "copy" : {
            }
          }
        }
      ],
      "sources" : [
        "Advertisement/AdvertisementData.swift",
        "Advertisement/Discovery.swift",
        "Advertisement/PeripheralAdvertisement.swift",
        "AssignedNumbers/GATTAssignedNumbers+Characteristics.swift",
        "AssignedNumbers/GATTAssignedNumbers+Descriptors.swift",
        "AssignedNumbers/GATTAssignedNumbers+Services.swift",
        "AssignedNumbers/GATTAssignedNumbers.swift",
        "AssignedNumbers/Identifier+Name.swift",
        "Backend/BackendRegistry.swift",
        "Backend/CentralEvent.swift",
        "Backend/CentralManaging.swift",
        "Backend/CharacteristicProperties.swift",
        "Backend/L2CAPChannelRemote.swift",
        "Backend/L2CAPPSM.swift",
        "Backend/PeripheralConnectionState.swift",
        "Backend/PeripheralEvent.swift",
        "Backend/PeripheralHostEvent.swift",
        "Backend/PeripheralManaging.swift",
        "Backend/PeripheralRemote.swift",
        "Backend/ScanOptions.swift",
        "Backend/WriteType.swift",
        "Configuration/WarningOptions.swift",
        "Errors/BLESwiftError.swift",
        "GATT/ATTError.swift",
        "GATT/AttributePermissions.swift",
        "GATT/GATTCharacteristic.swift",
        "GATT/GATTService.swift",
        "GATT/ReadRequest.swift",
        "GATT/RequestToken.swift",
        "GATT/Subscriber.swift",
        "GATT/SubscriptionEvent.swift",
        "GATT/WriteRequest.swift",
        "GATTCompatibility.swift",
        "Identifiers/CharacteristicIdentifier.swift",
        "Identifiers/DescriptorIdentifier.swift",
        "Identifiers/PeripheralIdentifier.swift",
        "Identifiers/ServiceIdentifier.swift",
        "Identifiers/UUIDNormalization.swift",
        "Restoration/RestoredPeripheralState.swift",
        "Restoration/RestoredState.swift",
        "Restoration/StartupBackgroundTask.swift",
        "Scanning/ScanFilter.swift",
        "Serialization/Combine.swift",
        "Serialization/Data+Extractable.swift",
        "Serialization/Data+Identity.swift",
        "Serialization/DataPadding.swift",
        "Serialization/Integer+Transferable.swift",
        "Serialization/Receivable.swift",
        "Serialization/String+Transferable.swift",
        "Serialization/Transmittable.swift",
        "State/BluetoothAuthorization.swift",
        "State/CentralState.swift",
        "State/SystemConnectionEvent.swift"
      ],
      "type" : "library"
    },
    {
      "c99name" : "BLESwift",
      "module_type" : "SwiftTarget",
      "name" : "BLESwift",
      "path" : "Sources/BLESwift",
      "product_dependencies" : [
        "Logging"
      ],
      "product_memberships" : [
        "BLESwift",
        "BLESwiftProfiles",
        "BLESwiftProvider",
        "bleswift-provider"
      ],
      "resources" : [
        {
          "path" : "/Users/admin/builder/spi-builder-workspace/Sources/BLESwift/BLESwift.docc",
          "rule" : {
            "copy" : {
            }
          }
        }
      ],
      "sources" : [
        "Central+Retrieval.swift",
        "Central.swift",
        "Configuration/Configuration.swift",
        "Connection/BufferingPolicy.swift",
        "Connection/ConnectionEvent.swift",
        "Connection/ConnectionState.swift",
        "Connection/L2CAPChannel.swift",
        "Connection/Peripheral+ANCS.swift",
        "Connection/Peripheral+Chunked.swift",
        "Connection/Peripheral+Composite.swift",
        "Connection/Peripheral+GATT.swift",
        "Connection/Peripheral+L2CAP.swift",
        "Connection/Peripheral+Notifications.swift",
        "Connection/Peripheral.swift",
        "Connection/ReconnectPolicy.swift",
        "CoreBluetoothBackend/CBCentralManager+CentralManaging.swift",
        "CoreBluetoothBackend/CBL2CAPChannelTransport.swift",
        "CoreBluetoothBackend/CBPeripheral+PeripheralRemote.swift",
        "CoreBluetoothBackend/CBPeripheralManager+PeripheralManaging.swift",
        "CoreBluetoothBackend/CentralDelegateProxy.swift",
        "CoreBluetoothBackend/PeripheralDelegateProxy.swift",
        "CoreBluetoothBackend/PeripheralManagerDelegateProxy.swift",
        "CoreBluetoothBridging/ATTError+CB.swift",
        "CoreBluetoothBridging/AdvertisementData+CB.swift",
        "CoreBluetoothBridging/AttributePermissions+CB.swift",
        "CoreBluetoothBridging/BluetoothAuthorization+CB.swift",
        "CoreBluetoothBridging/CentralState+CB.swift",
        "CoreBluetoothBridging/CharacteristicProperties+CB.swift",
        "CoreBluetoothBridging/Identifiers+CBUUID.swift",
        "CoreBluetoothBridging/PeripheralConnectionState+CB.swift",
        "CoreBluetoothBridging/RestoredState+CB.swift",
        "CoreBluetoothBridging/WarningOptions+CB.swift",
        "CoreBluetoothBridging/WriteType+CB.swift",
        "Exports.swift",
        "Internal/ANCSAuthorizationRegistry.swift",
        "Internal/Broadcaster.swift",
        "Internal/ServiceChangesRegistry.swift",
        "Internal/ThrowingBroadcaster.swift",
        "Internal/WithTimeout.swift",
        "PeripheralHost.swift",
        "Restoration/PeripheralRestorationConfiguration.swift",
        "Restoration/PeripheralRestorationEvent.swift",
        "Restoration/RestorationConfiguration.swift",
        "Restoration/RestorationEvent.swift",
        "Restoration/UIKitStartupBackgroundTask.swift",
        "Scanning/ActiveScan.swift",
        "Scanning/ScanEvent.swift"
      ],
      "target_dependencies" : [
        "BLESwiftCore"
      ],
      "type" : "library"
    }
  ],
  "tools_version" : "6.2"
}
✅  Doc result (pending) reported
========================================
GenerateDocs
========================================
Generating docs at path:  $PWD/.docs/kylebrowning/bleswift/main
Repository:               kylebrowning/BLESwift
Swift version used:       6.3
        .package(url: "https://github.com/swiftlang/swift-docc-plugin", from: "1.5.0"),
Target:                   BLESwift
Extracting symbol information for 'BLESwift'...
Finished extracting symbol information for 'BLESwift'. (27.40s)
Building documentation for 'BLESwift'...
warning: 'WarningOptions' doesn't exist at '/BLESwift'
  --> BLESwift.md:56:5-56:19
54 | - ``Central``
55 | - ``Configuration``
56 + - ``WarningOptions``
57 |
58 | ### Bluetooth & Connection State
warning: 'CentralState' doesn't exist at '/BLESwift'
  --> BLESwift.md:60:5-60:17
58 | ### Bluetooth & Connection State
59 |
60 + - ``CentralState``
   |     ╰─suggestion: Replace 'CentralState' with 'Central'
61 | - ``BluetoothAuthorization``
62 | - ``ConnectionState``
warning: 'BluetoothAuthorization' doesn't exist at '/BLESwift'
  --> BLESwift.md:61:5-61:27
59 |
60 | - ``CentralState``
61 + - ``BluetoothAuthorization``
   |     ╰─suggestion: Replace 'BluetoothAuthorization' with 'Bluetooth--Connection-State'
62 | - ``ConnectionState``
63 |
warning: 'Scanning' is ambiguous at '/BLESwift'
  --> BLESwift.md:66:8-66:16
64 | ### Scanning
65 |
66 + - <doc:Scanning>
   |                ├─suggestion: Insert '-anchor' for 'Scanning'
   |                ╰─suggestion: Insert '-article' for 'Scanning'
67 | - ``ScanEvent``
68 | - ``ScanFilter``
warning: 'ScanFilter' doesn't exist at '/BLESwift'
  --> BLESwift.md:68:5-68:15
66 | - <doc:Scanning>
67 | - ``ScanEvent``
68 + - ``ScanFilter``
   |     ╰─suggestion: Replace 'ScanFilter' with 'ScanEvent'
69 | - ``Discovery``
70 | - ``AdvertisementData``
warning: 'Discovery' doesn't exist at '/BLESwift'
  --> BLESwift.md:69:5-69:14
67 | - ``ScanEvent``
68 | - ``ScanFilter``
69 + - ``Discovery``
70 | - ``AdvertisementData``
71 | - ``Central/findFirst(matching:timeout:)``
warning: 'AdvertisementData' doesn't exist at '/BLESwift'
  --> BLESwift.md:70:5-70:22
68 | - ``ScanFilter``
69 | - ``Discovery``
70 + - ``AdvertisementData``
71 | - ``Central/findFirst(matching:timeout:)``
72 | - ``Central/connect(identifier:fallbackScan:reconnect:timeout:compatibility:)``
warning: 'GATTCompatibility' doesn't exist at '/BLESwift'
  --> BLESwift.md:86:5-86:22
84 | - ``ConnectionEvent``
85 | - ``ReconnectPolicy``
86 + - ``GATTCompatibility``
87 | - ``GATTCompatibility/DiscoveryMode``
88 |
warning: 'GATTCompatibility' doesn't exist at '/BLESwift'
  --> BLESwift.md:87:5-87:22
85 | - ``ReconnectPolicy``
86 | - ``GATTCompatibility``
87 + - ``GATTCompatibility/DiscoveryMode``
88 |
89 | ### System Connection Events & ANCS
warning: 'SystemConnectionEvent' doesn't exist at '/BLESwift'
  --> BLESwift.md:96:5-96:26
94 |
95 | - <doc:SystemEvents>
96 + - ``SystemConnectionEvent``
   |     ├─suggestion: Replace 'SystemConnectionEvent' with 'System-Connection-Events--ANCS'
   |     ├─suggestion: Replace 'SystemConnectionEvent' with 'ConnectionEvent'
   |     ╰─suggestion: Replace 'SystemConnectionEvent' with 'SystemEvents'
97 | - ``Central/connectionEventRegistration(services:peripherals:)``
98 |
warning: 'connectionEventRegistration(services:peripherals:)' doesn't exist at '/BLESwift/Central'
  --> BLESwift.md:97:13-97:63
95 | - <doc:SystemEvents>
96 | - ``SystemConnectionEvent``
97 + - ``Central/connectionEventRegistration(services:peripherals:)``
   |             ╰─suggestion: Replace 'connectionEventRegistration(services:peripherals:)' with 'connectionEvents()'
98 |
99 | ### Reading, Writing, and Notifications
warning: 'L2CAPPSM' doesn't exist at '/BLESwift'
   --> BLESwift.md:109:5-109:13
107 | - <doc:L2CAPChannels>
108 | - ``L2CAPChannel``
109 + - ``L2CAPPSM``
    |     ├─suggestion: Replace 'L2CAPPSM' with 'L2CAPChannel'
    |     ├─suggestion: Replace 'L2CAPPSM' with 'L2CAPChannels'
    |     ╰─suggestion: Replace 'L2CAPPSM' with 'L2CAP-Channels'
110 |
111 | ### Background Restoration
warning: 'RestorationConfiguration' doesn't exist at '/BLESwift'
   --> BLESwift.md:114:5-114:29
112 |
113 | - <doc:BackgroundRestoration>
114 + - ``RestorationConfiguration``
    |     ╰─suggestion: Replace 'RestorationConfiguration' with 'Configuration'
115 | - ``RestorationEvent``
116 | - ``PeripheralRestorationConfiguration``
warning: 'RestorationEvent' doesn't exist at '/BLESwift'
   --> BLESwift.md:115:5-115:21
113 | - <doc:BackgroundRestoration>
114 | - ``RestorationConfiguration``
115 + - ``RestorationEvent``
    |     ├─suggestion: Replace 'RestorationEvent' with 'BackgroundRestoration'
    |     ├─suggestion: Replace 'RestorationEvent' with 'Background-Restoration'
    |     ╰─suggestion: Replace 'RestorationEvent' with 'ConnectionEvent'
116 | - ``PeripheralRestorationConfiguration``
117 | - ``PeripheralRestorationEvent``
warning: 'PeripheralRestorationConfiguration' doesn't exist at '/BLESwift'
   --> BLESwift.md:116:5-116:39
114 | - ``RestorationConfiguration``
115 | - ``RestorationEvent``
116 + - ``PeripheralRestorationConfiguration``
    |     ├─suggestion: Replace 'PeripheralRestorationConfiguration' with 'PeripheralRole'
    |     ├─suggestion: Replace 'PeripheralRestorationConfiguration' with 'PeripheralHost'
    |     ├─suggestion: Replace 'PeripheralRestorationConfiguration' with 'Peripheral'
    |     ╰─suggestion: Replace 'PeripheralRestorationConfiguration' with 'Peripheral-Role-GATT-server'
117 | - ``PeripheralRestorationEvent``
118 |
warning: 'PeripheralRestorationEvent' doesn't exist at '/BLESwift'
   --> BLESwift.md:117:5-117:31
115 | - ``RestorationEvent``
116 | - ``PeripheralRestorationConfiguration``
117 + - ``PeripheralRestorationEvent``
    |     ├─suggestion: Replace 'PeripheralRestorationEvent' with 'PeripheralRole'
    |     ├─suggestion: Replace 'PeripheralRestorationEvent' with 'PeripheralHost'
    |     ├─suggestion: Replace 'PeripheralRestorationEvent' with 'Peripheral-Role-GATT-server'
    |     ╰─suggestion: Replace 'PeripheralRestorationEvent' with 'Peripheral'
118 |
119 | ### Peripheral Role (GATT server)
warning: 'GATTService' doesn't exist at '/BLESwift'
   --> BLESwift.md:127:5-127:16
125 | - <doc:CrossRoleExample>
126 | - ``PeripheralHost``
127 + - ``GATTService``
128 | - ``GATTCharacteristic``
129 | - ``CharacteristicProperties``
warning: 'GATTCharacteristic' doesn't exist at '/BLESwift'
   --> BLESwift.md:128:5-128:23
126 | - ``PeripheralHost``
127 | - ``GATTService``
128 + - ``GATTCharacteristic``
129 | - ``CharacteristicProperties``
130 | - ``AttributePermissions``
warning: 'CharacteristicProperties' doesn't exist at '/BLESwift'
   --> BLESwift.md:129:5-129:29
127 | - ``GATTService``
128 | - ``GATTCharacteristic``
129 + - ``CharacteristicProperties``
130 | - ``AttributePermissions``
131 | - ``PeripheralAdvertisement``
warning: 'AttributePermissions' doesn't exist at '/BLESwift'
   --> BLESwift.md:130:5-130:25
128 | - ``GATTCharacteristic``
129 | - ``CharacteristicProperties``
130 + - ``AttributePermissions``
131 | - ``PeripheralAdvertisement``
132 | - ``ReadRequest``
warning: 'PeripheralAdvertisement' doesn't exist at '/BLESwift'
   --> BLESwift.md:131:5-131:28
129 | - ``CharacteristicProperties``
130 | - ``AttributePermissions``
131 + - ``PeripheralAdvertisement``
    |     ├─suggestion: Replace 'PeripheralAdvertisement' with 'PeripheralHost'
    |     ├─suggestion: Replace 'PeripheralAdvertisement' with 'Peripheral'
    |     ├─suggestion: Replace 'PeripheralAdvertisement' with 'PeripheralRole'
    |     ╰─suggestion: Replace 'PeripheralAdvertisement' with 'Peripheral-Role-GATT-server'
132 | - ``ReadRequest``
133 | - ``WriteRequest``
warning: 'ReadRequest' doesn't exist at '/BLESwift'
   --> BLESwift.md:132:5-132:16
130 | - ``AttributePermissions``
131 | - ``PeripheralAdvertisement``
132 + - ``ReadRequest``
133 | - ``WriteRequest``
134 | - ``RequestToken``
warning: 'WriteRequest' doesn't exist at '/BLESwift'
   --> BLESwift.md:133:5-133:17
131 | - ``PeripheralAdvertisement``
132 | - ``ReadRequest``
133 + - ``WriteRequest``
    |     ╰─suggestion: Replace 'WriteRequest' with 'WriteProgress'
134 | - ``RequestToken``
135 | - ``ATTError``
warning: 'RequestToken' doesn't exist at '/BLESwift'
   --> BLESwift.md:134:5-134:17
132 | - ``ReadRequest``
133 | - ``WriteRequest``
134 + - ``RequestToken``
135 | - ``ATTError``
136 | - ``Subscriber``
warning: 'ATTError' doesn't exist at '/BLESwift'
   --> BLESwift.md:135:5-135:13
133 | - ``WriteRequest``
134 | - ``RequestToken``
135 + - ``ATTError``
    |     ╰─suggestion: Replace 'ATTError' with 'Errors'
136 | - ``Subscriber``
137 | - ``SubscriptionEvent``
warning: 'Subscriber' doesn't exist at '/BLESwift'
   --> BLESwift.md:136:5-136:15
134 | - ``RequestToken``
135 | - ``ATTError``
136 + - ``Subscriber``
137 | - ``SubscriptionEvent``
138 | - ``PeripheralHostEvent``
warning: 'SubscriptionEvent' doesn't exist at '/BLESwift'
   --> BLESwift.md:137:5-137:22
135 | - ``ATTError``
136 | - ``Subscriber``
137 + - ``SubscriptionEvent``
    |     ╰─suggestion: Replace 'SubscriptionEvent' with 'ConnectionEvent'
138 | - ``PeripheralHostEvent``
139 |
warning: 'PeripheralHostEvent' doesn't exist at '/BLESwift'
   --> BLESwift.md:138:5-138:24
136 | - ``Subscriber``
137 | - ``SubscriptionEvent``
138 + - ``PeripheralHostEvent``
    |     ├─suggestion: Replace 'PeripheralHostEvent' with 'PeripheralHost'
    |     ├─suggestion: Replace 'PeripheralHostEvent' with 'PeripheralRole'
    |     ├─suggestion: Replace 'PeripheralHostEvent' with 'Peripheral'
    |     ╰─suggestion: Replace 'PeripheralHostEvent' with 'Peripheral-Role-GATT-server'
139 |
140 | ### Identifiers
warning: 'PeripheralIdentifier' doesn't exist at '/BLESwift'
   --> BLESwift.md:142:5-142:25
140 | ### Identifiers
141 |
142 + - ``PeripheralIdentifier``
    |     ├─suggestion: Replace 'PeripheralIdentifier' with 'Peripheral'
    |     ├─suggestion: Replace 'PeripheralIdentifier' with 'PeripheralHost'
    |     ├─suggestion: Replace 'PeripheralIdentifier' with 'PeripheralRole'
    |     ╰─suggestion: Replace 'PeripheralIdentifier' with 'Peripheral-Role-GATT-server'
143 | - ``ServiceIdentifier``
144 | - ``CharacteristicIdentifier``
warning: 'ServiceIdentifier' doesn't exist at '/BLESwift'
   --> BLESwift.md:143:5-143:22
141 |
142 | - ``PeripheralIdentifier``
143 + - ``ServiceIdentifier``
    |     ╰─suggestion: Replace 'ServiceIdentifier' with 'Identifiers'
144 | - ``CharacteristicIdentifier``
145 | - ``DescriptorIdentifier``
warning: 'CharacteristicIdentifier' doesn't exist at '/BLESwift'
   --> BLESwift.md:144:5-144:29
142 | - ``PeripheralIdentifier``
143 | - ``ServiceIdentifier``
144 + - ``CharacteristicIdentifier``
145 | - ``DescriptorIdentifier``
146 |
warning: 'DescriptorIdentifier' doesn't exist at '/BLESwift'
   --> BLESwift.md:145:5-145:25
143 | - ``ServiceIdentifier``
144 | - ``CharacteristicIdentifier``
145 + - ``DescriptorIdentifier``
    |     ╰─suggestion: Replace 'DescriptorIdentifier' with 'Identifiers'
146 |
147 | ### Serialization
warning: 'Receivable' doesn't exist at '/BLESwift'
   --> BLESwift.md:149:5-149:15
147 | ### Serialization
148 |
149 + - ``Receivable``
150 | - ``Transmittable``
151 | - ``DataPadding``
warning: 'Transmittable' doesn't exist at '/BLESwift'
   --> BLESwift.md:150:5-150:18
148 |
149 | - ``Receivable``
150 + - ``Transmittable``
151 | - ``DataPadding``
152 | - ``combine(_:)``
warning: 'DataPadding' doesn't exist at '/BLESwift'
   --> BLESwift.md:151:5-151:16
149 | - ``Receivable``
150 | - ``Transmittable``
151 + - ``DataPadding``
152 | - ``combine(_:)``
153 |
warning: 'combine(_:)' doesn't exist at '/BLESwift'
   --> BLESwift.md:152:5-152:16
150 | - ``Transmittable``
151 | - ``DataPadding``
152 + - ``combine(_:)``
153 |
154 | ### Errors
warning: 'BLESwiftError' doesn't exist at '/BLESwift'
   --> BLESwift.md:156:5-156:18
154 | ### Errors
155 |
156 + - ``BLESwiftError``
warning: 'BLESwiftError' doesn't exist at '/BLESwift/ConnectionsAndReconnection'
  --> ConnectionsAndReconnection.md:16:3-16:16
14 |
15 | ``Central/connect(_:timeout:reconnect:warningOptions:compatibility:)`` only ever throws
16 + ``BLESwiftError/duplicateConnect(_:)`` when the *same* `PeripheralIdentifier` is targeted while
17 | it already has a tracked entry (connecting, connected, or disconnecting) — connecting to a
18 | different peripheral concurrently is always fine.
warning: 'BLESwiftError' doesn't exist at '/BLESwift/ConnectionsAndReconnection'
  --> ConnectionsAndReconnection.md:32:3-32:16
30 | `timeout` defaults to 15 seconds; pass `nil` to wait indefinitely. On timeout, `Central` cancels
31 | the pending CoreBluetooth connection attempt and waits for confirmation before throwing
32 + ``BLESwiftError/connectionTimedOut`` — the underlying attempt is genuinely torn down, not just
33 | abandoned client-side.
34 |
warning: 'BLESwiftError' doesn't exist at '/BLESwift/ConnectionsAndReconnection'
   --> ConnectionsAndReconnection.md:166:33-166:46
164 |
165 | - **Reconnect policy exhausted** (or the loop cancelled): the stream throws the original
166 +   disconnect error, typically ``BLESwiftError/unexpectedDisconnect``.
167 | - **Explicit teardown** — ``Central/disconnect(_:)`` (including mid-backoff),
168 |   ``Central/disconnectAll()``, a new ``Central/connect(_:timeout:reconnect:warningOptions:compatibility:)``
warning: 'BLESwiftError' doesn't exist at '/BLESwift/ConnectionsAndReconnection'
   --> ConnectionsAndReconnection.md:171:5-171:18
169 |   call superseding the reconnect loop, ``Central/cancelAllOperations(error:)``, or
170 |   ``Central/stopAndExtractState()``: the stream throws
171 +   ``BLESwiftError/explicitDisconnect`` (or the cancel call's own error).
172 | - **Re-arm failure** — the characteristic vanished from the GATT table across the gap, or
173 |   the enable itself failed: only the affected characteristic's streams finish, with that
warning: 'BLESwiftError' doesn't exist at '/BLESwift/ConnectionsAndReconnection'
   --> ConnectionsAndReconnection.md:174:19-174:32
172 | - **Re-arm failure** — the characteristic vanished from the GATT table across the gap, or
173 |   the enable itself failed: only the affected characteristic's streams finish, with that
174 +   failure (e.g. ``BLESwiftError/missingCharacteristic(_:)``); every other surviving stream
175 |   is unaffected, and the event's `failed` names the casualty.
176 |
warning: 'BLESwiftError' doesn't exist at '/BLESwift/ConnectionsAndReconnection'
   --> ConnectionsAndReconnection.md:190:21-190:34
188 |   the handle refers to. Prefer this when you already have a `Peripheral`.
189 | - ``Central/disconnect(_:)`` — disconnects one peripheral by identifier, failing any pending
190 +   operations with ``BLESwiftError/explicitDisconnect``.
191 | - ``Central/disconnectAll()`` — best-effort teardown of every tracked peripheral at once: cancels
192 |   every reconnect loop, then disconnects every tracked entry. Never throws — individual outcomes
warning: 'BLESwiftError' doesn't exist at '/BLESwift/ConnectionsAndReconnection'
   --> ConnectionsAndReconnection.md:205:42-205:55
203 | ``Central/disconnect(_:)`` for that identifier during that
204 | window is honored as "stop trying to reconnect": it cancels the pending reconnect attempt and
205 + returns normally, rather than throwing ``BLESwiftError/notConnected`` as it would if there were
206 | truly nothing in flight for that peripheral. ``Central/cancelAllOperations(error:)`` does the
207 | same, across every peripheral's pending reconnect loop. A `disconnect(id)` call for a peripheral
warning: 'BLESwiftError' doesn't exist at '/BLESwift/ConnectionsAndReconnection'
   --> ConnectionsAndReconnection.md:209:3-209:16
207 | same, across every peripheral's pending reconnect loop. A `disconnect(id)` call for a peripheral
208 | with no connection, connection attempt, *or* pending reconnect loop still throws
209 + ``BLESwiftError/notConnected``.
210 |
211 | ## See Also
warning: 'GATTService' doesn't exist at '/BLESwift/CrossRoleExample'
  --> CrossRoleExample.md:17:11-17:22
15 | central-side `FakePeripheral` to a peripheral-side `FakePeripheralManager` so that:
16 |
17 + - every ``GATTService`` the host publishes with ``PeripheralHost/add(_:)`` is mirrored into the
18 |   central's discovery state — the central discovers exactly what the host hosts;
19 | - a central `read`/`write` reaches the host's ``PeripheralHost/readRequests()``/
warning: 'WarningOptions' doesn't exist at '/BLESwift/GettingStarted'
  --> GettingStarted.md:28:3-28:17
26 | `showPowerAlert` mirrors `CBCentralManagerOptionShowPowerAlertKey` — whether iOS shows a system
27 | alert if Bluetooth is off while your app is backgrounded. `warningOptions` (see
28 + ``WarningOptions``) is the default applied to every connection that doesn't override it.
29 | `Configuration` also carries a `swift-log` `Logger` (defaulting to `Logger(label: "BLESwift")`) —
30 | install a custom `LogHandler` on it to observe BLESwift's internal logging.
warning: 'CentralState' doesn't exist at '/BLESwift/GettingStarted'
  --> GettingStarted.md:41:34-41:46
39 | domain, and every method that touches CoreBluetooth is `async`. Two properties are exceptions,
40 | readable synchronously from any isolation domain because they're backed by a `Mutex` snapshot:
41 + ``Central/state`` (the current ``CentralState``) and ``Central/isScanning``.
42 |
43 | ### Waiting for the radio
warning: 'CentralState' doesn't exist at '/BLESwift/GettingStarted'
  --> GettingStarted.md:45:23-45:35
43 | ### Waiting for the radio
44 |
45 + Bluetooth starts in ``CentralState/unknown`` until CoreBluetooth reports its first real state.
46 | Subscribe to ``Central/stateEvents()`` and wait for ``CentralState/poweredOn`` before scanning
47 | or connecting:
warning: 'CentralState' doesn't exist at '/BLESwift/GettingStarted'
  --> GettingStarted.md:46:55-46:67
44 |
45 | Bluetooth starts in ``CentralState/unknown`` until CoreBluetooth reports its first real state.
46 + Subscribe to ``Central/stateEvents()`` and wait for ``CentralState/poweredOn`` before scanning
47 | or connecting:
48 |
warning: 'PeripheralIdentifier' doesn't exist at '/BLESwift/GettingStarted'
  --> GettingStarted.md:61:19-61:39
59 | ### Connecting
60 |
61 + Once you have a ``PeripheralIdentifier`` — typically from a scan (see <doc:Scanning>), or one
62 | you already know about — connect with ``Central/connect(_:timeout:reconnect:warningOptions:compatibility:)``:
63 |
warning: 'Scanning' is ambiguous at '/BLESwift'
  --> GettingStarted.md:61:78-61:86
59 | ### Connecting
60 |
61 + Once you have a ``PeripheralIdentifier`` — typically from a scan (see <doc:Scanning>), or one
   |                                                                                      ├─suggestion: Insert '-anchor' for 'Scanning'
   |                                                                                      ╰─suggestion: Insert '-article' for 'Scanning'
62 | you already know about — connect with ``Central/connect(_:timeout:reconnect:warningOptions:compatibility:)``:
63 |
warning: 'BLESwiftError' doesn't exist at '/BLESwift/GettingStarted'
  --> GettingStarted.md:68:15-68:28
66 | ```
67 |
68 + This throws ``BLESwiftError/connectionTimedOut`` if `timeout` elapses,
69 | ``BLESwiftError/duplicateConnect(_:)`` if `identifier` itself already has a connection or
70 | connection attempt in progress, or whatever error CoreBluetooth reports for the attempt.
warning: 'BLESwiftError' doesn't exist at '/BLESwift/GettingStarted'
  --> GettingStarted.md:69:3-69:16
67 |
68 | This throws ``BLESwiftError/connectionTimedOut`` if `timeout` elapses,
69 + ``BLESwiftError/duplicateConnect(_:)`` if `identifier` itself already has a connection or
70 | connection attempt in progress, or whatever error CoreBluetooth reports for the attempt.
71 | `Central` supports any number of concurrent peripheral connections — connecting to a
warning: 'Receivable' doesn't exist at '/BLESwift/GettingStarted'
  --> GettingStarted.md:89:23-89:33
87 | ```
88 |
89 + `UInt8` conforms to ``Receivable`` out of the box (as do every fixed-width integer type,
90 | `String`, and `Data` itself) — decode your own binary formats by conforming your own type to
91 | ``Receivable``/``Transmittable``. See <doc:ReadingWritingNotifications> for writes and
warning: 'Receivable' doesn't exist at '/BLESwift/GettingStarted'
  --> GettingStarted.md:91:3-91:13
89 | `UInt8` conforms to ``Receivable`` out of the box (as do every fixed-width integer type,
90 | `String`, and `Data` itself) — decode your own binary formats by conforming your own type to
91 + ``Receivable``/``Transmittable``. See <doc:ReadingWritingNotifications> for writes and
92 | notification streams.
93 |
warning: 'Transmittable' doesn't exist at '/BLESwift/GettingStarted'
  --> GettingStarted.md:91:18-91:31
89 | `UInt8` conforms to ``Receivable`` out of the box (as do every fixed-width integer type,
90 | `String`, and `Data` itself) — decode your own binary formats by conforming your own type to
91 + ``Receivable``/``Transmittable``. See <doc:ReadingWritingNotifications> for writes and
92 | notification streams.
93 |
warning: 'Scanning' is ambiguous at '/BLESwift'
   --> GettingStarted.md:122:8-122:16
120 | ## See Also
121 |
122 + - <doc:Scanning>
    |                ├─suggestion: Insert '-anchor' for 'Scanning'
    |                ╰─suggestion: Insert '-article' for 'Scanning'
123 | - <doc:ConnectionsAndReconnection>
124 | - <doc:ReadingWritingNotifications>
warning: 'L2CAPPSM' doesn't exist at '/BLESwift/L2CAPChannels'
  --> L2CAPChannels.md:40:60-40:68
38 |
39 | A peripheral typically advertises the dynamic PSM to connect on through a GATT
40 + characteristic. Read it, wrap the raw 16-bit value in an ``L2CAPPSM``, and open the channel:
41 |
42 | ```swift
warning: 'L2CAPPSM' doesn't exist at '/BLESwift/L2CAPChannels'
  --> L2CAPChannels.md:47:3-47:11
45 | ```
46 |
47 + ``L2CAPPSM`` is BLESwift's owned value type — CoreBluetooth's `CBL2CAPPSM` never appears in
48 | the public API, matching how ``ServiceIdentifier``/``CharacteristicIdentifier`` keep
49 | `CBUUID` out.
warning: 'ServiceIdentifier' doesn't exist at '/BLESwift/L2CAPChannels'
  --> L2CAPChannels.md:48:32-48:49
46 |
47 | ``L2CAPPSM`` is BLESwift's owned value type — CoreBluetooth's `CBL2CAPPSM` never appears in
48 + the public API, matching how ``ServiceIdentifier``/``CharacteristicIdentifier`` keep
49 | `CBUUID` out.
50 |
warning: 'CharacteristicIdentifier' doesn't exist at '/BLESwift/L2CAPChannels'
  --> L2CAPChannels.md:48:54-48:78
46 |
47 | ``L2CAPPSM`` is BLESwift's owned value type — CoreBluetooth's `CBL2CAPPSM` never appears in
48 + the public API, matching how ``ServiceIdentifier``/``CharacteristicIdentifier`` keep
49 | `CBUUID` out.
50 |
warning: 'BLESwiftError' doesn't exist at '/BLESwift/L2CAPChannels'
  --> L2CAPChannels.md:66:53-66:66
64 | A channel's lifetime is tied to its connection. If the peripheral disconnects — for any
65 | reason — every open channel is torn down automatically and its ``L2CAPChannel/incomingData``
66 + stream finishes by throwing the disconnect error (``BLESwiftError/unexpectedDisconnect``,
67 | ``BLESwiftError/explicitDisconnect``, or whatever tore the connection down), exactly like a
68 | notification stream. ``L2CAPChannel/close()`` ends a single channel explicitly while the
warning: 'BLESwiftError' doesn't exist at '/BLESwift/L2CAPChannels'
  --> L2CAPChannels.md:67:3-67:16
65 | reason — every open channel is torn down automatically and its ``L2CAPChannel/incomingData``
66 | stream finishes by throwing the disconnect error (``BLESwiftError/unexpectedDisconnect``,
67 + ``BLESwiftError/explicitDisconnect``, or whatever tore the connection down), exactly like a
68 | notification stream. ``L2CAPChannel/close()`` ends a single channel explicitly while the
69 | peripheral stays connected.
warning: 'BLESwiftError' doesn't exist at '/BLESwift/L2CAPChannels'
  --> L2CAPChannels.md:72:13-72:26
70 |
71 | Opening can also be bounded: `openL2CAPChannel(psm:timeout:)` takes an optional `timeout`
72 + (throwing ``BLESwiftError/timedOut``), and cancelling the calling `Task` aborts the open —
73 | either way the connection is left healthy.
74 |
warning: 'L2CAPPSM' doesn't exist at '/BLESwift/L2CAPChannels'
  --> L2CAPChannels.md:90:5-90:13
88 | - <doc:ConnectionsAndReconnection>
89 | - ``L2CAPChannel``
90 + - ``L2CAPPSM``
warning: 'GATTService' doesn't exist at '/BLESwift/PeripheralRole'
  --> PeripheralRole.md:23:30-23:41
21 | ## Building a GATT database
22 |
23 + A service is a value type, ``GATTService``, holding value-type ``GATTCharacteristic``s.
24 | Properties and permissions mirror CoreBluetooth's option sets:
25 |
warning: 'GATTCharacteristic' doesn't exist at '/BLESwift/PeripheralRole'
  --> PeripheralRole.md:23:66-23:84
21 | ## Building a GATT database
22 |
23 + A service is a value type, ``GATTService``, holding value-type ``GATTCharacteristic``s.
24 | Properties and permissions mirror CoreBluetooth's option sets:
25 |
warning: 'GATTCharacteristic' doesn't exist at '/BLESwift/PeripheralRole'
  --> PeripheralRole.md:39:37-39:55
37 | ```
38 |
39 + A characteristic with a non-`nil` ``GATTCharacteristic/value`` is *static* — CoreBluetooth
40 | answers reads from that constant itself. A `nil` value (the default) makes it *dynamic*: reads
41 | and writes surface as requests for your code to answer, and you push notifications yourself.
warning: 'PeripheralAdvertisement' doesn't exist at '/BLESwift/PeripheralRole'
  --> PeripheralRole.md:61:39-61:62
59 | ``PeripheralHost/startAdvertising(_:)`` returns once `peripheralManagerDidStartAdvertising`
60 | fires. Only a local name and service UUIDs are advertised — the only two fields CoreBluetooth
61 + honors on the advertising side (see ``PeripheralAdvertisement``).
62 |
63 | ## Answering reads and writes
warning: 'WriteRequest' doesn't exist at '/BLESwift/PeripheralRole'
  --> PeripheralRole.md:86:41-86:53
84 |
85 | Reject a request instead with a `.failure(ATTError)` — e.g. `.failure(.writeNotPermitted)`. A
86 + write request arrives as a **batch** (``WriteRequest/entries``); a single
87 | `respond(to:with:)` call acknowledges the whole batch.
88 |
warning: 'BLESwiftError' doesn't exist at '/BLESwift/PeripheralRole'
   --> PeripheralRole.md:120:3-120:16
118 | ``PeripheralHost/stopAndExtractState()`` detaches the delegate and hands the underlying
119 | `CBPeripheralManager` back to you, failing every pending operation with
120 + ``BLESwiftError/stopped``. Use ``PeripheralHost/stopAdvertising()`` /
121 | ``PeripheralHost/removeAllServices()`` for a softer stop.
122 |
warning: 'PeripheralRestorationConfiguration' doesn't exist at '/BLESwift/PeripheralRole'
   --> PeripheralRole.md:127:13-127:47
125 | On iOS, CoreBluetooth can relaunch your app in the background and hand back the GATT database
126 | and advertising state it preserved while your app was suspended or terminated. Opt in by
127 + passing a ``PeripheralRestorationConfiguration`` as ``Configuration/peripheralRestoration`` —
128 | its identifier is registered with CoreBluetooth
129 | (`CBPeripheralManagerOptionRestoreIdentifierKey`) when the manager is created:
warning: 'peripheralRestoration' doesn't exist at '/BLESwift/Configuration'
   --> PeripheralRole.md:127:69-127:90
125 | On iOS, CoreBluetooth can relaunch your app in the background and hand back the GATT database
126 | and advertising state it preserved while your app was suspended or terminated. Opt in by
127 + passing a ``PeripheralRestorationConfiguration`` as ``Configuration/peripheralRestoration`` —
128 | its identifier is registered with CoreBluetooth
129 | (`CBPeripheralManagerOptionRestoreIdentifierKey`) when the manager is created:
warning: 'RestorationConfiguration' doesn't exist at '/BLESwift/PeripheralRole'
   --> PeripheralRole.md:138:5-138:29
136 |
137 | - Important: The peripheral restore identifier must be **distinct** from any ``Central``'s
138 +   ``RestorationConfiguration/identifier`` — CoreBluetooth requires a unique restore identifier
139 |   per manager. That is why the two are separate ``Configuration`` settings.
140 |
warning: 'restorationEvents()' doesn't exist at '/BLESwift/PeripheralHost'
   --> PeripheralRole.md:141:48-141:67
139 |   per manager. That is why the two are separate ``Configuration`` settings.
140 |
141 + Restoration results arrive on ``PeripheralHost/restorationEvents()`` — a **buffered, replayed**
    |                                                ╰─suggestion: Replace 'restorationEvents()' with 'subscriptionEvents()'
142 | stream, exactly like ``Central/restorationEvents()``. Every event is buffered from the host's
143 | creation and replayed, in order, to the first consumer, so state restored during launch is
warning: 'restorationEvents()' doesn't exist at '/BLESwift/Central'
   --> PeripheralRole.md:142:32-142:51
140 |
141 | Restoration results arrive on ``PeripheralHost/restorationEvents()`` — a **buffered, replayed**
142 + stream, exactly like ``Central/restorationEvents()``. Every event is buffered from the host's
    |                                ├─suggestion: Replace 'restorationEvents()' with 'connectionEvents()'
    |                                ╰─suggestion: Replace 'restorationEvents()' with 'stateEvents()'
143 | creation and replayed, in order, to the first consumer, so state restored during launch is
144 | never lost even if your consumer task starts strictly afterwards:
warning: 'GATTService' doesn't exist at '/BLESwift/PeripheralRole'
   --> PeripheralRole.md:188:5-188:16
186 | ### GATT database
187 |
188 + - ``GATTService``
189 | - ``GATTCharacteristic``
190 | - ``CharacteristicProperties``
warning: 'GATTCharacteristic' doesn't exist at '/BLESwift/PeripheralRole'
   --> PeripheralRole.md:189:5-189:23
187 |
188 | - ``GATTService``
189 + - ``GATTCharacteristic``
190 | - ``CharacteristicProperties``
191 | - ``AttributePermissions``
warning: 'CharacteristicProperties' doesn't exist at '/BLESwift/PeripheralRole'
   --> PeripheralRole.md:190:5-190:29
188 | - ``GATTService``
189 | - ``GATTCharacteristic``
190 + - ``CharacteristicProperties``
191 | - ``AttributePermissions``
192 |
warning: 'AttributePermissions' doesn't exist at '/BLESwift/PeripheralRole'
   --> PeripheralRole.md:191:5-191:25
189 | - ``GATTCharacteristic``
190 | - ``CharacteristicProperties``
191 + - ``AttributePermissions``
192 |
193 | ### Advertising
warning: 'PeripheralAdvertisement' doesn't exist at '/BLESwift/PeripheralRole'
   --> PeripheralRole.md:195:5-195:28
193 | ### Advertising
194 |
195 + - ``PeripheralAdvertisement``
196 |
197 | ### Requests and responses
warning: 'ReadRequest' doesn't exist at '/BLESwift/PeripheralRole'
   --> PeripheralRole.md:199:5-199:16
197 | ### Requests and responses
198 |
199 + - ``ReadRequest``
200 | - ``WriteRequest``
201 | - ``RequestToken``
warning: 'WriteRequest' doesn't exist at '/BLESwift/PeripheralRole'
   --> PeripheralRole.md:200:5-200:17
198 |
199 | - ``ReadRequest``
200 + - ``WriteRequest``
201 | - ``RequestToken``
202 | - ``ATTError``
warning: 'RequestToken' doesn't exist at '/BLESwift/PeripheralRole'
   --> PeripheralRole.md:201:5-201:17
199 | - ``ReadRequest``
200 | - ``WriteRequest``
201 + - ``RequestToken``
    |     ╰─suggestion: Replace 'RequestToken' with 'Requests-and-responses'
202 | - ``ATTError``
203 | - ``Subscriber``
warning: 'ATTError' doesn't exist at '/BLESwift/PeripheralRole'
   --> PeripheralRole.md:202:5-202:13
200 | - ``WriteRequest``
201 | - ``RequestToken``
202 + - ``ATTError``
203 | - ``Subscriber``
204 | - ``SubscriptionEvent``
warning: 'Subscriber' doesn't exist at '/BLESwift/PeripheralRole'
   --> PeripheralRole.md:203:5-203:15
201 | - ``RequestToken``
202 | - ``ATTError``
203 + - ``Subscriber``
204 | - ``SubscriptionEvent``
205 |
warning: 'SubscriptionEvent' doesn't exist at '/BLESwift/PeripheralRole'
   --> PeripheralRole.md:204:5-204:22
202 | - ``ATTError``
203 | - ``Subscriber``
204 + - ``SubscriptionEvent``
205 |
206 | ### Background restoration
warning: 'PeripheralRestorationConfiguration' doesn't exist at '/BLESwift/PeripheralRole'
   --> PeripheralRole.md:208:5-208:39
206 | ### Background restoration
207 |
208 + - ``PeripheralRestorationConfiguration``
209 | - ``PeripheralRestorationEvent``
210 | - ``RestoredPeripheralState``
warning: 'PeripheralRestorationEvent' doesn't exist at '/BLESwift/PeripheralRole'
   --> PeripheralRole.md:209:5-209:31
207 |
208 | - ``PeripheralRestorationConfiguration``
209 + - ``PeripheralRestorationEvent``
210 | - ``RestoredPeripheralState``
warning: 'RestoredPeripheralState' doesn't exist at '/BLESwift/PeripheralRole'
   --> PeripheralRole.md:210:5-210:28
208 | - ``PeripheralRestorationConfiguration``
209 | - ``PeripheralRestorationEvent``
210 + - ``RestoredPeripheralState``
warning: 'BLESwiftError' doesn't exist at '/BLESwift/ReadingWritingNotifications'
  --> ReadingWritingNotifications.md:39:3-39:16
37 | `chunkSize` defaults to ``Peripheral/maximumWriteValueLength(for:)`` for the chosen write type;
38 | a `chunkSize` that is not positive or that exceeds that maximum throws
39 + ``BLESwiftError/invalidArgument(_:)``. Each chunk goes through the same path as a plain
40 | ``Peripheral/write(_:to:type:timeout:)``, so `.withResponse` chunks await their confirmation and
41 | `.withoutResponse` chunks await back-pressure.
warning: 'BLESwiftError' doesn't exist at '/BLESwift/ReadingWritingNotifications'
  --> ReadingWritingNotifications.md:58:62-58:75
56 | - **`timeout` applies per chunk**, not to the whole payload — a chunk that stalls times out
57 |   independently of the others.
58 + - **Cancellation between chunks** stops sending and throws ``BLESwiftError/operationCancelled``.
59 |   A partially-sent payload is yours to reconcile at the protocol level.
60 | - **There is no framing hook.** BLESwift sends the raw payload bytes sliced on `chunkSize`
warning: 'CharacteristicProperties' doesn't exist at '/BLESwift/ReadingWritingNotifications'
  --> ReadingWritingNotifications.md:67:67-67:91
65 |
66 | ``Peripheral/properties(of:)`` reports the set of operations a characteristic advertises —
67 + whether it's readable, writable, notifiable, and so on — as a ``CharacteristicProperties``
   |                                                                   ╰─suggestion: Replace 'CharacteristicProperties' with 'Introspecting-a-characteristics-capabilities'
68 | option set. Use it to drive capability-based UI, or to branch before an operation, instead of
69 | attempting the operation and inspecting the error:
warning: 'CharacteristicIdentifier' doesn't exist at '/BLESwift/ReadingWritingNotifications'
  --> ReadingWritingNotifications.md:86:55-86:79
84 | ### Enumerating an unknown peripheral's GATT graph
85 |
86 + Every operation above is *UUID-first*: you name the ``CharacteristicIdentifier`` up front. To
   |                                                       ╰─suggestion: Replace 'CharacteristicIdentifier' with 'Introspecting-a-characteristics-capabilities'
87 | inspect a peripheral whose UUIDs you *don't* know — a `ble inspect`-style browser — enumerate
88 | the GATT graph instead. ``Peripheral/discoverServices()`` lists every service; feed one of the
warning: 'Receivable' doesn't exist at '/BLESwift/ReadingWritingNotifications'
   --> ReadingWritingNotifications.md:114:26-114:36
112 | extra bridging.
113 |
114 + Any type conforming to ``Receivable``/``Transmittable`` can be read/written — every fixed-width
115 | integer type (`Int8`/`16`/`32`/`64`, `UInt8`/`16`/`32`/`64`), `String` (UTF-8, throwing
116 | ``BLESwiftError/invalidStringEncoding`` instead of crashing on invalid data), and
warning: 'Transmittable' doesn't exist at '/BLESwift/ReadingWritingNotifications'
   --> ReadingWritingNotifications.md:114:41-114:54
112 | extra bridging.
113 |
114 + Any type conforming to ``Receivable``/``Transmittable`` can be read/written — every fixed-width
115 | integer type (`Int8`/`16`/`32`/`64`, `UInt8`/`16`/`32`/`64`), `String` (UTF-8, throwing
116 | ``BLESwiftError/invalidStringEncoding`` instead of crashing on invalid data), and
warning: 'BLESwiftError' doesn't exist at '/BLESwift/ReadingWritingNotifications'
   --> ReadingWritingNotifications.md:116:3-116:16
114 | Any type conforming to ``Receivable``/``Transmittable`` can be read/written — every fixed-width
115 | integer type (`Int8`/`16`/`32`/`64`, `UInt8`/`16`/`32`/`64`), `String` (UTF-8, throwing
116 + ``BLESwiftError/invalidStringEncoding`` instead of crashing on invalid data), and
117 | `Data` itself (identity conformance) all conform out of the box. Conform your own types for
118 | custom binary formats, and use ``combine(_:)`` (with ``DataPadding`` where needed) to assemble a
warning: 'combine(_:)' doesn't exist at '/BLESwift/ReadingWritingNotifications'
   --> ReadingWritingNotifications.md:118:34-118:45
116 | ``BLESwiftError/invalidStringEncoding`` instead of crashing on invalid data), and
117 | `Data` itself (identity conformance) all conform out of the box. Conform your own types for
118 + custom binary formats, and use ``combine(_:)`` (with ``DataPadding`` where needed) to assemble a
119 | ``Transmittable`` value out of several typed pieces:
120 |
warning: 'DataPadding' doesn't exist at '/BLESwift/ReadingWritingNotifications'
   --> ReadingWritingNotifications.md:118:56-118:67
116 | ``BLESwiftError/invalidStringEncoding`` instead of crashing on invalid data), and
117 | `Data` itself (identity conformance) all conform out of the box. Conform your own types for
118 + custom binary formats, and use ``combine(_:)`` (with ``DataPadding`` where needed) to assemble a
119 | ``Transmittable`` value out of several typed pieces:
120 |
warning: 'Transmittable' doesn't exist at '/BLESwift/ReadingWritingNotifications'
   --> ReadingWritingNotifications.md:119:3-119:16
117 | `Data` itself (identity conformance) all conform out of the box. Conform your own types for
118 | custom binary formats, and use ``combine(_:)`` (with ``DataPadding`` where needed) to assemble a
119 + ``Transmittable`` value out of several typed pieces:
120 |
121 | ```swift
warning: 'Receivable' doesn't exist at '/BLESwift/ReadingWritingNotifications'
   --> ReadingWritingNotifications.md:180:3-180:13
178 | subscriber** — every
179 | subscriber has its own decode layer over one shared raw-`Data` multicast. If `Value`'s
180 + ``Receivable`` decoding throws for a particular value, only *that* subscriber's stream finishes
181 | with the decode error; sibling subscribers (and the underlying subscription) are unaffected,
182 | since a typed stream can't silently skip a value it failed to decode. Subscribe with `Value ==
warning: 'Receivable' doesn't exist at '/BLESwift/ReadingWritingNotifications'
   --> ReadingWritingNotifications.md:183:56-183:66
181 | with the decode error; sibling subscribers (and the underlying subscription) are unaffected,
182 | since a typed stream can't silently skip a value it failed to decode. Subscribe with `Value ==
183 + Data` for a stream that can never fail decoding (its ``Receivable`` conformance is the
184 | identity).
185 |
warning: 'BLESwiftError' doesn't exist at '/BLESwift/ReadingWritingNotifications'
   --> ReadingWritingNotifications.md:206:3-206:16
204 | for replies that arrive as an unknown number of packets: raw payloads accumulate until exactly
205 | `expectedLength` bytes have arrived, then decode. Receiving more than `expectedLength` throws
206 + ``BLESwiftError/tooMuchData(expected:received:)``. The `timeout` covers the **whole** assembly — a
207 | device that sends part of a reply and then goes silent still times out, rather than resetting
208 | its clock on every partial packet.
warning: 'CharacteristicProperties' doesn't exist at '/BLESwift/ReadingWritingNotifications'
   --> ReadingWritingNotifications.md:218:3-218:27
216 |
217 | Every read, write, and notification subscription validates the characteristic's advertised
218 + ``CharacteristicProperties`` after discovery — a read requires `.read`, a `.withResponse`
    |   ╰─suggestion: Replace 'CharacteristicProperties' with 'Introspecting-a-characteristics-capabilities'
219 | write requires `.write`, a `.withoutResponse` write requires `.writeWithoutResponse`, and a
220 | subscription requires `.notify` or `.indicate` — throwing
warning: 'BLESwiftError' doesn't exist at '/BLESwift/ReadingWritingNotifications'
   --> ReadingWritingNotifications.md:221:3-221:16
219 | write requires `.write`, a `.withoutResponse` write requires `.writeWithoutResponse`, and a
220 | subscription requires `.notify` or `.indicate` — throwing
221 + ``BLESwiftError/unsupportedCharacteristicOperation(_:required:)`` when the property is
222 | missing. This check runs on a fresh call to ``Peripheral/notifications(for:policy:survivesReconnect:)``,
223 | but not when a `survivesReconnect: true` subscription is re-armed after a reconnect — re-arming
warning: 'BLESwiftError' doesn't exist at '/BLESwift/ReadingWritingNotifications'
   --> ReadingWritingNotifications.md:226:53-226:66
224 | re-enables notify directly, so if the peripheral's GATT table changed such that the
225 | characteristic lost `.notify`/`.indicate` in the meantime, the stream instead surfaces
226 + CoreBluetooth's enable error rather than the fast ``BLESwiftError/unsupportedCharacteristicOperation(_:required:)``.
227 |
228 | Cheap modules routinely misreport: notifying on characteristics that never advertise
warning: 'GATTCompatibility' doesn't exist at '/BLESwift/ReadingWritingNotifications'
   --> ReadingWritingNotifications.md:230:10-230:27
228 | Cheap modules routinely misreport: notifying on characteristics that never advertise
229 | `.notify`, or only populating their GATT table under unfiltered service discovery. For those,
230 + pass a ``GATTCompatibility`` to
231 | ``Central/connect(_:timeout:reconnect:warningOptions:compatibility:)`` — it applies to that
232 | connection only, so one non-compliant device never loosens another's checks:
warning: 'GATTCompatibility' doesn't exist at '/BLESwift/ReadingWritingNotifications'
   --> ReadingWritingNotifications.md:245:3-245:20
243 | ```
244 |
245 + ``GATTCompatibility/DiscoveryMode/all`` replaces targeted service discovery with a single
246 | `discoverServices(nil)` per connection, cached, for modules that only behave under unfiltered
247 | discovery. When a bypass actually skips a check that would have failed, BLESwift logs a
warning: 'GATTCompatibility' doesn't exist at '/BLESwift/ReadingWritingNotifications'
   --> ReadingWritingNotifications.md:250:25-250:42
248 | warning once per characteristic and operation; a bypass on compliant hardware stays silent.
249 |
250 + > Important: Keep the ``GATTCompatibility/strict`` default for compliant hardware — the
251 | > property checks catch real protocol errors (wrong characteristic, wrong write type) at the
252 | > call site instead of as an opaque CoreBluetooth failure.
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Scanning'
  --> Scanning.md:19:8-19:21
17 | Only one scan can be active at a time (CoreBluetooth exposes a single physical scanner):
18 | starting a second `scan(...)` while one is already running immediately fails the *new* stream
19 + with ``BLESwiftError/alreadyScanning`` — the original scan is unaffected.
20 |
21 | ### Stopping a scan
warning: 'CentralState' doesn't exist at '/BLESwift/Scanning'
  --> Scanning.md:36:11-36:23
34 | `break`ing out of the loop, cancelling the `Task` iterating it, or letting a `timeout:` elapse
35 | all end the scan. A `timeout:` that elapses finishes the stream cleanly (no error); the radio
36 + leaving ``CentralState/poweredOn`` while scanning finishes it by throwing
37 | ``BLESwiftError/bluetoothUnavailable``.
38 |
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Scanning'
  --> Scanning.md:37:3-37:16
35 | all end the scan. A `timeout:` that elapses finishes the stream cleanly (no error); the radio
36 | leaving ``CentralState/poweredOn`` while scanning finishes it by throwing
37 + ``BLESwiftError/bluetoothUnavailable``.
38 |
39 | ### Blacklisting a peripheral
warning: 'ScanFilter' doesn't exist at '/BLESwift/Scanning'
  --> Scanning.md:78:51-78:61
76 | ### Declarative filtering
77 |
78 + Instead of filtering the stream by hand, pass a ``ScanFilter`` to
79 | ``Central/scan(filter:allowDuplicates:rssiThreshold:lossTimeout:timeout:)``. Only
80 | ``ScanFilter/services`` reaches the radio; every other field is applied per sighting before
warning: 'ScanFilter' doesn't exist at '/BLESwift/Scanning'
  --> Scanning.md:80:3-80:13
78 | Instead of filtering the stream by hand, pass a ``ScanFilter`` to
79 | ``Central/scan(filter:allowDuplicates:rssiThreshold:lossTimeout:timeout:)``. Only
80 + ``ScanFilter/services`` reaches the radio; every other field is applied per sighting before
81 | anything is reported — a non-matching sighting is dropped entirely (not recorded, not
82 | loss-tracked, no event). All set fields must hold, and ``ScanFilter/custom`` is an arbitrary
warning: 'ScanFilter' doesn't exist at '/BLESwift/Scanning'
  --> Scanning.md:82:58-82:68
80 | ``ScanFilter/services`` reaches the radio; every other field is applied per sighting before
81 | anything is reported — a non-matching sighting is dropped entirely (not recorded, not
82 + loss-tracked, no event). All set fields must hold, and ``ScanFilter/custom`` is an arbitrary
83 | escape hatch:
84 |
warning: 'Discovery' doesn't exist at '/BLESwift/Scanning'
   --> Scanning.md:99:35-99:44
97  |
98  | When all you want is one device, ``Central/findFirst(matching:timeout:)`` runs the scan for
99  + you, returns the first matching ``Discovery``, and stops the scan — on every exit path,
100 | including timeout and cancellation. `timeout` defaults to `nil` (wait indefinitely), but
101 | passing one is recommended:
warning: 'PeripheralIdentifier' doesn't exist at '/BLESwift/Scanning'
   --> Scanning.md:110:33-110:53
108 | ### The saved-device pattern
109 |
110 + If you persist a peripheral's ``PeripheralIdentifier/uuid`` across launches,
111 | ``Central/connect(identifier:fallbackScan:reconnect:timeout:compatibility:)`` reconnects to it in one
112 | call: it tries ``Central/knownPeripherals(withIdentifiers:)`` first (no radio), and only if
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Scanning'
   --> Scanning.md:129:3-129:16
127 | separately (the fallback scan gets `timeout`, then the connect attempt gets `timeout`
128 | again); it is not a shared budget. Without a `fallbackScan`, an unknown identifier throws
129 + ``BLESwiftError/unexpectedPeripheral(_:)``.
130 |
131 | ### Duplicate sightings and loss tracking
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Scanning'
   --> Scanning.md:172:33-172:46
170 | enters the background:
171 |
172 + - `allowDuplicates: true` → ``BLESwiftError/allowDuplicatesInBackgroundNotSupported``
173 | - `services: nil` (or empty) → ``BLESwiftError/missingServiceIdentifiersInBackground``
174 |
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Scanning'
   --> Scanning.md:173:36-173:49
171 |
172 | - `allowDuplicates: true` → ``BLESwiftError/allowDuplicatesInBackgroundNotSupported``
173 + - `services: nil` (or empty) → ``BLESwiftError/missingServiceIdentifiersInBackground``
174 |
175 | Passing `nil`/empty `services` also logs a warning at scan start regardless of platform, per
warning: 'PeripheralIdentifier' doesn't exist at '/BLESwift/Scanning'
   --> Scanning.md:187:32-187:52
185 | already holding a connection to (by any app on the device, not just yours), by service —
186 | useful when a peripheral never actually disconnected and re-scanning for it would be wasted
187 + radio time. Both hand back a ``PeripheralIdentifier`` you feed straight to
188 | ``Central/connect(_:timeout:reconnect:warningOptions:compatibility:)``, the same as a scan result.
189 |
warning: 'CentralState' doesn't exist at '/BLESwift/SimulatorSupport'
  --> SimulatorSupport.md:9:3-9:15
7  |
8  | CoreBluetooth is non-functional in the iOS Simulator: `CBCentralManager` reports
9  + ``CentralState/unsupported`` and never leaves it, so anything built on BLESwift stops at the
10 | "wait for the radio to power on" line. The usual answer is a hardware device and a cable.
11 |
warning: 'GATTCharacteristic' doesn't exist at '/BLESwift/SimulatorSupport'
   --> SimulatorSupport.md:209:37-209:55
207 | ```
208 |
209 + A characteristic with a non-`nil` ``GATTCharacteristic/value`` is *static* and answered by the
210 | radio itself; every other read, and every write, reaches your handler — exactly the split
211 | ``PeripheralHost`` uses. The `VirtualDeviceHandle` returned by `addVirtualDevice(_:)` lets you
warning: 'BLESwiftError' doesn't exist at '/BLESwift/SimulatorSupport'
   --> SimulatorSupport.md:269:52-269:65
267 |   `Central.restorationEvents()` and `PeripheralHost.restorationEvents()` never deliver a
268 |   `willRestore`. Relatedly, ``Central/stopAndExtractState()`` and
269 +   ``PeripheralHost/stopAndExtractState()`` throw ``BLESwiftError/stopped`` on a link backend —
270 |   there is no `CBCentralManager` underneath to hand back.
271 | - **No ANCS.** ANCS is an iOS-only feature of CoreBluetooth and the provider is a macOS
warning: 'Subscriber' doesn't exist at '/BLESwift/SimulatorSupport'
   --> SimulatorSupport.md:322:5-322:15
320 |   CoreBluetooth clips a notification that will not fit the subscriber's MTU. Nothing chunks a
321 |   large value across several notifications for you, here or on device: read
322 +   ``Subscriber/maximumUpdateValueLength`` and fragment.
323 | - **An L2CAP open outstanding at a disconnect can be answered by the wrong channel.**
324 |   `didOpenL2CAPChannel` carries a channel or an error and nothing that says which open it
warning: 'CentralState' doesn't exist at '/BLESwift/SimulatorSupport'
   --> SimulatorSupport.md:344:64-344:76
342 |   CoreBluetooth would keep the window shut. Bound the number of concurrent `.withoutResponse`
343 |   writers per peripheral as you would on device.
344 + - **Initial radio state.** A link-backed ``Central`` reports ``CentralState/unsupported`` until
345 |   the provider answers — the same state the Simulator reports today, so an app that waits for
346 |   `.poweredOn` simply waits — and then reports whatever state the provider does. If the provider
warning: 'SystemConnectionEvent' doesn't exist at '/BLESwift/SystemEvents'
  --> SystemEvents.md:19:20-19:41
17 |
18 | `Central.connectionEventRegistration(services:peripherals:)` returns a multicast
19 + `AsyncStream` of ``SystemConnectionEvent`` values — one whenever a matching peripheral
   |                    ╰─suggestion: Replace 'SystemConnectionEvent' with 'Observing-system-connection-events'
20 | connects to or disconnects from the system, whichever app caused it:
21 |
warning: 'SystemConnectionEvent' doesn't exist at '/BLESwift/SystemEvents'
  --> SystemEvents.md:76:5-76:26
74 |
75 | - <doc:ConnectionsAndReconnection>
76 + - ``SystemConnectionEvent``
   |     ╰─suggestion: Replace 'SystemConnectionEvent' with 'Observing-system-connection-events'
warning: 'PeripheralIdentifier' doesn't exist at '/BLESwift/Central/knownPeripherals(withIdentifiers:)'
  --> ../Central+Retrieval.swift:17:69-17:89
15 |     /// them here on a later launch, even after a force-quit (see <doc:BackgroundRestoration>).
16 |     ///
17 +     /// - Parameter identifiers: The bare `UUID`s to resolve (not ``PeripheralIdentifier``s).
18 |     /// - Returns: A ``PeripheralIdentifier`` per recognized `UUID`; unrecognized ones are
19 |     ///   omitted, not errors. Feed a result to ``connect(_:timeout:reconnect:warningOptions:compatibility:)``.
warning: 'PeripheralIdentifier' doesn't exist at '/BLESwift/Central/knownPeripherals(withIdentifiers:)'
  --> ../Central+Retrieval.swift:18:24-18:44
16 |     ///
17 |     /// - Parameter identifiers: The bare `UUID`s to resolve (not ``PeripheralIdentifier``s).
18 +     /// - Returns: A ``PeripheralIdentifier`` per recognized `UUID`; unrecognized ones are
19 |     ///   omitted, not errors. Feed a result to ``connect(_:timeout:reconnect:warningOptions:compatibility:)``.
20 |     /// - Throws: ``BLESwiftError/stopped`` if this `Central` has been stopped.
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Central/knownPeripherals(withIdentifiers:)'
  --> ../Central+Retrieval.swift:20:21-20:34
18 |     /// - Returns: A ``PeripheralIdentifier`` per recognized `UUID`; unrecognized ones are
19 |     ///   omitted, not errors. Feed a result to ``connect(_:timeout:reconnect:warningOptions:compatibility:)``.
20 +     /// - Throws: ``BLESwiftError/stopped`` if this `Central` has been stopped.
21 |     public func knownPeripherals(withIdentifiers identifiers: [UUID]) throws -> [PeripheralIdentifier] {
22 |         guard let shim else { throw BLESwiftError.stopped }
warning: 'PeripheralIdentifier' doesn't exist at '/BLESwift/Central/systemConnectedPeripherals(withServices:)'
  --> ../Central+Retrieval.swift:33:24-33:44
31 |     ///
32 |     /// - Parameter services: The services to filter by (any-of match).
33 +     /// - Returns: A ``PeripheralIdentifier`` per matching peripheral. Feed a result to
34 |     ///   ``connect(_:timeout:reconnect:warningOptions:compatibility:)``.
35 |     /// - Throws: ``BLESwiftError/stopped`` if this `Central` has been stopped.
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Central/systemConnectedPeripherals(withServices:)'
  --> ../Central+Retrieval.swift:35:21-35:34
33 |     /// - Returns: A ``PeripheralIdentifier`` per matching peripheral. Feed a result to
34 |     ///   ``connect(_:timeout:reconnect:warningOptions:compatibility:)``.
35 +     /// - Throws: ``BLESwiftError/stopped`` if this `Central` has been stopped.
36 |     public func systemConnectedPeripherals(withServices services: [ServiceIdentifier]) throws -> [PeripheralIdentifier] {
37 |         guard let shim else { throw BLESwiftError.stopped }
warning: 'queue' doesn't exist at '/BLESwift/Central/unownedExecutor'
  --> ../Central.swift:32:42-32:47
30 |     nonisolated let queue: DispatchSerialQueue
31 |
32 +     /// Ties this actor's isolation to ``queue`` (SE-0424 custom executors). Public only
33 |     /// because it satisfies the `Actor` protocol requirement — not for direct client use.
34 |     public nonisolated var unownedExecutor: UnownedSerialExecutor {
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Central/stopAndExtractState()'
   --> ../Central.swift:413:21-413:34
411 |     /// - Returns: The underlying `CBCentralManager`, and every `CBPeripheral` this `Central`
412 |     ///   was connected to, sorted by identifier for determinism.
413 +     /// - Throws: ``BLESwiftError/stopped`` if already stopped, not backed by a real
414 |     ///   `CBCentralManager`, or any tracked peripheral has a connection attempt or disconnect
415 |     ///   in progress (extracting mid-attempt would strand its pending continuation forever).
warning: 'CentralState' doesn't exist at '/BLESwift/Central/stateEvents()'
   --> ../Central.swift:491:47-491:59
489 |     }
490 |
491 +     /// Returns a multicast stream of every ``CentralState`` transition, replaying the most
492 |     /// recent state to a late subscriber.
493 |     public func stateEvents() -> AsyncStream<CentralState> {
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Central/connect(_:timeout:reconnect:warningOptions:compatibility:)'
   --> ../Central.swift:641:11-641:24
639 |     /// BLESwift supports N concurrent peripheral connections — connecting to any peripheral
640 |     /// other than `id` never conflicts. Fails immediately with
641 +     /// ``BLESwiftError/duplicateConnect(_:)`` only if `id` itself already has a tracked
642 |     /// entry. A new `connect` call to `id` cancels any in-flight auto-reconnect loop for
643 |     /// `id` and resets its ``ReconnectPolicy`` to whatever `reconnect` specifies.
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Central/connect(_:timeout:reconnect:warningOptions:compatibility:)'
   --> ../Central.swift:647:57-647:70
645 |     /// - Parameters:
646 |     ///   - id: The peripheral to connect to.
647 +     ///   - timeout: How long to wait before throwing ``BLESwiftError/connectionTimedOut``.
648 |     ///     Defaults to 15 seconds; `nil` waits indefinitely. On timeout, the pending
649 |     ///     CoreBluetooth attempt is cancelled and its confirmation awaited before throwing.
warning: 'GATTCompatibility' doesn't exist at '/BLESwift/Central/connect(_:timeout:reconnect:warningOptions:compatibility:)'
   --> ../Central.swift:655:32-655:49
653 |     ///     connection events. Defaults to ``Configuration``'s `warningOptions`.
654 |     ///   - compatibility: Accommodations for peripherals that misreport their GATT
655 +     ///     database — see ``GATTCompatibility``. Defaults to ``GATTCompatibility/strict``;
656 |     ///     applies to this connection only.
657 |     /// - Returns: A ``Peripheral`` handle once connected.
warning: 'GATTCompatibility' doesn't exist at '/BLESwift/Central/connect(_:timeout:reconnect:warningOptions:compatibility:)'
   --> ../Central.swift:655:67-655:84
653 |     ///     connection events. Defaults to ``Configuration``'s `warningOptions`.
654 |     ///   - compatibility: Accommodations for peripherals that misreport their GATT
655 +     ///     database — see ``GATTCompatibility``. Defaults to ``GATTCompatibility/strict``;
656 |     ///     applies to this connection only.
657 |     /// - Returns: A ``Peripheral`` handle once connected.
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Central/connect(_:timeout:reconnect:warningOptions:compatibility:)'
   --> ../Central.swift:658:21-658:34
656 |     ///     applies to this connection only.
657 |     /// - Returns: A ``Peripheral`` handle once connected.
658 +     /// - Throws: ``BLESwiftError/duplicateConnect(_:)``, ``BLESwiftError/unexpectedPeripheral(_:)``
659 |     ///   if `id` is not known to CoreBluetooth, ``BLESwiftError/connectionTimedOut``,
660 |     ///   ``BLESwiftError/operationCancelled`` on task cancellation, or whatever error
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Central/connect(_:timeout:reconnect:warningOptions:compatibility:)'
   --> ../Central.swift:658:61-658:74
656 |     ///     applies to this connection only.
657 |     /// - Returns: A ``Peripheral`` handle once connected.
658 +     /// - Throws: ``BLESwiftError/duplicateConnect(_:)``, ``BLESwiftError/unexpectedPeripheral(_:)``
659 |     ///   if `id` is not known to CoreBluetooth, ``BLESwiftError/connectionTimedOut``,
660 |     ///   ``BLESwiftError/operationCancelled`` on task cancellation, or whatever error
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Central/connect(_:timeout:reconnect:warningOptions:compatibility:)'
   --> ../Central.swift:659:52-659:65
657 |     /// - Returns: A ``Peripheral`` handle once connected.
658 |     /// - Throws: ``BLESwiftError/duplicateConnect(_:)``, ``BLESwiftError/unexpectedPeripheral(_:)``
659 +     ///   if `id` is not known to CoreBluetooth, ``BLESwiftError/connectionTimedOut``,
660 |     ///   ``BLESwiftError/operationCancelled`` on task cancellation, or whatever error
661 |     ///   CoreBluetooth reports.
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Central/connect(_:timeout:reconnect:warningOptions:compatibility:)'
   --> ../Central.swift:660:13-660:26
658 |     /// - Throws: ``BLESwiftError/duplicateConnect(_:)``, ``BLESwiftError/unexpectedPeripheral(_:)``
659 |     ///   if `id` is not known to CoreBluetooth, ``BLESwiftError/connectionTimedOut``,
660 +     ///   ``BLESwiftError/operationCancelled`` on task cancellation, or whatever error
661 |     ///   CoreBluetooth reports.
662 |     public func connect(
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Central/disconnect(_:)'
   --> ../Central.swift:728:52-728:65
726 |     ///
727 |     /// Any operations still in flight on the outgoing connection (reads, writes, notification
728 +     /// streams, L2CAP channels) are failed with ``BLESwiftError/explicitDisconnect``.
729 |     ///
730 |     /// - Parameter id: The peripheral to disconnect.
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Central/disconnect(_:)'
   --> ../Central.swift:731:21-731:34
729 |     ///
730 |     /// - Parameter id: The peripheral to disconnect.
731 +     /// - Throws: ``BLESwiftError/notConnected`` if `id` has no connection, connection attempt,
732 |     ///   or in-flight auto-reconnect loop; ``BLESwiftError/multipleDisconnectNotSupported`` if
733 |     ///   `id` is already disconnecting.
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Central/disconnect(_:)'
   --> ../Central.swift:732:47-732:60
730 |     /// - Parameter id: The peripheral to disconnect.
731 |     /// - Throws: ``BLESwiftError/notConnected`` if `id` has no connection, connection attempt,
732 +     ///   or in-flight auto-reconnect loop; ``BLESwiftError/multipleDisconnectNotSupported`` if
733 |     ///   `id` is already disconnecting.
734 |     public func disconnect(_ id: PeripheralIdentifier) async throws {
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Central/cancelAllOperations(error:)'
   --> ../Central.swift:814:13-814:26
812 |     ///
813 |     /// - Parameter error: The error pending operations fail with. Defaults to
814 +     ///   ``BLESwiftError/cancelled``.
815 |     public func cancelAllOperations(error: Error? = nil) {
816 |         let resolvedError = error ?? BLESwiftError.cancelled
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Central/scan(services:allowDuplicates:rssiThreshold:lossTimeout:timeout:)'
    --> ../Central.swift:3722:61-3722:74
3720 |     /// every sighting. Each call creates its own independent stream; BLESwift enforces
3721 |     /// CoreBluetooth's single-physical-scanner discipline — calling `scan` again while a scan
3722 +     /// is active immediately fails the *new* stream with ``BLESwiftError/alreadyScanning``.
3723 |     ///
3724 |     /// The scan stops when its stream's consumer stops it (`break`/task cancel), when
warning: 'CentralState' doesn't exist at '/BLESwift/Central/scan(services:allowDuplicates:rssiThreshold:lossTimeout:timeout:)'
    --> ../Central.swift:3725:52-3725:64
3723 |     ///
3724 |     /// The scan stops when its stream's consumer stops it (`break`/task cancel), when
3725 +     /// `timeout` elapses, when the radio leaves ``CentralState/poweredOn`` (throwing
3726 |     /// ``BLESwiftError/bluetoothUnavailable``), or when an iOS backgrounding guard fires (see
3727 |     /// below). Connecting to a sighted peripheral does not stop or affect the scan.
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Central/scan(services:allowDuplicates:rssiThreshold:lossTimeout:timeout:)'
    --> ../Central.swift:3726:11-3726:24
3724 |     /// The scan stops when its stream's consumer stops it (`break`/task cancel), when
3725 |     /// `timeout` elapses, when the radio leaves ``CentralState/poweredOn`` (throwing
3726 +     /// ``BLESwiftError/bluetoothUnavailable``), or when an iOS backgrounding guard fires (see
3727 |     /// below). Connecting to a sighted peripheral does not stop or affect the scan.
3728 |     ///
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Central/scan(services:allowDuplicates:rssiThreshold:lossTimeout:timeout:)'
    --> ../Central.swift:3747:43-3747:56
3745 |     ///
3746 |     /// - Note: On iOS, `allowDuplicates: true` or omitting `services` while backgrounded
3747 +     ///   fails the scan automatically (``BLESwiftError/allowDuplicatesInBackgroundNotSupported``/
3748 |     ///   ``BLESwiftError/missingServiceIdentifiersInBackground``) — both increase
3749 |     ///   battery/CPU cost and `allowDuplicates` stops working in the background at all.
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Central/scan(services:allowDuplicates:rssiThreshold:lossTimeout:timeout:)'
    --> ../Central.swift:3748:13-3748:26
3746 |     /// - Note: On iOS, `allowDuplicates: true` or omitting `services` while backgrounded
3747 |     ///   fails the scan automatically (``BLESwiftError/allowDuplicatesInBackgroundNotSupported``/
3748 +     ///   ``BLESwiftError/missingServiceIdentifiersInBackground``) — both increase
3749 |     ///   battery/CPU cost and `allowDuplicates` stops working in the background at all.
3750 |     public func scan(
warning: 'ScanFilter' doesn't exist at '/BLESwift/Central/scan(filter:allowDuplicates:rssiThreshold:lossTimeout:timeout:)'
    --> ../Central.swift:3767:30-3767:40
3765 |
3766 |     /// Scans for nearby peripherals matching `filter`, yielding a ``ScanEvent`` for every
3767 +     /// matching sighting. ``ScanFilter/services`` is passed to the radio; every other
3768 |     /// filter field is applied on the actor, per sighting, before any recording — a
3769 |     /// non-matching sighting is dropped entirely (not stored, not loss-tracked, no event).
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Central/scan(filter:allowDuplicates:rssiThreshold:lossTimeout:timeout:)'
    --> ../Central.swift:3774:12-3774:25
3772 |     /// ``scan(services:allowDuplicates:rssiThreshold:lossTimeout:timeout:)`` — which is a
3773 |     /// thin wrapper over this method: single-scan discipline
3774 +     /// (``BLESwiftError/alreadyScanning``), stop-by-ceasing-to-consume, `timeout`, and the
3775 |     /// iOS backgrounding guards.
3776 |     ///
warning: 'ScanFilter' doesn't exist at '/BLESwift/Central/scan(filter:allowDuplicates:rssiThreshold:lossTimeout:timeout:)'
    --> ../Central.swift:3778:48-3778:58
3776 |     ///
3777 |     /// - Parameters:
3778 +     ///   - filter: The match criteria. Only ``ScanFilter/services`` reaches the radio.
3779 |     ///   - allowDuplicates: Whether to keep reporting an already-discovered peripheral's
3780 |     ///     further sightings as ``ScanEvent/updated(_:)`` (and track its loss via
warning: 'Discovery' doesn't exist at '/BLESwift/Central/findFirst(matching:timeout:)'
    --> ../Central.swift:3963:62-3963:71
3961 |     }
3962 |
3963 +     /// Scans with `filter` and returns the first matching ``Discovery``, stopping the scan.
3964 |     ///
3965 |     /// The scan is fully torn down — `isScanning` is `false` — before this returns or
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Central/findFirst(matching:timeout:)'
    --> ../Central.swift:3971:15-3971:28
3969 |     ///   - filter: The match criteria — see ``scan(filter:allowDuplicates:rssiThreshold:lossTimeout:timeout:)``.
3970 |     ///   - timeout: How long to wait for a match before throwing
3971 +     ///     ``BLESwiftError/timedOut``. `nil` (the default) waits indefinitely —
3972 |     ///     passing a value is recommended: an unfiltered radio left scanning is exactly
3973 |     ///     what Apple discourages.
warning: 'Discovery' doesn't exist at '/BLESwift/Central/findFirst(matching:timeout:)'
    --> ../Central.swift:3974:32-3974:41
3972 |     ///     passing a value is recommended: an unfiltered radio left scanning is exactly
3973 |     ///     what Apple discourages.
3974 +     /// - Returns: The first ``Discovery`` matching `filter`.
3975 |     /// - Throws: ``BLESwiftError/timedOut`` when `timeout` elapses (or the scan's stream
3976 |     ///   ends without a match), ``BLESwiftError/alreadyScanning`` if a scan is already
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Central/findFirst(matching:timeout:)'
    --> ../Central.swift:3975:21-3975:34
3973 |     ///     what Apple discourages.
3974 |     /// - Returns: The first ``Discovery`` matching `filter`.
3975 +     /// - Throws: ``BLESwiftError/timedOut`` when `timeout` elapses (or the scan's stream
3976 |     ///   ends without a match), ``BLESwiftError/alreadyScanning`` if a scan is already
3977 |     ///   active, `CancellationError` on task cancellation, or whatever error ends the scan
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Central/findFirst(matching:timeout:)'
    --> ../Central.swift:3976:36-3976:49
3974 |     /// - Returns: The first ``Discovery`` matching `filter`.
3975 |     /// - Throws: ``BLESwiftError/timedOut`` when `timeout` elapses (or the scan's stream
3976 +     ///   ends without a match), ``BLESwiftError/alreadyScanning`` if a scan is already
3977 |     ///   active, `CancellationError` on task cancellation, or whatever error ends the scan
3978 |     ///   (e.g. ``BLESwiftError/bluetoothUnavailable``).
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Central/findFirst(matching:timeout:)'
    --> ../Central.swift:3978:19-3978:32
3976 |     ///   ends without a match), ``BLESwiftError/alreadyScanning`` if a scan is already
3977 |     ///   active, `CancellationError` on task cancellation, or whatever error ends the scan
3978 +     ///   (e.g. ``BLESwiftError/bluetoothUnavailable``).
3979 |     public func findFirst(matching filter: ScanFilter, timeout: Duration? = nil) async throws -> Discovery {
3980 |         // `scan` claims `activeScan` synchronously on success and leaves it untouched when
warning: 'PeripheralIdentifier' doesn't exist at '/BLESwift/Central/connect(identifier:fallbackScan:reconnect:timeout:compatibility:)'
    --> ../Central.swift:4018:55-4018:75
4016 |
4017 |     /// Connects to a peripheral by bare `UUID`, optionally falling back to a scan — the
4018 +     /// "saved device" flow: persist a peripheral's ``PeripheralIdentifier/uuid``, then
4019 |     /// reconnect to it on a later launch in one call.
4020 |     ///
warning: 'GATTCompatibility' doesn't exist at '/BLESwift/Central/connect(identifier:fallbackScan:reconnect:timeout:compatibility:)'
    --> ../Central.swift:4038:32-4038:49
4036 |     ///     Defaults to 15 seconds; `nil` waits indefinitely.
4037 |     ///   - compatibility: Accommodations for peripherals that misreport their GATT
4038 +     ///     database — see ``GATTCompatibility``. Defaults to ``GATTCompatibility/strict``;
4039 |     ///     applies to this connection only.
4040 |     /// - Returns: A ``Peripheral`` handle once connected.
warning: 'GATTCompatibility' doesn't exist at '/BLESwift/Central/connect(identifier:fallbackScan:reconnect:timeout:compatibility:)'
    --> ../Central.swift:4038:67-4038:84
4036 |     ///     Defaults to 15 seconds; `nil` waits indefinitely.
4037 |     ///   - compatibility: Accommodations for peripherals that misreport their GATT
4038 +     ///     database — see ``GATTCompatibility``. Defaults to ``GATTCompatibility/strict``;
4039 |     ///     applies to this connection only.
4040 |     /// - Returns: A ``Peripheral`` handle once connected.
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Central/connect(identifier:fallbackScan:reconnect:timeout:compatibility:)'
    --> ../Central.swift:4041:21-4041:34
4039 |     ///     applies to this connection only.
4040 |     /// - Returns: A ``Peripheral`` handle once connected.
4041 +     /// - Throws: ``BLESwiftError/unexpectedPeripheral(_:)`` when `identifier` is unknown
4042 |     ///   and `fallbackScan` is `nil`; ``BLESwiftError/timedOut`` when the fallback scan
4043 |     ///   finds no match in time; otherwise whatever
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Central/connect(identifier:fallbackScan:reconnect:timeout:compatibility:)'
    --> ../Central.swift:4042:42-4042:55
4040 |     /// - Returns: A ``Peripheral`` handle once connected.
4041 |     /// - Throws: ``BLESwiftError/unexpectedPeripheral(_:)`` when `identifier` is unknown
4042 +     ///   and `fallbackScan` is `nil`; ``BLESwiftError/timedOut`` when the fallback scan
4043 |     ///   finds no match in time; otherwise whatever
4044 |     ///   ``connect(_:timeout:reconnect:warningOptions:compatibility:)`` throws.
warning: 'WarningOptions' doesn't exist at '/BLESwift/Configuration/warningOptions'
  --> ../Configuration/Configuration.swift:17:23-17:37
15 |     public let showPowerAlert: Bool
16 |
17 +     /// The default ``WarningOptions`` applied to connections that don't specify their own.
18 |     public let warningOptions: WarningOptions
19 |
warning: 'notifications(for:policy:)' doesn't exist at '/BLESwift/Peripheral'
  --> ../Connection/BufferingPolicy.swift:8:18-8:44
6  | /// How a notification stream buffers values its consumer hasn't consumed yet. BLESwift's
7  | /// own mirror of `AsyncStream.Continuation.BufferingPolicy`, which can't appear directly in
8  + /// ``Peripheral/notifications(for:policy:)``'s signature without naming the element type.
   |                  ╰─suggestion: Replace 'notifications(for:policy:)' with 'notifications(for:policy:survivesReconnect:)'
9  | public enum BufferingPolicy: Sendable, Equatable {
10 |
warning: 'CentralState' doesn't exist at '/BLESwift/ConnectionState'
 --> ../Connection/ConnectionState.swift:6:67-6:79
4 | //
5 |
6 + /// A snapshot of one peripheral's connection lifecycle. Unlike ``CentralState`` (the radio's
7 | /// state, readable `nonisolated`), ``Central/connectionState(of:)`` reflects actor-isolated
8 | /// state and so is read via `await`. Every peripheral has its own independent state.
warning: 'BLESwiftError' doesn't exist at '/BLESwift/L2CAPChannel/write(_:)'
  --> ../Connection/L2CAPChannel.swift:59:21-59:34
57 |     ///
58 |     /// - Parameter data: The bytes to send.
59 +     /// - Throws: ``BLESwiftError/l2capChannelClosed`` if the channel has been closed (by
60 |     ///   ``close()`` or a disconnect), or the underlying transport error if the write fails.
61 |     public func write(_ data: Data) async throws {
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Peripheral/writeChunked(_:to:type:chunkSize:timeout:)'
  --> ../Connection/Peripheral+Chunked.swift:46:13-46:26
44 |     /// - Important: `timeout` applies **per chunk**, not to the whole payload.
45 |     /// - Important: Cancelling the task between chunks stops sending and throws
46 +     ///   ``BLESwiftError/operationCancelled``. A partially-sent payload is the caller's
47 |     ///   problem to reconcile at the protocol level.
48 |     /// - Note: There is no framing hook — BLESwift sends the raw payload bytes, sliced on
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Peripheral/writeChunked(_:to:type:chunkSize:timeout:)'
  --> ../Connection/Peripheral+Chunked.swift:60:21-60:34
58 |     ///     `type`. A `chunkSize` larger than the payload sends it as a single chunk.
59 |     ///   - timeout: Per-chunk timeout. `nil` (the default) waits indefinitely per chunk.
60 +     /// - Throws: ``BLESwiftError/invalidArgument(_:)`` if `chunkSize` is not positive or
61 |     ///   exceeds ``maximumWriteValueLength(for:)`` for `type`; ``BLESwiftError/notConnected``;
62 |     ///   ``BLESwiftError/missingService(_:)``/``BLESwiftError/missingCharacteristic(_:)``;
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Peripheral/writeChunked(_:to:type:chunkSize:timeout:)'
  --> ../Connection/Peripheral+Chunked.swift:61:67-61:80
59 |     ///   - timeout: Per-chunk timeout. `nil` (the default) waits indefinitely per chunk.
60 |     /// - Throws: ``BLESwiftError/invalidArgument(_:)`` if `chunkSize` is not positive or
61 +     ///   exceeds ``maximumWriteValueLength(for:)`` for `type`; ``BLESwiftError/notConnected``;
62 |     ///   ``BLESwiftError/missingService(_:)``/``BLESwiftError/missingCharacteristic(_:)``;
63 |     ///   ``BLESwiftError/timedOut``; ``BLESwiftError/operationCancelled``; whatever `value`'s
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Peripheral/writeChunked(_:to:type:chunkSize:timeout:)'
  --> ../Connection/Peripheral+Chunked.swift:62:13-62:26
60 |     /// - Throws: ``BLESwiftError/invalidArgument(_:)`` if `chunkSize` is not positive or
61 |     ///   exceeds ``maximumWriteValueLength(for:)`` for `type`; ``BLESwiftError/notConnected``;
62 +     ///   ``BLESwiftError/missingService(_:)``/``BLESwiftError/missingCharacteristic(_:)``;
63 |     ///   ``BLESwiftError/timedOut``; ``BLESwiftError/operationCancelled``; whatever `value`'s
64 |     ///   `Transmittable` encoding throws; or whatever error CoreBluetooth reports.
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Peripheral/writeChunked(_:to:type:chunkSize:timeout:)'
  --> ../Connection/Peripheral+Chunked.swift:62:50-62:63
60 |     /// - Throws: ``BLESwiftError/invalidArgument(_:)`` if `chunkSize` is not positive or
61 |     ///   exceeds ``maximumWriteValueLength(for:)`` for `type`; ``BLESwiftError/notConnected``;
62 +     ///   ``BLESwiftError/missingService(_:)``/``BLESwiftError/missingCharacteristic(_:)``;
63 |     ///   ``BLESwiftError/timedOut``; ``BLESwiftError/operationCancelled``; whatever `value`'s
64 |     ///   `Transmittable` encoding throws; or whatever error CoreBluetooth reports.
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Peripheral/writeChunked(_:to:type:chunkSize:timeout:)'
  --> ../Connection/Peripheral+Chunked.swift:63:13-63:26
61 |     ///   exceeds ``maximumWriteValueLength(for:)`` for `type`; ``BLESwiftError/notConnected``;
62 |     ///   ``BLESwiftError/missingService(_:)``/``BLESwiftError/missingCharacteristic(_:)``;
63 +     ///   ``BLESwiftError/timedOut``; ``BLESwiftError/operationCancelled``; whatever `value`'s
64 |     ///   `Transmittable` encoding throws; or whatever error CoreBluetooth reports.
65 |     public func writeChunked(
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Peripheral/writeChunked(_:to:type:chunkSize:timeout:)'
  --> ../Connection/Peripheral+Chunked.swift:63:41-63:54
61 |     ///   exceeds ``maximumWriteValueLength(for:)`` for `type`; ``BLESwiftError/notConnected``;
62 |     ///   ``BLESwiftError/missingService(_:)``/``BLESwiftError/missingCharacteristic(_:)``;
63 +     ///   ``BLESwiftError/timedOut``; ``BLESwiftError/operationCancelled``; whatever `value`'s
64 |     ///   `Transmittable` encoding throws; or whatever error CoreBluetooth reports.
65 |     public func writeChunked(
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Peripheral/writeAndAwaitNotification(write:to:awaitOn:timeout:)'
  --> ../Connection/Peripheral+Composite.swift:26:31-26:44
24 |     ///   - notifyCharacteristic: The characteristic to await a notification on.
25 |     ///   - timeout: How long the **whole** sequence (subscribe + write + wait) may take
26 +     ///     before throwing ``BLESwiftError/listenTimedOut``. Defaults to 15 seconds; `nil`
27 |     ///     waits indefinitely.
28 |     /// - Returns: The first notification value, decoded as `R`.
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Peripheral/writeAndAwaitNotification(write:to:awaitOn:timeout:)'
  --> ../Connection/Peripheral+Composite.swift:29:21-29:34
27 |     ///     waits indefinitely.
28 |     /// - Returns: The first notification value, decoded as `R`.
29 +     /// - Throws: ``BLESwiftError/notConnected``; ``BLESwiftError/listenTimedOut`` on timeout;
30 |     ///   discovery/write errors as documented on ``write(_:to:type:timeout:)``; whatever
31 |     ///   `value`'s `Transmittable` encoding or `R`'s `Receivable` decoding throws; or the
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Peripheral/writeAndAwaitNotification(write:to:awaitOn:timeout:)'
  --> ../Connection/Peripheral+Composite.swift:29:53-29:66
27 |     ///     waits indefinitely.
28 |     /// - Returns: The first notification value, decoded as `R`.
29 +     /// - Throws: ``BLESwiftError/notConnected``; ``BLESwiftError/listenTimedOut`` on timeout;
30 |     ///   discovery/write errors as documented on ``write(_:to:type:timeout:)``; whatever
31 |     ///   `value`'s `Transmittable` encoding or `R`'s `Receivable` decoding throws; or the
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Peripheral/writeAndAssemble(write:to:assembleFrom:expectedLength:timeout:)'
  --> ../Connection/Peripheral+Composite.swift:56:11-56:24
54 |     ///
55 |     /// Accumulation past `expectedLength` throws
56 +     /// ``BLESwiftError/tooMuchData(expected:received:)`` (carrying everything received), and
57 |     /// `timeout` covers the **whole assembly** — a device that sends part of the reply and
58 |     /// then goes silent still times out.
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Peripheral/writeAndAssemble(write:to:assembleFrom:expectedLength:timeout:)'
  --> ../Connection/Peripheral+Composite.swift:66:36-66:49
64 |     ///   - expectedLength: The total size, in bytes, of the assembled reply.
65 |     ///   - timeout: How long the whole sequence (subscribe + write + full assembly) may
66 +     ///     take before throwing ``BLESwiftError/listenTimedOut``. Defaults to 15 seconds;
67 |     ///     `nil` waits indefinitely.
68 |     /// - Returns: The assembled reply, decoded as `R`.
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Peripheral/writeAndAssemble(write:to:assembleFrom:expectedLength:timeout:)'
  --> ../Connection/Peripheral+Composite.swift:69:21-69:34
67 |     ///     `nil` waits indefinitely.
68 |     /// - Returns: The assembled reply, decoded as `R`.
69 +     /// - Throws: ``BLESwiftError/tooMuchData(expected:received:)`` if more than
70 |     ///   `expectedLength` bytes arrive; otherwise everything documented on
71 |     ///   ``writeAndAwaitNotification(write:to:awaitOn:timeout:)``.
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Peripheral/flush(_:quietPeriod:)'
   --> ../Connection/Peripheral+Composite.swift:104:21-104:34
102 |     ///   - quietPeriod: How long the characteristic must stay silent before the flush is
103 |     ///     considered complete. Must be strictly positive. Defaults to 3 seconds.
104 +     /// - Throws: ``BLESwiftError/invalidArgument(_:)`` if `quietPeriod` is not strictly
105 |     ///   positive (BLESwift never crashes on argument validation); ``BLESwiftError/notConnected``; discovery errors as
106 |     ///   documented on ``read(from:timeout:)``; or the error the connection tore down
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Peripheral/flush(_:quietPeriod:)'
   --> ../Connection/Peripheral+Composite.swift:105:71-105:84
103 |     ///     considered complete. Must be strictly positive. Defaults to 3 seconds.
104 |     /// - Throws: ``BLESwiftError/invalidArgument(_:)`` if `quietPeriod` is not strictly
105 +     ///   positive (BLESwift never crashes on argument validation); ``BLESwiftError/notConnected``; discovery errors as
106 |     ///   documented on ``read(from:timeout:)``; or the error the connection tore down
107 |     ///   with mid-flush.
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Peripheral/read(from:timeout:)'
  --> ../Connection/Peripheral+GATT.swift:20:63-20:76
18 |     /// - Parameters:
19 |     ///   - characteristic: The characteristic to read from.
20 +     ///   - timeout: How long to wait before giving up with ``BLESwiftError/timedOut``. `nil`
21 |     ///     (the default) waits indefinitely.
22 |     /// - Returns: The characteristic's value, decoded as `Value`.
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Peripheral/read(from:timeout:)'
  --> ../Connection/Peripheral+GATT.swift:23:21-23:34
21 |     ///     (the default) waits indefinitely.
22 |     /// - Returns: The characteristic's value, decoded as `Value`.
23 +     /// - Throws: ``BLESwiftError/notConnected``;
24 |     ///   ``BLESwiftError/readConflictsWithNotification`` if `characteristic` currently has
25 |     ///   notifications enabled (CoreBluetooth can't disambiguate a read completion from a
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Peripheral/read(from:timeout:)'
  --> ../Connection/Peripheral+GATT.swift:24:13-24:26
22 |     /// - Returns: The characteristic's value, decoded as `Value`.
23 |     /// - Throws: ``BLESwiftError/notConnected``;
24 +     ///   ``BLESwiftError/readConflictsWithNotification`` if `characteristic` currently has
25 |     ///   notifications enabled (CoreBluetooth can't disambiguate a read completion from a
26 |     ///   notification on the same characteristic);
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Peripheral/read(from:timeout:)'
  --> ../Connection/Peripheral+GATT.swift:27:13-27:26
25 |     ///   notifications enabled (CoreBluetooth can't disambiguate a read completion from a
26 |     ///   notification on the same characteristic);
27 +     ///   ``BLESwiftError/missingService(_:)``/``BLESwiftError/missingCharacteristic(_:)``;
28 |     ///   ``BLESwiftError/timedOut``; whatever `Value`'s `Receivable` decoding throws; or
29 |     ///   whatever error CoreBluetooth reports.
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Peripheral/read(from:timeout:)'
  --> ../Connection/Peripheral+GATT.swift:27:50-27:63
25 |     ///   notifications enabled (CoreBluetooth can't disambiguate a read completion from a
26 |     ///   notification on the same characteristic);
27 +     ///   ``BLESwiftError/missingService(_:)``/``BLESwiftError/missingCharacteristic(_:)``;
28 |     ///   ``BLESwiftError/timedOut``; whatever `Value`'s `Receivable` decoding throws; or
29 |     ///   whatever error CoreBluetooth reports.
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Peripheral/read(from:timeout:)'
  --> ../Connection/Peripheral+GATT.swift:28:13-28:26
26 |     ///   notification on the same characteristic);
27 |     ///   ``BLESwiftError/missingService(_:)``/``BLESwiftError/missingCharacteristic(_:)``;
28 +     ///   ``BLESwiftError/timedOut``; whatever `Value`'s `Receivable` decoding throws; or
29 |     ///   whatever error CoreBluetooth reports.
30 |     public func read<Value: Receivable>(from characteristic: CharacteristicIdentifier, timeout: Duration? = nil) async throws -> Value {
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Peripheral/write(_:to:type:timeout:)'
  --> ../Connection/Peripheral+GATT.swift:47:63-47:76
45 |     ///   - type: Whether to wait for CoreBluetooth's write confirmation. Defaults to
46 |     ///     `.withResponse`.
47 +     ///   - timeout: How long to wait before giving up with ``BLESwiftError/timedOut``. `nil`
48 |     ///     (the default) waits indefinitely.
49 |     /// - Throws: ``BLESwiftError/notConnected``;
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Peripheral/write(_:to:type:timeout:)'
  --> ../Connection/Peripheral+GATT.swift:49:21-49:34
47 |     ///   - timeout: How long to wait before giving up with ``BLESwiftError/timedOut``. `nil`
48 |     ///     (the default) waits indefinitely.
49 +     /// - Throws: ``BLESwiftError/notConnected``;
50 |     ///   ``BLESwiftError/missingService(_:)``/``BLESwiftError/missingCharacteristic(_:)``;
51 |     ///   ``BLESwiftError/timedOut``; whatever `value`'s `Transmittable` encoding throws; or
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Peripheral/write(_:to:type:timeout:)'
  --> ../Connection/Peripheral+GATT.swift:50:13-50:26
48 |     ///     (the default) waits indefinitely.
49 |     /// - Throws: ``BLESwiftError/notConnected``;
50 +     ///   ``BLESwiftError/missingService(_:)``/``BLESwiftError/missingCharacteristic(_:)``;
51 |     ///   ``BLESwiftError/timedOut``; whatever `value`'s `Transmittable` encoding throws; or
52 |     ///   whatever error CoreBluetooth reports.
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Peripheral/write(_:to:type:timeout:)'
  --> ../Connection/Peripheral+GATT.swift:50:50-50:63
48 |     ///     (the default) waits indefinitely.
49 |     /// - Throws: ``BLESwiftError/notConnected``;
50 +     ///   ``BLESwiftError/missingService(_:)``/``BLESwiftError/missingCharacteristic(_:)``;
51 |     ///   ``BLESwiftError/timedOut``; whatever `value`'s `Transmittable` encoding throws; or
52 |     ///   whatever error CoreBluetooth reports.
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Peripheral/write(_:to:type:timeout:)'
  --> ../Connection/Peripheral+GATT.swift:51:13-51:26
49 |     /// - Throws: ``BLESwiftError/notConnected``;
50 |     ///   ``BLESwiftError/missingService(_:)``/``BLESwiftError/missingCharacteristic(_:)``;
51 +     ///   ``BLESwiftError/timedOut``; whatever `value`'s `Transmittable` encoding throws; or
52 |     ///   whatever error CoreBluetooth reports.
53 |     public func write<Value: Transmittable>(
warning: 'CharacteristicProperties' doesn't exist at '/BLESwift/Peripheral/properties(of:)'
  --> ../Connection/Peripheral+GATT.swift:68:54-68:78
66 |     ///
67 |     /// - Parameter characteristic: The characteristic to introspect.
68 +     /// - Returns: The characteristic's advertised ``CharacteristicProperties``.
69 |     /// - Throws: ``BLESwiftError/notConnected``;
70 |     ///   ``BLESwiftError/missingService(_:)``/``BLESwiftError/missingCharacteristic(_:)``;
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Peripheral/properties(of:)'
  --> ../Connection/Peripheral+GATT.swift:69:21-69:34
67 |     /// - Parameter characteristic: The characteristic to introspect.
68 |     /// - Returns: The characteristic's advertised ``CharacteristicProperties``.
69 +     /// - Throws: ``BLESwiftError/notConnected``;
70 |     ///   ``BLESwiftError/missingService(_:)``/``BLESwiftError/missingCharacteristic(_:)``;
71 |     ///   or whatever error CoreBluetooth reports.
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Peripheral/properties(of:)'
  --> ../Connection/Peripheral+GATT.swift:70:13-70:26
68 |     /// - Returns: The characteristic's advertised ``CharacteristicProperties``.
69 |     /// - Throws: ``BLESwiftError/notConnected``;
70 +     ///   ``BLESwiftError/missingService(_:)``/``BLESwiftError/missingCharacteristic(_:)``;
71 |     ///   or whatever error CoreBluetooth reports.
72 |     public func properties(of characteristic: CharacteristicIdentifier) async throws -> CharacteristicProperties {
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Peripheral/properties(of:)'
  --> ../Connection/Peripheral+GATT.swift:70:50-70:63
68 |     /// - Returns: The characteristic's advertised ``CharacteristicProperties``.
69 |     /// - Throws: ``BLESwiftError/notConnected``;
70 +     ///   ``BLESwiftError/missingService(_:)``/``BLESwiftError/missingCharacteristic(_:)``;
71 |     ///   or whatever error CoreBluetooth reports.
72 |     public func properties(of characteristic: CharacteristicIdentifier) async throws -> CharacteristicProperties {
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Peripheral/readDescriptor(_:timeout:)'
  --> ../Connection/Peripheral+GATT.swift:85:63-85:76
83 |     /// - Parameters:
84 |     ///   - descriptor: The descriptor to read from.
85 +     ///   - timeout: How long to wait before giving up with ``BLESwiftError/timedOut``. `nil`
86 |     ///     (the default) waits indefinitely.
87 |     /// - Returns: The descriptor's value, as raw `Data`.
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Peripheral/readDescriptor(_:timeout:)'
  --> ../Connection/Peripheral+GATT.swift:88:21-88:34
86 |     ///     (the default) waits indefinitely.
87 |     /// - Returns: The descriptor's value, as raw `Data`.
88 +     /// - Throws: ``BLESwiftError/notConnected``;
89 |     ///   ``BLESwiftError/missingService(_:)``/``BLESwiftError/missingCharacteristic(_:)``/``BLESwiftError/missingDescriptor(_:)``;
90 |     ///   ``BLESwiftError/timedOut``; or whatever error CoreBluetooth reports.
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Peripheral/readDescriptor(_:timeout:)'
  --> ../Connection/Peripheral+GATT.swift:89:13-89:26
87 |     /// - Returns: The descriptor's value, as raw `Data`.
88 |     /// - Throws: ``BLESwiftError/notConnected``;
89 +     ///   ``BLESwiftError/missingService(_:)``/``BLESwiftError/missingCharacteristic(_:)``/``BLESwiftError/missingDescriptor(_:)``;
90 |     ///   ``BLESwiftError/timedOut``; or whatever error CoreBluetooth reports.
91 |     public func readDescriptor(_ descriptor: DescriptorIdentifier, timeout: Duration? = nil) async throws -> Data {
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Peripheral/readDescriptor(_:timeout:)'
  --> ../Connection/Peripheral+GATT.swift:89:50-89:63
87 |     /// - Returns: The descriptor's value, as raw `Data`.
88 |     /// - Throws: ``BLESwiftError/notConnected``;
89 +     ///   ``BLESwiftError/missingService(_:)``/``BLESwiftError/missingCharacteristic(_:)``/``BLESwiftError/missingDescriptor(_:)``;
90 |     ///   ``BLESwiftError/timedOut``; or whatever error CoreBluetooth reports.
91 |     public func readDescriptor(_ descriptor: DescriptorIdentifier, timeout: Duration? = nil) async throws -> Data {
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Peripheral/readDescriptor(_:timeout:)'
  --> ../Connection/Peripheral+GATT.swift:89:94-89:107
87 |     /// - Returns: The descriptor's value, as raw `Data`.
88 |     /// - Throws: ``BLESwiftError/notConnected``;
89 +     ///   ``BLESwiftError/missingService(_:)``/``BLESwiftError/missingCharacteristic(_:)``/``BLESwiftError/missingDescriptor(_:)``;
90 |     ///   ``BLESwiftError/timedOut``; or whatever error CoreBluetooth reports.
91 |     public func readDescriptor(_ descriptor: DescriptorIdentifier, timeout: Duration? = nil) async throws -> Data {
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Peripheral/readDescriptor(_:timeout:)'
  --> ../Connection/Peripheral+GATT.swift:90:13-90:26
88 |     /// - Throws: ``BLESwiftError/notConnected``;
89 |     ///   ``BLESwiftError/missingService(_:)``/``BLESwiftError/missingCharacteristic(_:)``/``BLESwiftError/missingDescriptor(_:)``;
90 +     ///   ``BLESwiftError/timedOut``; or whatever error CoreBluetooth reports.
91 |     public func readDescriptor(_ descriptor: DescriptorIdentifier, timeout: Duration? = nil) async throws -> Data {
92 |         let central = try resolveCentral()
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Peripheral/writeDescriptor(_:value:timeout:)'
   --> ../Connection/Peripheral+GATT.swift:103:63-103:76
101 |     ///   - descriptor: The descriptor to write to.
102 |     ///   - value: The raw bytes to write.
103 +     ///   - timeout: How long to wait before giving up with ``BLESwiftError/timedOut``. `nil`
104 |     ///     (the default) waits indefinitely.
105 |     /// - Throws: ``BLESwiftError/notConnected``;
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Peripheral/writeDescriptor(_:value:timeout:)'
   --> ../Connection/Peripheral+GATT.swift:105:21-105:34
103 |     ///   - timeout: How long to wait before giving up with ``BLESwiftError/timedOut``. `nil`
104 |     ///     (the default) waits indefinitely.
105 +     /// - Throws: ``BLESwiftError/notConnected``;
106 |     ///   ``BLESwiftError/missingService(_:)``/``BLESwiftError/missingCharacteristic(_:)``/``BLESwiftError/missingDescriptor(_:)``;
107 |     ///   ``BLESwiftError/timedOut``; or whatever error CoreBluetooth reports.
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Peripheral/writeDescriptor(_:value:timeout:)'
   --> ../Connection/Peripheral+GATT.swift:106:13-106:26
104 |     ///     (the default) waits indefinitely.
105 |     /// - Throws: ``BLESwiftError/notConnected``;
106 +     ///   ``BLESwiftError/missingService(_:)``/``BLESwiftError/missingCharacteristic(_:)``/``BLESwiftError/missingDescriptor(_:)``;
107 |     ///   ``BLESwiftError/timedOut``; or whatever error CoreBluetooth reports.
108 |     public func writeDescriptor(_ descriptor: DescriptorIdentifier, value: Data, timeout: Duration? = nil) async throws {
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Peripheral/writeDescriptor(_:value:timeout:)'
   --> ../Connection/Peripheral+GATT.swift:106:50-106:63
104 |     ///     (the default) waits indefinitely.
105 |     /// - Throws: ``BLESwiftError/notConnected``;
106 +     ///   ``BLESwiftError/missingService(_:)``/``BLESwiftError/missingCharacteristic(_:)``/``BLESwiftError/missingDescriptor(_:)``;
107 |     ///   ``BLESwiftError/timedOut``; or whatever error CoreBluetooth reports.
108 |     public func writeDescriptor(_ descriptor: DescriptorIdentifier, value: Data, timeout: Duration? = nil) async throws {
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Peripheral/writeDescriptor(_:value:timeout:)'
   --> ../Connection/Peripheral+GATT.swift:106:94-106:107
104 |     ///     (the default) waits indefinitely.
105 |     /// - Throws: ``BLESwiftError/notConnected``;
106 +     ///   ``BLESwiftError/missingService(_:)``/``BLESwiftError/missingCharacteristic(_:)``/``BLESwiftError/missingDescriptor(_:)``;
107 |     ///   ``BLESwiftError/timedOut``; or whatever error CoreBluetooth reports.
108 |     public func writeDescriptor(_ descriptor: DescriptorIdentifier, value: Data, timeout: Duration? = nil) async throws {
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Peripheral/writeDescriptor(_:value:timeout:)'
   --> ../Connection/Peripheral+GATT.swift:107:13-107:26
105 |     /// - Throws: ``BLESwiftError/notConnected``;
106 |     ///   ``BLESwiftError/missingService(_:)``/``BLESwiftError/missingCharacteristic(_:)``/``BLESwiftError/missingDescriptor(_:)``;
107 +     ///   ``BLESwiftError/timedOut``; or whatever error CoreBluetooth reports.
108 |     public func writeDescriptor(_ descriptor: DescriptorIdentifier, value: Data, timeout: Duration? = nil) async throws {
109 |         let central = try resolveCentral()
warning: 'ServiceIdentifier' doesn't exist at '/BLESwift/Peripheral/discoverServices()'
   --> ../Connection/Peripheral+GATT.swift:117:37-117:54
115 |     /// `didModifyServices` invalidation (observable on ``serviceChanges()``) resets it.
116 |     ///
117 +     /// - Returns: The discovered ``ServiceIdentifier``s (empty if none). Order unspecified.
118 |     /// - Throws: ``BLESwiftError/notConnected``; ``BLESwiftError/operationCancelled``; or
119 |     ///   whatever error CoreBluetooth reports.
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Peripheral/discoverServices()'
   --> ../Connection/Peripheral+GATT.swift:118:21-118:34
116 |     ///
117 |     /// - Returns: The discovered ``ServiceIdentifier``s (empty if none). Order unspecified.
118 +     /// - Throws: ``BLESwiftError/notConnected``; ``BLESwiftError/operationCancelled``; or
119 |     ///   whatever error CoreBluetooth reports.
120 |     public func discoverServices() async throws -> [ServiceIdentifier] {
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Peripheral/discoverServices()'
   --> ../Connection/Peripheral+GATT.swift:118:53-118:66
116 |     ///
117 |     /// - Returns: The discovered ``ServiceIdentifier``s (empty if none). Order unspecified.
118 +     /// - Throws: ``BLESwiftError/notConnected``; ``BLESwiftError/operationCancelled``; or
119 |     ///   whatever error CoreBluetooth reports.
120 |     public func discoverServices() async throws -> [ServiceIdentifier] {
warning: 'CharacteristicIdentifier' doesn't exist at '/BLESwift/Peripheral/discoverCharacteristics(for:)'
   --> ../Connection/Peripheral+GATT.swift:130:37-130:61
128 |     ///
129 |     /// - Parameter service: The service whose characteristics to enumerate.
130 +     /// - Returns: The discovered ``CharacteristicIdentifier``s (empty if none). Order
131 |     ///   unspecified.
132 |     /// - Throws: ``BLESwiftError/notConnected``; ``BLESwiftError/missingService(_:)``;
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Peripheral/discoverCharacteristics(for:)'
   --> ../Connection/Peripheral+GATT.swift:132:21-132:34
130 |     /// - Returns: The discovered ``CharacteristicIdentifier``s (empty if none). Order
131 |     ///   unspecified.
132 +     /// - Throws: ``BLESwiftError/notConnected``; ``BLESwiftError/missingService(_:)``;
133 |     ///   ``BLESwiftError/operationCancelled``; or whatever error CoreBluetooth reports.
134 |     public func discoverCharacteristics(for service: ServiceIdentifier) async throws -> [CharacteristicIdentifier] {
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Peripheral/discoverCharacteristics(for:)'
   --> ../Connection/Peripheral+GATT.swift:132:53-132:66
130 |     /// - Returns: The discovered ``CharacteristicIdentifier``s (empty if none). Order
131 |     ///   unspecified.
132 +     /// - Throws: ``BLESwiftError/notConnected``; ``BLESwiftError/missingService(_:)``;
133 |     ///   ``BLESwiftError/operationCancelled``; or whatever error CoreBluetooth reports.
134 |     public func discoverCharacteristics(for service: ServiceIdentifier) async throws -> [CharacteristicIdentifier] {
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Peripheral/discoverCharacteristics(for:)'
   --> ../Connection/Peripheral+GATT.swift:133:13-133:26
131 |     ///   unspecified.
132 |     /// - Throws: ``BLESwiftError/notConnected``; ``BLESwiftError/missingService(_:)``;
133 +     ///   ``BLESwiftError/operationCancelled``; or whatever error CoreBluetooth reports.
134 |     public func discoverCharacteristics(for service: ServiceIdentifier) async throws -> [CharacteristicIdentifier] {
135 |         let central = try resolveCentral()
warning: 'DescriptorIdentifier' doesn't exist at '/BLESwift/Peripheral/discoverDescriptors(for:)'
   --> ../Connection/Peripheral+GATT.swift:143:37-143:57
141 |     ///
142 |     /// - Parameter characteristic: The characteristic whose descriptors to enumerate.
143 +     /// - Returns: The discovered ``DescriptorIdentifier``s (empty if none). Order
144 |     ///   unspecified. The Client Characteristic Configuration descriptor (the
145 |     ///   notify/indicate toggle) is managed implicitly by BLESwift's notification API and
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Peripheral/discoverDescriptors(for:)'
   --> ../Connection/Peripheral+GATT.swift:147:21-147:34
145 |     ///   notify/indicate toggle) is managed implicitly by BLESwift's notification API and
146 |     ///   not surfaced here.
147 +     /// - Throws: ``BLESwiftError/notConnected``;
148 |     ///   ``BLESwiftError/missingService(_:)``/``BLESwiftError/missingCharacteristic(_:)``;
149 |     ///   ``BLESwiftError/operationCancelled``; or whatever error CoreBluetooth reports.
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Peripheral/discoverDescriptors(for:)'
   --> ../Connection/Peripheral+GATT.swift:148:13-148:26
146 |     ///   not surfaced here.
147 |     /// - Throws: ``BLESwiftError/notConnected``;
148 +     ///   ``BLESwiftError/missingService(_:)``/``BLESwiftError/missingCharacteristic(_:)``;
149 |     ///   ``BLESwiftError/operationCancelled``; or whatever error CoreBluetooth reports.
150 |     public func discoverDescriptors(for characteristic: CharacteristicIdentifier) async throws -> [DescriptorIdentifier] {
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Peripheral/discoverDescriptors(for:)'
   --> ../Connection/Peripheral+GATT.swift:148:50-148:63
146 |     ///   not surfaced here.
147 |     /// - Throws: ``BLESwiftError/notConnected``;
148 +     ///   ``BLESwiftError/missingService(_:)``/``BLESwiftError/missingCharacteristic(_:)``;
149 |     ///   ``BLESwiftError/operationCancelled``; or whatever error CoreBluetooth reports.
150 |     public func discoverDescriptors(for characteristic: CharacteristicIdentifier) async throws -> [DescriptorIdentifier] {
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Peripheral/discoverDescriptors(for:)'
   --> ../Connection/Peripheral+GATT.swift:149:13-149:26
147 |     /// - Throws: ``BLESwiftError/notConnected``;
148 |     ///   ``BLESwiftError/missingService(_:)``/``BLESwiftError/missingCharacteristic(_:)``;
149 +     ///   ``BLESwiftError/operationCancelled``; or whatever error CoreBluetooth reports.
150 |     public func discoverDescriptors(for characteristic: CharacteristicIdentifier) async throws -> [DescriptorIdentifier] {
151 |         let central = try resolveCentral()
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Peripheral/readRSSI(timeout:)'
   --> ../Connection/Peripheral+GATT.swift:159:71-159:84
157 |     /// characteristic's FIFO.
158 |     ///
159 +     /// - Parameter timeout: How long to wait before giving up with ``BLESwiftError/timedOut``.
160 |     ///   `nil` (the default) waits indefinitely.
161 |     /// - Returns: The current RSSI, in dBm.
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Peripheral/readRSSI(timeout:)'
   --> ../Connection/Peripheral+GATT.swift:162:21-162:34
160 |     ///   `nil` (the default) waits indefinitely.
161 |     /// - Returns: The current RSSI, in dBm.
162 +     /// - Throws: ``BLESwiftError/notConnected``; ``BLESwiftError/timedOut``; or whatever
163 |     ///   error CoreBluetooth reports.
164 |     public func readRSSI(timeout: Duration? = nil) async throws -> Int {
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Peripheral/readRSSI(timeout:)'
   --> ../Connection/Peripheral+GATT.swift:162:53-162:66
160 |     ///   `nil` (the default) waits indefinitely.
161 |     /// - Returns: The current RSSI, in dBm.
162 +     /// - Throws: ``BLESwiftError/notConnected``; ``BLESwiftError/timedOut``; or whatever
163 |     ///   error CoreBluetooth reports.
164 |     public func readRSSI(timeout: Duration? = nil) async throws -> Int {
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Peripheral/openL2CAPChannel(psm:timeout:)'
  --> ../Connection/Peripheral+L2CAP.swift:18:57-18:70
16 |     /// - Parameters:
17 |     ///   - psm: The PSM to open the channel against.
18 +     ///   - timeout: How long to wait before throwing ``BLESwiftError/timedOut``. Defaults
19 |     ///     to `nil` (wait indefinitely). Cancelling the calling `Task` aborts the open,
20 |     ///     leaving the connection healthy.
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Peripheral/openL2CAPChannel(psm:timeout:)'
  --> ../Connection/Peripheral+L2CAP.swift:22:21-22:34
20 |     ///     leaving the connection healthy.
21 |     /// - Returns: An open ``L2CAPChannel``.
22 +     /// - Throws: ``BLESwiftError/notConnected``, ``BLESwiftError/timedOut``,
23 |     ///   ``BLESwiftError/operationCancelled``, ``BLESwiftError/l2capOpenFailed``, or
24 |     ///   whatever error CoreBluetooth reports for a failed open.
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Peripheral/openL2CAPChannel(psm:timeout:)'
  --> ../Connection/Peripheral+L2CAP.swift:22:53-22:66
20 |     ///     leaving the connection healthy.
21 |     /// - Returns: An open ``L2CAPChannel``.
22 +     /// - Throws: ``BLESwiftError/notConnected``, ``BLESwiftError/timedOut``,
23 |     ///   ``BLESwiftError/operationCancelled``, ``BLESwiftError/l2capOpenFailed``, or
24 |     ///   whatever error CoreBluetooth reports for a failed open.
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Peripheral/openL2CAPChannel(psm:timeout:)'
  --> ../Connection/Peripheral+L2CAP.swift:23:13-23:26
21 |     /// - Returns: An open ``L2CAPChannel``.
22 |     /// - Throws: ``BLESwiftError/notConnected``, ``BLESwiftError/timedOut``,
23 +     ///   ``BLESwiftError/operationCancelled``, ``BLESwiftError/l2capOpenFailed``, or
24 |     ///   whatever error CoreBluetooth reports for a failed open.
25 |     public func openL2CAPChannel(psm: L2CAPPSM, timeout: Duration? = nil) async throws -> L2CAPChannel {
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Peripheral/openL2CAPChannel(psm:timeout:)'
  --> ../Connection/Peripheral+L2CAP.swift:23:51-23:64
21 |     /// - Returns: An open ``L2CAPChannel``.
22 |     /// - Throws: ``BLESwiftError/notConnected``, ``BLESwiftError/timedOut``,
23 +     ///   ``BLESwiftError/operationCancelled``, ``BLESwiftError/l2capOpenFailed``, or
24 |     ///   whatever error CoreBluetooth reports for a failed open.
25 |     public func openL2CAPChannel(psm: L2CAPPSM, timeout: Duration? = nil) async throws -> L2CAPChannel {
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Peripheral/notifications(for:policy:survivesReconnect:)'
  --> ../Connection/Peripheral+Notifications.swift:49:65-49:78
47 |     ///     the disconnect are retained per `policy`.
48 |     /// - Returns: A stream of decoded notification values. If this peripheral is not (or
49 +     ///   no longer) connected, the stream immediately throws ``BLESwiftError/notConnected``.
50 |     ///
51 |     /// - Note: Unlike ``read(from:timeout:)``, `Value` additionally requires
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Peripheral'
  --> ../Connection/Peripheral.swift:15:14-15:27
13 | /// holding onto a `Peripheral` after its `Central` deallocates does not keep that actor
14 | /// alive. Once the connection is torn down, any further call through a stale `Peripheral`
15 + /// throws ``BLESwiftError/notConnected``.
16 | public struct Peripheral: Sendable {
17 |
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Peripheral/disconnect()'
  --> ../Connection/Peripheral.swift:44:46-44:59
42 |     /// Disconnects this peripheral — the ergonomic call-site for `Central.disconnect(_:)`.
43 |     ///
44 +     /// Pending operations are failed with ``BLESwiftError/explicitDisconnect``.
45 |     ///
46 |     /// - Throws: ``BLESwiftError/notConnected`` if the owning `Central` has already been
warning: 'BLESwiftError' doesn't exist at '/BLESwift/Peripheral/disconnect()'
  --> ../Connection/Peripheral.swift:46:21-46:34
44 |     /// Pending operations are failed with ``BLESwiftError/explicitDisconnect``.
45 |     ///
46 +     /// - Throws: ``BLESwiftError/notConnected`` if the owning `Central` has already been
47 |     ///   deallocated, or as documented on `Central.disconnect(_:)`.
48 |     public func disconnect() async throws {
warning: 'CentralState' doesn't exist at '/BLESwift/CoreBluetooth/CBCentralManager/radioState'
  --> ../CoreBluetoothBackend/CBCentralManager+CentralManaging.swift:66:57-66:69
64 |     }
65 |
66 +     /// Maps the native `state` (`CBManagerState`) to ``CentralState``.
67 |     public var radioState: CentralState {
68 |         CentralState(state)
warning: 'BluetoothAuthorization' doesn't exist at '/BLESwift/CoreBluetooth/CBCentralManager/bluetoothAuthorization'
  --> ../CoreBluetoothBackend/CBCentralManager+CentralManaging.swift:72:14-72:36
70 |
71 |     /// Maps the native `CBManager.authorization` class property (`CBManagerAuthorization`)
72 +     /// to ``BluetoothAuthorization``.
73 |     public static var bluetoothAuthorization: BluetoothAuthorization {
74 |         BluetoothAuthorization(authorization)
warning: 'PeripheralConnectionState' doesn't exist at '/BLESwift/CoreBluetooth/CBPeripheral/connectionState'
  --> ../CoreBluetoothBackend/CBPeripheral+PeripheralRemote.swift:96:60-96:85
94 |     #endif
95 |
96 +     /// Maps the native `state` (`CBPeripheralState`) to ``PeripheralConnectionState``.
97 |     public var connectionState: PeripheralConnectionState {
98 |         PeripheralConnectionState(state)
warning: 'ServiceIdentifier' doesn't exist at '/BLESwift/CoreBluetooth/CBPeripheral/discoveredServices'
   --> ../CoreBluetoothBackend/CBPeripheral+PeripheralRemote.swift:188:11-188:28
186 |
187 |     /// Every discovered service, mapping `CBPeripheral.services`' `CBUUID`s back to
188 +     /// ``ServiceIdentifier`` at this sanctioned seam (the `CBService`s never escape). `[]`
189 |     /// before any service discovery has landed.
190 |     public var discoveredServices: [ServiceIdentifier] {
warning: 'CharacteristicIdentifier' doesn't exist at '/BLESwift/CoreBluetooth/CBPeripheral/discoveredCharacteristics(for:)'
   --> ../CoreBluetoothBackend/CBPeripheral+PeripheralRemote.swift:195:58-195:82
193 |
194 |     /// Every discovered characteristic under `service`, mapping
195 +     /// `CBService.characteristics`' `CBUUID`s back to ``CharacteristicIdentifier``. `[]` if
196 |     /// `service` has not been discovered, or has had no characteristic discovery land yet.
197 |     public func discoveredCharacteristics(for service: ServiceIdentifier) -> [CharacteristicIdentifier] {
warning: 'DescriptorIdentifier' doesn't exist at '/BLESwift/CoreBluetooth/CBPeripheral/discoveredDescriptors(for:)'
   --> ../CoreBluetoothBackend/CBPeripheral+PeripheralRemote.swift:204:61-204:81
202 |
203 |     /// Every discovered descriptor under `characteristic`, mapping
204 +     /// `CBCharacteristic.descriptors`' `CBUUID`s back to ``DescriptorIdentifier``. `[]` if
205 |     /// `characteristic` has not been discovered, or has had no descriptor discovery land yet.
206 |     public func discoveredDescriptors(for characteristic: CharacteristicIdentifier) -> [DescriptorIdentifier] {
warning: 'L2CAPPSM' doesn't exist at '/BLESwift/CoreBluetooth/CBPeripheral/openL2CAPChannel(_:)'
   --> ../CoreBluetoothBackend/CBPeripheral+PeripheralRemote.swift:212:64-212:72
210 |     }
211 |
212 +     /// Opens an L2CAP channel to `psm`, bridging BLESwift's ``L2CAPPSM`` to CoreBluetooth's
213 |     /// `CBL2CAPPSM`. A distinct overload of `CBPeripheral`'s own `openL2CAPChannel(_:)`
214 |     /// (which takes a `CBL2CAPPSM`), disambiguated by the parameter type; it forwards to
warning: 'PeripheralManaging' doesn't exist at '/BLESwift/CoreBluetooth/CBPeripheralManager'
  --> ../CoreBluetoothBackend/CBPeripheralManager+PeripheralManaging.swift:21:41-21:59
19 | private nonisolated(unsafe) var peripheralManagerProxyKey: UInt8 = 0
20 |
21 + /// `CBPeripheralManager` conforms to ``PeripheralManaging`` — the seam that lets
   |                                         ╰─suggestion: Replace 'PeripheralManaging' with 'PeripheralManaging-Implementations'
22 | /// `PeripheralHost` drive a real manager the same way it drives a `FakePeripheralManager`.
23 | /// The value-type GATT database is compiled to `CBMutableService`/`CBMutableCharacteristic`
warning: 'PeripheralManagerDelegateProxy' doesn't exist at '/BLESwift/CoreBluetooth/CBPeripheralManager'
  --> ../CoreBluetoothBackend/CBPeripheralManager+PeripheralManaging.swift:24:58-24:88
22 | /// `PeripheralHost` drive a real manager the same way it drives a `FakePeripheralManager`.
23 | /// The value-type GATT database is compiled to `CBMutableService`/`CBMutableCharacteristic`
24 + /// here, and `respond`/`updateValue` reach the shared ``PeripheralManagerDelegateProxy`` to
   |                                                          ╰─suggestion: Replace 'PeripheralManagerDelegateProxy' with 'PeripheralManaging-Implementations'
25 | /// recover the `CBATTRequest`/`CBCentral` objects the value-type API hides.
26 | ///
warning: 'PeripheralManagerDelegateProxy' doesn't exist at '/BLESwift/CoreBluetooth/CBPeripheralManager/eventHandler'
  --> ../CoreBluetoothBackend/CBPeripheralManager+PeripheralManaging.swift:45:11-45:41
43 |
44 |     /// Implements `eventHandler` with an associated-object-retained
45 +     /// ``PeripheralManagerDelegateProxy`` assigned to `.delegate` (which is `weak` — the
46 |     /// association keeps the proxy alive). Mirrors `CBCentralManager.eventHandler` exactly,
47 |     /// including the `nonisolated(unsafe)` bridge from the protocol's plain closure into the
warning: 'bleSwiftRegisterProxy(_:)' doesn't exist at '/BLESwift/CoreBluetooth/CBPeripheralManager/eventHandler'
  --> ../CoreBluetoothBackend/CBPeripheralManager+PeripheralManaging.swift:53:13-53:38
51 |     ///   property — it creates its proxy and passes it to
52 |     ///   `CBPeripheralManager(delegate:queue:options:)` directly, then calls
53 +     ///   ``bleSwiftRegisterProxy(_:)``.
54 |     public var eventHandler: ((PeripheralHostEvent) -> Void)? {
55 |         get {
warning: 'CentralState' doesn't exist at '/BLESwift/CoreBluetooth/CBPeripheralManager/radioState'
  --> ../CoreBluetoothBackend/CBPeripheralManager+PeripheralManaging.swift:82:57-82:69
80 |     }
81 |
82 +     /// Maps the native `state` (`CBManagerState`) to ``CentralState``.
83 |     public var radioState: CentralState {
84 |         CentralState(state)
warning: 'BluetoothAuthorization' doesn't exist at '/BLESwift/CoreBluetooth/CBPeripheralManager/bluetoothAuthorization'
  --> ../CoreBluetoothBackend/CBPeripheralManager+PeripheralManaging.swift:87:71-87:93
85 |     }
86 |
87 +     /// Maps the native `CBManager.authorization` class property to ``BluetoothAuthorization``.
88 |     public static var bluetoothAuthorization: BluetoothAuthorization {
89 |         BluetoothAuthorization(authorization)
warning: 'PeripheralManaging' doesn't exist at '/BLESwift/CoreBluetooth/CBPeripheralManager/removeAllHostedServices()'
   --> ../CoreBluetoothBackend/CBPeripheralManager+PeripheralManaging.swift:112:59-112:77
110 |     /// resolved by `updateValue` after removal), then delegates to the native
111 |     /// `removeAllServices()`. Named distinctly from that method to avoid an
112 +     /// identical-signature redeclaration clash — see ``PeripheralManaging``.
113 |     public func removeAllHostedServices() {
114 |         bleSwiftPeripheralProxy?.removeAllCharacteristicHandles()
warning: 'queue' doesn't exist at '/BLESwift/PeripheralHost/unownedExecutor'
  --> ../PeripheralHost.swift:44:51-44:56
42 |     nonisolated let queue: DispatchSerialQueue
43 |
44 +     /// Ties this actor's isolation directly to ``queue`` (SE-0424 custom executors), exactly
45 |     /// as ``Central/unownedExecutor`` does. Declared `public` because it satisfies a
46 |     /// requirement of the public `Actor` protocol; not meant for direct use by clients.
warning: 'PeripheralManaging' doesn't exist at '/BLESwift/PeripheralHost/init(backend:queue:configuration:)'
   --> ../PeripheralHost.swift:187:28-187:46
185 |     ///
186 |     /// - Parameters:
187 +     ///   - backend: The ``PeripheralManaging`` conformance to drive.
188 |     ///   - queue: The `DispatchSerialQueue` `backend`'s events are confined to.
189 |     ///   - configuration: Start-time options. Defaults to `Configuration()`.
warning: 'BLESwiftError' doesn't exist at '/BLESwift/PeripheralHost/stopAndExtractState()'
   --> ../PeripheralHost.swift:213:11-213:24
211 |     ///
212 |     /// Fails every pending advertise/add-service/readiness continuation with
213 +     /// ``BLESwiftError/stopped`` and finishes the request streams before returning. BLESwift
214 |     /// never crashes here: a naive `precondition` becomes a thrown ``BLESwiftError/stopped``.
215 |     ///
warning: 'BLESwiftError' doesn't exist at '/BLESwift/PeripheralHost/stopAndExtractState()'
   --> ../PeripheralHost.swift:214:71-214:84
212 |     /// Fails every pending advertise/add-service/readiness continuation with
213 |     /// ``BLESwiftError/stopped`` and finishes the request streams before returning. BLESwift
214 +     /// never crashes here: a naive `precondition` becomes a thrown ``BLESwiftError/stopped``.
215 |     ///
216 |     /// - Returns: The underlying `CBPeripheralManager`.
warning: 'BLESwiftError' doesn't exist at '/BLESwift/PeripheralHost/stopAndExtractState()'
   --> ../PeripheralHost.swift:217:21-217:34
215 |     ///
216 |     /// - Returns: The underlying `CBPeripheralManager`.
217 +     /// - Throws: ``BLESwiftError/stopped`` if this host has already been stopped, or was not
218 |     ///   created against a real `CBPeripheralManager` (only reachable via the backend
219 |     ///   initializer — never through the public production API).
warning: 'handle(_:)' doesn't exist at '/BLESwift/PeripheralHost/state'
   --> ../PeripheralHost.swift:246:65-246:75
244 |
245 |     /// The current state of the Bluetooth radio. A synchronous snapshot — readable without
246 +     /// `await` from any isolation domain — kept current by ``handle(_:)`` on every
247 |     /// `.didUpdateState`.
248 |     public nonisolated var state: CentralState {
warning: 'CentralState' doesn't exist at '/BLESwift/PeripheralHost/stateEvents()'
   --> ../PeripheralHost.swift:267:47-267:59
265 |     }
266 |
267 +     /// Returns a multicast stream of every ``CentralState`` transition, replaying the most
268 |     /// recent state to late subscribers.
269 |     public func stateEvents() -> AsyncStream<CentralState> {
warning: 'BLESwiftError' doesn't exist at '/BLESwift/PeripheralHost/add(_:)'
   --> ../PeripheralHost.swift:279:21-279:34
277 |     ///
278 |     /// - Parameter service: The service to publish.
279 +     /// - Throws: ``BLESwiftError/stopped`` if this host has been stopped;
280 |     ///   ``BLESwiftError/operationCancelled`` if the calling `Task` is cancelled; or whatever
281 |     ///   error CoreBluetooth reports if it rejects the service.
warning: 'BLESwiftError' doesn't exist at '/BLESwift/PeripheralHost/add(_:)'
   --> ../PeripheralHost.swift:280:13-280:26
278 |     /// - Parameter service: The service to publish.
279 |     /// - Throws: ``BLESwiftError/stopped`` if this host has been stopped;
280 +     ///   ``BLESwiftError/operationCancelled`` if the calling `Task` is cancelled; or whatever
281 |     ///   error CoreBluetooth reports if it rejects the service.
282 |     public func add(_ service: GATTService) async throws {
warning: 'BLESwiftError' doesn't exist at '/BLESwift/PeripheralHost/startAdvertising(_:)'
   --> ../PeripheralHost.swift:313:21-313:34
311 |     ///
312 |     /// - Parameter advertisement: The local name and service UUIDs to advertise.
313 +     /// - Throws: ``BLESwiftError/stopped`` if this host has been stopped;
314 |     ///   ``BLESwiftError/invalidArgument(_:)`` if another ``startAdvertising(_:)`` is already
315 |     ///   awaiting its completion; ``BLESwiftError/operationCancelled`` if the calling `Task`
warning: 'BLESwiftError' doesn't exist at '/BLESwift/PeripheralHost/startAdvertising(_:)'
   --> ../PeripheralHost.swift:314:13-314:26
312 |     /// - Parameter advertisement: The local name and service UUIDs to advertise.
313 |     /// - Throws: ``BLESwiftError/stopped`` if this host has been stopped;
314 +     ///   ``BLESwiftError/invalidArgument(_:)`` if another ``startAdvertising(_:)`` is already
315 |     ///   awaiting its completion; ``BLESwiftError/operationCancelled`` if the calling `Task`
316 |     ///   is cancelled; or whatever error CoreBluetooth reports if advertising fails to start.
warning: 'BLESwiftError' doesn't exist at '/BLESwift/PeripheralHost/startAdvertising(_:)'
   --> ../PeripheralHost.swift:315:38-315:51
313 |     /// - Throws: ``BLESwiftError/stopped`` if this host has been stopped;
314 |     ///   ``BLESwiftError/invalidArgument(_:)`` if another ``startAdvertising(_:)`` is already
315 +     ///   awaiting its completion; ``BLESwiftError/operationCancelled`` if the calling `Task`
316 |     ///   is cancelled; or whatever error CoreBluetooth reports if advertising fails to start.
317 |     public func startAdvertising(_ advertisement: PeripheralAdvertisement) async throws {
warning: 'Subscriber' doesn't exist at '/BLESwift/PeripheralHost/updateValue(_:for:onSubscribed:)'
   --> ../PeripheralHost.swift:422:15-422:25
420 |     /// - Parameters:
421 |     ///   - value: The bytes to notify. Values longer than a subscriber's
422 +     ///     ``Subscriber/maximumUpdateValueLength`` are truncated by CoreBluetooth; fragment
423 |     ///     larger payloads yourself.
424 |     ///   - characteristic: The characteristic to notify on. Must have been added via
warning: 'BLESwiftError' doesn't exist at '/BLESwift/PeripheralHost/updateValue(_:for:onSubscribed:)'
   --> ../PeripheralHost.swift:428:21-428:34
426 |     ///   - centrals: The specific subscribers to notify, or `nil` (the default) for every
427 |     ///     currently-subscribed central.
428 +     /// - Throws: ``BLESwiftError/stopped`` if this host is stopped (including mid-wait);
429 |     ///   ``BLESwiftError/operationCancelled`` if the calling `Task` is cancelled.
430 |     public func updateValue(
warning: 'BLESwiftError' doesn't exist at '/BLESwift/PeripheralHost/updateValue(_:for:onSubscribed:)'
   --> ../PeripheralHost.swift:429:13-429:26
427 |     ///     currently-subscribed central.
428 |     /// - Throws: ``BLESwiftError/stopped`` if this host is stopped (including mid-wait);
429 +     ///   ``BLESwiftError/operationCancelled`` if the calling `Task` is cancelled.
430 |     public func updateValue(
431 |         _ value: Data,
Finished building documentation for 'BLESwift' (0.80s)
Generated documentation archive at:
  /Users/admin/builder/spi-builder-workspace/.docs/kylebrowning/bleswift/main
Building for debugging...
[0/8] Write snippet-extract-tool-entitlement.plist
[1/8] Write sources
[4/8] Write swift-version-69A768CDF2A0BEE1.txt
[6/54] Emitting module SymbolKit
[7/58] Compiling SymbolKit Mixin+Equals.swift
[8/58] Compiling SymbolKit Mixin+Hash.swift
[9/58] Compiling SymbolKit Mixin.swift
[10/58] Compiling SymbolKit LineList.swift
[11/58] Compiling SymbolKit Position.swift
[12/58] Compiling Snippets Snippet.swift
[13/58] Emitting module Snippets
[14/58] Compiling Snippets SnippetLanguage.swift
[15/58] Compiling Snippets SnippetParser.swift
[16/58] Compiling SymbolKit Names.swift
[17/58] Compiling SymbolKit SPI.swift
[18/58] Compiling SymbolKit Snippet.swift
[19/58] Compiling SymbolKit Extension.swift
[20/58] Compiling SymbolKit SemanticVersion.swift
[21/58] Compiling SymbolKit AccessControl.swift
[22/58] Compiling SymbolKit Availability.swift
[23/58] Compiling SymbolKit AvailabilityItem.swift
[24/58] Compiling SymbolKit Domain.swift
[25/58] Compiling SymbolKit GenericConstraint.swift
[26/58] Compiling SymbolKit GenericParameter.swift
[27/58] Compiling SymbolKit Generics.swift
[28/58] Compiling SymbolKit Namespace.swift
[29/58] Compiling SymbolKit Identifier.swift
[30/58] Compiling SymbolKit KindIdentifier.swift
[31/58] Compiling SymbolKit Location.swift
[32/58] Compiling SymbolKit Mutability.swift
[33/58] Compiling SymbolKit Relationship.swift
[34/58] Compiling SymbolKit RelationshipKind.swift
[35/58] Compiling SymbolKit SourceOrigin.swift
[36/58] Compiling SymbolKit GenericConstraints.swift
[37/58] Compiling SymbolKit Swift.swift
[38/58] Compiling SymbolKit SourceRange.swift
[39/58] Compiling SymbolKit Metadata.swift
[40/58] Compiling SymbolKit Module.swift
[41/58] Compiling SymbolKit OperatingSystem.swift
[42/58] Compiling SymbolKit Platform.swift
[43/58] Compiling SymbolKit DeclarationFragments.swift
[44/58] Compiling SymbolKit Fragment.swift
[45/58] Compiling SymbolKit FragmentKind.swift
[46/58] Compiling SymbolKit FunctionParameter.swift
[47/58] Compiling SymbolKit FunctionSignature.swift
[48/58] Compiling SymbolKit Symbol.swift
[49/58] Compiling SymbolKit SymbolKind.swift
[50/58] Compiling SymbolKit SymbolGraph.swift
[51/58] Compiling SymbolKit GraphCollector.swift
[52/58] Compiling SymbolKit UnifiedSymbol+Encodable.swift
[53/58] Compiling SymbolKit UnifiedSymbol.swift
[54/58] Compiling SymbolKit UnifiedSymbolGraph+Encodable.swift
[55/58] Compiling SymbolKit UnifiedSymbolGraph.swift
[56/62] Emitting module snippet_extract
[57/62] Compiling snippet_extract SymbolGraph+Snippet.swift
[58/62] Compiling snippet_extract SnippetBuildCommand.swift
[59/62] Compiling snippet_extract URL+Status.swift
[59/62] Write Objects.LinkFileList
[60/62] Linking snippet-extract-tool
[61/62] Applying snippet-extract-tool
Build of product 'snippet-extract' complete! (3.61s)
Building for debugging...
[0/1] Write swift-version-69A768CDF2A0BEE1.txt
Build of target: 'BLESwift' complete! (0.32s)
Target:                   BLESwiftCore
Extracting symbol information for 'BLESwiftCore'...
Finished extracting symbol information for 'BLESwiftCore'. (0.49s)
Building documentation for 'BLESwiftCore'...
Finished building documentation for 'BLESwiftCore' (0.29s)
Generated documentation archive at:
  /Users/admin/builder/spi-builder-workspace/.docs/kylebrowning/bleswift/main
Building for debugging...
[0/3] Write swift-version-69A768CDF2A0BEE1.txt
Build of product 'snippet-extract' complete! (0.26s)
Building for debugging...
[0/1] Write swift-version-69A768CDF2A0BEE1.txt
Build of target: 'BLESwiftCore' complete! (0.31s)
Successfully merged into /Users/admin/builder/spi-builder-workspace/.docs-staging/kylebrowning/bleswift/main/index/index.json
Successfully merged into /Users/admin/builder/spi-builder-workspace/.docs-staging/kylebrowning/bleswift/main/linkable-paths.json
Target:                   BLESwiftProfiles
Extracting symbol information for 'BLESwiftProfiles'...
Finished extracting symbol information for 'BLESwiftProfiles'. (0.45s)
Building documentation for 'BLESwiftProfiles'...
warning: 'BLESwiftCore' doesn't exist at '/BLESwiftProfiles'
  --> BLESwiftProfiles.md:8:32-8:44
6  |
7  | BLESwiftProfiles turns the raw bytes of well-known GATT characteristics into strongly typed
8  + Swift values. Each type is a ``BLESwiftCore/Receivable`` (and, where the characteristic is
   |                                ╰─suggestion: Replace 'BLESwiftCore' with 'BLESwift'
9  | writable, a ``BLESwiftCore/Transmittable``) whose byte layout follows the Bluetooth SIG GATT
10 | Specification Supplement (GSS) exactly — little-endian throughout, with flag-driven optional
warning: 'BLESwiftCore' doesn't exist at '/BLESwiftProfiles'
  --> BLESwiftProfiles.md:9:15-9:27
7  | BLESwiftProfiles turns the raw bytes of well-known GATT characteristics into strongly typed
8  | Swift values. Each type is a ``BLESwiftCore/Receivable`` (and, where the characteristic is
9  + writable, a ``BLESwiftCore/Transmittable``) whose byte layout follows the Bluetooth SIG GATT
   |               ╰─suggestion: Replace 'BLESwiftCore' with 'BLESwift'
10 | Specification Supplement (GSS) exactly — little-endian throughout, with flag-driven optional
11 | fields decoded in their specified order.
warning: 'BLESwiftCore' doesn't exist at '/BLESwiftProfiles/UsingProfiles'
 --> UsingProfiles.md:7:46-7:58
5 | ## Streaming a measurement
6 |
7 + Each profile type exposes the SIG-assigned ``BLESwiftCore/CharacteristicIdentifier`` it
8 | decodes, so subscribing is a one-liner — no hand-written UUIDs, no manual byte parsing:
9 |
warning: 'read(from:timeout:)' doesn't exist at '/BLESwiftProfiles/BLESwift/Peripheral'
  --> UsingProfiles.md:36:68-36:87
34 | ## Reading a single value
35 |
36 + For a one-shot read, decode straight through ``BLESwift/Peripheral/read(from:timeout:)`` by
   |                                                                    ├─suggestion: Replace 'read(from:timeout:)' with 'readDeviceInformation(timeout:)'
   |                                                                    ╰─suggestion: Replace 'read(from:timeout:)' with 'readBatteryLevel(timeout:)'
37 | naming the profile type, or use a purpose-built convenience:
38 |
warning: 'Receivable' doesn't exist at '/BLESwiftProfiles/DeviceInformation'
  --> ../DeviceInformation.swift:14:7-14:17
12 | /// This is an *aggregate* of up to six independent UTF-8 String characteristics, each of
13 | /// which is optional on a given peripheral — so `DeviceInformation` is not itself
14 + /// ``Receivable``. Read it with ``BLESwift/Peripheral/readDeviceInformation(timeout:)``,
15 | /// which reads whichever characteristics the peripheral exposes and leaves the rest `nil`.
16 | ///
warning: 'read(from:timeout:)' doesn't exist at '/BLESwiftProfiles/BLESwift/Peripheral'
  --> ../Peripheral+Profiles.swift:11:27-11:46
9  |
10 | /// Convenience reads for standard GATT profiles, built on ``BLESwift/Peripheral``'s generic
11 + /// ``BLESwift/Peripheral/read(from:timeout:)``.
   |                           ├─suggestion: Replace 'read(from:timeout:)' with 'readDeviceInformation(timeout:)'
   |                           ╰─suggestion: Replace 'read(from:timeout:)' with 'readBatteryLevel(timeout:)'
12 | extension Peripheral {
13 |
warning: 'read(from:timeout:)' doesn't exist at '/BLESwiftProfiles/BLESwift/Peripheral'
  --> ../Peripheral+Profiles.swift:20:33-20:52
18 |     ///
19 |     /// - Parameter timeout: Per-read timeout, forwarded to
20 +     ///   ``BLESwift/Peripheral/read(from:timeout:)``. `nil` (the default) waits indefinitely.
   |                                 ├─suggestion: Replace 'read(from:timeout:)' with 'readDeviceInformation(timeout:)'
   |                                 ╰─suggestion: Replace 'read(from:timeout:)' with 'readBatteryLevel(timeout:)'
21 |     /// - Returns: A ``DeviceInformation`` with a value for each present characteristic and
22 |     ///   `nil` for each absent one.
warning: 'BLESwiftError' doesn't exist at '/BLESwiftProfiles/BLESwift/Peripheral/readDeviceInformation(timeout:)'
  --> ../Peripheral+Profiles.swift:23:21-23:34
21 |     /// - Returns: A ``DeviceInformation`` with a value for each present characteristic and
22 |     ///   `nil` for each absent one.
23 +     /// - Throws: ``BLESwiftError/missingService(_:)`` if the Device Information service is
24 |     ///   absent, ``BLESwiftError/notConnected``, ``BLESwiftError/timedOut``, or whatever a
25 |     ///   read or its UTF-8 decoding throws.
warning: 'BLESwiftError' doesn't exist at '/BLESwiftProfiles/BLESwift/Peripheral/readDeviceInformation(timeout:)'
  --> ../Peripheral+Profiles.swift:24:21-24:34
22 |     ///   `nil` for each absent one.
23 |     /// - Throws: ``BLESwiftError/missingService(_:)`` if the Device Information service is
24 +     ///   absent, ``BLESwiftError/notConnected``, ``BLESwiftError/timedOut``, or whatever a
25 |     ///   read or its UTF-8 decoding throws.
26 |     public func readDeviceInformation(timeout: Duration? = nil) async throws -> DeviceInformation {
warning: 'BLESwiftError' doesn't exist at '/BLESwiftProfiles/BLESwift/Peripheral/readDeviceInformation(timeout:)'
  --> ../Peripheral+Profiles.swift:24:53-24:66
22 |     ///   `nil` for each absent one.
23 |     /// - Throws: ``BLESwiftError/missingService(_:)`` if the Device Information service is
24 +     ///   absent, ``BLESwiftError/notConnected``, ``BLESwiftError/timedOut``, or whatever a
25 |     ///   read or its UTF-8 decoding throws.
26 |     public func readDeviceInformation(timeout: Duration? = nil) async throws -> DeviceInformation {
warning: 'read(from:timeout:)' doesn't exist at '/BLESwiftProfiles/BLESwift/Peripheral'
  --> ../Peripheral+Profiles.swift:54:65-54:84
52 |     /// Reads Battery Level (`0x2A19`) and returns the percentage (0–100).
53 |     ///
54 +     /// - Parameter timeout: Forwarded to ``BLESwift/Peripheral/read(from:timeout:)``. `nil`
   |                                                                 ├─suggestion: Replace 'read(from:timeout:)' with 'readDeviceInformation(timeout:)'
   |                                                                 ╰─suggestion: Replace 'read(from:timeout:)' with 'readBatteryLevel(timeout:)'
55 |     ///   (the default) waits indefinitely.
56 |     /// - Returns: The battery charge, as a percentage.
warning: 'read(from:timeout:)' doesn't exist at '/BLESwiftProfiles/BLESwift/Peripheral'
  --> ../Peripheral+Profiles.swift:57:44-57:63
55 |     ///   (the default) waits indefinitely.
56 |     /// - Returns: The battery charge, as a percentage.
57 +     /// - Throws: As ``BLESwift/Peripheral/read(from:timeout:)`` does, plus
   |                                            ├─suggestion: Replace 'read(from:timeout:)' with 'readDeviceInformation(timeout:)'
   |                                            ╰─suggestion: Replace 'read(from:timeout:)' with 'readBatteryLevel(timeout:)'
58 |     ///   ``BLESwiftError/invalidArgument(_:)`` if the peripheral reports a value above 100.
59 |     public func readBatteryLevel(timeout: Duration? = nil) async throws -> UInt8 {
warning: 'BLESwiftError' doesn't exist at '/BLESwiftProfiles/BLESwift/Peripheral/readBatteryLevel(timeout:)'
  --> ../Peripheral+Profiles.swift:58:13-58:26
56 |     /// - Returns: The battery charge, as a percentage.
57 |     /// - Throws: As ``BLESwift/Peripheral/read(from:timeout:)`` does, plus
58 +     ///   ``BLESwiftError/invalidArgument(_:)`` if the peripheral reports a value above 100.
59 |     public func readBatteryLevel(timeout: Duration? = nil) async throws -> UInt8 {
60 |         let level: BatteryLevel = try await read(from: BatteryLevel.characteristic, timeout: timeout)
Finished building documentation for 'BLESwiftProfiles' (0.16s)
Generated documentation archive at:
  /Users/admin/builder/spi-builder-workspace/.docs/kylebrowning/bleswift/main
Building for debugging...
[0/3] Write swift-version-69A768CDF2A0BEE1.txt
Build of product 'snippet-extract' complete! (0.27s)
Building for debugging...
[0/1] Write swift-version-69A768CDF2A0BEE1.txt
Build of target: 'BLESwiftProfiles' complete! (0.33s)
Successfully merged into /Users/admin/builder/spi-builder-workspace/.docs-staging/kylebrowning/bleswift/main/index/index.json
Successfully merged into /Users/admin/builder/spi-builder-workspace/.docs-staging/kylebrowning/bleswift/main/linkable-paths.json
Target:                   BLESwiftTestSupport
Extracting symbol information for 'BLESwiftTestSupport'...
Finished extracting symbol information for 'BLESwiftTestSupport'. (0.44s)
Building documentation for 'BLESwiftTestSupport'...
warning: 'RequestToken' doesn't exist at '/BLESwiftTestSupport/FakeGATTBridge'
  --> ../FakeGATTBridge.swift:24:34-24:46
22 | /// of the fake that fired it and forwards to the other side only via that side's
23 | /// off-queue-safe `simulate…` methods, preserving each fake's queue-confinement. The
24 + /// request-correlation table (``RequestToken`` → pending central operation) is the only
25 | /// state shared across queues, so it's `Mutex`-protected.
26 | ///
warning: 'Central' doesn't exist at '/BLESwiftTestSupport/FakeGATTBridge/peripheral'
  --> ../FakeGATTBridge.swift:37:60-37:67
35 |     public let central: FakeCentral
36 |
37 +     /// The central-side fake peripheral (the remote the ``Central`` talks to). Its read/write/
38 |     /// subscribe operations are routed to ``manager`` by this bridge.
39 |     public let peripheral: FakePeripheral
warning: 'PeripheralHost' doesn't exist at '/BLESwiftTestSupport/FakeGATTBridge/manager'
  --> ../FakeGATTBridge.swift:41:61-41:75
39 |     public let peripheral: FakePeripheral
40 |
41 +     /// The peripheral-side fake manager (the backend the ``PeripheralHost`` drives). Its hosted
42 |     /// database, responses, and notifications are surfaced to ``peripheral`` by this bridge.
43 |     public let manager: FakePeripheralManager
warning: 'Subscriber' doesn't exist at '/BLESwiftTestSupport/FakeGATTBridge/subscriber'
  --> ../FakeGATTBridge.swift:45:65-45:75
43 |     public let manager: FakePeripheralManager
44 |
45 +     /// The identity the central presents to the host — the ``Subscriber`` that read/write
46 |     /// requests are attributed to and that subscribes to notifications. A test can assert it
47 |     /// appears in `PeripheralHost/subscribers(for:)`.
warning: 'Subscriber' doesn't exist at '/BLESwiftTestSupport/FakeGATTBridge/make(central:peripheral:manager:subscriber:)'
  --> ../FakeGATTBridge.swift:73:15-73:25
71 |     ///     surfaced to `peripheral`.
72 |     ///   - subscriber: The identity the central presents to the host. Defaults to a fresh
73 +     ///     ``Subscriber`` with `maximumUpdateValueLength` 512.
74 |     public static func make(
75 |         central: FakeCentral,
warning: 'readValue(for:)' is ambiguous at '/BLESwiftTestSupport/FakePeripheral'
   --> ../FakePeripheral.swift:175:72-175:87
173 |     }
174 |
175 +     /// Bridge hook invoked synchronously, on ``queue``, from inside ``readValue(for:)`` —
    |                                                                                       ├─suggestion: Insert '-(CharacteristicIdentifier)' for 'func readValue(for characteristic: CharacteristicIdentifier)'
    |                                                                                       ╰─suggestion: Insert '-(DescriptorIdentifier)' for 'func readValue(for descriptor: DescriptorIdentifier)'
176 |     /// used by ``FakeGATTBridge`` to route a central-side read to a remote
177 |     /// ``FakePeripheralManager`` host. When non-`nil`, ``readValue(for:)`` fires this
warning: 'readValue(for:)' is ambiguous at '/BLESwiftTestSupport/FakePeripheral'
   --> ../FakePeripheral.swift:177:59-177:74
175 |     /// Bridge hook invoked synchronously, on ``queue``, from inside ``readValue(for:)`` —
176 |     /// used by ``FakeGATTBridge`` to route a central-side read to a remote
177 +     /// ``FakePeripheralManager`` host. When non-`nil`, ``readValue(for:)`` fires this
    |                                                                          ├─suggestion: Insert '-(CharacteristicIdentifier)' for 'func readValue(for characteristic: CharacteristicIdentifier)'
    |                                                                          ╰─suggestion: Insert '-(DescriptorIdentifier)' for 'func readValue(for descriptor: DescriptorIdentifier)'
178 |     /// closure and returns without delivering its own `didUpdateValue` completion
179 |     /// (bypassing ``scriptedReadValues``/``holdReadCompletions``); the bridge delivers the
warning: 'readValue(for:)' is ambiguous at '/BLESwiftTestSupport/FakePeripheral'
   --> ../FakePeripheral.swift:227:21-227:36
225 |     }
226 |
227 +     /// The value ``readValue(for:)`` reports back via `didUpdateValue`, keyed by
    |                                    ├─suggestion: Insert '-(CharacteristicIdentifier)' for 'func readValue(for characteristic: CharacteristicIdentifier)'
    |                                    ╰─suggestion: Insert '-(DescriptorIdentifier)' for 'func readValue(for descriptor: DescriptorIdentifier)'
228 |     /// characteristic. `nil` (no entry) reports back `nil` data. Configure via
229 |     /// ``onQueue(_:)``.
warning: 'CharacteristicProperties' doesn't exist at '/BLESwiftTestSupport/FakePeripheral/scriptedProperties'
   --> ../FakePeripheral.swift:245:15-245:39
243 |     public static let defaultProperties: CharacteristicProperties = [.read, .write, .writeWithoutResponse, .notify]
244 |
245 +     /// The ``CharacteristicProperties`` ``properties(of:)`` reports back, keyed by
246 |     /// characteristic. A characteristic with no entry reports ``defaultProperties``.
247 |     /// Configure via ``onQueue(_:)``.
warning: 'readValue(for:)' is ambiguous at '/BLESwiftTestSupport/FakePeripheral'
   --> ../FakePeripheral.swift:287:31-287:46
285 |     }
286 |
287 +     /// The number of times ``readValue(for:)`` has been called.
    |                                              ├─suggestion: Insert '-(CharacteristicIdentifier)' for 'func readValue(for characteristic: CharacteristicIdentifier)'
    |                                              ╰─suggestion: Insert '-(DescriptorIdentifier)' for 'func readValue(for descriptor: DescriptorIdentifier)'
288 |     public var readCallCount: Int {
289 |         dispatchPrecondition(condition: .onQueue(queue))
warning: 'readValue(for:)' is ambiguous at '/BLESwiftTestSupport/FakePeripheral'
   --> ../FakePeripheral.swift:366:21-366:36
364 |     }
365 |
366 +     /// The value ``readValue(for:)`` reports back via `didUpdateValueForDescriptor`, keyed
    |                                    ├─suggestion: Insert '-(CharacteristicIdentifier)' for 'func readValue(for characteristic: CharacteristicIdentifier)'
    |                                    ╰─suggestion: Insert '-(DescriptorIdentifier)' for 'func readValue(for descriptor: DescriptorIdentifier)'
367 |     /// by descriptor. In permissive mode (``availableDescriptors`` is `nil`), scripting a
368 |     /// value here also makes that descriptor "exist" for ``discoverDescriptors(for:)``. A
warning: 'readValue(for:)' is ambiguous at '/BLESwiftTestSupport/FakePeripheral'
   --> ../FakePeripheral.swift:418:31-418:46
416 |     }
417 |
418 +     /// The number of times ``readValue(for:)`` (the descriptor overload) has been called.
    |                                              ├─suggestion: Insert '-(CharacteristicIdentifier)' for 'func readValue(for characteristic: CharacteristicIdentifier)'
    |                                              ╰─suggestion: Insert '-(DescriptorIdentifier)' for 'func readValue(for descriptor: DescriptorIdentifier)'
419 |     public var descriptorReadCallCount: Int {
420 |         dispatchPrecondition(condition: .onQueue(queue))
warning: 'readValue(for:)' is ambiguous at '/BLESwiftTestSupport/FakePeripheral'
   --> ../FakePeripheral.swift:424:19-424:34
422 |     }
423 |
424 +     /// Whether ``readValue(for:)`` (the descriptor overload) withholds its
    |                                  ├─suggestion: Insert '-(CharacteristicIdentifier)' for 'func readValue(for characteristic: CharacteristicIdentifier)'
    |                                  ╰─suggestion: Insert '-(DescriptorIdentifier)' for 'func readValue(for descriptor: DescriptorIdentifier)'
425 |     /// `didUpdateValueForDescriptor` completion instead of delivering it immediately —
426 |     /// the descriptor counterpart to ``holdReadCompletions``. `false` by default. Configure
warning: 'readValue(for:)' is ambiguous at '/BLESwiftTestSupport/FakePeripheral'
   --> ../FakePeripheral.swift:715:19-715:34
713 |     }
714 |
715 +     /// Whether ``readValue(for:)`` withholds its `didUpdateValue` completion instead of
    |                                  ├─suggestion: Insert '-(CharacteristicIdentifier)' for 'func readValue(for characteristic: CharacteristicIdentifier)'
    |                                  ╰─suggestion: Insert '-(DescriptorIdentifier)' for 'func readValue(for descriptor: DescriptorIdentifier)'
716 |     /// delivering it immediately. `false` by default (every read completes right away, as
717 |     /// every other operation on this fake does). Configure via ``onQueue(_:)``.
warning: 'CharacteristicProperties' doesn't exist at '/BLESwiftTestSupport/FakePeripheral/properties(of:)'
   --> ../FakePeripheral.swift:846:24-846:48
844 |     }
845 |
846 +     /// The scripted ``CharacteristicProperties`` for `characteristic` (see
847 |     /// ``scriptedProperties``), or ``defaultProperties`` if none was scripted. Unlike real
848 |     /// CoreBluetooth, this does not gate on discovery.
warning: 'RequestToken' doesn't exist at '/BLESwiftTestSupport/FakePeripheralManager/simulateReadRequest(central:characteristic:offset:)'
   --> ../FakePeripheralManager.swift:237:61-237:73
235 |
236 |     /// Simulates a remote central issuing a read request and, asynchronously, delivers
237 +     /// `.didReceiveRead(_:)`. Returns the freshly minted ``RequestToken`` (synchronously) so a
238 |     /// test can correlate the eventual ``respondCalls`` entry.
239 |     @discardableResult
warning: 'RequestToken' doesn't exist at '/BLESwiftTestSupport/FakePeripheralManager/simulateWriteRequest(central:characteristic:value:offset:)'
   --> ../FakePeripheralManager.swift:254:54-254:66
252 |
253 |     /// Simulates a remote central issuing a single write and, asynchronously, delivers
254 +     /// `.didReceiveWrite(_:)`. Returns the minted ``RequestToken``.
255 |     @discardableResult
256 |     public func simulateWriteRequest(
warning: 'RequestToken' doesn't exist at '/BLESwiftTestSupport/FakePeripheralManager/simulateWriteRequests(_:)'
   --> ../FakePeripheralManager.swift:266:54-266:66
264 |
265 |     /// Simulates a remote central issuing a batch of writes and, asynchronously, delivers
266 +     /// `.didReceiveWrite(_:)`. Returns the minted ``RequestToken``.
267 |     @discardableResult
268 |     public func simulateWriteRequests(_ entries: [WriteRequest.Entry]) -> RequestToken {
warning: 'PeripheralHost' doesn't exist at '/BLESwiftTestSupport/FakePeripheralManager/simulateReadyToUpdate()'
   --> ../FakePeripheralManager.swift:296:54-296:68
294 |
295 |     /// Simulates the transmit queue draining and, asynchronously, delivers
296 +     /// `.readyToUpdateSubscribers` — unblocks a ``PeripheralHost/updateValue(_:for:onSubscribed:)``
297 |     /// that is awaiting capacity after a scripted `false` return.
298 |     public func simulateReadyToUpdate() {
Finished building documentation for 'BLESwiftTestSupport' (0.17s)
Generated documentation archive at:
  /Users/admin/builder/spi-builder-workspace/.docs/kylebrowning/bleswift/main
Building for debugging...
[0/3] Write swift-version-69A768CDF2A0BEE1.txt
Build of product 'snippet-extract' complete! (0.28s)
Building for debugging...
[0/1] Write swift-version-69A768CDF2A0BEE1.txt
Build of target: 'BLESwiftTestSupport' complete! (0.34s)
Successfully merged into /Users/admin/builder/spi-builder-workspace/.docs-staging/kylebrowning/bleswift/main/index/index.json
Successfully merged into /Users/admin/builder/spi-builder-workspace/.docs-staging/kylebrowning/bleswift/main/linkable-paths.json
    2232
16	/Users/admin/builder/spi-builder-workspace/.docs/kylebrowning/bleswift/main
✅  Doc result (uploading) reported
========================================
SyncDocs
========================================
Doc archive source directory: $PWD/.docs/kylebrowning/bleswift/main
File count: 2232
Doc size:   16.0MB
Preparing doc bundle ...
Using presigned URL upload - AWS credentials not required
Uploading -kylebrowning-bleswift-main-0ae3cc9d.zip to presigned URL
Starting upload of 3380309 bytes...
Upload completed successfully
Done.