diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ebefb9cb..7e09b965 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -268,3 +268,5 @@ jobs: grep -E "error:|Testing failed:|XCTAssert.*failed|exceeded execution time allowance" "$LOG" | head -40 exit 1 fi + set -e + scripts/check-swift-warnings.sh "$LOG" diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 564e7b64..0584fbcd 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -153,6 +153,8 @@ jobs: grep -E "error:|Testing failed:|XCTAssert.*failed|exceeded execution time allowance" "$LOG" | head -40 exit 1 fi + set -e + scripts/check-swift-warnings.sh "$LOG" # A keychain of its own, unlocked only for this job, so nothing lands in the runner's login keychain. - name: Import the signing certificates diff --git a/Flowlight.xcodeproj/project.pbxproj b/Flowlight.xcodeproj/project.pbxproj index efbdce26..a3943ffe 100644 --- a/Flowlight.xcodeproj/project.pbxproj +++ b/Flowlight.xcodeproj/project.pbxproj @@ -2184,7 +2184,7 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_STYLE = Automatic; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 56; + CURRENT_PROJECT_VERSION = 57; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_TEAM = ""; ENABLE_HARDENED_RUNTIME = YES; @@ -2199,7 +2199,7 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; MACOSX_DEPLOYMENT_TARGET = 15.0; - MARKETING_VERSION = 0.15.9; + MARKETING_VERSION = 0.15.10; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -2245,7 +2245,7 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_STYLE = Automatic; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 56; + CURRENT_PROJECT_VERSION = 57; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_TEAM = 38RJUJHKZS; ENABLE_HARDENED_RUNTIME = YES; @@ -2260,7 +2260,7 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; MACOSX_DEPLOYMENT_TARGET = 15.0; - MARKETING_VERSION = 0.15.9; + MARKETING_VERSION = 0.15.10; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -2325,7 +2325,7 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_STYLE = Automatic; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 56; + CURRENT_PROJECT_VERSION = 57; DEBUG_INFORMATION_FORMAT = dwarf; DEVELOPMENT_TEAM = ""; ENABLE_HARDENED_RUNTIME = YES; @@ -2346,7 +2346,7 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; MACOSX_DEPLOYMENT_TARGET = 15.0; - MARKETING_VERSION = 0.15.9; + MARKETING_VERSION = 0.15.10; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; @@ -2371,6 +2371,7 @@ ); PRODUCT_BUNDLE_IDENTIFIER = com.flowlight.app.tests; SDKROOT = macosx; + SWIFT_TREAT_WARNINGS_AS_ERRORS = YES; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Flowlight.app/Contents/MacOS/Flowlight"; }; name = AppStore; @@ -2428,6 +2429,7 @@ ); PRODUCT_BUNDLE_IDENTIFIER = com.flowlight.app.tests; SDKROOT = macosx; + SWIFT_TREAT_WARNINGS_AS_ERRORS = YES; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Flowlight.app/Contents/MacOS/Flowlight"; }; name = Release; @@ -2505,6 +2507,7 @@ ); PRODUCT_BUNDLE_IDENTIFIER = com.flowlight.app.tests; SDKROOT = macosx; + SWIFT_TREAT_WARNINGS_AS_ERRORS = YES; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Flowlight.app/Contents/MacOS/Flowlight"; }; name = Debug; diff --git a/FlowlightTests/InspectScopeTests.swift b/FlowlightTests/InspectScopeTests.swift index 8a99dca4..fd870baf 100644 --- a/FlowlightTests/InspectScopeTests.swift +++ b/FlowlightTests/InspectScopeTests.swift @@ -25,8 +25,8 @@ final class InspectScopeTests: XCTestCase { /// The exact shape of the bug: a page that merely mentions the app's name. func testScopingToAnAppExcludesAPageThatOnlyMentionsIt() throws { let db = try database() - try db.insertExchange(exchange(app: ("claude", "Claude Code"), host: "api.anthropic.com")) - try db.insertExchange(exchange(app: ("com.google.Chrome", "Google Chrome"), host: "github.com", + _ = try db.insertExchange(exchange(app: ("claude", "Claude Code"), host: "api.anthropic.com")) + _ = try db.insertExchange(exchange(app: ("com.google.Chrome", "Google Chrome"), host: "github.com", body: "

Generated with Claude Code

