@@ -42,17 +42,13 @@ public function show()
4242 'name ' => 'engine_source ' ,
4343 'status ' => 'error ' ,
4444 'message ' => $ engineSource ['message ' ] ?? 'Waterline is not currently using the v2 operator bridge. ' ,
45- 'meta ' => [
46- 'configured ' => $ engineSource ['configured ' ] ?? null ,
47- 'resolved ' => $ engineSource ['resolved ' ] ?? null ,
48- 'uses_v2 ' => $ engineSource ['uses_v2 ' ] ?? false ,
49- 'v2_operator_surface_available ' => $ engineSource ['v2_operator_surface_available ' ] ?? false ,
50- 'issue_count ' => count (is_array ($ engineSource ['issues ' ] ?? null ) ? $ engineSource ['issues ' ] : []),
51- ],
45+ 'meta ' => $ this ->engineSourceMeta ($ engineSource ),
5246 ],
5347 ],
5448 'engine_source ' => $ engineSource ,
5549 'readiness_contract ' => $ engineSource ['readiness_contract ' ] ?? null ,
50+ 'readiness_issues ' => $ this ->engineSourceReadinessIssues ($ engineSource ),
51+ 'readiness_issue_codes ' => $ this ->engineSourceReadinessIssueCodes ($ engineSource ),
5652 ];
5753 $ payload ['coordination_alerts ' ] = $ this ->coordinationAlerts (
5854 $ payload ['checks ' ],
@@ -72,13 +68,7 @@ public function show()
7268 'name ' => 'engine_source ' ,
7369 'status ' => 'ok ' ,
7470 'message ' => $ engineSource ['message ' ] ?? 'Waterline is using the v2 operator bridge. ' ,
75- 'meta ' => [
76- 'configured ' => $ engineSource ['configured ' ] ?? null ,
77- 'resolved ' => $ engineSource ['resolved ' ] ?? null ,
78- 'uses_v2 ' => $ engineSource ['uses_v2 ' ] ?? false ,
79- 'v2_operator_surface_available ' => $ engineSource ['v2_operator_surface_available ' ] ?? false ,
80- 'issue_count ' => count (is_array ($ engineSource ['issues ' ] ?? null ) ? $ engineSource ['issues ' ] : []),
81- ],
71+ 'meta ' => $ this ->engineSourceMeta ($ engineSource ),
8272 ]);
8373 $ snapshot ['namespace ' ] = $ namespace ;
8474 $ snapshot ['operator_scope ' ] = OperatorScope::payload ();
@@ -102,6 +92,53 @@ public function show()
10292 return response ()->json ($ snapshot , HealthCheck::httpStatus ($ snapshot ));
10393 }
10494
95+ /**
96+ * @param array<string, mixed> $engineSource
97+ * @return array<string, mixed>
98+ */
99+ private function engineSourceMeta (array $ engineSource ): array
100+ {
101+ $ readinessIssues = $ this ->engineSourceReadinessIssues ($ engineSource );
102+
103+ return [
104+ 'configured ' => $ engineSource ['configured ' ] ?? null ,
105+ 'resolved ' => $ engineSource ['resolved ' ] ?? null ,
106+ 'uses_v2 ' => $ engineSource ['uses_v2 ' ] ?? false ,
107+ 'v2_operator_surface_available ' => $ engineSource ['v2_operator_surface_available ' ] ?? false ,
108+ 'issue_count ' => count (is_array ($ engineSource ['issues ' ] ?? null ) ? $ engineSource ['issues ' ] : []),
109+ 'readiness_issue_count ' => count ($ readinessIssues ),
110+ 'readiness_issue_codes ' => $ this ->engineSourceReadinessIssueCodes ($ engineSource ),
111+ 'readiness_issues ' => $ readinessIssues ,
112+ ];
113+ }
114+
115+ /**
116+ * @param array<string, mixed> $engineSource
117+ * @return list<array<string, mixed>>
118+ */
119+ private function engineSourceReadinessIssues (array $ engineSource ): array
120+ {
121+ return is_array ($ engineSource ['readiness_issues ' ] ?? null )
122+ ? array_values (array_filter ($ engineSource ['readiness_issues ' ], 'is_array ' ))
123+ : [];
124+ }
125+
126+ /**
127+ * @param array<string, mixed> $engineSource
128+ * @return list<string>
129+ */
130+ private function engineSourceReadinessIssueCodes (array $ engineSource ): array
131+ {
132+ if (is_array ($ engineSource ['readiness_issue_codes ' ] ?? null )) {
133+ return array_values (array_filter ($ engineSource ['readiness_issue_codes ' ], 'is_string ' ));
134+ }
135+
136+ return array_values (array_unique (array_filter (array_map (
137+ static fn (array $ issue ): mixed => $ issue ['code ' ] ?? null ,
138+ $ this ->engineSourceReadinessIssues ($ engineSource ),
139+ ), 'is_string ' )));
140+ }
141+
105142 /**
106143 * @param array<string, mixed> $snapshot
107144 * @return array<string, mixed>
0 commit comments