| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
Sorry, something went wrong.
Greptile SummaryThis PR makes observables invalidation-only by default, requiring an explicit broadcast: :value opt-in for persisted projections and scalar Turbo replacements.
Confidence Score: 5/5The PR appears safe to merge, with the intentional scalar-observable compatibility break clearly documented and consistently enforced. The changed DSL default flows consistently through persistence, Turbo rendering, channel validation, and component invalidation, and no actionable changed-code defect or rule violation remains. Important Files Changed
Flowchart%%{init: {'theme': 'neutral'}}%%
flowchart TD
A[Declare observable] --> B{broadcast: :value?}
B -- Yes --> C[Persist projected value]
C --> D[Allow scalar Turbo target]
B -- No / default --> E[Persist empty invalidation marker]
E --> F[Refresh dependent components]
E --> G[Reject scalar rendering or subscription]
Reviews (1): Last reviewed commit: "Make observables invalidation-only" | Re-trigger Greptile |
Sorry, something went wrong.
| Back | FazBrowse Home | New Git URL |
Summary
Security and compatibility
This is a breaking default change. An unqualified observable that rendered as a scalar in 0.12.x must add broadcast: :value. Forgetting the opt-in now produces a visible scalar-rendering error instead of silently persisting and sharing the value with every authorized actor subscriber.
No database migration is required. The 0.12.1 runtime already supports both broadcast modes, stores {} for invalidation-only rows, suppresses their scalar Turbo frames, and refreshes dependent components from committed state.
v0.12.1 is already published and did not include a deprecation warning for implicit value broadcasts. This 0.13.0 branch cannot add that warning retroactively, and warning after the safe default takes effect would penalize the intended API. If a warning period is required, publish a separate 0.12.2 maintenance release before merging and tagging this PR.
Test-first evidence
Before changing the default:
After implementation:
The skipped tests are PostgreSQL/MySQL version and reconciliation checks, PostgreSQL/Redis wake-up adapters, and database-specific lock cases. Observable persistence and rendering coverage was not skipped.