nohype-ai/SwiftObserver
59.3
Adequate · 21 September 2026
1.2k
lines of production code
Swift
primary language
4
measurements over time
What this system is
SwiftObserver is a reactive programming library for Swift that facilitates state observation and data flow management. It provides an \ObservableObject\ protocol and a \@propertyWrapper\ to track changes in values and objects. The system supports both native Swift concurrency and Apple's Combine framework through a dedicated integration module. It is distributed as a Swift Package with comprehensive test coverage for its core observation mechanics.
Features
Add Combine integration for Observable and ObservableCache
The library now exposes a new \CombineObserver\ module that bridges SwiftObserver's \Observable\ and \ObservableCache\ to Apple's Combine framework. By adopting the \Publisher\ protocol, both types now provide a \publisher()\ method, allowing developers to subscribe to observation events using standard Combine operators. This enables reactive, declarative UI updates and data flow management within the Apple ecosystem.
Code/CombineObserver · high confidence
Behavioural changes
Refactored ObservableObject and Observer architecture
The library's core observation model has been restructured to use a new \ObservableObject\ protocol and \Observer\ protocol, replacing the previous implementation. \ObservableObject\ now relies on a \Messenger\ to send \Message\s to \Observer\s, with \Messenger\ and \Receiver\ handling the connection and dispatch logic. This change introduces a more explicit separation between the observable source (\ObservableObject\), the observer (\Observer\), and the message transport (\Messenger\/\Receiver\). Additionally, \Variable\ now implements \ObservableCache\ to provide update messages, and a \@propertyWrapper\ (\ObservableVar\) is provided for easy observation of equatable values. The \AnyAuthor\ type alias is introduced to identify message senders.
Code/SwiftObserver · high confidence
SwiftObserver 7.0: Major API Simplification and Removal of Obsolete Features
SwiftObserver has been updated to version 7.0, marking a significant shift toward simplicity and native Swift features. This release removes several legacy components that are now obsolete or redundant: \Promise\ (replaced by Swift's native concurrency), 'one-shot' observations, \FreeObserver\/global observations, value-type-specific \Var\ extensions, and support for CocoaPods. The \Observable\ protocol has been renamed to \ObservableObject\ to accommodate a new \@Observable\ property wrapper. Additionally, the library now includes \CombineObserver\ for interoperability with Apple's Combine framework, and author filtering now requires non-optional \AnyAuthor\ types.
(repo-wide) · high confidence
Test coverage
Added comprehensive test coverage for SwiftObserver core components; Added unit tests for CombineObserver.
Dependencies
Introduce Swift Package Manager configuration for SwiftObserver
The project now includes a Package.swift file that defines the SwiftObserver and CombineObserver libraries, along with their respective test targets. The package specifies minimum platform versions (iOS 12, macOS 10.15, tvOS 12, watchOS 6) and sets the SwiftyToolz dependency to version 0.5.8.
(dependencies) · medium confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Score
- CAI 52 → 59 (+6.8)
- Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 100 → 100 (-0.4)
- Architecture 69 → 69 (+0.0)
- Maturity 65 → 65 (+0.0)
- Readiness 26 → 43 (+16.9)
- Security 100 → 100 (+0.0)
Resolved (6)
- Coverage not included — suite not readable by the collector
- Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
- No exposed public API
- Test reliability not included
- complexity unreadable for .swift — churn × complexity hotspots could not be measured
- dormant codebase — no living knowledge left to concentrate
New (12)
- Coverage not measured — Swift suite
- Dependency hygiene PARTLY measured — SwiftPM pinning read, dependency currency NOT established
- Documentation: no contributor guidance (README.md)
- Documentation: no installation or build instructions (README.md)
- Documentation: no licence statement (README.md)
- Documentation: no usage examples (README.md)
- Duplicated block (14 lines × 2) (Code/SwiftObserver/Transforms/ObservableTransforms/AuthorFilter.swift)
- Duplicated block (33 lines × 2) (Code/SwiftObserver/Transforms/ObservableTransforms/Cache.swift)
- Inconsistent handling of authorship context. Variable.set explicitly requires an AnyAuthor parameter, while ObservationTransformer.receive takes a closure that receives an AnyAuthor but does not enforce it at the call site of the transformer itself. This inconsistency in how 'who made this change' is propagated makes the API harder to reason about.
- Inconsistent naming and intent. Filter filters on Message content, while AuthorFilter filters on AnyAuthor. While the names are distinct, the parallel structure suggests AuthorFilter could be a generic Filter specialized on author, or vice versa. The current naming is slightly inconsistent with the general Filter pattern.
- Redundant types with identical signatures and likely identical implementation intent. Both types expose a receiver property and a receive method with the same signature. The distinction between 'Cache' and 'Observable' in the name is not reflected in the public API surface provided, suggesting one is likely an alias or a duplicate abstraction.
- Redundant types. CacheOnOptionalMessage appears to be a specialized version of Cache for optional messages, but both expose identical properties (latestMessage, origin, receiver) and constructors. This creates confusion about when to use which type.
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
nohype-ai/SwiftObserver was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 21 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit 09a608ddc1dc4afac0eaa9637e2e28fb616d9e7b — the exact code this score is about.
- Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-b84573e22831.