- resource: Close the measured resource() parity gaps (D-45) (de56da9)
- resource: Add opt-in focus and reconnect revalidation (D-46) (3ca942c)
- cache: Make invalidation a flag, not a timestamp shift (D-40) (5a781f9)
- resource: Cancel Observable loaders, honor reload(), guard SSR timers (b65f187)
- mutation: Fail loudly on half-configured invalidation (D-44) (229520e)
- cache: Keep in-flight records alive until the write lands (7b512f0)
- landing: Clear the sticky header on anchors, fit 320px, honor reduced motion (5d4fc59)
- skills: Stop shipping dangling symlinks to third-party skills (924d7dd)
- example: Drop the nullish fallback hasValue() makes dead (d7c4d99)
- Document OIDC publishing, pin .nvmrc to a node the CLI accepts (7eca911)
- Replace every unmeasured or false claim with a verified one (6005484)
- plan: Mark fix-review-findings implemented (9ed7069)
- Compare bundle size against TanStack in matching units (3ff2eef)
- Rewrite the positioning, add non-goals and a support policy (a61f9d8)
⚠️ Add a 0.2.0 migration guide, drop the untested interop claim (5500633)- landing: Remove AI writing tells and tighten the hero (a514d53)
- skill: Align ziflux-expert with the shipped API (a661430)
- Use the exact install command skills.sh publishes (905a7ff)
- Make "zero dependencies" true and enforce size in CI (1f94642)
- skills: Refresh lock for angular-developer and impeccable (9fde482)
Full upgrade notes in MIGRATION.md.
CachedResourceRef.erroris nowSignal<Error | undefined>, wasSignal<unknown>. Code that cast it (ref.error() as ApiError) needsas unknown as ApiError.hasValue()returns a type predicate, wasboolean. It narrowsvalue()toT, and is now exactlyvalue() !== undefined, so a loader resolvingundefinedreportsfalsewhere it previously reportedtrue. Hand-written test doubles ofCachedResourceRefmust declare the predicate signature.CacheEntry<T>requires aninvalidatedfield. Affects code constructing the literal, in practice test fixtures.reload()now refetches inside thestaleTimewindow. Its contract always said it bypassed staleness checks; the freshness short-circuit ran first and made it a no-op on a fresh entry.refetchIntervalinherited the same bug.cachedMutationthrows in dev mode when givencachewithoutinvalidateKeys, or the reverse. That configuration silently invalidated nothing before, so this is the most likely upgrade-time crash.invalidate()is a flag, not a timestamp shift. A per-resourcestaleTimelarger than the cache's can no longer swallow it, and a smallerexpireTimeno longer turns it into an eviction. Cost: a raced in-flight fetch is never reused, so invalidations spread over time issue one refetch each. Invalidations within a single tick still collapse into one.- Observable loaders are cancelled on abort. A superseded or destroyed load now kills its
HttpClientrequest. An Observable completing without emitting rejects with a namedErrorinstead of RxJSEmptyError. - No timers during server rendering. The cleanup sweep and polling are browser-only.
- Maxime De Sogus maxime.desogus@gmail.com
- Angular 22 is now required.
peerDependenciesmove from@angular/core ^21.0.0to^22.0.0. One major is supported at a time — see D-39. Projects still on Angular 21 stay on0.0.13.
- deps: Migrate to Angular 22 (d624452) Angular 21.2 → 22.0.7, TypeScript 5.9 → 6.0.3, ng-packagr 22, angular-eslint 22, typescript-eslint 8.65.
- resource: Drop the redundant
undefined as Tassertion incachedResource(d624452) Surfaced by the v22 diagnostics. The public typevalue: Signal<T | undefined>is unchanged.
- core: Record D-39 — Angular 22 peer range replaces v21 (50a0d1f)
- Maxime De Sogus maxime.desogus@gmail.com
- core: Add internal _dataVersion signal on DataCache (7de7b82)
- core: Propagate optimistic ref.set across sibling resources (90dea18)
- core: Enforce @internal contract and tighten D-33 comment (0dc7354)
- landing: Add Scenarios and NotAFit sections, polish hero/navbar (f865edc)
- core: Document D-38 cross-resource optimistic sync via _dataVersion (0f704e7)
- Add PRODUCT.md brand brief and update skills-lock.json (2db4a71)
- core: Cover Observable loader error and refetchInterval signal change (eefeacd)
- core: RED — _dataVersion signal contract on DataCache (7774cba)
- core: Red — cross-resource sync on shared cache key (097cd4e)
- Maxime De Sogus maxime.desogus@gmail.com
- core: Resolve clearDirty prefix mismatch with two-set dirty tracking (84f19a1)
- Maxime De Sogus maxime.desogus@gmail.com
- core: Mark prefetch stale through cascading invalidations (bce78be)
- Maxime De Sogus maxime.desogus@gmail.com
- core: Mark prefetch as stale when cache invalidated during fetch (9cf4746)
- landing: Add comprehensive guide with architecture, patterns, and examples (e1f4def)
- landing: Audit Diátaxis – move Prior Art up, add value prop, collapsible architecture (7f06f17)
- Maxime De Sogus maxime.desogus@gmail.com
- core: Preserve in-flight dedup promises across invalidation (d4db220)
- api-reference: Correct lifecycle order and callback isolation details (e9fd4f4)
- landing: Clarify mutation lifecycle and optimistic update flow (05d697b)
- Maxime De Sogus maxime.desogus@gmail.com
- core: Prevent mutation callback errors and state races (e48c4f8)
- Maxime De Sogus maxime.desogus@gmail.com
- core: Run onSuccess before invalidateKeys in cachedMutation (1224088)
- core: Sync set() and update() writes to DataCache (41e941b)
- release: V0.0.6 (9f4ab3b)
- Maxime De Sogus maxime.desogus@gmail.com
- core: Run onSuccess before invalidateKeys in cachedMutation (1224088)
- Maxime De Sogus maxime.desogus@gmail.com
- core: Read SWR-enhanced value in cachedResource.update() (f479b10)
- Maxime De Sogus maxime.desogus@gmail.com
- docs: Add Vercel analytics (d4d21fe)
- skills: Publish ziflux-expert skill (7531d17)
- docs: Add "Copy page" dropdown for markdown export (e070c64)
- docs: Add "Copy page" dropdown for markdown export (718e1d0)
- docs: Update npm package references from ziflux to ngx-ziflux (cd019b8)
- test: Use fake timers before cache.set to prevent flaky timing (59f19c3)
- release: V0.0.3 (75df94a)
- Maxime De Sogus maxime.desogus@gmail.com
- docs: Update npm package references from ziflux to ngx-ziflux (cd019b8)
- test: Use fake timers before cache.set to prevent flaky timing (59f19c3)
- Maxime De Sogus maxime.desogus@gmail.com
- Implement ziflux library — SWR caching for Angular resource() (9805560)
- Add cachedMutation() and anyLoading() utilities (966ecad)
- main: Polish landing page visuals and add mobile navigation (032bb72)
- main: Clarify landing page messaging and value prop (ad48e0b)
- main: Add dark mode and overhaul landing page visuals (9f95c6c)
- main: Update docs for new features and overhaul landing layout (cd8d762)
- lib: Add inspect, cleanup, retry, polling + rename gc/key for clarity (3aa222d)
- main: Polish SEO, update API terminology, and add interactive demo (9da07ea)
- docs: Add dual-tab animated demo with overlay mutation dialog (84bf965)
- lib: Add devtools — cache inspector, structured logging & floating overlay (68f5906)
- example: Add Todo demo app showcasing ziflux cache + devtools (847cf58)
- release: Add changelogen, commitlint, and /release orchestration skill (aec0b4b)
- cache: Add maxEntries with LRU eviction (D-26) (11c6e76)
- main: Refine mutation logic, add value sentinel & polish release docs (69b0d2b)
- branding: Replace logo with dissolving pixel Z design (0431a81)
- lib: Audit fixes — staleTime: 0 bug, strict ESLint, retry abort cleanup (161aa5f)
- cache: Use strict < for staleTime comparison (27da05f)
- cache: Guard empty prefix in invalidate, add prefix collision tests (b98f73b)
- devtools: Guard setInterval and keydown handler for SSR safety (4d9cf6f)
- cache: Clear in-flight promises on invalidate to prevent stale writes (D-27) (5a14632)
- cache: Validate numeric config in DataCache constructor (40348e6)
- Resolve review findings and critical retry race condition (d76e1de)
- pre-launch: ItemCache invalidation, error signal consistency, doc examples (118d109)
- main: Simplify landing page visuals and architecture styles (0da29b6)
- main: Streamline landing page visuals and simplify component layouts (bf390fb)
- main: Slim down project context and sharpen dev rules (5ff0ebc)
- example: Extract stores + API service, add optimistic updates (0bbcd76)
- cache: Move DataCache generic from class to per-method (D-30) (470ad03)
- lib: Add JSDoc to entire public API (ba9405c)
- readme: Dx polish — merge setup, add testing, extract llms.txt (e912ecc)
- readme: Remove defensive tone, deduplicate architecture sections (60383db)
- readme: Rewrite why section with concrete value props (85a3561)
- landing: Add guide, gotchas, testing; consolidate readme (8f12fb1)
- landing: Redesign gotchas with cards and amber badges (5c94543)
- project: Crystallize library philosophy and unopinionated design principles (22c82eb)
- landing: Simplify guide and quickstart layout (ad8bf5a)
- landing: Trim guide copy and remove redundant sections (e931fb8)
- landing: Eliminate redundancy, improve discoverability (01176d9)
- Add contributing guide and update docs readme (30859e0)
- navbar: Remove logo (5dc1fe0)
- Copy README and LICENSE into dist for npm publish (4c6a35a)
- Add skills-lock.json, gitignore Claude Code local dirs (59c8329)
- pre-launch: Fix readme, add templates, enhance ci (b73a5c5)
- pre-launch: Fix readme links, add engines field, example readme (fa2bd77)
- Rename npm package to ngx-ziflux (de7557c)
- mutation: Add concurrent mutation tests, clear error on success (1d6a627)
- resource: Widen wall-clock timer margins to prevent CI flakes (16ee139)
- integration: Add SWR lifecycle integration tests (0a6e611)
- Maxime De Sogus maxime.desogus@gmail.com
- Implement ziflux library — SWR caching for Angular resource() (9805560)
- Add cachedMutation() and anyLoading() utilities (966ecad)
- main: Polish landing page visuals and add mobile navigation (032bb72)
- main: Clarify landing page messaging and value prop (ad48e0b)
- main: Add dark mode and overhaul landing page visuals (9f95c6c)
- main: Update docs for new features and overhaul landing layout (cd8d762)
- lib: Add inspect, cleanup, retry, polling + rename gc/key for clarity (3aa222d)
- main: Polish SEO, update API terminology, and add interactive demo (9da07ea)
- docs: Add dual-tab animated demo with overlay mutation dialog (84bf965)
- lib: Add devtools — cache inspector, structured logging & floating overlay (68f5906)
- example: Add Todo demo app showcasing ziflux cache + devtools (847cf58)
- release: Add changelogen, commitlint, and /release orchestration skill (aec0b4b)
- cache: Add maxEntries with LRU eviction (D-26) (11c6e76)
- lib: Audit fixes — staleTime: 0 bug, strict ESLint, retry abort cleanup (161aa5f)
- cache: Use strict < for staleTime comparison (27da05f)
- cache: Guard empty prefix in invalidate, add prefix collision tests (b98f73b)
- devtools: Guard setInterval and keydown handler for SSR safety (4d9cf6f)
- cache: Clear in-flight promises on invalidate to prevent stale writes (D-27) (5a14632)
- cache: Validate numeric config in DataCache constructor (40348e6)
- main: Simplify landing page visuals and architecture styles (0da29b6)
- main: Streamline landing page visuals and simplify component layouts (bf390fb)
- main: Slim down project context and sharpen dev rules (5ff0ebc)
- example: Extract stores + API service, add optimistic updates (0bbcd76)
- lib: Add JSDoc to entire public API (ba9405c)
- Copy README and LICENSE into dist for npm publish (4c6a35a)
- Add skills-lock.json, gitignore Claude Code local dirs (59c8329)
- mutation: Add concurrent mutation tests, clear error on success (1d6a627)
- resource: Widen wall-clock timer margins to prevent CI flakes (16ee139)
- integration: Add SWR lifecycle integration tests (0a6e611)
- Maxime De Sogus maxime.desogus@gmail.com