SPDXVersion: SPDX-2.1 DataLicense: CC0-1.0 SPDXID: SPDXRef-DOCUMENT DocumentName: project DocumentNamespace: http://spdx.org/spdxdocs/spdx-v2.1-4354318a-5120-49b3-b2b8-e30af209d65e Creator: Person: Anonymous () Creator: Organization: Anonymous () Creator: Tool: reuse-6.1.0 Created: 2026-05-31T02:25:00Z CreatorComment: This document was created automatically using available reuse information consistent with REUSE. Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-ab226df8dbeeb7112a40ada7849832ff Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-7a572fb55adb3c48d4bc109400484952 Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-b661053b49361229ced57998d9da1932 Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-fdb385f9e3a00a0e165471085e88ec77 Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-62cd8ac6f03dbf083e37746ea7829c1e Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-37353a60a160a8983d93b522581fb08a Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-675555e40ac44c5f4dd1ecaa06d034ff Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-b00a7d282db597eb95a148d32d88cae7 Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-96ba5d8f65b1dd21700ea51aaeb650b3 Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-06e3ff856c541b223ed78b7806661ce3 Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-594c64ffe68fb1ecab796c95328fed9f Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-4072cb6c82710477bcd7ce529c12186f Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-ee6553130c8980a3d0c4ab80ebffffda Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-c7f697f47586980d72706f270f45a59f Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-3f943748963d3a0e1ded4afc1f959580 Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-0dec53e29bd8bd035a9d0e2b33e2dba2 Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-e8188274b0c4a8a8ee41f063fa75b452 Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-210cd4514e3240bc34d1d838162c7b20 Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-5ae4eecf740659d4504bd4dfbb56ff9f Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-49d5d4f5b3645c1fad20996745aee245 Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-cf4293b16b56bf58bd49fa65d077bff1 Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-deecee505ab981979f99558bd97e8ae2 Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-0203418f714eabb565c4df4b2a09d774 Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-a2abc97e82d710f92148a041f5f3989d Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-431ae489cdc2c2992f059408be71dfd3 Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-584465786281abd41b79f3c5762fa44c Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-a5d971249e9d709b092acdbb47027d58 Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-e2e536f0c4aed9909c2bd5dbadb896cb Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-dc44825a00353f7302e1c8716c662fe2 Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-09b97390eba31cbfff14ee7988802b83 Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-b72096e67397713bab426a32d34bf064 Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-9fa4be977aca9770787aec2dec0efaf5 Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-4c0447a1c9c5da77e74f5d1fbea29d7b Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-028383730942f682619e189bf97faba5 Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-6350383d62c9b285659b5fdb3f1643df Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-3c66eb932da4e7ed9b6c75452373fdd7 Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-9496c06713c0e23073990eb677985d76 Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-4e709e44c884d15b2182be00f12a9449 Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-9059ee84a65fad8187219e0c2902c0af Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-64996558f43f3ffa74e008e5df783d1b Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-3508775a1f5a786f965d5e93a7a587a7 Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-0f97c818b69ede260975c8591d1c64ad Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-bf47f3579c4581f35caf065989dd37cb Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-256f69665bf4c8524f0d0830f93be50a Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-3bffbb4794666123185bb5c1493c43c8 Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-fc69dcea8decb7a8c615fbab104eb5e8 Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-70f568be19526fcbeba262198a5462b4 FileName: ./.check.exs SPDXID: SPDXRef-ab226df8dbeeb7112a40ada7849832ff FileChecksum: SHA1: f30ba08debea3c22737e5441cd0ed3ddd23f220c LicenseConcluded: NOASSERTION LicenseInfoInFile: Apache-2.0 FileCopyrightText: SPDX-FileCopyrightText: 2026 James Harton FileName: ./.formatter.exs SPDXID: SPDXRef-7a572fb55adb3c48d4bc109400484952 FileChecksum: SHA1: 8e8f67a71b9397cedba371efa0291963d10a4590 LicenseConcluded: NOASSERTION LicenseInfoInFile: Apache-2.0 FileCopyrightText: SPDX-FileCopyrightText: 2026 James Harton FileName: ./.github/workflows/ci.yml SPDXID: SPDXRef-b661053b49361229ced57998d9da1932 FileChecksum: SHA1: b934174679a9126bf6f5810d426abb03e76290e5 LicenseConcluded: NOASSERTION LicenseInfoInFile: Apache-2.0 FileCopyrightText: SPDX-FileCopyrightText: 2026 James Harton FileName: ./.gitignore SPDXID: SPDXRef-fdb385f9e3a00a0e165471085e88ec77 FileChecksum: SHA1: 0c3e9621360e8b2ac6d7af358aa08452d122184d LicenseConcluded: NOASSERTION LicenseInfoInFile: Apache-2.0 FileCopyrightText: SPDX-FileCopyrightText: 2026 James Harton FileName: ./.mcp.json SPDXID: SPDXRef-62cd8ac6f03dbf083e37746ea7829c1e FileChecksum: SHA1: dd64417b2a2a6b20159554ee58096cb75221c0bc LicenseConcluded: NOASSERTION LicenseInfoInFile: Apache-2.0 FileCopyrightText: SPDX-FileCopyrightText: 2026 James Harton FileName: ./.tool-versions SPDXID: SPDXRef-37353a60a160a8983d93b522581fb08a FileChecksum: SHA1: 878a9f743c3e3b5cbd9598b8fd34d7f7e369cbc4 LicenseConcluded: NOASSERTION LicenseInfoInFile: Apache-2.0 FileCopyrightText: SPDX-FileCopyrightText: 2026 James Harton FileName: ./CHANGELOG.md SPDXID: SPDXRef-675555e40ac44c5f4dd1ecaa06d034ff FileChecksum: SHA1: c2bad43feed120ac5ae3fb3d7ac2e700dc5bf08e LicenseConcluded: NOASSERTION LicenseInfoInFile: Apache-2.0 FileCopyrightText: SPDX-FileCopyrightText: 2026 James Harton FileName: ./README.md SPDXID: SPDXRef-b00a7d282db597eb95a148d32d88cae7 FileChecksum: SHA1: 811d9c2f7787068fb3d2461270b364a6328faf41 LicenseConcluded: NOASSERTION LicenseInfoInFile: Apache-2.0 FileCopyrightText: SPDX-FileCopyrightText: 2026 James Harton FileName: ./config/config.exs SPDXID: SPDXRef-96ba5d8f65b1dd21700ea51aaeb650b3 FileChecksum: SHA1: a9f0d7b5ea56fc7f53848e1ebfe606e42739b16a LicenseConcluded: NOASSERTION LicenseInfoInFile: Apache-2.0 FileCopyrightText: SPDX-FileCopyrightText: 2026 James Harton FileName: ./lib/bb/mcp.ex SPDXID: SPDXRef-06e3ff856c541b223ed78b7806661ce3 FileChecksum: SHA1: b467da0f4c4629145b7bc2ad8199ebbb9a04c929 LicenseConcluded: NOASSERTION LicenseInfoInFile: Apache-2.0 FileCopyrightText: SPDX-FileCopyrightText: 2026 James Harton FileName: ./lib/bb/mcp/event_buffer.ex SPDXID: SPDXRef-594c64ffe68fb1ecab796c95328fed9f FileChecksum: SHA1: c82c457807ed8907cdd169cffa46df3d416fe075 LicenseConcluded: NOASSERTION LicenseInfoInFile: Apache-2.0 FileCopyrightText: SPDX-FileCopyrightText: 2026 James Harton FileName: ./lib/bb/mcp/event_buffer/serializer.ex SPDXID: SPDXRef-4072cb6c82710477bcd7ce529c12186f FileChecksum: SHA1: cf26e083592e2bb62e6a72ed27b810f155d7dc9c LicenseConcluded: NOASSERTION LicenseInfoInFile: Apache-2.0 FileCopyrightText: SPDX-FileCopyrightText: 2026 James Harton FileName: ./lib/bb/mcp/json_schema.ex SPDXID: SPDXRef-ee6553130c8980a3d0c4ab80ebffffda FileChecksum: SHA1: f8ef222973863dc4d9be537dab94992eab97d8f4 LicenseConcluded: NOASSERTION LicenseInfoInFile: Apache-2.0 FileCopyrightText: SPDX-FileCopyrightText: 2026 James Harton FileName: ./lib/bb/mcp/peri_schema.ex SPDXID: SPDXRef-c7f697f47586980d72706f270f45a59f FileChecksum: SHA1: 85421ab30f80a5a82c96802bf445f70bb3e41213 LicenseConcluded: NOASSERTION LicenseInfoInFile: Apache-2.0 FileCopyrightText: SPDX-FileCopyrightText: 2026 James Harton FileName: ./lib/bb/mcp/resources.ex SPDXID: SPDXRef-3f943748963d3a0e1ded4afc1f959580 FileChecksum: SHA1: a4af0251046731332e3092cb596103859d7251b3 LicenseConcluded: NOASSERTION LicenseInfoInFile: Apache-2.0 FileCopyrightText: SPDX-FileCopyrightText: 2026 James Harton FileName: ./lib/bb/mcp/resources/robot_commands.ex SPDXID: SPDXRef-0dec53e29bd8bd035a9d0e2b33e2dba2 FileChecksum: SHA1: d22ec54eb4db2b0d881c7ffd8dda91ee7d7cd20f LicenseConcluded: NOASSERTION LicenseInfoInFile: Apache-2.0 FileCopyrightText: SPDX-FileCopyrightText: 2026 James Harton FileName: ./lib/bb/mcp/resources/robot_index.ex SPDXID: SPDXRef-e8188274b0c4a8a8ee41f063fa75b452 FileChecksum: SHA1: 4970454eaf94db25af9e68627a6870aab4ce64f9 LicenseConcluded: NOASSERTION LicenseInfoInFile: Apache-2.0 FileCopyrightText: SPDX-FileCopyrightText: 2026 James Harton FileName: ./lib/bb/mcp/resources/robot_joints.ex SPDXID: SPDXRef-210cd4514e3240bc34d1d838162c7b20 FileChecksum: SHA1: 51a2ad805e2b165848b1b88601ff3cd37e6531ac LicenseConcluded: NOASSERTION LicenseInfoInFile: Apache-2.0 FileCopyrightText: SPDX-FileCopyrightText: 2026 James Harton FileName: ./lib/bb/mcp/resources/robot_parameters.ex SPDXID: SPDXRef-5ae4eecf740659d4504bd4dfbb56ff9f FileChecksum: SHA1: a85ca4af6b1d6d6e1d0c2c43038e7a52c355f2b7 LicenseConcluded: NOASSERTION LicenseInfoInFile: Apache-2.0 FileCopyrightText: SPDX-FileCopyrightText: 2026 James Harton FileName: ./lib/bb/mcp/resources/robot_state.ex SPDXID: SPDXRef-49d5d4f5b3645c1fad20996745aee245 FileChecksum: SHA1: 51c9adb23f425b32a5a2fe7b236bcd3d07e6a025 LicenseConcluded: NOASSERTION LicenseInfoInFile: Apache-2.0 FileCopyrightText: SPDX-FileCopyrightText: 2026 James Harton FileName: ./lib/bb/mcp/resources/robot_topology.ex SPDXID: SPDXRef-cf4293b16b56bf58bd49fa65d077bff1 FileChecksum: SHA1: 441f050998b946726cd9c29793af8a0dd6c8b635 LicenseConcluded: NOASSERTION LicenseInfoInFile: Apache-2.0 FileCopyrightText: SPDX-FileCopyrightText: 2026 James Harton FileName: ./lib/bb/mcp/robots.ex SPDXID: SPDXRef-deecee505ab981979f99558bd97e8ae2 FileChecksum: SHA1: 892a64d9735ef7e866384ceb72522d8677ba8b4b LicenseConcluded: NOASSERTION LicenseInfoInFile: Apache-2.0 FileCopyrightText: SPDX-FileCopyrightText: 2026 James Harton FileName: ./lib/bb/mcp/router.ex SPDXID: SPDXRef-0203418f714eabb565c4df4b2a09d774 FileChecksum: SHA1: 14883cdc06c55f661b078777abc9668a62029e86 LicenseConcluded: NOASSERTION LicenseInfoInFile: Apache-2.0 FileCopyrightText: SPDX-FileCopyrightText: 2026 James Harton FileName: ./lib/bb/mcp/server.ex SPDXID: SPDXRef-a2abc97e82d710f92148a041f5f3989d FileChecksum: SHA1: f821a354ce9f16d5a169e1ffab9decb40ed699f8 LicenseConcluded: NOASSERTION LicenseInfoInFile: Apache-2.0 FileCopyrightText: SPDX-FileCopyrightText: 2026 James Harton FileName: ./lib/bb/mcp/tools.ex SPDXID: SPDXRef-431ae489cdc2c2992f059408be71dfd3 FileChecksum: SHA1: f231e5e256af4d65a1c7237d299a8da9c466972c LicenseConcluded: NOASSERTION LicenseInfoInFile: Apache-2.0 FileCopyrightText: SPDX-FileCopyrightText: 2026 James Harton FileName: ./lib/bb/mcp/tools/force_disarm.ex SPDXID: SPDXRef-584465786281abd41b79f3c5762fa44c FileChecksum: SHA1: 4a6f91f3eb01ff223fa63f09f1173b01c1823c1a LicenseConcluded: NOASSERTION LicenseInfoInFile: Apache-2.0 FileCopyrightText: SPDX-FileCopyrightText: 2026 James Harton FileName: ./lib/bb/mcp/tools/get_parameter.ex SPDXID: SPDXRef-a5d971249e9d709b092acdbb47027d58 FileChecksum: SHA1: 41644ba0932819cd479b315b0ecf78c488efacae LicenseConcluded: NOASSERTION LicenseInfoInFile: Apache-2.0 FileCopyrightText: SPDX-FileCopyrightText: 2026 James Harton FileName: ./lib/bb/mcp/tools/get_state.ex SPDXID: SPDXRef-e2e536f0c4aed9909c2bd5dbadb896cb FileChecksum: SHA1: eaf64cad99a66688a03bf9c3dfb3cae7090fba18 LicenseConcluded: NOASSERTION LicenseInfoInFile: Apache-2.0 FileCopyrightText: SPDX-FileCopyrightText: 2026 James Harton FileName: ./lib/bb/mcp/tools/list_commands.ex SPDXID: SPDXRef-dc44825a00353f7302e1c8716c662fe2 FileChecksum: SHA1: ab5992954891e7525f610b769c6108b16c459bc6 LicenseConcluded: NOASSERTION LicenseInfoInFile: Apache-2.0 FileCopyrightText: SPDX-FileCopyrightText: 2026 James Harton FileName: ./lib/bb/mcp/tools/list_parameters.ex SPDXID: SPDXRef-09b97390eba31cbfff14ee7988802b83 FileChecksum: SHA1: 2fda7de3a178b02b6362a02e4433d76aec97d0ea LicenseConcluded: NOASSERTION LicenseInfoInFile: Apache-2.0 FileCopyrightText: SPDX-FileCopyrightText: 2026 James Harton FileName: ./lib/bb/mcp/tools/list_robots.ex SPDXID: SPDXRef-b72096e67397713bab426a32d34bf064 FileChecksum: SHA1: def38d24cb2376325a447dc372b78a09305d08cb LicenseConcluded: NOASSERTION LicenseInfoInFile: Apache-2.0 FileCopyrightText: SPDX-FileCopyrightText: 2026 James Harton FileName: ./lib/bb/mcp/tools/query_events.ex SPDXID: SPDXRef-9fa4be977aca9770787aec2dec0efaf5 FileChecksum: SHA1: 531417f5212f1064f9dcfba647ec64de83687818 LicenseConcluded: NOASSERTION LicenseInfoInFile: Apache-2.0 FileCopyrightText: SPDX-FileCopyrightText: 2026 James Harton FileName: ./lib/bb/mcp/tools/send_joint_positions.ex SPDXID: SPDXRef-4c0447a1c9c5da77e74f5d1fbea29d7b FileChecksum: SHA1: 16569071af5750020e7bdc93c5107150c43f2d8c LicenseConcluded: NOASSERTION LicenseInfoInFile: Apache-2.0 FileCopyrightText: SPDX-FileCopyrightText: 2026 James Harton FileName: ./lib/bb/mcp/tools/set_parameter.ex SPDXID: SPDXRef-028383730942f682619e189bf97faba5 FileChecksum: SHA1: e3c81e716b5f0e17851e6047856736f6a63fbe0c LicenseConcluded: NOASSERTION LicenseInfoInFile: Apache-2.0 FileCopyrightText: SPDX-FileCopyrightText: 2026 James Harton FileName: ./lib/mix/tasks/bb_mcp.install.ex SPDXID: SPDXRef-6350383d62c9b285659b5fdb3f1643df FileChecksum: SHA1: 616bc27935459a4a38cedc8783db47bb490b44de LicenseConcluded: NOASSERTION LicenseInfoInFile: Apache-2.0 FileCopyrightText: SPDX-FileCopyrightText: 2026 James Harton FileName: ./mix.exs SPDXID: SPDXRef-3c66eb932da4e7ed9b6c75452373fdd7 FileChecksum: SHA1: 43315bc22586cc7e4f2138837f038e46cae14d60 LicenseConcluded: NOASSERTION LicenseInfoInFile: Apache-2.0 FileCopyrightText: SPDX-FileCopyrightText: 2026 James Harton FileName: ./mix.lock SPDXID: SPDXRef-9496c06713c0e23073990eb677985d76 FileChecksum: SHA1: c8e480e265632bc4251cc6ec505f02f6f39bf9f9 LicenseConcluded: NOASSERTION LicenseInfoInFile: Apache-2.0 FileCopyrightText: SPDX-FileCopyrightText: 2026 James Harton FileName: ./renovate.json SPDXID: SPDXRef-4e709e44c884d15b2182be00f12a9449 FileChecksum: SHA1: 61b2605c75c4e56b797521a30e023b9895a9e845 LicenseConcluded: NOASSERTION LicenseInfoInFile: Apache-2.0 FileCopyrightText: SPDX-FileCopyrightText: 2026 James Harton FileName: ./test/bb/mcp/event_buffer_test.exs SPDXID: SPDXRef-9059ee84a65fad8187219e0c2902c0af FileChecksum: SHA1: d3163fbe408933ea596b1f1e7ca89aa32dd555cf LicenseConcluded: NOASSERTION LicenseInfoInFile: Apache-2.0 FileCopyrightText: SPDX-FileCopyrightText: 2026 James Harton FileName: ./test/bb/mcp/json_schema_test.exs SPDXID: SPDXRef-64996558f43f3ffa74e008e5df783d1b FileChecksum: SHA1: 98323a4ddb430e09e1bad9df1e446d2c1b138930 LicenseConcluded: NOASSERTION LicenseInfoInFile: Apache-2.0 FileCopyrightText: SPDX-FileCopyrightText: 2026 James Harton FileName: ./test/bb/mcp/peri_schema_test.exs SPDXID: SPDXRef-3508775a1f5a786f965d5e93a7a587a7 FileChecksum: SHA1: 336a3f96a1d493caf334d3e14d766433842bafa3 LicenseConcluded: NOASSERTION LicenseInfoInFile: Apache-2.0 FileCopyrightText: SPDX-FileCopyrightText: 2026 James Harton FileName: ./test/bb/mcp/robots_test.exs SPDXID: SPDXRef-0f97c818b69ede260975c8591d1c64ad FileChecksum: SHA1: 8bce6419e6499d9438f092b02cc031f926b6c0c1 LicenseConcluded: NOASSERTION LicenseInfoInFile: Apache-2.0 FileCopyrightText: SPDX-FileCopyrightText: 2026 James Harton FileName: ./test/bb/mcp/server_test.exs SPDXID: SPDXRef-bf47f3579c4581f35caf065989dd37cb FileChecksum: SHA1: 219ac1e171de188e678c276796d3de98ccbf0573 LicenseConcluded: NOASSERTION LicenseInfoInFile: Apache-2.0 FileCopyrightText: SPDX-FileCopyrightText: 2026 James Harton FileName: ./test/bb/mcp/tools_test.exs SPDXID: SPDXRef-256f69665bf4c8524f0d0830f93be50a FileChecksum: SHA1: b1b56fff644b5d0a204a517b59fd9335210f3960 LicenseConcluded: NOASSERTION LicenseInfoInFile: Apache-2.0 FileCopyrightText: SPDX-FileCopyrightText: 2026 James Harton FileName: ./test/mix/tasks/bb_mcp.install_test.exs SPDXID: SPDXRef-3bffbb4794666123185bb5c1493c43c8 FileChecksum: SHA1: 03000a8a6deabe967bb28a01bd078be31a509326 LicenseConcluded: NOASSERTION LicenseInfoInFile: Apache-2.0 FileCopyrightText: SPDX-FileCopyrightText: 2026 James Harton FileName: ./test/support/fixture_robot.ex SPDXID: SPDXRef-fc69dcea8decb7a8c615fbab104eb5e8 FileChecksum: SHA1: d133a3810395e64f88ce6094e6c26c1566f211f8 LicenseConcluded: NOASSERTION LicenseInfoInFile: Apache-2.0 FileCopyrightText: SPDX-FileCopyrightText: 2026 James Harton FileName: ./test/test_helper.exs SPDXID: SPDXRef-70f568be19526fcbeba262198a5462b4 FileChecksum: SHA1: e5a682cf156c0da6e0cf674b812f33ffe5bc3a26 LicenseConcluded: NOASSERTION LicenseInfoInFile: Apache-2.0 FileCopyrightText: SPDX-FileCopyrightText: 2026 James Harton