")) let scoped = try db.exchanges(since: Date().addingTimeInterval(-60), app: "claude") @@ -39,9 +39,9 @@ final class InspectScopeTests: XCTestCase { func testScopingToAHostKeepsItsSubdomains() throws { let db = try database() - try db.insertExchange(exchange(app: ("a", "A"), host: "api.github.com")) - try db.insertExchange(exchange(app: ("b", "B"), host: "github.com")) - try db.insertExchange(exchange(app: ("c", "C"), host: "example.com")) + _ = try db.insertExchange(exchange(app: ("a", "A"), host: "api.github.com")) + _ = try db.insertExchange(exchange(app: ("b", "B"), host: "github.com")) + _ = try db.insertExchange(exchange(app: ("c", "C"), host: "example.com")) let scoped = try db.exchanges(since: Date().addingTimeInterval(-60), host: "github.com") XCTAssertEqual(Set(scoped.map(\.host)), ["github.com", "api.github.com"]) @@ -50,8 +50,8 @@ final class InspectScopeTests: XCTestCase { /// A scope and a search have to compose, or narrowing a scoped list would silently widen it. func testAScopeAndASearchBothApply() throws { let db = try database() - try db.insertExchange(exchange(app: ("claude", "Claude Code"), host: "api.anthropic.com")) - try db.insertExchange(exchange(app: ("claude", "Claude Code"), host: "registry.npmjs.org")) + _ = try db.insertExchange(exchange(app: ("claude", "Claude Code"), host: "api.anthropic.com")) + _ = try db.insertExchange(exchange(app: ("claude", "Claude Code"), host: "registry.npmjs.org")) let both = try db.exchanges(since: Date().addingTimeInterval(-60), search: "npmjs", app: "claude") XCTAssertEqual(both.count, 1) @@ -60,8 +60,8 @@ final class InspectScopeTests: XCTestCase { func testNoScopeStillReturnsEverything() throws { let db = try database() - try db.insertExchange(exchange(app: ("a", "A"), host: "one.example")) - try db.insertExchange(exchange(app: ("b", "B"), host: "two.example")) + _ = try db.insertExchange(exchange(app: ("a", "A"), host: "one.example")) + _ = try db.insertExchange(exchange(app: ("b", "B"), host: "two.example")) XCTAssertEqual(try db.exchanges(since: Date().addingTimeInterval(-60)).count, 2) } } diff --git a/FlowlightTests/InspectionTests.swift b/FlowlightTests/InspectionTests.swift index 2fdcd0a3..bedb382d 100644 --- a/FlowlightTests/InspectionTests.swift +++ b/FlowlightTests/InspectionTests.swift @@ -319,7 +319,7 @@ final class InspectionStorageTests: XCTestCase { requestBody: Data("{}".utf8), requestSize: 2, requestTruncated: false, responseHeaders: [], responseBody: Data([0, 1, 2]), responseSize: 3, responseTruncated: false, contentType: "text/event-stream", pid: 42, bundleID: "claude", appName: "claude", agent: "claude", agentName: "Claude Code", mcpServer: nil, toolCalls: [call], note: nil) - try db.insertExchange(exchange) + _ = try db.insertExchange(exchange) let rows = try db.exchanges(since: Date().addingTimeInterval(-60)) XCTAssertEqual(rows.count, 1) XCTAssertEqual(rows[0].toolCalls, [call]) diff --git a/FlowlightTests/MockResponseTests.swift b/FlowlightTests/MockResponseTests.swift index 59152a32..0246ef90 100644 --- a/FlowlightTests/MockResponseTests.swift +++ b/FlowlightTests/MockResponseTests.swift @@ -296,11 +296,11 @@ final class MockRuleStorageTests: XCTestCase { responseHeaders: [], responseBody: Data(), responseSize: 0, responseTruncated: false, contentType: "", pid: 1, bundleID: "b", appName: "a", agent: nil, agentName: nil, mcpServer: nil, toolCalls: []) exchange.mockRule = "down" - try db.insertExchange(exchange) - try db.insertExchange(exchange) // a second row, left real + _ = try db.insertExchange(exchange) + _ = try db.insertExchange(exchange) // a second row, left real var real = exchange real.mockRule = nil - try db.insertExchange(real) + _ = try db.insertExchange(real) let rows = try db.exchanges(since: .distantPast) XCTAssertEqual(rows.compactMap(\.mockRule), ["down", "down"]) XCTAssertEqual(rows.count, 3) diff --git a/FlowlightTests/ResponseTransformTests.swift b/FlowlightTests/ResponseTransformTests.swift index 26d0bac7..8510fafc 100644 --- a/FlowlightTests/ResponseTransformTests.swift +++ b/FlowlightTests/ResponseTransformTests.swift @@ -297,7 +297,7 @@ final class ResponseTransformProvenanceTests: XCTestCase { let url = FileManager.default.temporaryDirectory.appendingPathComponent("response-transform-\(UUID()).sqlite") defer { try? FileManager.default.removeItem(at: url) } let db = try TrafficDatabase(url: url) - try db.insertExchange(try XCTUnwrap(exchange)) + _ = try db.insertExchange(try XCTUnwrap(exchange)) let stored = try XCTUnwrap(db.exchanges(since: .distantPast).first) XCTAssertEqual(stored.responseTransform, "Rewrite status") XCTAssertNil(stored.mockRule) diff --git a/FlowlightTests/RuleTests.swift b/FlowlightTests/RuleTests.swift index d24a5385..e44b4bf3 100644 --- a/FlowlightTests/RuleTests.swift +++ b/FlowlightTests/RuleTests.swift @@ -553,15 +553,13 @@ final class RuleTests: XCTestCase { generation: store.ruleSet.generation ) let completed = expectation(description: "retirement completed") - var saved: Bool? store.retireBoundedClaim(claim) { result in - saved = result + XCTAssertFalse(result) completed.fulfill() } await fulfillment(of: [completed], timeout: 2) - XCTAssertEqual(saved, false) XCTAssertEqual(store.rules.first(where: { $0.id == allow.id })?.hits, 1) XCTAssertNil(store.live.flowDecision(facts()).externalClaim) } diff --git a/FlowlightTests/UpdateTests.swift b/FlowlightTests/UpdateTests.swift index 417698df..39263cfd 100644 --- a/FlowlightTests/UpdateTests.swift +++ b/FlowlightTests/UpdateTests.swift @@ -92,7 +92,7 @@ final class UpdateTests: XCTestCase { @MainActor func testCleanRelaunchPromotionOpensWindowForNewerRelease() async { - let release = await fixtureChecker(version: nextMajorVersion()) + let release = fixtureChecker(version: nextMajorVersion()) await release.checker.check(userInitiated: false, promoteIfAvailable: true) @@ -105,7 +105,7 @@ final class UpdateTests: XCTestCase { @MainActor func testCleanRelaunchPromotionSkipsSkippedRelease() async { - let release = await fixtureChecker(version: nextMajorVersion()) + let release = fixtureChecker(version: nextMajorVersion()) UserDefaults.standard.set(release.version, forKey: UpdateChecker.Keys.skipped) await release.checker.check(userInitiated: false, promoteIfAvailable: true) @@ -119,7 +119,7 @@ final class UpdateTests: XCTestCase { @MainActor func testCleanRelaunchPromotionDoesNotOpenForCurrentRelease() async { - let checker = await fixtureChecker(version: currentVersion()) + let checker = fixtureChecker(version: currentVersion()) await checker.checker.check(userInitiated: false, promoteIfAvailable: true) diff --git a/docs/404.html b/docs/404.html index bb39da11..0dd00678 100644 --- a/docs/404.html +++ b/docs/404.html @@ -86,7 +86,7 @@

That page isn't here

Try the home page,

diff --git a/docs/about/index.html b/docs/about/index.html index 857dee54..b27b030c 100644 --- a/docs/about/index.html +++ b/docs/about/index.html @@ -48,7 +48,7 @@ - + @@ -153,7 +153,7 @@

Thanks

diff --git a/docs/de/about/index.html b/docs/de/about/index.html index d2a9cca4..41fc4f22 100644 --- a/docs/de/about/index.html +++ b/docs/de/about/index.html @@ -48,7 +48,7 @@ - + @@ -152,7 +152,7 @@

Dank

