{"record":{"id":"ddbc64fe22b03a00","repo":"hyperledger/fabric","slug":"no-packages-provided-to-collate","errorCode":null,"errorMessage":"no packages provided to collate","messagePattern":"no packages provided to collate","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"core/common/ccpackage/ccpackage.go","lineNumber":116,"sourceCode":"\tchdr := protoutil.MakeChannelHeader(common.HeaderType_CHAINCODE_PACKAGE, msgVersion, \"\", epoch)\n\n\t// create the payload\n\tpayl := &common.Payload{Header: &common.Header{ChannelHeader: protoutil.MarshalOrPanic(chdr)}, Data: cipbytes}\n\tpaylBytes, err := protoutil.GetBytesPayload(payl)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// here's the unsigned  envelope. The install package is endorsed if signingEntity != nil\n\treturn &common.Envelope{Payload: paylBytes}, nil\n}\n\n// CreateSignedCCDepSpecForInstall creates the final package from a set of packages signed by\n// owners.  This is similar to how the SDK assembles a TX from various proposal\n// responses from the signatures.\nfunc CreateSignedCCDepSpecForInstall(pack []*common.Envelope) (*common.Envelope, error) {\n\tif len(pack) == 0 {\n\t\treturn nil, errors.New(\"no packages provided to collate\")\n\t}\n\n\t// rules...\n\t//   all packages must be endorsed or all packages should not be endorsed\n\t//   the chaincode deployment spec should be same\n\tvar baseCip *peer.SignedChaincodeDeploymentSpec\n\tvar err error\n\tvar endorsementExists bool\n\tvar endorsements []*peer.Endorsement\n\tfor n, r := range pack {\n\t\tp := &common.Payload{}\n\t\tif err = proto.Unmarshal(r.Payload, p); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tcip := &peer.SignedChaincodeDeploymentSpec{}\n\t\tif err = proto.Unmarshal(p.Data, cip); err != nil {\n\t\t\treturn nil, err","sourceCodeStart":98,"sourceCodeEnd":134,"githubUrl":"https://github.com/hyperledger/fabric/blob/2736b63f8fd5932511d56fe68b7039d15977f7f6/core/common/ccpackage/ccpackage.go#L98-L134","documentation":"Returned by CreateSignedCCDepSpecForInstall's collation path when the owners slice is empty — no owner-signed packages were supplied to merge. Collating zero packages would produce an unendorsed install package, which the function's contract forbids.","triggerScenarios":"Thrown at core/common/ccpackage/ccpackage.go:116 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Pass at least one package produced by OwnerCreateSignedCCDepSpec","Check upstream slicing/filtering logic that may have emptied the package list"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"2736b63f8fd5932511d56fe68b7039d15977f7f6","analyzedAt":"2026-09-04T08:52:36.465Z","contentChangedAt":"2026-09-04T08:52:36.465Z","schemaVersion":2},"datasetVersion":"2026-09-08T15:18:49.778Z"}