(p: Partial<DeployConfig>, outputDirDefault: string)
| 203 | const missing: string[] = []; |
| 204 | for (const ch of hardwareBindings(req)) { |
| 205 | const b = p.hardware?.[ch.id]; |
| 206 | if (!b || !b.chipOrDevice) { |
| 207 | missing.push(`hardware "${ch.id}": device path`); |
| 208 | continue; |
| 209 | } |
| 210 | if (isAddressable(ch.family) && b.index === undefined) missing.push(`hardware "${ch.id}": index`); |
| 211 | } |
| 212 | // Uniqueness is validated by buildDeploymentSpec (canonical, post-ref); here we |
| 213 | // only fast-fail on field validity in the headless path. |
| 214 | missing.push(...familyMismatches(hardwareBindings(req), p.hardware ?? {})); |
| 215 | for (const ch of mqttBindings(req)) { |
| 216 | if (!p.mqtt?.[ch.id]?.brokerUrl) missing.push(`mqtt "${ch.id}": broker URL`); |
| 217 | } |
| 218 | for (const m of llmBindings(req)) { |
| 219 | const b = p.llmModels?.[m.id]; |
no outgoing calls
no test coverage detected