diff --git a/docs/de/docs/index.html b/docs/de/docs/index.html index a0e329c3..89148c1f 100644 --- a/docs/de/docs/index.html +++ b/docs/de/docs/index.html @@ -48,7 +48,7 @@ - + @@ -76,7 +76,7 @@

Dokumentation

Flowlight benutzen

-

Alles vom ersten Start bis zum Feinschliff an den Agentenregeln. Flowlight 0.15.9, macOS 15 oder neuer.

+

Alles vom ersten Start bis zum Feinschliff an den Agentenregeln. Flowlight 0.15.10, macOS 15 oder neuer.

diff --git a/docs/de/index.html b/docs/de/index.html index 02ea1621..06708fb3 100644 --- a/docs/de/index.html +++ b/docs/de/index.html @@ -48,7 +48,7 @@ - + @@ -90,7 +90,7 @@

Sieh, was deine Apps im Netz tun.
brew install --cask xinbetween/tap/flowlight

-

v0.15.9macOS 15+UniversalGPL-3.0Keine Telemetrie

+

v0.15.10macOS 15+UniversalGPL-3.0Keine Telemetrie

@@ -572,7 +572,7 @@

Wisse, was deinen Mac verlässt.

diff --git a/docs/de/privacy/index.html b/docs/de/privacy/index.html index 9ac4332d..b2771699 100644 --- a/docs/de/privacy/index.html +++ b/docs/de/privacy/index.html @@ -48,7 +48,7 @@ - + @@ -189,7 +189,7 @@

Kontakt

diff --git a/docs/de/threat-model/index.html b/docs/de/threat-model/index.html index dac47be2..b662f66b 100644 --- a/docs/de/threat-model/index.html +++ b/docs/de/threat-model/index.html @@ -48,7 +48,7 @@ - + @@ -225,7 +225,7 @@

Eine Schwachstelle melden

diff --git a/docs/docs/index.html b/docs/docs/index.html index 35ac715a..e1c6d9a5 100644 --- a/docs/docs/index.html +++ b/docs/docs/index.html @@ -48,7 +48,7 @@ - + @@ -76,7 +76,7 @@

Documentation

Using Flowlight

-

Everything from the first launch to tuning the agent rules. Flowlight 0.15.9, macOS 15 or later.

+

Everything from the first launch to tuning the agent rules. Flowlight 0.15.10, macOS 15 or later.

diff --git a/docs/es/about/index.html b/docs/es/about/index.html index d361e4c0..488e9274 100644 --- a/docs/es/about/index.html +++ b/docs/es/about/index.html @@ -48,7 +48,7 @@ - + @@ -152,7 +152,7 @@

Agradecimientos

diff --git a/docs/es/docs/index.html b/docs/es/docs/index.html index 2bcf1a14..851e7d8c 100644 --- a/docs/es/docs/index.html +++ b/docs/es/docs/index.html @@ -48,7 +48,7 @@ - + @@ -76,7 +76,7 @@

Documentación

Usar Flowlight

-

Todo, desde el primer arranque hasta el ajuste de las reglas de agentes. Flowlight 0.15.9, macOS 15 o posterior.

+

Todo, desde el primer arranque hasta el ajuste de las reglas de agentes. Flowlight 0.15.10, macOS 15 o posterior.

diff --git a/docs/es/index.html b/docs/es/index.html index 9a5c0191..732e1826 100644 --- a/docs/es/index.html +++ b/docs/es/index.html @@ -48,7 +48,7 @@ - + @@ -90,7 +90,7 @@

Observa la actividad de red de tus apps.

brew install --cask xinbetween/tap/flowlight

-

v0.15.9macOS 15+UniversalGPL-3.0Sin telemetría

+

v0.15.10macOS 15+UniversalGPL-3.0Sin telemetría

@@ -572,7 +572,7 @@

Ten claro qué sale de tu Mac.

diff --git a/docs/es/privacy/index.html b/docs/es/privacy/index.html index 8e591cf5..466c5952 100644 --- a/docs/es/privacy/index.html +++ b/docs/es/privacy/index.html @@ -48,7 +48,7 @@ - + @@ -189,7 +189,7 @@

Contacto

diff --git a/docs/es/threat-model/index.html b/docs/es/threat-model/index.html index 0d907231..6475b6b1 100644 --- a/docs/es/threat-model/index.html +++ b/docs/es/threat-model/index.html @@ -48,7 +48,7 @@ - + @@ -221,7 +221,7 @@

Informar de una vulnerabilidad

diff --git a/docs/fr/about/index.html b/docs/fr/about/index.html index b800ae8b..c64470a6 100644 --- a/docs/fr/about/index.html +++ b/docs/fr/about/index.html @@ -48,7 +48,7 @@ - + @@ -152,7 +152,7 @@

Remerciements

diff --git a/docs/fr/docs/index.html b/docs/fr/docs/index.html index 20fa511d..1718e633 100644 --- a/docs/fr/docs/index.html +++ b/docs/fr/docs/index.html @@ -48,7 +48,7 @@ - + @@ -76,7 +76,7 @@

Documentation

Utiliser Flowlight

-

Tout, du premier lancement au réglage des règles des agents. Flowlight 0.15.9, macOS 15 ou version ultérieure.

+

Tout, du premier lancement au réglage des règles des agents. Flowlight 0.15.10, macOS 15 ou version ultérieure.

diff --git a/docs/fr/index.html b/docs/fr/index.html index 3ba9265a..c3176953 100644 --- a/docs/fr/index.html +++ b/docs/fr/index.html @@ -48,7 +48,7 @@ - + @@ -90,7 +90,7 @@

Voyez l’activité réseau de vos apps.

brew install --cask xinbetween/tap/flowlight

-

v0.15.9macOS 15+UniverselGPL-3.0Sans télémétrie

+

v0.15.10macOS 15+UniverselGPL-3.0Sans télémétrie

@@ -572,7 +572,7 @@

Sachez ce qui quitte votre Mac.

diff --git a/docs/fr/privacy/index.html b/docs/fr/privacy/index.html index 5b33f81b..035f91bc 100644 --- a/docs/fr/privacy/index.html +++ b/docs/fr/privacy/index.html @@ -48,7 +48,7 @@ - + @@ -189,7 +189,7 @@

Contact

diff --git a/docs/fr/threat-model/index.html b/docs/fr/threat-model/index.html index a92ca8f7..32466174 100644 --- a/docs/fr/threat-model/index.html +++ b/docs/fr/threat-model/index.html @@ -48,7 +48,7 @@ - + @@ -224,7 +224,7 @@

