';
+ return $out;
+ }
+
+ private function render_core_tab($core) {
+ // Renders the three permanent Core slots. Pending slots show invitation text.
+ $slots = [
+ 'taxonomy-authority' => ['role' => 'Taxonomy Authority', 'desc' => 'The institutional source of the case law categories this diagnostic record is organized by.'],
+ 'methodology-certifier' => ['role' => 'Methodology Certifier', 'desc' => 'The law firm whose professional association with this project certifies the diagnostic record meets a standard the legal community can use.'],
+ 'peer-operator' => ['role' => 'Peer Operator', 'desc' => 'The cooperating Civic Infrastructure host who can independently verify, support, and if necessary continue this diagnostic record.'],
+ ];
+
+ $indexed = [];
+ foreach ($core as $entry) {
+ $indexed[$entry['slot'] ?? ''] = $entry;
+ }
+
+ $out = '';
+ foreach ($slots as $slot_id => $slot_def) {
+ $entry = $indexed[$slot_id] ?? [];
+ $status = $entry['status'] ?? 'pending';
+ $out .= '