GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — fix(hub): reset message deltas across instances by SaKaNa-Y · Pull Request #486 · devframes/devframe

Conversation

@SaKaNa-Y

@SaKaNa-Y SaKaNa-Y commented Nov 5, 2026

Copy link
Copy Markdown
Member

Summary

A message-feed consumer that reconnects to a restarted Hub can reuse a version number from the previous instance. If that number is equal to or below the new clock, listSince returns an incomplete delta. The consumer keeps stale messages and misses new ones.

Return an instance ID with each result and accept it alongside the numeric version. Update the messages panel and Hub UI to pass both values.

same instance + valid version → delta
missing or foreign instance ID → full snapshot

This fixes reads after a consumer explicitly creates a replacement connection. It does not add automatic transport reconnection.

Evidence

  • Before: four new host regression cases fail against the original implementation. After: all 13 host tests pass, including same-instance updates, removals, clear and history expiry.
  • Consumer tests cover cache replacement and instance-ID forwarding in both readers. Real RPC tests cover incremental, legacy and foreign-cursor reads.
  • Chrome with real HTTP/WS: an explicit replacement connection with a retained cache recovers at lower, equal and higher new version numbers. Old entries disappear, all new entries appear, and later removal uses a delta.
  • pnpm lint, pnpm knip, pnpm typecheck, pnpm test --run --maxWorkers=4 and pnpm build pass. Full suite: 1845 passed, 14 skipped. A default-concurrency run missed the PTY resize signal; that case passed alone and the full four-worker rerun passed.

Merge Danger

Door: two-way

Blast Radius: message-sync

Numeric versions and existing calls remain valid. Callers that omit the instance ID receive full snapshots, which increases response size until they pass it. The new result field is optional for older responses and static snapshots. Queue capacity is unchanged.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
@SaKaNa-Y
fix(hub): reset message deltas across instances
04cc2af
Scope message cursors to their issuing Hub instance so a retained cache can recover after an explicit replacement connection. Return full snapshots for legacy numeric-only readers and pass instance IDs through both message consumers.
@vercel

vercel Bot commented Nov 5, 2026

Copy link
Copy Markdown

@SaKaNa-Y is attempting to deploy a commit to the NuxtLabs Team on Vercel.

A member of the Team first needs to authorize it.

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@github-actions

github-actions Bot commented Nov 5, 2026

Copy link
Copy Markdown

👁️‍🗨️ Review this pull request with grouped, summarized diffs at:
👉 https://pulls.review/gh/devframes/devframe/486?from=github-actions[bot]

raw result

💭 analyzed by vercel-ai-gateway/anthropic/claude-sonnet-5
🕰️ 2026-11-05 08:55 UTC
🔗 head 04cc2af
🤖 automated by pulls.review

{
  "headSha": "04cc2af838a62cfaaf8186604d2f8006abf2ed11",
  "result": {
    "overallSummary": "Fixes a bug where a message-feed consumer reconnecting to a restarted Hub could reuse a stale version number and receive an incomplete delta instead of a full snapshot. The host now tags each result with an instance ID, and both the numeric version and the instance ID must match for a delta to be returned; otherwise a full snapshot is sent. Consumers, RPC plumbing, docs, tests and generated type snapshots are updated accordingly.",
    "groups": [
      {
        "key": "core-fix",
        "label": "Instance-aware listSince",
        "summary": "Core fix: the messages host now stamps each result with its own instance ID and only computes a delta when the caller's cursor matches that instance; otherwise it returns a full snapshot. This prevents a consumer reconnecting to a restarted Hub from applying a delta computed against a stale clock.",
        "category": "core",
        "filePaths": [
          "packages/hub/src/node/host-messages.ts",
          "packages/hub/src/types/messages.ts",
          "plugins/messages/src/node/rpc/functions/list.ts"
        ],
        "critical": true,
        "fileNotes": [
          {
            "path": "packages/hub/src/node/host-messages.ts",
            "text": "`listSince` now requires the instance ID to match before trusting the numeric cursor; a mismatch (including legacy callers that omit it) forces `full: true`.",
            "critical": true
          }
        ]
      },
      {
        "key": "consumers",
        "label": "Consumer cursor forwarding",
        "summary": "Both message-feed consumers (Hub UI panel and the plugin's client state) now store the returned `instanceId` alongside the version and pass it back on the next poll.",
        "category": "core",
        "filePaths": [
          "packages/hub-ui/src/client/state/messages.ts",
          "plugins/messages/app/client/state/messages.ts"
        ]
      },
      {
        "key": "tests",
        "label": "Tests for instance-scoped cursors",
        "summary": "Regression coverage for the fix: host-level tests for foreign/legacy cursors, RPC-level tests over a real server, and consumer tests verifying cache replacement and instance-ID forwarding in both readers.",
        "category": "tests",
        "filePaths": [
          "packages/hub-ui/src/client/state/messages.test.ts",
          "packages/hub/src/node/__tests__/host-messages.test.ts",
          "plugins/messages/test/dev-server.test.ts",
          "plugins/messages/test/message-state.test.ts"
        ]
      },
      {
        "key": "docs",
        "label": "Hub API docs",
        "summary": "Documents `listSince(version, instanceId)` usage and the full-snapshot fallback behavior.",
        "category": "docs",
        "filePaths": [
          "docs/content/8.references/6.hub-api.md"
        ]
      },
      {
        "key": "snapshots",
        "label": "Generated type snapshots",
        "summary": "Auto-generated public API snapshots updated to reflect the new `instanceId` parameter and field.",
        "category": "other",
        "filePaths": [
          "tests/__snapshots__/tsnapi/@devframes/hub/index.snapshot.d.ts",
          "tests/__snapshots__/tsnapi/@devframes/hub/node.snapshot.d.ts",
          "tests/__snapshots__/tsnapi/@devframes/hub/node.snapshot.js",
          "tests/__snapshots__/tsnapi/@devframes/hub/types.snapshot.d.ts",
          "tests/__snapshots__/tsnapi/@devframes/plugin-messages/rpc.snapshot.d.ts"
        ]
      }
    ],
    "schemaVersion": 1,
    "source": "llm",
    "generatedAt": "2026-11-05T08:55:38.206Z",
    "model": "vercel-ai-gateway/anthropic/claude-sonnet-5",
    "locale": "en"
  }
}
All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

No reviews

Uh oh!

There was an error while loading. Please reload this page.

Assignees

No one assigned

Labels

None yet

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

Uh oh!

There was an error while loading. Please reload this page.

1 participant

@SaKaNa-Y
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.