Signaler une vulnérabilité

diff --git a/docs/index.html b/docs/index.html index 9030c8e3..d9cffeab 100644 --- a/docs/index.html +++ b/docs/index.html @@ -48,7 +48,7 @@ - + @@ -90,7 +90,7 @@

See your apps' network activity.
brew install --cask xinbetween/tap/flowlight

-

v0.15.9macOS 15+UniversalGPL-3.0No telemetry

+

v0.15.10macOS 15+UniversalGPL-3.0No telemetry

@@ -594,7 +594,7 @@

Know what leaves your Mac.

diff --git a/docs/it/about/index.html b/docs/it/about/index.html index f6dd591a..b4409f79 100644 --- a/docs/it/about/index.html +++ b/docs/it/about/index.html @@ -48,7 +48,7 @@ - + @@ -152,7 +152,7 @@

Ringraziamenti

diff --git a/docs/it/docs/index.html b/docs/it/docs/index.html index d6485672..cf2a6b19 100644 --- a/docs/it/docs/index.html +++ b/docs/it/docs/index.html @@ -48,7 +48,7 @@ - + @@ -76,7 +76,7 @@

Documentazione

Usare Flowlight

-

Tutto, dal primo avvio alla messa a punto delle regole per gli agenti. Flowlight 0.15.9, macOS 15 o successivo.

+

Tutto, dal primo avvio alla messa a punto delle regole per gli agenti. Flowlight 0.15.10, macOS 15 o successivo.

diff --git a/docs/it/index.html b/docs/it/index.html index ae8403d3..ba53f718 100644 --- a/docs/it/index.html +++ b/docs/it/index.html @@ -48,7 +48,7 @@ - + @@ -90,7 +90,7 @@

Vedi la rete delle tue app.
Ca Metti una stella su GitHub

brew install --cask xinbetween/tap/flowlight

-

v0.15.9macOS 15+UniversaleGPL-3.0Nessuna telemetria

+

v0.15.10macOS 15+UniversaleGPL-3.0Nessuna telemetria

@@ -572,7 +572,7 @@

Sappi che cosa esce dal tuo Mac.

diff --git a/docs/it/privacy/index.html b/docs/it/privacy/index.html index e8270be3..bf4aa410 100644 --- a/docs/it/privacy/index.html +++ b/docs/it/privacy/index.html @@ -48,7 +48,7 @@ - + @@ -189,7 +189,7 @@

Contatti

diff --git a/docs/it/threat-model/index.html b/docs/it/threat-model/index.html index 8847cd85..46864583 100644 --- a/docs/it/threat-model/index.html +++ b/docs/it/threat-model/index.html @@ -48,7 +48,7 @@ - + @@ -223,7 +223,7 @@

Segnalare una vulnerabilità

diff --git a/docs/ja/about/index.html b/docs/ja/about/index.html index aaf4cdd2..c3620996 100644 --- a/docs/ja/about/index.html +++ b/docs/ja/about/index.html @@ -48,7 +48,7 @@ - + @@ -153,7 +153,7 @@

謝辞

diff --git a/docs/ja/docs/index.html b/docs/ja/docs/index.html index a8202299..049377b8 100644 --- a/docs/ja/docs/index.html +++ b/docs/ja/docs/index.html @@ -48,7 +48,7 @@ - + @@ -76,7 +76,7 @@

ドキュメント

Flowlight の使い方

-

初回起動からエージェントのルールの調整まで、すべてここに。Flowlight 0.15.9、macOS 15 以降。

+

初回起動からエージェントのルールの調整まで、すべてここに。Flowlight 0.15.10、macOS 15 以降。

diff --git a/docs/ja/index.html b/docs/ja/index.html index 19c0553f..c2447728 100644 --- a/docs/ja/index.html +++ b/docs/ja/index.html @@ -48,7 +48,7 @@ - + @@ -90,7 +90,7 @@

アプリの通信が見える。
brew install --cask xinbetween/tap/flowlight

-

v0.15.9macOS 15+ユニバーサルGPL-3.0テレメトリなし

+

v0.15.10macOS 15+ユニバーサルGPL-3.0テレメトリなし

@@ -571,7 +571,7 @@

Mac から何が出ていくのかを知る。

diff --git a/docs/ja/privacy/index.html b/docs/ja/privacy/index.html index c4ad2698..fabffc5f 100644 --- a/docs/ja/privacy/index.html +++ b/docs/ja/privacy/index.html @@ -48,7 +48,7 @@ - + @@ -187,7 +187,7 @@

連絡先

diff --git a/docs/ja/threat-model/index.html b/docs/ja/threat-model/index.html index 056d33a0..f1d41a7f 100644 --- a/docs/ja/threat-model/index.html +++ b/docs/ja/threat-model/index.html @@ -48,7 +48,7 @@ - + @@ -222,7 +222,7 @@

脆弱性を報告する

diff --git a/docs/ko/about/index.html b/docs/ko/about/index.html index 47df6bef..683ea45f 100644 --- a/docs/ko/about/index.html +++ b/docs/ko/about/index.html @@ -48,7 +48,7 @@ - + @@ -153,7 +153,7 @@

감사

diff --git a/docs/ko/docs/index.html b/docs/ko/docs/index.html index 9aea60b9..e751d54b 100644 --- a/docs/ko/docs/index.html +++ b/docs/ko/docs/index.html @@ -48,7 +48,7 @@ - + @@ -76,7 +76,7 @@

문서

Flowlight 사용하기

-

첫 실행부터 에이전트 규칙 조정까지 전부. Flowlight 0.15.9, macOS 15 이상.

+

첫 실행부터 에이전트 규칙 조정까지 전부. Flowlight 0.15.10, macOS 15 이상.

diff --git a/docs/ko/index.html b/docs/ko/index.html index 4235d1e1..60f2f941 100644 --- a/docs/ko/index.html +++ b/docs/ko/index.html @@ -48,7 +48,7 @@ - + @@ -90,7 +90,7 @@

앱이 무엇을 하는지 봅니다.

brew install --cask xinbetween/tap/flowlight

-

v0.15.9macOS 15+유니버설GPL-3.0텔레메트리 없음

+

v0.15.10macOS 15+유니버설GPL-3.0텔레메트리 없음

@@ -572,7 +572,7 @@

내 Mac에서 무엇이 나가는지 아세요.

diff --git a/docs/ko/privacy/index.html b/docs/ko/privacy/index.html index 257a5908..48a62f66 100644 --- a/docs/ko/privacy/index.html +++ b/docs/ko/privacy/index.html @@ -48,7 +48,7 @@ - + @@ -190,7 +190,7 @@

문의

diff --git a/docs/ko/threat-model/index.html b/docs/ko/threat-model/index.html index a5ab59b2..a1d2e0cb 100644 --- a/docs/ko/threat-model/index.html +++ b/docs/ko/threat-model/index.html @@ -48,7 +48,7 @@ - + @@ -221,7 +221,7 @@

취약점 신고하기

diff --git a/docs/llms-full.txt b/docs/llms-full.txt index bb3a5e3b..16efb147 100644 --- a/docs/llms-full.txt +++ b/docs/llms-full.txt @@ -62,7 +62,7 @@ Documentation Using Flowlight - Everything from the first launch to tuning the agent rules. Flowlight 0.15.9, macOS 15 or later. + Everything from the first launch to tuning the agent rules. Flowlight 0.15.10, macOS 15 or later. On this page @@ -894,7 +894,7 @@ Understand your AI agents. brew install --cask xinbetween/tap/flowlightCopy - v0.15.9macOS 15+UniversalGPL-3.0No telemetry + v0.15.10macOS 15+UniversalGPL-3.0No telemetry connectionslive @@ -1629,8 +1629,20 @@ Releases Downloads, checksums and full notes for each version are on GitHub Releases. + 0.15.10 +October 28, 2026Latest + + Make the full test target warning-free. Concurrency captures, redundant actor awaits, and intentionally ignored + database insert IDs now compile cleanly with current Xcode. + + Treat test warnings as release failures. The test bundle promotes compiler warnings to errors, while the log + gate separately rejects first-party diagnostics the compiler leaves nonfatal. + + Keep release checks explicit. Deterministic fixtures prove warnings from app and test sources both fail the gate + while Xcode metadata and dependency notices remain visible. + 0.15.9 -October 27, 2026Latest +October 27, 2026 Make Store builds warning-free. Ambiguous optionals, isolation boundaries, sendable callbacks, capture ownership, and stale compatibility code now compile cleanly with current Xcode. diff --git a/docs/llms.txt b/docs/llms.txt index 83ac8ce5..83a22d5e 100644 --- a/docs/llms.txt +++ b/docs/llms.txt @@ -1,6 +1,6 @@ # Flowlight -> Free, open-source (GPL-3.0) application-aware network monitor for macOS, with focused visibility into AI agents. It attributes observed TCP and UDP activity to the application that made it and records the destination, protocol and byte counts, keeping local history from second to year. Recognized AI agents are listed by name along with the tools and MCP servers they start, under per-agent allowlists. It can also refuse, once asked: a rule blocks an application, a destination or a URL for as long as you specify, and a guardrail withholds a tool from an agent before its model is offered it. Runs on macOS 15 or later; capture is by a sampler or a Network Extension. Current version: 0.15.9. +> Free, open-source (GPL-3.0) application-aware network monitor for macOS, with focused visibility into AI agents. It attributes observed TCP and UDP activity to the application that made it and records the destination, protocol and byte counts, keeping local history from second to year. Recognized AI agents are listed by name along with the tools and MCP servers they start, under per-agent allowlists. It can also refuse, once asked: a rule blocks an application, a destination or a URL for as long as you specify, and a guardrail withholds a tool from an agent before its model is offered it. Runs on macOS 15 or later; capture is by a sampler or a Network Extension. Current version: 0.15.10. - [Download Flowlight.dmg](https://github.com/xinbetween/flowlight/releases/latest/download/Flowlight.dmg) - [Source code](https://github.com/xinbetween/flowlight) diff --git a/docs/plugins/index.html b/docs/plugins/index.html index e7d82f84..b244754a 100644 --- a/docs/plugins/index.html +++ b/docs/plugins/index.html @@ -28,7 +28,7 @@ - + @@ -211,7 +211,7 @@

Review checklist

diff --git a/docs/privacy/index.html b/docs/privacy/index.html index 84ff2e03..e7fee853 100644 --- a/docs/privacy/index.html +++ b/docs/privacy/index.html @@ -48,7 +48,7 @@ - + @@ -196,7 +196,7 @@

Contact

diff --git a/docs/pt-PT/about/index.html b/docs/pt-PT/about/index.html index 4e5838e9..6a2fa2fe 100644 --- a/docs/pt-PT/about/index.html +++ b/docs/pt-PT/about/index.html @@ -48,7 +48,7 @@ - + @@ -152,7 +152,7 @@

Agradecimentos

diff --git a/docs/pt-PT/docs/index.html b/docs/pt-PT/docs/index.html index b1ba08f9..ee8560aa 100644 --- a/docs/pt-PT/docs/index.html +++ b/docs/pt-PT/docs/index.html @@ -48,7 +48,7 @@ - + @@ -76,7 +76,7 @@

Documentação

Usar o Flowlight

-

Tudo, da primeira abertura ao ajuste das regras dos agentes. Flowlight 0.15.9, macOS 15 ou posterior.

+

Tudo, da primeira abertura ao ajuste das regras dos agentes. Flowlight 0.15.10, macOS 15 ou posterior.

diff --git a/docs/pt-PT/index.html b/docs/pt-PT/index.html index 7636c467..50449b69 100644 --- a/docs/pt-PT/index.html +++ b/docs/pt-PT/index.html @@ -48,7 +48,7 @@ - + @@ -90,7 +90,7 @@

Veja a atividade de rede das suas apps.

brew install --cask xinbetween/tap/flowlight

-

v0.15.9macOS 15+UniversalGPL-3.0Sem telemetria

+

v0.15.10macOS 15+UniversalGPL-3.0Sem telemetria

@@ -572,7 +572,7 @@

Saiba o que sai do seu Mac.

diff --git a/docs/pt-PT/privacy/index.html b/docs/pt-PT/privacy/index.html index e4864065..0e5a402c 100644 --- a/docs/pt-PT/privacy/index.html +++ b/docs/pt-PT/privacy/index.html @@ -48,7 +48,7 @@ - + @@ -189,7 +189,7 @@

Contacto

