{"record":{"id":"40a1a67bd89e7716","repo":"hyperledger/fabric","slug":"invalid-configuration-block-missing-s-configurat-40a1a6","errorCode":null,"errorMessage":"Invalid configuration block, missing %s configuration group","messagePattern":"Invalid configuration block, missing (.+?) configuration group","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"core/scc/cscc/configure.go","lineNumber":242,"sourceCode":"\tif err != nil {\n\t\treturn errors.Errorf(\"Bad configuration envelope: %s\", err)\n\t}\n\n\tif configEnv.Config == nil {\n\t\treturn errors.New(\"Nil config envelope Config\")\n\t}\n\n\tif configEnv.Config.ChannelGroup == nil {\n\t\treturn errors.New(\"Nil channel group\")\n\t}\n\n\tif configEnv.Config.ChannelGroup.Groups == nil {\n\t\treturn errors.New(\"No channel configuration groups are available\")\n\t}\n\n\t_, exists := configEnv.Config.ChannelGroup.Groups[channelconfig.ApplicationGroupKey]\n\tif !exists {\n\t\treturn errors.Errorf(\"Invalid configuration block, missing %s \"+\n\t\t\t\"configuration group\", channelconfig.ApplicationGroupKey)\n\t}\n\n\t// Check the capabilities requirement\n\tif err = channelconfig.ValidateCapabilities(block, bccsp); err != nil {\n\t\treturn errors.Errorf(\"Failed capabilities check: [%s]\", err)\n\t}\n\n\treturn nil\n}\n\n// joinChain will join the specified chain in the configuration block.\n// Since it is the first block, it is the genesis block containing configuration\n// for this chain, so we want to update the Chain object with this info\nfunc (e *PeerConfiger) joinChain(\n\tchannelID string,\n\tblock *common.Block,\n\tdeployedCCInfoProvider ledger.DeployedChaincodeInfoProvider,","sourceCodeStart":224,"sourceCodeEnd":260,"githubUrl":"https://github.com/hyperledger/fabric/blob/2736b63f8fd5932511d56fe68b7039d15977f7f6/core/scc/cscc/configure.go#L224-L260","documentation":"The channel's top-level Groups map exists but does not contain an entry keyed by channelconfig.ApplicationGroupKey (\"Application\"). A channel that will host chaincode must define an Application configuration group (application organizations, ACLs, capabilities); cscc rejects channel creation when it is absent, e.g. an orderer-only config.","triggerScenarios":"Creating a channel from a configtxgen profile without an Application section (orderer-only profile); a config update that removed the Application group; submitting the genesis block of a system-channel-style or consortium-less config to JoinChain.","commonSituations":"Users reusing the orderer genesis profile as a channel creation profile; configtx.yaml profiles missing `Application: <<: *ApplicationDefaults` or with no Application Organizations; team upgrades that dropped Application capabilities/orgs during config edits.","solutions":["Edit configtx.yaml so the profile includes an Application section with at least one application organization and `Application: <<: *ApplicationDefaults`, then regenerate with configtxgen","Verify with `configtxgen -inspectChannelCreateTx config.tx` that the Application group appears","If the group was removed by an update, re-add Application group members via a config update computed with configtxlator compute-update","Ensure the peer creating the channel expects an application channel, not the orderer system channel"],"exampleFix":"# before (configtx.yaml profile)\nTwoOrgsChannel:\n  Orderer:\n    Organizations: [OrdererOrg]\n# after\nTwoOrgsChannel:\n  Orderer:\n    Organizations: [OrdererOrg]\n  Application:\n    <<: *ApplicationDefaults\n    Organizations: [Org1, Org2]","handlingStrategy":"validation","validationCode":"_, ok := cfg.GetChannelGroup().GetGroups()[channelconfig.ApplicationGroupKey]\nif !ok {\n    return errors.New(\"Application group missing from channel config\")\n}","typeGuard":"func hasApplicationGroup(cfg *common.Config) bool {\n    _, ok := cfg.GetChannelGroup().GetGroups()[channelconfig.ApplicationGroupKey]\n    return ok\n}","tryCatchPattern":"if _, exists := cfg.GetChannelGroup().GetGroups()[channelconfig.ApplicationGroupKey]; !exists {\n    return fmt.Errorf(\"profile lacks Application section: add it to configtx.yaml and regenerate\")\n}","preventionTips":["Always include an Application section (with at least one org) in channel-creation profiles","Do not reuse orderer genesis profiles for application channels","Run `configtxgen -inspectChannelCreateTx` to confirm the Application group exists","Re-check profile inheritance (<<: *ApplicationDefaults) after YAML edits"],"tags":["fabric","system-chaincode","channel-config","missing-application-group"],"backgroundTag":"missing-application-group","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"}