After creating a branch, the response for a channel map has that branch repeated several times in the packages.channels key.
How to reproduce the problem:
# starting here:
$ charmcraft status testfacu-charm
Track Base Channel Version Revision
latest ubuntu 18.04 (amd64) stable - -
candidate - -
beta - -
edge 1 1
ubuntu 18.04 (arm64) stable - -
candidate - -
beta - -
edge 1 1
ubuntu 18.04 (armhf) stable - -
candidate - -
beta - -
edge 1 1
ubuntu 18.04 (i386) stable - -
candidate - -
beta - -
edge 1 1
ubuntu 18.04 (powerpc) stable - -
candidate - -
beta - -
edge 1 1
ubuntu 18.04 (ppc64el) stable - -
candidate - -
beta - -
edge 1 1
ubuntu 18.04 (riscv64) stable - -
candidate - -
beta - -
edge 1 1
ubuntu 18.04 (s390x) stable - -
candidate - -
beta - -
edge 1 1
# then release:
$ charmcraft release testfacu-charm -r 1 --channel=edge/branch123 --resource=otherstuff:1 --resource=testresource:1
Revision 1 of charm 'testfacu-charm' released to edge/branch123 (attaching resources: 'otherstuff' r1, 'testresource' r1)
# then get the status ("charmcraft status testfacu-charm") which ends up hitting a GET on "/v1/charm/testfacu-charm/releases", and the raw response is:
{'channel-map': [{'base': {'architecture': 'amd64', 'channel': '18.04', 'name': 'ubuntu'}, 'channel': 'latest/edge/branch123', 'expiration-date': '2022-11-25T00:00:00Z', 'progressive': {'paused': None, 'percentage': None}, 'resources': [{'name': 'otherstuff', 'revision': 1, 'type': 'file'}, {'name': 'testresource', 'revision': 1, 'type': 'file'}], 'revision': 1, 'when': '2022-10-26T14:01:19Z'}, {'base': {'architecture': 'amd64', 'channel': '18.04', 'name': 'ubuntu'}, 'channel': 'latest/edge', 'expiration-date': None, 'progressive': {'paused': None, 'percentage': None}, 'resources': [], 'revision': 1, 'when': '2022-08-18T18:40:13Z'}, {'base': {'architecture': 'arm64', 'channel': '18.04', 'name': 'ubuntu'}, 'channel': 'latest/edge/branch123', 'expiration-date': '2022-11-25T00:00:00Z', 'progressive': {'paused': None, 'percentage': None}, 'resources': [{'name': 'otherstuff', 'revision': 1, 'type': 'file'}, {'name': 'testresource', 'revision': 1, 'type': 'file'}], 'revision': 1, 'when': '2022-10-26T14:01:19Z'}, {'base': {'architecture': 'arm64', 'channel': '18.04', 'name': 'ubuntu'}, 'channel': 'latest/edge', 'expiration-date': None, 'progressive': {'paused': None, 'percentage': None}, 'resources': [], 'revision': 1, 'when': '2022-08-18T18:40:13Z'}, {'base': {'architecture': 'armhf', 'channel': '18.04', 'name': 'ubuntu'}, 'channel': 'latest/edge/branch123', 'expiration-date': '2022-11-25T00:00:00Z', 'progressive': {'paused': None, 'percentage': None}, 'resources': [{'name': 'otherstuff', 'revision': 1, 'type': 'file'}, {'name': 'testresource', 'revision': 1, 'type': 'file'}], 'revision': 1, 'when': '2022-10-26T14:01:19Z'}, {'base': {'architecture': 'armhf', 'channel': '18.04', 'name': 'ubuntu'}, 'channel': 'latest/edge', 'expiration-date': None, 'progressive': {'paused': None, 'percentage': None}, 'resources': [], 'revision': 1, 'when': '2022-08-18T18:40:13Z'}, {'base': {'architecture': 'i386', 'channel': '18.04', 'name': 'ubuntu'}, 'channel': 'latest/edge/branch123', 'expiration-date': '2022-11-25T00:00:00Z', 'progressive': {'paused': None, 'percentage': None}, 'resources': [{'name': 'otherstuff', 'revision': 1, 'type': 'file'}, {'name': 'testresource', 'revision': 1, 'type': 'file'}], 'revision': 1, 'when': '2022-10-26T14:01:19Z'}, {'base': {'architecture': 'i386', 'channel': '18.04', 'name': 'ubuntu'}, 'channel': 'latest/edge', 'expiration-date': None, 'progressive': {'paused': None, 'percentage': None}, 'resources': [], 'revision': 1, 'when': '2022-08-18T18:40:13Z'}, {'base': {'architecture': 'powerpc', 'channel': '18.04', 'name': 'ubuntu'}, 'channel': 'latest/edge/branch123', 'expiration-date': '2022-11-25T00:00:00Z', 'progressive': {'paused': None, 'percentage': None}, 'resources': [{'name': 'otherstuff', 'revision': 1, 'type': 'file'}, {'name': 'testresource', 'revision': 1, 'type': 'file'}], 'revision': 1, 'when': '2022-10-26T14:01:19Z'}, {'base': {'architecture': 'powerpc', 'channel': '18.04', 'name': 'ubuntu'}, 'channel': 'latest/edge', 'expiration-date': None, 'progressive': {'paused': None, 'percentage': None}, 'resources': [], 'revision': 1, 'when': '2022-08-18T18:40:13Z'}, {'base': {'architecture': 'ppc64el', 'channel': '18.04', 'name': 'ubuntu'}, 'channel': 'latest/edge/branch123', 'expiration-date': '2022-11-25T00:00:00Z', 'progressive': {'paused': None, 'percentage': None}, 'resources': [{'name': 'otherstuff', 'revision': 1, 'type': 'file'}, {'name': 'testresource', 'revision': 1, 'type': 'file'}], 'revision': 1, 'when': '2022-10-26T14:01:19Z'}, {'base': {'architecture': 'ppc64el', 'channel': '18.04', 'name': 'ubuntu'}, 'channel': 'latest/edge', 'expiration-date': None, 'progressive': {'paused': None, 'percentage': None}, 'resources': [], 'revision': 1, 'when': '2022-08-18T18:40:13Z'}, {'base': {'architecture': 'riscv64', 'channel': '18.04', 'name': 'ubuntu'}, 'channel': 'latest/edge/branch123', 'expiration-date': '2022-11-25T00:00:00Z', 'progressive': {'paused': None, 'percentage': None}, 'resources': [{'name': 'otherstuff', 'revision': 1, 'type': 'file'}, {'name': 'testresource', 'revision': 1, 'type': 'file'}], 'revision': 1, 'when': '2022-10-26T14:01:19Z'}, {'base': {'architecture': 'riscv64', 'channel': '18.04', 'name': 'ubuntu'}, 'channel': 'latest/edge', 'expiration-date': None, 'progressive': {'paused': None, 'percentage': None}, 'resources': [], 'revision': 1, 'when': '2022-08-18T18:40:13Z'}, {'base': {'architecture': 's390x', 'channel': '18.04', 'name': 'ubuntu'}, 'channel': 'latest/edge/branch123', 'expiration-date': '2022-11-25T00:00:00Z', 'progressive': {'paused': None, 'percentage': None}, 'resources': [{'name': 'otherstuff', 'revision': 1, 'type': 'file'}, {'name': 'testresource', 'revision': 1, 'type': 'file'}], 'revision': 1, 'when': '2022-10-26T14:01:19Z'}, {'base': {'architecture': 's390x', 'channel': '18.04', 'name': 'ubuntu'}, 'channel': 'latest/edge', 'expiration-date': None, 'progressive': {'paused': None, 'percentage': None}, 'resources': [], 'revision': 1, 'when': '2022-08-18T18:40:13Z'}], 'package': {'channels': [{'branch': None, 'fallback': None, 'name': 'latest/stable', 'risk': 'stable', 'track': 'latest'}, {'branch': None, 'fallback': 'latest/stable', 'name': 'latest/candidate', 'risk': 'candidate', 'track': 'latest'}, {'branch': None, 'fallback': 'latest/candidate', 'name': 'latest/beta', 'risk': 'beta', 'track': 'latest'}, {'branch': None, 'fallback': 'latest/beta', 'name': 'latest/edge', 'risk': 'edge', 'track': 'latest'}, {'branch': 'branch123', 'fallback': 'latest/edge', 'name': 'latest/edge/branch123', 'risk': 'edge', 'track': 'latest'}, {'branch': 'branch123', 'fallback': 'latest/edge', 'name': 'latest/edge/branch123', 'risk': 'edge', 'track': 'latest'}, {'branch': 'branch123', 'fallback': 'latest/edge', 'name': 'latest/edge/branch123', 'risk': 'edge', 'track': 'latest'}, {'branch': 'branch123', 'fallback': 'latest/edge', 'name': 'latest/edge/branch123', 'risk': 'edge', 'track': 'latest'}, {'branch': 'branch123', 'fallback': 'latest/edge', 'name': 'latest/edge/branch123', 'risk': 'edge', 'track': 'latest'}, {'branch': 'branch123', 'fallback': 'latest/edge', 'name': 'latest/edge/branch123', 'risk': 'edge', 'track': 'latest'}, {'branch': 'branch123', 'fallback': 'latest/edge', 'name': 'latest/edge/branch123', 'risk': 'edge', 'track': 'latest'}, {'branch': 'branch123', 'fallback': 'latest/edge', 'name': 'latest/edge/branch123', 'risk': 'edge', 'track': 'latest'}]}, 'revisions': [{'bases': [{'architecture': 'all', 'channel': '18.04', 'name': 'ubuntu'}], 'created-at': '2021-02-11T14:32:58.411347', 'errors': None, 'revision': 1, 'sha3-384': '60fbab27bd5d100cb8e0539cef2b6e5b1507e5da4ac50beaa78a7793fbae5ccce4b3b093a498d476f2a54d71757f5ec1', 'size': 1907, 'status': 'released', 'version': '1'}]}
Check ["package"]["channels"] there ^, it has branches repeated too many times:
[
{'branch': None, 'fallback': None, 'name': 'latest/stable', 'risk': 'stable', 'track': 'latest'},
{'branch': None, 'fallback': 'latest/stable', 'name': 'latest/candidate', 'risk': 'candidate', 'track': 'latest'},
{'branch': None, 'fallback': 'latest/candidate', 'name': 'latest/beta', 'risk': 'beta', 'track': 'latest'},
{'branch': None, 'fallback': 'latest/beta', 'name': 'latest/edge', 'risk': 'edge', 'track': 'latest'},
{'branch': 'branch123', 'fallback': 'latest/edge', 'name': 'latest/edge/branch123', 'risk': 'edge', 'track': 'latest'},
{'branch': 'branch123', 'fallback': 'latest/edge', 'name': 'latest/edge/branch123', 'risk': 'edge', 'track': 'latest'},
{'branch': 'branch123', 'fallback': 'latest/edge', 'name': 'latest/edge/branch123', 'risk': 'edge', 'track': 'latest'},
{'branch': 'branch123', 'fallback': 'latest/edge', 'name': 'latest/edge/branch123', 'risk': 'edge', 'track': 'latest'},
{'branch': 'branch123', 'fallback': 'latest/edge', 'name': 'latest/edge/branch123', 'risk': 'edge', 'track': 'latest'},
{'branch': 'branch123', 'fallback': 'latest/edge', 'name': 'latest/edge/branch123', 'risk': 'edge', 'track': 'latest'},
{'branch': 'branch123', 'fallback': 'latest/edge', 'name': 'latest/edge/branch123', 'risk': 'edge', 'track': 'latest'},
{'branch': 'branch123', 'fallback': 'latest/edge', 'name': 'latest/edge/branch123', 'risk': 'edge', 'track': 'latest'},
]