{"record":{"id":"34a9725656af9094","repo":"Hmbown/CodeWhale","slug":"fleet-task-metadata-coordination-contracts-accepts-at-most","errorCode":null,"errorMessage":"Fleet task '{}' metadata.coordination_contracts accepts at most 16 entries","messagePattern":"Fleet task '(.+?)' metadata\\.coordination_contracts accepts at most 16 entries","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/tui/src/fleet/worker_runtime.rs","lineNumber":598,"sourceCode":"    Ok(if segments.is_empty() {\n        \".\".to_string()\n    } else {\n        segments.join(\"/\")\n    })\n}\n\nfn fleet_coordination_contracts(task_spec: &FleetTaskSpec) -> Result<Vec<String>> {\n    let Some(value) = task_spec.metadata.get(\"coordination_contracts\") else {\n        return Ok(Vec::new());\n    };\n    let Some(values) = value.as_array() else {\n        bail!(\n            \"Fleet task '{}' metadata.coordination_contracts must be an array of strings\",\n            task_spec.id\n        );\n    };\n    if values.len() > 16 {\n        bail!(\n            \"Fleet task '{}' metadata.coordination_contracts accepts at most 16 entries\",\n            task_spec.id\n        );\n    }\n    let mut contracts = Vec::new();\n    for value in values {\n        let Some(value) = value.as_str() else {\n            bail!(\n                \"Fleet task '{}' metadata.coordination_contracts must contain only strings\",\n                task_spec.id\n            );\n        };\n        let value = value.trim();\n        if value.is_empty()\n            || value.chars().count() > 128\n            || value.chars().any(|ch| matches!(ch, '\\0' | '\\r' | '\\n'))\n        {\n            bail!(","sourceCodeStart":580,"sourceCodeEnd":616,"githubUrl":"https://github.com/Hmbown/CodeWhale/blob/73e0f67d83c59909b571efdfc88c4bc28c309cb1/crates/tui/src/fleet/worker_runtime.rs#L580-L616","documentation":"fleet_coordination_contracts enforces a hard bound of 16 coordination contract entries per Fleet task. A metadata.coordination_contracts array longer than 16 is rejected to keep worker coordination claims bounded and reviewable.","triggerScenarios":"fleet_task_to_worker_spec_with_profiles -> fleet_coordination_contracts where task_spec.metadata[\"coordination_contracts\"] is a valid array of strings but values.len() > 16.","commonSituations":"Generating task specs from a script that appends every shared resource as a contract; bulk-converted legacy configs listing dozens of leases; template expansion duplicating contract entries.","solutions":["Consolidate contracts into fewer, broader entries (e.g. one shared-resource lease instead of many).","Split the work across multiple Fleet tasks with at most 16 contracts each.","Deduplicate repeated contract strings in the metadata producer.","Move overflow coordination to a coordinating manager task rather than per-worker contracts."],"exampleFix":"// before: 20 contract entries in one task\n// after: dedupe/split\n\"coordination_contracts\": [\"lease:db\", \"lease:api\", \"lock:idx\"] // <= 16","handlingStrategy":"validation","validationCode":"if (contracts.length > 16) throw new Error(`coordination_contracts accepts at most 16 entries (got ${contracts.length})`);","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Cap contract generation at 16 entries per task.","Deduplicate contracts before writing metadata.","Split oversized coordination sets across multiple tasks."],"tags":["fleet","metadata","limit","coordination"],"backgroundTag":"value-out-of-range","analyzedSha":"73e0f67d83c59909b571efdfc88c4bc28c309cb1","analyzedAt":"2026-09-22T01:30:00.501Z","contentChangedAt":"2026-09-22T01:30:00.501Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}