{"record":{"id":"f843c146b0187609","repo":"linera-io/linera-protocol","slug":"unable-to-read-committee-config-file","errorCode":null,"errorMessage":"Unable to read committee config file","messagePattern":"Unable to read committee config file","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"error","filePath":"linera-service/src/cli/main.rs","lineNumber":2344,"sourceCode":"            maximum_block_size,\n            maximum_blob_size,\n            maximum_published_blobs,\n            maximum_bytecode_size,\n            maximum_block_proposal_size,\n            maximum_bytes_read_per_block,\n            maximum_bytes_written_per_block,\n            maximum_oracle_response_bytes,\n            maximum_http_response_bytes,\n            http_request_timeout_ms,\n            http_request_allow_list,\n            free_application_ids,\n            flags,\n            testing_prng_seed,\n            network_name,\n        } => {\n            let start_time = Instant::now();\n            let committee_config: CommitteeConfig = util::read_json(committee_config_path)\n                .expect(\"Unable to read committee config file\");\n            let existing_policy = policy_config.into_policy();\n            let policy = linera_execution::ResourceControlPolicy {\n                wasm_fuel_unit: wasm_fuel_unit_price.unwrap_or(existing_policy.wasm_fuel_unit),\n                evm_fuel_unit: evm_fuel_unit_price.unwrap_or(existing_policy.evm_fuel_unit),\n                read_operation: read_operation_price.unwrap_or(existing_policy.read_operation),\n                write_operation: write_operation_price.unwrap_or(existing_policy.write_operation),\n                byte_runtime: byte_runtime_price.unwrap_or(existing_policy.byte_runtime),\n                byte_read: byte_read_price.unwrap_or(existing_policy.byte_read),\n                byte_written: byte_written_price.unwrap_or(existing_policy.byte_written),\n                blob_read: blob_read_price.unwrap_or(existing_policy.blob_read),\n                blob_published: blob_published_price.unwrap_or(existing_policy.blob_published),\n                blob_byte_read: blob_byte_read_price.unwrap_or(existing_policy.blob_byte_read),\n                blob_byte_published: blob_byte_published_price\n                    .unwrap_or(existing_policy.blob_byte_published),\n                operation: operation_price.unwrap_or(existing_policy.operation),\n                operation_byte: operation_byte_price.unwrap_or(existing_policy.operation_byte),\n                message: message_price.unwrap_or(existing_policy.message),\n                message_byte: message_byte_price.unwrap_or(existing_policy.message_byte),","sourceCodeStart":2326,"sourceCodeEnd":2362,"githubUrl":"https://github.com/linera-io/linera-protocol/blob/6c226ddcb332ef55118dc8d0aafbd093d5420899/linera-service/src/cli/main.rs#L2326-L2362","documentation":"The create-genesis-config command reads the committee configuration with util::read_json(committee_config_path) and .expect(\"Unable to read committee config file\") panics if the file cannot be read or parsed. util::read_json both opens the path and deserializes JSON, so a missing file, wrong path, permission error, invalid JSON, or wrong schema all abort the process.","triggerScenarios":"Running create-genesis-config with a --committee-config-path that does not exist, contains malformed JSON, or holds valid JSON that does not deserialize into CommitteeConfig (e.g. missing validators, wrong key names, weights not numbers).","commonSituations":"Typo'd relative path run from a different working directory; JSON produced by a jq template with trailing commas or comments; schema drift after upgrading Linera (CommitteeConfig gained/renamed fields); permissions on shared validator setups.","solutions":["Verify the path exists and is readable, preferring absolute paths: ls -l /path/to/committee.json","Validate the JSON itself: jq . committee.json, then compare its fields against CommitteeConfig (validators with public keys, voting weights, network addresses)","Regenerate the committee config from a known-good template for your Linera version","Run the CLI from the directory the relative path was designed for, or convert the path to absolute"],"exampleFix":"# before\nlinera create-genesis-config committee.json --committee ... # path wrong/typo\n\n# after\njq . /etc/linera/committee.json   # confirms valid JSON + schema\nlinera create-genesis-config /etc/linera/committee.json ...","handlingStrategy":"validation","validationCode":"# Pre-flight the committee config before genesis creation.\nCONF=/etc/linera/committee.json\ntest -r \"$CONF\" || { echo \"committee config missing/unreadable: $CONF\" >&2; exit 1; }\njq -e '.validators | length > 0' \"$CONF\" >/dev/null || { echo 'committee config schema invalid' >&2; exit 1; }","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Use absolute config paths in all genesis scripts and systemd units","jq-validate configs after every hand edit or template render","Version-control committee configs and diff against the previous known-good one after Linera upgrades"],"tags":["linera","cli","genesis","config-file","json"],"backgroundTag":"config-file-invalid","analyzedSha":"6c226ddcb332ef55118dc8d0aafbd093d5420899","analyzedAt":"2026-08-22T22:49:09.787Z","schemaVersion":2},"datasetVersion":"2026-08-23T01:17:44.959Z"}