kopia/kopia · critical

repeated Entries field

Error message

repeated Entries field

What it means

When decoding a serialized manifest array, parseFields only understands the 'entries' field and rejects any manifest object that contains it more than once. "repeated Entries field" means the input stream is structurally malformed (duplicated field) and cannot be safely decoded.

Solutions

  1. Locate the corrupt manifest content and restore it from a backup or unaffected storage copy.
  2. Run repository verification/repair (e.g. kopia repository verify / blob list reconciliation) to find damaged contents.
  3. Do not hand-edit manifest blobs; regenerate the affected manifests if possible.
Defensive patterns

Strategy: try-catch

Try / catch

if err := decodeManifestArray(dec, &res); err != nil {
    if strings.Contains(err.Error(), "repeated Entries field") {
        // flag content as corrupted, trigger restore/verify
    }
    return err
}

Prevention

When it happens

Trigger: Decoding a manifest content blob whose JSON contains two 'entries' fields — i.e. corrupted, hand-edited, or wrongly merged manifest data fed to decodeManifestArray.

Common situations: Repository blob corruption (storage-level damage or partial writes); manually edited or concatenated manifest files; bugs in tools that rewrite manifest contents.

Understand the failure class

Background: Schema validation failed / invalid input schema: payload rejected because its shape doesn't match the expected schema — this error's family across 28 libraries.

Related errors


AI-assisted analysis of kopia/kopia@82495e54b5 (2026-09-07). Data as JSON: /api/errors/b732ca1e34ab0192. Report an issue: GitHub.

Appendix: source

Thrown at repo/manifest/serialized.go:104

	return res, expectDelimToken(dec, objectClose)
}

func parseFields(dec *json.Decoder, res *manifest) error {
	var seen bool

	for dec.More() {
		l, err := stringToken(dec)
		if err != nil {
			return err
		}

		// Only have `entries` field right now. Skip other fields.
		if !strings.EqualFold("entries", l) {
			continue
		}

		if seen {
			return errors.New("repeated Entries field")
		}

		seen = true

		if err := decodeArray(dec, &res.Entries); err != nil {
			return err
		}
	}

	return nil
}

// decodeArray decodes an array of *manifestEntry and returns them in output. If
// an error occurs output may contain intermediate state.
//
// This can be made into a generic function pretty easily if it's needed in
// other places.
func decodeArray(dec *json.Decoder, output *[]*manifestEntry) error {

View on GitHub (pinned to 82495e54b5)