Skip to content

fix(sync): keep descriptor metadata out of the remote manifest - #1027

Merged
ctawiah merged 1 commit into
mainfrom
ctawiah/sync-manifest-no-descriptor-metadata
Nov 10, 2026
Merged

ctawiah merged 1 commit into
mainfrom
ctawiah/sync-manifest-no-descriptor-metadata

Conversation

@ctawiah

@ctawiah ctawiah commented Nov 10, 2026 •

Copy link
Copy Markdown
Contributor

Context

A push of a linked variation ends with a patch of the remote sync manifest, and LaunchDarkly rejected it with /properties/upserts/items/additionalProperties additional properties 'fingerprintSchema', 'referenceDigest', 'adapterBehavior' not allowed. The variation was written, the baseline was not, so the next plan saw the push again. The remote manifest records the fingerprint and the version of each entry, and nothing else.

What changes

  • SyncManifestResource and SyncManifestUpsert carry the kind, the lookup key, the fingerprint, and the version only.
  • The store sends an upsert when the fingerprint of an entry changed. A change to the descriptor metadata of a linked resource alone sends nothing.
  • The sync.lock file keeps the descriptor metadata, as before. The lock travels with the repository, so every working copy reads it from there.

Design notes

  • The remote manifest gives each entry a version for optimistic concurrency and a fingerprint for the stale check between working copies. Neither needs the descriptor metadata, which the planner reads from the lock.

Review focus

  • Is any other place expecting the descriptor metadata in the remote manifest?

Verification

  • go test ./...
  • golangci-lint run ./...
  • TestStoreUpdatesWithRemoteVersions asserts the upsert without the metadata, and TestStoreSendsNothingForADescriptorMetadataChange covers a metadata-only change.
  • Against staging: the push of a linked variation returned the schema error above.

Related changes

🤖 Generated with Claude Code


Note

Overview
Stops sending descriptor metadata (fingerprintSchema, referenceDigest, adapterBehavior) in remote sync manifest API payloads, which LaunchDarkly rejects as additional properties and was blocking baseline updates after linked variation pushes.

SyncManifestResource and SyncManifestUpsert now only expose kind, lookup key, fingerprint, and version. The manifest store loads and patches with that same subset, and sameManifestContent compares fingerprints only, so updates that change lock-only descriptor metadata without a fingerprint change do not emit a patch. Descriptor metadata remains on local manifest/sync.lock resources as before.

Reviewed by Cursor Bugbot for commit a7dcd10. Bugbot is set up for automated code reviews on this repo. Configure here.

The sync manifest API records the fingerprint and the version of each entry and rejects fingerprintSchema, referenceDigest, and adapterBehavior with "additional properties not allowed". The client no longer sends them in an upsert or reads them from a response. The sync.lock file keeps that metadata, so a change to it alone sends nothing to LaunchDarkly.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@ctawiah
ctawiah marked this pull request as ready for review November 10, 2026 19:52
@ctawiah
ctawiah requested a review from a team as a code owner November 10, 2026 19:52
@ctawiah
ctawiah requested review from davidbrackbill and nkester-ld and removed request for a team November 10, 2026 19:52
@ctawiah
ctawiah merged commit 8c5df53 into main Nov 10, 2026
12 checks passed
@ctawiah
ctawiah deleted the ctawiah/sync-manifest-no-descriptor-metadata branch November 10, 2026 20:14
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.

2 participants