{"record":{"id":"aebf802ff3f1edfa","repo":"hyperledger/fabric","slug":"invalid-signature-policy-rule-s","errorCode":null,"errorMessage":"invalid signature policy rule '%s'","messagePattern":"invalid signature policy rule '(.+?)'","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/configtxgen/encoder/encoder.go","lineNumber":115,"sourceCode":"\n\tfor policyName, policy := range policyMap {\n\t\tswitch policy.Type {\n\t\tcase ImplicitMetaPolicyType:\n\t\t\timp, err := policies.ImplicitMetaFromString(policy.Rule)\n\t\t\tif err != nil {\n\t\t\t\treturn errors.Wrapf(err, \"invalid implicit meta policy rule '%s'\", policy.Rule)\n\t\t\t}\n\t\t\tcg.Policies[policyName] = &cb.ConfigPolicy{\n\t\t\t\tModPolicy: modPolicy,\n\t\t\t\tPolicy: &cb.Policy{\n\t\t\t\t\tType:  int32(cb.Policy_IMPLICIT_META),\n\t\t\t\t\tValue: protoutil.MarshalOrPanic(imp),\n\t\t\t\t},\n\t\t\t}\n\t\tcase SignaturePolicyType:\n\t\t\tsp, err := policydsl.FromString(policy.Rule)\n\t\t\tif err != nil {\n\t\t\t\treturn errors.Wrapf(err, \"invalid signature policy rule '%s'\", policy.Rule)\n\t\t\t}\n\t\t\tcg.Policies[policyName] = &cb.ConfigPolicy{\n\t\t\t\tModPolicy: modPolicy,\n\t\t\t\tPolicy: &cb.Policy{\n\t\t\t\t\tType:  int32(cb.Policy_SIGNATURE),\n\t\t\t\t\tValue: protoutil.MarshalOrPanic(sp),\n\t\t\t\t},\n\t\t\t}\n\t\tdefault:\n\t\t\treturn errors.Errorf(\"unknown policy type: %s\", policy.Type)\n\t\t}\n\t}\n\treturn nil\n}\n\n// NewChannelGroup defines the root of the channel configuration.  It defines basic operating principles like the hashing\n// algorithm used for the blocks, as well as the location of the ordering service.  It will recursively call into the\n// NewOrdererGroup, NewConsortiumsGroup, and NewApplicationGroup depending on whether these sub-elements are set in the","sourceCodeStart":97,"sourceCodeEnd":133,"githubUrl":"https://github.com/hyperledger/fabric/blob/2736b63f8fd5932511d56fe68b7039d15977f7f6/internal/configtxgen/encoder/encoder.go#L97-L133","documentation":"Wrapped error in AddPolicies: the SignaturePolicyType policy's Rule string could not be parsed by policydsl.FromString. The user-supplied rule in the config profile (e.g. in configtx.yaml) is not a valid signature policy DSL expression such as \"AND('Org1.peer', 'Org2.peer')\"; the wrapped error describes the parse failure.","triggerScenarios":"Thrown at internal/configtxgen/encoder/encoder.go:115 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Fix the policy.Rule string in the profile to use valid signature policy DSL syntax, e.g. AND('Org1MSP.peer', 'Org2MSP.peer') or OR(...)","Quote MSP principals with single quotes and use only AND/OR/OutOf/NOf operators as documented by policydsl","Run configtxgen after editing configtx.yaml; the wrapped parse error names the offending character or token"],"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-08T10:18:20.063Z"}