Skip to content

feat: send the SDK manifest hash on the tunnel heartbeat#41

Merged
I-am-nothing merged 1 commit into
mainfrom
feat/manifest-hashbeat
Jul 6, 2026
Merged

feat: send the SDK manifest hash on the tunnel heartbeat#41
I-am-nothing merged 1 commit into
mainfrom
feat/manifest-hashbeat

Conversation

@I-am-nothing

Copy link
Copy Markdown
Contributor

feat: send the SDK manifest hash on the tunnel heartbeat

Each 30s heartbeat now GETs the local module manifest and forwards the SDK's
X-MS-Manifest-Hash response header (read verbatim — the CLI never computes a
hash, keeping it byte-consistent with what the platform reads) on the ping. The
platform uses it to skip re-fetching the manifest unless it changed.

  • The ping payload carries {manifest_hash} when the local read succeeds; a failed
    or timed-out fetch sends a payload-less ping so the tunnel keeps beating.
  • The fetch is timeout-guarded (500ms) so a wedged module never stalls ping/pong.
  • RegisterPayload gains manifest_hash (skip-if-none; None at register since the
    module isn't up yet when open_tunnels runs).
  • The dev proxy already relays response headers verbatim (raw io::copy), so the
    platform's own manifest fetch sees the same X-MS-Manifest-Hash — no proxy change
    needed.

Additive + wire-compatible: old dispatch ignores the new field. Part of the
3-repo hash-beat (app-module-sdk + api-platform).

Co-Authored-By: Claude Opus 4.8 (1M context) noreply@anthropic.com

Each 30s heartbeat now GETs the local module manifest and forwards the SDK's
X-MS-Manifest-Hash response header (read verbatim — the CLI never computes a
hash, keeping it byte-consistent with what the platform reads) on the ping. The
platform uses it to skip re-fetching the manifest unless it changed.

- The ping payload carries {manifest_hash} when the local read succeeds; a failed
  or timed-out fetch sends a payload-less ping so the tunnel keeps beating.
- The fetch is timeout-guarded (500ms) so a wedged module never stalls ping/pong.
- RegisterPayload gains manifest_hash (skip-if-none; None at register since the
  module isn't up yet when open_tunnels runs).
- The dev proxy already relays response headers verbatim (raw io::copy), so the
  platform's own manifest fetch sees the same X-MS-Manifest-Hash — no proxy change
  needed.

Additive + wire-compatible: old dispatch ignores the new field. Part of the
3-repo hash-beat (app-module-sdk + api-platform).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@I-am-nothing I-am-nothing merged commit 0b662e0 into main Jul 6, 2026
5 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