diff --git a/docs/pt-PT/threat-model/index.html b/docs/pt-PT/threat-model/index.html index c518b92a..cc31dfff 100644 --- a/docs/pt-PT/threat-model/index.html +++ b/docs/pt-PT/threat-model/index.html @@ -48,7 +48,7 @@ - + @@ -222,7 +222,7 @@

Comunicar uma vulnerabilidade

diff --git a/docs/releases/index.html b/docs/releases/index.html index 789456dd..d79abfb0 100644 --- a/docs/releases/index.html +++ b/docs/releases/index.html @@ -28,7 +28,7 @@ - + @@ -61,7 +61,19 @@

What's new

-

0.15.9

Latest
+

0.15.10

Latest
+
    +
  • Make the full test target warning-free. Concurrency captures, redundant actor awaits, and intentionally ignored + database insert IDs now compile cleanly with current Xcode.
  • +
  • Treat test warnings as release failures. The test bundle promotes compiler warnings to errors, while the log + gate separately rejects first-party diagnostics the compiler leaves nonfatal.
  • +
  • Keep release checks explicit. Deterministic fixtures prove warnings from app and test sources both fail the gate + while Xcode metadata and dependency notices remain visible.
  • +
+
+ +
+

0.15.9

  • Make Store builds warning-free. Ambiguous optionals, isolation boundaries, sendable callbacks, capture ownership, and stale compatibility code now compile cleanly with current Xcode.
  • @@ -1361,7 +1373,7 @@

    What's new

diff --git a/docs/sitemap.xml b/docs/sitemap.xml index b2ed251a..adc1b48c 100644 --- a/docs/sitemap.xml +++ b/docs/sitemap.xml @@ -1,55 +1,55 @@ - https://flowlight.xinbetween.com/about/2026-10-27 - https://flowlight.xinbetween.com/docs/2026-10-27 - https://flowlight.xinbetween.com/2026-10-27 - https://flowlight.xinbetween.com/plugins/2026-10-27 - https://flowlight.xinbetween.com/privacy/2026-10-27 - https://flowlight.xinbetween.com/releases/2026-10-27 - https://flowlight.xinbetween.com/threat-model/2026-10-27 - https://flowlight.xinbetween.com/de/about/2026-10-27 - https://flowlight.xinbetween.com/de/docs/2026-10-27 - https://flowlight.xinbetween.com/de/2026-10-27 - https://flowlight.xinbetween.com/de/privacy/2026-10-27 - https://flowlight.xinbetween.com/de/threat-model/2026-10-27 - https://flowlight.xinbetween.com/es/about/2026-10-27 - https://flowlight.xinbetween.com/es/docs/2026-10-27 - https://flowlight.xinbetween.com/es/2026-10-27 - https://flowlight.xinbetween.com/es/privacy/2026-10-27 - https://flowlight.xinbetween.com/es/threat-model/2026-10-27 - https://flowlight.xinbetween.com/fr/about/2026-10-27 - https://flowlight.xinbetween.com/fr/docs/2026-10-27 - https://flowlight.xinbetween.com/fr/2026-10-27 - https://flowlight.xinbetween.com/fr/privacy/2026-10-27 - https://flowlight.xinbetween.com/fr/threat-model/2026-10-27 - https://flowlight.xinbetween.com/it/about/2026-10-27 - https://flowlight.xinbetween.com/it/docs/2026-10-27 - https://flowlight.xinbetween.com/it/2026-10-27 - https://flowlight.xinbetween.com/it/privacy/2026-10-27 - https://flowlight.xinbetween.com/it/threat-model/2026-10-27 - https://flowlight.xinbetween.com/pt-PT/about/2026-10-27 - https://flowlight.xinbetween.com/pt-PT/docs/2026-10-27 - https://flowlight.xinbetween.com/pt-PT/2026-10-27 - https://flowlight.xinbetween.com/pt-PT/privacy/2026-10-27 - https://flowlight.xinbetween.com/pt-PT/threat-model/2026-10-27 - https://flowlight.xinbetween.com/ja/about/2026-10-27 - https://flowlight.xinbetween.com/ja/docs/2026-10-27 - https://flowlight.xinbetween.com/ja/2026-10-27 - https://flowlight.xinbetween.com/ja/privacy/2026-10-27 - https://flowlight.xinbetween.com/ja/threat-model/2026-10-27 - https://flowlight.xinbetween.com/zh-Hans/about/2026-10-27 - https://flowlight.xinbetween.com/zh-Hans/docs/2026-10-27 - https://flowlight.xinbetween.com/zh-Hans/2026-10-27 - https://flowlight.xinbetween.com/zh-Hans/privacy/2026-10-27 - https://flowlight.xinbetween.com/zh-Hans/threat-model/2026-10-27 - https://flowlight.xinbetween.com/zh-Hant/about/2026-10-27 - https://flowlight.xinbetween.com/zh-Hant/docs/2026-10-27 - https://flowlight.xinbetween.com/zh-Hant/2026-10-27 - https://flowlight.xinbetween.com/zh-Hant/privacy/2026-10-27 - https://flowlight.xinbetween.com/zh-Hant/threat-model/2026-10-27 - https://flowlight.xinbetween.com/ko/about/2026-10-27 - https://flowlight.xinbetween.com/ko/docs/2026-10-27 - https://flowlight.xinbetween.com/ko/2026-10-27 - https://flowlight.xinbetween.com/ko/privacy/2026-10-27 - https://flowlight.xinbetween.com/ko/threat-model/2026-10-27 + https://flowlight.xinbetween.com/about/2026-10-28 + https://flowlight.xinbetween.com/docs/2026-10-28 + https://flowlight.xinbetween.com/2026-10-28 + https://flowlight.xinbetween.com/plugins/2026-10-28 + https://flowlight.xinbetween.com/privacy/2026-10-28 + https://flowlight.xinbetween.com/releases/2026-10-28 + https://flowlight.xinbetween.com/threat-model/2026-10-28 + https://flowlight.xinbetween.com/de/about/2026-10-28 + https://flowlight.xinbetween.com/de/docs/2026-10-28 + https://flowlight.xinbetween.com/de/2026-10-28 + https://flowlight.xinbetween.com/de/privacy/2026-10-28 + https://flowlight.xinbetween.com/de/threat-model/2026-10-28 + https://flowlight.xinbetween.com/es/about/2026-10-28 + https://flowlight.xinbetween.com/es/docs/2026-10-28 + https://flowlight.xinbetween.com/es/2026-10-28 + https://flowlight.xinbetween.com/es/privacy/2026-10-28 + https://flowlight.xinbetween.com/es/threat-model/2026-10-28 + https://flowlight.xinbetween.com/fr/about/2026-10-28 + https://flowlight.xinbetween.com/fr/docs/2026-10-28 + https://flowlight.xinbetween.com/fr/2026-10-28 + https://flowlight.xinbetween.com/fr/privacy/2026-10-28 + https://flowlight.xinbetween.com/fr/threat-model/2026-10-28 + https://flowlight.xinbetween.com/it/about/2026-10-28 + https://flowlight.xinbetween.com/it/docs/2026-10-28 + https://flowlight.xinbetween.com/it/2026-10-28 + https://flowlight.xinbetween.com/it/privacy/2026-10-28 + https://flowlight.xinbetween.com/it/threat-model/2026-10-28 + https://flowlight.xinbetween.com/pt-PT/about/2026-10-28 + https://flowlight.xinbetween.com/pt-PT/docs/2026-10-28 + https://flowlight.xinbetween.com/pt-PT/2026-10-28 + https://flowlight.xinbetween.com/pt-PT/privacy/2026-10-28 + https://flowlight.xinbetween.com/pt-PT/threat-model/2026-10-28 + https://flowlight.xinbetween.com/ja/about/2026-10-28 + https://flowlight.xinbetween.com/ja/docs/2026-10-28 + https://flowlight.xinbetween.com/ja/2026-10-28 + https://flowlight.xinbetween.com/ja/privacy/2026-10-28 + https://flowlight.xinbetween.com/ja/threat-model/2026-10-28 + https://flowlight.xinbetween.com/zh-Hans/about/2026-10-28 + https://flowlight.xinbetween.com/zh-Hans/docs/2026-10-28 + https://flowlight.xinbetween.com/zh-Hans/2026-10-28 + https://flowlight.xinbetween.com/zh-Hans/privacy/2026-10-28 + https://flowlight.xinbetween.com/zh-Hans/threat-model/2026-10-28 + https://flowlight.xinbetween.com/zh-Hant/about/2026-10-28 + https://flowlight.xinbetween.com/zh-Hant/docs/2026-10-28 + https://flowlight.xinbetween.com/zh-Hant/2026-10-28 + https://flowlight.xinbetween.com/zh-Hant/privacy/2026-10-28 + https://flowlight.xinbetween.com/zh-Hant/threat-model/2026-10-28 + https://flowlight.xinbetween.com/ko/about/2026-10-28 + https://flowlight.xinbetween.com/ko/docs/2026-10-28 + https://flowlight.xinbetween.com/ko/2026-10-28 + https://flowlight.xinbetween.com/ko/privacy/2026-10-28 + https://flowlight.xinbetween.com/ko/threat-model/2026-10-28 diff --git a/docs/threat-model/index.html b/docs/threat-model/index.html index 063a382e..7487a5fd 100644 --- a/docs/threat-model/index.html +++ b/docs/threat-model/index.html @@ -48,7 +48,7 @@ - + @@ -231,7 +231,7 @@

