/// Builds the minimal `POST /api/inventory` document for a partial update. /// Merge mode treats omitted/null/empty fields as "don't touch", so only /// changed values are sent. Map buildUpsertPayload({ required int version, required List> resources, }) { return { 'version': version, 'resources': resources, }; } Map resourcePatch({ required String kind, required String name, Map fields = const {}, List? tags, Map? labels, String? notes, List? runsOn, }) { final patch = {'kind': kind, 'name': name}; patch.addAll(fields); if (tags != null) patch['tags'] = tags; if (labels != null) patch['labels'] = labels; if (notes != null) patch['notes'] = notes; if (runsOn != null) patch['runsOn'] = runsOn; return patch; }