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
- Locate the corrupt manifest content and restore it from a backup or unaffected storage copy.
- Run repository verification/repair (e.g. kopia repository verify / blob list reconciliation) to find damaged contents.
- 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
- Never hand-edit manifest blobs.
- Run periodic repository verification to catch corrupted contents early.
- Keep storage-level backups of manifest contents.
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
- decompression error
- error deleting old
- error invalid persisted password
- error iterating index entries
- error listing ACL manifests
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)