Reporting a vulnerability

diff --git a/docs/zh-Hans/about/index.html b/docs/zh-Hans/about/index.html index d4a9cfb0..0e8803e4 100644 --- a/docs/zh-Hans/about/index.html +++ b/docs/zh-Hans/about/index.html @@ -48,7 +48,7 @@ - + @@ -152,7 +152,7 @@

致谢

diff --git a/docs/zh-Hans/docs/index.html b/docs/zh-Hans/docs/index.html index fcdb0a13..8b4b6eb3 100644 --- a/docs/zh-Hans/docs/index.html +++ b/docs/zh-Hans/docs/index.html @@ -48,7 +48,7 @@ - + @@ -76,7 +76,7 @@

文档

使用 Flowlight

-

从第一次启动到调整代理规则,需要的都在这里。Flowlight 0.15.9,macOS 15 或更高版本。

+

从第一次启动到调整代理规则,需要的都在这里。Flowlight 0.15.10,macOS 15 或更高版本。

diff --git a/docs/zh-Hans/index.html b/docs/zh-Hans/index.html index 2511d8ae..13cf0fc0 100644 --- a/docs/zh-Hans/index.html +++ b/docs/zh-Hans/index.html @@ -48,7 +48,7 @@ - + @@ -90,7 +90,7 @@

看清应用的网络活动。

brew install --cask xinbetween/tap/flowlight

-

v0.15.9macOS 15+通用架构GPL-3.0无遥测

+

v0.15.10macOS 15+通用架构GPL-3.0无遥测

@@ -569,7 +569,7 @@

知道什么离开了你的 Mac。

diff --git a/docs/zh-Hans/privacy/index.html b/docs/zh-Hans/privacy/index.html index 91238ffc..009bbca1 100644 --- a/docs/zh-Hans/privacy/index.html +++ b/docs/zh-Hans/privacy/index.html @@ -48,7 +48,7 @@ - + @@ -187,7 +187,7 @@

联系方式

diff --git a/docs/zh-Hans/threat-model/index.html b/docs/zh-Hans/threat-model/index.html index c151a968..255f35e5 100644 --- a/docs/zh-Hans/threat-model/index.html +++ b/docs/zh-Hans/threat-model/index.html @@ -48,7 +48,7 @@ - + @@ -210,7 +210,7 @@

报告漏洞

diff --git a/docs/zh-Hant/about/index.html b/docs/zh-Hant/about/index.html index 6f1286bf..cccccdf7 100644 --- a/docs/zh-Hant/about/index.html +++ b/docs/zh-Hant/about/index.html @@ -48,7 +48,7 @@ - + @@ -152,7 +152,7 @@

致謝

diff --git a/docs/zh-Hant/docs/index.html b/docs/zh-Hant/docs/index.html index 7b874ac6..b710164f 100644 --- a/docs/zh-Hant/docs/index.html +++ b/docs/zh-Hant/docs/index.html @@ -48,7 +48,7 @@ - + @@ -76,7 +76,7 @@

說明文件

使用 Flowlight

-

從第一次啟動到調整代理規則,全都在這裡。Flowlight 0.15.9,macOS 15 或以上版本。

+

