Skip to content

fix: update Hocuspocus 4.7 with YKS 0.2.15 and Kotlin 2.4 - #5

Merged
hwisu merged 5 commits into
mainfrom
fix/hocuspocus-4.7-redis-reply-routing
Sep 22, 2026
Merged

hwisu merged 5 commits into
mainfrom
fix/hocuspocus-4.7-redis-reply-routing

Conversation

@hwisu

@hwisu hwisu commented Sep 22, 2026 •

Copy link
Copy Markdown
Owner

Redis sync replies currently reach every server subscribed to a document, which can let a stale bystander apply another server's delete set. Route replies only to the requester, matching Hocuspocus 4.7.0, and update the Provider/server oracles and contract matrix to 4.7.0.

Prepare Hocuspocus 0.1.9 with the merged YKS 0.2.15 update. CI, soak, publication, documentation, and artifact checksums now use YKS merge commit 47095ae9a95e109f7cdc2ab411f766bf73484e16, including the explicit-loop cleanup. Align both repositories on Kotlin 2.4.20 and Gradle 9.7.1, retain Kotlin 2.3.21 consumer coverage, and refresh dependency locks and ABI dumps. The ABI refresh includes declarations already present in the source but missing from the previous dump.

Upstream main was reviewed through 0d9a7ff7. Its unpublished-document cleanup fix already exists in the JVM implementation; add a regression proving that both load-hook failure paths close the engine and allow a fresh retry.

Validation:

  • All 146 JVM tests passed against the final YKS code, including Redis and S3 with no skips.
  • Kotlin 2.4.20 and 2.3.21 standalone consumers passed.
  • Provider synchronization, awareness, token refresh, deep values/formatting, persistence, and reconnect passed.
  • Bidirectional Node/JVM SQLite and mixed Redis synchronization, awareness, stateless, reconnect, and store-lock oracles passed.
  • Upstream matrix, ABI checks, bounded performance scenarios, harness lint, OSV, and npm audit passed.
  • The YKS merge artifact's manifest revision and dependency checksums match the pinned source commit.

Publish YKS 0.2.15 before publishing Hocuspocus 0.1.9. Package publication is separate from this source update.

Port ueberdosis#1152 (fixes ueberdosis#1151). SyncStep2 replies were
published on the shared document channel, so a stale bystander could
apply another instance's full delete set without the replacing structs
and broadcast or persist a truncated document.

Replies now go to the requester's `${prefix}#reply:${identifier}`
channel, matching the upstream wire layout, and an initial-sync wait is
released only by state that arrives on that channel.

Also align the pinned upstream oracles, matrix, and protocol version
with Hocuspocus 4.7.0.
@hwisu
hwisu marked this pull request as ready for review September 22, 2026 18:25
@hwisu
hwisu merged commit 0aad643 into main Sep 22, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant