summarizeSpec function
A one-line description of spec for human eyes.
Env keys only: a summary shows up in rig ls and in shared terminals,
and values are often credentials.
Implementation
String summarizeSpec(ContainerSpec spec) {
final parts = [
spec.image,
if (spec.exposedPorts.isNotEmpty)
'ports=${(spec.exposedPorts.toSet().toList()..sort()).join(',')}',
if (spec.env.isNotEmpty)
'env=${(spec.env.keys.toList()..sort()).join(',')}',
];
final summary = parts.join(' ');
if (summary.length <= _summaryBudget) return summary;
return '${summary.substring(0, _summaryBudget - 1)}…';
}