從第一次啟動到調整代理規則,全都在這裡。Flowlight 0.15.10,macOS 15 或以上版本。

diff --git a/docs/zh-Hant/index.html b/docs/zh-Hant/index.html index 11d527ac..3502cd99 100644 --- a/docs/zh-Hant/index.html +++ b/docs/zh-Hant/index.html @@ -48,7 +48,7 @@ - + @@ -90,7 +90,7 @@

看見每個 App 的網路活動。
brew install --cask xinbetween/tap/flowlight

-

v0.15.9macOS 15+通用架構GPL-3.0無遙測

+

v0.15.10macOS 15+通用架構GPL-3.0無遙測

@@ -570,7 +570,7 @@

知道有什麼離開了你的 Mac。

diff --git a/docs/zh-Hant/privacy/index.html b/docs/zh-Hant/privacy/index.html index c47fb29e..88219ab1 100644 --- a/docs/zh-Hant/privacy/index.html +++ b/docs/zh-Hant/privacy/index.html @@ -48,7 +48,7 @@ - + @@ -187,7 +187,7 @@

聯絡

diff --git a/docs/zh-Hant/threat-model/index.html b/docs/zh-Hant/threat-model/index.html index 10c46531..a4802d69 100644 --- a/docs/zh-Hant/threat-model/index.html +++ b/docs/zh-Hant/threat-model/index.html @@ -48,7 +48,7 @@ - + @@ -211,7 +211,7 @@

回報漏洞

diff --git a/project.yml b/project.yml index ee520893..3c92daa2 100644 --- a/project.yml +++ b/project.yml @@ -15,8 +15,8 @@ settings: DEVELOPMENT_TEAM: "" CODE_SIGN_STYLE: Automatic ENABLE_HARDENED_RUNTIME: YES - MARKETING_VERSION: "0.15.9" - CURRENT_PROJECT_VERSION: "56" + MARKETING_VERSION: "0.15.10" + CURRENT_PROJECT_VERSION: "57" configs: AppStore: DEVELOPMENT_TEAM: 38RJUJHKZS @@ -147,6 +147,7 @@ targets: GENERATE_INFOPLIST_FILE: YES TEST_HOST: "$(BUILT_PRODUCTS_DIR)/Flowlight.app/Contents/MacOS/Flowlight" BUNDLE_LOADER: "$(TEST_HOST)" + SWIFT_TREAT_WARNINGS_AS_ERRORS: YES dependencies: - target: Flowlight schemes: diff --git a/scripts/check-swift-warnings.sh b/scripts/check-swift-warnings.sh index 9d8538f0..6a169597 100755 --- a/scripts/check-swift-warnings.sh +++ b/scripts/check-swift-warnings.sh @@ -9,7 +9,7 @@ if [[ $# -ne 1 || ! -f "$1" ]]; then fi log=$1 -warnings=$(grep -E '^/.*/(Flowlight|FlowlightExtension|FlowlightResponseScriptHelper|Shared)/.*\.swift:[0-9]+:[0-9]+: warning:' "$log" || true) +warnings=$(grep -E '^/.*/(Flowlight|FlowlightExtension|FlowlightResponseScriptHelper|FlowlightTests|Shared)/.*\.swift:[0-9]+:[0-9]+: warning:' "$log" || true) if [[ -n "$warnings" ]]; then echo "Flowlight Swift compiler warnings are release blockers:" >&2 echo "$warnings" >&2 diff --git a/scripts/test-swift-warnings.sh b/scripts/test-swift-warnings.sh index 83d4777f..a288abdc 100755 --- a/scripts/test-swift-warnings.sh +++ b/scripts/test-swift-warnings.sh @@ -13,14 +13,24 @@ cat > "$temporary/clean.log" <<'LOG' LOG scripts/check-swift-warnings.sh "$temporary/clean.log" -cat > "$temporary/dirty.log" <<'LOG' +cat > "$temporary/app-warning.log" <<'LOG' /tmp/checkout/Flowlight/Analysis/RuleStore.swift:412:90: warning: actor-isolated property used from nonisolated context ** BUILD SUCCEEDED ** LOG -if scripts/check-swift-warnings.sh "$temporary/dirty.log" > "$temporary/output" 2>&1; then - echo "first-party Swift warning was not rejected" >&2 +if scripts/check-swift-warnings.sh "$temporary/app-warning.log" > "$temporary/app-output" 2>&1; then + echo "first-party app warning was not rejected" >&2 exit 1 fi -grep -Fq 'RuleStore.swift:412:90: warning:' "$temporary/output" +grep -Fq 'RuleStore.swift:412:90: warning:' "$temporary/app-output" -echo "Swift warning fixtures passed: toolchain and dependency notices allowed, first-party warning rejected." +cat > "$temporary/test-warning.log" <<'LOG' +/tmp/checkout/FlowlightTests/RuleTests.swift:559:13: warning: mutation of captured var 'saved' in concurrently-executing code +** TEST BUILD SUCCEEDED ** +LOG +if scripts/check-swift-warnings.sh "$temporary/test-warning.log" > "$temporary/test-output" 2>&1; then + echo "first-party test warning was not rejected" >&2 + exit 1 +fi +grep -Fq 'RuleTests.swift:559:13: warning:' "$temporary/test-output" + +echo "Swift warning fixtures passed: toolchain and dependency notices allowed, first-party app and test warnings rejected." diff --git a/site/pages/releases.html b/site/pages/releases.html index b8c78ab3..3c43c86f 100644 --- a/site/pages/releases.html +++ b/site/pages/releases.html @@ -13,7 +13,19 @@

What's new

-

0.15.9

Latest
+

0.15.10

Latest
+
    +
  • Make the full test target warning-free. Concurrency captures, redundant actor awaits, and intentionally ignored + database insert IDs now compile cleanly with current Xcode.
  • +
  • Treat test warnings as release failures. The test bundle promotes compiler warnings to errors, while the log + gate separately rejects first-party diagnostics the compiler leaves nonfatal.
  • +
  • Keep release checks explicit. Deterministic fixtures prove warnings from app and test sources both fail the gate + while Xcode metadata and dependency notices remain visible.
  • +
+
+ +
+

0.15.9

  • Make Store builds warning-free. Ambiguous optionals, isolation boundaries, sendable callbacks, capture ownership, and stale compatibility code now compile cleanly with current Xcode.