You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Fallback Version Negative Space — fallbackVersion() migrated to Long.MIN_VALUE + counter (negative space). This eliminates the bug where degraded versions suppressed normal broadcasts in sendDeduped numeric comparison. Normal versions (positive) always dominate degraded versions (negative).
Invalidate Guard — handleInvalidate now includes a shouldSkipForSync guard, preventing degraded INVALIDATE broadcasts from incorrectly clearing normal L1 entries.
Worker HOT Promotion on Redis Unavailable — When Redis returns null during handleHot, the method promotes an existing degraded L1 entry (if present) to HOT, preventing permanent loss of Worker HOT decisions.
SyncMessage Default Fix — SyncMessage.from() default isVersionDegraded changed from true to false, preventing silent data sync failures when the header is missing.
Multi-Module Split — hotkey:1.1.0 refactored into hotkey-parent (pom) with common/ and worker/ modules. The common artifact published to Maven Central; worker is a standalone Spring Boot app (maven.deploy.skip=true). Worker-only classes moved out of the shared artifact, reducing App-only footprint.
Coexistence Mode Removal — Removed exclusive-mode and hotkey.worker.mode (COEXISTENCE/EMBEDDED/STANDALONE). Deployment simplified to two modes: App-only / Worker-only. Replaced condition annotation with @ConditionalOnProperty(prefix="hotkey.worker", name="enabled", havingValue="false", matchIfMissing=true).
Annotation Support — Added annotation/ package and @HotCache annotation (renamed to avoid conflict with HotKey facade). Supports SpEL key(), three operation types (READ/WRITE/INVALIDATE), and per-annotation TTL/soft-expire overrides. HotKeyAspect injects HotKey facade; requires spring-boot-starter-aop (<optional>true</optional>). HotKeyAnnotationAutoConfiguration registered as the 9th auto-configuration class.
Worker Configuration Restructure — WorkerProperties.java reorganized into 9 nested inner classes (Routing, Messaging, SlidingWindow, Threshold, StateMachine, DynamicThreshold, TopKValidation, HeavyKeeper) plus a flat enabled field. Auto-configuration property access paths updated to nested getters; fixed @Scheduled SpEL; retained backward-compatible delegate methods.
Degraded Version Upgrade — Replaced System.nanoTime() fallback with (nodeId << 32) | counter. Uses InstanceIdGenerator (UUID file + hostname fallback) to derive node ID and a shared AtomicLong. Guarantees cross-JVM ordering without clock drift.
Full-Path Reporting — get() / getWithSoftExpire() now call hotKeyReporter.record() on both L1 hit and L2 miss paths (previously only hot-key misses). Worker receives complete access patterns rather than only the hot-key subset.
Dependency Additions — Added spring-amqp and spring-boot-starter-aop as <optional>true</optional> to the common module. Bumped Guava version to 32.1.3-jre in <dependencyManagement>.
AutoConfiguration.imports Update — Removed WorkerAutoConfiguration from the shared imports file (now scanned by @SpringBootApplication in worker module). Added HotKeyAnnotationAutoConfiguration. Total 9 entries maintained.
Documentation & Readability — README deployment tables collapsed to two modes; Worker config reorganized with group header rows and nested YAML examples. Removed coexistence references from CLAUDE.md/AGENTS.md. application.yml partitioned with # ── Section ── markers. Retained Apache 2.0 license headers.